From 50c9ede1682f39f6fcb4406bdec676585baa32c3 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 3 Aug 2022 15:45:23 -0600 Subject: [PATCH 001/226] Use an older kokkos develop branch --- .github/workflows/osx.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/osx.yml b/.github/workflows/osx.yml index 7851db9dfb..a90ca1c650 100644 --- a/.github/workflows/osx.yml +++ b/.github/workflows/osx.yml @@ -44,7 +44,7 @@ jobs: uses: actions/checkout@v2 with: repository: kokkos/kokkos - ref: develop + ref: 95d7082927d52d6971e71eebf346aad629118fe3 path: kokkos - name: configure_kokkos From 3b2ec4bce9dc9b68ed150d42d0e5b5ae7ac4ef42 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Thu, 4 Aug 2022 13:15:29 -0600 Subject: [PATCH 002/226] .github/workflows: use c++17 --- .github/workflows/osx.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/osx.yml b/.github/workflows/osx.yml index a90ca1c650..7851db9dfb 100644 --- a/.github/workflows/osx.yml +++ b/.github/workflows/osx.yml @@ -44,7 +44,7 @@ jobs: uses: actions/checkout@v2 with: repository: kokkos/kokkos - ref: 95d7082927d52d6971e71eebf346aad629118fe3 + ref: develop path: kokkos - name: configure_kokkos From 1b767bb3a37812224a807b3354c4c3c7af83230a Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Thu, 4 Aug 2022 13:18:23 -0600 Subject: [PATCH 003/226] .github/workflows: use c++17 --- .github/workflows/osx.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/osx.yml b/.github/workflows/osx.yml index 7851db9dfb..d24b68c7f2 100644 --- a/.github/workflows/osx.yml +++ b/.github/workflows/osx.yml @@ -55,7 +55,7 @@ jobs: cmake \ -DKokkos_ENABLE_${{ matrix.backend }}=ON \ -DCMAKE_CXX_FLAGS="-Werror" \ - -DCMAKE_CXX_STANDARD=14 \ + -DCMAKE_CXX_STANDARD=17 \ -DKokkos_ENABLE_COMPILER_WARNINGS=ON \ -DKokkos_ENABLE_DEBUG_BOUNDS_CHECK:BOOL=${{ matrix.debug_bounds_check }} \ -DKokkos_ENABLE_DEPRECATED_CODE_3=OFF \ From f9d3ea59670dfce8aed5edc5c6903c542c4e1ca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Fri, 3 Jun 2022 20:47:15 +0200 Subject: [PATCH 004/226] Add serial GEMV to KokkosBlas --- src/blas/KokkosBlas2_serial_gemv.hpp | 92 +++++++++ unit_test/blas/Test_Blas.hpp | 1 + unit_test/blas/Test_Blas2_serial_gemv.hpp | 235 ++++++++++++++++++++++ 3 files changed, 328 insertions(+) create mode 100644 src/blas/KokkosBlas2_serial_gemv.hpp create mode 100644 unit_test/blas/Test_Blas2_serial_gemv.hpp diff --git a/src/blas/KokkosBlas2_serial_gemv.hpp b/src/blas/KokkosBlas2_serial_gemv.hpp new file mode 100644 index 0000000000..973ef90192 --- /dev/null +++ b/src/blas/KokkosBlas2_serial_gemv.hpp @@ -0,0 +1,92 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS2_SERIAL_GEMV_HPP_ +#define KOKKOSBLAS2_SERIAL_GEMV_HPP_ + +#include "KokkosBatched_Gemv_Decl.hpp" +#include "KokkosBatched_Util.hpp" +#include "KokkosKernels_Error.hpp" + +namespace KokkosBlas { +namespace Experimental { + +template +void KOKKOS_INLINE_FUNCTION +gemv(const char trans, const ScalarType& alpha, const MatrixType& A, + const XVector& x, const typename YVector::non_const_value_type& beta, + const YVector& y) { + static_assert( + std::is_same::value && + std::is_same::value, + "Serial GEMV requires A,x and y to have same scalar type"); + + const auto run = [&](auto mode) { + using algo = KokkosBatched::Algo::Gemv::Default; + using serial_impl = KokkosBatched::SerialGemv; + // ensure same type for alpha and beta (required by serial impl) + const auto beta_ = static_cast(beta); + + serial_impl::invoke(alpha, A, x, beta_, y); + }; + + if (trans == 'N' || trans == 'n') { + return run(KokkosBatched::Trans::NoTranspose()); + } else if (trans == 'T' || trans == 't') { + return run(KokkosBatched::Trans::Transpose()); + // } else if (trans == 'C' || trans == 'c') { // NOT implemented + // return run(KokkosBatched::Trans::ConjTranspose()); + } else { // conjugate[no-transpose] not supported ? + std::ostringstream os; + os << "Matrix mode not supported: " << trans << std::endl; + KokkosKernels::Impl::throw_runtime_exception(os.str()); + } +} + +} // namespace Experimental +} // namespace KokkosBlas + +#endif diff --git a/unit_test/blas/Test_Blas.hpp b/unit_test/blas/Test_Blas.hpp index c607e74ca8..2d168fe0a5 100644 --- a/unit_test/blas/Test_Blas.hpp +++ b/unit_test/blas/Test_Blas.hpp @@ -43,6 +43,7 @@ #include "Test_Blas2_gemv.hpp" // Team Blas 2 +#include "Test_Blas2_serial_gemv.hpp" #include "Test_Blas2_team_gemv.hpp" // Blas 3 diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp new file mode 100644 index 0000000000..802e11f241 --- /dev/null +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -0,0 +1,235 @@ +// Note: Luc Berger-Vergiat 04/14/21 +// This tests uses KOKKOS_LAMBDA so we need +// to make sure that these are enabled in +// the CUDA backend before including this test. +#if !defined(TEST_CUDA_BLAS_CPP) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) + +#include +#include +#include +#include +#include +#include + +namespace Test { +template +void impl_test_serial_gemv(const char *mode, int N, int M) { + typedef typename ViewTypeA::value_type ScalarA; + typedef typename ViewTypeX::value_type ScalarX; + typedef typename ViewTypeY::value_type ScalarY; + + typedef multivector_layout_adapter vfA_type; + typedef Kokkos::View< + ScalarX * [2], + typename std::conditional::value, + Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, + Device> + BaseTypeX; + typedef Kokkos::View< + ScalarY * [2], + typename std::conditional::value, + Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, + Device> + BaseTypeY; + + ScalarA a = 3; + ScalarX b = 5; + double eps = (std::is_same::value || + std::is_same>::value) + ? 2 * 1e-5 + : 1e-7; + + const auto Nt = mode[0] == 'N' ? N : M; + const auto Mt = mode[0] == 'N' ? M : N; + typename vfA_type::BaseType b_A("A", Nt, Mt); + BaseTypeX b_x("X", M); + BaseTypeY b_y("Y", N); + BaseTypeY b_org_y("Org_Y", N); + + ViewTypeA A = vfA_type::view(b_A); + ViewTypeX x = Kokkos::subview(b_x, Kokkos::ALL(), 0); + ViewTypeY y = Kokkos::subview(b_y, Kokkos::ALL(), 0); + typename ViewTypeX::const_type c_x = x; + typename ViewTypeA::const_type c_A = A; + + typedef multivector_layout_adapter h_vfA_type; + + typename h_vfA_type::BaseType h_b_A = Kokkos::create_mirror_view(b_A); + typename BaseTypeX::HostMirror h_b_x = Kokkos::create_mirror_view(b_x); + typename BaseTypeY::HostMirror h_b_y = Kokkos::create_mirror_view(b_y); + + typename ViewTypeA::HostMirror h_A = h_vfA_type::view(h_b_A); + typename ViewTypeX::HostMirror h_x = Kokkos::subview(h_b_x, Kokkos::ALL(), 0); + typename ViewTypeY::HostMirror h_y = Kokkos::subview(h_b_y, Kokkos::ALL(), 0); + + Kokkos::Random_XorShift64_Pool rand_pool( + 13718); + + Kokkos::fill_random(b_x, rand_pool, ScalarX(10)); + Kokkos::fill_random(b_y, rand_pool, ScalarY(10)); + Kokkos::fill_random(b_A, rand_pool, ScalarA(10)); + + Kokkos::deep_copy(b_org_y, b_y); + + Kokkos::deep_copy(h_b_x, b_x); + Kokkos::deep_copy(h_b_y, b_y); + Kokkos::deep_copy(h_b_A, b_A); + + ScalarY expected_result = 0; + if (mode[0] != 'N' && mode[0] != 'T' && mode[0] != 'C') { + throw std::runtime_error("incorrect matrix mode letter !"); + } + typedef Kokkos::Details::ArithTraits ATV; + for (int i = 0; i < N; i++) { + ScalarY y_i = ScalarY(); + for (int j = 0; j < M; j++) { + const auto a_val = mode[0] == 'C' + ? ATV::conj(h_A(j, i)) + : (mode[0] == 'T' ? h_A(j, i) : h_A(i, j)); + y_i += a_val * h_x(j); + } + expected_result += (b * h_y(i) + a * y_i) * (b * h_y(i) + a * y_i); + } + + char trans = mode[0]; + + KokkosBlas::Experimental::gemv(trans, a, A, x, b, y); + + ScalarY nonconst_nonconst_result = KokkosBlas::dot(y, y); + EXPECT_NEAR_KK(nonconst_nonconst_result, expected_result, + eps * expected_result); + + Kokkos::deep_copy(b_y, b_org_y); + + KokkosBlas::Experimental::gemv(trans, a, A, c_x, b, y); + + ScalarY const_nonconst_result = KokkosBlas::dot(y, y); + EXPECT_NEAR_KK(const_nonconst_result, expected_result, eps * expected_result); + + Kokkos::deep_copy(b_y, b_org_y); + + KokkosBlas::Experimental::gemv(trans, a, c_A, c_x, b, y); + + ScalarY const_const_result = KokkosBlas::dot(y, y); + EXPECT_NEAR_KK(const_const_result, expected_result, eps * expected_result); +} +} // namespace Test + +template +int test_serial_gemv(const char *mode) { +#if defined(KOKKOSKERNELS_INST_LAYOUTLEFT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ll; + typedef Kokkos::View view_type_b_ll; + typedef Kokkos::View view_type_c_ll; + Test::impl_test_serial_gemv(mode, 0, 1024); + Test::impl_test_serial_gemv(mode, 13, 1024); + Test::impl_test_serial_gemv(mode, 124, 124); +#endif + +#if defined(KOKKOSKERNELS_INST_LAYOUTRIGHT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_lr; + typedef Kokkos::View view_type_b_lr; + typedef Kokkos::View view_type_c_lr; + Test::impl_test_serial_gemv(mode, 0, 1024); + Test::impl_test_serial_gemv(mode, 13, 1024); + Test::impl_test_serial_gemv(mode, 124, 124); +#endif + +#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + typedef Kokkos::View view_type_b_ls; + typedef Kokkos::View view_type_c_ls; + Test::impl_test_serial_gemv(mode, 0, 1024); + Test::impl_test_serial_gemv(mode, 13, 1024); + Test::impl_test_serial_gemv(mode, 124, 124); +#endif + +#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + Test::impl_test_serial_gemv(mode, 124, 124); + Test::impl_test_serial_gemv(mode, 124, 124); +#endif + + return 1; +} + +template +int test_serial_gemv(const char *mode) { + return test_serial_gemv(mode); +} + +#if defined(KOKKOSKERNELS_INST_FLOAT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, serial_gemv_float) { + test_serial_gemv("N"); + test_serial_gemv("T"); +} +#endif + +#if defined(KOKKOSKERNELS_INST_DOUBLE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, serial_gemv_double) { + test_serial_gemv("N"); + test_serial_gemv("T"); +} +#endif + +#if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, serial_gemv_complex_double) { + test_serial_gemv, TestExecSpace>("N"); + test_serial_gemv, TestExecSpace>("T"); +} +#endif + +#if defined(KOKKOSKERNELS_INST_COMPLEX_FLOAT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, serial_gemv_complex_float) { + test_serial_gemv, TestExecSpace>("N"); + test_serial_gemv, TestExecSpace>("T"); +} +#endif + +#if defined(KOKKOSKERNELS_INST_INT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, serial_gemv_int) { + test_serial_gemv("N"); + test_serial_gemv("T"); +} +#endif + +#if 0 // mixed scalar types not allowed in batched impl +#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) +TEST_F(TestCategory, serial_gemv_mixed) { + test_serial_gemv("N"); + test_serial_gemv("T"); +} +#endif +#endif + +#endif // Check for lambda availability on CUDA backend From 09ffa1c1aa16e364872f8c070e91c132be700534 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Wed, 8 Jun 2022 22:50:16 +0200 Subject: [PATCH 005/226] fix: avoid lambda inside kernels --- src/blas/KokkosBlas2_serial_gemv.hpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/blas/KokkosBlas2_serial_gemv.hpp b/src/blas/KokkosBlas2_serial_gemv.hpp index 973ef90192..2e6bb2d926 100644 --- a/src/blas/KokkosBlas2_serial_gemv.hpp +++ b/src/blas/KokkosBlas2_serial_gemv.hpp @@ -64,22 +64,17 @@ gemv(const char trans, const ScalarType& alpha, const MatrixType& A, typename YVector::non_const_value_type>::value, "Serial GEMV requires A,x and y to have same scalar type"); - const auto run = [&](auto mode) { - using algo = KokkosBatched::Algo::Gemv::Default; - using serial_impl = KokkosBatched::SerialGemv; - // ensure same type for alpha and beta (required by serial impl) - const auto beta_ = static_cast(beta); - - serial_impl::invoke(alpha, A, x, beta_, y); - }; + using algo = KokkosBatched::Algo::Gemv::Default; + // ensure same type for alpha and beta (required by serial impl) + const auto beta_ = static_cast(beta); if (trans == 'N' || trans == 'n') { - return run(KokkosBatched::Trans::NoTranspose()); + using mode = KokkosBatched::Trans::NoTranspose; + KokkosBatched::SerialGemv::invoke(alpha, A, x, beta_, y); } else if (trans == 'T' || trans == 't') { - return run(KokkosBatched::Trans::Transpose()); - // } else if (trans == 'C' || trans == 'c') { // NOT implemented - // return run(KokkosBatched::Trans::ConjTranspose()); - } else { // conjugate[no-transpose] not supported ? + using mode = KokkosBatched::Trans::Transpose; + KokkosBatched::SerialGemv::invoke(alpha, A, x, beta_, y); + } else { // NOT supported: Conjugate, ConjTranspose std::ostringstream os; os << "Matrix mode not supported: " << trans << std::endl; KokkosKernels::Impl::throw_runtime_exception(os.str()); From 615a34f122b7144ec94320f9eae414df8853a80d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Wed, 22 Jun 2022 21:08:05 +0200 Subject: [PATCH 006/226] fix missing include --- src/blas/impl/KokkosBlas_util.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/blas/impl/KokkosBlas_util.hpp b/src/blas/impl/KokkosBlas_util.hpp index 378382545a..9ed12899da 100644 --- a/src/blas/impl/KokkosBlas_util.hpp +++ b/src/blas/impl/KokkosBlas_util.hpp @@ -45,6 +45,8 @@ #ifndef KOKKOS_BLAS_UTIL_HPP #define KOKKOS_BLAS_UTIL_HPP +#include "Kokkos_ArithTraits.hpp" + namespace KokkosBlas { namespace Impl { From 9048c685e378e22a5cc04c22a655e3c59123dbdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Thu, 16 Jun 2022 00:42:49 +0200 Subject: [PATCH 007/226] Move SerialGEMV implementation from KokkosBatched to KokkosBlas --- src/batched/KokkosBatched_Util.hpp | 103 +-------- src/batched/dense/KokkosBatched_Gemv_Decl.hpp | 21 +- ...osBatched_InnerMultipleDotProduct_Decl.hpp | 33 --- ...KokkosBatched_Gemv_TeamVector_Internal.hpp | 2 +- .../impl/KokkosBatched_Gemv_Team_Internal.hpp | 4 +- ...kosBatched_ShiftedTrsv_Serial_Internal.hpp | 1 - .../KokkosBatched_Trsv_Serial_Internal.hpp | 6 +- .../impl/KokkosBatched_GMRES_Serial_Impl.hpp | 11 +- src/blas/KokkosBlas2_serial_gemv.hpp | 14 +- .../impl/KokkosBlas2_serial_gemv_impl.hpp} | 87 ++++++-- ...sBlas2_serial_gemv_inner_multiple_dot.hpp} | 81 ++++++- .../KokkosBlas2_serial_gemv_internal.hpp} | 66 ++++-- src/blas/impl/KokkosBlas_util.hpp | 116 ++++++++++- .../KokkosSparse_spmv_blockcrsmatrix_impl.hpp | 17 +- .../impl/KokkosSparse_spmv_bsrmatrix_impl.hpp | 16 +- .../impl/KokkosSparse_sptrsv_solve_impl.hpp | 1 - .../batched/dense/Test_Batched_Dense.hpp | 3 - .../batched/dense/Test_Batched_SerialGemv.hpp | 148 ------------- .../dense/Test_Batched_SerialGemv_Complex.hpp | 43 ---- .../dense/Test_Batched_SerialGemv_Real.hpp | 30 --- .../batched/dense/Test_Batched_SerialGesv.hpp | 6 +- .../batched/dense/Test_Batched_TeamGemv.hpp | 2 - .../batched/dense/Test_Batched_TeamGesv.hpp | 6 +- .../dense/Test_Batched_TeamVectorGesv.hpp | 6 +- unit_test/blas/Test_Blas.hpp | 3 +- unit_test/blas/Test_Blas2_serial_gemv.hpp | 197 +++++++++++++++--- 26 files changed, 540 insertions(+), 483 deletions(-) delete mode 100644 src/batched/dense/KokkosBatched_InnerMultipleDotProduct_Decl.hpp rename src/{batched/dense/impl/KokkosBatched_Gemv_Serial_Impl.hpp => blas/impl/KokkosBlas2_serial_gemv_impl.hpp} (62%) rename src/{batched/dense/impl/KokkosBatched_InnerMultipleDotProduct_Serial_Impl.hpp => blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp} (70%) rename src/{batched/dense/impl/KokkosBatched_Gemv_Serial_Internal.hpp => blas/impl/KokkosBlas2_serial_gemv_internal.hpp} (51%) delete mode 100644 unit_test/batched/dense/Test_Batched_SerialGemv.hpp delete mode 100644 unit_test/batched/dense/Test_Batched_SerialGemv_Complex.hpp delete mode 100644 unit_test/batched/dense/Test_Batched_SerialGemv_Real.hpp diff --git a/src/batched/KokkosBatched_Util.hpp b/src/batched/KokkosBatched_Util.hpp index 46b97ee039..e0ade6e481 100644 --- a/src/batched/KokkosBatched_Util.hpp +++ b/src/batched/KokkosBatched_Util.hpp @@ -21,6 +21,7 @@ #include "KokkosKernels_config.h" #include "KokkosKernels_SimpleUtils.hpp" +#include "KokkosBlas_util.hpp" // TPL macros #if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) @@ -217,11 +218,8 @@ struct AVX { }; //////// Tags for BLAS //////// -struct Trans { - struct Transpose {}; - struct NoTranspose {}; - struct ConjTranspose {}; -}; + +using KokkosBlas::Trans; struct Side { struct Left {}; @@ -351,100 +349,7 @@ struct algo_level2_blocked_mb_impl { #endif -struct Algo { - struct Level3 { - struct Unblocked { - static const char *name() { return "Unblocked"; } - }; - struct Blocked { - static const char *name() { return "Blocked"; } - // TODO:: for now harwire the blocksizes; this should reflect - // regieter blocking (not about team parallelism). - // this mb should vary according to - // - team policy (smaller) or range policy (bigger) - // - space (gpu vs host) - // - blocksize input (blk <= 4 mb = 2, otherwise mb = 4), etc. -#if defined(KOKKOS_IF_ON_HOST) - static constexpr KOKKOS_FUNCTION int mb() { - KOKKOS_IF_ON_HOST((return 4;)) - KOKKOS_IF_ON_DEVICE((return 2;)) - } - -#else // FIXME remove when requiring minimum version of Kokkos 3.6 - static constexpr KOKKOS_FUNCTION int mb() { - return algo_level3_blocked_mb_impl< - Kokkos::Impl::ActiveExecutionMemorySpace>::value; - } - -#endif - }; - struct MKL { - static const char *name() { return "MKL"; } - }; - struct CompactMKL { - static const char *name() { return "CompactMKL"; } - }; - - // When this is first developed, unblocked algorithm is a naive - // implementation and blocked algorithm uses register blocking variant of - // algorithm (manual unrolling). This distinction is almost meaningless and - // it just adds more complications. Eventually, the blocked version will be - // removed and we only use the default algorithm. For testing and - // development purpose, we still leave algorithm tag in the template - // arguments. - using Default = Unblocked; - }; - - using Gemm = Level3; - using Trsm = Level3; - using Trmm = Level3; - using Trtri = Level3; - using LU = Level3; - using InverseLU = Level3; - using SolveLU = Level3; - using QR = Level3; - using UTV = Level3; - - struct Level2 { - struct Unblocked {}; - struct Blocked { - // TODO:: for now harwire the blocksizes; this should reflect - // regieter blocking (not about team parallelism). - // this mb should vary according to - // - team policy (smaller) or range policy (bigger) - // - space (cuda vs host) - // - blocksize input (blk <= 4 mb = 2, otherwise mb = 4), etc. -#if defined(KOKKOS_IF_ON_HOST) - static constexpr KOKKOS_FUNCTION int mb() { - KOKKOS_IF_ON_HOST((return 4;)) - KOKKOS_IF_ON_DEVICE((return 1;)) - } - -#else // FIXME remove when requiring minimum version of Kokkos 3.6 - static constexpr KOKKOS_FUNCTION int mb() { - return algo_level2_blocked_mb_impl< - Kokkos::Impl::ActiveExecutionMemorySpace>::value; - } - -#endif - }; - struct MKL {}; - struct CompactMKL {}; - - // When this is first developed, unblocked algorithm is a naive - // implementation and blocked algorithm uses register blocking variant of - // algorithm (manual unrolling). This distinction is almost meaningless and - // it just adds more complications. Eventually, the blocked version will be - // removed and we only use the default algorithm. For testing and - // development purpose, we still leave algorithm tag in the template - // arguments. - using Default = Unblocked; - }; - - using Gemv = Level2; - using Trsv = Level2; - using ApplyQ = Level2; -}; +using KokkosBlas::Algo; struct Util { template diff --git a/src/batched/dense/KokkosBatched_Gemv_Decl.hpp b/src/batched/dense/KokkosBatched_Gemv_Decl.hpp index c467373014..ee66898316 100644 --- a/src/batched/dense/KokkosBatched_Gemv_Decl.hpp +++ b/src/batched/dense/KokkosBatched_Gemv_Decl.hpp @@ -21,7 +21,9 @@ struct SerialGemv { const xViewType & /*x*/, const ScalarType /*beta*/, const yViewType & /*y*/) { - assert(false && "Error: encounter dummy impl"); + assert(false && + "Error: KokkosBatched::SerialGemv has been deprecated - use " + "KokkosBlas::SerialGemv instead"); return 0; } }; @@ -91,19 +93,18 @@ struct Gemv { } // namespace KokkosBatched -#include "KokkosBatched_Gemv_Serial_Impl.hpp" #include "KokkosBatched_Gemv_Team_Impl.hpp" #include "KokkosBatched_Gemv_TeamVector_Impl.hpp" -#define KOKKOSBATCHED_SERIAL_GEMV_NO_TRANSPOSE_INTERNAL_INVOKE( \ - ALGOTYPE, M, N, ALPHA, A, AS0, AS1, X, XS, BETA, Y, YS) \ - KokkosBatched::SerialGemvInternal::invoke(M, N, ALPHA, A, AS0, \ - AS1, X, XS, BETA, Y, YS) +#define KOKKOSBATCHED_SERIAL_GEMV_NO_TRANSPOSE_INTERNAL_INVOKE( \ + ALGOTYPE, M, N, ALPHA, A, AS0, AS1, X, XS, BETA, Y, YS) \ + KokkosBlas::Impl::SerialGemvInternal::invoke( \ + M, N, ALPHA, A, AS0, AS1, X, XS, BETA, Y, YS) -#define KOKKOSBATCHED_SERIAL_GEMV_TRANSPOSE_INTERNAL_INVOKE( \ - ALGOTYPE, M, N, ALPHA, A, AS0, AS1, X, XS, BETA, Y, YS) \ - KokkosBatched::SerialGemvInternal::invoke(N, M, ALPHA, A, AS1, \ - AS0, X, XS, BETA, Y, YS) +#define KOKKOSBATCHED_SERIAL_GEMV_TRANSPOSE_INTERNAL_INVOKE( \ + ALGOTYPE, M, N, ALPHA, A, AS0, AS1, X, XS, BETA, Y, YS) \ + KokkosBlas::Impl::SerialGemvInternal::invoke( \ + N, M, ALPHA, A, AS1, AS0, X, XS, BETA, Y, YS) #define KOKKOSBATCHED_TEAM_GEMV_NO_TRANSPOSE_INTERNAL_INVOKE( \ ALGOTYPE, MEMBER, M, N, ALPHA, A, AS0, AS1, X, XS, BETA, Y, YS) \ diff --git a/src/batched/dense/KokkosBatched_InnerMultipleDotProduct_Decl.hpp b/src/batched/dense/KokkosBatched_InnerMultipleDotProduct_Decl.hpp deleted file mode 100644 index aee475df0c..0000000000 --- a/src/batched/dense/KokkosBatched_InnerMultipleDotProduct_Decl.hpp +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __KOKKOSBATCHED_INNER_MULTIPLE_DOT_PRODUCT_DECL_HPP__ -#define __KOKKOSBATCHED_INNER_MULTIPLE_DOT_PRODUCT_DECL_HPP__ - -/// \author Kyungjoo Kim (kyukim@sandia.gov) - -namespace KokkosBatched { - -template -struct InnerMultipleDotProduct { - const int _as0, _as1, _xs0, _ys0; - - KOKKOS_INLINE_FUNCTION - InnerMultipleDotProduct(const int as0, const int as1, const int xs0, - const int ys0) - : _as0(as0), _as1(as1), _xs0(xs0), _ys0(ys0) {} - - template - KOKKOS_INLINE_FUNCTION int serial_invoke(const ScalarType alpha, - const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, - const int n, - /**/ ValueType *KOKKOS_RESTRICT y); - - template - KOKKOS_INLINE_FUNCTION int serial_invoke(const ScalarType alpha, - const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, - const int m, const int n, - /**/ ValueType *KOKKOS_RESTRICT y); -}; -} // namespace KokkosBatched - -#endif diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp b/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp index 406115aa4f..4f47212b94 100644 --- a/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp +++ b/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp @@ -7,7 +7,7 @@ #include "KokkosBlas1_set_impl.hpp" #include "KokkosBlas1_team_scal_impl.hpp" -#include "KokkosBatched_InnerMultipleDotProduct_Serial_Impl.hpp" +#include "KokkosBlas2_serial_gemv_inner_multiple_dot.hpp" namespace KokkosBatched { diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp b/src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp index cf611db5ca..b556b6e143 100644 --- a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp +++ b/src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp @@ -7,7 +7,7 @@ #include "KokkosBlas1_set_impl.hpp" #include "KokkosBlas1_team_scal_impl.hpp" -#include "KokkosBatched_InnerMultipleDotProduct_Serial_Impl.hpp" +#include "KokkosBlas2_serial_gemv_inner_multiple_dot.hpp" namespace KokkosBatched { @@ -95,7 +95,7 @@ KOKKOS_INLINE_FUNCTION int TeamGemvInternal::invoke( if (beta != one) member.team_barrier(); - InnerMultipleDotProduct inner(as0, as1, xs0, ys0); + KokkosBlas::Impl::InnerMultipleDotProduct inner(as0, as1, xs0, ys0); const int tsize = member.team_size(); const int mb_a = m / tsize + (m % tsize > 0), mb_b = mbAlgo; // Made this non-const in order to WORKAROUND issue #349 diff --git a/src/batched/dense/impl/KokkosBatched_ShiftedTrsv_Serial_Internal.hpp b/src/batched/dense/impl/KokkosBatched_ShiftedTrsv_Serial_Internal.hpp index c6aec99d18..03838dfae5 100644 --- a/src/batched/dense/impl/KokkosBatched_ShiftedTrsv_Serial_Internal.hpp +++ b/src/batched/dense/impl/KokkosBatched_ShiftedTrsv_Serial_Internal.hpp @@ -8,7 +8,6 @@ #include "KokkosBlas1_set_impl.hpp" #include "KokkosBlas1_team_scal_impl.hpp" #include "KokkosBatched_InnerTrsm_Serial_Impl.hpp" -#include "KokkosBatched_Gemv_Serial_Internal.hpp" namespace KokkosBatched { diff --git a/src/batched/dense/impl/KokkosBatched_Trsv_Serial_Internal.hpp b/src/batched/dense/impl/KokkosBatched_Trsv_Serial_Internal.hpp index 926003083a..69570da623 100644 --- a/src/batched/dense/impl/KokkosBatched_Trsv_Serial_Internal.hpp +++ b/src/batched/dense/impl/KokkosBatched_Trsv_Serial_Internal.hpp @@ -8,7 +8,7 @@ #include "KokkosBlas1_set_impl.hpp" #include "KokkosBlas1_serial_scal_impl.hpp" #include "KokkosBatched_InnerTrsm_Serial_Impl.hpp" -#include "KokkosBatched_Gemv_Serial_Internal.hpp" +#include "KokkosBlas2_serial_gemv_internal.hpp" namespace KokkosBatched { @@ -103,7 +103,7 @@ KOKKOS_INLINE_FUNCTION int SerialTrsvInternalLower::invoke( trsm_n.serial_invoke(Ap, pb, 1, bp); // gemv update - SerialGemvInternal::invoke( + KokkosBlas::Impl::SerialGemvInternal::invoke( m - p - pb, pb, minus_one, Ap + pb * as0, as0, as1, bp, bs0, one, bp + pb * bs0, bs0); } @@ -196,7 +196,7 @@ KOKKOS_INLINE_FUNCTION int SerialTrsvInternalUpper::invoke( trsm_n.serial_invoke(Ap, pb, 1, bp); // gemv update - SerialGemvInternal::invoke( + KokkosBlas::Impl::SerialGemvInternal::invoke( p, pb, minus_one, Ap - p * as0, as0, as1, bp, bs0, one, b, bs0); } } diff --git a/src/batched/sparse/impl/KokkosBatched_GMRES_Serial_Impl.hpp b/src/batched/sparse/impl/KokkosBatched_GMRES_Serial_Impl.hpp index 5e4d0aba9b..f8435754f6 100644 --- a/src/batched/sparse/impl/KokkosBatched_GMRES_Serial_Impl.hpp +++ b/src/batched/sparse/impl/KokkosBatched_GMRES_Serial_Impl.hpp @@ -54,7 +54,7 @@ #include "KokkosBatched_Givens_Serial_Internal.hpp" #include "KokkosBatched_Trsm_Decl.hpp" #include "KokkosBatched_Identity.hpp" -#include "KokkosBatched_Gemv_Decl.hpp" +#include "KokkosBlas2_serial_gemv_impl.hpp" namespace KokkosBatched { @@ -181,11 +181,12 @@ KOKKOS_INLINE_FUNCTION int SerialGMRES::invoke(const OperatorType& A, Kokkos::subview(H_view, l, j, Kokkos::make_pair(0, (int)j + 1)); // Inner products - SerialGemv::invoke( - 1, V_old, W_l, 0, H_old); + KokkosBlas::SerialGemv::invoke(1, V_old, W_l, 0, + H_old); // Update - SerialGemv::invoke( + KokkosBlas::SerialGemv::invoke( -1, V_old, H_old, 1, W_l); } } @@ -286,7 +287,7 @@ KOKKOS_INLINE_FUNCTION int SerialGMRES::invoke(const OperatorType& A, if (handle.get_ortho_strategy() == 0) { for (OrdinalType l = 0; l < numMatrices; ++l) { - SerialGemv::invoke( + KokkosBlas::SerialGemv::invoke( 1, Kokkos::subview(V_view, l, first_indices, Kokkos::ALL), Kokkos::subview(G, l, first_indices), 1, Kokkos::subview(_X, l, Kokkos::ALL)); diff --git a/src/blas/KokkosBlas2_serial_gemv.hpp b/src/blas/KokkosBlas2_serial_gemv.hpp index 2e6bb2d926..2c45fbdd1f 100644 --- a/src/blas/KokkosBlas2_serial_gemv.hpp +++ b/src/blas/KokkosBlas2_serial_gemv.hpp @@ -45,8 +45,8 @@ #ifndef KOKKOSBLAS2_SERIAL_GEMV_HPP_ #define KOKKOSBLAS2_SERIAL_GEMV_HPP_ -#include "KokkosBatched_Gemv_Decl.hpp" -#include "KokkosBatched_Util.hpp" +#include "KokkosBlas2_serial_gemv_impl.hpp" +#include "KokkosBlas_util.hpp" #include "KokkosKernels_Error.hpp" namespace KokkosBlas { @@ -64,16 +64,16 @@ gemv(const char trans, const ScalarType& alpha, const MatrixType& A, typename YVector::non_const_value_type>::value, "Serial GEMV requires A,x and y to have same scalar type"); - using algo = KokkosBatched::Algo::Gemv::Default; + using algo = KokkosBlas::Algo::Gemv::Default; // ensure same type for alpha and beta (required by serial impl) const auto beta_ = static_cast(beta); if (trans == 'N' || trans == 'n') { - using mode = KokkosBatched::Trans::NoTranspose; - KokkosBatched::SerialGemv::invoke(alpha, A, x, beta_, y); + using mode = KokkosBlas::Trans::NoTranspose; + KokkosBlas::SerialGemv::invoke(alpha, A, x, beta_, y); } else if (trans == 'T' || trans == 't') { - using mode = KokkosBatched::Trans::Transpose; - KokkosBatched::SerialGemv::invoke(alpha, A, x, beta_, y); + using mode = KokkosBlas::Trans::Transpose; + KokkosBlas::SerialGemv::invoke(alpha, A, x, beta_, y); } else { // NOT supported: Conjugate, ConjTranspose std::ostringstream os; os << "Matrix mode not supported: " << trans << std::endl; diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_Serial_Impl.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp similarity index 62% rename from src/batched/dense/impl/KokkosBatched_Gemv_Serial_Impl.hpp rename to src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp index c0ba6471be..117e7cbc66 100644 --- a/src/batched/dense/impl/KokkosBatched_Gemv_Serial_Impl.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp @@ -1,12 +1,69 @@ -#ifndef __KOKKOSBATCHED_GEMV_SERIAL_IMPL_HPP__ -#define __KOKKOSBATCHED_GEMV_SERIAL_IMPL_HPP__ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef __KOKKOSBLAS_GEMV_SERIAL_IMPL_HPP__ +#define __KOKKOSBLAS_GEMV_SERIAL_IMPL_HPP__ /// \author Kyungjoo Kim (kyukim@sandia.gov) -#include "KokkosBatched_Util.hpp" -#include "KokkosBatched_Gemv_Serial_Internal.hpp" - -namespace KokkosBatched { +#include "KokkosBlas_util.hpp" +#include "KokkosBlas2_serial_gemv_internal.hpp" + +namespace KokkosBlas { + +template +struct SerialGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke(const ScalarType /*alpha*/, + const AViewType & /*A*/, + const xViewType & /*x*/, + const ScalarType /*beta*/, + const yViewType & /*y*/) { + assert(false && "Error: encounter dummy impl"); + return 0; + } +}; /// /// Serial Impl @@ -24,9 +81,7 @@ namespace KokkosBatched { /// NT /// -#if defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL__) && \ - defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL_BATCHED__) && \ - defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL_COMPACT_BATCHED__) +#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ template <> template @@ -74,7 +129,7 @@ KOKKOS_INLINE_FUNCTION int SerialGemv::invoke( const ScalarType alpha, const AViewType &A, const xViewType &x, const ScalarType beta, const yViewType &y) { - return SerialGemvInternal::invoke( + return Impl::SerialGemvInternal::invoke( A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); } @@ -86,7 +141,7 @@ KOKKOS_INLINE_FUNCTION int SerialGemv::invoke( const ScalarType alpha, const AViewType &A, const xViewType &x, const ScalarType beta, const yViewType &y) { - return SerialGemvInternal::invoke( + return Impl::SerialGemvInternal::invoke( A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); } @@ -94,9 +149,7 @@ SerialGemv::invoke( /// T /// -#if defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL__) && \ - defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL_BATCHED__) && \ - defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL_COMPACT_BATCHED__) +#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ template <> template @@ -144,7 +197,7 @@ KOKKOS_INLINE_FUNCTION int SerialGemv::invoke( const ScalarType alpha, const AViewType &A, const xViewType &x, const ScalarType beta, const yViewType &y) { - return SerialGemvInternal::invoke( + return Impl::SerialGemvInternal::invoke( A.extent(1), A.extent(0), alpha, A.data(), A.stride_1(), A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); } @@ -156,11 +209,11 @@ KOKKOS_INLINE_FUNCTION int SerialGemv::invoke( const ScalarType alpha, const AViewType &A, const xViewType &x, const ScalarType beta, const yViewType &y) { - return SerialGemvInternal::invoke( + return Impl::SerialGemvInternal::invoke( A.extent(1), A.extent(0), alpha, A.data(), A.stride_1(), A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); } -} // namespace KokkosBatched +} // namespace KokkosBlas #endif diff --git a/src/batched/dense/impl/KokkosBatched_InnerMultipleDotProduct_Serial_Impl.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp similarity index 70% rename from src/batched/dense/impl/KokkosBatched_InnerMultipleDotProduct_Serial_Impl.hpp rename to src/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp index 70354c5e15..484732c63b 100644 --- a/src/batched/dense/impl/KokkosBatched_InnerMultipleDotProduct_Serial_Impl.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp @@ -1,12 +1,77 @@ -#ifndef __KOKKOSBATCHED_INNER_MULTIPLE_DOT_PRODUCT_SERIAL_IMPL_HPP__ -#define __KOKKOSBATCHED_INNER_MULTIPLE_DOT_PRODUCT_SERIAL_IMPL_HPP__ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef __KOKKOSBLAS_INNER_MULTIPLE_DOT_PRODUCT_SERIAL_IMPL_HPP__ +#define __KOKKOSBLAS_INNER_MULTIPLE_DOT_PRODUCT_SERIAL_IMPL_HPP__ /// \author Kyungjoo Kim (kyukim@sandia.gov) -#include "KokkosBatched_Util.hpp" -#include "KokkosBatched_InnerMultipleDotProduct_Decl.hpp" - -namespace KokkosBatched { +namespace KokkosBlas { +namespace Impl { + +template +struct InnerMultipleDotProduct { + const int _as0, _as1, _xs0, _ys0; + + KOKKOS_INLINE_FUNCTION + InnerMultipleDotProduct(const int as0, const int as1, const int xs0, + const int ys0) + : _as0(as0), _as1(as1), _xs0(xs0), _ys0(ys0) {} + + template + KOKKOS_INLINE_FUNCTION int serial_invoke(const ScalarType alpha, + const ValueType *KOKKOS_RESTRICT A, + const ValueType *KOKKOS_RESTRICT x, + const int n, + /**/ ValueType *KOKKOS_RESTRICT y); + + template + KOKKOS_INLINE_FUNCTION int serial_invoke(const ScalarType alpha, + const ValueType *KOKKOS_RESTRICT A, + const ValueType *KOKKOS_RESTRICT x, + const int m, const int n, + /**/ ValueType *KOKKOS_RESTRICT y); +}; /// /// Dot Product for GEMV @@ -300,6 +365,6 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<1>::serial_invoke( } return 0; } -} // namespace KokkosBatched +}} // namespace KokkosBlas::Impl -#endif +#endif // __KOKKOSBLAS_INNER_MULTIPLE_DOT_PRODUCT_SERIAL_IMPL_HPP__ diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_Serial_Internal.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp similarity index 51% rename from src/batched/dense/impl/KokkosBatched_Gemv_Serial_Internal.hpp rename to src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp index ef499b82fd..511c0922b3 100644 --- a/src/batched/dense/impl/KokkosBatched_Gemv_Serial_Internal.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp @@ -1,16 +1,58 @@ -#ifndef __KOKKOSBATCHED_GEMV_SERIAL_INTERNAL_HPP__ -#define __KOKKOSBATCHED_GEMV_SERIAL_INTERNAL_HPP__ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef __KOKKOSBLAS_GEMV_SERIAL_INTERNAL_HPP__ +#define __KOKKOSBLAS_GEMV_SERIAL_INTERNAL_HPP__ /// \author Kyungjoo Kim (kyukim@sandia.gov) -#include "KokkosBatched_Util.hpp" - +#include "KokkosBlas_util.hpp" #include "KokkosBlas1_set_impl.hpp" #include "KokkosBlas1_serial_scal_impl.hpp" -#include "KokkosBatched_InnerMultipleDotProduct_Serial_Impl.hpp" - -namespace KokkosBatched { +#include "KokkosBlas2_serial_gemv_inner_multiple_dot.hpp" +namespace KokkosBlas { +namespace Impl { /// /// Serial Internal Impl /// ==================== @@ -77,14 +119,14 @@ KOKKOS_INLINE_FUNCTION int SerialGemvInternal::invoke( constexpr int mbAlgo = Algo::Gemv::Blocked::mb(); if (beta == zero) - KokkosBlas::Impl::SerialSetInternal::invoke(m, zero, y, ys0); + Impl::SerialSetInternal::invoke(m, zero, y, ys0); else if (beta != one) - KokkosBlas::Impl::SerialScaleInternal::invoke(m, beta, y, ys0); + Impl::SerialScaleInternal::invoke(m, beta, y, ys0); if (alpha != zero) { if (m <= 0 || n <= 0) return 0; - InnerMultipleDotProduct inner(as0, as1, xs0, ys0); + Impl::InnerMultipleDotProduct inner(as0, as1, xs0, ys0); const int mb = mbAlgo; for (int i = 0; i < m; i += mb) inner.serial_invoke(alpha, A + i * as0, x, (i + mb) > m ? (m - i) : mb, n, @@ -92,7 +134,7 @@ KOKKOS_INLINE_FUNCTION int SerialGemvInternal::invoke( } return 0; } - -} // namespace KokkosBatched +} // namespace Impl +} // namespace KokkosBlas #endif diff --git a/src/blas/impl/KokkosBlas_util.hpp b/src/blas/impl/KokkosBlas_util.hpp index 9ed12899da..6aa79c569f 100644 --- a/src/blas/impl/KokkosBlas_util.hpp +++ b/src/blas/impl/KokkosBlas_util.hpp @@ -47,7 +47,119 @@ #include "Kokkos_ArithTraits.hpp" +// TPL macros +#if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) +#include "mkl_version.h" +#if __INTEL_MKL__ >= 2018 +#define __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ 1 +#include "mkl.h" +#endif +#endif + namespace KokkosBlas { + +//////// Tags for BLAS //////// +struct Trans { + struct Transpose {}; + struct NoTranspose {}; + struct ConjTranspose {}; +}; + +struct Algo { + struct Level3 { + struct Unblocked { + static const char *name() { return "Unblocked"; } + }; + struct Blocked { + static const char *name() { return "Blocked"; } + // TODO:: for now harwire the blocksizes; this should reflect + // regieter blocking (not about team parallelism). + // this mb should vary according to + // - team policy (smaller) or range policy (bigger) + // - space (gpu vs host) + // - blocksize input (blk <= 4 mb = 2, otherwise mb = 4), etc. +#if defined(KOKKOS_IF_ON_HOST) + static constexpr KOKKOS_FUNCTION int mb() { + KOKKOS_IF_ON_HOST((return 4;)) + KOKKOS_IF_ON_DEVICE((return 2;)) + } + +#else // FIXME remove when requiring minimum version of Kokkos 3.6 + static constexpr KOKKOS_FUNCTION int mb() { + return algo_level3_blocked_mb_impl< + Kokkos::Impl::ActiveExecutionMemorySpace>::value; + } + +#endif + }; + struct MKL { + static const char *name() { return "MKL"; } + }; + struct CompactMKL { + static const char *name() { return "CompactMKL"; } + }; + + // When this is first developed, unblocked algorithm is a naive + // implementation and blocked algorithm uses register blocking variant of + // algorithm (manual unrolling). This distinction is almost meaningless and + // it just adds more complications. Eventually, the blocked version will be + // removed and we only use the default algorithm. For testing and + // development purpose, we still leave algorithm tag in the template + // arguments. + using Default = Unblocked; + }; + + using Gemm = Level3; + using Trsm = Level3; + using Trmm = Level3; + using Trtri = Level3; + using LU = Level3; + using InverseLU = Level3; + using SolveLU = Level3; + using QR = Level3; + using UTV = Level3; + + struct Level2 { + struct Unblocked {}; + struct Blocked { + // TODO:: for now hardwire the blocksizes; this should reflect + // register blocking (not about team parallelism). + // this mb should vary according to + // - team policy (smaller) or range policy (bigger) + // - space (cuda vs host) + // - blocksize input (blk <= 4 mb = 2, otherwise mb = 4), etc. +#if defined(KOKKOS_IF_ON_HOST) + static constexpr KOKKOS_FUNCTION int mb() { + KOKKOS_IF_ON_HOST((return 4;)) + KOKKOS_IF_ON_DEVICE((return 1;)) + } + +#else // FIXME remove when requiring minimum version of Kokkos 3.6 + static constexpr KOKKOS_FUNCTION int mb() { + return algo_level2_blocked_mb_impl< + Kokkos::Impl::ActiveExecutionMemorySpace>::value; + } + +#endif + }; + struct MKL {}; + struct CompactMKL {}; + + // When this is first developed, unblocked algorithm is a naive + // implementation and blocked algorithm uses register blocking variant of + // algorithm (manual unrolling). This distinction is almost meaningless and + // it just adds more complications. Eventually, the blocked version will be + // removed and we only use the default algorithm. For testing and + // development purpose, we still leave algorithm tag in the template + // arguments. + using Default = Unblocked; + }; + + using Gemv = Level2; + using Trsv = Level2; + using ApplyQ = Level2; +}; + namespace Impl { // Helper to choose the work distribution for a TeamPolicy computing multiple @@ -65,7 +177,7 @@ namespace Impl { template void multipleReductionWorkDistribution(size_type length, size_type numReductions, - size_type& teamsPerDot) { + size_type &teamsPerDot) { constexpr size_type workPerTeam = 4096; // Amount of work per team size_type appxNumTeams = (length * numReductions) / workPerTeam; // Estimation for appxNumTeams @@ -93,7 +205,7 @@ void multipleReductionWorkDistribution(size_type length, template struct TakeSqrtFunctor { - TakeSqrtFunctor(const RV& r_) : r(r_) {} + TakeSqrtFunctor(const RV &r_) : r(r_) {} KOKKOS_INLINE_FUNCTION void operator()(int i) const { r(i) = Kokkos::ArithTraits::sqrt(r(i)); diff --git a/src/sparse/impl/KokkosSparse_spmv_blockcrsmatrix_impl.hpp b/src/sparse/impl/KokkosSparse_spmv_blockcrsmatrix_impl.hpp index 0dc0dfceb6..36f0f80dd6 100644 --- a/src/sparse/impl/KokkosSparse_spmv_blockcrsmatrix_impl.hpp +++ b/src/sparse/impl/KokkosSparse_spmv_blockcrsmatrix_impl.hpp @@ -46,7 +46,7 @@ #define KOKKOSKERNELS_KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_IMPL_HPP #include "KokkosBlas.hpp" -#include "KokkosBatched_Gemv_Serial_Internal.hpp" +#include "KokkosBlas2_serial_gemv_internal.hpp" #include "KokkosBatched_Gemm_Serial_Internal.hpp" #include "KokkosKernels_ExecSpaceUtils.hpp" #include "KokkosSparse_spmv_impl.hpp" @@ -122,11 +122,12 @@ struct BCRS_GEMV_Functor { for (ordinal_type ic = 0; ic < count; ++ic) { const auto Aview = row.block(ic); const auto xstart = row.block_colidx(ic) * block_dim; - KokkosBatched::SerialGemvInternal:: - invoke( - block_dim, block_dim, alpha, Aview.data(), Aview.stride_0(), - Aview.stride_1(), &m_x(xstart), m_x.stride_0(), beta1, - &m_y(ystart), m_y.stride_0()); + KokkosBlas::Impl::SerialGemvInternal< + KokkosBatched::Algo::Gemv::Blocked>::invoke( + block_dim, block_dim, alpha, Aview.data(), Aview.stride_0(), + Aview.stride_1(), &m_x(xstart), m_x.stride_0(), beta1, &m_y(ystart), + m_y.stride_0()); } } } @@ -412,7 +413,7 @@ struct BCRS_GEMV_Transpose_Functor { const auto ystart = row.block_colidx(ic) * block_dim; for (ordinal_type jj = 0; jj < block_dim; ++jj) { value_type t(0); - KokkosBatched::SerialGemvInternal< + KokkosBlas::Impl::SerialGemvInternal< KokkosBatched::Algo::Gemv::Blocked>::invoke( 1, block_dim, alpha1, Aview.data() + jj, Aview.stride_1(), @@ -966,7 +967,7 @@ struct BCRS_GEMM_Transpose_Functor { for (ordinal_type jr = 0; jr < num_rhs; ++jr) { for (ordinal_type jj = 0; jj < block_dim; ++jj) { value_type t(0); - KokkosBatched::SerialGemvInternal< + KokkosBlas::Impl::SerialGemvInternal< KokkosBatched::Algo::Gemv::Blocked>::invoke( 1, block_dim, alpha1, Aview.data() + jj, Aview.stride_1(), diff --git a/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp b/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp index 313098372a..959982ca30 100644 --- a/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp +++ b/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp @@ -538,7 +538,7 @@ struct BsrMatrixSpMVTensorCoreDispatcher { // #include "KokkosBlas.hpp" -#include "KokkosBatched_Gemv_Serial_Internal.hpp" +#include "KokkosBlas2_serial_gemv_internal.hpp" #include "KokkosBatched_Gemv_TeamVector_Internal.hpp" #include "KokkosBatched_Gemm_Serial_Internal.hpp" #include "KokkosBatched_Gemm_TeamVector_Internal.hpp" @@ -618,7 +618,7 @@ struct BSR_GEMV_Functor { for (ordinal_type ic = 0; ic < count; ++ic) { const auto Aview = row.block(ic); const auto xstart = row.block_colidx(ic) * block_dim; - KokkosBatched::SerialGemvInternal:: + KokkosBlas::Impl::SerialGemvInternal:: invoke( block_dim, block_dim, alpha, Aview.data(), block_dim, 1, &m_x(xstart), static_cast(m_x.stride_0()), beta1, @@ -914,9 +914,9 @@ struct BSR_GEMV_Transpose_Functor { const auto ystart = row.block_colidx(ic) * block_dim; for (ordinal_type jj = 0; jj < block_dim; ++jj) { value_type t(0); - KokkosBatched::SerialGemvInternal< - KokkosBatched::Algo::Gemv::Blocked>::invoke( + KokkosBlas::Impl::SerialGemvInternal< + KokkosBlas::Algo::Gemv::Blocked>::invoke( 1, block_dim, alpha1, Aview.data() + jj, Aview.stride_1(), Aview.stride_0(), xview.data(), xview.stride_0(), beta1, &t, 1); t *= alpha; @@ -1561,9 +1561,9 @@ struct BSR_GEMM_Transpose_Functor { for (ordinal_type jr = 0; jr < num_rhs; ++jr) { for (ordinal_type jj = 0; jj < block_dim; ++jj) { value_type t(0); - KokkosBatched::SerialGemvInternal< - KokkosBatched::Algo::Gemv::Blocked>::invoke( + KokkosBlas::Impl::SerialGemvInternal< + KokkosBlas::Algo::Gemv::Blocked>::invoke( 1, block_dim, alpha1, Aview.data() + jj, Aview.stride_1(), Aview.stride_0(), xview.data() + jr * ldx, xview.stride_0(), beta1, &t, 1); diff --git a/src/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp b/src/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp index fbee2fb33f..49b9d69b24 100644 --- a/src/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp +++ b/src/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp @@ -66,7 +66,6 @@ #include "KokkosBatched_Gemv_Decl.hpp" #include "KokkosBatched_Gemv_Team_Impl.hpp" -#include "KokkosBatched_Gemv_Serial_Impl.hpp" #include "KokkosBatched_Trsm_Team_Impl.hpp" #endif diff --git a/unit_test/batched/dense/Test_Batched_Dense.hpp b/unit_test/batched/dense/Test_Batched_Dense.hpp index edf573c633..a771bcada1 100644 --- a/unit_test/batched/dense/Test_Batched_Dense.hpp +++ b/unit_test/batched/dense/Test_Batched_Dense.hpp @@ -13,9 +13,6 @@ #include "Test_Batched_BatchedGemm.hpp" #include "Test_Batched_BatchedGemm_Real.hpp" #include "Test_Batched_BatchedGemm_Complex.hpp" -#include "Test_Batched_SerialGemv.hpp" -#include "Test_Batched_SerialGemv_Real.hpp" -#include "Test_Batched_SerialGemv_Complex.hpp" #include "Test_Batched_SerialGesv.hpp" #include "Test_Batched_SerialGesv_Real.hpp" #include "Test_Batched_SerialInverseLU.hpp" diff --git a/unit_test/batched/dense/Test_Batched_SerialGemv.hpp b/unit_test/batched/dense/Test_Batched_SerialGemv.hpp deleted file mode 100644 index eb1d8f285c..0000000000 --- a/unit_test/batched/dense/Test_Batched_SerialGemv.hpp +++ /dev/null @@ -1,148 +0,0 @@ -/// \author Kyungjoo Kim (kyukim@sandia.gov) - -#include "gtest/gtest.h" -#include "Kokkos_Core.hpp" -#include "Kokkos_Random.hpp" - -//#include "KokkosBatched_Vector.hpp" - -#include "KokkosBatched_Gemv_Decl.hpp" -#include "KokkosBatched_Gemv_Serial_Impl.hpp" - -#include "KokkosKernels_TestUtils.hpp" - -using namespace KokkosBatched; - -namespace Test { -namespace Gemv { - -template -struct ParamTag { - typedef T trans; -}; - -template -struct Functor_TestBatchedSerialGemv { - ViewType _a, _b, _c; - - ScalarType _alpha, _beta; - - KOKKOS_INLINE_FUNCTION - Functor_TestBatchedSerialGemv(const ScalarType alpha, const ViewType &a, - const ViewType &b, const ScalarType beta, - const ViewType &c) - : _a(a), _b(b), _c(c), _alpha(alpha), _beta(beta) {} - - KOKKOS_INLINE_FUNCTION - void operator()(const ParamTagType &, const int k) const { - auto aa = Kokkos::subview(_a, k, Kokkos::ALL(), Kokkos::ALL()); - auto bb = Kokkos::subview(_b, k, Kokkos::ALL(), 0); - auto cc = Kokkos::subview(_c, k, Kokkos::ALL(), 0); - - SerialGemv::invoke( - _alpha, aa, bb, _beta, cc); - } - - inline void run() { - typedef typename ViewType::value_type value_type; - std::string name_region("KokkosBatched::Test::SerialGemv"); - const std::string name_value_type = Test::value_type_name(); - std::string name = name_region + name_value_type; - Kokkos::Profiling::pushRegion(name.c_str()); - Kokkos::RangePolicy policy(0, _c.extent(0)); - Kokkos::parallel_for(name.c_str(), policy, *this); - Kokkos::Profiling::popRegion(); - } -}; - -template -void impl_test_batched_gemv(const int N, const int BlkSize) { - typedef typename ViewType::value_type value_type; - typedef Kokkos::Details::ArithTraits ats; - - /// randomized input testing views - ScalarType alpha = 1.5, beta = 3.0; - - ViewType a0("a0", N, BlkSize, BlkSize), a1("a1", N, BlkSize, BlkSize), - b0("b0", N, BlkSize, 1), b1("b1", N, BlkSize, 1), c0("c0", N, BlkSize, 1), - c1("c1", N, BlkSize, 1); - - Kokkos::Random_XorShift64_Pool random( - 13718); - Kokkos::fill_random(a0, random, value_type(1.0)); - Kokkos::fill_random(b0, random, value_type(1.0)); - Kokkos::fill_random(c0, random, value_type(1.0)); - - Kokkos::fence(); - - Kokkos::deep_copy(a1, a0); - Kokkos::deep_copy(b1, b0); - Kokkos::deep_copy(c1, c0); - - /// test body - Functor_TestBatchedSerialGemv(alpha, a0, b0, beta, c0) - .run(); - Functor_TestBatchedSerialGemv(alpha, a1, b1, beta, c1) - .run(); - - Kokkos::fence(); - - /// for comparison send it to host - typename ViewType::HostMirror c0_host = Kokkos::create_mirror_view(c0); - typename ViewType::HostMirror c1_host = Kokkos::create_mirror_view(c1); - - Kokkos::deep_copy(c0_host, c0); - Kokkos::deep_copy(c1_host, c1); - - /// check c0 = c1 ; this eps is about 10^-14 - typedef typename ats::mag_type mag_type; - mag_type sum(1), diff(0); - const mag_type eps = 1.0e3 * ats::epsilon(); - - for (int k = 0; k < N; ++k) - for (int i = 0; i < BlkSize; ++i) - for (int j = 0; j < 1; ++j) { - sum += ats::abs(c0_host(k, i, j)); - diff += ats::abs(c0_host(k, i, j) - c1_host(k, i, j)); - } - EXPECT_NEAR_KK(diff / sum, 0, eps); -} -} // namespace Gemv -} // namespace Test - -template -int test_batched_gemv() { -#if defined(KOKKOSKERNELS_INST_LAYOUTLEFT) - { - typedef Kokkos::View - ViewType; - Test::Gemv::impl_test_batched_gemv(0, 10); - for (int i = 0; i < 10; ++i) { - // printf("Testing: LayoutLeft, Blksize %d\n", i); - Test::Gemv::impl_test_batched_gemv(1024, i); - } - } -#endif -#if defined(KOKKOSKERNELS_INST_LAYOUTRIGHT) - { - typedef Kokkos::View - ViewType; - Test::Gemv::impl_test_batched_gemv(0, 10); - for (int i = 0; i < 10; ++i) { - // printf("Testing: LayoutRight, Blksize %d\n", i); - Test::Gemv::impl_test_batched_gemv(1024, i); - } - } -#endif - - return 0; -} diff --git a/unit_test/batched/dense/Test_Batched_SerialGemv_Complex.hpp b/unit_test/batched/dense/Test_Batched_SerialGemv_Complex.hpp deleted file mode 100644 index 6b072824f3..0000000000 --- a/unit_test/batched/dense/Test_Batched_SerialGemv_Complex.hpp +++ /dev/null @@ -1,43 +0,0 @@ -#if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) - -/// dcomplex, dcomplex - -TEST_F(TestCategory, batched_scalar_serial_gemv_nt_dcomplex_dcomplex) { - typedef ::Test::Gemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_gemv, - Kokkos::complex, param_tag_type, algo_tag_type>(); -} -TEST_F(TestCategory, batched_scalar_serial_gemv_t_dcomplex_dcomplex) { - typedef ::Test::Gemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_gemv, - Kokkos::complex, param_tag_type, algo_tag_type>(); -} -// TEST_F( TestCategory, batched_scalar_serial_gemv_ct_dcomplex_dcomplex ) { -// typedef ::Test::ParamTag param_tag_type; -// typedef Algo::Gemv::Blocked algo_tag_type; -// test_batched_gemv,Kokkos::complex,param_tag_type,algo_tag_type>(); -// } - -/// dcomplex, double - -TEST_F(TestCategory, batched_scalar_serial_gemv_nt_dcomplex_double) { - typedef ::Test::Gemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_gemv, double, - param_tag_type, algo_tag_type>(); -} -TEST_F(TestCategory, batched_scalar_serial_gemv_t_dcomplex_double) { - typedef ::Test::Gemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_gemv, double, - param_tag_type, algo_tag_type>(); -} -// TEST_F( TestCategory, batched_scalar_serial_gemv_ct_dcomplex_double ) { -// typedef ::Test::ParamTag param_tag_type; -// typedef Algo::Gemv::Blocked algo_tag_type; -// test_batched_gemv,double,param_tag_type,algo_tag_type>(); -// } - -#endif diff --git a/unit_test/batched/dense/Test_Batched_SerialGemv_Real.hpp b/unit_test/batched/dense/Test_Batched_SerialGemv_Real.hpp deleted file mode 100644 index ac3774eb66..0000000000 --- a/unit_test/batched/dense/Test_Batched_SerialGemv_Real.hpp +++ /dev/null @@ -1,30 +0,0 @@ - -#if defined(KOKKOSKERNELS_INST_FLOAT) -TEST_F(TestCategory, batched_scalar_serial_gemv_nt_float_float) { - typedef ::Test::Gemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_gemv(); -} -TEST_F(TestCategory, batched_scalar_serial_gemv_t_float_float) { - typedef ::Test::Gemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_gemv(); -} -#endif - -#if defined(KOKKOSKERNELS_INST_DOUBLE) -TEST_F(TestCategory, batched_scalar_serial_gemv_nt_double_double) { - typedef ::Test::Gemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_gemv(); -} -TEST_F(TestCategory, batched_scalar_serial_gemv_t_double_double) { - typedef ::Test::Gemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_gemv(); -} -#endif diff --git a/unit_test/batched/dense/Test_Batched_SerialGesv.hpp b/unit_test/batched/dense/Test_Batched_SerialGesv.hpp index 233d6bedf3..7f9723a4b9 100644 --- a/unit_test/batched/dense/Test_Batched_SerialGesv.hpp +++ b/unit_test/batched/dense/Test_Batched_SerialGesv.hpp @@ -6,7 +6,7 @@ #include "KokkosBatched_Gesv.hpp" #include "KokkosBatched_Dot.hpp" -#include "KokkosBatched_Gemv_Decl.hpp" +#include "KokkosBlas2_serial_gemv_impl.hpp" #include "KokkosKernels_TestUtils.hpp" @@ -92,8 +92,8 @@ void impl_test_batched_gesv(const int N, const int BlkSize) { Kokkos::deep_copy(X_host, X); for (int l = 0; l < N; ++l) - KokkosBatched::SerialGemv:: + KokkosBlas::SerialGemv:: invoke(-1, Kokkos::subview(A_host, l, Kokkos::ALL, Kokkos::ALL), Kokkos::subview(X_host, l, Kokkos::ALL), 1, Kokkos::subview(B_host, l, Kokkos::ALL)); diff --git a/unit_test/batched/dense/Test_Batched_TeamGemv.hpp b/unit_test/batched/dense/Test_Batched_TeamGemv.hpp index 9f19180a3f..103aa069ce 100644 --- a/unit_test/batched/dense/Test_Batched_TeamGemv.hpp +++ b/unit_test/batched/dense/Test_Batched_TeamGemv.hpp @@ -7,8 +7,6 @@ //#include "KokkosBatched_Vector.hpp" #include "KokkosBatched_Gemv_Decl.hpp" -#include "KokkosBatched_Gemv_Serial_Impl.hpp" -#include "KokkosBatched_Gemv_Team_Impl.hpp" #include "KokkosKernels_TestUtils.hpp" diff --git a/unit_test/batched/dense/Test_Batched_TeamGesv.hpp b/unit_test/batched/dense/Test_Batched_TeamGesv.hpp index 8f6bcf9f9d..a7acfdcf9b 100644 --- a/unit_test/batched/dense/Test_Batched_TeamGesv.hpp +++ b/unit_test/batched/dense/Test_Batched_TeamGesv.hpp @@ -6,7 +6,7 @@ #include "KokkosBatched_Gesv.hpp" #include "KokkosBatched_Dot.hpp" -#include "KokkosBatched_Gemv_Decl.hpp" +#include "KokkosBlas2_serial_gemv_impl.hpp" #include "KokkosKernels_TestUtils.hpp" @@ -103,8 +103,8 @@ void impl_test_batched_gesv(const int N, const int BlkSize) { Kokkos::deep_copy(X_host, X); for (int l = 0; l < N; ++l) - KokkosBatched::SerialGemv:: + KokkosBlas::SerialGemv:: invoke(-1, Kokkos::subview(A_host, l, Kokkos::ALL, Kokkos::ALL), Kokkos::subview(X_host, l, Kokkos::ALL), 1, Kokkos::subview(B_host, l, Kokkos::ALL)); diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorGesv.hpp b/unit_test/batched/dense/Test_Batched_TeamVectorGesv.hpp index 9ee05cb919..c09e395edd 100644 --- a/unit_test/batched/dense/Test_Batched_TeamVectorGesv.hpp +++ b/unit_test/batched/dense/Test_Batched_TeamVectorGesv.hpp @@ -6,7 +6,7 @@ #include "KokkosBatched_Gesv.hpp" #include "KokkosBatched_Dot.hpp" -#include "KokkosBatched_Gemv_Decl.hpp" +#include "KokkosBlas2_serial_gemv_impl.hpp" #include "KokkosKernels_TestUtils.hpp" @@ -104,8 +104,8 @@ void impl_test_batched_gesv(const int N, const int BlkSize) { Kokkos::deep_copy(X_host, X); for (int l = 0; l < N; ++l) - KokkosBatched::SerialGemv:: + KokkosBlas::SerialGemv:: invoke(-1, Kokkos::subview(A_host, l, Kokkos::ALL, Kokkos::ALL), Kokkos::subview(X_host, l, Kokkos::ALL), 1, Kokkos::subview(B_host, l, Kokkos::ALL)); diff --git a/unit_test/blas/Test_Blas.hpp b/unit_test/blas/Test_Blas.hpp index 2d168fe0a5..3b4f4355c3 100644 --- a/unit_test/blas/Test_Blas.hpp +++ b/unit_test/blas/Test_Blas.hpp @@ -42,8 +42,9 @@ // Blas 2 #include "Test_Blas2_gemv.hpp" -// Team Blas 2 +// Serial Blas 2 #include "Test_Blas2_serial_gemv.hpp" +// Team Blas 2 #include "Test_Blas2_team_gemv.hpp" // Blas 3 diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index 802e11f241..de586be9be 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -9,6 +9,7 @@ #include #include #include +#include #include namespace Test { @@ -115,6 +116,99 @@ void impl_test_serial_gemv(const char *mode, int N, int M) { ScalarY const_const_result = KokkosBlas::dot(y, y); EXPECT_NEAR_KK(const_const_result, expected_result, eps * expected_result); } + +template +struct Functor_TestSerialGemv { + ViewType _a, _b, _c; + + ScalarType _alpha, _beta; + + KOKKOS_INLINE_FUNCTION + Functor_TestSerialGemv(const ScalarType alpha, const ViewType &a, + const ViewType &b, const ScalarType beta, + const ViewType &c) + : _a(a), _b(b), _c(c), _alpha(alpha), _beta(beta) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const TransType &, const int k) const { + auto aa = Kokkos::subview(_a, k, Kokkos::ALL(), Kokkos::ALL()); + auto bb = Kokkos::subview(_b, k, Kokkos::ALL(), 0); + auto cc = Kokkos::subview(_c, k, Kokkos::ALL(), 0); + + KokkosBlas::SerialGemv::invoke(_alpha, aa, bb, + _beta, cc); + } + + inline void run() { + typedef typename ViewType::value_type value_type; + std::string name_region("KokkosBlas::Test::SerialGemv"); + const std::string name_value_type = Test::value_type_name(); + std::string name = name_region + name_value_type; + Kokkos::Profiling::pushRegion(name.c_str()); + Kokkos::RangePolicy policy(0, _c.extent(0)); + Kokkos::parallel_for(name.c_str(), policy, *this); + Kokkos::Profiling::popRegion(); + } +}; + +template +void impl_test_batched_serial_gemv(const int N, const int BlkSize) { + typedef typename ViewType::value_type value_type; + typedef Kokkos::Details::ArithTraits ats; + + /// randomized input testing views + ScalarType alpha = 1.5, beta = 3.0; + + ViewType a0("a0", N, BlkSize, BlkSize), a1("a1", N, BlkSize, BlkSize), + b0("b0", N, BlkSize, 1), b1("b1", N, BlkSize, 1), c0("c0", N, BlkSize, 1), + c1("c1", N, BlkSize, 1); + + Kokkos::Random_XorShift64_Pool random( + 13718); + Kokkos::fill_random(a0, random, value_type(1.0)); + Kokkos::fill_random(b0, random, value_type(1.0)); + Kokkos::fill_random(c0, random, value_type(1.0)); + + Kokkos::fence(); + + Kokkos::deep_copy(a1, a0); + Kokkos::deep_copy(b1, b0); + Kokkos::deep_copy(c1, c0); + + /// test body + Functor_TestSerialGemv(alpha, a0, b0, beta, + c0) + .run(); + Functor_TestSerialGemv(alpha, a1, b1, beta, c1) + .run(); + + Kokkos::fence(); + + /// for comparison send it to host + typename ViewType::HostMirror c0_host = Kokkos::create_mirror_view(c0); + typename ViewType::HostMirror c1_host = Kokkos::create_mirror_view(c1); + + Kokkos::deep_copy(c0_host, c0); + Kokkos::deep_copy(c1_host, c1); + + /// check c0 = c1 ; this eps is about 10^-14 + typedef typename ats::mag_type mag_type; + mag_type sum(1), diff(0); + const mag_type eps = 1.0e3 * ats::epsilon(); + + for (int k = 0; k < N; ++k) + for (int i = 0; i < BlkSize; ++i) + for (int j = 0; j < 1; ++j) { + sum += ats::abs(c0_host(k, i, j)); + diff += ats::abs(c0_host(k, i, j) - c1_host(k, i, j)); + } + EXPECT_NEAR_KK(diff / sum, 0, eps); +} + } // namespace Test template @@ -169,67 +263,110 @@ int test_serial_gemv(const char *mode) { Device>(mode, 124, 124); #endif - return 1; + return 0; } -template -int test_serial_gemv(const char *mode) { - return test_serial_gemv(mode); +template +int test_batched_serial_gemv() { +#if defined(KOKKOSKERNELS_INST_LAYOUTLEFT) + { + typedef Kokkos::View + ViewType; + Test::impl_test_batched_serial_gemv(0, 10); + for (int i = 0; i < 10; ++i) { + // printf("Testing: LayoutLeft, Blksize %d\n", i); + Test::impl_test_batched_serial_gemv(1024, i); + } + } +#endif +#if defined(KOKKOSKERNELS_INST_LAYOUTRIGHT) + { + typedef Kokkos::View + ViewType; + Test::Gemv::impl_test_batched_serial_gemv(0, 10); + for (int i = 0; i < 10; ++i) { + // printf("Testing: LayoutRight, Blksize %d\n", i); + Test::Gemv::impl_test_batched_serial_gemv< + DeviceType, ViewType, ScalarType, TransType, AlgoTagType>(1024, i); + } + } +#endif + + return 0; } +#define TEST_CASE4(NAME, SCALAR_A, SCALAR_X, SCALAR_Y, SCALAR_COEF) \ + TEST_F(TestCategory, serial_gemv_nt_##NAME) { \ + /* FIXME: implement arbitrary SCALAR_COEF for alpha/beta type */ \ + test_serial_gemv("N"); \ + } \ + TEST_F(TestCategory, serial_gemv_t_##NAME) { \ + /* FIXME: implement arbitrary SCALAR_COEF for alpha/beta type */ \ + test_serial_gemv("T"); \ + } \ + TEST_F(TestCategory, serial_gemv_nt2_##NAME) { \ + /* FIXME: implement mixed scalar support and test */ \ + test_batched_serial_gemv(); \ + } \ + TEST_F(TestCategory, serial_gemv_t2_##NAME) { \ + /* FIXME: implement mixed scalar support and test */ \ + test_batched_serial_gemv(); \ + } + +#define _COMMON_TYPE3(T1, T2, T3) std::common_type::type + +#define TEST_CASE3(NAME, SCALAR_A, SCALAR_X, SCALAR_Y) \ + TEST_CASE4(NAME, SCALAR_A, SCALAR_X, SCALAR_Y, \ + _COMMON_TYPE3(SCALAR_A, SCALAR_X, SCALAR_Y)) + +#define TEST_CASE2(NAME, SCALAR, SCALAR_COEF) \ + TEST_CASE4(NAME, SCALAR, SCALAR, SCALAR, SCALAR_COEF) +#define TEST_CASE(NAME, SCALAR) TEST_CASE2(NAME, SCALAR, SCALAR) + #if defined(KOKKOSKERNELS_INST_FLOAT) || \ (!defined(KOKKOSKERNELS_ETI_ONLY) && \ !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) -TEST_F(TestCategory, serial_gemv_float) { - test_serial_gemv("N"); - test_serial_gemv("T"); -} +TEST_CASE(nt_float, float) #endif #if defined(KOKKOSKERNELS_INST_DOUBLE) || \ (!defined(KOKKOSKERNELS_ETI_ONLY) && \ !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) -TEST_F(TestCategory, serial_gemv_double) { - test_serial_gemv("N"); - test_serial_gemv("T"); -} +TEST_CASE(nt_double, double) #endif #if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) || \ (!defined(KOKKOSKERNELS_ETI_ONLY) && \ !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) -TEST_F(TestCategory, serial_gemv_complex_double) { - test_serial_gemv, TestExecSpace>("N"); - test_serial_gemv, TestExecSpace>("T"); -} +TEST_CASE(nt_complex_double, Kokkos::complex) #endif #if defined(KOKKOSKERNELS_INST_COMPLEX_FLOAT) || \ (!defined(KOKKOSKERNELS_ETI_ONLY) && \ !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) -TEST_F(TestCategory, serial_gemv_complex_float) { - test_serial_gemv, TestExecSpace>("N"); - test_serial_gemv, TestExecSpace>("T"); -} +TEST_CASE(nt_complex_float, Kokkos::complex) #endif #if defined(KOKKOSKERNELS_INST_INT) || \ (!defined(KOKKOSKERNELS_ETI_ONLY) && \ !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) -TEST_F(TestCategory, serial_gemv_int) { - test_serial_gemv("N"); - test_serial_gemv("T"); -} +TEST_CASE(nt_complex_int, int) #endif -#if 0 // mixed scalar types not allowed in batched impl #if !defined(KOKKOSKERNELS_ETI_ONLY) && \ !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) -TEST_F(TestCategory, serial_gemv_mixed) { - test_serial_gemv("N"); - test_serial_gemv("T"); -} -#endif +// test mixed scalar types +TEST_CASE3(nt_mixed, double, int, float) + +// test arbitrary double alpha/beta with complex values +TEST_CASE2(nt_alphabeta, Kokkos::complex, double) #endif #endif // Check for lambda availability on CUDA backend From cf7653be114eb1c4240aefd525a44d46a05c1067 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Mon, 11 Jul 2022 21:00:26 +0200 Subject: [PATCH 008/226] Support different scalar types in SerialGEMV --- src/blas/KokkosBlas2_serial_gemv.hpp | 6 - ...osBlas2_serial_gemv_inner_multiple_dot.hpp | 142 ++++++----- .../impl/KokkosBlas2_serial_gemv_internal.hpp | 31 +-- test_common/KokkosKernels_TestUtils.hpp | 5 + unit_test/blas/Test_Blas2_serial_gemv.hpp | 221 +++++++++++------- 5 files changed, 232 insertions(+), 173 deletions(-) diff --git a/src/blas/KokkosBlas2_serial_gemv.hpp b/src/blas/KokkosBlas2_serial_gemv.hpp index 2c45fbdd1f..3016202dfc 100644 --- a/src/blas/KokkosBlas2_serial_gemv.hpp +++ b/src/blas/KokkosBlas2_serial_gemv.hpp @@ -58,12 +58,6 @@ void KOKKOS_INLINE_FUNCTION gemv(const char trans, const ScalarType& alpha, const MatrixType& A, const XVector& x, const typename YVector::non_const_value_type& beta, const YVector& y) { - static_assert( - std::is_same::value && - std::is_same::value, - "Serial GEMV requires A,x and y to have same scalar type"); - using algo = KokkosBlas::Algo::Gemv::Default; // ensure same type for alpha and beta (required by serial impl) const auto beta_ = static_cast(beta); diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp index 484732c63b..16c5dce385 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp @@ -58,19 +58,21 @@ struct InnerMultipleDotProduct { const int ys0) : _as0(as0), _as1(as1), _xs0(xs0), _ys0(ys0) {} - template + template KOKKOS_INLINE_FUNCTION int serial_invoke(const ScalarType alpha, - const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, + const ValueAType *KOKKOS_RESTRICT A, + const ValueXType *KOKKOS_RESTRICT x, const int n, - /**/ ValueType *KOKKOS_RESTRICT y); + ValueYType *KOKKOS_RESTRICT y); - template + template KOKKOS_INLINE_FUNCTION int serial_invoke(const ScalarType alpha, - const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, + const ValueAType *KOKKOS_RESTRICT A, + const ValueXType *KOKKOS_RESTRICT x, const int m, const int n, - /**/ ValueType *KOKKOS_RESTRICT y); + ValueYType *KOKKOS_RESTRICT y); }; /// @@ -78,25 +80,26 @@ struct InnerMultipleDotProduct { /// ==================== template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<5>::serial_invoke( - const ScalarType alpha, const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, const int n, - /**/ ValueType *KOKKOS_RESTRICT y) { + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const ValueXType *KOKKOS_RESTRICT x, const int n, + ValueYType *KOKKOS_RESTRICT y) { if (n <= 0) return 0; const int i0 = 0 * _as0, i1 = 1 * _as0, i2 = 2 * _as0, i3 = 3 * _as0, i4 = 4 * _as0; // unroll by rows - ValueType y_0 = 0, y_1 = 0, y_2 = 0, y_3 = 0, y_4 = 0; + ValueYType y_0 = 0, y_1 = 0, y_2 = 0, y_3 = 0, y_4 = 0; #if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) #pragma unroll #endif for (int j = 0; j < n; ++j) { - const int jj = j * _as1; - const ValueType x_j = x[j * _xs0]; + const int jj = j * _as1; + const ValueXType x_j = x[j * _xs0]; y_0 += A[i0 + jj] * x_j; y_1 += A[i1 + jj] * x_j; @@ -115,24 +118,25 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<5>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<4>::serial_invoke( - const ScalarType alpha, const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, const int n, - /**/ ValueType *KOKKOS_RESTRICT y) { + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const ValueXType *KOKKOS_RESTRICT x, const int n, + ValueYType *KOKKOS_RESTRICT y) { if (!n) return 0; const int i0 = 0 * _as0, i1 = 1 * _as0, i2 = 2 * _as0, i3 = 3 * _as0; // unroll by rows - ValueType y_0 = 0, y_1 = 0, y_2 = 0, y_3 = 0; + ValueYType y_0 = 0, y_1 = 0, y_2 = 0, y_3 = 0; #if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) #pragma unroll #endif for (int j = 0; j < n; ++j) { - const int jj = j * _as1; - const ValueType x_j = x[j * _xs0]; + const int jj = j * _as1; + const ValueXType x_j = x[j * _xs0]; y_0 += A[i0 + jj] * x_j; y_1 += A[i1 + jj] * x_j; @@ -149,24 +153,25 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<4>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<3>::serial_invoke( - const ScalarType alpha, const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, const int n, - /**/ ValueType *KOKKOS_RESTRICT y) { + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const ValueXType *KOKKOS_RESTRICT x, const int n, + ValueYType *KOKKOS_RESTRICT y) { if (n <= 0) return 0; const int i0 = 0 * _as0, i1 = 1 * _as0, i2 = 2 * _as0; // unroll by rows - ValueType y_0 = 0, y_1 = 0, y_2 = 0; + ValueYType y_0 = 0, y_1 = 0, y_2 = 0; #if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) #pragma unroll #endif for (int j = 0; j < n; ++j) { - const int jj = j * _as1; - const ValueType x_j = x[j * _xs0]; + const int jj = j * _as1; + const ValueXType x_j = x[j * _xs0]; y_0 += A[i0 + jj] * x_j; y_1 += A[i1 + jj] * x_j; @@ -181,24 +186,25 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<3>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<2>::serial_invoke( - const ScalarType alpha, const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, const int n, - /**/ ValueType *KOKKOS_RESTRICT y) { + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const ValueXType *KOKKOS_RESTRICT x, const int n, + ValueYType *KOKKOS_RESTRICT y) { if (n <= 0) return 0; const int i0 = 0 * _as0, i1 = 1 * _as0; // unroll by rows - ValueType y_0 = 0, y_1 = 0; + ValueYType y_0 = 0, y_1 = 0; #if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) #pragma unroll #endif for (int j = 0; j < n; ++j) { - const int jj = j * _as1; - const ValueType x_j = x[j * _xs0]; + const int jj = j * _as1; + const ValueXType x_j = x[j * _xs0]; y_0 += A[i0 + jj] * x_j; y_1 += A[i1 + jj] * x_j; @@ -211,15 +217,16 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<2>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<1>::serial_invoke( - const ScalarType alpha, const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, const int n, - /**/ ValueType *KOKKOS_RESTRICT y) { + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const ValueXType *KOKKOS_RESTRICT x, const int n, + ValueYType *KOKKOS_RESTRICT y) { if (n <= 0) return 0; // unroll by rows - ValueType y_0 = 0; + ValueYType y_0 = 0; #if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) #pragma unroll @@ -232,11 +239,12 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<1>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<5>::serial_invoke( - const ScalarType alpha, const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, const int m, const int n, - /**/ ValueType *KOKKOS_RESTRICT y) { + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const ValueXType *KOKKOS_RESTRICT x, const int m, const int n, + ValueYType *KOKKOS_RESTRICT y) { if (m <= 0 || n <= 0) return 0; switch (m) { case 5: { @@ -269,11 +277,12 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<5>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<4>::serial_invoke( - const ScalarType alpha, const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, const int m, const int n, - /**/ ValueType *KOKKOS_RESTRICT y) { + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const ValueXType *KOKKOS_RESTRICT x, const int m, const int n, + ValueYType *KOKKOS_RESTRICT y) { if (m <= 0 || n <= 0) return 0; switch (m) { case 4: { @@ -301,11 +310,13 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<4>::serial_invoke( } template <> -template +template + KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<3>::serial_invoke( - const ScalarType alpha, const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, const int m, const int n, - /**/ ValueType *KOKKOS_RESTRICT y) { + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const ValueXType *KOKKOS_RESTRICT x, const int m, const int n, + ValueYType *KOKKOS_RESTRICT y) { if (m <= 0 || n <= 0) return 0; switch (m) { case 3: { @@ -328,11 +339,13 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<3>::serial_invoke( } template <> -template +template + KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<2>::serial_invoke( - const ScalarType alpha, const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, const int m, const int n, - /**/ ValueType *KOKKOS_RESTRICT y) { + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const ValueXType *KOKKOS_RESTRICT x, const int m, const int n, + ValueYType *KOKKOS_RESTRICT y) { if (m <= 0 || n <= 0) return 0; switch (m) { case 2: { @@ -350,11 +363,13 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<2>::serial_invoke( } template <> -template +template + KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<1>::serial_invoke( - const ScalarType alpha, const ValueType *KOKKOS_RESTRICT A, - const ValueType *KOKKOS_RESTRICT x, const int m, const int n, - /**/ ValueType *KOKKOS_RESTRICT y) { + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const ValueXType *KOKKOS_RESTRICT x, const int m, const int n, + ValueYType *KOKKOS_RESTRICT y) { if (m <= 0 || n <= 0) return 0; switch (m) { case 1: { @@ -365,6 +380,7 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<1>::serial_invoke( } return 0; } -}} // namespace KokkosBlas::Impl +} // namespace Impl +} // namespace KokkosBlas -#endif // __KOKKOSBLAS_INNER_MULTIPLE_DOT_PRODUCT_SERIAL_IMPL_HPP__ +#endif // __KOKKOSBLAS_INNER_MULTIPLE_DOT_PRODUCT_SERIAL_IMPL_HPP__ diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp index 511c0922b3..52a9d12c37 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp @@ -59,21 +59,23 @@ namespace Impl { template struct SerialGemvInternal { - template + template KOKKOS_INLINE_FUNCTION static int invoke( const int m, const int n, const ScalarType alpha, - const ValueType *KOKKOS_RESTRICT A, const int as0, const int as1, - const ValueType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, - /**/ ValueType *KOKKOS_RESTRICT y, const int ys0); + const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, + const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0); }; template <> -template +template KOKKOS_INLINE_FUNCTION int SerialGemvInternal::invoke( const int m, const int n, const ScalarType alpha, - const ValueType *KOKKOS_RESTRICT A, const int as0, const int as1, - const ValueType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, - /**/ ValueType *KOKKOS_RESTRICT y, const int ys0) { + const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, + const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0) { const ScalarType one(1.0), zero(0.0); // y = beta y + alpha A x @@ -88,8 +90,8 @@ KOKKOS_INLINE_FUNCTION int SerialGemvInternal::invoke( if (m <= 0 || n <= 0) return 0; for (int i = 0; i < m; ++i) { - ValueType t(0); - const ValueType *KOKKOS_RESTRICT tA = (A + i * as0); + ValueYType t(0); + const ValueAType *KOKKOS_RESTRICT tA = (A + i * as0); #if defined(KOKKOS_ENABLE_PRAGMA_IVDEP) #pragma ivdep @@ -105,12 +107,13 @@ KOKKOS_INLINE_FUNCTION int SerialGemvInternal::invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int SerialGemvInternal::invoke( const int m, const int n, const ScalarType alpha, - const ValueType *KOKKOS_RESTRICT A, const int as0, const int as1, - const ValueType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, - /**/ ValueType *KOKKOS_RESTRICT y, const int ys0) { + const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, + const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0) { const ScalarType one(1.0), zero(0.0); // y = beta y + alpha A x diff --git a/test_common/KokkosKernels_TestUtils.hpp b/test_common/KokkosKernels_TestUtils.hpp index 976da2c358..228e0050c6 100644 --- a/test_common/KokkosKernels_TestUtils.hpp +++ b/test_common/KokkosKernels_TestUtils.hpp @@ -480,6 +480,11 @@ std::string value_type_name() { return "::Double"; } +template <> +std::string value_type_name() { + return "::Int"; +} + template <> std::string value_type_name>() { return "::ComplexFloat"; diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index de586be9be..3b33187084 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -12,6 +12,51 @@ #include #include +// Simplify ETI ifdefs +// TODO: Maybe define this for all tests globally ? +// + maybe this logic should be in CMake for concisiety +#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + +#define KOKKOSKERNELS_TEST_MIXED_TYPES +#define KOKKOSKERNELS_TEST_LAYOUTLEFT +#define KOKKOSKERNELS_TEST_LAYOUTRIGHT +#define KOKKOSKERNELS_TEST_LAYOUTSTRIDE +#define KOKKOSKERNELS_TEST_FLOAT +#define KOKKOSKERNELS_TEST_DOUBLE +#define KOKKOSKERNELS_TEST_INT +#define KOKKOSKERNELS_TEST_COMPLEX_FLOAT +#define KOKKOSKERNELS_TEST_COMPLEX_DOUBLE + +#else + +#ifdef KOKKOSKERNELS_INST_LAYOUTLEFT +#define KOKKOSKERNELS_TEST_LAYOUTLEFT +#endif +#ifdef KOKKOSKERNELS_INST_LAYOUTRIGHT +#define KOKKOSKERNELS_TEST_LAYOUTRIGHT +#endif +#ifdef KOKKOSKERNELS_INST_LAYOUTSTRIDE +#define KOKKOSKERNELS_TEST_LAYOUTSTRIDE +#endif +#ifdef KOKKOSKERNELS_INST_FLOAT +#define KOKKOSKERNELS_TEST_FLOAT +#endif +#ifdef KOKKOSKERNELS_INST_DOUBLE +#define KOKKOSKERNELS_TEST_DOUBLE +#endif +#ifdef KOKKOSKERNELS_INST_INT +#define KOKKOSKERNELS_TEST_INT +#endif +#ifdef KOKKOSKERNELS_INST_COMPLEX_FLOAT +#define KOKKOSKERNELS_TEST_COMPLEX_FLOAT +#endif +#ifdef KOKKOSKERNELS_INST_COMPLEX_DOUBLE +#define KOKKOSKERNELS_TEST_COMPLEX_DOUBLE +#endif + +#endif + namespace Test { template void impl_test_serial_gemv(const char *mode, int N, int M) { @@ -117,17 +162,20 @@ void impl_test_serial_gemv(const char *mode, int N, int M) { EXPECT_NEAR_KK(const_const_result, expected_result, eps * expected_result); } -template +template struct Functor_TestSerialGemv { - ViewType _a, _b, _c; + ViewAType _a; + ViewBType _b; + ViewCType _c; ScalarType _alpha, _beta; KOKKOS_INLINE_FUNCTION - Functor_TestSerialGemv(const ScalarType alpha, const ViewType &a, - const ViewType &b, const ScalarType beta, - const ViewType &c) + Functor_TestSerialGemv(const ScalarType alpha, const ViewAType &a, + const ViewBType &b, const ScalarType beta, + const ViewCType &c) : _a(a), _b(b), _c(c), _alpha(alpha), _beta(beta) {} KOKKOS_INLINE_FUNCTION @@ -141,10 +189,16 @@ struct Functor_TestSerialGemv { } inline void run() { - typedef typename ViewType::value_type value_type; + typedef typename ViewAType::value_type value_type; std::string name_region("KokkosBlas::Test::SerialGemv"); - const std::string name_value_type = Test::value_type_name(); - std::string name = name_region + name_value_type; + const std::string name_value_type = + (std::is_same::value && + std::is_same::value) + ? Test::value_type_name() + : "::Mixed(" + Test::value_type_name() + + Test::value_type_name() + + Test::value_type_name() + ")"; + std::string name = name_region + name_value_type; Kokkos::Profiling::pushRegion(name.c_str()); Kokkos::RangePolicy policy(0, _c.extent(0)); Kokkos::parallel_for(name.c_str(), policy, *this); @@ -152,24 +206,27 @@ struct Functor_TestSerialGemv { } }; -template void impl_test_batched_serial_gemv(const int N, const int BlkSize) { - typedef typename ViewType::value_type value_type; - typedef Kokkos::Details::ArithTraits ats; + typedef Kokkos::View ViewAType; + typedef Kokkos::View ViewBType; + typedef Kokkos::View ViewCType; + typedef Kokkos::Details::ArithTraits c_ats; /// randomized input testing views ScalarType alpha = 1.5, beta = 3.0; - ViewType a0("a0", N, BlkSize, BlkSize), a1("a1", N, BlkSize, BlkSize), - b0("b0", N, BlkSize, 1), b1("b1", N, BlkSize, 1), c0("c0", N, BlkSize, 1), - c1("c1", N, BlkSize, 1); + ViewAType a0("a0", N, BlkSize, BlkSize), a1("a1", N, BlkSize, BlkSize); + ViewBType b0("b0", N, BlkSize, 1), b1("b1", N, BlkSize, 1); + ViewCType c0("c0", N, BlkSize, 1), c1("c1", N, BlkSize, 1); Kokkos::Random_XorShift64_Pool random( 13718); - Kokkos::fill_random(a0, random, value_type(1.0)); - Kokkos::fill_random(b0, random, value_type(1.0)); - Kokkos::fill_random(c0, random, value_type(1.0)); + Kokkos::fill_random(a0, random, ValueAType(1.0)); + Kokkos::fill_random(b0, random, ValueBType(1.0)); + Kokkos::fill_random(c0, random, ValueCType(1.0)); Kokkos::fence(); @@ -178,33 +235,35 @@ void impl_test_batched_serial_gemv(const int N, const int BlkSize) { Kokkos::deep_copy(c1, c0); /// test body - Functor_TestSerialGemv(alpha, a0, b0, beta, c0) .run(); - Functor_TestSerialGemv(alpha, a1, b1, beta, c1) + Functor_TestSerialGemv(alpha, a1, b1, + beta, c1) .run(); Kokkos::fence(); /// for comparison send it to host - typename ViewType::HostMirror c0_host = Kokkos::create_mirror_view(c0); - typename ViewType::HostMirror c1_host = Kokkos::create_mirror_view(c1); + typename ViewCType::HostMirror c0_host = Kokkos::create_mirror_view(c0); + typename ViewCType::HostMirror c1_host = Kokkos::create_mirror_view(c1); Kokkos::deep_copy(c0_host, c0); Kokkos::deep_copy(c1_host, c1); /// check c0 = c1 ; this eps is about 10^-14 - typedef typename ats::mag_type mag_type; + typedef typename c_ats::mag_type mag_type; mag_type sum(1), diff(0); - const mag_type eps = 1.0e3 * ats::epsilon(); + const mag_type eps = 1.0e3 * c_ats::epsilon(); for (int k = 0; k < N; ++k) for (int i = 0; i < BlkSize; ++i) for (int j = 0; j < 1; ++j) { - sum += ats::abs(c0_host(k, i, j)); - diff += ats::abs(c0_host(k, i, j) - c1_host(k, i, j)); + sum += c_ats::abs(c0_host(k, i, j)); + diff += c_ats::abs(c0_host(k, i, j) - c1_host(k, i, j)); } EXPECT_NEAR_KK(diff / sum, 0, eps); } @@ -213,9 +272,7 @@ void impl_test_batched_serial_gemv(const int N, const int BlkSize) { template int test_serial_gemv(const char *mode) { -#if defined(KOKKOSKERNELS_INST_LAYOUTLEFT) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +#ifdef KOKKOSKERNELS_TEST_LAYOUTLEFT typedef Kokkos::View view_type_a_ll; typedef Kokkos::View view_type_b_ll; typedef Kokkos::View view_type_c_ll; @@ -227,9 +284,7 @@ int test_serial_gemv(const char *mode) { Device>(mode, 124, 124); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTRIGHT) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +#ifdef KOKKOSKERNELS_TEST_LAYOUTRIGHT typedef Kokkos::View view_type_a_lr; typedef Kokkos::View view_type_b_lr; typedef Kokkos::View view_type_c_lr; @@ -241,9 +296,7 @@ int test_serial_gemv(const char *mode) { Device>(mode, 124, 124); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +#ifdef KOKKOSKERNELS_TEST_LAYOUTSTRIDE typedef Kokkos::View view_type_a_ls; typedef Kokkos::View view_type_b_ls; typedef Kokkos::View view_type_c_ls; @@ -255,8 +308,7 @@ int test_serial_gemv(const char *mode) { Device>(mode, 124, 124); #endif -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) +#ifdef KOKKOSKERNELS_TEST_MIXED_TYPES Test::impl_test_serial_gemv(mode, 124, 124); Test::impl_test_serial_gemv int test_batched_serial_gemv() { -#if defined(KOKKOSKERNELS_INST_LAYOUTLEFT) +#ifdef KOKKOSKERNELS_TEST_LAYOUTLEFT { - typedef Kokkos::View - ViewType; - Test::impl_test_batched_serial_gemv(0, 10); + Test::impl_test_batched_serial_gemv(0, 10); for (int i = 0; i < 10; ++i) { // printf("Testing: LayoutLeft, Blksize %d\n", i); - Test::impl_test_batched_serial_gemv(1024, i); + Test::impl_test_batched_serial_gemv(1024, + i); } } #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTRIGHT) +#ifdef KOKKOSKERNELS_TEST_LAYOUTRIGHT { - typedef Kokkos::View - ViewType; - Test::Gemv::impl_test_batched_serial_gemv(0, 10); + Test::impl_test_batched_serial_gemv(0, 10); for (int i = 0; i < 10; ++i) { // printf("Testing: LayoutRight, Blksize %d\n", i); - Test::Gemv::impl_test_batched_serial_gemv< - DeviceType, ViewType, ScalarType, TransType, AlgoTagType>(1024, i); + Test::impl_test_batched_serial_gemv(1024, + i); } } #endif @@ -300,24 +354,22 @@ int test_batched_serial_gemv() { return 0; } -#define TEST_CASE4(NAME, SCALAR_A, SCALAR_X, SCALAR_Y, SCALAR_COEF) \ - TEST_F(TestCategory, serial_gemv_nt_##NAME) { \ - /* FIXME: implement arbitrary SCALAR_COEF for alpha/beta type */ \ - test_serial_gemv("N"); \ - } \ - TEST_F(TestCategory, serial_gemv_t_##NAME) { \ - /* FIXME: implement arbitrary SCALAR_COEF for alpha/beta type */ \ - test_serial_gemv("T"); \ - } \ - TEST_F(TestCategory, serial_gemv_nt2_##NAME) { \ - /* FIXME: implement mixed scalar support and test */ \ - test_batched_serial_gemv(); \ - } \ - TEST_F(TestCategory, serial_gemv_t2_##NAME) { \ - /* FIXME: implement mixed scalar support and test */ \ - test_batched_serial_gemv(); \ +#define TEST_CASE4(NAME, SCALAR_A, SCALAR_X, SCALAR_Y, SCALAR_COEF) \ + TEST_F(TestCategory, serial_gemv_nt_##NAME) { \ + /* FIXME: implement arbitrary SCALAR_COEF for alpha/beta type */ \ + test_serial_gemv("N"); \ + } \ + TEST_F(TestCategory, serial_gemv_t_##NAME) { \ + /* FIXME: implement arbitrary SCALAR_COEF for alpha/beta type */ \ + test_serial_gemv("T"); \ + } \ + TEST_F(TestCategory, serial_gemv_nt2_##NAME) { \ + test_batched_serial_gemv(); \ + } \ + TEST_F(TestCategory, serial_gemv_t2_##NAME) { \ + test_batched_serial_gemv(); \ } #define _COMMON_TYPE3(T1, T2, T3) std::common_type::type @@ -328,40 +380,29 @@ int test_batched_serial_gemv() { #define TEST_CASE2(NAME, SCALAR, SCALAR_COEF) \ TEST_CASE4(NAME, SCALAR, SCALAR, SCALAR, SCALAR_COEF) -#define TEST_CASE(NAME, SCALAR) TEST_CASE2(NAME, SCALAR, SCALAR) +#define TEST_CASE(NAME, SCALAR) TEST_CASE2(NAME, SCALAR, SCALAR) -#if defined(KOKKOSKERNELS_INST_FLOAT) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +#ifdef KOKKOSKERNELS_TEST_FLOAT TEST_CASE(nt_float, float) #endif -#if defined(KOKKOSKERNELS_INST_DOUBLE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +#ifdef KOKKOSKERNELS_TEST_DOUBLE TEST_CASE(nt_double, double) #endif -#if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +#ifdef KOKKOSKERNELS_TEST_COMPLEX_DOUBLE TEST_CASE(nt_complex_double, Kokkos::complex) #endif -#if defined(KOKKOSKERNELS_INST_COMPLEX_FLOAT) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +#ifdef KOKKOSKERNELS_TEST_COMPLEX_FLOAT TEST_CASE(nt_complex_float, Kokkos::complex) #endif -#if defined(KOKKOSKERNELS_INST_INT) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +#ifdef KOKKOSKERNELS_TEST_INT TEST_CASE(nt_complex_int, int) #endif -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) +#ifdef KOKKOSKERNELS_TEST_MIXED_TYPES // test mixed scalar types TEST_CASE3(nt_mixed, double, int, float) From d29827167e20079c0d7cf90348d3aa9e2dcc03b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Wed, 13 Jul 2022 20:12:15 +0200 Subject: [PATCH 009/226] Support arbitrary alpha/beta type --- src/blas/KokkosBlas2_serial_gemv.hpp | 17 ++-- unit_test/blas/Test_Blas2_serial_gemv.hpp | 116 +++++++++++----------- 2 files changed, 62 insertions(+), 71 deletions(-) diff --git a/src/blas/KokkosBlas2_serial_gemv.hpp b/src/blas/KokkosBlas2_serial_gemv.hpp index 3016202dfc..586553b8ab 100644 --- a/src/blas/KokkosBlas2_serial_gemv.hpp +++ b/src/blas/KokkosBlas2_serial_gemv.hpp @@ -52,22 +52,17 @@ namespace KokkosBlas { namespace Experimental { -template -void KOKKOS_INLINE_FUNCTION -gemv(const char trans, const ScalarType& alpha, const MatrixType& A, - const XVector& x, const typename YVector::non_const_value_type& beta, - const YVector& y) { +template +void KOKKOS_INLINE_FUNCTION gemv(const char trans, const ScalarType& alpha, + const MatrixType& A, const XVector& x, + const ScalarType& beta, const YVector& y) { using algo = KokkosBlas::Algo::Gemv::Default; - // ensure same type for alpha and beta (required by serial impl) - const auto beta_ = static_cast(beta); - if (trans == 'N' || trans == 'n') { using mode = KokkosBlas::Trans::NoTranspose; - KokkosBlas::SerialGemv::invoke(alpha, A, x, beta_, y); + KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); } else if (trans == 'T' || trans == 't') { using mode = KokkosBlas::Trans::Transpose; - KokkosBlas::SerialGemv::invoke(alpha, A, x, beta_, y); + KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); } else { // NOT supported: Conjugate, ConjTranspose std::ostringstream os; os << "Matrix mode not supported: " << trans << std::endl; diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index 3b33187084..02769cd043 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -58,7 +58,8 @@ #endif namespace Test { -template +template void impl_test_serial_gemv(const char *mode, int N, int M) { typedef typename ViewTypeA::value_type ScalarA; typedef typename ViewTypeX::value_type ScalarX; @@ -80,9 +81,9 @@ void impl_test_serial_gemv(const char *mode, int N, int M) { Device> BaseTypeY; - ScalarA a = 3; - ScalarX b = 5; - double eps = (std::is_same::value || + ScalarType a = 3; + ScalarType b = 5; + double eps = (std::is_same::value || std::is_same>::value) ? 2 * 1e-5 : 1e-7; @@ -207,14 +208,17 @@ struct Functor_TestSerialGemv { }; template void impl_test_batched_serial_gemv(const int N, const int BlkSize) { typedef Kokkos::View ViewAType; typedef Kokkos::View ViewBType; typedef Kokkos::View ViewCType; typedef Kokkos::Details::ArithTraits c_ats; - + typedef typename std::conditional< + std::is_void::value, + typename std::common_type::type, CoefType>::type + ScalarType; /// randomized input testing views ScalarType alpha = 1.5, beta = 3.0; @@ -268,55 +272,53 @@ void impl_test_batched_serial_gemv(const int N, const int BlkSize) { EXPECT_NEAR_KK(diff / sum, 0, eps); } -} // namespace Test +template +struct SerialGEMVTest { + // ScalarCoef==void default behavior is to derive alpha/beta scalar types + // from A and X scalar types + using ScalarType = typename std::conditional< + !std::is_void::value, ScalarCoef, + typename std::common_type::type>::type; -template -int test_serial_gemv(const char *mode) { + static void run(const char *mode) { #ifdef KOKKOSKERNELS_TEST_LAYOUTLEFT - typedef Kokkos::View view_type_a_ll; - typedef Kokkos::View view_type_b_ll; - typedef Kokkos::View view_type_c_ll; - Test::impl_test_serial_gemv(mode, 0, 1024); - Test::impl_test_serial_gemv(mode, 13, 1024); - Test::impl_test_serial_gemv(mode, 124, 124); + run_layout(mode); #endif - #ifdef KOKKOSKERNELS_TEST_LAYOUTRIGHT - typedef Kokkos::View view_type_a_lr; - typedef Kokkos::View view_type_b_lr; - typedef Kokkos::View view_type_c_lr; - Test::impl_test_serial_gemv(mode, 0, 1024); - Test::impl_test_serial_gemv(mode, 13, 1024); - Test::impl_test_serial_gemv(mode, 124, 124); + run_layout(mode); #endif - #ifdef KOKKOSKERNELS_TEST_LAYOUTSTRIDE - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - typedef Kokkos::View view_type_c_ls; - Test::impl_test_serial_gemv(mode, 0, 1024); - Test::impl_test_serial_gemv(mode, 13, 1024); - Test::impl_test_serial_gemv(mode, 124, 124); + run_layout(mode); #endif - -#ifdef KOKKOSKERNELS_TEST_MIXED_TYPES - Test::impl_test_serial_gemv(mode, 124, 124); - Test::impl_test_serial_gemv(mode, 124, 124); +#ifdef KOKKOSKERNELS_TEST_ALL_TYPES + using A_t = typename Kokkos::View; + using x_t = typename Kokkos::View; + using y_t = typename Kokkos::View; + run_views(mode); #endif + } - return 0; -} + template + static void run_layout(const char *mode) { + typedef Kokkos::View view_type_A; + typedef Kokkos::View view_type_x; + typedef Kokkos::View view_type_y; + run_views(mode); + } + + template + static void run_views(const char *mode) { + constexpr auto impl_test = + impl_test_serial_gemv; + impl_test(mode, 0, 1024); + impl_test(mode, 13, 1024); + impl_test(mode, 124, 124); + } +}; + +} // namespace Test template ("N"); \ + ::Test::SerialGEMVTest::run("N"); \ } \ TEST_F(TestCategory, serial_gemv_t_##NAME) { \ - /* FIXME: implement arbitrary SCALAR_COEF for alpha/beta type */ \ - test_serial_gemv("T"); \ + ::Test::SerialGEMVTest::run("T"); \ } \ TEST_F(TestCategory, serial_gemv_nt2_##NAME) { \ test_batched_serial_gemv(); \ } -#define _COMMON_TYPE3(T1, T2, T3) std::common_type::type - -#define TEST_CASE3(NAME, SCALAR_A, SCALAR_X, SCALAR_Y) \ - TEST_CASE4(NAME, SCALAR_A, SCALAR_X, SCALAR_Y, \ - _COMMON_TYPE3(SCALAR_A, SCALAR_X, SCALAR_Y)) - #define TEST_CASE2(NAME, SCALAR, SCALAR_COEF) \ TEST_CASE4(NAME, SCALAR, SCALAR, SCALAR, SCALAR_COEF) -#define TEST_CASE(NAME, SCALAR) TEST_CASE2(NAME, SCALAR, SCALAR) +#define TEST_CASE(NAME, SCALAR) TEST_CASE2(NAME, SCALAR, SCALAR) #ifdef KOKKOSKERNELS_TEST_FLOAT TEST_CASE(nt_float, float) @@ -402,9 +398,9 @@ TEST_CASE(nt_complex_float, Kokkos::complex) TEST_CASE(nt_complex_int, int) #endif -#ifdef KOKKOSKERNELS_TEST_MIXED_TYPES -// test mixed scalar types -TEST_CASE3(nt_mixed, double, int, float) +#ifdef KOKKOSKERNELS_TEST_ALL_TYPES +// test mixed scalar types (void -> default alpha/beta) +TEST_CASE4(nt_mixed, double, int, float, void) // test arbitrary double alpha/beta with complex values TEST_CASE2(nt_alphabeta, Kokkos::complex, double) From 12753c52692a85e9b1526270a3aa07edd4e4d30f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Thu, 14 Jul 2022 00:35:28 +0200 Subject: [PATCH 010/226] Refactor and merge serial GEMV unit tests --- src/blas/KokkosBlas2_serial_gemv.hpp | 15 +- test_common/KokkosKernels_TestUtils.hpp | 35 ++ unit_test/blas/Test_Blas2_serial_gemv.hpp | 496 +++++++--------------- 3 files changed, 207 insertions(+), 339 deletions(-) diff --git a/src/blas/KokkosBlas2_serial_gemv.hpp b/src/blas/KokkosBlas2_serial_gemv.hpp index 586553b8ab..5c6b33a4e9 100644 --- a/src/blas/KokkosBlas2_serial_gemv.hpp +++ b/src/blas/KokkosBlas2_serial_gemv.hpp @@ -52,17 +52,17 @@ namespace KokkosBlas { namespace Experimental { -template +template void KOKKOS_INLINE_FUNCTION gemv(const char trans, const ScalarType& alpha, const MatrixType& A, const XVector& x, const ScalarType& beta, const YVector& y) { - using algo = KokkosBlas::Algo::Gemv::Default; if (trans == 'N' || trans == 'n') { using mode = KokkosBlas::Trans::NoTranspose; - KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); + KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); } else if (trans == 'T' || trans == 't') { using mode = KokkosBlas::Trans::Transpose; - KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); + KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); } else { // NOT supported: Conjugate, ConjTranspose std::ostringstream os; os << "Matrix mode not supported: " << trans << std::endl; @@ -70,6 +70,13 @@ void KOKKOS_INLINE_FUNCTION gemv(const char trans, const ScalarType& alpha, } } +template +void KOKKOS_INLINE_FUNCTION gemv(const char trans, const ScalarType& alpha, + const MatrixType& A, const XVector& x, + const ScalarType& beta, const YVector& y) { + gemv(trans, alpha, A, x, beta, y); +} + } // namespace Experimental } // namespace KokkosBlas diff --git a/test_common/KokkosKernels_TestUtils.hpp b/test_common/KokkosKernels_TestUtils.hpp index 228e0050c6..524ef54aa0 100644 --- a/test_common/KokkosKernels_TestUtils.hpp +++ b/test_common/KokkosKernels_TestUtils.hpp @@ -54,6 +54,41 @@ // Make this include-able from all subdirectories #include "../tpls/gtest/gtest/gtest.h" //for EXPECT_** +// Simplify ETI macros +#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) +#define KOKKOSKERNELS_TEST_ALL_TYPES +#endif +#if defined(KOKKOSKERNELS_INST_LAYOUTLEFT) || \ + defined(KOKKOSKERNELS_TEST_ALL_TYPES) +#define KOKKOSKERNELS_TEST_LAYOUTLEFT +#endif +#if defined(KOKKOSKERNELS_INST_LAYOUTRIGHT) || \ + defined(KOKKOSKERNELS_TEST_ALL_TYPES) +#define KOKKOSKERNELS_TEST_LAYOUTRIGHT +#endif +#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + defined(KOKKOSKERNELS_TEST_ALL_TYPES) +#define KOKKOSKERNELS_TEST_LAYOUTSTRIDE +#endif +#if defined(KOKKOSKERNELS_INST_FLOAT) || defined(KOKKOSKERNELS_TEST_ALL_TYPES) +#define KOKKOSKERNELS_TEST_FLOAT +#endif +#if defined(KOKKOSKERNELS_INST_DOUBLE) || defined(KOKKOSKERNELS_TEST_ALL_TYPES) +#define KOKKOSKERNELS_TEST_DOUBLE +#endif +#if defined(KOKKOSKERNELS_INST_INT) || defined(KOKKOSKERNELS_TEST_ALL_TYPES) +#define KOKKOSKERNELS_TEST_INT +#endif +#if defined(KOKKOSKERNELS_INST_COMPLEX_FLOAT) || \ + defined(KOKKOSKERNELS_TEST_ALL_TYPES) +#define KOKKOSKERNELS_TEST_COMPLEX_FLOAT +#endif +#if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) || \ + defined(KOKKOSKERNELS_TEST_ALL_TYPES) +#define KOKKOSKERNELS_TEST_COMPLEX_DOUBLE +#endif + namespace Test { template #include -// Simplify ETI ifdefs -// TODO: Maybe define this for all tests globally ? -// + maybe this logic should be in CMake for concisiety -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - -#define KOKKOSKERNELS_TEST_MIXED_TYPES -#define KOKKOSKERNELS_TEST_LAYOUTLEFT -#define KOKKOSKERNELS_TEST_LAYOUTRIGHT -#define KOKKOSKERNELS_TEST_LAYOUTSTRIDE -#define KOKKOSKERNELS_TEST_FLOAT -#define KOKKOSKERNELS_TEST_DOUBLE -#define KOKKOSKERNELS_TEST_INT -#define KOKKOSKERNELS_TEST_COMPLEX_FLOAT -#define KOKKOSKERNELS_TEST_COMPLEX_DOUBLE - -#else - -#ifdef KOKKOSKERNELS_INST_LAYOUTLEFT -#define KOKKOSKERNELS_TEST_LAYOUTLEFT -#endif -#ifdef KOKKOSKERNELS_INST_LAYOUTRIGHT -#define KOKKOSKERNELS_TEST_LAYOUTRIGHT -#endif -#ifdef KOKKOSKERNELS_INST_LAYOUTSTRIDE -#define KOKKOSKERNELS_TEST_LAYOUTSTRIDE -#endif -#ifdef KOKKOSKERNELS_INST_FLOAT -#define KOKKOSKERNELS_TEST_FLOAT -#endif -#ifdef KOKKOSKERNELS_INST_DOUBLE -#define KOKKOSKERNELS_TEST_DOUBLE -#endif -#ifdef KOKKOSKERNELS_INST_INT -#define KOKKOSKERNELS_TEST_INT -#endif -#ifdef KOKKOSKERNELS_INST_COMPLEX_FLOAT -#define KOKKOSKERNELS_TEST_COMPLEX_FLOAT -#endif -#ifdef KOKKOSKERNELS_INST_COMPLEX_DOUBLE -#define KOKKOSKERNELS_TEST_COMPLEX_DOUBLE -#endif - -#endif - namespace Test { -template -void impl_test_serial_gemv(const char *mode, int N, int M) { - typedef typename ViewTypeA::value_type ScalarA; - typedef typename ViewTypeX::value_type ScalarX; - typedef typename ViewTypeY::value_type ScalarY; - - typedef multivector_layout_adapter vfA_type; - typedef Kokkos::View< - ScalarX * [2], - typename std::conditional::value, - Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, - Device> - BaseTypeX; - typedef Kokkos::View< - ScalarY * [2], - typename std::conditional::value, - Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, - Device> - BaseTypeY; - - ScalarType a = 3; - ScalarType b = 5; - double eps = (std::is_same::value || - std::is_same>::value) - ? 2 * 1e-5 - : 1e-7; - - const auto Nt = mode[0] == 'N' ? N : M; - const auto Mt = mode[0] == 'N' ? M : N; - typename vfA_type::BaseType b_A("A", Nt, Mt); - BaseTypeX b_x("X", M); - BaseTypeY b_y("Y", N); - BaseTypeY b_org_y("Org_Y", N); - - ViewTypeA A = vfA_type::view(b_A); - ViewTypeX x = Kokkos::subview(b_x, Kokkos::ALL(), 0); - ViewTypeY y = Kokkos::subview(b_y, Kokkos::ALL(), 0); - typename ViewTypeX::const_type c_x = x; - typename ViewTypeA::const_type c_A = A; - - typedef multivector_layout_adapter h_vfA_type; - - typename h_vfA_type::BaseType h_b_A = Kokkos::create_mirror_view(b_A); - typename BaseTypeX::HostMirror h_b_x = Kokkos::create_mirror_view(b_x); - typename BaseTypeY::HostMirror h_b_y = Kokkos::create_mirror_view(b_y); - - typename ViewTypeA::HostMirror h_A = h_vfA_type::view(h_b_A); - typename ViewTypeX::HostMirror h_x = Kokkos::subview(h_b_x, Kokkos::ALL(), 0); - typename ViewTypeY::HostMirror h_y = Kokkos::subview(h_b_y, Kokkos::ALL(), 0); - - Kokkos::Random_XorShift64_Pool rand_pool( - 13718); - - Kokkos::fill_random(b_x, rand_pool, ScalarX(10)); - Kokkos::fill_random(b_y, rand_pool, ScalarY(10)); - Kokkos::fill_random(b_A, rand_pool, ScalarA(10)); - - Kokkos::deep_copy(b_org_y, b_y); - - Kokkos::deep_copy(h_b_x, b_x); - Kokkos::deep_copy(h_b_y, b_y); - Kokkos::deep_copy(h_b_A, b_A); - - ScalarY expected_result = 0; - if (mode[0] != 'N' && mode[0] != 'T' && mode[0] != 'C') { - throw std::runtime_error("incorrect matrix mode letter !"); - } - typedef Kokkos::Details::ArithTraits ATV; - for (int i = 0; i < N; i++) { - ScalarY y_i = ScalarY(); - for (int j = 0; j < M; j++) { - const auto a_val = mode[0] == 'C' - ? ATV::conj(h_A(j, i)) - : (mode[0] == 'T' ? h_A(j, i) : h_A(i, j)); - y_i += a_val * h_x(j); - } - expected_result += (b * h_y(i) + a * y_i) * (b * h_y(i) + a * y_i); - } - - char trans = mode[0]; - - KokkosBlas::Experimental::gemv(trans, a, A, x, b, y); - - ScalarY nonconst_nonconst_result = KokkosBlas::dot(y, y); - EXPECT_NEAR_KK(nonconst_nonconst_result, expected_result, - eps * expected_result); - - Kokkos::deep_copy(b_y, b_org_y); - - KokkosBlas::Experimental::gemv(trans, a, A, c_x, b, y); - - ScalarY const_nonconst_result = KokkosBlas::dot(y, y); - EXPECT_NEAR_KK(const_nonconst_result, expected_result, eps * expected_result); - - Kokkos::deep_copy(b_y, b_org_y); - - KokkosBlas::Experimental::gemv(trans, a, c_A, c_x, b, y); - - ScalarY const_const_result = KokkosBlas::dot(y, y); - EXPECT_NEAR_KK(const_const_result, expected_result, eps * expected_result); -} - -template -struct Functor_TestSerialGemv { - ViewAType _a; - ViewBType _b; - ViewCType _c; - - ScalarType _alpha, _beta; - - KOKKOS_INLINE_FUNCTION - Functor_TestSerialGemv(const ScalarType alpha, const ViewAType &a, - const ViewBType &b, const ScalarType beta, - const ViewCType &c) - : _a(a), _b(b), _c(c), _alpha(alpha), _beta(beta) {} - - KOKKOS_INLINE_FUNCTION - void operator()(const TransType &, const int k) const { - auto aa = Kokkos::subview(_a, k, Kokkos::ALL(), Kokkos::ALL()); - auto bb = Kokkos::subview(_b, k, Kokkos::ALL(), 0); - auto cc = Kokkos::subview(_c, k, Kokkos::ALL(), 0); - - KokkosBlas::SerialGemv::invoke(_alpha, aa, bb, - _beta, cc); - } - - inline void run() { - typedef typename ViewAType::value_type value_type; - std::string name_region("KokkosBlas::Test::SerialGemv"); - const std::string name_value_type = - (std::is_same::value && - std::is_same::value) - ? Test::value_type_name() - : "::Mixed(" + Test::value_type_name() + - Test::value_type_name() + - Test::value_type_name() + ")"; - std::string name = name_region + name_value_type; - Kokkos::Profiling::pushRegion(name.c_str()); - Kokkos::RangePolicy policy(0, _c.extent(0)); - Kokkos::parallel_for(name.c_str(), policy, *this); - Kokkos::Profiling::popRegion(); - } -}; - -template -void impl_test_batched_serial_gemv(const int N, const int BlkSize) { - typedef Kokkos::View ViewAType; - typedef Kokkos::View ViewBType; - typedef Kokkos::View ViewCType; - typedef Kokkos::Details::ArithTraits c_ats; - typedef typename std::conditional< - std::is_void::value, - typename std::common_type::type, CoefType>::type - ScalarType; - /// randomized input testing views - ScalarType alpha = 1.5, beta = 3.0; - - ViewAType a0("a0", N, BlkSize, BlkSize), a1("a1", N, BlkSize, BlkSize); - ViewBType b0("b0", N, BlkSize, 1), b1("b1", N, BlkSize, 1); - ViewCType c0("c0", N, BlkSize, 1), c1("c1", N, BlkSize, 1); - - Kokkos::Random_XorShift64_Pool random( - 13718); - Kokkos::fill_random(a0, random, ValueAType(1.0)); - Kokkos::fill_random(b0, random, ValueBType(1.0)); - Kokkos::fill_random(c0, random, ValueCType(1.0)); - - Kokkos::fence(); - - Kokkos::deep_copy(a1, a0); - Kokkos::deep_copy(b1, b0); - Kokkos::deep_copy(c1, c0); - - /// test body - Functor_TestSerialGemv(alpha, a0, b0, beta, - c0) - .run(); - Functor_TestSerialGemv(alpha, a1, b1, - beta, c1) - .run(); - - Kokkos::fence(); - - /// for comparison send it to host - typename ViewCType::HostMirror c0_host = Kokkos::create_mirror_view(c0); - typename ViewCType::HostMirror c1_host = Kokkos::create_mirror_view(c1); - - Kokkos::deep_copy(c0_host, c0); - Kokkos::deep_copy(c1_host, c1); - - /// check c0 = c1 ; this eps is about 10^-14 - typedef typename c_ats::mag_type mag_type; - mag_type sum(1), diff(0); - const mag_type eps = 1.0e3 * c_ats::epsilon(); - - for (int k = 0; k < N; ++k) - for (int i = 0; i < BlkSize; ++i) - for (int j = 0; j < 1; ++j) { - sum += c_ats::abs(c0_host(k, i, j)); - diff += c_ats::abs(c0_host(k, i, j) - c1_host(k, i, j)); - } - EXPECT_NEAR_KK(diff / sum, 0, eps); -} template -struct SerialGEMVTest { +class SerialGEMVTest { + private: + using random_pool_type = + Kokkos::Random_XorShift64_Pool; + // ScalarCoef==void default behavior is to derive alpha/beta scalar types // from A and X scalar types using ScalarType = typename std::conditional< !std::is_void::value, ScalarCoef, typename std::common_type::type>::type; - static void run(const char *mode) { + public: + static void run(const char *mode) { run_layouts(mode); } + + private: + static void run_layouts(const char *mode) { + // Note: all layouts listed here are subview'ed to test Kokkos::LayoutStride #ifdef KOKKOSKERNELS_TEST_LAYOUTLEFT - run_layout(mode); + run_view_types(mode); #endif #ifdef KOKKOSKERNELS_TEST_LAYOUTRIGHT - run_layout(mode); + run_view_types(mode); #endif -#ifdef KOKKOSKERNELS_TEST_LAYOUTSTRIDE - run_layout(mode); -#endif -#ifdef KOKKOSKERNELS_TEST_ALL_TYPES - using A_t = typename Kokkos::View; +#if defined(KOKKOSKERNELS_TEST_LAYOUTLEFT) && \ + defined(KOKKOSKERNELS_TEST_LAYOUTRIGHT) + using A_t = typename Kokkos::View; using x_t = typename Kokkos::View; using y_t = typename Kokkos::View; - run_views(mode); + run_sizes(mode); #endif } template - static void run_layout(const char *mode) { + static void run_view_types(const char *mode) { typedef Kokkos::View view_type_A; typedef Kokkos::View view_type_x; typedef Kokkos::View view_type_y; - run_views(mode); + run_sizes(mode); } template - static void run_views(const char *mode) { - constexpr auto impl_test = - impl_test_serial_gemv; - impl_test(mode, 0, 1024); - impl_test(mode, 13, 1024); - impl_test(mode, 124, 124); + static void run_sizes(const char *mode) { + // zero cases + run_size(mode, 0, 0); + run_size(mode, 0, 4); + run_size(mode, 4, 0); + // small block sizes + for (int n = 1; n <= 16; ++n) { + run_size(mode, n, n); + } + // other cases + run_size(mode, 1024, 1); + run_size(mode, 1024, 13); + run_size(mode, 1024, 124); } -}; -} // namespace Test + template + static void run_size(const char *mode, int N, int M) { + using A_layout = typename ViewTypeA::array_layout; + using x_layout = typename ViewTypeX::array_layout; + using y_layout = typename ViewTypeY::array_layout; + static_assert(!std::is_same::value, ""); + static_assert(!std::is_same::value, ""); + static_assert(!std::is_same::value, ""); + + const char trans = mode[0]; + const auto Nt = trans == 'N' ? N : M; + const auto Mt = trans == 'N' ? M : N; + + // 1. run on regular (non-strided) views + ViewTypeA A1("A1", Nt, Mt); + ViewTypeX x1("X1", M); + ViewTypeY y1("Y1", N); + run_views(trans, A1, x1, y1); + + // 2. run on strided subviews (enforced by adding extra rank on both sides) + // TODO: use multivector_layout_adapter from Kokkos_TestUtils.hpp ? + // it does NOT [always] produce strided subviews yet: fix it ? + typedef Kokkos::View BaseTypeA; + typedef Kokkos::View BaseTypeX; + typedef Kokkos::View BaseTypeY; + + BaseTypeA b_A("A", 2, Nt, Mt, 2); + BaseTypeX b_x("X", 2, M, 2); + BaseTypeY b_y("Y", 2, N, 2); + auto A = Kokkos::subview(b_A, 0, Kokkos::ALL(), Kokkos::ALL(), 0); + auto x = Kokkos::subview(b_x, 0, Kokkos::ALL(), 0); + auto y = Kokkos::subview(b_y, 0, Kokkos::ALL(), 0); + + // make sure it's actually LayoutStride there + static_assert(std::is_same::value, + ""); + static_assert(std::is_same::value, + ""); + static_assert(std::is_same::value, + ""); + run_views(trans, A, x, y); + } -template -int test_batched_serial_gemv() { -#ifdef KOKKOSKERNELS_TEST_LAYOUTLEFT - { - Test::impl_test_batched_serial_gemv(0, 10); - for (int i = 0; i < 10; ++i) { - // printf("Testing: LayoutLeft, Blksize %d\n", i); - Test::impl_test_batched_serial_gemv(1024, - i); - } + template + static void run_views(const char trans, ViewTypeA A, ViewTypeX x, + ViewTypeY y) { + ScalarType a = 3; + ScalarType b = 5; + double eps = (std::is_same::value || + std::is_same>::value) + ? 2 * 1e-5 + : 1e-7; + + // fill in input views + random_pool_type rand_pool(13718); + Kokkos::fill_random(A, rand_pool, ScalarA(10)); + Kokkos::fill_random(x, rand_pool, ScalarX(10)); + Kokkos::fill_random(y, rand_pool, ScalarY(10)); + Kokkos::fence(); + + // backup initial y values because it gets updated in calculation + Kokkos::View org_y("Org_Y", + y.extent(0)); + Kokkos::deep_copy(org_y, y); + + ScalarY expected_result = get_expected_result(trans, a, A, x, b, y); + + // 1. check non-consts + Kokkos::deep_copy(y, org_y); + + KokkosBlas::Experimental::gemv(trans, a, A, x, b, y); + + ScalarY nonconst_nonconst_result = KokkosBlas::dot(y, y); + EXPECT_NEAR_KK(nonconst_nonconst_result, expected_result, + eps * expected_result); + + // 2. check const x + Kokkos::deep_copy(y, org_y); + typename ViewTypeX::const_type c_x = x; + + KokkosBlas::Experimental::gemv(trans, a, A, c_x, b, y); + + ScalarY const_nonconst_result = KokkosBlas::dot(y, y); + EXPECT_NEAR_KK(const_nonconst_result, expected_result, + eps * expected_result); + + // 3. check const A and x + Kokkos::deep_copy(y, org_y); + typename ViewTypeA::const_type c_A = A; + + KokkosBlas::Experimental::gemv(trans, a, c_A, c_x, b, y); + + ScalarY const_const_result = KokkosBlas::dot(y, y); + EXPECT_NEAR_KK(const_const_result, expected_result, eps * expected_result); } -#endif -#ifdef KOKKOSKERNELS_TEST_LAYOUTRIGHT - { - Test::impl_test_batched_serial_gemv(0, 10); - for (int i = 0; i < 10; ++i) { - // printf("Testing: LayoutRight, Blksize %d\n", i); - Test::impl_test_batched_serial_gemv(1024, - i); - } + + template + static ScalarY get_expected_result(const char trans, ScalarType a, + ViewTypeA A, ViewTypeX x, ScalarType b, + ViewTypeY y) { + auto h_A = Kokkos::create_mirror_view(A); + auto h_x = Kokkos::create_mirror_view(x); + auto h_y = Kokkos::create_mirror_view(y); + Kokkos::deep_copy(h_A, A); + Kokkos::deep_copy(h_x, x); + Kokkos::deep_copy(h_y, y); + + vanillaGEMV(trans, a, h_A, h_x, b, h_y); + + return KokkosBlas::dot(h_y, h_y); } -#endif +}; + +} // namespace Test - return 0; -} - -#define TEST_CASE4(NAME, SCALAR_A, SCALAR_X, SCALAR_Y, SCALAR_COEF) \ - TEST_F(TestCategory, serial_gemv_nt_##NAME) { \ - ::Test::SerialGEMVTest::run("N"); \ - } \ - TEST_F(TestCategory, serial_gemv_t_##NAME) { \ - ::Test::SerialGEMVTest::run("T"); \ - } \ - TEST_F(TestCategory, serial_gemv_nt2_##NAME) { \ - test_batched_serial_gemv(); \ - } \ - TEST_F(TestCategory, serial_gemv_t2_##NAME) { \ - test_batched_serial_gemv(); \ +#define TEST_CASE4(NAME, SCALAR_A, SCALAR_X, SCALAR_Y, SCALAR_COEF) \ + TEST_F(TestCategory, serial_gemv_nt_##NAME) { \ + ::Test::SerialGEMVTest::run("N"); \ + } \ + TEST_F(TestCategory, serial_gemv_t_##NAME) { \ + ::Test::SerialGEMVTest::run("T"); \ } #define TEST_CASE2(NAME, SCALAR, SCALAR_COEF) \ @@ -379,31 +205,31 @@ int test_batched_serial_gemv() { #define TEST_CASE(NAME, SCALAR) TEST_CASE2(NAME, SCALAR, SCALAR) #ifdef KOKKOSKERNELS_TEST_FLOAT -TEST_CASE(nt_float, float) +TEST_CASE(float, float) #endif #ifdef KOKKOSKERNELS_TEST_DOUBLE -TEST_CASE(nt_double, double) +TEST_CASE(double, double) #endif #ifdef KOKKOSKERNELS_TEST_COMPLEX_DOUBLE -TEST_CASE(nt_complex_double, Kokkos::complex) +TEST_CASE(complex_double, Kokkos::complex) #endif #ifdef KOKKOSKERNELS_TEST_COMPLEX_FLOAT -TEST_CASE(nt_complex_float, Kokkos::complex) +TEST_CASE(complex_float, Kokkos::complex) #endif #ifdef KOKKOSKERNELS_TEST_INT -TEST_CASE(nt_complex_int, int) +TEST_CASE(int, int) #endif #ifdef KOKKOSKERNELS_TEST_ALL_TYPES // test mixed scalar types (void -> default alpha/beta) -TEST_CASE4(nt_mixed, double, int, float, void) +TEST_CASE4(mixed, double, int, float, void) // test arbitrary double alpha/beta with complex values -TEST_CASE2(nt_alphabeta, Kokkos::complex, double) +TEST_CASE2(alphabeta, Kokkos::complex, double) #endif #endif // Check for lambda availability on CUDA backend From 2e670d48c36ab98088be5fd117aae457f1934d34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Sat, 16 Jul 2022 15:45:53 +0200 Subject: [PATCH 011/226] unit test: accurate value-by-value verification of output vector --- test_common/KokkosKernels_TestUtils.hpp | 33 +++++++++++++++++++++++ unit_test/blas/Test_Blas2_serial_gemv.hpp | 28 +++++++------------ 2 files changed, 42 insertions(+), 19 deletions(-) diff --git a/test_common/KokkosKernels_TestUtils.hpp b/test_common/KokkosKernels_TestUtils.hpp index 524ef54aa0..5b15e48593 100644 --- a/test_common/KokkosKernels_TestUtils.hpp +++ b/test_common/KokkosKernels_TestUtils.hpp @@ -139,6 +139,22 @@ void EXPECT_NEAR_KK(Scalar1 val1, Scalar2 val2, Scalar3 tol, EXPECT_LE((double)AT1::abs(val1 - val2), (double)AT3::abs(tol)) << msg; } +template +void EXPECT_NEAR_KK_REL(Scalar1 val1, Scalar2 val2, Scalar3 tol, + std::string msg = "") { + typedef Kokkos::Details::ArithTraits AT1; + typedef Kokkos::Details::ArithTraits AT2; + typedef Kokkos::Details::ArithTraits AT3; + const auto tolerance = (double)AT3::abs(tol); + const auto diff = (double)AT1::abs(val1 - val2); + const auto val = KOKKOSKERNELS_MACRO_MAX(AT1::abs(val1), AT2::abs(val2)); + if (val < tolerance) { + // if both values are near-zero, they pass as equal + } else { + EXPECT_LE(diff / val, tolerance) << msg; + } +} + template void EXPECT_NEAR_KK_1DVIEW(ViewType1 v1, ViewType2 v2, Scalar tol) { size_t v1_size = v1.extent(0); @@ -156,6 +172,23 @@ void EXPECT_NEAR_KK_1DVIEW(ViewType1 v1, ViewType2 v2, Scalar tol) { } } +template +void EXPECT_NEAR_KK_REL_1DVIEW(ViewType1 v1, ViewType2 v2, Scalar tol) { + size_t v1_size = v1.extent(0); + size_t v2_size = v2.extent(0); + EXPECT_EQ(v1_size, v2_size); + + typename ViewType1::HostMirror h_v1 = Kokkos::create_mirror_view(v1); + typename ViewType2::HostMirror h_v2 = Kokkos::create_mirror_view(v2); + + KokkosKernels::Impl::safe_device_to_host_deep_copy(v1.extent(0), v1, h_v1); + KokkosKernels::Impl::safe_device_to_host_deep_copy(v2.extent(0), v2, h_v2); + + for (size_t i = 0; i < v1_size; ++i) { + EXPECT_NEAR_KK_REL(h_v1(i), h_v2(i), tol); + } +} + /// This function returns a descriptive user defined failure string for /// insertion into gtest macros such as FAIL() and EXPECT_LE(). \param file The /// filename where the failure originated \param func The function where the diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index 2daa8d85f3..b95c24d442 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -123,8 +123,7 @@ class SerialGEMVTest { ViewTypeY y) { ScalarType a = 3; ScalarType b = 5; - double eps = (std::is_same::value || - std::is_same>::value) + double eps = (std::is_same::value || std::is_same>::value) ? 2 * 1e-5 : 1e-7; @@ -140,39 +139,30 @@ class SerialGEMVTest { y.extent(0)); Kokkos::deep_copy(org_y, y); - ScalarY expected_result = get_expected_result(trans, a, A, x, b, y); + Kokkos::View ref_y("Y_reference", y.extent(0)); + Kokkos::deep_copy(ref_y, y); + get_expected_result(trans, a, A, x, b, ref_y); // 1. check non-consts Kokkos::deep_copy(y, org_y); - KokkosBlas::Experimental::gemv(trans, a, A, x, b, y); - - ScalarY nonconst_nonconst_result = KokkosBlas::dot(y, y); - EXPECT_NEAR_KK(nonconst_nonconst_result, expected_result, - eps * expected_result); + EXPECT_NEAR_KK_REL_1DVIEW(y, ref_y, eps); // 2. check const x Kokkos::deep_copy(y, org_y); typename ViewTypeX::const_type c_x = x; - KokkosBlas::Experimental::gemv(trans, a, A, c_x, b, y); - - ScalarY const_nonconst_result = KokkosBlas::dot(y, y); - EXPECT_NEAR_KK(const_nonconst_result, expected_result, - eps * expected_result); + EXPECT_NEAR_KK_REL_1DVIEW(y, ref_y, eps); // 3. check const A and x Kokkos::deep_copy(y, org_y); typename ViewTypeA::const_type c_A = A; - KokkosBlas::Experimental::gemv(trans, a, c_A, c_x, b, y); - - ScalarY const_const_result = KokkosBlas::dot(y, y); - EXPECT_NEAR_KK(const_const_result, expected_result, eps * expected_result); + EXPECT_NEAR_KK_REL_1DVIEW(y, ref_y, eps); } template - static ScalarY get_expected_result(const char trans, ScalarType a, + static void get_expected_result(const char trans, ScalarType a, ViewTypeA A, ViewTypeX x, ScalarType b, ViewTypeY y) { auto h_A = Kokkos::create_mirror_view(A); @@ -184,7 +174,7 @@ class SerialGEMVTest { vanillaGEMV(trans, a, h_A, h_x, b, h_y); - return KokkosBlas::dot(h_y, h_y); + Kokkos::deep_copy(y, h_y); } }; From 9a4a96b50feb9782f17c52a694c24f163e9e7fa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Wed, 20 Jul 2022 18:17:47 +0200 Subject: [PATCH 012/226] Make unit test work on CUDA and test both Blocked and Unblocked GEMV --- src/blas/KokkosBlas2_serial_gemv.hpp | 4 +- test_common/KokkosKernels_TestUtils.hpp | 20 ++- unit_test/blas/Test_Blas2_serial_gemv.hpp | 205 ++++++++++++++-------- 3 files changed, 144 insertions(+), 85 deletions(-) diff --git a/src/blas/KokkosBlas2_serial_gemv.hpp b/src/blas/KokkosBlas2_serial_gemv.hpp index 5c6b33a4e9..b2cdba9678 100644 --- a/src/blas/KokkosBlas2_serial_gemv.hpp +++ b/src/blas/KokkosBlas2_serial_gemv.hpp @@ -64,9 +64,7 @@ void KOKKOS_INLINE_FUNCTION gemv(const char trans, const ScalarType& alpha, using mode = KokkosBlas::Trans::Transpose; KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); } else { // NOT supported: Conjugate, ConjTranspose - std::ostringstream os; - os << "Matrix mode not supported: " << trans << std::endl; - KokkosKernels::Impl::throw_runtime_exception(os.str()); + Kokkos::abort("Matrix mode not supported"); } } diff --git a/test_common/KokkosKernels_TestUtils.hpp b/test_common/KokkosKernels_TestUtils.hpp index 5b15e48593..40d9db1908 100644 --- a/test_common/KokkosKernels_TestUtils.hpp +++ b/test_common/KokkosKernels_TestUtils.hpp @@ -141,12 +141,12 @@ void EXPECT_NEAR_KK(Scalar1 val1, Scalar2 val2, Scalar3 tol, template void EXPECT_NEAR_KK_REL(Scalar1 val1, Scalar2 val2, Scalar3 tol, - std::string msg = "") { + std::string msg = "") { typedef Kokkos::Details::ArithTraits AT1; typedef Kokkos::Details::ArithTraits AT2; typedef Kokkos::Details::ArithTraits AT3; const auto tolerance = (double)AT3::abs(tol); - const auto diff = (double)AT1::abs(val1 - val2); + const auto diff = (double)AT1::abs(val1 - val2); const auto val = KOKKOSKERNELS_MACRO_MAX(AT1::abs(val1), AT2::abs(val2)); if (val < tolerance) { // if both values are near-zero, they pass as equal @@ -357,16 +357,22 @@ void vanillaGEMM(typename ViewTypeC::non_const_value_type alpha, } template -void vanillaGEMV(char mode, typename ViewTypeA::non_const_value_type alpha, - const ViewTypeA& A, const ViewTypeX& x, - typename ViewTypeY::non_const_value_type beta, - const ViewTypeY& y) { +KOKKOS_INLINE_FUNCTION void vanillaGEMV( + char mode, typename ViewTypeA::non_const_value_type alpha, + const ViewTypeA& A, const ViewTypeX& x, + typename ViewTypeY::non_const_value_type beta, const ViewTypeY& y) { using ScalarY = typename ViewTypeY::non_const_value_type; using KAT_A = Kokkos::ArithTraits; using KAT_Y = Kokkos::ArithTraits; int M = A.extent(0); int N = A.extent(1); - if (beta == KAT_Y::zero()) Kokkos::deep_copy(y, KAT_Y::zero()); + const bool transposed = mode == 'T' || mode == 'H'; + if (beta == KAT_Y::zero()) { + const int i1 = transposed ? N : M; + for (int i = 0; i < i1; i++) { // no deep_copy on device + y(i) = KAT_Y::zero(); + } + } if (mode == 'N') { for (int i = 0; i < M; i++) { ScalarY y_i = beta * y(i); diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index b95c24d442..a33fb7c8c6 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -1,9 +1,3 @@ -// Note: Luc Berger-Vergiat 04/14/21 -// This tests uses KOKKOS_LAMBDA so we need -// to make sure that these are enabled in -// the CUDA backend before including this test. -#if !defined(TEST_CUDA_BLAS_CPP) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) - #include #include #include @@ -14,12 +8,58 @@ namespace Test { +template +struct RefGEMVOp { + RefGEMVOp(char trans_, ScalarType alpha_, AType A_, XType x_, + ScalarType beta_, YType y_) + : trans(trans_), alpha(alpha_), beta(beta_), A(A_), x(x_), y(y_) {} + + template + KOKKOS_INLINE_FUNCTION void operator()( + const TeamMember & /* member */) const { + vanillaGEMV(trans, alpha, A, x, beta, y); + } + + private: + // parameters + char trans; + ScalarType alpha; + ScalarType beta; + // data + AType A; + XType x; + YType y; +}; + +template +struct SerialGEMVOp { + SerialGEMVOp(char trans_, ScalarType alpha_, AType A_, XType x_, + ScalarType beta_, YType y_) + : trans(trans_), alpha(alpha_), beta(beta_), A(A_), x(x_), y(y_) {} + + template + KOKKOS_INLINE_FUNCTION void operator()( + const TeamMember & /* member */) const { + KokkosBlas::Experimental::gemv(trans, alpha, A, x, beta, y); + } + + private: + // parameters + char trans; + ScalarType alpha; + ScalarType beta; + // data + AType A; + XType x; + YType y; +}; + template class SerialGEMVTest { private: - using random_pool_type = - Kokkos::Random_XorShift64_Pool; + using char_type = decltype('x'); // ScalarCoef==void default behavior is to derive alpha/beta scalar types // from A and X scalar types @@ -28,51 +68,58 @@ class SerialGEMVTest { typename std::common_type::type>::type; public: - static void run(const char *mode) { run_layouts(mode); } + static void run(const char *mode) { + run_layouts(mode); + run_layouts(mode); +#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ + // TODO: run_layouts(mode); +#endif + } private: + template static void run_layouts(const char *mode) { // Note: all layouts listed here are subview'ed to test Kokkos::LayoutStride #ifdef KOKKOSKERNELS_TEST_LAYOUTLEFT - run_view_types(mode); + run_view_types(mode); #endif #ifdef KOKKOSKERNELS_TEST_LAYOUTRIGHT - run_view_types(mode); + run_view_types(mode); #endif #if defined(KOKKOSKERNELS_TEST_LAYOUTLEFT) && \ defined(KOKKOSKERNELS_TEST_LAYOUTRIGHT) using A_t = typename Kokkos::View; using x_t = typename Kokkos::View; using y_t = typename Kokkos::View; - run_sizes(mode); + run_sizes(mode); #endif } - template + template static void run_view_types(const char *mode) { typedef Kokkos::View view_type_A; typedef Kokkos::View view_type_x; typedef Kokkos::View view_type_y; - run_sizes(mode); + run_sizes(mode); } - template + template static void run_sizes(const char *mode) { // zero cases - run_size(mode, 0, 0); - run_size(mode, 0, 4); - run_size(mode, 4, 0); + run_size(mode, 0, 0); + run_size(mode, 0, 4); + run_size(mode, 4, 0); // small block sizes for (int n = 1; n <= 16; ++n) { - run_size(mode, n, n); + run_size(mode, n, n); } // other cases - run_size(mode, 1024, 1); - run_size(mode, 1024, 13); - run_size(mode, 1024, 124); + run_size(mode, 1024, 1); + run_size(mode, 1024, 13); + run_size(mode, 1024, 124); } - template + template static void run_size(const char *mode, int N, int M) { using A_layout = typename ViewTypeA::array_layout; using x_layout = typename ViewTypeX::array_layout; @@ -81,15 +128,15 @@ class SerialGEMVTest { static_assert(!std::is_same::value, ""); static_assert(!std::is_same::value, ""); - const char trans = mode[0]; - const auto Nt = trans == 'N' ? N : M; - const auto Mt = trans == 'N' ? M : N; + const char_type trans = mode[0]; + const auto Nt = trans == (char)'N' ? N : M; + const auto Mt = trans == (char)'N' ? M : N; // 1. run on regular (non-strided) views ViewTypeA A1("A1", Nt, Mt); ViewTypeX x1("X1", M); ViewTypeY y1("Y1", N); - run_views(trans, A1, x1, y1); + run_views(trans, A1, x1, y1); // 2. run on strided subviews (enforced by adding extra rank on both sides) // TODO: use multivector_layout_adapter from Kokkos_TestUtils.hpp ? @@ -115,66 +162,76 @@ class SerialGEMVTest { static_assert(std::is_same::value, ""); - run_views(trans, A, x, y); + run_views(trans, A, x, y); } - template + template static void run_views(const char trans, ViewTypeA A, ViewTypeX x, ViewTypeY y) { - ScalarType a = 3; - ScalarType b = 5; - double eps = (std::is_same::value || std::is_same>::value) - ? 2 * 1e-5 - : 1e-7; - - // fill in input views - random_pool_type rand_pool(13718); - Kokkos::fill_random(A, rand_pool, ScalarA(10)); - Kokkos::fill_random(x, rand_pool, ScalarX(10)); - Kokkos::fill_random(y, rand_pool, ScalarY(10)); - Kokkos::fence(); - - // backup initial y values because it gets updated in calculation - Kokkos::View org_y("Org_Y", - y.extent(0)); - Kokkos::deep_copy(org_y, y); - - Kokkos::View ref_y("Y_reference", y.extent(0)); - Kokkos::deep_copy(ref_y, y); - get_expected_result(trans, a, A, x, b, ref_y); + Kokkos::TeamPolicy teams(1, 1); // just run on device + fill_inputs(A, x, y); + ScalarType alpha = 3; // TODO: test also with zero alpha/beta ? + ScalarType beta = 5; + + // get reference results + Kokkos::View y_ref("Y_ref", y.extent(0)); + Kokkos::deep_copy(y_ref, y); + RefGEMVOp gemv_ref( + trans, alpha, A, x, beta, y_ref); + Kokkos::parallel_for(teams, gemv_ref); // 1. check non-consts - Kokkos::deep_copy(y, org_y); - KokkosBlas::Experimental::gemv(trans, a, A, x, b, y); - EXPECT_NEAR_KK_REL_1DVIEW(y, ref_y, eps); + run_case(trans, alpha, A, x, beta, y, y_ref); // 2. check const x - Kokkos::deep_copy(y, org_y); typename ViewTypeX::const_type c_x = x; - KokkosBlas::Experimental::gemv(trans, a, A, c_x, b, y); - EXPECT_NEAR_KK_REL_1DVIEW(y, ref_y, eps); + run_case(trans, alpha, A, c_x, beta, y, y_ref); // 3. check const A and x - Kokkos::deep_copy(y, org_y); typename ViewTypeA::const_type c_A = A; - KokkosBlas::Experimental::gemv(trans, a, c_A, c_x, b, y); - EXPECT_NEAR_KK_REL_1DVIEW(y, ref_y, eps); + run_case(trans, alpha, c_A, c_x, beta, y, y_ref); + } + + template + static void run_case(const char trans, ScalarType alpha, ViewTypeA A, + ViewTypeX x, ScalarType beta, ViewTypeY y, + ViewTypeYRef y_ref) { + // run on original y view (not to alter the test) + // but backup it and restore, so it can be reused + Kokkos::View y_backup("Y2", y.extent(0)); + Kokkos::deep_copy(y_backup, y); + + SerialGEMVOp gemv_op( + trans, alpha, A, x, beta, y); + Kokkos::parallel_for(Kokkos::TeamPolicy(1, 1), gemv_op); + + const double eps = epsilon(); + EXPECT_NEAR_KK_REL_1DVIEW(y, y_ref, eps); + Kokkos::deep_copy(y, y_backup); + } + + //----- utilities -----// + + template + static double epsilon() { + return (std::is_same::value || + std::is_same>::value) + ? 2 * 1e-5 + : 1e-7; } template - static void get_expected_result(const char trans, ScalarType a, - ViewTypeA A, ViewTypeX x, ScalarType b, - ViewTypeY y) { - auto h_A = Kokkos::create_mirror_view(A); - auto h_x = Kokkos::create_mirror_view(x); - auto h_y = Kokkos::create_mirror_view(y); - Kokkos::deep_copy(h_A, A); - Kokkos::deep_copy(h_x, x); - Kokkos::deep_copy(h_y, y); - - vanillaGEMV(trans, a, h_A, h_x, b, h_y); - - Kokkos::deep_copy(y, h_y); + static void fill_inputs(ViewTypeA A, ViewTypeX x, ViewTypeY y) { + using A_scalar_type = typename ViewTypeA::non_const_value_type; + using x_scalar_type = typename ViewTypeX::non_const_value_type; + using y_scalar_type = typename ViewTypeY::non_const_value_type; + using exec_space = typename Device::execution_space; + Kokkos::Random_XorShift64_Pool rand_pool(13718); + Kokkos::fill_random(A, rand_pool, A_scalar_type(10)); + Kokkos::fill_random(x, rand_pool, x_scalar_type(10)); + Kokkos::fill_random(y, rand_pool, y_scalar_type(10)); + Kokkos::fence(); } }; @@ -220,6 +277,4 @@ TEST_CASE4(mixed, double, int, float, void) // test arbitrary double alpha/beta with complex values TEST_CASE2(alphabeta, Kokkos::complex, double) -#endif - -#endif // Check for lambda availability on CUDA backend +#endif \ No newline at end of file From e60c98337c13e1b4451a7573687e0a55ae9ffbd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Wed, 20 Jul 2022 22:49:47 +0200 Subject: [PATCH 013/226] Implement conjugating matrix modes "C" and "H" --- .../impl/KokkosBatched_Gemv_Team_Internal.hpp | 6 +- src/blas/KokkosBlas2_serial_gemv.hpp | 5 +- .../impl/KokkosBlas2_serial_gemv_impl.hpp | 41 +++++- ...osBlas2_serial_gemv_inner_multiple_dot.hpp | 123 ++++++++++-------- .../impl/KokkosBlas2_serial_gemv_internal.hpp | 33 +++-- test_common/KokkosKernels_TestUtils.hpp | 21 ++- unit_test/blas/Test_Blas2_serial_gemv.hpp | 9 +- 7 files changed, 149 insertions(+), 89 deletions(-) diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp b/src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp index b556b6e143..c48a2cd866 100644 --- a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp +++ b/src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp @@ -104,9 +104,9 @@ KOKKOS_INLINE_FUNCTION int TeamGemvInternal::invoke( Kokkos::parallel_for(Kokkos::TeamThreadRange(member, (m / mb) + (mp > 0)), [&](const int &ii) { const int i = ii * mb; - inner.serial_invoke(alpha, A + i * as0, x, - (i + mb) > m ? (m - i) : mb, n, - y + i * ys0); + inner.serial_invoke( + alpha, A + i * as0, x, + (i + mb) > m ? (m - i) : mb, n, y + i * ys0); }); member.team_barrier(); } diff --git a/src/blas/KokkosBlas2_serial_gemv.hpp b/src/blas/KokkosBlas2_serial_gemv.hpp index b2cdba9678..ad16746c90 100644 --- a/src/blas/KokkosBlas2_serial_gemv.hpp +++ b/src/blas/KokkosBlas2_serial_gemv.hpp @@ -63,7 +63,10 @@ void KOKKOS_INLINE_FUNCTION gemv(const char trans, const ScalarType& alpha, } else if (trans == 'T' || trans == 't') { using mode = KokkosBlas::Trans::Transpose; KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); - } else { // NOT supported: Conjugate, ConjTranspose + } else if (trans == 'C' || trans == 'c') { + using mode = KokkosBlas::Trans::ConjTranspose; + KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); + } else { Kokkos::abort("Matrix mode not supported"); } } diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp index 117e7cbc66..eebb8e4060 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp @@ -70,13 +70,6 @@ struct SerialGemv { /// =========== /// CompactMKL does not exist on Gemv -/// -/// Implemented: -/// NT, T -/// -/// Not yet implemented -/// CT - /// /// NT /// @@ -214,6 +207,40 @@ SerialGemv::invoke( x.data(), x.stride_0(), beta, y.data(), y.stride_0()); } +/// +/// CT +/// + +#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ +#error TODO: implement MKL/ConjTranspose ! +// see mkl_?gemm_compact with transa=MKL_CONJTRANS +// https://www.intel.com/content/www/us/en/develop/documentation/onemkl-developer-reference-c/top/blas-and-sparse-blas-routines/compact-blas-and-lapack-functions/mkl-gemm-compact.html +#endif + +template <> +template +KOKKOS_INLINE_FUNCTION int +SerialGemv::invoke( + const ScalarType alpha, const AViewType &A, const xViewType &x, + const ScalarType beta, const yViewType &y) { + return Impl::SerialGemvInternal::invoke( + Impl::OpConj(), A.extent(1), A.extent(0), alpha, A.data(), A.stride_1(), + A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); +} + +template <> +template +KOKKOS_INLINE_FUNCTION int +SerialGemv::invoke( + const ScalarType alpha, const AViewType &A, const xViewType &x, + const ScalarType beta, const yViewType &y) { + return Impl::SerialGemvInternal::invoke( + Impl::OpConj(), A.extent(1), A.extent(0), alpha, A.data(), A.stride_1(), + A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); +} + } // namespace KokkosBlas #endif diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp index 16c5dce385..0e9d015dc8 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp @@ -49,6 +49,21 @@ namespace KokkosBlas { namespace Impl { +struct OpID { + template + KOKKOS_INLINE_FUNCTION ValueType operator()(ValueType v) const { + return v; + } +}; + +struct OpConj { + template + KOKKOS_INLINE_FUNCTION ValueType operator()(ValueType v) const { + using KAT = Kokkos::Details::ArithTraits; + return KAT::conj(v); + } +}; + template struct InnerMultipleDotProduct { const int _as0, _as1, _xs0, _ys0; @@ -58,16 +73,16 @@ struct InnerMultipleDotProduct { const int ys0) : _as0(as0), _as1(as1), _xs0(xs0), _ys0(ys0) {} - template + template KOKKOS_INLINE_FUNCTION int serial_invoke(const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const ValueXType *KOKKOS_RESTRICT x, const int n, ValueYType *KOKKOS_RESTRICT y); - template + template KOKKOS_INLINE_FUNCTION int serial_invoke(const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const ValueXType *KOKKOS_RESTRICT x, @@ -101,11 +116,11 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<5>::serial_invoke( const int jj = j * _as1; const ValueXType x_j = x[j * _xs0]; - y_0 += A[i0 + jj] * x_j; - y_1 += A[i1 + jj] * x_j; - y_2 += A[i2 + jj] * x_j; - y_3 += A[i3 + jj] * x_j; - y_4 += A[i4 + jj] * x_j; + y_0 += op(A[i0 + jj]) * x_j; + y_1 += op(A[i1 + jj]) * x_j; + y_2 += op(A[i2 + jj]) * x_j; + y_3 += op(A[i3 + jj]) * x_j; + y_4 += op(A[i4 + jj]) * x_j; } y[0 * _ys0] += alpha * y_0; @@ -118,13 +133,14 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<5>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<4>::serial_invoke( const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const ValueXType *KOKKOS_RESTRICT x, const int n, ValueYType *KOKKOS_RESTRICT y) { if (!n) return 0; + OpA op; const int i0 = 0 * _as0, i1 = 1 * _as0, i2 = 2 * _as0, i3 = 3 * _as0; @@ -138,10 +154,10 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<4>::serial_invoke( const int jj = j * _as1; const ValueXType x_j = x[j * _xs0]; - y_0 += A[i0 + jj] * x_j; - y_1 += A[i1 + jj] * x_j; - y_2 += A[i2 + jj] * x_j; - y_3 += A[i3 + jj] * x_j; + y_0 += op(A[i0 + jj]) * x_j; + y_1 += op(A[i1 + jj]) * x_j; + y_2 += op(A[i2 + jj]) * x_j; + y_3 += op(A[i3 + jj]) * x_j; } y[0 * _ys0] += alpha * y_0; @@ -153,13 +169,14 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<4>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<3>::serial_invoke( const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const ValueXType *KOKKOS_RESTRICT x, const int n, ValueYType *KOKKOS_RESTRICT y) { if (n <= 0) return 0; + OpA op; const int i0 = 0 * _as0, i1 = 1 * _as0, i2 = 2 * _as0; @@ -173,9 +190,9 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<3>::serial_invoke( const int jj = j * _as1; const ValueXType x_j = x[j * _xs0]; - y_0 += A[i0 + jj] * x_j; - y_1 += A[i1 + jj] * x_j; - y_2 += A[i2 + jj] * x_j; + y_0 += op(A[i0 + jj]) * x_j; + y_1 += op(A[i1 + jj]) * x_j; + y_2 += op(A[i2 + jj]) * x_j; } y[0 * _ys0] += alpha * y_0; @@ -186,13 +203,14 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<3>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<2>::serial_invoke( const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const ValueXType *KOKKOS_RESTRICT x, const int n, ValueYType *KOKKOS_RESTRICT y) { if (n <= 0) return 0; + OpA op; const int i0 = 0 * _as0, i1 = 1 * _as0; @@ -206,8 +224,8 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<2>::serial_invoke( const int jj = j * _as1; const ValueXType x_j = x[j * _xs0]; - y_0 += A[i0 + jj] * x_j; - y_1 += A[i1 + jj] * x_j; + y_0 += op(A[i0 + jj]) * x_j; + y_1 += op(A[i1 + jj]) * x_j; } y[0 * _ys0] += alpha * y_0; @@ -217,13 +235,14 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<2>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<1>::serial_invoke( const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const ValueXType *KOKKOS_RESTRICT x, const int n, ValueYType *KOKKOS_RESTRICT y) { if (n <= 0) return 0; + OpA op; // unroll by rows ValueYType y_0 = 0; @@ -231,7 +250,7 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<1>::serial_invoke( #if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) #pragma unroll #endif - for (int j = 0; j < n; ++j) y_0 += A[j * _as1] * x[j * _xs0]; + for (int j = 0; j < n; ++j) y_0 += op(A[j * _as1]) * x[j * _xs0]; y[0] += alpha * y_0; @@ -239,8 +258,8 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<1>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<5>::serial_invoke( const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const ValueXType *KOKKOS_RESTRICT x, const int m, const int n, @@ -249,27 +268,27 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<5>::serial_invoke( switch (m) { case 5: { InnerMultipleDotProduct<5> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } case 4: { InnerMultipleDotProduct<4> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } case 3: { InnerMultipleDotProduct<3> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } case 2: { InnerMultipleDotProduct<2> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } case 1: { InnerMultipleDotProduct<1> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } } @@ -277,8 +296,8 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<5>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<4>::serial_invoke( const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const ValueXType *KOKKOS_RESTRICT x, const int m, const int n, @@ -287,22 +306,22 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<4>::serial_invoke( switch (m) { case 4: { InnerMultipleDotProduct<4> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } case 3: { InnerMultipleDotProduct<3> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } case 2: { InnerMultipleDotProduct<2> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } case 1: { InnerMultipleDotProduct<1> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } } @@ -310,8 +329,8 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<4>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<3>::serial_invoke( const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, @@ -321,17 +340,17 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<3>::serial_invoke( switch (m) { case 3: { InnerMultipleDotProduct<3> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } case 2: { InnerMultipleDotProduct<2> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } case 1: { InnerMultipleDotProduct<1> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } } @@ -339,8 +358,8 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<3>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<2>::serial_invoke( const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, @@ -350,12 +369,12 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<2>::serial_invoke( switch (m) { case 2: { InnerMultipleDotProduct<2> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } case 1: { InnerMultipleDotProduct<1> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } } @@ -363,8 +382,8 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<2>::serial_invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<1>::serial_invoke( const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, @@ -374,7 +393,7 @@ KOKKOS_INLINE_FUNCTION int InnerMultipleDotProduct<1>::serial_invoke( switch (m) { case 1: { InnerMultipleDotProduct<1> inner(_as0, _as1, _xs0, _ys0); - inner.serial_invoke(alpha, A, x, n, y); + inner.serial_invoke(alpha, A, x, n, y); break; } } diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp index 52a9d12c37..9a0b8ec61e 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp @@ -59,20 +59,31 @@ namespace Impl { template struct SerialGemvInternal { + template + KOKKOS_INLINE_FUNCTION static int invoke( + OpA op, const int m, const int n, const ScalarType alpha, + const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, + const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0); + + // default OpA = OpID template KOKKOS_INLINE_FUNCTION static int invoke( const int m, const int n, const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, - /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0); + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0) { + return invoke(OpID(), m, n, alpha, A, as0, as1, x, xs0, beta, y, ys0); + } }; template <> -template +template KOKKOS_INLINE_FUNCTION int SerialGemvInternal::invoke( - const int m, const int n, const ScalarType alpha, + OpA op, const int m, const int n, const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0) { @@ -91,7 +102,7 @@ KOKKOS_INLINE_FUNCTION int SerialGemvInternal::invoke( for (int i = 0; i < m; ++i) { ValueYType t(0); - const ValueAType *KOKKOS_RESTRICT tA = (A + i * as0); + const ValueAType *KOKKOS_RESTRICT tA = A + i * as0; #if defined(KOKKOS_ENABLE_PRAGMA_IVDEP) #pragma ivdep @@ -99,7 +110,7 @@ KOKKOS_INLINE_FUNCTION int SerialGemvInternal::invoke( #if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) #pragma unroll #endif - for (int j = 0; j < n; ++j) t += tA[j * as1] * x[j * xs0]; + for (int j = 0; j < n; ++j) t += op(tA[j * as1]) * x[j * xs0]; y[i * ys0] += alpha * t; } } @@ -107,10 +118,10 @@ KOKKOS_INLINE_FUNCTION int SerialGemvInternal::invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int SerialGemvInternal::invoke( - const int m, const int n, const ScalarType alpha, + OpA /* op */, const int m, const int n, const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0) { @@ -132,8 +143,8 @@ KOKKOS_INLINE_FUNCTION int SerialGemvInternal::invoke( Impl::InnerMultipleDotProduct inner(as0, as1, xs0, ys0); const int mb = mbAlgo; for (int i = 0; i < m; i += mb) - inner.serial_invoke(alpha, A + i * as0, x, (i + mb) > m ? (m - i) : mb, n, - y + i * ys0); + inner.serial_invoke(alpha, A + i * as0, x, + (i + mb) > m ? (m - i) : mb, n, y + i * ys0); } return 0; } diff --git a/test_common/KokkosKernels_TestUtils.hpp b/test_common/KokkosKernels_TestUtils.hpp index 40d9db1908..dbe6910879 100644 --- a/test_common/KokkosKernels_TestUtils.hpp +++ b/test_common/KokkosKernels_TestUtils.hpp @@ -366,34 +366,29 @@ KOKKOS_INLINE_FUNCTION void vanillaGEMV( using KAT_Y = Kokkos::ArithTraits; int M = A.extent(0); int N = A.extent(1); - const bool transposed = mode == 'T' || mode == 'H'; + const bool transposed = mode == 'T' || mode == 'C'; + const bool conjugated = mode == 'C'; if (beta == KAT_Y::zero()) { const int i1 = transposed ? N : M; for (int i = 0; i < i1; i++) { // no deep_copy on device y(i) = KAT_Y::zero(); } } - if (mode == 'N') { + if (!transposed) { for (int i = 0; i < M; i++) { ScalarY y_i = beta * y(i); for (int j = 0; j < N; j++) { - y_i += alpha * A(i, j) * x(j); + const auto Aij = conjugated ? KAT_A::conj(A(i, j)) : A(i, j); + y_i += alpha * Aij * x(j); } y(i) = y_i; } - } else if (mode == 'T') { - for (int j = 0; j < N; j++) { - ScalarY y_j = beta * y(j); - for (int i = 0; i < M; i++) { - y_j += alpha * A(i, j) * x(i); - } - y(j) = y_j; - } - } else if (mode == 'C') { + } else { for (int j = 0; j < N; j++) { ScalarY y_j = beta * y(j); for (int i = 0; i < M; i++) { - y_j += alpha * KAT_A::conj(A(i, j)) * x(i); + const auto Aij = conjugated ? KAT_A::conj(A(i, j)) : A(i, j); + y_j += alpha * Aij * x(i); } y(j) = y_j; } diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index a33fb7c8c6..fb186a8d2d 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -129,8 +129,9 @@ class SerialGEMVTest { static_assert(!std::is_same::value, ""); const char_type trans = mode[0]; - const auto Nt = trans == (char)'N' ? N : M; - const auto Mt = trans == (char)'N' ? M : N; + const bool transposed = trans == (char)'T' || trans == (char)'C'; + const auto Nt = transposed ? M : N; + const auto Mt = transposed ? N : M; // 1. run on regular (non-strided) views ViewTypeA A1("A1", Nt, Mt); @@ -245,6 +246,10 @@ class SerialGEMVTest { TEST_F(TestCategory, serial_gemv_t_##NAME) { \ ::Test::SerialGEMVTest::run("T"); \ + } \ + TEST_F(TestCategory, serial_gemv_c_##NAME) { \ + ::Test::SerialGEMVTest::run("C"); \ } #define TEST_CASE2(NAME, SCALAR, SCALAR_COEF) \ From 59a6d1eee999956eb5596a9a9cbae598bc2d8c75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Thu, 21 Jul 2022 21:33:39 +0200 Subject: [PATCH 014/226] have dummy SerialGEMV impl abort on device an in Release builds too --- src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp index eebb8e4060..adc4436762 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp @@ -60,7 +60,7 @@ struct SerialGemv { const xViewType & /*x*/, const ScalarType /*beta*/, const yViewType & /*y*/) { - assert(false && "Error: encounter dummy impl"); + Kokkos::abort("Error: encounter dummy impl"); return 0; } }; From cb78064738df1134268dbf4fe8d3cd3fc275e32e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Tue, 26 Jul 2022 00:16:44 +0200 Subject: [PATCH 015/226] Add Gemv::CompactMKL unit tests with simd vectors --- src/batched/dense/KokkosBatched_Vector.hpp | 29 +++ .../impl/KokkosBlas2_serial_gemv_impl.hpp | 119 +++++----- .../impl/KokkosBlas2_serial_gemv_internal.hpp | 7 +- src/blas/impl/KokkosBlas_util.hpp | 2 +- test_common/KokkosKernels_TestUtils.hpp | 45 ++-- unit_test/blas/Test_Blas2_serial_gemv.hpp | 205 +++++++++++++----- 6 files changed, 253 insertions(+), 154 deletions(-) diff --git a/src/batched/dense/KokkosBatched_Vector.hpp b/src/batched/dense/KokkosBatched_Vector.hpp index f91e3dea07..557f5ef996 100644 --- a/src/batched/dense/KokkosBatched_Vector.hpp +++ b/src/batched/dense/KokkosBatched_Vector.hpp @@ -255,6 +255,18 @@ class ArithTraits, l>> { return val; } + static KOKKOS_FORCEINLINE_FUNCTION val_type conj(const val_type &val) { + return val; + } + + static KOKKOS_FORCEINLINE_FUNCTION mag_scalar_type abs(const val_type &val) { + mag_scalar_type v = ArithTraits::zero(); + for (int i = 0; i < l; ++i) { + v = KOKKOSKERNELS_MACRO_MAX(v, KOKKOSKERNELS_MACRO_ABS(val[i])); + } + return v; + } + static const bool is_specialized = ArithTraits::is_specialized; static const bool is_signed = ArithTraits::is_signed; static const bool is_integer = ArithTraits::is_integer; @@ -289,6 +301,23 @@ class ArithTraits< } return r_val; } + + static KOKKOS_FORCEINLINE_FUNCTION val_type conj(const val_type &val) { + using KAT = ArithTraits; + val_type v{}; + for (int i = 0; i < l; ++i) { + v[i] = KAT::conj(v[i]); + } + return v; + } + + static KOKKOS_FORCEINLINE_FUNCTION mag_scalar_type abs(const val_type &val) { + mag_scalar_type v = ArithTraits::zero(); + for (int i = 0; i < l; ++i) { + v = KOKKOSKERNELS_MACRO_MAX(v, KOKKOSKERNELS_MACRO_ABS(val[i])); + } + return v; + } }; } // namespace Details diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp index adc4436762..493bcbfe5a 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp @@ -48,6 +48,7 @@ #include "KokkosBlas_util.hpp" #include "KokkosBlas2_serial_gemv_internal.hpp" +#include "KokkosBatched_Vector.hpp" // for Vector handling in CompactMKL impls namespace KokkosBlas { @@ -70,48 +71,61 @@ struct SerialGemv { /// =========== /// CompactMKL does not exist on Gemv -/// -/// NT -/// +namespace Impl { #ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ -template <> template -KOKKOS_INLINE_FUNCTION int -SerialGemv::invoke( - const ScalarType alpha, const AViewType &A, const xViewType &x, - const ScalarType beta, const yViewType &y) { +void kk_mkl_gemv(MKL_TRANSPOSE trans, const ScalarType alpha, + const AViewType &A, const xViewType &x, const ScalarType beta, + const yViewType &y) { typedef typename yViewType::value_type vector_type; - // typedef typename vector_type::value_type value_type; - - const int m = A.extent(0), n = 1, k = A.extent(1); - static_assert(is_vector::value, "value type is not vector type"); + static_assert(KokkosBatched::is_vector::value, + "value type is not vector type"); static_assert( vector_type::vector_length == 4 || vector_type::vector_length == 8, "AVX, AVX2 and AVX512 is supported"); + + if (A.stride_0() != 1 && A.stride_1() != 1) { + Kokkos::abort("Strided A matrix is not supported in MKL gemv/gemm"); + } + + // Note: MKL handles 0-sizes fine + const int m = A.extent(MKL_NOTRANS == trans ? 0 : 1); + const int n = 1; + const int k = A.extent(MKL_NOTRANS == trans ? 1 : 0); + + const bool col_major = A.stride_0() == 1; + const MKL_LAYOUT layout = col_major ? MKL_COL_MAJOR : MKL_ROW_MAJOR; + const MKL_INT A_stride = col_major ? A.stride_1() : A.stride_0(); const MKL_COMPACT_PACK format = vector_type::vector_length == 8 ? MKL_COMPACT_AVX512 : MKL_COMPACT_AVX; - // no error check - int r_val = 0; - if (A.stride_0() == 1) { - mkl_dgemm_compact(MKL_COL_MAJOR, MKL_NOTRANS, MKL_NOTRANS, m, n, k, alpha, - (const double *)A.data(), A.stride_1(), - (const double *)x.data(), x.stride_0(), beta, - (double *)y.data(), y.stride_0(), format, - (MKL_INT)vector_type::vector_length); - } else if (A.stride_1() == 1) { - mkl_dgemm_compact(MKL_ROW_MAJOR, MKL_NOTRANS, MKL_NOTRANS, m, n, k, alpha, - (const double *)A.data(), A.stride_0(), - (const double *)x.data(), x.stride_0(), beta, - (double *)y.data(), y.stride_0(), format, - (MKL_INT)vector_type::vector_length); - } else { - r_val = -1; - } - return r_val; + mkl_dgemm_compact(layout, trans, MKL_NOTRANS, m, n, k, alpha, + (const double *)A.data(), A_stride, + (const double *)x.data(), x.stride_0(), beta, + (double *)y.data(), y.stride_0(), format, + (MKL_INT)vector_type::vector_length); +} +#endif + +} // namespace Impl + +/// +/// NT +/// + +#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ +template <> +template +KOKKOS_INLINE_FUNCTION int +SerialGemv::invoke( + const ScalarType alpha, const AViewType &A, const xViewType &x, + const ScalarType beta, const yViewType &y) { + Impl::kk_mkl_gemv(MKL_NOTRANS, alpha, A, x, beta, y); + return 0; } #endif @@ -150,36 +164,8 @@ KOKKOS_INLINE_FUNCTION int SerialGemv::invoke( const ScalarType alpha, const AViewType &A, const xViewType &x, const ScalarType beta, const yViewType &y) { - typedef typename yViewType::value_type vector_type; - // typedef typename vector_type::value_type value_type; - - const int m = A.extent(0), n = 1, k = A.extent(1); - - static_assert(is_vector::value, "value type is not vector type"); - static_assert( - vector_type::vector_length == 4 || vector_type::vector_length == 8, - "AVX, AVX2 and AVX512 is supported"); - const MKL_COMPACT_PACK format = - vector_type::vector_length == 8 ? MKL_COMPACT_AVX512 : MKL_COMPACT_AVX; - - // no error check - int r_val = 0; - if (A.stride_0() == 1) { - mkl_dgemm_compact(MKL_COL_MAJOR, MKL_TRANS, MKL_NOTRANS, m, n, k, alpha, - (const double *)A.data(), A.stride_1(), - (const double *)x.data(), x.stride_0(), beta, - (double *)y.data(), y.stride_0(), format, - (MKL_INT)vector_type::vector_length); - } else if (A.stride_1() == 1) { - mkl_dgemm_compact(MKL_ROW_MAJOR, MKL_TRANS, MKL_NOTRANS, m, n, k, alpha, - (const double *)A.data(), A.stride_0(), - (const double *)x.data(), x.stride_0(), beta, - (double *)y.data(), y.stride_0(), format, - (MKL_INT)vector_type::vector_length); - } else { - r_val = -1; - } - return r_val; + Impl::kk_mkl_gemv(MKL_TRANS, alpha, A, x, beta, y); + return 0; } #endif @@ -212,9 +198,16 @@ SerialGemv::invoke( /// #ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ -#error TODO: implement MKL/ConjTranspose ! -// see mkl_?gemm_compact with transa=MKL_CONJTRANS -// https://www.intel.com/content/www/us/en/develop/documentation/onemkl-developer-reference-c/top/blas-and-sparse-blas-routines/compact-blas-and-lapack-functions/mkl-gemm-compact.html +template <> +template +KOKKOS_INLINE_FUNCTION int +SerialGemv::invoke( + const ScalarType alpha, const AViewType &A, const xViewType &x, + const ScalarType beta, const yViewType &y) { + Impl::kk_mkl_gemv(MKL_CONJTRANS, alpha, A, x, beta, y); + return 0; +} #endif template <> diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp index 9a0b8ec61e..998603920c 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp @@ -92,9 +92,10 @@ KOKKOS_INLINE_FUNCTION int SerialGemvInternal::invoke( // y = beta y + alpha A x // y (m), A(m x n), B(n) - if (beta == zero) - KokkosBlas::Impl::SerialSetInternal::invoke(m, zero, y, ys0); - else if (beta != one) + if (beta == zero) { + ValueYType val_zero{}; // can be Vector so avoid assigning explicit 0 + KokkosBlas::Impl::SerialSetInternal::invoke(m, val_zero, y, ys0); + } else if (beta != one) KokkosBlas::Impl::SerialScaleInternal::invoke(m, beta, y, ys0); if (alpha != zero) { diff --git a/src/blas/impl/KokkosBlas_util.hpp b/src/blas/impl/KokkosBlas_util.hpp index 6aa79c569f..846671b47d 100644 --- a/src/blas/impl/KokkosBlas_util.hpp +++ b/src/blas/impl/KokkosBlas_util.hpp @@ -52,7 +52,7 @@ #include "mkl_version.h" #if __INTEL_MKL__ >= 2018 #define __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ 1 -#include "mkl.h" +#include "mkl_compact.h" #endif #endif diff --git a/test_common/KokkosKernels_TestUtils.hpp b/test_common/KokkosKernels_TestUtils.hpp index dbe6910879..45ff8ca2bb 100644 --- a/test_common/KokkosKernels_TestUtils.hpp +++ b/test_common/KokkosKernels_TestUtils.hpp @@ -356,42 +356,27 @@ void vanillaGEMM(typename ViewTypeC::non_const_value_type alpha, } } -template -KOKKOS_INLINE_FUNCTION void vanillaGEMV( - char mode, typename ViewTypeA::non_const_value_type alpha, - const ViewTypeA& A, const ViewTypeX& x, - typename ViewTypeY::non_const_value_type beta, const ViewTypeY& y) { +template +KOKKOS_INLINE_FUNCTION void vanillaGEMV(char mode, AlphaType alpha, + const ViewTypeA& A, const ViewTypeX& x, + BetaType beta, const ViewTypeY& y) { using ScalarY = typename ViewTypeY::non_const_value_type; using KAT_A = Kokkos::ArithTraits; - using KAT_Y = Kokkos::ArithTraits; - int M = A.extent(0); - int N = A.extent(1); const bool transposed = mode == 'T' || mode == 'C'; const bool conjugated = mode == 'C'; - if (beta == KAT_Y::zero()) { - const int i1 = transposed ? N : M; - for (int i = 0; i < i1; i++) { // no deep_copy on device - y(i) = KAT_Y::zero(); - } - } - if (!transposed) { - for (int i = 0; i < M; i++) { - ScalarY y_i = beta * y(i); - for (int j = 0; j < N; j++) { - const auto Aij = conjugated ? KAT_A::conj(A(i, j)) : A(i, j); - y_i += alpha * Aij * x(j); - } - y(i) = y_i; - } - } else { + const bool has_beta = beta != Kokkos::ArithTraits::zero(); + int M = A.extent(transposed ? 1 : 0); + int N = A.extent(transposed ? 0 : 1); + for (int i = 0; i < M; i++) { + ScalarY y_i{}; + if (has_beta) y_i = beta * y(i); for (int j = 0; j < N; j++) { - ScalarY y_j = beta * y(j); - for (int i = 0; i < M; i++) { - const auto Aij = conjugated ? KAT_A::conj(A(i, j)) : A(i, j); - y_j += alpha * Aij * x(i); - } - y(j) = y_j; + const auto a = transposed ? A(j, i) : A(i, j); + const auto Aij = conjugated ? KAT_A::conj(a) : a; + y_i += alpha * Aij * x(j); } + y(i) = y_i; } } diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index fb186a8d2d..fd5ef23d02 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -8,6 +8,13 @@ namespace Test { +template ::value> +using simd_vector = + KokkosBatched::Vector, length>; + +// Note: vanillaGEMV is called on device here - alternatively one can move +// _strided_ data using safe_device_to_host_deep_copy() etc. template struct RefGEMVOp { RefGEMVOp(char trans_, ScalarType alpha_, AType A_, XType x_, @@ -55,28 +62,71 @@ struct SerialGEMVOp { YType y; }; +// fill regular view with random values +template +void fill_random_view(ViewType A, PoolType &rand_pool, + const ScalarType max_val = 10.0) { + Kokkos::fill_random(A, rand_pool, max_val); + Kokkos::fence(); +} + +// fill rank-1 view of SIMD vectors with random values +template +void fill_random_view( + Kokkos::View< + KokkosBatched::Vector, VecLength> *, + Layout, Props...> + x, + PoolType &rand_pool, const ValueType max_val = 10.0) { + // the view can be strided and have Vector values, so randoms + // are generated in a plain, linear view first and then copied + using device_type = typename decltype(x)::device_type; + Kokkos::View rnd("random_vals", + x.extent(0) * VecLength); + Kokkos::fill_random(rnd, rand_pool, static_cast(10)); + using size_type = decltype(x.extent(0)); + for (size_type i = 0; i < x.extent(0); ++i) { + x(i).loadUnaligned(&rnd(i * VecLength)); + } +} + +// fill rank-2 view of SIMD vectors with random values +template +static void fill_random_view( + Kokkos::View< + KokkosBatched::Vector, VecLength> **, + Layout, Props...> + A, + PoolType &rand_pool, const ValueType max_val = 10.0) { + // the view can be strided and have Vector values, so randoms + // are generated in a plain, linear view first and then copied + using device_type = typename decltype(A)::device_type; + Kokkos::View rnd( + "random_vals", A.extent(0) * A.extent(1) * VecLength); + Kokkos::fill_random(rnd, rand_pool, static_cast(10)); + using size_type = decltype(A.extent(0)); + size_type idx = 0; + for (size_type i = 0; i < A.extent(0); ++i) { + for (size_type j = 0; j < A.extent(1); ++j) { + A(i, j).loadUnaligned(&rnd(idx)); + idx += VecLength; + } + } +} + +// template -class SerialGEMVTest { - private: - using char_type = decltype('x'); - +struct SerialGEMVTestBase { // ScalarCoef==void default behavior is to derive alpha/beta scalar types // from A and X scalar types using ScalarType = typename std::conditional< !std::is_void::value, ScalarCoef, typename std::common_type::type>::type; - public: - static void run(const char *mode) { - run_layouts(mode); - run_layouts(mode); -#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ - // TODO: run_layouts(mode); -#endif - } - - private: template static void run_layouts(const char *mode) { // Note: all layouts listed here are subview'ed to test Kokkos::LayoutStride @@ -128,7 +178,7 @@ class SerialGEMVTest { static_assert(!std::is_same::value, ""); static_assert(!std::is_same::value, ""); - const char_type trans = mode[0]; + const auto trans = mode[0]; const bool transposed = trans == (char)'T' || trans == (char)'C'; const auto Nt = transposed ? M : N; const auto Mt = transposed ? N : M; @@ -140,30 +190,31 @@ class SerialGEMVTest { run_views(trans, A1, x1, y1); // 2. run on strided subviews (enforced by adding extra rank on both sides) - // TODO: use multivector_layout_adapter from Kokkos_TestUtils.hpp ? - // it does NOT [always] produce strided subviews yet: fix it ? - typedef Kokkos::View BaseTypeA; - typedef Kokkos::View BaseTypeX; - typedef Kokkos::View BaseTypeY; - - BaseTypeA b_A("A", 2, Nt, Mt, 2); - BaseTypeX b_x("X", 2, M, 2); - BaseTypeY b_y("Y", 2, N, 2); - auto A = Kokkos::subview(b_A, 0, Kokkos::ALL(), Kokkos::ALL(), 0); - auto x = Kokkos::subview(b_x, 0, Kokkos::ALL(), 0); - auto y = Kokkos::subview(b_y, 0, Kokkos::ALL(), 0); - - // make sure it's actually LayoutStride there - static_assert(std::is_same::value, - ""); - static_assert(std::is_same::value, - ""); - static_assert(std::is_same::value, - ""); - run_views(trans, A, x, y); + // Note: strided views are not supported by MKL routines + if (!std::is_same::value) { + typedef Kokkos::View BaseTypeA; + typedef Kokkos::View BaseTypeX; + typedef Kokkos::View BaseTypeY; + + BaseTypeA b_A("A", 2, Nt, Mt, 2); + BaseTypeX b_x("X", 2, M, 2); + BaseTypeY b_y("Y", 2, N, 2); + auto A = Kokkos::subview(b_A, 0, Kokkos::ALL(), Kokkos::ALL(), 0); + auto x = Kokkos::subview(b_x, 0, Kokkos::ALL(), 0); + auto y = Kokkos::subview(b_y, 0, Kokkos::ALL(), 0); + + // make sure it's actually LayoutStride there + static_assert(std::is_same::value, + ""); + static_assert(std::is_same::value, + ""); + static_assert(std::is_same::value, + ""); + run_views(trans, A, x, y); + } } template @@ -177,7 +228,7 @@ class SerialGEMVTest { // get reference results Kokkos::View y_ref("Y_ref", y.extent(0)); Kokkos::deep_copy(y_ref, y); - RefGEMVOp gemv_ref( + RefGEMVOp gemv_ref( trans, alpha, A, x, beta, y_ref); Kokkos::parallel_for(teams, gemv_ref); @@ -207,32 +258,65 @@ class SerialGEMVTest { trans, alpha, A, x, beta, y); Kokkos::parallel_for(Kokkos::TeamPolicy(1, 1), gemv_op); - const double eps = epsilon(); + const double eps = epsilon(ScalarY{}); EXPECT_NEAR_KK_REL_1DVIEW(y, y_ref, eps); Kokkos::deep_copy(y, y_backup); } //----- utilities -----// - template - static double epsilon() { - return (std::is_same::value || - std::is_same>::value) - ? 2 * 1e-5 - : 1e-7; + // GEMV tolerance for scalar types + static double epsilon(float) { return 2 * 1e-5; } + static double epsilon(double) { return 1e-7; } + static double epsilon(int) { return 0; } + // tolerance for derived types + template + static double epsilon(Kokkos::complex) { + return epsilon(ScalarType{}); + } + template + static double epsilon(simd_vector) { + return epsilon(ScalarType{}); } template static void fill_inputs(ViewTypeA A, ViewTypeX x, ViewTypeY y) { - using A_scalar_type = typename ViewTypeA::non_const_value_type; - using x_scalar_type = typename ViewTypeX::non_const_value_type; - using y_scalar_type = typename ViewTypeY::non_const_value_type; - using exec_space = typename Device::execution_space; + using exec_space = typename Device::execution_space; Kokkos::Random_XorShift64_Pool rand_pool(13718); - Kokkos::fill_random(A, rand_pool, A_scalar_type(10)); - Kokkos::fill_random(x, rand_pool, x_scalar_type(10)); - Kokkos::fill_random(y, rand_pool, y_scalar_type(10)); - Kokkos::fence(); + fill_random_view(A, rand_pool); + fill_random_view(x, rand_pool); + fill_random_view(y, rand_pool); + } +}; + +template +struct SerialGEMVTest { + static void run(const char *mode) { + using base = + SerialGEMVTestBase; + base::template run_layouts(mode); + base::template run_layouts(mode); + } +}; + +// Special handling of Vector> (instead of plain scalars) +// Note: MKL compact routines don't allow mixed scalar types +template +struct SerialGEMVTest, + simd_vector, + simd_vector, Device, ScalarCoef> { + static void run(const char *mode) { + using vector_type = simd_vector; + using base = SerialGEMVTestBase; + // run all usual, non-vector tests + base::template run_layouts(mode); + base::template run_layouts(mode); + // run vector tests +#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ + base::template run_layouts(mode); +#endif } }; @@ -247,7 +331,7 @@ class SerialGEMVTest { ::Test::SerialGEMVTest::run("T"); \ } \ - TEST_F(TestCategory, serial_gemv_c_##NAME) { \ + TEST_F(TestCategory, serial_gemv_ct_##NAME) { \ ::Test::SerialGEMVTest::run("C"); \ } @@ -262,6 +346,13 @@ TEST_CASE(float, float) #ifdef KOKKOSKERNELS_TEST_DOUBLE TEST_CASE(double, double) +// MKL vector types +#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ +using simd_vector_avx8 = ::Test::simd_vector; +using simd_vector_avx4 = ::Test::simd_vector; +TEST_CASE2(mkl_simd_vector_avx8, simd_vector_avx8, double) +TEST_CASE2(mkl_simd_vector_avx4, simd_vector_avx4, double) +#endif #endif #ifdef KOKKOSKERNELS_TEST_COMPLEX_DOUBLE @@ -282,4 +373,4 @@ TEST_CASE4(mixed, double, int, float, void) // test arbitrary double alpha/beta with complex values TEST_CASE2(alphabeta, Kokkos::complex, double) -#endif \ No newline at end of file +#endif From 544ff60eff9f4d4691bd813a2cce8076571c6e6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Tue, 26 Jul 2022 02:56:54 +0200 Subject: [PATCH 016/226] add float support to MKL compact GEMV --- .../impl/KokkosBlas2_serial_gemv_impl.hpp | 87 +++++++++++++++---- unit_test/blas/Test_Blas2_serial_gemv.hpp | 19 +++- 2 files changed, 85 insertions(+), 21 deletions(-) diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp index 493bcbfe5a..203b24d04e 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp @@ -74,6 +74,51 @@ struct SerialGemv { namespace Impl { #ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ + +#define __IMPL_KK_MKL_DGEMM_COMPACT(SCALAR, MKL_ROUTINE) \ + void kk_mkl_gemm_compact( \ + MKL_LAYOUT layout, MKL_TRANSPOSE transa, MKL_TRANSPOSE transb, \ + MKL_INT m, MKL_INT n, MKL_INT k, SCALAR alpha, const SCALAR *a, \ + MKL_INT ldap, const SCALAR *b, MKL_INT ldbp, SCALAR beta, SCALAR *c, \ + MKL_INT ldcp, MKL_COMPACT_PACK format, MKL_INT nm) { \ + MKL_ROUTINE(layout, transa, transb, m, n, k, alpha, a, ldap, b, ldbp, \ + beta, c, ldcp, format, nm); \ + } + +__IMPL_KK_MKL_DGEMM_COMPACT(double, mkl_dgemm_compact) +__IMPL_KK_MKL_DGEMM_COMPACT(float, mkl_sgemm_compact) +// TODO: add complex ? see mkl_cgemm_compact() and mkl_zgemm_compact() +#undef __IMPL_KK_MKL_DGEMM_COMPACT + +template +MKL_COMPACT_PACK mkl_compact_format() { + Kokkos::abort("vector size not supported"); +} +template <> +MKL_COMPACT_PACK mkl_compact_format() { + return MKL_COMPACT_SSE; +} +template <> +MKL_COMPACT_PACK mkl_compact_format() { + return MKL_COMPACT_SSE; +} +template <> +MKL_COMPACT_PACK mkl_compact_format() { + return MKL_COMPACT_AVX; +} +template <> +MKL_COMPACT_PACK mkl_compact_format() { + return MKL_COMPACT_AVX; +} +template <> +MKL_COMPACT_PACK mkl_compact_format() { + return MKL_COMPACT_AVX512; +} +template <> +MKL_COMPACT_PACK mkl_compact_format() { + return MKL_COMPACT_AVX512; +} + template void kk_mkl_gemv(MKL_TRANSPOSE trans, const ScalarType alpha, @@ -83,30 +128,38 @@ void kk_mkl_gemv(MKL_TRANSPOSE trans, const ScalarType alpha, static_assert(KokkosBatched::is_vector::value, "value type is not vector type"); - static_assert( - vector_type::vector_length == 4 || vector_type::vector_length == 8, - "AVX, AVX2 and AVX512 is supported"); - - if (A.stride_0() != 1 && A.stride_1() != 1) { - Kokkos::abort("Strided A matrix is not supported in MKL gemv/gemm"); + using value_type = typename vector_type::value_type; + static_assert(std::is_same::value && + std::is_same::value, + "scalar type mismatch"); + if (A.stride_0() != 1 && A.stride_1() != 1 && x.stride_0() != 1 && + y.stride_0() != 1) { + Kokkos::abort("Strided inputs are not supported in MKL gemv/gemm"); } - // Note: MKL handles 0-sizes fine - const int m = A.extent(MKL_NOTRANS == trans ? 0 : 1); - const int n = 1; - const int k = A.extent(MKL_NOTRANS == trans ? 1 : 0); + // Note: not checking 0-sizes as MKL handles it fine + const bool transposed = trans == MKL_TRANS || trans == MKL_CONJTRANS; + const int m = A.extent(transposed ? 1 : 0); + const int n = 1; + const int k = A.extent(transposed ? 0 : 1); const bool col_major = A.stride_0() == 1; const MKL_LAYOUT layout = col_major ? MKL_COL_MAJOR : MKL_ROW_MAJOR; - const MKL_INT A_stride = col_major ? A.stride_1() : A.stride_0(); + const MKL_INT A_ld = KOKKOSKERNELS_MACRO_MAX(1, A.extent(col_major ? 0 : 1)); const MKL_COMPACT_PACK format = - vector_type::vector_length == 8 ? MKL_COMPACT_AVX512 : MKL_COMPACT_AVX; + Impl::mkl_compact_format(); + + // cast away simd-vector pointers + auto A_data = reinterpret_cast(A.data()); + auto x_data = reinterpret_cast(x.data()); + auto y_data = reinterpret_cast(y.data()); - mkl_dgemm_compact(layout, trans, MKL_NOTRANS, m, n, k, alpha, - (const double *)A.data(), A_stride, - (const double *)x.data(), x.stride_0(), beta, - (double *)y.data(), y.stride_0(), format, - (MKL_INT)vector_type::vector_length); + Impl::kk_mkl_gemm_compact(layout, trans, MKL_NOTRANS, m, n, k, + (value_type)alpha, A_data, A_ld, x_data, 1, + (value_type)beta, y_data, 1, format, + (MKL_INT)vector_type::vector_length); } #endif diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index fd5ef23d02..a9e0cb8fa6 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -342,16 +342,27 @@ struct SerialGEMVTest, #ifdef KOKKOSKERNELS_TEST_FLOAT TEST_CASE(float, float) +// MKL vector types +#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ +using simd_float_sse = ::Test::simd_vector; +using simd_float_avx = ::Test::simd_vector; +using simd_float_avx512 = ::Test::simd_vector; +TEST_CASE2(mkl_float_sse, simd_float_sse, float) +TEST_CASE2(mkl_float_avx, simd_float_avx, float) +TEST_CASE2(mkl_float_avx512, simd_float_avx512, float) +#endif #endif #ifdef KOKKOSKERNELS_TEST_DOUBLE TEST_CASE(double, double) // MKL vector types #ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ -using simd_vector_avx8 = ::Test::simd_vector; -using simd_vector_avx4 = ::Test::simd_vector; -TEST_CASE2(mkl_simd_vector_avx8, simd_vector_avx8, double) -TEST_CASE2(mkl_simd_vector_avx4, simd_vector_avx4, double) +using simd_double_sse = ::Test::simd_vector; +using simd_double_avx = ::Test::simd_vector; +using simd_double_avx512 = ::Test::simd_vector; +TEST_CASE2(mkl_double_sse, simd_double_sse, double) +TEST_CASE2(mkl_double_avx, simd_double_avx, double) +TEST_CASE2(mkl_double_avx512, simd_double_avx512, double) #endif #endif From 486390393facccb3c291f0fcc99d8983088d0427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Fri, 29 Jul 2022 18:28:53 +0200 Subject: [PATCH 017/226] avoid extra EXPECT_NEAR_KK_REL utility --- test_common/KokkosKernels_TestUtils.hpp | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/test_common/KokkosKernels_TestUtils.hpp b/test_common/KokkosKernels_TestUtils.hpp index 45ff8ca2bb..bfd475754e 100644 --- a/test_common/KokkosKernels_TestUtils.hpp +++ b/test_common/KokkosKernels_TestUtils.hpp @@ -139,22 +139,6 @@ void EXPECT_NEAR_KK(Scalar1 val1, Scalar2 val2, Scalar3 tol, EXPECT_LE((double)AT1::abs(val1 - val2), (double)AT3::abs(tol)) << msg; } -template -void EXPECT_NEAR_KK_REL(Scalar1 val1, Scalar2 val2, Scalar3 tol, - std::string msg = "") { - typedef Kokkos::Details::ArithTraits AT1; - typedef Kokkos::Details::ArithTraits AT2; - typedef Kokkos::Details::ArithTraits AT3; - const auto tolerance = (double)AT3::abs(tol); - const auto diff = (double)AT1::abs(val1 - val2); - const auto val = KOKKOSKERNELS_MACRO_MAX(AT1::abs(val1), AT2::abs(val2)); - if (val < tolerance) { - // if both values are near-zero, they pass as equal - } else { - EXPECT_LE(diff / val, tolerance) << msg; - } -} - template void EXPECT_NEAR_KK_1DVIEW(ViewType1 v1, ViewType2 v2, Scalar tol) { size_t v1_size = v1.extent(0); @@ -185,7 +169,11 @@ void EXPECT_NEAR_KK_REL_1DVIEW(ViewType1 v1, ViewType2 v2, Scalar tol) { KokkosKernels::Impl::safe_device_to_host_deep_copy(v2.extent(0), v2, h_v2); for (size_t i = 0; i < v1_size; ++i) { - EXPECT_NEAR_KK_REL(h_v1(i), h_v2(i), tol); + typedef typename std::remove_reference::type hv1_type; + typedef typename std::remove_reference::type hv2_type; + const auto ahv1 = Kokkos::Details::ArithTraits::abs(h_v1(i)); + const auto ahv2 = Kokkos::Details::ArithTraits::abs(h_v2(i)); + EXPECT_NEAR_KK(h_v1(i), h_v2(i), tol * Kokkos::max(ahv1, ahv2)); } } From 4464f2072aa6a18b8e9d5acc2081ed31c7eeb61c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Fri, 29 Jul 2022 18:32:39 +0200 Subject: [PATCH 018/226] fix: enforce integral indexing --- src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp index 203b24d04e..28fdf884cf 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp @@ -141,9 +141,9 @@ void kk_mkl_gemv(MKL_TRANSPOSE trans, const ScalarType alpha, // Note: not checking 0-sizes as MKL handles it fine const bool transposed = trans == MKL_TRANS || trans == MKL_CONJTRANS; - const int m = A.extent(transposed ? 1 : 0); + const int m = A.extent_int(transposed ? 1 : 0); const int n = 1; - const int k = A.extent(transposed ? 0 : 1); + const int k = A.extent_int(transposed ? 0 : 1); const bool col_major = A.stride_0() == 1; const MKL_LAYOUT layout = col_major ? MKL_COL_MAJOR : MKL_ROW_MAJOR; From d521788c1c0598b6ed773b44862a3e0078d32918 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Fri, 29 Jul 2022 19:55:08 +0200 Subject: [PATCH 019/226] move MKL implementation to dedicated TPL header --- .../impl/KokkosBlas2_serial_gemv_impl.hpp | 141 +----------- src/blas/impl/KokkosBlas_util.hpp | 9 - .../KokkosBlas2_serial_gemv_tpl_spec_decl.hpp | 205 ++++++++++++++++++ 3 files changed, 211 insertions(+), 144 deletions(-) create mode 100644 src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp index 28fdf884cf..cbd2495d92 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp @@ -48,7 +48,6 @@ #include "KokkosBlas_util.hpp" #include "KokkosBlas2_serial_gemv_internal.hpp" -#include "KokkosBatched_Vector.hpp" // for Vector handling in CompactMKL impls namespace KokkosBlas { @@ -66,122 +65,20 @@ struct SerialGemv { } }; -/// -/// Serial Impl -/// =========== -/// CompactMKL does not exist on Gemv - -namespace Impl { - -#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ - -#define __IMPL_KK_MKL_DGEMM_COMPACT(SCALAR, MKL_ROUTINE) \ - void kk_mkl_gemm_compact( \ - MKL_LAYOUT layout, MKL_TRANSPOSE transa, MKL_TRANSPOSE transb, \ - MKL_INT m, MKL_INT n, MKL_INT k, SCALAR alpha, const SCALAR *a, \ - MKL_INT ldap, const SCALAR *b, MKL_INT ldbp, SCALAR beta, SCALAR *c, \ - MKL_INT ldcp, MKL_COMPACT_PACK format, MKL_INT nm) { \ - MKL_ROUTINE(layout, transa, transb, m, n, k, alpha, a, ldap, b, ldbp, \ - beta, c, ldcp, format, nm); \ - } - -__IMPL_KK_MKL_DGEMM_COMPACT(double, mkl_dgemm_compact) -__IMPL_KK_MKL_DGEMM_COMPACT(float, mkl_sgemm_compact) -// TODO: add complex ? see mkl_cgemm_compact() and mkl_zgemm_compact() -#undef __IMPL_KK_MKL_DGEMM_COMPACT - -template -MKL_COMPACT_PACK mkl_compact_format() { - Kokkos::abort("vector size not supported"); -} -template <> -MKL_COMPACT_PACK mkl_compact_format() { - return MKL_COMPACT_SSE; -} -template <> -MKL_COMPACT_PACK mkl_compact_format() { - return MKL_COMPACT_SSE; -} -template <> -MKL_COMPACT_PACK mkl_compact_format() { - return MKL_COMPACT_AVX; -} -template <> -MKL_COMPACT_PACK mkl_compact_format() { - return MKL_COMPACT_AVX; -} -template <> -MKL_COMPACT_PACK mkl_compact_format() { - return MKL_COMPACT_AVX512; -} -template <> -MKL_COMPACT_PACK mkl_compact_format() { - return MKL_COMPACT_AVX512; -} - -template -void kk_mkl_gemv(MKL_TRANSPOSE trans, const ScalarType alpha, - const AViewType &A, const xViewType &x, const ScalarType beta, - const yViewType &y) { - typedef typename yViewType::value_type vector_type; - - static_assert(KokkosBatched::is_vector::value, - "value type is not vector type"); - using value_type = typename vector_type::value_type; - static_assert(std::is_same::value && - std::is_same::value, - "scalar type mismatch"); - if (A.stride_0() != 1 && A.stride_1() != 1 && x.stride_0() != 1 && - y.stride_0() != 1) { - Kokkos::abort("Strided inputs are not supported in MKL gemv/gemm"); - } - - // Note: not checking 0-sizes as MKL handles it fine - const bool transposed = trans == MKL_TRANS || trans == MKL_CONJTRANS; - const int m = A.extent_int(transposed ? 1 : 0); - const int n = 1; - const int k = A.extent_int(transposed ? 0 : 1); - - const bool col_major = A.stride_0() == 1; - const MKL_LAYOUT layout = col_major ? MKL_COL_MAJOR : MKL_ROW_MAJOR; - const MKL_INT A_ld = KOKKOSKERNELS_MACRO_MAX(1, A.extent(col_major ? 0 : 1)); - const MKL_COMPACT_PACK format = - Impl::mkl_compact_format(); +} // namespace KokkosBlas - // cast away simd-vector pointers - auto A_data = reinterpret_cast(A.data()); - auto x_data = reinterpret_cast(x.data()); - auto y_data = reinterpret_cast(y.data()); +#include "KokkosBlas2_serial_gemv_tpl_spec_decl.hpp" - Impl::kk_mkl_gemm_compact(layout, trans, MKL_NOTRANS, m, n, k, - (value_type)alpha, A_data, A_ld, x_data, 1, - (value_type)beta, y_data, 1, format, - (MKL_INT)vector_type::vector_length); -} -#endif +namespace KokkosBlas { -} // namespace Impl +/// +/// Serial Impl +/// =========== /// /// NT /// -#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ -template <> -template -KOKKOS_INLINE_FUNCTION int -SerialGemv::invoke( - const ScalarType alpha, const AViewType &A, const xViewType &x, - const ScalarType beta, const yViewType &y) { - Impl::kk_mkl_gemv(MKL_NOTRANS, alpha, A, x, beta, y); - return 0; -} -#endif - template <> template @@ -209,19 +106,6 @@ SerialGemv::invoke( /// T /// -#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ -template <> -template -KOKKOS_INLINE_FUNCTION int -SerialGemv::invoke( - const ScalarType alpha, const AViewType &A, const xViewType &x, - const ScalarType beta, const yViewType &y) { - Impl::kk_mkl_gemv(MKL_TRANS, alpha, A, x, beta, y); - return 0; -} -#endif - template <> template @@ -250,19 +134,6 @@ SerialGemv::invoke( /// CT /// -#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ -template <> -template -KOKKOS_INLINE_FUNCTION int -SerialGemv::invoke( - const ScalarType alpha, const AViewType &A, const xViewType &x, - const ScalarType beta, const yViewType &y) { - Impl::kk_mkl_gemv(MKL_CONJTRANS, alpha, A, x, beta, y); - return 0; -} -#endif - template <> template diff --git a/src/blas/impl/KokkosBlas_util.hpp b/src/blas/impl/KokkosBlas_util.hpp index 846671b47d..702f3ef8a4 100644 --- a/src/blas/impl/KokkosBlas_util.hpp +++ b/src/blas/impl/KokkosBlas_util.hpp @@ -47,15 +47,6 @@ #include "Kokkos_ArithTraits.hpp" -// TPL macros -#if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) -#include "mkl_version.h" -#if __INTEL_MKL__ >= 2018 -#define __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ 1 -#include "mkl_compact.h" -#endif -#endif - namespace KokkosBlas { //////// Tags for BLAS //////// diff --git a/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp b/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp new file mode 100644 index 0000000000..c994929b5b --- /dev/null +++ b/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp @@ -0,0 +1,205 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS2_SERIAL_GEMV_TPL_SPEC_DECL_HPP_ +#define KOKKOSBLAS2_SERIAL_GEMV_TPL_SPEC_DECL_HPP_ + +#include "KokkosBlas_util.hpp" +#include "KokkosBatched_Vector.hpp" + +#if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) +#include "mkl_version.h" +#if __INTEL_MKL__ >= 2018 +#define __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ 1 +#endif +#endif + +#ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ + +#include "mkl_compact.h" + +namespace KokkosBlas { +namespace Impl { + +// Note: using GEMM because there is no GEMV in MKL compact routines + +#define __IMPL_KK_MKL_DGEMM_COMPACT(SCALAR, MKL_ROUTINE) \ + void kk_mkl_gemm_compact( \ + MKL_LAYOUT layout, MKL_TRANSPOSE transa, MKL_TRANSPOSE transb, \ + MKL_INT m, MKL_INT n, MKL_INT k, SCALAR alpha, const SCALAR *a, \ + MKL_INT ldap, const SCALAR *b, MKL_INT ldbp, SCALAR beta, SCALAR *c, \ + MKL_INT ldcp, MKL_COMPACT_PACK format, MKL_INT nm) { \ + MKL_ROUTINE(layout, transa, transb, m, n, k, alpha, a, ldap, b, ldbp, \ + beta, c, ldcp, format, nm); \ + } + +__IMPL_KK_MKL_DGEMM_COMPACT(double, mkl_dgemm_compact) +__IMPL_KK_MKL_DGEMM_COMPACT(float, mkl_sgemm_compact) +// Note: MKL compact format packs real and imaginary components separately +// which makes it not directly compatible with our Vector types + +#undef __IMPL_KK_MKL_DGEMM_COMPACT + +template +MKL_COMPACT_PACK mkl_compact_format() { + Kokkos::abort("vector size not supported"); +} +template <> +MKL_COMPACT_PACK mkl_compact_format() { + return MKL_COMPACT_SSE; +} +template <> +MKL_COMPACT_PACK mkl_compact_format() { + return MKL_COMPACT_SSE; +} +template <> +MKL_COMPACT_PACK mkl_compact_format() { + return MKL_COMPACT_AVX; +} +template <> +MKL_COMPACT_PACK mkl_compact_format() { + return MKL_COMPACT_AVX; +} +template <> +MKL_COMPACT_PACK mkl_compact_format() { + return MKL_COMPACT_AVX512; +} +template <> +MKL_COMPACT_PACK mkl_compact_format() { + return MKL_COMPACT_AVX512; +} + +template +void kk_mkl_gemv(MKL_TRANSPOSE trans, const ScalarType alpha, + const AViewType &A, const xViewType &x, const ScalarType beta, + const yViewType &y) { + typedef typename yViewType::value_type vector_type; + + static_assert(KokkosBatched::is_vector::value, + "value type is not vector type"); + using value_type = typename vector_type::value_type; + static_assert(std::is_same::value && + std::is_same::value, + "scalar type mismatch"); + if (A.stride_0() != 1 && A.stride_1() != 1 && x.stride_0() != 1 && + y.stride_0() != 1) { + Kokkos::abort("Strided inputs are not supported in MKL gemv/gemm"); + } + + // Note: not checking 0-sizes as MKL handles it fine + const bool transposed = trans == MKL_TRANS || trans == MKL_CONJTRANS; + const int m = A.extent_int(transposed ? 1 : 0); + const int n = 1; + const int k = A.extent_int(transposed ? 0 : 1); + + const bool col_major = A.stride_0() == 1; + const MKL_LAYOUT layout = col_major ? MKL_COL_MAJOR : MKL_ROW_MAJOR; + const MKL_INT A_ld = KOKKOSKERNELS_MACRO_MAX(1, A.extent(col_major ? 0 : 1)); + const MKL_COMPACT_PACK format = + Impl::mkl_compact_format(); + + // cast away simd-vector pointers + auto A_data = reinterpret_cast(A.data()); + auto x_data = reinterpret_cast(x.data()); + auto y_data = reinterpret_cast(y.data()); + + Impl::kk_mkl_gemm_compact(layout, trans, MKL_NOTRANS, m, n, k, + (value_type)alpha, A_data, A_ld, x_data, 1, + (value_type)beta, y_data, 1, format, + (MKL_INT)vector_type::vector_length); +} + +} // namespace Impl + +/// +/// NT +/// + +template <> +template +KOKKOS_INLINE_FUNCTION int +SerialGemv::invoke( + const ScalarType alpha, const AViewType &A, const xViewType &x, + const ScalarType beta, const yViewType &y) { + Impl::kk_mkl_gemv(MKL_NOTRANS, alpha, A, x, beta, y); + return 0; +} + +/// +/// T +/// + +template <> +template +KOKKOS_INLINE_FUNCTION int +SerialGemv::invoke( + const ScalarType alpha, const AViewType &A, const xViewType &x, + const ScalarType beta, const yViewType &y) { + Impl::kk_mkl_gemv(MKL_TRANS, alpha, A, x, beta, y); + return 0; +} + +/// +/// CT +/// + +template <> +template +KOKKOS_INLINE_FUNCTION int +SerialGemv::invoke( + const ScalarType alpha, const AViewType &A, const xViewType &x, + const ScalarType beta, const yViewType &y) { + Impl::kk_mkl_gemv(MKL_CONJTRANS, alpha, A, x, beta, y); + return 0; +} + +} // namespace KokkosBlas + +#endif // __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ +#endif // KOKKOSBLAS2_SERIAL_GEMV_TPL_SPEC_DECL_HPP_ From 22c696ad223d23928a95a62148f8a64b61572840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Fri, 29 Jul 2022 20:30:59 +0200 Subject: [PATCH 020/226] fix typo --- src/blas/impl/KokkosBlas_util.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blas/impl/KokkosBlas_util.hpp b/src/blas/impl/KokkosBlas_util.hpp index 702f3ef8a4..150f06c77a 100644 --- a/src/blas/impl/KokkosBlas_util.hpp +++ b/src/blas/impl/KokkosBlas_util.hpp @@ -64,7 +64,7 @@ struct Algo { struct Blocked { static const char *name() { return "Blocked"; } // TODO:: for now harwire the blocksizes; this should reflect - // regieter blocking (not about team parallelism). + // register blocking (not about team parallelism). // this mb should vary according to // - team policy (smaller) or range policy (bigger) // - space (gpu vs host) From df0fc7ad3521a110397c40e5c9ffd11a468f329d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Fri, 29 Jul 2022 20:58:37 +0200 Subject: [PATCH 021/226] fix: move missing algo_level{2,3}_blocked_mb_impl --- src/batched/KokkosBatched_Util.hpp | 54 ---------------------------- src/blas/impl/KokkosBlas_util.hpp | 57 ++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 54 deletions(-) diff --git a/src/batched/KokkosBatched_Util.hpp b/src/batched/KokkosBatched_Util.hpp index e0ade6e481..6022b1b607 100644 --- a/src/batched/KokkosBatched_Util.hpp +++ b/src/batched/KokkosBatched_Util.hpp @@ -295,60 +295,6 @@ struct Mode { }; }; -#if !defined(KOKKOS_IF_ON_HOST) - -template -struct algo_level3_blocked_mb_impl; -template <> -struct algo_level3_blocked_mb_impl { - static constexpr int value = 4; -}; -#if defined(KOKKOS_ENABLE_CUDA) -template <> -struct algo_level3_blocked_mb_impl { - static constexpr int value = 2; -}; -#endif -#if defined(KOKKOS_ENABLE_HIP) -template <> -struct algo_level3_blocked_mb_impl { - static constexpr int value = 2; -}; -#endif -#if defined(KOKKOS_ENABLE_SYCL) -template <> -struct algo_level3_blocked_mb_impl { - static constexpr int value = 2; -}; -#endif - -template -struct algo_level2_blocked_mb_impl; -template <> -struct algo_level2_blocked_mb_impl { - static constexpr int value = 4; -}; -#if defined(KOKKOS_ENABLE_CUDA) -template <> -struct algo_level2_blocked_mb_impl { - static constexpr int value = 1; -}; -#endif -#if defined(KOKKOS_ENABLE_HIP) -template <> -struct algo_level2_blocked_mb_impl { - static constexpr int value = 1; -}; -#endif -#if defined(KOKKOS_ENABLE_SYCL) -template <> -struct algo_level2_blocked_mb_impl { - static constexpr int value = 1; -}; -#endif - -#endif - using KokkosBlas::Algo; struct Util { diff --git a/src/blas/impl/KokkosBlas_util.hpp b/src/blas/impl/KokkosBlas_util.hpp index 150f06c77a..3ddf0afbd5 100644 --- a/src/blas/impl/KokkosBlas_util.hpp +++ b/src/blas/impl/KokkosBlas_util.hpp @@ -56,6 +56,63 @@ struct Trans { struct ConjTranspose {}; }; +#if !defined(KOKKOS_IF_ON_HOST) + +namespace Impl { + +template +struct algo_level3_blocked_mb_impl; +template <> +struct algo_level3_blocked_mb_impl { + static constexpr int value = 4; +}; +#if defined(KOKKOS_ENABLE_CUDA) +template <> +struct algo_level3_blocked_mb_impl { + static constexpr int value = 2; +}; +#endif +#if defined(KOKKOS_ENABLE_HIP) +template <> +struct algo_level3_blocked_mb_impl { + static constexpr int value = 2; +}; +#endif +#if defined(KOKKOS_ENABLE_SYCL) +template <> +struct algo_level3_blocked_mb_impl { + static constexpr int value = 2; +}; +#endif + +template +struct algo_level2_blocked_mb_impl; +template <> +struct algo_level2_blocked_mb_impl { + static constexpr int value = 4; +}; +#if defined(KOKKOS_ENABLE_CUDA) +template <> +struct algo_level2_blocked_mb_impl { + static constexpr int value = 1; +}; +#endif +#if defined(KOKKOS_ENABLE_HIP) +template <> +struct algo_level2_blocked_mb_impl { + static constexpr int value = 1; +}; +#endif +#if defined(KOKKOS_ENABLE_SYCL) +template <> +struct algo_level2_blocked_mb_impl { + static constexpr int value = 1; +}; +#endif + +} // namespace Impl +#endif + struct Algo { struct Level3 { struct Unblocked { From 508f253506644ed8634f4a36781e39889784782b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Fri, 5 Aug 2022 09:33:49 +0200 Subject: [PATCH 022/226] Fix: make abs() return vector for SIMD vector and have vectors compared value-by-value in unit tests --- src/batched/dense/KokkosBatched_Vector.hpp | 14 ++++++----- test_common/KokkosKernels_TestUtils.hpp | 28 ++++++++++++++++++---- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/batched/dense/KokkosBatched_Vector.hpp b/src/batched/dense/KokkosBatched_Vector.hpp index 557f5ef996..9851e9d4b8 100644 --- a/src/batched/dense/KokkosBatched_Vector.hpp +++ b/src/batched/dense/KokkosBatched_Vector.hpp @@ -259,10 +259,11 @@ class ArithTraits, l>> { return val; } - static KOKKOS_FORCEINLINE_FUNCTION mag_scalar_type abs(const val_type &val) { - mag_scalar_type v = ArithTraits::zero(); + static KOKKOS_FORCEINLINE_FUNCTION val_type abs(const val_type &val) { + using KAT = ArithTraits; + val_type v{}; for (int i = 0; i < l; ++i) { - v = KOKKOSKERNELS_MACRO_MAX(v, KOKKOSKERNELS_MACRO_ABS(val[i])); + v[i] = KAT::abs(v[i]); } return v; } @@ -311,10 +312,11 @@ class ArithTraits< return v; } - static KOKKOS_FORCEINLINE_FUNCTION mag_scalar_type abs(const val_type &val) { - mag_scalar_type v = ArithTraits::zero(); + static KOKKOS_FORCEINLINE_FUNCTION val_type abs(const val_type &val) { + using KAT = ArithTraits; + val_type v{}; for (int i = 0; i < l; ++i) { - v = KOKKOSKERNELS_MACRO_MAX(v, KOKKOSKERNELS_MACRO_ABS(val[i])); + v[i] = KAT::abs(v[i]); } return v; } diff --git a/test_common/KokkosKernels_TestUtils.hpp b/test_common/KokkosKernels_TestUtils.hpp index bfd475754e..b8ce0eb595 100644 --- a/test_common/KokkosKernels_TestUtils.hpp +++ b/test_common/KokkosKernels_TestUtils.hpp @@ -50,6 +50,7 @@ #include "KokkosKernels_Utils.hpp" #include "KokkosKernels_IOUtils.hpp" #include "Kokkos_ArithTraits.hpp" +#include "KokkosBatched_Vector.hpp" #include "KokkosSparse_spmv.hpp" // Make this include-able from all subdirectories #include "../tpls/gtest/gtest/gtest.h" //for EXPECT_** @@ -139,6 +140,27 @@ void EXPECT_NEAR_KK(Scalar1 val1, Scalar2 val2, Scalar3 tol, EXPECT_LE((double)AT1::abs(val1 - val2), (double)AT3::abs(tol)) << msg; } +template +void EXPECT_NEAR_KK_REL(Scalar1 val1, Scalar2 val2, Scalar3 tol, + std::string msg = "") { + typedef typename std::remove_reference::type hv1_type; + typedef typename std::remove_reference::type hv2_type; + const auto ahv1 = Kokkos::Details::ArithTraits::abs(val1); + const auto ahv2 = Kokkos::Details::ArithTraits::abs(val2); + EXPECT_NEAR_KK(val1, val2, tol * Kokkos::max(ahv1, ahv2), msg); +} + +// Special overload for accurate value by value SIMD vectors comparison +template +void EXPECT_NEAR_KK_REL( + const KokkosBatched::Vector, VecLen>& val1, + const KokkosBatched::Vector, VecLen>& val2, + Tolerance tol, std::string msg = "") { + for (int i = 0; i < VecLen; ++i) { + EXPECT_NEAR_KK_REL(val1[i], val2[i], tol, msg); + } +} + template void EXPECT_NEAR_KK_1DVIEW(ViewType1 v1, ViewType2 v2, Scalar tol) { size_t v1_size = v1.extent(0); @@ -169,11 +191,7 @@ void EXPECT_NEAR_KK_REL_1DVIEW(ViewType1 v1, ViewType2 v2, Scalar tol) { KokkosKernels::Impl::safe_device_to_host_deep_copy(v2.extent(0), v2, h_v2); for (size_t i = 0; i < v1_size; ++i) { - typedef typename std::remove_reference::type hv1_type; - typedef typename std::remove_reference::type hv2_type; - const auto ahv1 = Kokkos::Details::ArithTraits::abs(h_v1(i)); - const auto ahv2 = Kokkos::Details::ArithTraits::abs(h_v2(i)); - EXPECT_NEAR_KK(h_v1(i), h_v2(i), tol * Kokkos::max(ahv1, ahv2)); + EXPECT_NEAR_KK_REL(h_v1(i), h_v2(i), tol); } } From 8db3c5fd61e37cbaa0b7f7af93c752e58d0620e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Fri, 5 Aug 2022 20:05:32 +0200 Subject: [PATCH 023/226] cut dummy impl to trigger compiler errors --- src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp index cbd2495d92..75164f87ab 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp @@ -59,10 +59,7 @@ struct SerialGemv { const AViewType & /*A*/, const xViewType & /*x*/, const ScalarType /*beta*/, - const yViewType & /*y*/) { - Kokkos::abort("Error: encounter dummy impl"); - return 0; - } + const yViewType & /*y*/); }; } // namespace KokkosBlas From 489fd205ebbd4e467d0ea8424b4dbd7781c02e54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Fri, 5 Aug 2022 20:09:54 +0200 Subject: [PATCH 024/226] fix: use abort() ensure deprecation errors also in Release builds and on GPUs --- src/batched/dense/KokkosBatched_Gemv_Decl.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/batched/dense/KokkosBatched_Gemv_Decl.hpp b/src/batched/dense/KokkosBatched_Gemv_Decl.hpp index ee66898316..f4a70d4eb5 100644 --- a/src/batched/dense/KokkosBatched_Gemv_Decl.hpp +++ b/src/batched/dense/KokkosBatched_Gemv_Decl.hpp @@ -21,9 +21,9 @@ struct SerialGemv { const xViewType & /*x*/, const ScalarType /*beta*/, const yViewType & /*y*/) { - assert(false && - "Error: KokkosBatched::SerialGemv has been deprecated - use " - "KokkosBlas::SerialGemv instead"); + Kokkos::abort( + "Error: KokkosBatched::SerialGemv has been deprecated - use " + "KokkosBlas::SerialGemv instead"); return 0; } }; From bab8964f3fc70a0181c568ac17b3fec23be105df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Fri, 5 Aug 2022 20:10:06 +0200 Subject: [PATCH 025/226] remove unused header --- src/blas/KokkosBlas2_serial_gemv.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/blas/KokkosBlas2_serial_gemv.hpp b/src/blas/KokkosBlas2_serial_gemv.hpp index ad16746c90..7b26fdeeb7 100644 --- a/src/blas/KokkosBlas2_serial_gemv.hpp +++ b/src/blas/KokkosBlas2_serial_gemv.hpp @@ -47,7 +47,6 @@ #include "KokkosBlas2_serial_gemv_impl.hpp" #include "KokkosBlas_util.hpp" -#include "KokkosKernels_Error.hpp" namespace KokkosBlas { namespace Experimental { From 4975a4d12898c4a8339d65ea6d8668ac1ddc73d6 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Tue, 9 Aug 2022 12:32:00 -0600 Subject: [PATCH 026/226] Add gcc/7.3.0 to macro guard define for KOKKOSKERNELS_ENABLE_OMP_SIMD Address issue #1487 --- src/KokkosKernels_Macros.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/KokkosKernels_Macros.hpp b/src/KokkosKernels_Macros.hpp index 1630028c54..e805d36828 100644 --- a/src/KokkosKernels_Macros.hpp +++ b/src/KokkosKernels_Macros.hpp @@ -66,9 +66,10 @@ // https://clang.llvm.org/docs/OpenMPSupport.html#id1 #if defined(KOKKOS_COMPILER_GNU) || defined(KOKKOS_COMPILER_CLANG) // GCC 4.8.5 and older do not support #pragma omp simd -// Do not enable when using GCC 7.2.0 + C++17 due to a bug in gcc +// Do not enable when using GCC 7.2.0 or 7.3.0 + C++17 due to a bug in gcc #if (KOKKOS_COMPILER_GNU > 485) && \ - !(KOKKOS_COMPILER_GNU == 720 && defined(KOKKOS_ENABLE_CXX17)) + !(KOKKOS_COMPILER_GNU == 720 && defined(KOKKOS_ENABLE_CXX17)) && \ + !(KOKKOS_COMPILER_GNU == 730 && defined(KOKKOS_ENABLE_CXX17)) #define KOKKOSKERNELS_ENABLE_OMP_SIMD #endif // TODO: Check for a clang version that supports #pragma omp simd From b000067548b0a1a953046b3c149f51031adb1d3b Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Tue, 9 Aug 2022 13:24:23 -0600 Subject: [PATCH 027/226] Apply clang-format-8 --- src/KokkosKernels_Macros.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KokkosKernels_Macros.hpp b/src/KokkosKernels_Macros.hpp index e805d36828..67d86b6e0e 100644 --- a/src/KokkosKernels_Macros.hpp +++ b/src/KokkosKernels_Macros.hpp @@ -67,7 +67,7 @@ #if defined(KOKKOS_COMPILER_GNU) || defined(KOKKOS_COMPILER_CLANG) // GCC 4.8.5 and older do not support #pragma omp simd // Do not enable when using GCC 7.2.0 or 7.3.0 + C++17 due to a bug in gcc -#if (KOKKOS_COMPILER_GNU > 485) && \ +#if (KOKKOS_COMPILER_GNU > 485) && \ !(KOKKOS_COMPILER_GNU == 720 && defined(KOKKOS_ENABLE_CXX17)) && \ !(KOKKOS_COMPILER_GNU == 730 && defined(KOKKOS_ENABLE_CXX17)) #define KOKKOSKERNELS_ENABLE_OMP_SIMD From 6e0ea104d724dd5f8b25d7d1d9cd539a18af7be0 Mon Sep 17 00:00:00 2001 From: Brian Kelley Date: Mon, 8 Aug 2022 10:44:25 -0600 Subject: [PATCH 028/226] Update --verbose option in D2 coloring perftest - for symmetric D2 coloring, verify precondition that local graph is structurally symmetric. (local means the 0..nrows by 0..nrows submatrix, since entries in higher columns are allowed and are ignored by the algorithms) - verify correctness of coloring like unit test does --- perf_test/graph/KokkosGraph_color_d2.cpp | 489 +++++++++++++---------- 1 file changed, 272 insertions(+), 217 deletions(-) diff --git a/perf_test/graph/KokkosGraph_color_d2.cpp b/perf_test/graph/KokkosGraph_color_d2.cpp index b824ced38a..bc4add8b34 100644 --- a/perf_test/graph/KokkosGraph_color_d2.cpp +++ b/perf_test/graph/KokkosGraph_color_d2.cpp @@ -89,7 +89,7 @@ struct D2Parameters { D2Parameters() { algorithm = COLORING_D2_DEFAULT; - repeat = 6; + repeat = 1; verbose = 0; use_threads = 0; use_openmp = 0; @@ -105,7 +105,76 @@ typedef default_scalar kk_scalar_t; typedef default_size_type kk_size_type; typedef default_lno_t kk_lno_t; -using namespace KokkosGraph; +using KokkosKernels::Impl::xorshiftHash; + +template +bool verifySymmetric(lno_t numVerts, const rowmap_t& d_rowmap, + const entries_t& d_entries) { + auto rowmap = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), d_rowmap); + auto entries = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), d_entries); + size_t hash = 0; + for (lno_t v = 0; v < numVerts; v++) { + size_type rowBegin = rowmap(v); + size_type rowEnd = rowmap(v + 1); + for (size_type i = rowBegin; i < rowEnd; i++) { + lno_t nei = entries(i); + if (nei < numVerts && nei != v) { + hash ^= xorshiftHash(xorshiftHash(v) ^ + xorshiftHash(nei)); + } + } + } + return hash == 0U; +} + +template +bool verifyD2Coloring(lno_t numVerts, const rowmap_t& d_rowmap, + const entries_t& d_entries, const colors_t& d_colors) { + auto rowmap = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), d_rowmap); + auto entries = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), d_entries); + auto colors = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), d_colors); + // Just do the simplest possible neighbors-of-neighbors loop to find conflicts + for (lno_t v = 0; v < numVerts; v++) { + if (colors(v) == 0) { + std::cout << "Vertex " << v << " is uncolored.\n"; + return false; + } + size_type rowBegin = rowmap(v); + size_type rowEnd = rowmap(v + 1); + for (size_type i = rowBegin; i < rowEnd; i++) { + lno_t nei1 = entries(i); + if (nei1 < numVerts && nei1 != v) { + // check for dist-1 conflict + if (colors(v) == colors(nei1)) { + std::cout << "Dist-1 conflict between " << v << " and " << nei1 + << '\n'; + return false; + } + // iterate over dist-2 neighbors + size_type colBegin = rowmap(nei1); + size_type colEnd = rowmap(nei1 + 1); + for (size_type j = colBegin; j < colEnd; j++) { + lno_t nei2 = entries(j); + if (nei2 < numVerts && nei2 != v) { + if (colors(v) == colors(nei2)) { + std::cout << "Dist-2 conflict between " << v << " and " << nei2 + << '\n'; + return false; + } + } + } + } + } + } + return true; +} void print_options(std::ostream& os, const char* app_name, unsigned int indent = 0) { @@ -180,8 +249,12 @@ void print_options(std::ostream& os, const char* app_name, << " --repeat Set number of test repetitions (Default: 1) " << std::endl << spaces - << " --verbose Enable verbose mode (record and print " - "timing + extra information)" + << " --verbose Enable verbose mode. Print more detailed " + "timing information, and for --symmetric_d2," + << std::endl + << spaces + << " verify input graph is symmetric " + "(undirected) and verify coloring." << std::endl << spaces << " --help Print out command line help." << std::endl @@ -313,6 +386,21 @@ void run_experiment(crsGraph_t crsGraph, int num_cols, kh.set_verbose(true); } + if (verbose && params.d2_color_type == MODE_D2_SYMMETRIC) { + if (verifySymmetric( + crsGraph.numRows(), crsGraph.row_map, crsGraph.entries)) { + std::cout << std::endl + << "Distance-2 Graph is symmetric (valid input)" << std::endl; + } else { + std::cout << std::endl + << "Distance-2 Graph is nonsymmetric (INVALID INPUT)" + << std::endl; + // Don't attempt coloring when input is invalid + return; + } + } + // accumulators for average stats size_t total_colors = 0; size_t total_phases = 0; @@ -325,7 +413,6 @@ void run_experiment(crsGraph_t crsGraph, int num_cols, // If any of the runs have an invalid result, this will be set to false. bool all_results_valid = true; - // Loop over # of experiments to run for (int i = 0; i < repeat; ++i) { switch (params.d2_color_type) { @@ -357,234 +444,202 @@ void run_experiment(crsGraph_t crsGraph, int num_cols, << std::endl; std::cout << "\t"; - KokkosKernels::Impl::print_1Dview( - kh.get_distance2_graph_coloring_handle()->get_vertex_colors()); + auto colors = kh.get_distance2_graph_coloring_handle()->get_vertex_colors(); + KokkosKernels::Impl::print_1Dview(colors); std::cout << std::endl; - // If verbose mode is on and there the graph has fewer than 1500 verts, dump - // a GraphVIZ DOT file. - if (verbose && repeat == i + 1 && crsGraph.numRows() < 1500) { - auto colors = - kh.get_distance2_graph_coloring_handle()->get_vertex_colors(); - std::ofstream os("G.dot", std::ofstream::out); - kh.get_distance2_graph_coloring_handle()->dump_graphviz( - os, crsGraph.numRows(), crsGraph.row_map, crsGraph.entries, colors); - } - // ------------------------------------------ - // Verify correctness + // Verify correctness (for undirected/symmetric D2 coloring only, not + // bipartite) // ------------------------------------------ - // TODO bmk: write a faster color verification - /* - bool d2_coloring_is_valid = false; - bool d2_coloring_validation_flags[4] = { false }; - - d2_coloring_is_valid = KokkosGraph::Impl::graph_verify_distance2_color(&kh, - crsGraph.numRows(), num_cols, crsGraph.row_map, crsGraph.entries, - crsGraph.row_map, crsGraph.entries, d2_coloring_validation_flags); - - // Print out messages based on coloring validation check. - if(d2_coloring_is_valid) - { - std::cout << std::endl << "Distance-2 Graph Coloring is VALID" << - std::endl << std::endl; - } - else - { - all_results_valid = false; + if (verbose && params.d2_color_type == MODE_D2_SYMMETRIC) { + if (verifyD2Coloring( + crsGraph.numRows(), crsGraph.row_map, crsGraph.entries, colors)) { std::cout << std::endl - << "Distance-2 Graph Coloring is NOT VALID" << std::endl - << " - Vert(s) left uncolored : " << - d2_coloring_validation_flags[1] << std::endl - << " - Invalid D2 Coloring : " << - d2_coloring_validation_flags[2] << std::endl - << std::endl; - } - if(d2_coloring_validation_flags[3]) - { - std::cout << "Distance-2 Graph Coloring may have poor quality." << - std::endl - << " - Vert(s) have high color value : " << - d2_coloring_validation_flags[3] << std::endl + << "Distance-2 Graph Coloring is VALID" << std::endl << std::endl; + } else { + std::cout << std::endl + << "Distance-2 Graph Coloring is NOT VALID" << std::endl; + all_results_valid = false; + } } - */ // ------------------------------------------ // Print out the colors histogram // ------------------------------------------ KokkosGraph::Impl::graph_print_distance2_color_histogram(&kh, false); - } // for i... - // ------------------------------------------ - // Compute Distance 2 Degree Stats - // ------------------------------------------ - std::cout << "Compute Distance-2 Degree " << std::endl; - - Kokkos::Timer timer; - - double total_time = - kh.get_distance2_graph_coloring_handle()->get_overall_coloring_time(); - double total_time_color_greedy = kh.get_distance2_graph_coloring_handle() - ->get_overall_coloring_time_phase1(); - double total_time_find_conflicts = kh.get_distance2_graph_coloring_handle() - ->get_overall_coloring_time_phase2(); - double total_time_resolve_conflicts = - kh.get_distance2_graph_coloring_handle() - ->get_overall_coloring_time_phase3(); - double total_time_matrix_squared = kh.get_distance2_graph_coloring_handle() - ->get_overall_coloring_time_phase4(); - double total_time_matrix_squared_d1 = - kh.get_distance2_graph_coloring_handle() - ->get_overall_coloring_time_phase5(); - - double avg_time = total_time / (double)repeat; - double avg_time_color_greedy = total_time_color_greedy / (double)repeat; - double avg_time_find_conflicts = total_time_find_conflicts / (double)repeat; - double avg_time_resolve_conflicts = - total_time_resolve_conflicts / (double)repeat; - double avg_colors = total_colors / (double)repeat; - double avg_phases = total_phases / (double)repeat; - double avg_time_matrix_squared = total_time_matrix_squared / (double)repeat; - double avg_time_matrix_squared_d1 = - total_time_matrix_squared_d1 / (double)repeat; - - std::string short_mtx_file(params.mtx_file); - short_mtx_file = - short_mtx_file.substr(short_mtx_file.find_last_of("/\\") + 1); - - int result; - char hostname[100]; - char username[100]; - - result = gethostname(hostname, 100); - if (result) { - perror("gethostname"); - } - - result = getlogin_r(username, 100); - if (result) { - perror("getlogin_r"); - } + if (verbose) { + // ------------------------------------------ + // Compute Distance 2 Degree Stats + // ------------------------------------------ + std::cout << "Compute Distance-2 Degree " << std::endl; + + Kokkos::Timer timer; + + double total_time = + kh.get_distance2_graph_coloring_handle()->get_overall_coloring_time(); + double total_time_color_greedy = kh.get_distance2_graph_coloring_handle() + ->get_overall_coloring_time_phase1(); + double total_time_find_conflicts = kh.get_distance2_graph_coloring_handle() + ->get_overall_coloring_time_phase2(); + double total_time_resolve_conflicts = + kh.get_distance2_graph_coloring_handle() + ->get_overall_coloring_time_phase3(); + double total_time_matrix_squared = kh.get_distance2_graph_coloring_handle() + ->get_overall_coloring_time_phase4(); + double total_time_matrix_squared_d1 = + kh.get_distance2_graph_coloring_handle() + ->get_overall_coloring_time_phase5(); + + double avg_time = total_time / (double)repeat; + double avg_time_color_greedy = total_time_color_greedy / (double)repeat; + double avg_time_find_conflicts = total_time_find_conflicts / (double)repeat; + double avg_time_resolve_conflicts = + total_time_resolve_conflicts / (double)repeat; + double avg_colors = total_colors / (double)repeat; + double avg_phases = total_phases / (double)repeat; + double avg_time_matrix_squared = total_time_matrix_squared / (double)repeat; + double avg_time_matrix_squared_d1 = + total_time_matrix_squared_d1 / (double)repeat; + + std::string short_mtx_file(params.mtx_file); + short_mtx_file = + short_mtx_file.substr(short_mtx_file.find_last_of("/\\") + 1); + + int result; + char hostname[100]; + char username[100]; + + result = gethostname(hostname, 100); + if (result) { + perror("gethostname"); + } - std::string all_results_valid_str = "PASSED"; - if (!all_results_valid) all_results_valid_str = "FAILED"; - - std::string currentDateTimeStr = getCurrentDateTimeStr(); - - std::cout << "Summary" << std::endl - << "-------" << std::endl - << " Date/Time : " << currentDateTimeStr << std::endl - << " KExecSName : " << Kokkos::DefaultExecutionSpace::name() - << std::endl - << " Filename : " << short_mtx_file << std::endl - << " Num Verts : " << crsGraph.numRows() << std::endl - << " Num Edges : " << crsGraph.entries.extent(0) - << std::endl - << " Concurrency : " - << Kokkos::DefaultExecutionSpace::concurrency() << std::endl - << " Algorithm : " << label_algorithm << std::endl - << "Overall Time/Stats" << std::endl - << " Total Time : " << total_time << std::endl - << " Avg Time : " << avg_time << std::endl - << "VB Distance[1|2] Stats " << std::endl - << " Avg Time CG : " << avg_time_color_greedy << std::endl - << " Avg Time FC : " << avg_time_find_conflicts << std::endl - << " Avg Time RC : " << avg_time_resolve_conflicts - << std::endl - << "Matrix-Squared + D1 Stats" << std::endl - << " Avg Time to M^2: " << avg_time_matrix_squared << std::endl - << " Avg Time to D1 : " << avg_time_matrix_squared_d1 - << std::endl - << "Coloring Stats" << std::endl - << " Avg colors : " << avg_colors << std::endl - << " Avg Phases : " << avg_phases << std::endl - << " Validation : " << all_results_valid_str << std::endl - << std::endl; - - std::cout << "CSVTIMEHDR" - << "," - << "Filename" - << "," - << "Host" - << "," - << "DateTime" - << "," - << "Num Rows" - << "," - << "Num Edges" - << "," - << "Execution Space" - << "," - << "Algorithm" - << "," - << "Concurrency" - << "," - << "Repetitions" - << "," - << "Total Time" - << "," - << "Total Time to M^2" - << "," - << "Total Time D1(M^2)" - << "," - << "Total Time CG" - << "," - << "Total Time FC" - << "," - << "Total Time RC" - << "," - << "Avg Colors" - << "," - << "Avg Num Phases" - << "," - << "Validation" << std::endl; - - std::cout << "CSVTIMEDATA" - << "," << short_mtx_file << "," << hostname << "," - << currentDateTimeStr << "," << crsGraph.numRows() << "," - << crsGraph.entries.extent(0) << "," - << Kokkos::DefaultExecutionSpace::name() << "," << label_algorithm - << "," << Kokkos::DefaultExecutionSpace::concurrency() << "," - << repeat << "," << total_time << "," << total_time_matrix_squared - << "," << total_time_matrix_squared_d1 << "," - << total_time_color_greedy << "," << total_time_find_conflicts - << "," << total_time_resolve_conflicts - - << "," << avg_colors << "," << avg_phases << "," - << all_results_valid_str << std::endl; - - std::cout << "CSVHISTHDR" - << "," - << "Filename" - << "," - << "Host" - << "," - << "DateTime" - << "," - << "Num Rows" - << "," - << "Num Edges" - << "," - << "Execution Space" - << "," - << "Algorithm" - << "," - << "Concurrency" - << "," - << "Histogram: 1 .. N" << std::endl; - - std::cout << "CSVHISTDATA" - << "," << short_mtx_file << "," << hostname << "," - << currentDateTimeStr << "," << crsGraph.numRows() << "," - << crsGraph.entries.extent(0) << "," - << Kokkos::DefaultExecutionSpace::name() << "," << label_algorithm - << "," << Kokkos::DefaultExecutionSpace::concurrency() << ","; - KokkosGraph::Impl::graph_print_distance2_color_histogram(&kh, true); - std::cout << std::endl; + result = getlogin_r(username, 100); + if (result) { + perror("getlogin_r"); + } - // Kokkos::print_configuration(std::cout); + std::string all_results_valid_str = "PASSED"; + if (!all_results_valid) all_results_valid_str = "FAILED"; + + std::string currentDateTimeStr = getCurrentDateTimeStr(); + + std::cout << "Summary" << std::endl + << "-------" << std::endl + << " Date/Time : " << currentDateTimeStr << std::endl + << " KExecSName : " + << Kokkos::DefaultExecutionSpace::name() << std::endl + << " Filename : " << short_mtx_file << std::endl + << " Num Verts : " << crsGraph.numRows() << std::endl + << " Num Edges : " << crsGraph.entries.extent(0) + << std::endl + << " Concurrency : " + << Kokkos::DefaultExecutionSpace::concurrency() << std::endl + << " Algorithm : " << label_algorithm << std::endl + << "Overall Time/Stats" << std::endl + << " Total Time : " << total_time << std::endl + << " Avg Time : " << avg_time << std::endl + << "VB Distance[1|2] Stats " << std::endl + << " Avg Time CG : " << avg_time_color_greedy << std::endl + << " Avg Time FC : " << avg_time_find_conflicts << std::endl + << " Avg Time RC : " << avg_time_resolve_conflicts + << std::endl + << "Matrix-Squared + D1 Stats" << std::endl + << " Avg Time to M^2: " << avg_time_matrix_squared << std::endl + << " Avg Time to D1 : " << avg_time_matrix_squared_d1 + << std::endl + << "Coloring Stats" << std::endl + << " Avg colors : " << avg_colors << std::endl + << " Avg Phases : " << avg_phases << std::endl + << " Validation : " << all_results_valid_str << std::endl + << std::endl; + + std::cout << "CSVTIMEHDR" + << "," + << "Filename" + << "," + << "Host" + << "," + << "DateTime" + << "," + << "Num Rows" + << "," + << "Num Edges" + << "," + << "Execution Space" + << "," + << "Algorithm" + << "," + << "Concurrency" + << "," + << "Repetitions" + << "," + << "Total Time" + << "," + << "Total Time to M^2" + << "," + << "Total Time D1(M^2)" + << "," + << "Total Time CG" + << "," + << "Total Time FC" + << "," + << "Total Time RC" + << "," + << "Avg Colors" + << "," + << "Avg Num Phases" + << "," + << "Validation" << std::endl; + + std::cout << "CSVTIMEDATA" + << "," << short_mtx_file << "," << hostname << "," + << currentDateTimeStr << "," << crsGraph.numRows() << "," + << crsGraph.entries.extent(0) << "," + << Kokkos::DefaultExecutionSpace::name() << "," << label_algorithm + << "," << Kokkos::DefaultExecutionSpace::concurrency() << "," + << repeat << "," << total_time << "," << total_time_matrix_squared + << "," << total_time_matrix_squared_d1 << "," + << total_time_color_greedy << "," << total_time_find_conflicts + << "," << total_time_resolve_conflicts + + << "," << avg_colors << "," << avg_phases << "," + << all_results_valid_str << std::endl; + + std::cout << "CSVHISTHDR" + << "," + << "Filename" + << "," + << "Host" + << "," + << "DateTime" + << "," + << "Num Rows" + << "," + << "Num Edges" + << "," + << "Execution Space" + << "," + << "Algorithm" + << "," + << "Concurrency" + << "," + << "Histogram: 1 .. N" << std::endl; + + std::cout << "CSVHISTDATA" + << "," << short_mtx_file << "," << hostname << "," + << currentDateTimeStr << "," << crsGraph.numRows() << "," + << crsGraph.entries.extent(0) << "," + << Kokkos::DefaultExecutionSpace::name() << "," << label_algorithm + << "," << Kokkos::DefaultExecutionSpace::concurrency() << ","; + KokkosGraph::Impl::graph_print_distance2_color_histogram(&kh, true); + std::cout << std::endl; + } } template Date: Wed, 10 Aug 2022 22:30:34 +0200 Subject: [PATCH 029/226] fix ambigous overloads --- unit_test/blas/Test_Blas2_serial_gemv.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index a9e0cb8fa6..ade2f5f385 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -65,8 +65,9 @@ struct SerialGEMVOp { // fill regular view with random values template -void fill_random_view(ViewType A, PoolType &rand_pool, - const ScalarType max_val = 10.0) { +typename std::enable_if::value>::type +fill_random_view(ViewType A, PoolType &rand_pool, + const ScalarType max_val = 10.0) { Kokkos::fill_random(A, rand_pool, max_val); Kokkos::fence(); } From 660c8bac3a1aa77bdcaa97a573c8c6f932a6c660 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Wed, 10 Aug 2022 22:31:22 +0200 Subject: [PATCH 030/226] fix embarassing typo --- src/batched/dense/KokkosBatched_Vector.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/batched/dense/KokkosBatched_Vector.hpp b/src/batched/dense/KokkosBatched_Vector.hpp index 9851e9d4b8..5562953ca9 100644 --- a/src/batched/dense/KokkosBatched_Vector.hpp +++ b/src/batched/dense/KokkosBatched_Vector.hpp @@ -263,7 +263,7 @@ class ArithTraits, l>> { using KAT = ArithTraits; val_type v{}; for (int i = 0; i < l; ++i) { - v[i] = KAT::abs(v[i]); + v[i] = KAT::abs(val[i]); } return v; } @@ -307,7 +307,7 @@ class ArithTraits< using KAT = ArithTraits; val_type v{}; for (int i = 0; i < l; ++i) { - v[i] = KAT::conj(v[i]); + v[i] = KAT::conj(val[i]); } return v; } @@ -316,7 +316,7 @@ class ArithTraits< using KAT = ArithTraits; val_type v{}; for (int i = 0; i < l; ++i) { - v[i] = KAT::abs(v[i]); + v[i] = KAT::abs(val[i]); } return v; } From 67af6a97502a6acde0a34fd8f9e0fbae5801d10b Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Thu, 11 Aug 2022 12:08:27 -0600 Subject: [PATCH 031/226] Serial GEMV: fixing some small issues for Intel 18 build. --- unit_test/blas/Test_Blas2_serial_gemv.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index ade2f5f385..e97f8e71a9 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -86,7 +86,7 @@ void fill_random_view( using device_type = typename decltype(x)::device_type; Kokkos::View rnd("random_vals", x.extent(0) * VecLength); - Kokkos::fill_random(rnd, rand_pool, static_cast(10)); + Kokkos::fill_random(rnd, rand_pool, max_val); using size_type = decltype(x.extent(0)); for (size_type i = 0; i < x.extent(0); ++i) { x(i).loadUnaligned(&rnd(i * VecLength)); @@ -107,7 +107,7 @@ static void fill_random_view( using device_type = typename decltype(A)::device_type; Kokkos::View rnd( "random_vals", A.extent(0) * A.extent(1) * VecLength); - Kokkos::fill_random(rnd, rand_pool, static_cast(10)); + Kokkos::fill_random(rnd, rand_pool, max_val); using size_type = decltype(A.extent(0)); size_type idx = 0; for (size_type i = 0; i < A.extent(0); ++i) { From 90c0d404debc659fb46b6624ab95f1b4b3181b41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Mon, 6 Jun 2022 15:12:54 +0200 Subject: [PATCH 032/226] Add team-vector GEMV to KokkosBlas --- src/blas/KokkosBlas2_teamvector_gemv.hpp | 89 ++++++ unit_test/blas/Test_Blas.hpp | 1 + unit_test/blas/Test_Blas2_teamvector_gemv.hpp | 259 ++++++++++++++++++ 3 files changed, 349 insertions(+) create mode 100644 src/blas/KokkosBlas2_teamvector_gemv.hpp create mode 100644 unit_test/blas/Test_Blas2_teamvector_gemv.hpp diff --git a/src/blas/KokkosBlas2_teamvector_gemv.hpp b/src/blas/KokkosBlas2_teamvector_gemv.hpp new file mode 100644 index 0000000000..67af3b151c --- /dev/null +++ b/src/blas/KokkosBlas2_teamvector_gemv.hpp @@ -0,0 +1,89 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS2_TEAMVECTOR_GEMV_HPP_ +#define KOKKOSBLAS2_TEAMVECTOR_GEMV_HPP_ + +#include "KokkosBatched_Gemv_Decl.hpp" +#include + +namespace KokkosBlas { +namespace Experimental { + +template +void KOKKOS_INLINE_FUNCTION team_vector_gemv( + const TeamType& team, const char trans, + const typename MatrixType::non_const_value_type& alpha, const MatrixType& A, + const XVector& x, const typename YVector::non_const_value_type& beta, + const YVector& y) { + static_assert( + std::is_same::value && + std::is_same::value, + "TeamVector GEMV requires A,x and y to have same scalar type"); + + const auto run = [&](auto mode) { + using algo = KokkosBatched::Algo::Gemv::Default; + using impl = KokkosBatched::TeamVectorGemv; + impl::invoke(team, alpha, A, x, beta, y); + }; + + if (trans == 'N' || trans == 'n') { + return run(KokkosBatched::Trans::NoTranspose()); + } else if (trans == 'T' || trans == 't') { + return run(KokkosBatched::Trans::Transpose()); + // } else if (trans == 'C' || trans == 'c') { // NOT implemented + // return run(KokkosBatched::Trans::ConjTranspose()); + } else { // conjugate[no-transpose] not supported ? + std::ostringstream os; + os << "Matrix mode not supported: " << trans << std::endl; + KokkosKernels::Impl::throw_runtime_exception(os.str()); + } +} + +} // namespace Experimental +} // namespace KokkosBlas + +#endif diff --git a/unit_test/blas/Test_Blas.hpp b/unit_test/blas/Test_Blas.hpp index 3b4f4355c3..4bcbf957c4 100644 --- a/unit_test/blas/Test_Blas.hpp +++ b/unit_test/blas/Test_Blas.hpp @@ -46,6 +46,7 @@ #include "Test_Blas2_serial_gemv.hpp" // Team Blas 2 #include "Test_Blas2_team_gemv.hpp" +#include "Test_Blas2_teamvector_gemv.hpp" // Blas 3 #include "Test_Blas3_gemm.hpp" diff --git a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp new file mode 100644 index 0000000000..19f32014a1 --- /dev/null +++ b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp @@ -0,0 +1,259 @@ +// Note: Luc Berger-Vergiat 04/14/21 +// This tests uses KOKKOS_LAMBDA so we need +// to make sure that these are enabled in +// the CUDA backend before including this test. +#if !defined(TEST_CUDA_BLAS_CPP) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) + +#include +#include +#include +#include +#include +#include + +namespace Test { +template +void impl_test_teamvector_gemv(const char *mode, int N, int M) { + typedef Kokkos::TeamPolicy team_policy; + typedef typename team_policy::member_type team_member; + + // Launch K teams of the maximum number of threads per team + int K = 4; + const team_policy policy(K, Kokkos::AUTO); + const int team_data_size = (N % K == 0) ? (N / K) : (N / K + 1); + + typedef typename ViewTypeA::value_type ScalarA; + typedef typename ViewTypeX::value_type ScalarX; + typedef typename ViewTypeY::value_type ScalarY; + + typedef multivector_layout_adapter vfA_type; + typedef Kokkos::View< + ScalarX * [2], + typename std::conditional::value, + Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, + Device> + BaseTypeX; + typedef Kokkos::View< + ScalarY * [2], + typename std::conditional::value, + Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, + Device> + BaseTypeY; + + ScalarA a = 3; + ScalarX b = 5; + double eps = std::is_same::value ? 2 * 1e-5 : 1e-7; + + typename vfA_type::BaseType b_A("A", N, M); + BaseTypeX b_x("X", M); + BaseTypeY b_y("Y", N); + BaseTypeY b_org_y("Org_Y", N); + + ViewTypeA A = vfA_type::view(b_A); + ViewTypeX x = Kokkos::subview(b_x, Kokkos::ALL(), 0); + ViewTypeY y = Kokkos::subview(b_y, Kokkos::ALL(), 0); + typename ViewTypeX::const_type c_x = x; + typename ViewTypeA::const_type c_A = A; + + typedef multivector_layout_adapter h_vfA_type; + + typename h_vfA_type::BaseType h_b_A = Kokkos::create_mirror_view(b_A); + typename BaseTypeX::HostMirror h_b_x = Kokkos::create_mirror_view(b_x); + typename BaseTypeY::HostMirror h_b_y = Kokkos::create_mirror_view(b_y); + + typename ViewTypeA::HostMirror h_A = h_vfA_type::view(h_b_A); + typename ViewTypeX::HostMirror h_x = Kokkos::subview(h_b_x, Kokkos::ALL(), 0); + typename ViewTypeY::HostMirror h_y = Kokkos::subview(h_b_y, Kokkos::ALL(), 0); + + Kokkos::Random_XorShift64_Pool rand_pool( + 13718); + + Kokkos::fill_random(b_x, rand_pool, ScalarX(10)); + Kokkos::fill_random(b_y, rand_pool, ScalarY(10)); + Kokkos::fill_random(b_A, rand_pool, ScalarA(10)); + + Kokkos::deep_copy(b_org_y, b_y); + + Kokkos::deep_copy(h_b_x, b_x); + Kokkos::deep_copy(h_b_y, b_y); + Kokkos::deep_copy(h_b_A, b_A); + + ScalarY expected_result = 0; + if (mode[0] != 'N' && mode[0] != 'T' && mode[0] != 'C') { + throw std::runtime_error("incorrect matrix mode letter !"); + } + typedef Kokkos::Details::ArithTraits ATV; + for (int i = 0; i < N; i++) { + ScalarY y_i = ScalarY(); + for (int j = 0; j < M; j++) { + const auto a_val = mode[0] == 'C' + ? ATV::conj(h_A(j, i)) + : (mode[0] == 'T' ? h_A(j, i) : h_A(i, j)); + y_i += a_val * h_x(j); + } + expected_result += (b * h_y(i) + a * y_i) * (b * h_y(i) + a * y_i); + } + + char trans = mode[0]; + + const auto team_rows = [&](auto teamId) { + return Kokkos::make_pair( + teamId * team_data_size, + (teamId < K - 1) ? (teamId + 1) * team_data_size : N); + }; + + // KokkosBlas::gemv(mode,a,A,x,b,y); + Kokkos::parallel_for( + "KokkosBlas::Test::TeamVectorGemm", policy, + KOKKOS_LAMBDA(const team_member &teamMember) { + const int teamId = teamMember.league_rank(); + KokkosBlas::Experimental::team_vector_gemv( + teamMember, trans, a, + Kokkos::subview(A, team_rows(teamId), Kokkos::ALL()), x, b, + Kokkos::subview(y, team_rows(teamId))); + }); + + ScalarY nonconst_nonconst_result = KokkosBlas::dot(y, y); + EXPECT_NEAR_KK(nonconst_nonconst_result, expected_result, + eps * expected_result); + + Kokkos::deep_copy(b_y, b_org_y); + + // KokkosBlas::gemv(mode,a,A,c_x,b,y); + Kokkos::parallel_for( + "KokkosBlas::Test::TeamVectorGemm", policy, + KOKKOS_LAMBDA(const team_member &teamMember) { + const int teamId = teamMember.league_rank(); + KokkosBlas::Experimental::team_vector_gemv( + teamMember, trans, a, + Kokkos::subview(A, team_rows(teamId), Kokkos::ALL()), c_x, b, + Kokkos::subview(y, team_rows(teamId))); + }); + + ScalarY const_nonconst_result = KokkosBlas::dot(y, y); + EXPECT_NEAR_KK(const_nonconst_result, expected_result, eps * expected_result); + + Kokkos::deep_copy(b_y, b_org_y); + + // KokkosBlas::gemv(mode,a,c_A,c_x,b,y); + Kokkos::parallel_for( + "KokkosBlas::Test::TeamVectorGemm", policy, + KOKKOS_LAMBDA(const team_member &teamMember) { + const int teamId = teamMember.league_rank(); + KokkosBlas::Experimental::team_vector_gemv( + teamMember, trans, a, + Kokkos::subview(c_A, team_rows(teamId), Kokkos::ALL()), c_x, b, + Kokkos::subview(y, team_rows(teamId))); + }); + + ScalarY const_const_result = KokkosBlas::dot(y, y); + EXPECT_NEAR_KK(const_const_result, expected_result, eps * expected_result); +} +} // namespace Test + +template +int test_teamvector_gemv(const char *mode) { +#if defined(KOKKOSKERNELS_INST_LAYOUTLEFT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ll; + typedef Kokkos::View view_type_b_ll; + typedef Kokkos::View view_type_c_ll; + Test::impl_test_teamvector_gemv(mode, 0, 1024); + Test::impl_test_teamvector_gemv(mode, 13, 1024); + Test::impl_test_teamvector_gemv(mode, 124, 124); + // Test::impl_test_teamvector_gemv(mode,132231,1024); +#endif + +#if defined(KOKKOSKERNELS_INST_LAYOUTRIGHT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_lr; + typedef Kokkos::View view_type_b_lr; + typedef Kokkos::View view_type_c_lr; + Test::impl_test_teamvector_gemv(mode, 0, 1024); + Test::impl_test_teamvector_gemv(mode, 13, 1024); + Test::impl_test_teamvector_gemv(mode, 124, 124); + // Test::impl_test_teamvector_gemv(mode,132231,1024); +#endif + +#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + typedef Kokkos::View view_type_b_ls; + typedef Kokkos::View view_type_c_ls; + Test::impl_test_teamvector_gemv(mode, 0, 1024); + Test::impl_test_teamvector_gemv(mode, 13, 1024); + Test::impl_test_teamvector_gemv(mode, 124, 124); + // Test::impl_test_teamvector_gemv(mode,132231,1024); +#endif + +#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + Test::impl_test_teamvector_gemv(mode, 124, 124); + Test::impl_test_teamvector_gemv(mode, 124, 124); +#endif + + return 1; +} + +#if defined(KOKKOSKERNELS_INST_FLOAT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, teamvector_gemv_float) { + test_teamvector_gemv("N"); +} +#endif + +#if defined(KOKKOSKERNELS_INST_DOUBLE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, teamvector_gemv_double) { + test_teamvector_gemv("N"); +} +#endif + +#if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, teamvector_gemv_complex_double) { + test_teamvector_gemv, Kokkos::complex, + Kokkos::complex, TestExecSpace>("N"); +} +#endif + +#if defined(KOKKOSKERNELS_INST_INT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, teamvector_gemv_int) { + test_teamvector_gemv("N"); +} +#endif + +#if 0 // mixed scalar types not allowed in batched impl +#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) +TEST_F(TestCategory, teamvector_gemv_double_int) { + test_teamvector_gemv("N"); +} +#endif +#endif + +#endif // Check for lambda availability on CUDA backend From ca48c86f119b3775f6c6a82958e5eba4fd5fac4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Wed, 8 Jun 2022 23:13:42 +0200 Subject: [PATCH 033/226] fix: avoid lambda inside kernels --- src/blas/KokkosBlas2_teamvector_gemv.hpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/blas/KokkosBlas2_teamvector_gemv.hpp b/src/blas/KokkosBlas2_teamvector_gemv.hpp index 67af3b151c..99315a5be9 100644 --- a/src/blas/KokkosBlas2_teamvector_gemv.hpp +++ b/src/blas/KokkosBlas2_teamvector_gemv.hpp @@ -63,20 +63,17 @@ void KOKKOS_INLINE_FUNCTION team_vector_gemv( std::is_same::value, "TeamVector GEMV requires A,x and y to have same scalar type"); - - const auto run = [&](auto mode) { - using algo = KokkosBatched::Algo::Gemv::Default; - using impl = KokkosBatched::TeamVectorGemv; - impl::invoke(team, alpha, A, x, beta, y); - }; + using algo = KokkosBatched::Algo::Gemv::Default; if (trans == 'N' || trans == 'n') { - return run(KokkosBatched::Trans::NoTranspose()); + using mode = KokkosBatched::Trans::NoTranspose; + using tv_gemv_impl = KokkosBatched::TeamVectorGemv; + tv_gemv_impl::invoke(team, alpha, A, x, beta, y); } else if (trans == 'T' || trans == 't') { - return run(KokkosBatched::Trans::Transpose()); - // } else if (trans == 'C' || trans == 'c') { // NOT implemented - // return run(KokkosBatched::Trans::ConjTranspose()); - } else { // conjugate[no-transpose] not supported ? + using mode = KokkosBatched::Trans::Transpose; + using tv_gemv_impl = KokkosBatched::TeamVectorGemv; + tv_gemv_impl::invoke(team, alpha, A, x, beta, y); + } else { // NOT supported: Conjugate, ConjTranspose std::ostringstream os; os << "Matrix mode not supported: " << trans << std::endl; KokkosKernels::Impl::throw_runtime_exception(os.str()); From 8c354d428817195775ae4365111e77e103fa610c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Fri, 12 Aug 2022 12:41:33 +0200 Subject: [PATCH 034/226] Move TeamGemv and TeamVector from Batched to Blas: - move implementations - refactor/merge unit tests - support different sclar types for A, x and y - support arbitrary types for alpha and beta --- .../KokkosBatched_Gemv_TeamVector_Impl.hpp | 58 +-- ...KokkosBatched_Gemv_TeamVector_Internal.hpp | 61 +-- .../impl/KokkosBatched_Gemv_Team_Impl.hpp | 58 +-- .../impl/KokkosBatched_Gemv_Team_Internal.hpp | 94 +---- ...osBatched_SolveUTV_TeamVector_Internal.hpp | 8 +- .../impl/KokkosBatched_Trsv_Team_Internal.hpp | 6 +- src/blas/KokkosBlas2_team_gemv.hpp | 59 ++- src/blas/KokkosBlas2_teamvector_gemv.hpp | 86 ---- src/blas/impl/KokkosBlas2_team_gemv_impl.hpp | 212 ++++++++++ src/blas/impl/KokkosBlas2_team_gemv_spec.hpp | 184 +++++++++ .../impl/KokkosSparse_spmv_bsrmatrix_impl.hpp | 33 +- .../impl/KokkosSparse_sptrsv_solve_impl.hpp | 75 ++-- .../batched/dense/Test_Batched_Dense.hpp | 3 - .../batched/dense/Test_Batched_TeamGemv.hpp | 155 ------- .../dense/Test_Batched_TeamGemv_Complex.hpp | 45 -- .../dense/Test_Batched_TeamGemv_Real.hpp | 30 -- .../dense/Test_Batched_TeamVectorQR.hpp | 8 +- ...atched_TeamVectorQR_WithColumnPivoting.hpp | 8 +- .../dense/Test_Batched_TeamVectorSolveUTV.hpp | 8 +- .../dense/Test_Batched_TeamVectorUTV.hpp | 26 +- unit_test/blas/Test_Blas.hpp | 1 + unit_test/blas/Test_Blas2_gemv_util.hpp | 337 +++++++++++++++ unit_test/blas/Test_Blas2_serial_gemv.hpp | 390 +++--------------- unit_test/blas/Test_Blas2_team_gemv.hpp | 295 ++----------- unit_test/blas/Test_Blas2_teamvector_gemv.hpp | 284 +++---------- 25 files changed, 1086 insertions(+), 1438 deletions(-) delete mode 100644 src/blas/KokkosBlas2_teamvector_gemv.hpp create mode 100644 src/blas/impl/KokkosBlas2_team_gemv_impl.hpp delete mode 100644 unit_test/batched/dense/Test_Batched_TeamGemv.hpp delete mode 100644 unit_test/batched/dense/Test_Batched_TeamGemv_Complex.hpp delete mode 100644 unit_test/batched/dense/Test_Batched_TeamGemv_Real.hpp create mode 100644 unit_test/blas/Test_Blas2_gemv_util.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp b/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp index 0cad2c6c80..45eb828aa8 100644 --- a/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp +++ b/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp @@ -30,17 +30,15 @@ struct TeamVectorGemv { KOKKOS_INLINE_FUNCTION static int invoke( const MemberType &member, const ScalarType alpha, const AViewType &A, const xViewType &x, const ScalarType beta, const yViewType &y) { - if (AViewType::Rank == 2) - return TeamVectorGemvInternal::invoke( - member, A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), - A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); - else - return TeamVectorGemvInternal::template invoke< - MemberType, ScalarType, typename AViewType::array_layout, - typename AViewType::non_const_value_type>( - member, A.extent(0), A.extent(1), A.extent(2), alpha, A.data(), - A.stride_0(), A.stride_1(), A.stride_2(), x.data(), x.stride_0(), - x.stride_1(), beta, y.data(), y.stride_0(), y.stride_1()); + static_assert(AViewType::Rank == 3, + "Batched TeamVectorGemv requires rank-3 A matrix (use " + "KokkosBlas::TeamVectorGemv for regular rank-2 matrix)"); + return TeamVectorGemvInternal::template invoke< + MemberType, ScalarType, typename AViewType::array_layout, + typename AViewType::non_const_value_type>( + member, A.extent(0), A.extent(1), A.extent(2), alpha, A.data(), + A.stride_0(), A.stride_1(), A.stride_2(), x.data(), x.stride_0(), + x.stride_1(), beta, y.data(), y.stride_0(), y.stride_1()); } }; @@ -51,9 +49,12 @@ struct TeamVectorGemv { KOKKOS_INLINE_FUNCTION static int invoke( const MemberType &member, const ScalarType alpha, const AViewType &A, const xViewType &x, const ScalarType beta, const yViewType &y) { - return TeamVectorGemvInternal::invoke( - member, A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), - A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); + static_assert(AViewType::Rank == 3, + "Batched TeamVectorGemv requires rank-3 A matrix (use " + "KokkosBlas::TeamVectorGemv for regular rank-2 matrix)"); + Kokkos::abort( + "KokkosBatched::TeamVectorGemv for rank-3 matrix " + "is NOT implemented"); } }; @@ -68,17 +69,15 @@ struct TeamVectorGemv { KOKKOS_INLINE_FUNCTION static int invoke( const MemberType &member, const ScalarType alpha, const AViewType &A, const xViewType &x, const ScalarType beta, const yViewType &y) { - if (AViewType::Rank == 2) - return TeamVectorGemvInternal::invoke( - member, A.extent(1), A.extent(0), alpha, A.data(), A.stride_1(), - A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); - else - return TeamVectorGemvInternal::template invoke< - MemberType, ScalarType, typename AViewType::array_layout, - typename AViewType::non_const_value_type>( - member, A.extent(0), A.extent(2), A.extent(1), alpha, A.data(), - A.stride_0(), A.stride_2(), A.stride_1(), x.data(), x.stride_0(), - x.stride_1(), beta, y.data(), y.stride_0(), y.stride_1()); + static_assert(AViewType::Rank == 3, + "Batched TeamVectorGemv requires rank-3 A matrix (use " + "KokkosBlas::TeamVectorGemv for regular rank-2 matrix)"); + return TeamVectorGemvInternal::template invoke< + MemberType, ScalarType, typename AViewType::array_layout, + typename AViewType::non_const_value_type>( + member, A.extent(0), A.extent(2), A.extent(1), alpha, A.data(), + A.stride_0(), A.stride_2(), A.stride_1(), x.data(), x.stride_0(), + x.stride_1(), beta, y.data(), y.stride_0(), y.stride_1()); } }; @@ -89,9 +88,12 @@ struct TeamVectorGemv { KOKKOS_INLINE_FUNCTION static int invoke( const MemberType &member, const ScalarType alpha, const AViewType &A, const xViewType &x, const ScalarType beta, const yViewType &y) { - return TeamVectorGemvInternal::invoke( - member, A.extent(1), A.extent(0), alpha, A.data(), A.stride_1(), - A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); + static_assert(AViewType::Rank == 3, + "Batched TeamVectorGemv requires rank-3 A matrix (use " + "KokkosBlas::TeamVectorGemv for regular rank-2 matrix)"); + Kokkos::abort( + "KokkosBatched::TeamVectorGemv for rank-3 matrix " + "is NOT implemented"); } }; diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp b/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp index 4f47212b94..f3b71196f1 100644 --- a/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp +++ b/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp @@ -4,10 +4,9 @@ /// \author Kyungjoo Kim (kyukim@sandia.gov) #include "KokkosBatched_Util.hpp" - -#include "KokkosBlas1_set_impl.hpp" -#include "KokkosBlas1_team_scal_impl.hpp" -#include "KokkosBlas2_serial_gemv_inner_multiple_dot.hpp" +// #include "KokkosBlas1_set_impl.hpp" +// #include "KokkosBlas1_team_scal_impl.hpp" +// #include "KokkosBlas2_serial_gemv_inner_multiple_dot.hpp" namespace KokkosBatched { @@ -16,17 +15,6 @@ namespace KokkosBatched { /// ==================== template struct TeamVectorGemvInternal { - template - KOKKOS_INLINE_FUNCTION static int invoke( - const MemberType & /*member*/, const int /*m*/, const int /*n*/, - const ScalarType /*alpha*/, const ValueType *KOKKOS_RESTRICT /*A*/, - const int /*as0*/, const int /*as1*/, - const ValueType *KOKKOS_RESTRICT /*x*/, const int /*xs0*/, - const ScalarType /*beta*/, - /**/ ValueType *KOKKOS_RESTRICT /*y*/, const int /*ys0*/) { - assert(false && "Error: encounter dummy impl"); - return 0; - } template KOKKOS_INLINE_FUNCTION static int invoke( @@ -43,45 +31,6 @@ struct TeamVectorGemvInternal { } }; -template <> -template -KOKKOS_INLINE_FUNCTION int -TeamVectorGemvInternal::invoke( - const MemberType &member, const int m, const int n, const ScalarType alpha, - const ValueType *KOKKOS_RESTRICT A, const int as0, const int as1, - const ValueType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, - /**/ ValueType *KOKKOS_RESTRICT y, const int ys0) { - const ScalarType one(1.0), zero(0.0); - - // y = beta y + alpha A x - // y (m), A(m x n), B(n) - - if (beta == zero) - KokkosBlas::Impl::TeamVectorSetInternal::invoke(member, m, zero, y, ys0); - else if (beta != one) - KokkosBlas::Impl::TeamVectorScaleInternal::invoke(member, m, beta, y, ys0); - - if (alpha != zero) { - if (m <= 0 || n <= 0) return 0; - - if (beta != one) member.team_barrier(); - - Kokkos::parallel_for(Kokkos::TeamThreadRange(member, m), [&](const int &i) { - ValueType t(0); - const ValueType *KOKKOS_RESTRICT tA = (A + i * as0); - Kokkos::parallel_reduce( - Kokkos::ThreadVectorRange(member, n), - [&](const int &j, ValueType &update) { - update += tA[j * as1] * x[j * xs0]; - }, - t); - Kokkos::single(Kokkos::PerThread(member), - [&]() { y[i * ys0] += alpha * t; }); - }); - } - return 0; -} - template <> template @@ -98,6 +47,8 @@ TeamVectorGemvInternal::invoke( // y_l (m), A_l(m x n), B_l(n) if (beta == zero) + // TODO: KokkosBlas::Impl::TeamVectorSetInternal::invoke(member, m, zero, y, + // ys0); Kokkos::parallel_for(Kokkos::TeamVectorRange(member, 0, N * m), [&](const int &iTemp) { int iRow, iMatrix; @@ -105,6 +56,8 @@ TeamVectorGemvInternal::invoke( Y[ys0 * iMatrix + ys1 * iRow] = zero; }); else if (beta != one) + // TODO: KokkosBlas::Impl::TeamVectorScaleInternal::invoke(member, m, beta, + // y, ys0); Kokkos::parallel_for(Kokkos::TeamVectorRange(member, 0, N * m), [&](const int &iTemp) { int iRow, iMatrix; diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp b/src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp index d32232524a..6220ab2916 100644 --- a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp +++ b/src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp @@ -30,17 +30,15 @@ struct TeamGemv { KOKKOS_INLINE_FUNCTION static int invoke( const MemberType &member, const ScalarType alpha, const AViewType &A, const xViewType &x, const ScalarType beta, const yViewType &y) { - if (AViewType::Rank == 2) - return TeamGemvInternal::invoke( - member, A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), - A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); - else - return TeamGemvInternal::template invoke< - MemberType, ScalarType, typename AViewType::array_layout, - typename AViewType::non_const_value_type>( - member, A.extent(0), A.extent(1), A.extent(2), alpha, A.data(), - A.stride_0(), A.stride_1(), A.stride_2(), x.data(), x.stride_0(), - x.stride_1(), beta, y.data(), y.stride_0(), y.stride_1()); + static_assert(AViewType::Rank == 3, + "Batched TeamGemv requires rank-3 A matrix (use " + "KokkosBlas::TeamGemv for regular rank-2 matrix)"); + return TeamGemvInternal::template invoke< + MemberType, ScalarType, typename AViewType::array_layout, + typename AViewType::non_const_value_type>( + member, A.extent(0), A.extent(1), A.extent(2), alpha, A.data(), + A.stride_0(), A.stride_1(), A.stride_2(), x.data(), x.stride_0(), + x.stride_1(), beta, y.data(), y.stride_0(), y.stride_1()); } }; @@ -51,9 +49,12 @@ struct TeamGemv { KOKKOS_INLINE_FUNCTION static int invoke( const MemberType &member, const ScalarType alpha, const AViewType &A, const xViewType &x, const ScalarType beta, const yViewType &y) { - return TeamGemvInternal::invoke( - member, A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), - A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); + static_assert(AViewType::Rank == 3, + "Batched TeamGemv requires rank-3 A matrix (use " + "KokkosBlas::TeamGemv for regular rank-2 matrix)"); + Kokkos::abort( + "KokkosBlas::TeamGemv for rank-3 matrix is NOT " + "implemented"); } }; @@ -68,17 +69,15 @@ struct TeamGemv { KOKKOS_INLINE_FUNCTION static int invoke( const MemberType &member, const ScalarType alpha, const AViewType &A, const xViewType &x, const ScalarType beta, const yViewType &y) { - if (AViewType::Rank == 2) - return TeamGemvInternal::invoke( - member, A.extent(1), A.extent(0), alpha, A.data(), A.stride_1(), - A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); - else - return TeamGemvInternal::template invoke< - MemberType, ScalarType, typename AViewType::array_layout, - typename AViewType::non_const_value_type>( - member, A.extent(0), A.extent(2), A.extent(1), alpha, A.data(), - A.stride_0(), A.stride_2(), A.stride_1(), x.data(), x.stride_0(), - x.stride_1(), beta, y.data(), y.stride_0(), y.stride_1()); + static_assert(AViewType::Rank == 3, + "Batched TeamGemv requires rank-3 A matrix (use " + "KokkosBlas::TeamGemv for regular rank-2 matrix)"); + return TeamGemvInternal::template invoke< + MemberType, ScalarType, typename AViewType::array_layout, + typename AViewType::non_const_value_type>( + member, A.extent(0), A.extent(2), A.extent(1), alpha, A.data(), + A.stride_0(), A.stride_2(), A.stride_1(), x.data(), x.stride_0(), + x.stride_1(), beta, y.data(), y.stride_0(), y.stride_1()); } }; @@ -89,9 +88,12 @@ struct TeamGemv { KOKKOS_INLINE_FUNCTION static int invoke( const MemberType &member, const ScalarType alpha, const AViewType &A, const xViewType &x, const ScalarType beta, const yViewType &y) { - return TeamGemvInternal::invoke( - member, A.extent(1), A.extent(0), alpha, A.data(), A.stride_1(), - A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); + static_assert(AViewType::Rank == 3, + "Batched TeamGemv requires rank-3 A matrix (use " + "KokkosBlas::TeamGemv for regular rank-2 matrix)"); + Kokkos::abort( + "KokkosBlas::TeamGemv for rank-3 matrix is NOT " + "implemented"); } }; diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp b/src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp index c48a2cd866..5ee01069d5 100644 --- a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp +++ b/src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp @@ -5,9 +5,9 @@ #include "KokkosBatched_Util.hpp" -#include "KokkosBlas1_set_impl.hpp" -#include "KokkosBlas1_team_scal_impl.hpp" -#include "KokkosBlas2_serial_gemv_inner_multiple_dot.hpp" +// #include "KokkosBlas1_set_impl.hpp" +// #include "KokkosBlas1_team_scal_impl.hpp" +// #include "KokkosBlas2_serial_gemv_inner_multiple_dot.hpp" namespace KokkosBatched { @@ -16,14 +16,6 @@ namespace KokkosBatched { /// ==================== template struct TeamGemvInternal { - template - KOKKOS_INLINE_FUNCTION static int invoke( - const MemberType &member, const int m, const int n, - const ScalarType alpha, const ValueType *KOKKOS_RESTRICT A, const int as0, - const int as1, const ValueType *KOKKOS_RESTRICT x, const int xs0, - const ScalarType beta, - /**/ ValueType *KOKKOS_RESTRICT y, const int ys0); - template KOKKOS_INLINE_FUNCTION static int invoke( @@ -34,86 +26,6 @@ struct TeamGemvInternal { /**/ ValueType *KOKKOS_RESTRICT y, const int ys0, const int ys1); }; -template <> -template -KOKKOS_INLINE_FUNCTION int TeamGemvInternal::invoke( - const MemberType &member, const int m, const int n, const ScalarType alpha, - const ValueType *KOKKOS_RESTRICT A, const int as0, const int as1, - const ValueType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, - /**/ ValueType *KOKKOS_RESTRICT y, const int ys0) { - const ScalarType one(1.0), zero(0.0); - - // y = beta y + alpha A x - // y (m), A(m x n), B(n) - - if (beta == zero) - KokkosBlas::Impl::TeamSetInternal::invoke(member, m, zero, y, ys0); - else if (beta != one) - KokkosBlas::Impl::TeamScaleInternal::invoke(member, m, beta, y, ys0); - - if (alpha != zero) { - if (m <= 0 || n <= 0) return 0; - - if (beta != one) member.team_barrier(); - - Kokkos::parallel_for(Kokkos::TeamThreadRange(member, 0, m), - [&](const int &i) { - ValueType t(0); - const ValueType *KOKKOS_RESTRICT tA = (A + i * as0); -#if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) -#pragma unroll -#endif - for (int j = 0; j < n; ++j) - t += tA[j * as1] * x[j * xs0]; - y[i * ys0] += alpha * t; - }); - } - return 0; -} - -template <> -template -KOKKOS_INLINE_FUNCTION int TeamGemvInternal::invoke( - const MemberType &member, const int m, const int n, const ScalarType alpha, - const ValueType *KOKKOS_RESTRICT A, const int as0, const int as1, - const ValueType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, - /**/ ValueType *KOKKOS_RESTRICT y, const int ys0) { - const ScalarType one(1.0), zero(0.0); - - // y = beta y + alpha A x - // y (m), A(m x n), B(n) - - constexpr int mbAlgo = Algo::Gemv::Blocked::mb(); - - if (beta == zero) - KokkosBlas::Impl::TeamSetInternal::invoke(member, m, zero, y, ys0); - else if (beta != one) - KokkosBlas::Impl::TeamScaleInternal::invoke(member, m, beta, y, ys0); - - if (alpha != zero) { - if (m <= 0 || n <= 0) return 0; - - if (beta != one) member.team_barrier(); - - KokkosBlas::Impl::InnerMultipleDotProduct inner(as0, as1, xs0, ys0); - const int tsize = member.team_size(); - const int mb_a = m / tsize + (m % tsize > 0), mb_b = mbAlgo; - // Made this non-const in order to WORKAROUND issue #349 - int mb = mb_a < mb_b ? mb_a : mb_b, mp = m % mb; - - Kokkos::parallel_for(Kokkos::TeamThreadRange(member, (m / mb) + (mp > 0)), - [&](const int &ii) { - const int i = ii * mb; - inner.serial_invoke( - alpha, A + i * as0, x, - (i + mb) > m ? (m - i) : mb, n, y + i * ys0); - }); - member.team_barrier(); - } - - return 0; -} - template <> template diff --git a/src/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Internal.hpp b/src/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Internal.hpp index fa0d4c2a31..88d0bfe561 100644 --- a/src/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Internal.hpp +++ b/src/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Internal.hpp @@ -5,7 +5,7 @@ #include "KokkosBatched_Util.hpp" -#include "KokkosBatched_Gemv_TeamVector_Internal.hpp" +#include "KokkosBlas2_team_gemv_impl.hpp" #include "KokkosBatched_Trsv_TeamVector_Internal.hpp" #include "KokkosBatched_Gemm_TeamVector_Internal.hpp" @@ -34,7 +34,7 @@ struct TeamVectorSolveUTV_Internal { if (matrix_rank < m) { /// w = U^T b - TeamVectorGemvInternal::invoke( + KokkosBlas::Impl::TeamVectorGemvInternal::invoke( member, matrix_rank, m, one, U, us1, us0, b, bs0, zero, w, ws0); /// w = T^{-1} w @@ -42,10 +42,10 @@ struct TeamVectorSolveUTV_Internal { member, false, matrix_rank, one, T, ts0, ts1, w, ws0); /// x = V^T w - TeamVectorGemvInternal::invoke( + KokkosBlas::Impl::TeamVectorGemvInternal::invoke( member, m, matrix_rank, one, V, vs1, vs0, w, ws0, zero, x, xs0); } else { - TeamVectorGemvInternal::invoke( + KokkosBlas::Impl::TeamVectorGemvInternal::invoke( member, matrix_rank, m, one, U, us1, us0, b, bs0, zero, x, xs0); TeamVectorTrsvInternalUpper::invoke( diff --git a/src/batched/dense/impl/KokkosBatched_Trsv_Team_Internal.hpp b/src/batched/dense/impl/KokkosBatched_Trsv_Team_Internal.hpp index aaf72e9876..5583b58537 100644 --- a/src/batched/dense/impl/KokkosBatched_Trsv_Team_Internal.hpp +++ b/src/batched/dense/impl/KokkosBatched_Trsv_Team_Internal.hpp @@ -8,7 +8,7 @@ #include "KokkosBlas1_set_impl.hpp" #include "KokkosBlas1_team_scal_impl.hpp" #include "KokkosBatched_InnerTrsm_Serial_Impl.hpp" -#include "KokkosBatched_Gemv_Team_Internal.hpp" +#include "KokkosBlas2_team_gemv_spec.hpp" namespace KokkosBatched { @@ -119,7 +119,7 @@ KOKKOS_INLINE_FUNCTION int TeamTrsvInternalLower::invoke( // gemv update member.team_barrier(); - TeamGemvInternal::invoke( + KokkosBlas::Impl::TeamGemvInternal::invoke( member, m - p - pb, pb, minus_one, Ap + pb * as0, as0, as1, bp, 1, one, bp + pb * bs0, bs0); } @@ -227,7 +227,7 @@ KOKKOS_INLINE_FUNCTION int TeamTrsvInternalUpper::invoke( // gemv update member.team_barrier(); - TeamGemvInternal::invoke( + KokkosBlas::Impl::TeamGemvInternal::invoke( member, p, pb, minus_one, Ap - p * as0, as0, as1, bp, 1, one, b, bs0); } } diff --git a/src/blas/KokkosBlas2_team_gemv.hpp b/src/blas/KokkosBlas2_team_gemv.hpp index 874f8919df..e886de4f99 100644 --- a/src/blas/KokkosBlas2_team_gemv.hpp +++ b/src/blas/KokkosBlas2_team_gemv.hpp @@ -50,21 +50,62 @@ namespace KokkosBlas { namespace Experimental { -template +template +void KOKKOS_INLINE_FUNCTION gemv(const TeamType& team, const char trans, + const ScalarType& alpha, const MatrixType& A, + const XVector& x, const ScalarType& beta, + const YVector& y) { + if (trans == 'N' || trans == 'n') + TeamGemv::invoke(team, alpha, A, x, + beta, y); + if (trans == 'T' || trans == 't') + TeamGemv::invoke(team, alpha, A, x, + beta, y); + if (trans == 'C' || trans == 'c') + TeamGemv::invoke(team, alpha, A, x, + beta, y); +} + +// default AlgoTag +template void KOKKOS_INLINE_FUNCTION gemv(const TeamType& team, const char trans, - const typename MatrixType::non_const_value_type& alpha, + const ScalarType& alpha, const MatrixType& A, const XVector& x, - const typename YVector::non_const_value_type& beta, const YVector& y) { - if (trans == 'N' || trans == 'n') - return Impl::TeamGEMV::team_gemv( + const ScalarType& beta, const YVector& y) { + gemv(team, trans, alpha, A, x, beta, y); +} + +template +void KOKKOS_INLINE_FUNCTION +team_vector_gemv(const TeamType& team, const char trans, + const ScalarType& alpha, const MatrixType& A, const XVector& x, + const ScalarType& beta, const YVector& y) { + if (trans == 'N' || trans == 'n') { + KokkosBlas::TeamVectorGemv::invoke( team, alpha, A, x, beta, y); - if (trans == 'T' || trans == 't') - return Impl::TeamGEMV::team_gemv( + } else if (trans == 'T' || trans == 't') { + KokkosBlas::TeamVectorGemv::invoke( team, alpha, A, x, beta, y); - if (trans == 'C' || trans == 'c') - return Impl::TeamGEMV::team_gemv( + } else if (trans == 'C' || trans == 'c') { + KokkosBlas::TeamVectorGemv::invoke( team, alpha, A, x, beta, y); + } else { + Kokkos::abort("Matrix mode not supported"); + } +} + +// default AlgoTag +template +void KOKKOS_INLINE_FUNCTION team_vector_gemv( + const TeamType& team, const char trans, + const ScalarType& alpha, const MatrixType& A, + const XVector& x, const ScalarType& beta, + const YVector& y) { + team_vector_gemv(team, trans, alpha, A, x, + beta, y); } } // namespace Experimental diff --git a/src/blas/KokkosBlas2_teamvector_gemv.hpp b/src/blas/KokkosBlas2_teamvector_gemv.hpp deleted file mode 100644 index 99315a5be9..0000000000 --- a/src/blas/KokkosBlas2_teamvector_gemv.hpp +++ /dev/null @@ -1,86 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOSBLAS2_TEAMVECTOR_GEMV_HPP_ -#define KOKKOSBLAS2_TEAMVECTOR_GEMV_HPP_ - -#include "KokkosBatched_Gemv_Decl.hpp" -#include - -namespace KokkosBlas { -namespace Experimental { - -template -void KOKKOS_INLINE_FUNCTION team_vector_gemv( - const TeamType& team, const char trans, - const typename MatrixType::non_const_value_type& alpha, const MatrixType& A, - const XVector& x, const typename YVector::non_const_value_type& beta, - const YVector& y) { - static_assert( - std::is_same::value && - std::is_same::value, - "TeamVector GEMV requires A,x and y to have same scalar type"); - using algo = KokkosBatched::Algo::Gemv::Default; - - if (trans == 'N' || trans == 'n') { - using mode = KokkosBatched::Trans::NoTranspose; - using tv_gemv_impl = KokkosBatched::TeamVectorGemv; - tv_gemv_impl::invoke(team, alpha, A, x, beta, y); - } else if (trans == 'T' || trans == 't') { - using mode = KokkosBatched::Trans::Transpose; - using tv_gemv_impl = KokkosBatched::TeamVectorGemv; - tv_gemv_impl::invoke(team, alpha, A, x, beta, y); - } else { // NOT supported: Conjugate, ConjTranspose - std::ostringstream os; - os << "Matrix mode not supported: " << trans << std::endl; - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } -} - -} // namespace Experimental -} // namespace KokkosBlas - -#endif diff --git a/src/blas/impl/KokkosBlas2_team_gemv_impl.hpp b/src/blas/impl/KokkosBlas2_team_gemv_impl.hpp new file mode 100644 index 0000000000..fd73e27443 --- /dev/null +++ b/src/blas/impl/KokkosBlas2_team_gemv_impl.hpp @@ -0,0 +1,212 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS2_TEAM_GEMV_IMPL_HPP_ +#define KOKKOSBLAS2_TEAM_GEMV_IMPL_HPP_ + +#include "KokkosBlas1_set_impl.hpp" +#include "KokkosBlas1_team_scal_impl.hpp" +#include "KokkosBlas2_serial_gemv_inner_multiple_dot.hpp" + +namespace KokkosBlas { +namespace Impl { + +template +struct TeamGemvInternal { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType &member, const int m, const int n, + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const int as0, const int as1, const ValueXType *KOKKOS_RESTRICT x, + const int xs0, const ScalarType beta, + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0); +}; + +template +struct TeamVectorGemvInternal { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType &member, const int m, const int n, + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const int as0, const int as1, const ValueXType *KOKKOS_RESTRICT x, + const int xs0, const ScalarType beta, + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0); +}; + +/// +/// Team Internal Impl +/// ==================== + +template <> +template +KOKKOS_INLINE_FUNCTION int TeamGemvInternal::invoke( + const MemberType &member, const int m, const int n, const ScalarType alpha, + const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, + const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0) { + const ScalarType one(1.0), zero(0.0); + + // y = beta y + alpha A x + // y (m), A(m x n), B(n) + + if (beta == zero) + KokkosBlas::Impl::TeamSetInternal::invoke(member, m, zero, y, ys0); + else if (beta != one) + KokkosBlas::Impl::TeamScaleInternal::invoke(member, m, beta, y, ys0); + + if (alpha != zero) { + if (m <= 0 || n <= 0) return 0; + + if (beta != one) member.team_barrier(); + + Kokkos::parallel_for(Kokkos::TeamThreadRange(member, 0, m), + [&](const int &i) { + ValueYType t(0); + const ValueAType *KOKKOS_RESTRICT tA = (A + i * as0); +#if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) +#pragma unroll +#endif + for (int j = 0; j < n; ++j) + t += tA[j * as1] * x[j * xs0]; + y[i * ys0] += alpha * t; + }); + } + return 0; +} + +template <> +template +KOKKOS_INLINE_FUNCTION int TeamGemvInternal::invoke( + const MemberType &member, const int m, const int n, const ScalarType alpha, + const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, + const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0) { + const ScalarType one(1.0), zero(0.0); + + // y = beta y + alpha A x + // y (m), A(m x n), B(n) + + constexpr int mbAlgo = Algo::Gemv::Blocked::mb(); + + if (beta == zero) + KokkosBlas::Impl::TeamSetInternal::invoke(member, m, zero, y, ys0); + else if (beta != one) + KokkosBlas::Impl::TeamScaleInternal::invoke(member, m, beta, y, ys0); + + if (alpha != zero) { + if (m <= 0 || n <= 0) return 0; + + if (beta != one) member.team_barrier(); + + KokkosBlas::Impl::InnerMultipleDotProduct inner(as0, as1, xs0, ys0); + const int tsize = member.team_size(); + const int mb_a = m / tsize + (m % tsize > 0), mb_b = mbAlgo; + // Made this non-const in order to WORKAROUND issue #349 + int mb = mb_a < mb_b ? mb_a : mb_b, mp = m % mb; + + Kokkos::parallel_for(Kokkos::TeamThreadRange(member, (m / mb) + (mp > 0)), + [&](const int &ii) { + const int i = ii * mb; + inner.serial_invoke( + alpha, A + i * as0, x, + (i + mb) > m ? (m - i) : mb, n, y + i * ys0); + }); + member.team_barrier(); + } + + return 0; +} + +/// +/// TeamVector Internal Impl +/// ==================== + +template <> +template +KOKKOS_INLINE_FUNCTION int +TeamVectorGemvInternal::invoke( + const MemberType &member, const int m, const int n, const ScalarType alpha, + const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, + const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0) { + const ScalarType one(1.0), zero(0.0); + + // y = beta y + alpha A x + // y (m), A(m x n), B(n) + + if (beta == zero) + KokkosBlas::Impl::TeamVectorSetInternal::invoke(member, m, zero, y, ys0); + else if (beta != one) + KokkosBlas::Impl::TeamVectorScaleInternal::invoke(member, m, beta, y, ys0); + + if (alpha != zero) { + if (m <= 0 || n <= 0) return 0; + + if (beta != one) member.team_barrier(); + + Kokkos::parallel_for(Kokkos::TeamThreadRange(member, m), [&](const int &i) { + ValueYType t(0); + const ValueAType *KOKKOS_RESTRICT tA = (A + i * as0); + Kokkos::parallel_reduce( + Kokkos::ThreadVectorRange(member, n), + [&](const int &j, ValueYType &update) { + update += tA[j * as1] * x[j * xs0]; + }, + t); + Kokkos::single(Kokkos::PerThread(member), + [&]() { y[i * ys0] += alpha * t; }); + }); + } + return 0; +} + +} // namespace Impl +} // namespace KokkosBlas + +#endif diff --git a/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp b/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp index b6cc7bf125..dee023d721 100644 --- a/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp +++ b/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp @@ -49,6 +49,7 @@ #include #include #include +#include namespace KokkosBlas { namespace Experimental { @@ -162,6 +163,189 @@ struct TeamGEMV { }; } // namespace Impl } // namespace Experimental + +template +struct TeamGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke(const MemberType& /*member*/, + const ScalarType /*alpha*/, + const AViewType& /*A*/, + const xViewType& /*x*/, + const ScalarType /*beta*/, + const yViewType& /*y*/); +}; + +template +struct TeamVectorGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke(const MemberType& /*member*/, + const ScalarType /*alpha*/, + const AViewType& /*A*/, + const xViewType& /*x*/, + const ScalarType /*beta*/, + const yViewType& /*y*/); +}; + +/// +/// NT +/// + +template +struct TeamGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const ScalarType alpha, const AViewType& A, + const xViewType& x, const ScalarType beta, const yViewType& y) { + static_assert(AViewType::Rank == 2, + "KokkosBlas::TeamGemv requires rank-2 A matrix"); + return Impl::TeamGemvInternal::template invoke< + MemberType, ScalarType, typename AViewType::non_const_value_type>( + member, A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), + A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); + } +}; + +template +struct TeamGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const ScalarType alpha, const AViewType& A, + const xViewType& x, const ScalarType beta, const yViewType& y) { + static_assert(AViewType::Rank == 2, + "KokkosBlas::TeamGemv requires rank-2 A matrix"); + return Impl::TeamGemvInternal::template invoke< + MemberType, ScalarType, typename AViewType::non_const_value_type>( + member, A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), + A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); + } +}; + +/// +/// T +/// + +template +struct TeamGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const ScalarType alpha, const AViewType& A, + const xViewType& x, const ScalarType beta, const yViewType& y) { + static_assert(AViewType::Rank == 2, + "BLAS TeamGemv requires rank-2 A matrix"); + return Impl::TeamGemvInternal::template invoke< + MemberType, ScalarType, typename AViewType::non_const_value_type>( + member, A.extent(1), A.extent(0), alpha, A.data(), A.stride_1(), + A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); + } +}; + +template +struct TeamGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const ScalarType alpha, const AViewType& A, + const xViewType& x, const ScalarType beta, const yViewType& y) { + static_assert(AViewType::Rank == 2, + "BLAS TeamGemv requires rank-2 A matrix"); + return Impl::TeamGemvInternal::template invoke< + MemberType, ScalarType, typename AViewType::non_const_value_type>( + member, A.extent(1), A.extent(0), alpha, A.data(), A.stride_1(), + A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); + } +}; + +/// +/// CT +/// + +template +struct TeamGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const ScalarType alpha, const AViewType& A, + const xViewType& x, const ScalarType beta, const yViewType& y) { + static_assert(AViewType::Rank == 2, + "BLAS TeamGemv requires rank-2 A matrix"); + Kokkos::abort("TODO: implement conjugate-transpose !"); + } +}; + +template +struct TeamGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const ScalarType alpha, const AViewType& A, + const xViewType& x, const ScalarType beta, const yViewType& y) { + static_assert(AViewType::Rank == 2, + "BLAS TeamGemv requires rank-2 A matrix"); + Kokkos::abort("TODO: implement conjugate-transpose !"); + } +}; + +/// +/// NT +/// + +template +struct TeamVectorGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const ScalarType alpha, const AViewType& A, + const xViewType& x, const ScalarType beta, const yViewType& y) { + static_assert(AViewType::Rank == 2, + "Batched TeamVectorGemv requires rank-2 A matrix"); + return Impl::TeamVectorGemvInternal::invoke( + member, A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), + A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); + } +}; + +/// +/// T +/// + +template +struct TeamVectorGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const ScalarType alpha, const AViewType& A, + const xViewType& x, const ScalarType beta, const yViewType& y) { + static_assert(AViewType::Rank == 2, + "Batched TeamVectorGemv requires rank-2 A matrix"); + return Impl::TeamVectorGemvInternal::invoke( + member, A.extent(1), A.extent(0), alpha, A.data(), A.stride_1(), + A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); + } +}; + +/// +/// CT +/// + +template +struct TeamVectorGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const ScalarType alpha, const AViewType& A, + const xViewType& x, const ScalarType beta, const yViewType& y) { + static_assert(AViewType::Rank == 2, + "Batched TeamVectorGemv requires rank-2 A matrix"); + Kokkos::abort("TODO: implement conjugate-transpose !"); + } +}; + } // namespace KokkosBlas #endif diff --git a/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp b/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp index 959982ca30..9796c12352 100644 --- a/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp +++ b/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp @@ -672,13 +672,13 @@ struct BSR_GEMV_Functor { const auto X_ptBeg = X_blkCol * block_dim; const auto X_cur = Kokkos::subview( m_x, ::Kokkos::make_pair(X_ptBeg, X_ptBeg + block_dim)); - KokkosBatched::TeamVectorGemvInternal< - KokkosBatched::Algo::Gemv::Unblocked>:: - invoke(dev, block_dim, block_dim, alpha, A_cur.data(), - static_cast(A_cur.stride_0()), - static_cast(A_cur.stride_1()), X_cur.data(), - static_cast(X_cur.stride_0()), val_one, Y_cur.data(), - static_cast(Y_cur.stride_0())); + KokkosBlas::Impl:: + TeamVectorGemvInternal::invoke( + dev, block_dim, block_dim, alpha, A_cur.data(), + static_cast(A_cur.stride_0()), + static_cast(A_cur.stride_1()), X_cur.data(), + static_cast(X_cur.stride_0()), val_one, Y_cur.data(), + static_cast(Y_cur.stride_0())); } } } @@ -976,19 +976,12 @@ struct BSR_GEMV_Transpose_Functor { for (ordinal_type jBlock = 0; jBlock < count; ++jBlock) { const auto A_cur = myRow.block(jBlock); // - KokkosBatched::TeamVectorGemvInternal< - KokkosBatched::Algo::Gemv::Unblocked>::invoke(dev, block_dim, - block_dim, alpha, - A_cur.data(), - static_cast( - A_cur.stride_1()), - static_cast( - A_cur.stride_0()), - X_cur.data(), - static_cast( - X_cur.stride_0()), - val_zero, shared_y, - 1); + KokkosBlas::Impl:: + TeamVectorGemvInternal::invoke( + dev, block_dim, block_dim, alpha, A_cur.data(), + static_cast(A_cur.stride_1()), + static_cast(A_cur.stride_0()), X_cur.data(), + static_cast(X_cur.stride_0()), val_zero, shared_y, 1); // dev.team_barrier(); // diff --git a/src/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp b/src/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp index 49b9d69b24..0e3ed0235a 100644 --- a/src/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp +++ b/src/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp @@ -57,15 +57,12 @@ #ifdef KOKKOSKERNELS_ENABLE_SUPERNODAL_SPTRSV // Enable supernodal sptrsv -#include "KokkosBlas2_gemv.hpp" -#include "KokkosBlas2_team_gemv.hpp" #include "KokkosBlas3_trsm.hpp" #include "KokkosSparse_spmv.hpp" #include "KokkosBatched_Util.hpp" -#include "KokkosBatched_Gemv_Decl.hpp" -#include "KokkosBatched_Gemv_Team_Impl.hpp" +#include "KokkosBlas2_team_gemv_spec.hpp" #include "KokkosBatched_Trsm_Team_Impl.hpp" #endif @@ -897,10 +894,12 @@ struct LowerTriSupernodalFunctor { workoffset, workoffset + nsrow)); // needed for gemv instead of trmv/trsv auto Ljj = Kokkos::subview(viewL, range_type(0, nsrow), Kokkos::ALL()); - KokkosBatched::TeamGemv< - member_type, KokkosBatched::Trans::NoTranspose, - KokkosBatched::Algo::Gemv::Unblocked>::invoke(team, one, Ljj, Xj, - zero, Y); + KokkosBlas::TeamGemv::invoke(team, + one, + Ljj, Xj, + zero, + Y); team.team_barrier(); for (int ii = team_rank; ii < nscol; ii += team_size) { Xj(ii) = Y(ii); @@ -923,10 +922,13 @@ struct LowerTriSupernodalFunctor { team.team_barrier(); // calling team-level "Unblocked" gemv on small-size diagonal in // KokkosBatched - KokkosBatched::TeamGemv< - member_type, KokkosBatched::Trans::NoTranspose, - KokkosBatched::Algo::Gemv::Unblocked>::invoke(team, one, Ljj, Y, - zero, Xj); + KokkosBlas::TeamGemv::invoke(team, + one, + Ljj, + Y, + zero, + Xj); } else { // NOTE: we currently supports only default_layout = LayoutLeft Kokkos::View::invoke(team, one, Lij, Xj, - zero, Z); + KokkosBlas::TeamGemv::invoke(team, + one, + Lij, Xj, + zero, + Z); team.team_barrier(); } } @@ -1103,8 +1107,8 @@ struct UpperTriSupernodalFunctor { auto Uij = Kokkos::subview(viewU, range_type(nscol, nsrow), Kokkos::ALL()); using Uij_type = decltype(Uij); - KokkosBatched::TeamGemv:: + KokkosBlas::TeamGemv:: template invoke( team, -one, Uij, Z, one, Xj); team.team_barrier(); @@ -1128,8 +1132,8 @@ struct UpperTriSupernodalFunctor { team.team_barrier(); // caling team-level kernel in KokkosBatched on a small-size diagonal - KokkosBatched::TeamGemv:: + KokkosBlas::TeamGemv:: template invoke( team, one, Ujj, Y, zero, Xj); } else { @@ -1267,10 +1271,12 @@ struct UpperTriTranSupernodalFunctor { workoffset, workoffset + nsrow)); // needed with gemv for update&scatter auto Uij = Kokkos::subview(viewU, range_type(0, nsrow), Kokkos::ALL()); - KokkosBatched::TeamGemv< - member_type, KokkosBatched::Trans::NoTranspose, - KokkosBatched::Algo::Gemv::Unblocked>::invoke(team, one, Uij, Xj, - zero, Y); + KokkosBlas::TeamGemv::invoke(team, + one, + Uij, Xj, + zero, + Y); team.team_barrier(); // copy the diagonal back to output for (int ii = team_rank; ii < nscol; ii += team_size) { @@ -1289,10 +1295,13 @@ struct UpperTriTranSupernodalFunctor { Y(ii) = Xj(ii); } team.team_barrier(); - KokkosBatched::TeamGemv< - member_type, KokkosBatched::Trans::NoTranspose, - KokkosBatched::Algo::Gemv::Unblocked>::invoke(team, one, Ujj, Y, - zero, Xj); + KokkosBlas::TeamGemv::invoke(team, + one, + Ujj, + Y, + zero, + Xj); } else { // NOTE: we currently supports only default_layout = LayoutLeft Kokkos::View::invoke(team, one, Uij, Xj, - zero, Z); + KokkosBlas::TeamGemv::invoke(team, + one, + Uij, Xj, + zero, + Z); team.team_barrier(); } diff --git a/unit_test/batched/dense/Test_Batched_Dense.hpp b/unit_test/batched/dense/Test_Batched_Dense.hpp index a771bcada1..a154e9e14f 100644 --- a/unit_test/batched/dense/Test_Batched_Dense.hpp +++ b/unit_test/batched/dense/Test_Batched_Dense.hpp @@ -45,9 +45,6 @@ #include "Test_Batched_TeamGemm.hpp" #include "Test_Batched_TeamGemm_Real.hpp" #include "Test_Batched_TeamGemm_Complex.hpp" -#include "Test_Batched_TeamGemv.hpp" -#include "Test_Batched_TeamGemv_Real.hpp" -#include "Test_Batched_TeamGemv_Complex.hpp" #include "Test_Batched_TeamGesv.hpp" #include "Test_Batched_TeamGesv_Real.hpp" #include "Test_Batched_TeamInverseLU.hpp" diff --git a/unit_test/batched/dense/Test_Batched_TeamGemv.hpp b/unit_test/batched/dense/Test_Batched_TeamGemv.hpp deleted file mode 100644 index 103aa069ce..0000000000 --- a/unit_test/batched/dense/Test_Batched_TeamGemv.hpp +++ /dev/null @@ -1,155 +0,0 @@ -/// \author Kyungjoo Kim (kyukim@sandia.gov) - -#include "gtest/gtest.h" -#include "Kokkos_Core.hpp" -#include "Kokkos_Random.hpp" - -//#include "KokkosBatched_Vector.hpp" - -#include "KokkosBatched_Gemv_Decl.hpp" - -#include "KokkosKernels_TestUtils.hpp" - -using namespace KokkosBatched; - -namespace Test { -namespace TeamGemv { - -template -struct ParamTag { - typedef T trans; -}; - -template -struct Functor_TestBatchedTeamGemv { - ViewType _a, _b, _c; - - ScalarType _alpha, _beta; - - KOKKOS_INLINE_FUNCTION - Functor_TestBatchedTeamGemv(const ScalarType alpha, const ViewType &a, - const ViewType &b, const ScalarType beta, - const ViewType &c) - : _a(a), _b(b), _c(c), _alpha(alpha), _beta(beta) {} - - template - KOKKOS_INLINE_FUNCTION void operator()(const ParamTagType &, - const MemberType &member) const { - const int k = member.league_rank(); - - auto aa = Kokkos::subview(_a, k, Kokkos::ALL(), Kokkos::ALL()); - auto bb = Kokkos::subview(_b, k, Kokkos::ALL(), 0); - auto cc = Kokkos::subview(_c, k, Kokkos::ALL(), 0); - - KokkosBatched::TeamGemv::invoke(member, _alpha, aa, bb, _beta, - cc); - } - - inline void run() { - typedef typename ViewType::value_type value_type; - std::string name_region("KokkosBatched::Test::SerialGemm"); - const std::string name_value_type = Test::value_type_name(); - std::string name = name_region + name_value_type; - Kokkos::Profiling::pushRegion(name.c_str()); - const int league_size = _c.extent(0); - Kokkos::TeamPolicy policy(league_size, - Kokkos::AUTO); - Kokkos::parallel_for(name.c_str(), policy, *this); - Kokkos::Profiling::popRegion(); - } -}; - -template -void impl_test_batched_gemv(const int N, const int BlkSize) { - typedef typename ViewType::value_type value_type; - typedef Kokkos::Details::ArithTraits ats; - - /// randomized input testing views - ScalarType alpha = 1.5, beta = 3.0; - - ViewType a0("a0", N, BlkSize, BlkSize), a1("a1", N, BlkSize, BlkSize), - b0("b0", N, BlkSize, 1), b1("b1", N, BlkSize, 1), c0("c0", N, BlkSize, 1), - c1("c1", N, BlkSize, 1); - - Kokkos::Random_XorShift64_Pool random( - 13718); - Kokkos::fill_random(a0, random, value_type(1.0)); - Kokkos::fill_random(b0, random, value_type(1.0)); - Kokkos::fill_random(c0, random, value_type(1.0)); - - Kokkos::fence(); - - Kokkos::deep_copy(a1, a0); - Kokkos::deep_copy(b1, b0); - Kokkos::deep_copy(c1, c0); - - /// test body - Functor_TestBatchedTeamGemv(alpha, a0, b0, beta, c0) - .run(); - Functor_TestBatchedTeamGemv(alpha, a1, b1, beta, c1) - .run(); - - Kokkos::fence(); - - /// for comparison send it to host - typename ViewType::HostMirror c0_host = Kokkos::create_mirror_view(c0); - typename ViewType::HostMirror c1_host = Kokkos::create_mirror_view(c1); - - Kokkos::deep_copy(c0_host, c0); - Kokkos::deep_copy(c1_host, c1); - - /// check c0 = c1 ; this eps is about 10^-14 - typedef typename ats::mag_type mag_type; - mag_type sum(1), diff(0); - const mag_type eps = 1.0e3 * ats::epsilon(); - - for (int k = 0; k < N; ++k) - for (int i = 0; i < BlkSize; ++i) - for (int j = 0; j < 1; ++j) { - sum += ats::abs(c0_host(k, i, j)); - diff += ats::abs(c0_host(k, i, j) - c1_host(k, i, j)); - } - EXPECT_NEAR_KK(diff / sum, 0, eps); -} -} // namespace TeamGemv -} // namespace Test - -template -int test_batched_team_gemv() { -#if defined(KOKKOSKERNELS_INST_LAYOUTLEFT) - { - typedef Kokkos::View - ViewType; - Test::TeamGemv::impl_test_batched_gemv(0, 10); - for (int i = 0; i < 10; ++i) { - // printf("Testing: LayoutLeft, Blksize %d\n", i); - Test::TeamGemv::impl_test_batched_gemv(1024, - i); - } - } -#endif -#if defined(KOKKOSKERNELS_INST_LAYOUTRIGHT) - { - typedef Kokkos::View - ViewType; - Test::TeamGemv::impl_test_batched_gemv(0, 10); - for (int i = 0; i < 10; ++i) { - // printf("Testing: LayoutRight, Blksize %d\n", i); - Test::TeamGemv::impl_test_batched_gemv(1024, - i); - } - } -#endif - - return 0; -} diff --git a/unit_test/batched/dense/Test_Batched_TeamGemv_Complex.hpp b/unit_test/batched/dense/Test_Batched_TeamGemv_Complex.hpp deleted file mode 100644 index 3ffc34db23..0000000000 --- a/unit_test/batched/dense/Test_Batched_TeamGemv_Complex.hpp +++ /dev/null @@ -1,45 +0,0 @@ -#if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) - -/// dcomplex, dcomplex - -TEST_F(TestCategory, batched_scalar_team_gemv_nt_dcomplex_dcomplex) { - typedef ::Test::TeamGemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_team_gemv, - Kokkos::complex, param_tag_type, - algo_tag_type>(); -} -TEST_F(TestCategory, batched_scalar_team_gemv_t_dcomplex_dcomplex) { - typedef ::Test::TeamGemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_team_gemv, - Kokkos::complex, param_tag_type, - algo_tag_type>(); -} -// TEST_F( TestCategory, batched_scalar_team_gemv_ct_dcomplex_dcomplex ) { -// typedef ::Test::TeamGemv::ParamTag param_tag_type; -// typedef Algo::Gemv::Blocked algo_tag_type; -// test_batched_team_gemv,Kokkos::complex,param_tag_type,algo_tag_type>(); -// } - -/// dcomplex, double - -TEST_F(TestCategory, batched_scalar_team_gemv_nt_dcomplex_double) { - typedef ::Test::TeamGemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_team_gemv, double, - param_tag_type, algo_tag_type>(); -} -TEST_F(TestCategory, batched_scalar_team_gemv_t_dcomplex_double) { - typedef ::Test::TeamGemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_team_gemv, double, - param_tag_type, algo_tag_type>(); -} -// TEST_F( TestCategory, batched_scalar_team_gemv_ct_dcomplex_double ) { -// typedef ::Test::TeamGemv::ParamTag param_tag_type; -// typedef Algo::Gemv::Blocked algo_tag_type; -// test_batched_team_gemv,double,param_tag_type,algo_tag_type>(); -// } - -#endif diff --git a/unit_test/batched/dense/Test_Batched_TeamGemv_Real.hpp b/unit_test/batched/dense/Test_Batched_TeamGemv_Real.hpp deleted file mode 100644 index 2c4db11b2d..0000000000 --- a/unit_test/batched/dense/Test_Batched_TeamGemv_Real.hpp +++ /dev/null @@ -1,30 +0,0 @@ - -#if defined(KOKKOSKERNELS_INST_FLOAT) -TEST_F(TestCategory, batched_scalar_team_gemv_nt_float_float) { - typedef ::Test::TeamGemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_team_gemv(); -} -TEST_F(TestCategory, batched_scalar_team_gemv_t_float_float) { - typedef ::Test::TeamGemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_team_gemv(); -} -#endif - -#if defined(KOKKOSKERNELS_INST_DOUBLE) -TEST_F(TestCategory, batched_scalar_team_gemv_nt_double_double) { - typedef ::Test::TeamGemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_team_gemv(); -} -TEST_F(TestCategory, batched_scalar_team_gemv_t_double_double) { - typedef ::Test::TeamGemv::ParamTag param_tag_type; - typedef Algo::Gemv::Blocked algo_tag_type; - test_batched_team_gemv(); -} -#endif diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorQR.hpp b/unit_test/batched/dense/Test_Batched_TeamVectorQR.hpp index 80bc7b246a..bb5cd89c9b 100644 --- a/unit_test/batched/dense/Test_Batched_TeamVectorQR.hpp +++ b/unit_test/batched/dense/Test_Batched_TeamVectorQR.hpp @@ -6,7 +6,7 @@ #include "KokkosBlas1_set.hpp" #include "KokkosBatched_Copy_Decl.hpp" -#include "KokkosBatched_Gemv_Decl.hpp" +#include "KokkosBlas2_team_gemv_spec.hpp" #include "KokkosBatched_Trsv_Decl.hpp" #include "KokkosBatched_QR_Decl.hpp" #include "KokkosBatched_ApplyQ_Decl.hpp" @@ -53,9 +53,9 @@ struct Functor_TestBatchedTeamVectorQR { member.team_barrier(); /// bb = AA*xx - TeamVectorGemv::invoke(member, one, aa, xx, zero, - bb); + KokkosBlas::TeamVectorGemv::invoke(member, one, aa, + xx, zero, bb); member.team_barrier(); /// AA = QR diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorQR_WithColumnPivoting.hpp b/unit_test/batched/dense/Test_Batched_TeamVectorQR_WithColumnPivoting.hpp index 72754a5e00..743810d4ce 100644 --- a/unit_test/batched/dense/Test_Batched_TeamVectorQR_WithColumnPivoting.hpp +++ b/unit_test/batched/dense/Test_Batched_TeamVectorQR_WithColumnPivoting.hpp @@ -6,7 +6,7 @@ #include "KokkosBatched_Copy_Decl.hpp" #include "KokkosBatched_ApplyPivot_Decl.hpp" -#include "KokkosBatched_Gemv_Decl.hpp" +#include "KokkosBlas2_team_gemv_spec.hpp" #include "KokkosBatched_Trsv_Decl.hpp" #include "KokkosBatched_QR_WithColumnPivoting_Decl.hpp" #include "KokkosBatched_ApplyQ_Decl.hpp" @@ -53,9 +53,9 @@ struct Functor_TestBatchedTeamVectorQR_WithColumnPivoting { member.team_barrier(); /// bb = AA*xx - TeamVectorGemv::invoke(member, one, aa, xx, zero, - bb); + KokkosBlas::TeamVectorGemv::invoke(member, one, aa, + xx, zero, bb); member.team_barrier(); /// AA P^T = QR diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorSolveUTV.hpp b/unit_test/batched/dense/Test_Batched_TeamVectorSolveUTV.hpp index 6610383d12..08375a95f5 100644 --- a/unit_test/batched/dense/Test_Batched_TeamVectorSolveUTV.hpp +++ b/unit_test/batched/dense/Test_Batched_TeamVectorSolveUTV.hpp @@ -6,7 +6,7 @@ #include "KokkosBatched_Copy_Decl.hpp" #include "KokkosBatched_ApplyPivot_Decl.hpp" -#include "KokkosBatched_Gemv_Decl.hpp" +#include "KokkosBlas2_team_gemv_spec.hpp" #include "KokkosBatched_Trsv_Decl.hpp" #include "KokkosBatched_UTV_Decl.hpp" #include "KokkosBatched_SolveUTV_Decl.hpp" @@ -79,9 +79,9 @@ struct Functor_TestBatchedTeamVectorSolveUTV { TeamVectorCopy::invoke(member, aa, ac); /// bb = AA*xx - TeamVectorGemv::invoke(member, one, aa, xx, zero, - bb); + KokkosBlas::TeamVectorGemv::invoke(member, one, aa, + xx, zero, bb); member.team_barrier(); /// Solving Ax = b using UTV transformation diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorUTV.hpp b/unit_test/batched/dense/Test_Batched_TeamVectorUTV.hpp index 0a49db7dce..06ca4b2fb8 100644 --- a/unit_test/batched/dense/Test_Batched_TeamVectorUTV.hpp +++ b/unit_test/batched/dense/Test_Batched_TeamVectorUTV.hpp @@ -6,7 +6,7 @@ #include "KokkosBatched_Copy_Decl.hpp" #include "KokkosBatched_ApplyPivot_Decl.hpp" -#include "KokkosBatched_Gemv_Decl.hpp" +#include "KokkosBlas2_team_gemv_spec.hpp" #include "KokkosBatched_Trsv_Decl.hpp" #include "KokkosBatched_UTV_Decl.hpp" @@ -78,9 +78,9 @@ struct Functor_TestBatchedTeamVectorUTV { TeamVectorCopy::invoke(member, aa, ac); /// bb = AA*xx - TeamVectorGemv::invoke(member, one, aa, xx, zero, - bb); + KokkosBlas::TeamVectorGemv::invoke(member, one, aa, + xx, zero, bb); member.team_barrier(); /// Solving Ax = b using UTV transformation @@ -98,9 +98,9 @@ struct Functor_TestBatchedTeamVectorUTV { auto vm = Kokkos::subview(vv, range_upto_rank, Kokkos::ALL()); if (matrix_rank < m) { /// w = U^T b - TeamVectorGemv::invoke(member, one, um, bb, zero, - ww); + KokkosBlas::TeamVectorGemv::invoke(member, one, um, + bb, zero, ww); member.team_barrier(); /// w = T^{-1} w @@ -109,15 +109,15 @@ struct Functor_TestBatchedTeamVectorUTV { member.team_barrier(); /// x = V^T w - TeamVectorGemv::invoke(member, one, vm, ww, zero, - xx); + KokkosBlas::TeamVectorGemv::invoke(member, one, vm, + ww, zero, xx); member.team_barrier(); } else { /// x = U^T b - TeamVectorGemv::invoke(member, one, um, bb, zero, - xx); + KokkosBlas::TeamVectorGemv::invoke(member, one, um, + bb, zero, xx); member.team_barrier(); /// x = T^{-1} x diff --git a/unit_test/blas/Test_Blas.hpp b/unit_test/blas/Test_Blas.hpp index 4bcbf957c4..b6d4f88314 100644 --- a/unit_test/blas/Test_Blas.hpp +++ b/unit_test/blas/Test_Blas.hpp @@ -44,6 +44,7 @@ // Serial Blas 2 #include "Test_Blas2_serial_gemv.hpp" + // Team Blas 2 #include "Test_Blas2_team_gemv.hpp" #include "Test_Blas2_teamvector_gemv.hpp" diff --git a/unit_test/blas/Test_Blas2_gemv_util.hpp b/unit_test/blas/Test_Blas2_gemv_util.hpp new file mode 100644 index 0000000000..0ef31d5ab2 --- /dev/null +++ b/unit_test/blas/Test_Blas2_gemv_util.hpp @@ -0,0 +1,337 @@ +#ifndef TEST_BLAS2_GEMV_UTIL_HPP +#define TEST_BLAS2_GEMV_UTIL_HPP + +#include +#include +#include +#include + +namespace Test { + +template ::value> +using simd_vector = + KokkosBatched::Vector, length>; + +template +struct GemvOpBase { + GemvOpBase(char trans_, ScalarType alpha_, AType A_, XType x_, + ScalarType beta_, YType y_) + : trans(trans_), alpha(alpha_), beta(beta_), A(A_), x(x_), y(y_) {} + + protected: + // parameters + char trans; + ScalarType alpha; + ScalarType beta; + // data + AType A; + XType x; + YType y; +}; + +#define KK_DEFINE_BLAS2_GEMV_TEST_OP_CLASS(ClassName) \ + struct ClassName : public GemvOpBase { \ + using params = GemvOpBase; \ + ClassName(char trans_, ScalarType alpha_, AType A_, XType x_, \ + ScalarType beta_, YType y_) \ + : params(trans_, alpha_, A_, x_, beta_, y_) {} +#define KK_END_BLAS2_GEMV_TEST_OP_CLASS \ + } \ + ; + +// Note: vanillaGEMV is called on device here - alternatively one can move +// _strided_ data using safe_device_to_host_deep_copy() etc. +template +KK_DEFINE_BLAS2_GEMV_TEST_OP_CLASS(RefGEMVOp) +template +KOKKOS_INLINE_FUNCTION void operator()(const TeamMember & /* member */) const { + vanillaGEMV(params::trans, params::alpha, params::A, params::x, params::beta, + params::y); +} +KK_END_BLAS2_GEMV_TEST_OP_CLASS + +// fill regular view with random values +template +typename std::enable_if::value>::type +fill_random_view(ViewType A, PoolType &rand_pool, + const ScalarType max_val = 10.0) { + Kokkos::fill_random(A, rand_pool, max_val); + Kokkos::fence(); +} + +// fill rank-1 view of SIMD vectors with random values +template +void fill_random_view( + Kokkos::View< + KokkosBatched::Vector, VecLength> *, + Layout, Props...> + x, + PoolType &rand_pool, const ValueType max_val = 10.0) { + // the view can be strided and have Vector values, so randoms + // are generated in a plain, linear view first and then copied + using device_type = typename decltype(x)::device_type; + Kokkos::View rnd("random_vals", + x.extent(0) * VecLength); + Kokkos::fill_random(rnd, rand_pool, max_val); + using size_type = decltype(x.extent(0)); + for (size_type i = 0; i < x.extent(0); ++i) { + x(i).loadUnaligned(&rnd(i * VecLength)); + } +} + +// fill rank-2 view of SIMD vectors with random values +template +static void fill_random_view( + Kokkos::View< + KokkosBatched::Vector, VecLength> **, + Layout, Props...> + A, + PoolType &rand_pool, const ValueType max_val = 10.0) { + // the view can be strided and have Vector values, so randoms + // are generated in a plain, linear view first and then copied + using device_type = typename decltype(A)::device_type; + Kokkos::View rnd( + "random_vals", A.extent(0) * A.extent(1) * VecLength); + Kokkos::fill_random(rnd, rand_pool, max_val); + using size_type = decltype(A.extent(0)); + size_type idx = 0; + for (size_type i = 0; i < A.extent(0); ++i) { + for (size_type j = 0; j < A.extent(1); ++j) { + A(i, j).loadUnaligned(&rnd(idx)); + idx += VecLength; + } + } +} + +template +struct GEMVTest { + static void run(const char *mode) { + run_algorithms<0, typename GemvFunc::algorithms>(mode); + } + + private: + // ScalarCoef==void default behavior is to derive alpha/beta scalar types + // from A and X scalar types + using ScalarType = typename std::conditional< + !std::is_void::value, ScalarCoef, + typename std::common_type::type>::type; + + template + static std::enable_if_t::value> + run_algorithms(const char *mode) {} + + template + static + typename std::enable_if<(Idx < + std::tuple_size::value)>::type + run_algorithms(const char *mode) { + run_layouts::type>(mode); + run_algorithms(mode); + } + + template + static constexpr bool allow_algorithm = + GemvFunc::template allow_algorithm; + + template + static typename std::enable_if>::type run_layouts( + const char *mode) { + // skip unsupported combinations + } + + template + static typename std::enable_if>::type run_layouts( + const char *mode) { + // Note: all layouts listed here are subview'ed to test Kokkos::LayoutStride +#ifdef KOKKOSKERNELS_TEST_LAYOUTLEFT + run_view_types(mode); +#endif +#ifdef KOKKOSKERNELS_TEST_LAYOUTRIGHT + run_view_types(mode); +#endif +#if defined(KOKKOSKERNELS_TEST_LAYOUTLEFT) && \ + defined(KOKKOSKERNELS_TEST_LAYOUTRIGHT) + using A_t = typename Kokkos::View; + using x_t = typename Kokkos::View; + using y_t = typename Kokkos::View; + run_sizes(mode); +#endif + } + + template + static void run_view_types(const char *mode) { + typedef Kokkos::View view_type_A; + typedef Kokkos::View view_type_x; + typedef Kokkos::View view_type_y; + run_sizes(mode); + } + + template + static void run_sizes(const char *mode) { + // zero cases + run_size(mode, 0, 0); + run_size(mode, 0, 4); + run_size(mode, 4, 0); + // small block sizes + for (int n = 1; n <= 16; ++n) { + run_size(mode, n, n); + } + // other cases + run_size(mode, 1024, 1); + run_size(mode, 1024, 13); + run_size(mode, 1024, 124); + } + + template + static void run_size(const char *mode, int N, int M) { + using A_layout = typename ViewTypeA::array_layout; + using x_layout = typename ViewTypeX::array_layout; + using y_layout = typename ViewTypeY::array_layout; + static_assert(!std::is_same::value, ""); + static_assert(!std::is_same::value, ""); + static_assert(!std::is_same::value, ""); + + const auto trans = mode[0]; + const bool transposed = trans == (char)'T' || trans == (char)'C'; + const auto Nt = transposed ? M : N; + const auto Mt = transposed ? N : M; + + // 1. run on regular (non-strided) views + ViewTypeA A1("A1", Nt, Mt); + ViewTypeX x1("X1", M); + ViewTypeY y1("Y1", N); + run_views(trans, A1, x1, y1); + + // 2. run on strided subviews (enforced by adding extra rank on both sides) + // Note: strided views are not supported by MKL routines + if (!std::is_same::value) { + typedef Kokkos::View BaseTypeA; + typedef Kokkos::View BaseTypeX; + typedef Kokkos::View BaseTypeY; + + BaseTypeA b_A("A", 2, Nt, Mt, 2); + BaseTypeX b_x("X", 2, M, 2); + BaseTypeY b_y("Y", 2, N, 2); + auto A = Kokkos::subview(b_A, 0, Kokkos::ALL(), Kokkos::ALL(), 0); + auto x = Kokkos::subview(b_x, 0, Kokkos::ALL(), 0); + auto y = Kokkos::subview(b_y, 0, Kokkos::ALL(), 0); + + // make sure it's actually LayoutStride there + static_assert(std::is_same::value, + ""); + static_assert(std::is_same::value, + ""); + static_assert(std::is_same::value, + ""); + run_views(trans, A, x, y); + } + } + + template + static void run_views(const char trans, ViewTypeA A, ViewTypeX x, + ViewTypeY y) { + Kokkos::TeamPolicy teams(1, 1); // just run on device + fill_inputs(A, x, y); + ScalarType alpha = 3; // TODO: test also with zero alpha/beta ? + ScalarType beta = 5; + + // get reference results + Kokkos::View y_ref("Y_ref", y.extent(0)); + Kokkos::deep_copy(y_ref, y); + RefGEMVOp gemv_ref( + trans, alpha, A, x, beta, y_ref); + Kokkos::parallel_for(teams, gemv_ref); + + // 1. check non-consts + run_case(trans, alpha, A, x, beta, y, y_ref); + + // 2. check const x + typename ViewTypeX::const_type c_x = x; + run_case(trans, alpha, A, c_x, beta, y, y_ref); + + // 3. check const A and x + typename ViewTypeA::const_type c_A = A; + run_case(trans, alpha, c_A, c_x, beta, y, y_ref); + } + + template + static void run_case(const char trans, ScalarType alpha, ViewTypeA A, + ViewTypeX x, ScalarType beta, ViewTypeY y, + ViewTypeYRef y_ref) { + // run on original y view (not to alter the test) + // but backup it and restore, so it can be reused + Kokkos::View y_backup("Y2", y.extent(0)); + Kokkos::deep_copy(y_backup, y); + + // fetch GEMV functor from the factory + using op_type = + typename GemvFunc::template functor_type; + + op_type gemv_op(trans, alpha, A, x, beta, y); + Kokkos::parallel_for(Kokkos::TeamPolicy(1, 1), gemv_op); + + const double eps = epsilon(ScalarY{}); + EXPECT_NEAR_KK_REL_1DVIEW(y, y_ref, eps); + Kokkos::deep_copy(y, y_backup); + } + + //----- utilities -----// + + // GEMV tolerance for scalar types + static double epsilon(float) { return 2 * 1e-5; } + static double epsilon(double) { return 1e-7; } + static double epsilon(int) { return 0; } + // tolerance for derived types + template + static double epsilon(Kokkos::complex) { + return epsilon(ScalarType{}); + } + template + static double epsilon(simd_vector) { + return epsilon(ScalarType{}); + } + + template + static void fill_inputs(ViewTypeA A, ViewTypeX x, ViewTypeY y) { + using exec_space = typename Device::execution_space; + Kokkos::Random_XorShift64_Pool rand_pool(13718); + fill_random_view(A, rand_pool); + fill_random_view(x, rand_pool); + fill_random_view(y, rand_pool); + } +}; + +} // namespace Test + +#define TEST_CASE4(PREFIX, FACTORY, NAME, SCALAR_A, SCALAR_X, SCALAR_Y, \ + SCALAR_COEF) \ + using PREFIX##_##NAME##_gemv_test = \ + ::Test::GEMVTest<::Test::FACTORY, SCALAR_A, SCALAR_X, SCALAR_Y, \ + TestExecSpace, SCALAR_COEF>; \ + TEST_F(TestCategory, PREFIX##_gemv_nt_##NAME) { \ + PREFIX##_##NAME##_gemv_test::run("N"); \ + } \ + TEST_F(TestCategory, PREFIX##_gemv_t_##NAME) { \ + PREFIX##_##NAME##_gemv_test::run("T"); \ + } \ + TEST_F(TestCategory, PREFIX##_gemv_ct_##NAME) { \ + PREFIX##_##NAME##_gemv_test::run("C"); \ + } + +#define TEST_CASE2(PREFIX, FACTORY, NAME, SCALAR, SCALAR_COEF) \ + TEST_CASE4(PREFIX, FACTORY, NAME, SCALAR, SCALAR, SCALAR, SCALAR_COEF) +#define TEST_CASE(PREFIX, FACTORY, NAME, SCALAR) \ + TEST_CASE2(PREFIX, FACTORY, NAME, SCALAR, SCALAR) + +#endif // TEST_BLAS2_GEMV_UTIL_HPP \ No newline at end of file diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index e97f8e71a9..99ad6da6a8 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -1,388 +1,100 @@ -#include -#include -#include +#include // for ETI test guards +// Note: include serial gemv before util so it knows if CompactMKL is available #include -#include -#include -#include +#include namespace Test { -template ::value> -using simd_vector = - KokkosBatched::Vector, length>; - -// Note: vanillaGEMV is called on device here - alternatively one can move -// _strided_ data using safe_device_to_host_deep_copy() etc. -template -struct RefGEMVOp { - RefGEMVOp(char trans_, ScalarType alpha_, AType A_, XType x_, - ScalarType beta_, YType y_) - : trans(trans_), alpha(alpha_), beta(beta_), A(A_), x(x_), y(y_) {} - - template - KOKKOS_INLINE_FUNCTION void operator()( - const TeamMember & /* member */) const { - vanillaGEMV(trans, alpha, A, x, beta, y); - } - - private: - // parameters - char trans; - ScalarType alpha; - ScalarType beta; - // data - AType A; - XType x; - YType y; -}; - template -struct SerialGEMVOp { - SerialGEMVOp(char trans_, ScalarType alpha_, AType A_, XType x_, - ScalarType beta_, YType y_) - : trans(trans_), alpha(alpha_), beta(beta_), A(A_), x(x_), y(y_) {} - - template - KOKKOS_INLINE_FUNCTION void operator()( - const TeamMember & /* member */) const { - KokkosBlas::Experimental::gemv(trans, alpha, A, x, beta, y); - } - - private: - // parameters - char trans; - ScalarType alpha; - ScalarType beta; - // data - AType A; - XType x; - YType y; -}; - -// fill regular view with random values -template -typename std::enable_if::value>::type -fill_random_view(ViewType A, PoolType &rand_pool, - const ScalarType max_val = 10.0) { - Kokkos::fill_random(A, rand_pool, max_val); - Kokkos::fence(); -} - -// fill rank-1 view of SIMD vectors with random values -template -void fill_random_view( - Kokkos::View< - KokkosBatched::Vector, VecLength> *, - Layout, Props...> - x, - PoolType &rand_pool, const ValueType max_val = 10.0) { - // the view can be strided and have Vector values, so randoms - // are generated in a plain, linear view first and then copied - using device_type = typename decltype(x)::device_type; - Kokkos::View rnd("random_vals", - x.extent(0) * VecLength); - Kokkos::fill_random(rnd, rand_pool, max_val); - using size_type = decltype(x.extent(0)); - for (size_type i = 0; i < x.extent(0); ++i) { - x(i).loadUnaligned(&rnd(i * VecLength)); - } +KK_DEFINE_BLAS2_GEMV_TEST_OP_CLASS(SerialGEMVOp) +template +KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& /* member */) const { + KokkosBlas::Experimental::gemv(params::trans, params::alpha, + params::A, params::x, params::beta, + params::y); } +KK_END_BLAS2_GEMV_TEST_OP_CLASS -// fill rank-2 view of SIMD vectors with random values -template -static void fill_random_view( - Kokkos::View< - KokkosBatched::Vector, VecLength> **, - Layout, Props...> - A, - PoolType &rand_pool, const ValueType max_val = 10.0) { - // the view can be strided and have Vector values, so randoms - // are generated in a plain, linear view first and then copied - using device_type = typename decltype(A)::device_type; - Kokkos::View rnd( - "random_vals", A.extent(0) * A.extent(1) * VecLength); - Kokkos::fill_random(rnd, rand_pool, max_val); - using size_type = decltype(A.extent(0)); - size_type idx = 0; - for (size_type i = 0; i < A.extent(0); ++i) { - for (size_type j = 0; j < A.extent(1); ++j) { - A(i, j).loadUnaligned(&rnd(idx)); - idx += VecLength; - } - } -} - -// -template -struct SerialGEMVTestBase { - // ScalarCoef==void default behavior is to derive alpha/beta scalar types - // from A and X scalar types - using ScalarType = typename std::conditional< - !std::is_void::value, ScalarCoef, - typename std::common_type::type>::type; - - template - static void run_layouts(const char *mode) { - // Note: all layouts listed here are subview'ed to test Kokkos::LayoutStride -#ifdef KOKKOSKERNELS_TEST_LAYOUTLEFT - run_view_types(mode); -#endif -#ifdef KOKKOSKERNELS_TEST_LAYOUTRIGHT - run_view_types(mode); -#endif -#if defined(KOKKOSKERNELS_TEST_LAYOUTLEFT) && \ - defined(KOKKOSKERNELS_TEST_LAYOUTRIGHT) - using A_t = typename Kokkos::View; - using x_t = typename Kokkos::View; - using y_t = typename Kokkos::View; - run_sizes(mode); -#endif - } - - template - static void run_view_types(const char *mode) { - typedef Kokkos::View view_type_A; - typedef Kokkos::View view_type_x; - typedef Kokkos::View view_type_y; - run_sizes(mode); - } - - template - static void run_sizes(const char *mode) { - // zero cases - run_size(mode, 0, 0); - run_size(mode, 0, 4); - run_size(mode, 4, 0); - // small block sizes - for (int n = 1; n <= 16; ++n) { - run_size(mode, n, n); - } - // other cases - run_size(mode, 1024, 1); - run_size(mode, 1024, 13); - run_size(mode, 1024, 124); - } - - template - static void run_size(const char *mode, int N, int M) { - using A_layout = typename ViewTypeA::array_layout; - using x_layout = typename ViewTypeX::array_layout; - using y_layout = typename ViewTypeY::array_layout; - static_assert(!std::is_same::value, ""); - static_assert(!std::is_same::value, ""); - static_assert(!std::is_same::value, ""); - - const auto trans = mode[0]; - const bool transposed = trans == (char)'T' || trans == (char)'C'; - const auto Nt = transposed ? M : N; - const auto Mt = transposed ? N : M; - - // 1. run on regular (non-strided) views - ViewTypeA A1("A1", Nt, Mt); - ViewTypeX x1("X1", M); - ViewTypeY y1("Y1", N); - run_views(trans, A1, x1, y1); - - // 2. run on strided subviews (enforced by adding extra rank on both sides) - // Note: strided views are not supported by MKL routines - if (!std::is_same::value) { - typedef Kokkos::View BaseTypeA; - typedef Kokkos::View BaseTypeX; - typedef Kokkos::View BaseTypeY; - - BaseTypeA b_A("A", 2, Nt, Mt, 2); - BaseTypeX b_x("X", 2, M, 2); - BaseTypeY b_y("Y", 2, N, 2); - auto A = Kokkos::subview(b_A, 0, Kokkos::ALL(), Kokkos::ALL(), 0); - auto x = Kokkos::subview(b_x, 0, Kokkos::ALL(), 0); - auto y = Kokkos::subview(b_y, 0, Kokkos::ALL(), 0); - - // make sure it's actually LayoutStride there - static_assert(std::is_same::value, - ""); - static_assert(std::is_same::value, - ""); - static_assert(std::is_same::value, - ""); - run_views(trans, A, x, y); - } - } - - template - static void run_views(const char trans, ViewTypeA A, ViewTypeX x, - ViewTypeY y) { - Kokkos::TeamPolicy teams(1, 1); // just run on device - fill_inputs(A, x, y); - ScalarType alpha = 3; // TODO: test also with zero alpha/beta ? - ScalarType beta = 5; - - // get reference results - Kokkos::View y_ref("Y_ref", y.extent(0)); - Kokkos::deep_copy(y_ref, y); - RefGEMVOp gemv_ref( - trans, alpha, A, x, beta, y_ref); - Kokkos::parallel_for(teams, gemv_ref); - - // 1. check non-consts - run_case(trans, alpha, A, x, beta, y, y_ref); - - // 2. check const x - typename ViewTypeX::const_type c_x = x; - run_case(trans, alpha, A, c_x, beta, y, y_ref); - - // 3. check const A and x - typename ViewTypeA::const_type c_A = A; - run_case(trans, alpha, c_A, c_x, beta, y, y_ref); - } - +struct SerialGemvFactory { template - static void run_case(const char trans, ScalarType alpha, ViewTypeA A, - ViewTypeX x, ScalarType beta, ViewTypeY y, - ViewTypeYRef y_ref) { - // run on original y view (not to alter the test) - // but backup it and restore, so it can be reused - Kokkos::View y_backup("Y2", y.extent(0)); - Kokkos::deep_copy(y_backup, y); + class Device, class ScalarType> + using functor_type = + SerialGEMVOp; - SerialGEMVOp gemv_op( - trans, alpha, A, x, beta, y); - Kokkos::parallel_for(Kokkos::TeamPolicy(1, 1), gemv_op); - - const double eps = epsilon(ScalarY{}); - EXPECT_NEAR_KK_REL_1DVIEW(y, y_ref, eps); - Kokkos::deep_copy(y, y_backup); - } - - //----- utilities -----// - - // GEMV tolerance for scalar types - static double epsilon(float) { return 2 * 1e-5; } - static double epsilon(double) { return 1e-7; } - static double epsilon(int) { return 0; } - // tolerance for derived types - template - static double epsilon(Kokkos::complex) { - return epsilon(ScalarType{}); - } - template - static double epsilon(simd_vector) { - return epsilon(ScalarType{}); - } - - template - static void fill_inputs(ViewTypeA A, ViewTypeX x, ViewTypeY y) { - using exec_space = typename Device::execution_space; - Kokkos::Random_XorShift64_Pool rand_pool(13718); - fill_random_view(A, rand_pool); - fill_random_view(x, rand_pool); - fill_random_view(y, rand_pool); - } -}; - -template -struct SerialGEMVTest { - static void run(const char *mode) { - using base = - SerialGEMVTestBase; - base::template run_layouts(mode); - base::template run_layouts(mode); - } -}; - -// Special handling of Vector> (instead of plain scalars) -// Note: MKL compact routines don't allow mixed scalar types -template -struct SerialGEMVTest, - simd_vector, - simd_vector, Device, ScalarCoef> { - static void run(const char *mode) { - using vector_type = simd_vector; - using base = SerialGEMVTestBase; - // run all usual, non-vector tests - base::template run_layouts(mode); - base::template run_layouts(mode); - // run vector tests + using algorithms = std::tuple(mode); + , + KokkosBlas::Algo::Gemv::CompactMKL #endif - } + >; + + // block testing of CompackMKL on non-vector scalars + // (they are not supported by the implementation) + template + static constexpr bool allow_algorithm = + !std::is_same::value || + (KokkosBatched::is_vector::value && + KokkosBatched::is_vector::value && + KokkosBatched::is_vector::value); }; } // namespace Test -#define TEST_CASE4(NAME, SCALAR_A, SCALAR_X, SCALAR_Y, SCALAR_COEF) \ - TEST_F(TestCategory, serial_gemv_nt_##NAME) { \ - ::Test::SerialGEMVTest::run("N"); \ - } \ - TEST_F(TestCategory, serial_gemv_t_##NAME) { \ - ::Test::SerialGEMVTest::run("T"); \ - } \ - TEST_F(TestCategory, serial_gemv_ct_##NAME) { \ - ::Test::SerialGEMVTest::run("C"); \ - } - -#define TEST_CASE2(NAME, SCALAR, SCALAR_COEF) \ - TEST_CASE4(NAME, SCALAR, SCALAR, SCALAR, SCALAR_COEF) -#define TEST_CASE(NAME, SCALAR) TEST_CASE2(NAME, SCALAR, SCALAR) +#define TEST_SERIAL_CASE4(N, A, X, Y, SC) \ + TEST_CASE4(serial, SerialGemvFactory, N, A, X, Y, SC) +#define TEST_SERIAL_CASE2(N, S, SC) \ + TEST_CASE2(serial, SerialGemvFactory, N, S, SC) +#define TEST_SERIAL_CASE(N, S) TEST_CASE(serial, SerialGemvFactory, N, S) #ifdef KOKKOSKERNELS_TEST_FLOAT -TEST_CASE(float, float) +TEST_SERIAL_CASE(float, float) // MKL vector types #ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ using simd_float_sse = ::Test::simd_vector; using simd_float_avx = ::Test::simd_vector; using simd_float_avx512 = ::Test::simd_vector; -TEST_CASE2(mkl_float_sse, simd_float_sse, float) -TEST_CASE2(mkl_float_avx, simd_float_avx, float) -TEST_CASE2(mkl_float_avx512, simd_float_avx512, float) +TEST_SERIAL_CASE2(mkl_float_sse, simd_float_sse, float) +TEST_SERIAL_CASE2(mkl_float_avx, simd_float_avx, float) +TEST_SERIAL_CASE2(mkl_float_avx512, simd_float_avx512, float) #endif #endif #ifdef KOKKOSKERNELS_TEST_DOUBLE -TEST_CASE(double, double) +TEST_SERIAL_CASE(double, double) // MKL vector types #ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ using simd_double_sse = ::Test::simd_vector; using simd_double_avx = ::Test::simd_vector; using simd_double_avx512 = ::Test::simd_vector; -TEST_CASE2(mkl_double_sse, simd_double_sse, double) -TEST_CASE2(mkl_double_avx, simd_double_avx, double) -TEST_CASE2(mkl_double_avx512, simd_double_avx512, double) +TEST_SERIAL_CASE2(mkl_double_sse, simd_double_sse, double) +TEST_SERIAL_CASE2(mkl_double_avx, simd_double_avx, double) +TEST_SERIAL_CASE2(mkl_double_avx512, simd_double_avx512, double) #endif #endif #ifdef KOKKOSKERNELS_TEST_COMPLEX_DOUBLE -TEST_CASE(complex_double, Kokkos::complex) +TEST_SERIAL_CASE(complex_double, Kokkos::complex) #endif #ifdef KOKKOSKERNELS_TEST_COMPLEX_FLOAT -TEST_CASE(complex_float, Kokkos::complex) +TEST_SERIAL_CASE(complex_float, Kokkos::complex) #endif #ifdef KOKKOSKERNELS_TEST_INT -TEST_CASE(int, int) +TEST_SERIAL_CASE(int, int) #endif #ifdef KOKKOSKERNELS_TEST_ALL_TYPES // test mixed scalar types (void -> default alpha/beta) -TEST_CASE4(mixed, double, int, float, void) +TEST_SERIAL_CASE4(mixed, double, int, float, void) // test arbitrary double alpha/beta with complex values -TEST_CASE2(alphabeta, Kokkos::complex, double) +TEST_SERIAL_CASE2(alphabeta, Kokkos::complex, double) #endif + +#undef TEST_SERIAL_CASE4 +#undef TEST_SERIAL_CASE2 +#undef TEST_SERIAL_CASE diff --git a/unit_test/blas/Test_Blas2_team_gemv.hpp b/unit_test/blas/Test_Blas2_team_gemv.hpp index dc2d158a4c..580ae8fa23 100644 --- a/unit_test/blas/Test_Blas2_team_gemv.hpp +++ b/unit_test/blas/Test_Blas2_team_gemv.hpp @@ -1,274 +1,69 @@ -// Note: Luc Berger-Vergiat 04/14/21 -// This tests uses KOKKOS_LAMBDA so we need -// to make sure that these are enabled in -// the CUDA backend before including this test. -#if !defined(TEST_CUDA_BLAS_CPP) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) - -#include -#include -#include +#include // for test/inst guards +// Note: include serial gemv before util so it knows if CompactMKL is available +#include #include -#include -#include namespace Test { -template -void impl_test_team_gemv(const char *mode, int N, int M) { - typedef Kokkos::TeamPolicy team_policy; - typedef typename team_policy::member_type team_member; - - // Launch K teams of the maximum number of threads per team - int K = 4; - const team_policy policy(K, Kokkos::AUTO); - const int team_data_siz = (N % K == 0) ? (N / K) : (N / K + 1); - - typedef typename ViewTypeA::value_type ScalarA; - typedef typename ViewTypeX::value_type ScalarX; - typedef typename ViewTypeY::value_type ScalarY; - - typedef multivector_layout_adapter vfA_type; - typedef Kokkos::View< - ScalarX * [2], - typename std::conditional::value, - Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, - Device> - BaseTypeX; - typedef Kokkos::View< - ScalarY * [2], - typename std::conditional::value, - Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, - Device> - BaseTypeY; - - ScalarA a = 3; - ScalarX b = 5; - double eps = std::is_same::value ? 2 * 1e-5 : 1e-7; - - typename vfA_type::BaseType b_A("A", N, M); - BaseTypeX b_x("X", M); - BaseTypeY b_y("Y", N); - BaseTypeY b_org_y("Org_Y", N); - - ViewTypeA A = vfA_type::view(b_A); - ViewTypeX x = Kokkos::subview(b_x, Kokkos::ALL(), 0); - ViewTypeY y = Kokkos::subview(b_y, Kokkos::ALL(), 0); - typename ViewTypeX::const_type c_x = x; - typename ViewTypeA::const_type c_A = A; - - typedef multivector_layout_adapter h_vfA_type; - - typename h_vfA_type::BaseType h_b_A = Kokkos::create_mirror_view(b_A); - typename BaseTypeX::HostMirror h_b_x = Kokkos::create_mirror_view(b_x); - typename BaseTypeY::HostMirror h_b_y = Kokkos::create_mirror_view(b_y); - - typename ViewTypeA::HostMirror h_A = h_vfA_type::view(h_b_A); - typename ViewTypeX::HostMirror h_x = Kokkos::subview(h_b_x, Kokkos::ALL(), 0); - typename ViewTypeY::HostMirror h_y = Kokkos::subview(h_b_y, Kokkos::ALL(), 0); - - Kokkos::Random_XorShift64_Pool rand_pool( - 13718); - - Kokkos::fill_random(b_x, rand_pool, ScalarX(10)); - Kokkos::fill_random(b_y, rand_pool, ScalarY(10)); - Kokkos::fill_random(b_A, rand_pool, ScalarA(10)); - - Kokkos::deep_copy(b_org_y, b_y); - - Kokkos::deep_copy(h_b_x, b_x); - Kokkos::deep_copy(h_b_y, b_y); - Kokkos::deep_copy(h_b_A, b_A); - - ScalarY expected_result = 0; - - if (mode[0] == 'N') { - for (int i = 0; i < N; i++) { - ScalarY y_i = ScalarY(); - for (int j = 0; j < M; j++) { - y_i += h_A(i, j) * h_x(j); - } - expected_result += (b * h_y(i) + a * y_i) * (b * h_y(i) + a * y_i); - } - } - - char trans = mode[0]; - // KokkosBlas::gemv(mode,a,A,x,b,y); - Kokkos::parallel_for( - "KokkosBlas::Test::TeamGemm", policy, - KOKKOS_LAMBDA(const team_member &teamMember) { - const int teamId = teamMember.league_rank(); - KokkosBlas::Experimental::gemv( - teamMember, trans, a, - Kokkos::subview( - A, - Kokkos::make_pair( - teamId * team_data_siz, - (teamId < K - 1) ? (teamId + 1) * team_data_siz : N), - Kokkos::ALL()), - x, b, - Kokkos::subview( - y, Kokkos::make_pair( - teamId * team_data_siz, - (teamId < K - 1) ? (teamId + 1) * team_data_siz : N))); - }); - - ScalarY nonconst_nonconst_result = KokkosBlas::dot(y, y); - EXPECT_NEAR_KK(nonconst_nonconst_result, expected_result, - eps * expected_result); - - Kokkos::deep_copy(b_y, b_org_y); - - // KokkosBlas::gemv(mode,a,A,c_x,b,y); - Kokkos::parallel_for( - "KokkosBlas::Test::TeamGemm", policy, - KOKKOS_LAMBDA(const team_member &teamMember) { - const int teamId = teamMember.league_rank(); - KokkosBlas::Experimental::gemv( - teamMember, trans, a, - Kokkos::subview( - A, - Kokkos::make_pair( - teamId * team_data_siz, - (teamId < K - 1) ? (teamId + 1) * team_data_siz : N), - Kokkos::ALL()), - c_x, b, - Kokkos::subview( - y, Kokkos::make_pair( - teamId * team_data_siz, - (teamId < K - 1) ? (teamId + 1) * team_data_siz : N))); - }); +template +KK_DEFINE_BLAS2_GEMV_TEST_OP_CLASS(TeamGEMVOp) +template +KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { + KokkosBlas::Experimental::gemv(member, params::trans, params::alpha, + params::A, params::x, params::beta, + params::y); +} +KK_END_BLAS2_GEMV_TEST_OP_CLASS - ScalarY const_nonconst_result = KokkosBlas::dot(y, y); - EXPECT_NEAR_KK(const_nonconst_result, expected_result, eps * expected_result); +struct TeamGemvFactory { + template + using functor_type = + TeamGEMVOp; - Kokkos::deep_copy(b_y, b_org_y); + using algorithms = std::tuple; - // KokkosBlas::gemv(mode,a,c_A,c_x,b,y); - Kokkos::parallel_for( - "KokkosBlas::Test::TeamGemm", policy, - KOKKOS_LAMBDA(const team_member &teamMember) { - const int teamId = teamMember.league_rank(); - KokkosBlas::Experimental::gemv( - teamMember, trans, a, - Kokkos::subview( - c_A, - Kokkos::make_pair( - teamId * team_data_siz, - (teamId < K - 1) ? (teamId + 1) * team_data_siz : N), - Kokkos::ALL()), - c_x, b, - Kokkos::subview( - y, Kokkos::make_pair( - teamId * team_data_siz, - (teamId < K - 1) ? (teamId + 1) * team_data_siz : N))); - }); + template + static constexpr bool allow_algorithm = true; +}; - ScalarY const_const_result = KokkosBlas::dot(y, y); - EXPECT_NEAR_KK(const_const_result, expected_result, eps * expected_result); -} } // namespace Test -template -int test_team_gemv(const char *mode) { -#if defined(KOKKOSKERNELS_INST_LAYOUTLEFT) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ll; - typedef Kokkos::View view_type_b_ll; - typedef Kokkos::View view_type_c_ll; - Test::impl_test_team_gemv(mode, 0, 1024); - Test::impl_test_team_gemv(mode, 13, 1024); - Test::impl_test_team_gemv(mode, 124, 124); - // Test::impl_test_team_gemv(mode,132231,1024); -#endif - -#if defined(KOKKOSKERNELS_INST_LAYOUTRIGHT) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_lr; - typedef Kokkos::View view_type_b_lr; - typedef Kokkos::View view_type_c_lr; - Test::impl_test_team_gemv(mode, 0, 1024); - Test::impl_test_team_gemv(mode, 13, 1024); - Test::impl_test_team_gemv(mode, 124, 124); - // Test::impl_test_team_gemv(mode,132231,1024); -#endif +#define TEST_TEAM_CASE4(N, A, X, Y, SC) \ + TEST_CASE4(team, TeamGemvFactory, N, A, X, Y, SC) +#define TEST_TEAM_CASE2(N, S, SC) TEST_CASE2(team, TeamGemvFactory, N, S, SC) +#define TEST_TEAM_CASE(N, S) TEST_CASE(team, TeamGemvFactory, N, S) -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - typedef Kokkos::View view_type_c_ls; - Test::impl_test_team_gemv(mode, 0, 1024); - Test::impl_test_team_gemv(mode, 13, 1024); - Test::impl_test_team_gemv(mode, 124, 124); - // Test::impl_test_team_gemv(mode,132231,1024); +#ifdef KOKKOSKERNELS_TEST_FLOAT +TEST_TEAM_CASE(float, float) #endif -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - Test::impl_test_team_gemv(mode, 124, 124); - Test::impl_test_team_gemv(mode, 124, 124); +#ifdef KOKKOSKERNELS_TEST_DOUBLE +TEST_TEAM_CASE(double, double) #endif - return 1; -} - -#if defined(KOKKOSKERNELS_INST_FLOAT) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) -TEST_F(TestCategory, team_gemv_float) { - test_team_gemv("N"); -} +#ifdef KOKKOSKERNELS_TEST_COMPLEX_DOUBLE +TEST_TEAM_CASE(complex_double, Kokkos::complex) #endif -#if defined(KOKKOSKERNELS_INST_DOUBLE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) -TEST_F(TestCategory, team_gemv_double) { - test_team_gemv("N"); -} +#ifdef KOKKOSKERNELS_TEST_COMPLEX_FLOAT +TEST_TEAM_CASE(complex_float, Kokkos::complex) #endif -#if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) -TEST_F(TestCategory, team_gemv_complex_double) { - test_team_gemv, Kokkos::complex, - Kokkos::complex, TestExecSpace>("N"); -} +#ifdef KOKKOSKERNELS_TEST_INT +TEST_TEAM_CASE(int, int) #endif -#if defined(KOKKOSKERNELS_INST_INT) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) -TEST_F(TestCategory, team_gemv_int) { - test_team_gemv("N"); -} -#endif +#ifdef KOKKOSKERNELS_TEST_ALL_TYPES +// test mixed scalar types (void -> default alpha/beta) +TEST_TEAM_CASE4(mixed, double, int, float, void) -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) -TEST_F(TestCategory, team_gemv_double_int) { - test_team_gemv("N"); -} +// test arbitrary double alpha/beta with complex values +TEST_TEAM_CASE2(alphabeta, Kokkos::complex, double) #endif -#endif // Check for lambda availability on CUDA backend +#undef TEST_TEAM_CASE4 +#undef TEST_TEAM_CASE2 +#undef TEST_TEAM_CASE diff --git a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp index 19f32014a1..12dd066198 100644 --- a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp +++ b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp @@ -1,259 +1,71 @@ -// Note: Luc Berger-Vergiat 04/14/21 -// This tests uses KOKKOS_LAMBDA so we need -// to make sure that these are enabled in -// the CUDA backend before including this test. -#if !defined(TEST_CUDA_BLAS_CPP) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) - -#include -#include -#include -#include -#include -#include +#include // for test/inst guards +// Note: include serial gemv before util so it knows if CompactMKL is available +#include +#include namespace Test { -template -void impl_test_teamvector_gemv(const char *mode, int N, int M) { - typedef Kokkos::TeamPolicy team_policy; - typedef typename team_policy::member_type team_member; - - // Launch K teams of the maximum number of threads per team - int K = 4; - const team_policy policy(K, Kokkos::AUTO); - const int team_data_size = (N % K == 0) ? (N / K) : (N / K + 1); - - typedef typename ViewTypeA::value_type ScalarA; - typedef typename ViewTypeX::value_type ScalarX; - typedef typename ViewTypeY::value_type ScalarY; - - typedef multivector_layout_adapter vfA_type; - typedef Kokkos::View< - ScalarX * [2], - typename std::conditional::value, - Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, - Device> - BaseTypeX; - typedef Kokkos::View< - ScalarY * [2], - typename std::conditional::value, - Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, - Device> - BaseTypeY; - - ScalarA a = 3; - ScalarX b = 5; - double eps = std::is_same::value ? 2 * 1e-5 : 1e-7; - - typename vfA_type::BaseType b_A("A", N, M); - BaseTypeX b_x("X", M); - BaseTypeY b_y("Y", N); - BaseTypeY b_org_y("Org_Y", N); - - ViewTypeA A = vfA_type::view(b_A); - ViewTypeX x = Kokkos::subview(b_x, Kokkos::ALL(), 0); - ViewTypeY y = Kokkos::subview(b_y, Kokkos::ALL(), 0); - typename ViewTypeX::const_type c_x = x; - typename ViewTypeA::const_type c_A = A; - - typedef multivector_layout_adapter h_vfA_type; - - typename h_vfA_type::BaseType h_b_A = Kokkos::create_mirror_view(b_A); - typename BaseTypeX::HostMirror h_b_x = Kokkos::create_mirror_view(b_x); - typename BaseTypeY::HostMirror h_b_y = Kokkos::create_mirror_view(b_y); - - typename ViewTypeA::HostMirror h_A = h_vfA_type::view(h_b_A); - typename ViewTypeX::HostMirror h_x = Kokkos::subview(h_b_x, Kokkos::ALL(), 0); - typename ViewTypeY::HostMirror h_y = Kokkos::subview(h_b_y, Kokkos::ALL(), 0); - - Kokkos::Random_XorShift64_Pool rand_pool( - 13718); - - Kokkos::fill_random(b_x, rand_pool, ScalarX(10)); - Kokkos::fill_random(b_y, rand_pool, ScalarY(10)); - Kokkos::fill_random(b_A, rand_pool, ScalarA(10)); - - Kokkos::deep_copy(b_org_y, b_y); - - Kokkos::deep_copy(h_b_x, b_x); - Kokkos::deep_copy(h_b_y, b_y); - Kokkos::deep_copy(h_b_A, b_A); - - ScalarY expected_result = 0; - if (mode[0] != 'N' && mode[0] != 'T' && mode[0] != 'C') { - throw std::runtime_error("incorrect matrix mode letter !"); - } - typedef Kokkos::Details::ArithTraits ATV; - for (int i = 0; i < N; i++) { - ScalarY y_i = ScalarY(); - for (int j = 0; j < M; j++) { - const auto a_val = mode[0] == 'C' - ? ATV::conj(h_A(j, i)) - : (mode[0] == 'T' ? h_A(j, i) : h_A(i, j)); - y_i += a_val * h_x(j); - } - expected_result += (b * h_y(i) + a * y_i) * (b * h_y(i) + a * y_i); - } - - char trans = mode[0]; - - const auto team_rows = [&](auto teamId) { - return Kokkos::make_pair( - teamId * team_data_size, - (teamId < K - 1) ? (teamId + 1) * team_data_size : N); - }; - // KokkosBlas::gemv(mode,a,A,x,b,y); - Kokkos::parallel_for( - "KokkosBlas::Test::TeamVectorGemm", policy, - KOKKOS_LAMBDA(const team_member &teamMember) { - const int teamId = teamMember.league_rank(); - KokkosBlas::Experimental::team_vector_gemv( - teamMember, trans, a, - Kokkos::subview(A, team_rows(teamId), Kokkos::ALL()), x, b, - Kokkos::subview(y, team_rows(teamId))); - }); - - ScalarY nonconst_nonconst_result = KokkosBlas::dot(y, y); - EXPECT_NEAR_KK(nonconst_nonconst_result, expected_result, - eps * expected_result); - - Kokkos::deep_copy(b_y, b_org_y); - - // KokkosBlas::gemv(mode,a,A,c_x,b,y); - Kokkos::parallel_for( - "KokkosBlas::Test::TeamVectorGemm", policy, - KOKKOS_LAMBDA(const team_member &teamMember) { - const int teamId = teamMember.league_rank(); - KokkosBlas::Experimental::team_vector_gemv( - teamMember, trans, a, - Kokkos::subview(A, team_rows(teamId), Kokkos::ALL()), c_x, b, - Kokkos::subview(y, team_rows(teamId))); - }); +template +KK_DEFINE_BLAS2_GEMV_TEST_OP_CLASS(TeamVectorGEMVOp) +template +KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { + KokkosBlas::Experimental::team_vector_gemv( + member, params::trans, params::alpha, params::A, params::x, params::beta, + params::y); +} +KK_END_BLAS2_GEMV_TEST_OP_CLASS - ScalarY const_nonconst_result = KokkosBlas::dot(y, y); - EXPECT_NEAR_KK(const_nonconst_result, expected_result, eps * expected_result); +struct TeamVectorGemvFactory { + template + using functor_type = + TeamVectorGEMVOp; - Kokkos::deep_copy(b_y, b_org_y); + // no Blocked implementation + using algorithms = std::tuple; - // KokkosBlas::gemv(mode,a,c_A,c_x,b,y); - Kokkos::parallel_for( - "KokkosBlas::Test::TeamVectorGemm", policy, - KOKKOS_LAMBDA(const team_member &teamMember) { - const int teamId = teamMember.league_rank(); - KokkosBlas::Experimental::team_vector_gemv( - teamMember, trans, a, - Kokkos::subview(c_A, team_rows(teamId), Kokkos::ALL()), c_x, b, - Kokkos::subview(y, team_rows(teamId))); - }); + template + static constexpr bool allow_algorithm = true; +}; - ScalarY const_const_result = KokkosBlas::dot(y, y); - EXPECT_NEAR_KK(const_const_result, expected_result, eps * expected_result); -} } // namespace Test -template -int test_teamvector_gemv(const char *mode) { -#if defined(KOKKOSKERNELS_INST_LAYOUTLEFT) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ll; - typedef Kokkos::View view_type_b_ll; - typedef Kokkos::View view_type_c_ll; - Test::impl_test_teamvector_gemv(mode, 0, 1024); - Test::impl_test_teamvector_gemv(mode, 13, 1024); - Test::impl_test_teamvector_gemv(mode, 124, 124); - // Test::impl_test_teamvector_gemv(mode,132231,1024); -#endif +#define TEST_TEAMVECTOR_CASE4(N, A, X, Y, SC) \ + TEST_CASE4(teamvector, TeamVectorGemvFactory, N, A, X, Y, SC) +#define TEST_TEAMVECTOR_CASE2(N, S, SC) \ + TEST_CASE2(teamvector, TeamVectorGemvFactory, N, S, SC) +#define TEST_TEAMVECTOR_CASE(N, S) \ + TEST_CASE(teamvector, TeamVectorGemvFactory, N, S) -#if defined(KOKKOSKERNELS_INST_LAYOUTRIGHT) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_lr; - typedef Kokkos::View view_type_b_lr; - typedef Kokkos::View view_type_c_lr; - Test::impl_test_teamvector_gemv(mode, 0, 1024); - Test::impl_test_teamvector_gemv(mode, 13, 1024); - Test::impl_test_teamvector_gemv(mode, 124, 124); - // Test::impl_test_teamvector_gemv(mode,132231,1024); +#ifdef KOKKOSKERNELS_TEST_FLOAT +TEST_TEAMVECTOR_CASE(float, float) #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - typedef Kokkos::View view_type_c_ls; - Test::impl_test_teamvector_gemv(mode, 0, 1024); - Test::impl_test_teamvector_gemv(mode, 13, 1024); - Test::impl_test_teamvector_gemv(mode, 124, 124); - // Test::impl_test_teamvector_gemv(mode,132231,1024); +#ifdef KOKKOSKERNELS_TEST_DOUBLE +TEST_TEAMVECTOR_CASE(double, double) #endif -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - Test::impl_test_teamvector_gemv(mode, 124, 124); - Test::impl_test_teamvector_gemv(mode, 124, 124); +#ifdef KOKKOSKERNELS_TEST_COMPLEX_DOUBLE +TEST_TEAMVECTOR_CASE(complex_double, Kokkos::complex) #endif - return 1; -} - -#if defined(KOKKOSKERNELS_INST_FLOAT) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) -TEST_F(TestCategory, teamvector_gemv_float) { - test_teamvector_gemv("N"); -} +#ifdef KOKKOSKERNELS_TEST_COMPLEX_FLOAT +TEST_TEAMVECTOR_CASE(complex_float, Kokkos::complex) #endif -#if defined(KOKKOSKERNELS_INST_DOUBLE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) -TEST_F(TestCategory, teamvector_gemv_double) { - test_teamvector_gemv("N"); -} -#endif - -#if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) -TEST_F(TestCategory, teamvector_gemv_complex_double) { - test_teamvector_gemv, Kokkos::complex, - Kokkos::complex, TestExecSpace>("N"); -} +#ifdef KOKKOSKERNELS_TEST_INT +TEST_TEAMVECTOR_CASE(int, int) #endif -#if defined(KOKKOSKERNELS_INST_INT) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) -TEST_F(TestCategory, teamvector_gemv_int) { - test_teamvector_gemv("N"); -} -#endif +#ifdef KOKKOSKERNELS_TEST_ALL_TYPES +// test mixed scalar types (void -> default alpha/beta) +TEST_TEAMVECTOR_CASE4(mixed, double, int, float, void) -#if 0 // mixed scalar types not allowed in batched impl -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) -TEST_F(TestCategory, teamvector_gemv_double_int) { - test_teamvector_gemv("N"); -} -#endif +// test arbitrary double alpha/beta with complex values +TEST_TEAMVECTOR_CASE2(alphabeta, Kokkos::complex, double) #endif -#endif // Check for lambda availability on CUDA backend +#undef TEST_TEAMVECTOR_CASE4 +#undef TEST_TEAMVECTOR_CASE2 +#undef TEST_TEAMVECTOR_CASE From 0af9691fc923ca7cc598946d26f3eacaecb5cc59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Sat, 13 Aug 2022 13:19:16 +0200 Subject: [PATCH 035/226] implement ConjTranspose in {Team,TeamVector}Gemv --- src/blas/impl/KokkosBlas2_team_gemv_impl.hpp | 73 ++++++++++++++------ src/blas/impl/KokkosBlas2_team_gemv_spec.hpp | 27 +++++--- 2 files changed, 67 insertions(+), 33 deletions(-) diff --git a/src/blas/impl/KokkosBlas2_team_gemv_impl.hpp b/src/blas/impl/KokkosBlas2_team_gemv_impl.hpp index fd73e27443..a4cf662cc9 100644 --- a/src/blas/impl/KokkosBlas2_team_gemv_impl.hpp +++ b/src/blas/impl/KokkosBlas2_team_gemv_impl.hpp @@ -54,6 +54,16 @@ namespace Impl { template struct TeamGemvInternal { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType &member, OpA op, const int m, const int n, + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const int as0, const int as1, const ValueXType *KOKKOS_RESTRICT x, + const int xs0, const ScalarType beta, + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0); + + // default OpA = OpID template KOKKOS_INLINE_FUNCTION static int invoke( @@ -61,11 +71,24 @@ struct TeamGemvInternal { const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, - /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0); + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0) { + return invoke(member, OpID{}, m, n, alpha, A, as0, as1, x, xs0, beta, y, + ys0); + } }; template struct TeamVectorGemvInternal { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType &member, OpA op, const int m, const int n, + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, + const int as0, const int as1, const ValueXType *KOKKOS_RESTRICT x, + const int xs0, const ScalarType beta, + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0); + + // default OpA = OpID template KOKKOS_INLINE_FUNCTION static int invoke( @@ -73,7 +96,10 @@ struct TeamVectorGemvInternal { const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, - /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0); + /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0) { + return invoke(member, OpID{}, m, n, alpha, A, as0, as1, x, xs0, beta, y, + ys0); + } }; /// @@ -81,12 +107,13 @@ struct TeamVectorGemvInternal { /// ==================== template <> -template +template KOKKOS_INLINE_FUNCTION int TeamGemvInternal::invoke( - const MemberType &member, const int m, const int n, const ScalarType alpha, - const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, - const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, + const MemberType &member, OpA op, const int m, const int n, + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const int as0, + const int as1, const ValueXType *KOKKOS_RESTRICT x, const int xs0, + const ScalarType beta, /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0) { const ScalarType one(1.0), zero(0.0); @@ -111,7 +138,7 @@ KOKKOS_INLINE_FUNCTION int TeamGemvInternal::invoke( #pragma unroll #endif for (int j = 0; j < n; ++j) - t += tA[j * as1] * x[j * xs0]; + t += op(tA[j * as1]) * x[j * xs0]; y[i * ys0] += alpha * t; }); } @@ -119,12 +146,13 @@ KOKKOS_INLINE_FUNCTION int TeamGemvInternal::invoke( } template <> -template +template KOKKOS_INLINE_FUNCTION int TeamGemvInternal::invoke( - const MemberType &member, const int m, const int n, const ScalarType alpha, - const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, - const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, + const MemberType &member, OpA /* op */, const int m, const int n, + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const int as0, + const int as1, const ValueXType *KOKKOS_RESTRICT x, const int xs0, + const ScalarType beta, /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0) { const ScalarType one(1.0), zero(0.0); @@ -152,9 +180,9 @@ KOKKOS_INLINE_FUNCTION int TeamGemvInternal::invoke( Kokkos::parallel_for(Kokkos::TeamThreadRange(member, (m / mb) + (mp > 0)), [&](const int &ii) { const int i = ii * mb; - inner.serial_invoke( - alpha, A + i * as0, x, - (i + mb) > m ? (m - i) : mb, n, y + i * ys0); + inner.serial_invoke(alpha, A + i * as0, x, + (i + mb) > m ? (m - i) : mb, + n, y + i * ys0); }); member.team_barrier(); } @@ -167,13 +195,14 @@ KOKKOS_INLINE_FUNCTION int TeamGemvInternal::invoke( /// ==================== template <> -template +template KOKKOS_INLINE_FUNCTION int TeamVectorGemvInternal::invoke( - const MemberType &member, const int m, const int n, const ScalarType alpha, - const ValueAType *KOKKOS_RESTRICT A, const int as0, const int as1, - const ValueXType *KOKKOS_RESTRICT x, const int xs0, const ScalarType beta, + const MemberType &member, OpA op, const int m, const int n, + const ScalarType alpha, const ValueAType *KOKKOS_RESTRICT A, const int as0, + const int as1, const ValueXType *KOKKOS_RESTRICT x, const int xs0, + const ScalarType beta, /**/ ValueYType *KOKKOS_RESTRICT y, const int ys0) { const ScalarType one(1.0), zero(0.0); @@ -196,7 +225,7 @@ TeamVectorGemvInternal::invoke( Kokkos::parallel_reduce( Kokkos::ThreadVectorRange(member, n), [&](const int &j, ValueYType &update) { - update += tA[j * as1] * x[j * xs0]; + update += op(tA[j * as1]) * x[j * xs0]; }, t); Kokkos::single(Kokkos::PerThread(member), diff --git a/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp b/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp index dee023d721..d1c85e9827 100644 --- a/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp +++ b/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp @@ -202,8 +202,7 @@ struct TeamGemv { const xViewType& x, const ScalarType beta, const yViewType& y) { static_assert(AViewType::Rank == 2, "KokkosBlas::TeamGemv requires rank-2 A matrix"); - return Impl::TeamGemvInternal::template invoke< - MemberType, ScalarType, typename AViewType::non_const_value_type>( + return Impl::TeamGemvInternal::invoke( member, A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); } @@ -218,8 +217,7 @@ struct TeamGemv { const xViewType& x, const ScalarType beta, const yViewType& y) { static_assert(AViewType::Rank == 2, "KokkosBlas::TeamGemv requires rank-2 A matrix"); - return Impl::TeamGemvInternal::template invoke< - MemberType, ScalarType, typename AViewType::non_const_value_type>( + return Impl::TeamGemvInternal::invoke( member, A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); } @@ -238,8 +236,7 @@ struct TeamGemv { const xViewType& x, const ScalarType beta, const yViewType& y) { static_assert(AViewType::Rank == 2, "BLAS TeamGemv requires rank-2 A matrix"); - return Impl::TeamGemvInternal::template invoke< - MemberType, ScalarType, typename AViewType::non_const_value_type>( + return Impl::TeamGemvInternal::invoke( member, A.extent(1), A.extent(0), alpha, A.data(), A.stride_1(), A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); } @@ -254,8 +251,7 @@ struct TeamGemv { const xViewType& x, const ScalarType beta, const yViewType& y) { static_assert(AViewType::Rank == 2, "BLAS TeamGemv requires rank-2 A matrix"); - return Impl::TeamGemvInternal::template invoke< - MemberType, ScalarType, typename AViewType::non_const_value_type>( + return Impl::TeamGemvInternal::invoke( member, A.extent(1), A.extent(0), alpha, A.data(), A.stride_1(), A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); } @@ -274,7 +270,10 @@ struct TeamGemv { const xViewType& x, const ScalarType beta, const yViewType& y) { static_assert(AViewType::Rank == 2, "BLAS TeamGemv requires rank-2 A matrix"); - Kokkos::abort("TODO: implement conjugate-transpose !"); + return Impl::TeamGemvInternal::invoke( + member, Impl::OpConj{}, A.extent(1), A.extent(0), alpha, A.data(), + A.stride_1(), A.stride_0(), x.data(), x.stride_0(), beta, y.data(), + y.stride_0()); } }; @@ -287,7 +286,10 @@ struct TeamGemv { const xViewType& x, const ScalarType beta, const yViewType& y) { static_assert(AViewType::Rank == 2, "BLAS TeamGemv requires rank-2 A matrix"); - Kokkos::abort("TODO: implement conjugate-transpose !"); + return Impl::TeamGemvInternal::invoke( + member, Impl::OpConj{}, A.extent(1), A.extent(0), alpha, A.data(), + A.stride_1(), A.stride_0(), x.data(), x.stride_0(), beta, y.data(), + y.stride_0()); } }; @@ -342,7 +344,10 @@ struct TeamVectorGemv { const xViewType& x, const ScalarType beta, const yViewType& y) { static_assert(AViewType::Rank == 2, "Batched TeamVectorGemv requires rank-2 A matrix"); - Kokkos::abort("TODO: implement conjugate-transpose !"); + return Impl::TeamVectorGemvInternal::invoke( + member, Impl::OpConj{}, A.extent(1), A.extent(0), alpha, A.data(), + A.stride_1(), A.stride_0(), x.data(), x.stride_0(), beta, y.data(), + y.stride_0()); } }; From 9741625c72c80e99b44ea22478d52a30e339573b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Sat, 13 Aug 2022 14:20:36 +0200 Subject: [PATCH 036/226] implement ConjNoTranspose in GEMV --- src/blas/KokkosBlas2_serial_gemv.hpp | 8 +++ src/blas/KokkosBlas2_team_gemv.hpp | 14 +++++ .../impl/KokkosBlas2_serial_gemv_impl.hpp | 29 ++++++++++ src/blas/impl/KokkosBlas2_team_gemv_spec.hpp | 57 +++++++++++++++++++ src/blas/impl/KokkosBlas_util.hpp | 1 + .../KokkosBlas2_serial_gemv_tpl_spec_decl.hpp | 17 ++++++ test_common/KokkosKernels_TestUtils.hpp | 2 +- unit_test/blas/Test_Blas2_gemv_util.hpp | 8 ++- unit_test/blas/Test_Blas2_serial_gemv.hpp | 17 ++++-- unit_test/blas/Test_Blas2_team_gemv.hpp | 5 ++ unit_test/blas/Test_Blas2_teamvector_gemv.hpp | 5 ++ 11 files changed, 157 insertions(+), 6 deletions(-) diff --git a/src/blas/KokkosBlas2_serial_gemv.hpp b/src/blas/KokkosBlas2_serial_gemv.hpp index 7b26fdeeb7..4c6cec5012 100644 --- a/src/blas/KokkosBlas2_serial_gemv.hpp +++ b/src/blas/KokkosBlas2_serial_gemv.hpp @@ -65,11 +65,19 @@ void KOKKOS_INLINE_FUNCTION gemv(const char trans, const ScalarType& alpha, } else if (trans == 'C' || trans == 'c') { using mode = KokkosBlas::Trans::ConjTranspose; KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); + // + // TODO: what letter should be used here ? + // * in blas "C" means conjugate-transpose + // * in sparse "C" meanse conjugate and "H" conjugate-transpose... + } else if (trans == 'X' || trans == 'x') { + using mode = KokkosBlas::Trans::ConjNoTranspose; + KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); } else { Kokkos::abort("Matrix mode not supported"); } } +// default AlgoTag template void KOKKOS_INLINE_FUNCTION gemv(const char trans, const ScalarType& alpha, const MatrixType& A, const XVector& x, diff --git a/src/blas/KokkosBlas2_team_gemv.hpp b/src/blas/KokkosBlas2_team_gemv.hpp index e886de4f99..afe04aebfd 100644 --- a/src/blas/KokkosBlas2_team_gemv.hpp +++ b/src/blas/KokkosBlas2_team_gemv.hpp @@ -65,6 +65,13 @@ void KOKKOS_INLINE_FUNCTION gemv(const TeamType& team, const char trans, if (trans == 'C' || trans == 'c') TeamGemv::invoke(team, alpha, A, x, beta, y); + // + // TODO: what letter should be used here ? + // * in blas "C" means conjugate-transpose + // * in sparse "C" meanse conjugate and "H" conjugate-transpose... + if (trans == 'X' || trans == 'x') + TeamGemv::invoke(team, alpha, A, + x, beta, y); } // default AlgoTag @@ -92,6 +99,13 @@ team_vector_gemv(const TeamType& team, const char trans, } else if (trans == 'C' || trans == 'c') { KokkosBlas::TeamVectorGemv::invoke( team, alpha, A, x, beta, y); + // + // TODO: what letter should be used here ? + // * in blas "C" means conjugate-transpose + // * in sparse "C" meanse conjugate and "H" conjugate-transpose... + } else if (trans == 'X' || trans == 'x') { + KokkosBlas::TeamVectorGemv::invoke(team, alpha, A, x, beta, y); } else { Kokkos::abort("Matrix mode not supported"); } diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp index 75164f87ab..9a0734d5e4 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp @@ -99,6 +99,7 @@ SerialGemv::invoke( A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); } + /// /// T /// @@ -155,6 +156,34 @@ SerialGemv::invoke( A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); } +/// +/// CNT +/// + +template <> +template +KOKKOS_INLINE_FUNCTION int +SerialGemv::invoke( + const ScalarType alpha, const AViewType &A, const xViewType &x, + const ScalarType beta, const yViewType &y) { + return Impl::SerialGemvInternal::invoke( + Impl::OpConj{}, A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), + A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); +} + +template <> +template +KOKKOS_INLINE_FUNCTION int +SerialGemv::invoke( + const ScalarType alpha, const AViewType &A, const xViewType &x, + const ScalarType beta, const yViewType &y) { + return Impl::SerialGemvInternal::invoke( + Impl::OpConj{}, A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), + A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); +} + } // namespace KokkosBlas #endif diff --git a/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp b/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp index d1c85e9827..e14bca9225 100644 --- a/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp +++ b/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp @@ -293,6 +293,42 @@ struct TeamGemv { } }; +/// +/// CNT +/// + +template +struct TeamGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const ScalarType alpha, const AViewType& A, + const xViewType& x, const ScalarType beta, const yViewType& y) { + static_assert(AViewType::Rank == 2, + "BLAS TeamGemv requires rank-2 A matrix"); + return Impl::TeamGemvInternal::invoke( + member, Impl::OpConj{}, A.extent(0), A.extent(1), alpha, A.data(), + A.stride_0(), A.stride_1(), x.data(), x.stride_0(), beta, y.data(), + y.stride_0()); + } +}; + +template +struct TeamGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const ScalarType alpha, const AViewType& A, + const xViewType& x, const ScalarType beta, const yViewType& y) { + static_assert(AViewType::Rank == 2, + "BLAS TeamGemv requires rank-2 A matrix"); + return Impl::TeamGemvInternal::invoke( + member, Impl::OpConj{}, A.extent(0), A.extent(1), alpha, A.data(), + A.stride_0(), A.stride_1(), x.data(), x.stride_0(), beta, y.data(), + y.stride_0()); + } +}; + /// /// NT /// @@ -351,6 +387,27 @@ struct TeamVectorGemv { } }; +/// +/// CNT +/// + +template +struct TeamVectorGemv { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const ScalarType alpha, const AViewType& A, + const xViewType& x, const ScalarType beta, const yViewType& y) { + static_assert(AViewType::Rank == 2, + "Batched TeamVectorGemv requires rank-2 A matrix"); + return Impl::TeamVectorGemvInternal::invoke( + member, Impl::OpConj{}, A.extent(0), A.extent(1), alpha, A.data(), + A.stride_0(), A.stride_1(), x.data(), x.stride_0(), beta, y.data(), + y.stride_0()); + } +}; + } // namespace KokkosBlas #endif diff --git a/src/blas/impl/KokkosBlas_util.hpp b/src/blas/impl/KokkosBlas_util.hpp index 3ddf0afbd5..0b1bdd5f44 100644 --- a/src/blas/impl/KokkosBlas_util.hpp +++ b/src/blas/impl/KokkosBlas_util.hpp @@ -54,6 +54,7 @@ struct Trans { struct Transpose {}; struct NoTranspose {}; struct ConjTranspose {}; + struct ConjNoTranspose {}; // Note: usually not available in BLAS, MKL, etc. }; #if !defined(KOKKOS_IF_ON_HOST) diff --git a/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp b/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp index c994929b5b..aba0902664 100644 --- a/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp +++ b/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp @@ -199,6 +199,23 @@ SerialGemv::invoke( return 0; } +/// +/// CNT (not supported) +/// + +template <> +template +KOKKOS_INLINE_FUNCTION int +SerialGemv::invoke( + const ScalarType alpha, const AViewType &A, const xViewType &x, + const ScalarType beta, const yViewType &y) { + Kokkos::abort( + "CompactMKL implementation of serial GEMV does not support " + "ConjNoTranspose mode"); + return 0; +} + } // namespace KokkosBlas #endif // __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ diff --git a/test_common/KokkosKernels_TestUtils.hpp b/test_common/KokkosKernels_TestUtils.hpp index b8ce0eb595..8a51139c5f 100644 --- a/test_common/KokkosKernels_TestUtils.hpp +++ b/test_common/KokkosKernels_TestUtils.hpp @@ -370,7 +370,7 @@ KOKKOS_INLINE_FUNCTION void vanillaGEMV(char mode, AlphaType alpha, using ScalarY = typename ViewTypeY::non_const_value_type; using KAT_A = Kokkos::ArithTraits; const bool transposed = mode == 'T' || mode == 'C'; - const bool conjugated = mode == 'C'; + const bool conjugated = mode == 'C' || mode == 'X'; const bool has_beta = beta != Kokkos::ArithTraits::zero(); int M = A.extent(transposed ? 1 : 0); int N = A.extent(transposed ? 0 : 1); diff --git a/unit_test/blas/Test_Blas2_gemv_util.hpp b/unit_test/blas/Test_Blas2_gemv_util.hpp index 0ef31d5ab2..dbb0ebe98c 100644 --- a/unit_test/blas/Test_Blas2_gemv_util.hpp +++ b/unit_test/blas/Test_Blas2_gemv_util.hpp @@ -145,10 +145,13 @@ struct GEMVTest { // skip unsupported combinations } + // Note: all layouts listed here are subview'ed to test Kokkos::LayoutStride template static typename std::enable_if>::type run_layouts( const char *mode) { - // Note: all layouts listed here are subview'ed to test Kokkos::LayoutStride + if (!GemvFunc::template allow_mode(mode[0])) + return; // skip matrix modes not supported by the algorithm #ifdef KOKKOSKERNELS_TEST_LAYOUTLEFT run_view_types(mode); #endif @@ -327,6 +330,9 @@ struct GEMVTest { } \ TEST_F(TestCategory, PREFIX##_gemv_ct_##NAME) { \ PREFIX##_##NAME##_gemv_test::run("C"); \ + } \ + TEST_F(TestCategory, PREFIX##_gemv_cnt_##NAME) { \ + PREFIX##_##NAME##_gemv_test::run("X"); \ } #define TEST_CASE2(PREFIX, FACTORY, NAME, SCALAR, SCALAR_COEF) \ diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index 99ad6da6a8..9561208950 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -30,15 +30,24 @@ struct SerialGemvFactory { #endif >; + template + static constexpr bool is_mkl = + std::is_same::value; + // block testing of CompackMKL on non-vector scalars // (they are not supported by the implementation) template static constexpr bool allow_algorithm = - !std::is_same::value || - (KokkosBatched::is_vector::value && - KokkosBatched::is_vector::value && - KokkosBatched::is_vector::value); + !is_mkl || (KokkosBatched::is_vector::value && + KokkosBatched::is_vector::value && + KokkosBatched::is_vector::value); + + // block testing of ConjNoTranspose mode on CompactMKL + template + static bool allow_mode(char trans) { + return !is_mkl || toupper(trans) != 'X'; + } }; } // namespace Test diff --git a/unit_test/blas/Test_Blas2_team_gemv.hpp b/unit_test/blas/Test_Blas2_team_gemv.hpp index 580ae8fa23..33f22baa2e 100644 --- a/unit_test/blas/Test_Blas2_team_gemv.hpp +++ b/unit_test/blas/Test_Blas2_team_gemv.hpp @@ -27,6 +27,11 @@ struct TeamGemvFactory { template static constexpr bool allow_algorithm = true; + + template + static bool allow_mode(char trans) { + return true; + } }; } // namespace Test diff --git a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp index 12dd066198..2356426ae1 100644 --- a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp +++ b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp @@ -27,6 +27,11 @@ struct TeamVectorGemvFactory { template static constexpr bool allow_algorithm = true; + + template + static bool allow_mode(char trans) { + return true; + } }; } // namespace Test From 8f3cc4828b7ae80a46d170461f1675f0afe01130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Sat, 13 Aug 2022 16:45:08 +0200 Subject: [PATCH 037/226] fix linker conflicts in MKL impl of SerialGemv --- .../KokkosBlas2_serial_gemv_tpl_spec_decl.hpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp b/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp index aba0902664..f35fa4fb34 100644 --- a/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp +++ b/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp @@ -64,7 +64,7 @@ namespace Impl { // Note: using GEMM because there is no GEMV in MKL compact routines #define __IMPL_KK_MKL_DGEMM_COMPACT(SCALAR, MKL_ROUTINE) \ - void kk_mkl_gemm_compact( \ + inline void kk_mkl_gemm_compact( \ MKL_LAYOUT layout, MKL_TRANSPOSE transa, MKL_TRANSPOSE transb, \ MKL_INT m, MKL_INT n, MKL_INT k, SCALAR alpha, const SCALAR *a, \ MKL_INT ldap, const SCALAR *b, MKL_INT ldbp, SCALAR beta, SCALAR *c, \ @@ -81,31 +81,31 @@ __IMPL_KK_MKL_DGEMM_COMPACT(float, mkl_sgemm_compact) #undef __IMPL_KK_MKL_DGEMM_COMPACT template -MKL_COMPACT_PACK mkl_compact_format() { +inline MKL_COMPACT_PACK mkl_compact_format() { Kokkos::abort("vector size not supported"); } template <> -MKL_COMPACT_PACK mkl_compact_format() { +inline MKL_COMPACT_PACK mkl_compact_format() { return MKL_COMPACT_SSE; } template <> -MKL_COMPACT_PACK mkl_compact_format() { +inline MKL_COMPACT_PACK mkl_compact_format() { return MKL_COMPACT_SSE; } template <> -MKL_COMPACT_PACK mkl_compact_format() { +inline MKL_COMPACT_PACK mkl_compact_format() { return MKL_COMPACT_AVX; } template <> -MKL_COMPACT_PACK mkl_compact_format() { +inline MKL_COMPACT_PACK mkl_compact_format() { return MKL_COMPACT_AVX; } template <> -MKL_COMPACT_PACK mkl_compact_format() { +inline MKL_COMPACT_PACK mkl_compact_format() { return MKL_COMPACT_AVX512; } template <> -MKL_COMPACT_PACK mkl_compact_format() { +inline MKL_COMPACT_PACK mkl_compact_format() { return MKL_COMPACT_AVX512; } From 2a05bb391225df8a11fb8053a7ae8f9027ef97e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Sat, 13 Aug 2022 14:37:52 +0200 Subject: [PATCH 038/226] remove obsolete/duplicated TeamGEMV --- src/blas/impl/KokkosBlas2_team_gemv_spec.hpp | 111 ------------------ .../impl/KokkosSparse_spmv_bsrmatrix_impl.hpp | 23 ++-- 2 files changed, 8 insertions(+), 126 deletions(-) diff --git a/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp b/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp index e14bca9225..273a9cddb2 100644 --- a/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp +++ b/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp @@ -52,117 +52,6 @@ #include namespace KokkosBlas { -namespace Experimental { -namespace Impl { - -template -struct team_gemv_tpl_spec_avail { - constexpr static bool value = false; -}; - -// Unification and Specialization layer -template ::value> -struct TeamGEMV { - static KOKKOS_INLINE_FUNCTION void team_gemv( - const TeamType& team, const typename XVector::non_const_value_type& alpha, - const MatrixType& A, const XVector& x, - const typename YVector::non_const_value_type& beta, const YVector& y); -}; - -template -struct TeamGEMV { - typedef typename Kokkos::Details::InnerProductSpaceTraits< - typename MatrixType::non_const_value_type>::dot_type dot_type; - static KOKKOS_INLINE_FUNCTION void team_gemv( - const TeamType& team, const typename XVector::non_const_value_type& alpha, - const MatrixType& A, const XVector& x, - const typename YVector::non_const_value_type& beta, const YVector& y) { - const int N = A.extent(0); - const int M = A.extent(1); - - Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&](const int& i) { - dot_type Ax_i; - Kokkos::parallel_reduce( - Kokkos::ThreadVectorRange(team, M), - [&](const int& j, dot_type& val) { val += A(i, j) * x(j); }, Ax_i); - y(i) = beta * y(i) + alpha * Ax_i; - }); - } -}; - -template -struct TeamGEMV { - typedef typename MatrixType::non_const_value_type value_type; - typedef typename Kokkos::Details::InnerProductSpaceTraits< - typename MatrixType::non_const_value_type>::dot_type dot_type; - static KOKKOS_INLINE_FUNCTION void team_gemv( - const TeamType& team, const typename XVector::non_const_value_type& alpha, - const MatrixType& A, const XVector& x, - const typename YVector::non_const_value_type& beta, const YVector& y) { - const int N = A.extent(0); - const int M = A.extent(1); - - Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&](const int& i) { - dot_type Ax_i; - Kokkos::parallel_reduce( - Kokkos::ThreadVectorRange(team, M), - [&](const int& j, dot_type& val) { - val += Kokkos::ArithTraits::conj(A(i, j)) * x(j); - }, - Ax_i); - y(i) = beta * y(i) + alpha * Ax_i; - }); - } -}; - -template -struct TeamGEMV { - typedef typename Kokkos::Details::InnerProductSpaceTraits< - typename MatrixType::non_const_value_type>::dot_type dot_type; - static KOKKOS_INLINE_FUNCTION void team_gemv( - const TeamType& team, const typename XVector::non_const_value_type& alpha, - const MatrixType& A, const XVector& x, - const typename YVector::non_const_value_type& beta, const YVector& y) { - const int N = A.extent(1); - const int M = A.extent(0); - Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&](const int& i) { - dot_type Ax_i; - Kokkos::parallel_reduce( - Kokkos::ThreadVectorRange(team, M), - [&](const int& j, dot_type& val) { val += A(j, i) * x(j); }, Ax_i); - y(i) = beta * y(i) + alpha * Ax_i; - }); - } -}; - -template -struct TeamGEMV { - typedef typename MatrixType::non_const_value_type value_type; - typedef - typename Kokkos::Details::InnerProductSpaceTraits::dot_type - dot_type; - static KOKKOS_INLINE_FUNCTION void team_gemv( - const TeamType& team, const typename XVector::non_const_value_type& alpha, - const MatrixType& A, const XVector& x, - const typename YVector::non_const_value_type& beta, const YVector& y) { - const int N = A.extent(1); - const int M = A.extent(0); - Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&](const int& i) { - dot_type Ax_i; - Kokkos::parallel_reduce( - Kokkos::ThreadVectorRange(team, M), - [&](const int& j, dot_type& val) { - val += Kokkos::ArithTraits::conj(A(j, i)) * x(j); - }, - Ax_i); - y(i) = beta * y(i) + alpha * Ax_i; - }); - } -}; -} // namespace Impl -} // namespace Experimental template diff --git a/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp b/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp index 9796c12352..89a5f79ba9 100644 --- a/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp +++ b/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp @@ -650,20 +650,16 @@ struct BSR_GEMV_Functor { const auto count = myRow.length; if (conjugate) { - typedef Kokkos::View - block_values_type; - for (ordinal_type jBlock = 0; jBlock < count; ++jBlock) { const auto A_cur = myRow.block(jBlock); const auto X_blkCol = myRow.block_colidx(jBlock); const auto X_ptBeg = X_blkCol * block_dim; const auto X_cur = Kokkos::subview( m_x, ::Kokkos::make_pair(X_ptBeg, X_ptBeg + block_dim)); - KokkosBlas::Experimental::Impl::TeamGEMV< - team_member, block_values_type, XVector, YVector, -1, - false>::team_gemv(dev, alpha, A_cur, X_cur, val_one, Y_cur); + KokkosBlas::TeamVectorGemv< + team_member, KokkosBlas::Trans::ConjNoTranspose, + KokkosBlas::Algo::Gemv::Default>::invoke(dev, alpha, A_cur, X_cur, + val_one, Y_cur); } } else { for (ordinal_type jBlock = 0; jBlock < count; ++jBlock) { @@ -944,19 +940,16 @@ struct BSR_GEMV_Transpose_Functor { block_dim * sizeof(y_value_type)); if (conjugate) { - typedef Kokkos::View - block_values_type; Kokkos::View shared_view(shared_y, block_dim); for (ordinal_type jBlock = 0; jBlock < count; ++jBlock) { const auto A_cur = myRow.block(jBlock); // - KokkosBlas::Experimental::Impl::TeamGEMV< - team_member, block_values_type, XVector, YVector, 2, - false>::team_gemv(dev, alpha, A_cur, X_cur, val_zero, shared_view); + KokkosBlas::TeamVectorGemv< + team_member, KokkosBlas::Trans::ConjTranspose, + KokkosBlas::Algo::Gemv::Default>::invoke(dev, alpha, A_cur, X_cur, + val_zero, shared_view); // dev.team_barrier(); // From 4bc8797d4c4459110c30ecefd53f41944933adb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Sat, 13 Aug 2022 16:09:05 +0200 Subject: [PATCH 039/226] Add top-level selective GEMV interface --- src/batched/KokkosBatched_Util.hpp | 13 +---- src/blas/KokkosBlas2_gemv.hpp | 53 +++++++++++++++++++ src/blas/KokkosBlas2_serial_gemv.hpp | 18 ++++--- src/blas/KokkosBlas2_team_gemv.hpp | 46 ++++++++-------- src/blas/impl/KokkosBlas_util.hpp | 13 +++++ unit_test/blas/Test_Blas2_serial_gemv.hpp | 11 ++-- unit_test/blas/Test_Blas2_team_gemv.hpp | 7 +-- unit_test/blas/Test_Blas2_teamvector_gemv.hpp | 3 +- 8 files changed, 114 insertions(+), 50 deletions(-) diff --git a/src/batched/KokkosBatched_Util.hpp b/src/batched/KokkosBatched_Util.hpp index 6022b1b607..3e97c97d72 100644 --- a/src/batched/KokkosBatched_Util.hpp +++ b/src/batched/KokkosBatched_Util.hpp @@ -283,19 +283,8 @@ struct Direct { struct Backward {}; }; -struct Mode { - struct Serial { - static const char *name() { return "Serial"; } - }; - struct Team { - static const char *name() { return "Team"; } - }; - struct TeamVector { - static const char *name() { return "TeamVector"; } - }; -}; - using KokkosBlas::Algo; +using KokkosBlas::Mode; struct Util { template diff --git a/src/blas/KokkosBlas2_gemv.hpp b/src/blas/KokkosBlas2_gemv.hpp index 5c37b74c9b..6acf25ada7 100644 --- a/src/blas/KokkosBlas2_gemv.hpp +++ b/src/blas/KokkosBlas2_gemv.hpp @@ -49,6 +49,8 @@ /// Tpetra::MultiVector use cases. #include +#include +#include #include #include #include @@ -206,6 +208,57 @@ void gemv(const char trans[], typename AViewType::const_value_type& alpha, gemv(space, trans, alpha, A, x, beta, y); } +namespace Experimental { +/// +/// Selective Interface +/// +template +struct Gemv { + template + static void KOKKOS_INLINE_FUNCTION + invoke(const MemberType& member, const char trans, const ScalarType& alpha, + const MatrixType& A, const XVector& x, const ScalarType& beta, + const YVector& y); +}; + +template +struct Gemv { + template + static void KOKKOS_INLINE_FUNCTION + invoke(const MemberType& member, const char trans, const ScalarType& alpha, + const MatrixType& A, const XVector& x, const ScalarType& beta, + const YVector& y) { + serial_gemv(trans, alpha, A, x, beta, y); + } +}; + +template +struct Gemv { + template + static void KOKKOS_INLINE_FUNCTION + invoke(const MemberType& member, const char trans, const ScalarType& alpha, + const MatrixType& A, const XVector& x, const ScalarType& beta, + const YVector& y) { + team_gemv(member, trans, alpha, A, x, beta, y); + } +}; + +template +struct Gemv { + template + static void KOKKOS_INLINE_FUNCTION + invoke(const MemberType& member, const char trans, const ScalarType& alpha, + const MatrixType& A, const XVector& x, const ScalarType& beta, + const YVector& y) { + teamvector_gemv(member, trans, alpha, A, x, beta, y); + } +}; + +} // namespace Experimental } // namespace KokkosBlas #endif // KOKKOS_BLAS2_MV_HPP_ diff --git a/src/blas/KokkosBlas2_serial_gemv.hpp b/src/blas/KokkosBlas2_serial_gemv.hpp index 4c6cec5012..1f53fba87e 100644 --- a/src/blas/KokkosBlas2_serial_gemv.hpp +++ b/src/blas/KokkosBlas2_serial_gemv.hpp @@ -53,9 +53,11 @@ namespace Experimental { template -void KOKKOS_INLINE_FUNCTION gemv(const char trans, const ScalarType& alpha, - const MatrixType& A, const XVector& x, - const ScalarType& beta, const YVector& y) { +void KOKKOS_INLINE_FUNCTION serial_gemv(const char trans, + const ScalarType& alpha, + const MatrixType& A, const XVector& x, + const ScalarType& beta, + const YVector& y) { if (trans == 'N' || trans == 'n') { using mode = KokkosBlas::Trans::NoTranspose; KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); @@ -79,10 +81,12 @@ void KOKKOS_INLINE_FUNCTION gemv(const char trans, const ScalarType& alpha, // default AlgoTag template -void KOKKOS_INLINE_FUNCTION gemv(const char trans, const ScalarType& alpha, - const MatrixType& A, const XVector& x, - const ScalarType& beta, const YVector& y) { - gemv(trans, alpha, A, x, beta, y); +void KOKKOS_INLINE_FUNCTION serial_gemv(const char trans, + const ScalarType& alpha, + const MatrixType& A, const XVector& x, + const ScalarType& beta, + const YVector& y) { + serial_gemv(trans, alpha, A, x, beta, y); } } // namespace Experimental diff --git a/src/blas/KokkosBlas2_team_gemv.hpp b/src/blas/KokkosBlas2_team_gemv.hpp index afe04aebfd..1950356804 100644 --- a/src/blas/KokkosBlas2_team_gemv.hpp +++ b/src/blas/KokkosBlas2_team_gemv.hpp @@ -52,10 +52,11 @@ namespace Experimental { template -void KOKKOS_INLINE_FUNCTION gemv(const TeamType& team, const char trans, - const ScalarType& alpha, const MatrixType& A, - const XVector& x, const ScalarType& beta, - const YVector& y) { +void KOKKOS_INLINE_FUNCTION team_gemv(const TeamType& team, const char trans, + const ScalarType& alpha, + const MatrixType& A, const XVector& x, + const ScalarType& beta, + const YVector& y) { if (trans == 'N' || trans == 'n') TeamGemv::invoke(team, alpha, A, x, beta, y); @@ -75,21 +76,22 @@ void KOKKOS_INLINE_FUNCTION gemv(const TeamType& team, const char trans, } // default AlgoTag -template -void KOKKOS_INLINE_FUNCTION -gemv(const TeamType& team, const char trans, - const ScalarType& alpha, - const MatrixType& A, const XVector& x, - const ScalarType& beta, const YVector& y) { - gemv(team, trans, alpha, A, x, beta, y); +template +void KOKKOS_INLINE_FUNCTION team_gemv(const TeamType& team, const char trans, + const ScalarType& alpha, + const MatrixType& A, const XVector& x, + const ScalarType& beta, + const YVector& y) { + team_gemv(team, trans, alpha, A, x, beta, y); } template void KOKKOS_INLINE_FUNCTION -team_vector_gemv(const TeamType& team, const char trans, - const ScalarType& alpha, const MatrixType& A, const XVector& x, - const ScalarType& beta, const YVector& y) { +teamvector_gemv(const TeamType& team, const char trans, const ScalarType& alpha, + const MatrixType& A, const XVector& x, const ScalarType& beta, + const YVector& y) { if (trans == 'N' || trans == 'n') { KokkosBlas::TeamVectorGemv::invoke( team, alpha, A, x, beta, y); @@ -112,14 +114,14 @@ team_vector_gemv(const TeamType& team, const char trans, } // default AlgoTag -template -void KOKKOS_INLINE_FUNCTION team_vector_gemv( - const TeamType& team, const char trans, - const ScalarType& alpha, const MatrixType& A, - const XVector& x, const ScalarType& beta, - const YVector& y) { - team_vector_gemv(team, trans, alpha, A, x, - beta, y); +template +void KOKKOS_INLINE_FUNCTION +team_vector_gemv(const TeamType& team, const char trans, + const ScalarType& alpha, const MatrixType& A, const XVector& x, + const ScalarType& beta, const YVector& y) { + teamvector_gemv(team, trans, alpha, A, x, + beta, y); } } // namespace Experimental diff --git a/src/blas/impl/KokkosBlas_util.hpp b/src/blas/impl/KokkosBlas_util.hpp index 0b1bdd5f44..7ed3afa9c1 100644 --- a/src/blas/impl/KokkosBlas_util.hpp +++ b/src/blas/impl/KokkosBlas_util.hpp @@ -50,6 +50,19 @@ namespace KokkosBlas { //////// Tags for BLAS //////// + +struct Mode { + struct Serial { + static const char *name() { return "Serial"; } + }; + struct Team { + static const char *name() { return "Team"; } + }; + struct TeamVector { + static const char *name() { return "TeamVector"; } + }; +}; + struct Trans { struct Transpose {}; struct NoTranspose {}; diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index 9561208950..5c98c82b6b 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -1,6 +1,7 @@ +#include #include // for ETI test guards // Note: include serial gemv before util so it knows if CompactMKL is available -#include +#include #include namespace Test { @@ -9,10 +10,10 @@ template KK_DEFINE_BLAS2_GEMV_TEST_OP_CLASS(SerialGEMVOp) template -KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& /* member */) const { - KokkosBlas::Experimental::gemv(params::trans, params::alpha, - params::A, params::x, params::beta, - params::y); +KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { + KokkosBlas::Experimental::Gemv::invoke( + member, params::trans, params::alpha, params::A, params::x, params::beta, + params::y); } KK_END_BLAS2_GEMV_TEST_OP_CLASS diff --git a/unit_test/blas/Test_Blas2_team_gemv.hpp b/unit_test/blas/Test_Blas2_team_gemv.hpp index 33f22baa2e..0ea3762c34 100644 --- a/unit_test/blas/Test_Blas2_team_gemv.hpp +++ b/unit_test/blas/Test_Blas2_team_gemv.hpp @@ -1,3 +1,4 @@ +#include #include // for test/inst guards // Note: include serial gemv before util so it knows if CompactMKL is available #include @@ -10,9 +11,9 @@ template KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { - KokkosBlas::Experimental::gemv(member, params::trans, params::alpha, - params::A, params::x, params::beta, - params::y); + KokkosBlas::Experimental::Gemv::invoke( + member, params::trans, params::alpha, params::A, params::x, params::beta, + params::y); } KK_END_BLAS2_GEMV_TEST_OP_CLASS diff --git a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp index 2356426ae1..79d138c922 100644 --- a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp +++ b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp @@ -1,3 +1,4 @@ +#include #include // for test/inst guards // Note: include serial gemv before util so it knows if CompactMKL is available #include @@ -10,7 +11,7 @@ template KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { - KokkosBlas::Experimental::team_vector_gemv( + KokkosBlas::Experimental::Gemv::invoke( member, params::trans, params::alpha, params::A, params::x, params::beta, params::y); } From 5b463fd1cdc0707b8e4eefe4a1d4200a45ba4f0d Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 15 Aug 2022 14:35:36 -0600 Subject: [PATCH 040/226] Team/TeamVector GEMV: fixing issues with CI testing Mostly fixing some small issues with unused parameters/variables in specific code paths. Also changing the logic around the MKL compact library testing since Intel 18 had an internal compiler error with the original implementation. --- .../KokkosBatched_Gemv_TeamVector_Impl.hpp | 8 +-- .../impl/KokkosBatched_Gemv_Team_Impl.hpp | 8 +-- src/blas/KokkosBlas2_gemv.hpp | 2 +- unit_test/blas/Test_Blas2_gemv_util.hpp | 53 +++++----------- unit_test/blas/Test_Blas2_serial_gemv.hpp | 63 +++++++++---------- unit_test/blas/Test_Blas2_team_gemv.hpp | 30 +++++---- unit_test/blas/Test_Blas2_teamvector_gemv.hpp | 30 +++++---- 7 files changed, 82 insertions(+), 112 deletions(-) diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp b/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp index 45eb828aa8..a7e63e583e 100644 --- a/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp +++ b/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp @@ -47,8 +47,8 @@ struct TeamVectorGemv { template KOKKOS_INLINE_FUNCTION static int invoke( - const MemberType &member, const ScalarType alpha, const AViewType &A, - const xViewType &x, const ScalarType beta, const yViewType &y) { + const MemberType &/*member*/, const ScalarType /*alpha*/, const AViewType &/*A*/, + const xViewType &/*x*/, const ScalarType /*beta*/, const yViewType &/*y*/) { static_assert(AViewType::Rank == 3, "Batched TeamVectorGemv requires rank-3 A matrix (use " "KokkosBlas::TeamVectorGemv for regular rank-2 matrix)"); @@ -86,8 +86,8 @@ struct TeamVectorGemv { template KOKKOS_INLINE_FUNCTION static int invoke( - const MemberType &member, const ScalarType alpha, const AViewType &A, - const xViewType &x, const ScalarType beta, const yViewType &y) { + const MemberType &/*member*/, const ScalarType /*alpha*/, const AViewType &/*A*/, + const xViewType &/*x*/, const ScalarType /*beta*/, const yViewType &/*y*/) { static_assert(AViewType::Rank == 3, "Batched TeamVectorGemv requires rank-3 A matrix (use " "KokkosBlas::TeamVectorGemv for regular rank-2 matrix)"); diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp b/src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp index 6220ab2916..20a9fbb329 100644 --- a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp +++ b/src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp @@ -47,8 +47,8 @@ struct TeamGemv { template KOKKOS_INLINE_FUNCTION static int invoke( - const MemberType &member, const ScalarType alpha, const AViewType &A, - const xViewType &x, const ScalarType beta, const yViewType &y) { + const MemberType &/*member*/, const ScalarType /*alpha*/, const AViewType &/*A*/, + const xViewType &/*x*/, const ScalarType /*beta*/, const yViewType &/*y*/) { static_assert(AViewType::Rank == 3, "Batched TeamGemv requires rank-3 A matrix (use " "KokkosBlas::TeamGemv for regular rank-2 matrix)"); @@ -86,8 +86,8 @@ struct TeamGemv { template KOKKOS_INLINE_FUNCTION static int invoke( - const MemberType &member, const ScalarType alpha, const AViewType &A, - const xViewType &x, const ScalarType beta, const yViewType &y) { + const MemberType &/*member*/, const ScalarType /*alpha*/, const AViewType &/*A*/, + const xViewType &/*x*/, const ScalarType /*beta*/, const yViewType &/*y*/) { static_assert(AViewType::Rank == 3, "Batched TeamGemv requires rank-3 A matrix (use " "KokkosBlas::TeamGemv for regular rank-2 matrix)"); diff --git a/src/blas/KokkosBlas2_gemv.hpp b/src/blas/KokkosBlas2_gemv.hpp index 6acf25ada7..fb5e008d4d 100644 --- a/src/blas/KokkosBlas2_gemv.hpp +++ b/src/blas/KokkosBlas2_gemv.hpp @@ -227,7 +227,7 @@ struct Gemv { template static void KOKKOS_INLINE_FUNCTION - invoke(const MemberType& member, const char trans, const ScalarType& alpha, + invoke(const MemberType& /*member*/, const char trans, const ScalarType& alpha, const MatrixType& A, const XVector& x, const ScalarType& beta, const YVector& y) { serial_gemv(trans, alpha, A, x, beta, y); diff --git a/unit_test/blas/Test_Blas2_gemv_util.hpp b/unit_test/blas/Test_Blas2_gemv_util.hpp index dbb0ebe98c..29969525a8 100644 --- a/unit_test/blas/Test_Blas2_gemv_util.hpp +++ b/unit_test/blas/Test_Blas2_gemv_util.hpp @@ -30,26 +30,22 @@ struct GemvOpBase { YType y; }; -#define KK_DEFINE_BLAS2_GEMV_TEST_OP_CLASS(ClassName) \ - struct ClassName : public GemvOpBase { \ - using params = GemvOpBase; \ - ClassName(char trans_, ScalarType alpha_, AType A_, XType x_, \ - ScalarType beta_, YType y_) \ - : params(trans_, alpha_, A_, x_, beta_, y_) {} -#define KK_END_BLAS2_GEMV_TEST_OP_CLASS \ - } \ - ; - // Note: vanillaGEMV is called on device here - alternatively one can move // _strided_ data using safe_device_to_host_deep_copy() etc. template -KK_DEFINE_BLAS2_GEMV_TEST_OP_CLASS(RefGEMVOp) -template -KOKKOS_INLINE_FUNCTION void operator()(const TeamMember & /* member */) const { - vanillaGEMV(params::trans, params::alpha, params::A, params::x, params::beta, - params::y); -} -KK_END_BLAS2_GEMV_TEST_OP_CLASS +struct RefGEMVOp : public GemvOpBase { + using params = GemvOpBase; + + RefGEMVOp(char trans_, ScalarType alpha_, AType A_, XType x_, + ScalarType beta_, YType y_) + : params(trans_, alpha_, A_, x_, beta_, y_) {} + + template + KOKKOS_INLINE_FUNCTION void operator()(const TeamMember & /* member */) const { + vanillaGEMV(params::trans, params::alpha, params::A, params::x, params::beta, + params::y); + } +}; // RefGEMVOp // fill regular view with random values template static std::enable_if_t::value> - run_algorithms(const char *mode) {} + run_algorithms(const char */*mode*/) {} template static @@ -134,24 +130,9 @@ struct GEMVTest { run_algorithms(mode); } - template - static constexpr bool allow_algorithm = - GemvFunc::template allow_algorithm; - - template - static typename std::enable_if>::type run_layouts( - const char *mode) { - // skip unsupported combinations - } - // Note: all layouts listed here are subview'ed to test Kokkos::LayoutStride template - static typename std::enable_if>::type run_layouts( - const char *mode) { - if (!GemvFunc::template allow_mode(mode[0])) - return; // skip matrix modes not supported by the algorithm + static void run_layouts(const char *mode) { #ifdef KOKKOSKERNELS_TEST_LAYOUTLEFT run_view_types(mode); #endif @@ -313,7 +294,7 @@ struct GEMVTest { fill_random_view(x, rand_pool); fill_random_view(y, rand_pool); } -}; +}; // struct GEMVTest } // namespace Test @@ -340,4 +321,4 @@ struct GEMVTest { #define TEST_CASE(PREFIX, FACTORY, NAME, SCALAR) \ TEST_CASE2(PREFIX, FACTORY, NAME, SCALAR, SCALAR) -#endif // TEST_BLAS2_GEMV_UTIL_HPP \ No newline at end of file +#endif // TEST_BLAS2_GEMV_UTIL_HPP diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index 5c98c82b6b..30617e14e6 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -8,14 +8,20 @@ namespace Test { template -KK_DEFINE_BLAS2_GEMV_TEST_OP_CLASS(SerialGEMVOp) -template -KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { - KokkosBlas::Experimental::Gemv::invoke( - member, params::trans, params::alpha, params::A, params::x, params::beta, - params::y); -} -KK_END_BLAS2_GEMV_TEST_OP_CLASS +struct SerialGEMVOp : public GemvOpBase { + using params = GemvOpBase; + + SerialGEMVOp(char trans_, ScalarType alpha_, AType A_, XType x_, + ScalarType beta_, YType y_) + : params(trans_, alpha_, A_, x_, beta_, y_) {} + + template + KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { + KokkosBlas::Experimental::Gemv::invoke( + member, params::trans, params::alpha, params::A, params::x, params::beta, + params::y); + } +}; struct SerialGemvFactory { template ; using algorithms = std::tuple; +}; + #ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ - , - KokkosBlas::Algo::Gemv::CompactMKL -#endif - >; - - template - static constexpr bool is_mkl = - std::is_same::value; - - // block testing of CompackMKL on non-vector scalars - // (they are not supported by the implementation) - template - static constexpr bool allow_algorithm = - !is_mkl || (KokkosBatched::is_vector::value && - KokkosBatched::is_vector::value && - KokkosBatched::is_vector::value); - - // block testing of ConjNoTranspose mode on CompactMKL - template - static bool allow_mode(char trans) { - return !is_mkl || toupper(trans) != 'X'; - } +struct SerialMKLGemvFactory { + template + using functor_type = + SerialGEMVOp; + + using algorithms = std::tuple; }; +#endif } // namespace Test @@ -66,9 +59,9 @@ TEST_SERIAL_CASE(float, float) using simd_float_sse = ::Test::simd_vector; using simd_float_avx = ::Test::simd_vector; using simd_float_avx512 = ::Test::simd_vector; -TEST_SERIAL_CASE2(mkl_float_sse, simd_float_sse, float) -TEST_SERIAL_CASE2(mkl_float_avx, simd_float_avx, float) -TEST_SERIAL_CASE2(mkl_float_avx512, simd_float_avx512, float) +TEST_CASE2(serial, SerialMKLGemvFactory, mkl_float_sse, simd_float_sse, float) +TEST_CASE2(serial, SerialMKLGemvFactory, mkl_float_avx, simd_float_avx, float) +TEST_CASE2(serial, SerialMKLGemvFactory, mkl_float_avx512, simd_float_avx512, float) #endif #endif diff --git a/unit_test/blas/Test_Blas2_team_gemv.hpp b/unit_test/blas/Test_Blas2_team_gemv.hpp index 0ea3762c34..7c4588fa33 100644 --- a/unit_test/blas/Test_Blas2_team_gemv.hpp +++ b/unit_test/blas/Test_Blas2_team_gemv.hpp @@ -8,14 +8,20 @@ namespace Test { template -KK_DEFINE_BLAS2_GEMV_TEST_OP_CLASS(TeamGEMVOp) -template -KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { - KokkosBlas::Experimental::Gemv::invoke( - member, params::trans, params::alpha, params::A, params::x, params::beta, - params::y); -} -KK_END_BLAS2_GEMV_TEST_OP_CLASS +struct TeamGEMVOp : public GemvOpBase { + using params = GemvOpBase; + + TeamGEMVOp(char trans_, ScalarType alpha_, AType A_, XType x_, + ScalarType beta_, YType y_) + : params(trans_, alpha_, A_, x_, beta_, y_) {} + + template + KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { + KokkosBlas::Experimental::Gemv::invoke( + member, params::trans, params::alpha, params::A, params::x, params::beta, + params::y); + } +}; struct TeamGemvFactory { template ; - - template - static constexpr bool allow_algorithm = true; - - template - static bool allow_mode(char trans) { - return true; - } }; } // namespace Test diff --git a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp index 79d138c922..ea17d12d86 100644 --- a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp +++ b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp @@ -8,14 +8,20 @@ namespace Test { template -KK_DEFINE_BLAS2_GEMV_TEST_OP_CLASS(TeamVectorGEMVOp) -template -KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { - KokkosBlas::Experimental::Gemv::invoke( - member, params::trans, params::alpha, params::A, params::x, params::beta, - params::y); -} -KK_END_BLAS2_GEMV_TEST_OP_CLASS +struct TeamVectorGEMVOp : public GemvOpBase { + using params = GemvOpBase; + + TeamVectorGEMVOp(char trans_, ScalarType alpha_, AType A_, XType x_, + ScalarType beta_, YType y_) + : params(trans_, alpha_, A_, x_, beta_, y_) {} + + template + KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { + KokkosBlas::Experimental::Gemv::invoke( + member, params::trans, params::alpha, params::A, params::x, params::beta, + params::y); + } +}; struct TeamVectorGemvFactory { template ; - - template - static constexpr bool allow_algorithm = true; - - template - static bool allow_mode(char trans) { - return true; - } }; } // namespace Test From 134fc069e3fac4a2d6d8e576dcaf5aaf64f1cf3e Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 15 Aug 2022 14:47:55 -0600 Subject: [PATCH 041/226] Team/TeamVector GEMV: applying clang-format after fixes for CI --- .../KokkosBatched_Gemv_TeamVector_Impl.hpp | 18 ++++++++++++------ .../impl/KokkosBatched_Gemv_Team_Impl.hpp | 18 ++++++++++++------ src/blas/KokkosBlas2_gemv.hpp | 6 +++--- unit_test/blas/Test_Blas2_gemv_util.hpp | 17 +++++++++-------- unit_test/blas/Test_Blas2_serial_gemv.hpp | 11 ++++++----- unit_test/blas/Test_Blas2_team_gemv.hpp | 8 ++++---- unit_test/blas/Test_Blas2_teamvector_gemv.hpp | 12 +++++++----- 7 files changed, 53 insertions(+), 37 deletions(-) diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp b/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp index a7e63e583e..73e146ab01 100644 --- a/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp +++ b/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp @@ -46,9 +46,12 @@ template struct TeamVectorGemv { template - KOKKOS_INLINE_FUNCTION static int invoke( - const MemberType &/*member*/, const ScalarType /*alpha*/, const AViewType &/*A*/, - const xViewType &/*x*/, const ScalarType /*beta*/, const yViewType &/*y*/) { + KOKKOS_INLINE_FUNCTION static int invoke(const MemberType & /*member*/, + const ScalarType /*alpha*/, + const AViewType & /*A*/, + const xViewType & /*x*/, + const ScalarType /*beta*/, + const yViewType & /*y*/) { static_assert(AViewType::Rank == 3, "Batched TeamVectorGemv requires rank-3 A matrix (use " "KokkosBlas::TeamVectorGemv for regular rank-2 matrix)"); @@ -85,9 +88,12 @@ template struct TeamVectorGemv { template - KOKKOS_INLINE_FUNCTION static int invoke( - const MemberType &/*member*/, const ScalarType /*alpha*/, const AViewType &/*A*/, - const xViewType &/*x*/, const ScalarType /*beta*/, const yViewType &/*y*/) { + KOKKOS_INLINE_FUNCTION static int invoke(const MemberType & /*member*/, + const ScalarType /*alpha*/, + const AViewType & /*A*/, + const xViewType & /*x*/, + const ScalarType /*beta*/, + const yViewType & /*y*/) { static_assert(AViewType::Rank == 3, "Batched TeamVectorGemv requires rank-3 A matrix (use " "KokkosBlas::TeamVectorGemv for regular rank-2 matrix)"); diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp b/src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp index 20a9fbb329..274cfab523 100644 --- a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp +++ b/src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp @@ -46,9 +46,12 @@ template struct TeamGemv { template - KOKKOS_INLINE_FUNCTION static int invoke( - const MemberType &/*member*/, const ScalarType /*alpha*/, const AViewType &/*A*/, - const xViewType &/*x*/, const ScalarType /*beta*/, const yViewType &/*y*/) { + KOKKOS_INLINE_FUNCTION static int invoke(const MemberType & /*member*/, + const ScalarType /*alpha*/, + const AViewType & /*A*/, + const xViewType & /*x*/, + const ScalarType /*beta*/, + const yViewType & /*y*/) { static_assert(AViewType::Rank == 3, "Batched TeamGemv requires rank-3 A matrix (use " "KokkosBlas::TeamGemv for regular rank-2 matrix)"); @@ -85,9 +88,12 @@ template struct TeamGemv { template - KOKKOS_INLINE_FUNCTION static int invoke( - const MemberType &/*member*/, const ScalarType /*alpha*/, const AViewType &/*A*/, - const xViewType &/*x*/, const ScalarType /*beta*/, const yViewType &/*y*/) { + KOKKOS_INLINE_FUNCTION static int invoke(const MemberType & /*member*/, + const ScalarType /*alpha*/, + const AViewType & /*A*/, + const xViewType & /*x*/, + const ScalarType /*beta*/, + const yViewType & /*y*/) { static_assert(AViewType::Rank == 3, "Batched TeamGemv requires rank-3 A matrix (use " "KokkosBlas::TeamGemv for regular rank-2 matrix)"); diff --git a/src/blas/KokkosBlas2_gemv.hpp b/src/blas/KokkosBlas2_gemv.hpp index fb5e008d4d..fe8418cc40 100644 --- a/src/blas/KokkosBlas2_gemv.hpp +++ b/src/blas/KokkosBlas2_gemv.hpp @@ -227,9 +227,9 @@ struct Gemv { template static void KOKKOS_INLINE_FUNCTION - invoke(const MemberType& /*member*/, const char trans, const ScalarType& alpha, - const MatrixType& A, const XVector& x, const ScalarType& beta, - const YVector& y) { + invoke(const MemberType& /*member*/, const char trans, + const ScalarType& alpha, const MatrixType& A, const XVector& x, + const ScalarType& beta, const YVector& y) { serial_gemv(trans, alpha, A, x, beta, y); } }; diff --git a/unit_test/blas/Test_Blas2_gemv_util.hpp b/unit_test/blas/Test_Blas2_gemv_util.hpp index 29969525a8..ad232ed79c 100644 --- a/unit_test/blas/Test_Blas2_gemv_util.hpp +++ b/unit_test/blas/Test_Blas2_gemv_util.hpp @@ -37,15 +37,16 @@ struct RefGEMVOp : public GemvOpBase { using params = GemvOpBase; RefGEMVOp(char trans_, ScalarType alpha_, AType A_, XType x_, - ScalarType beta_, YType y_) - : params(trans_, alpha_, A_, x_, beta_, y_) {} + ScalarType beta_, YType y_) + : params(trans_, alpha_, A_, x_, beta_, y_) {} template - KOKKOS_INLINE_FUNCTION void operator()(const TeamMember & /* member */) const { - vanillaGEMV(params::trans, params::alpha, params::A, params::x, params::beta, - params::y); + KOKKOS_INLINE_FUNCTION void operator()( + const TeamMember & /* member */) const { + vanillaGEMV(params::trans, params::alpha, params::A, params::x, + params::beta, params::y); } -}; // RefGEMVOp +}; // RefGEMVOp // fill regular view with random values template static std::enable_if_t::value> - run_algorithms(const char */*mode*/) {} + run_algorithms(const char * /*mode*/) {} template static @@ -294,7 +295,7 @@ struct GEMVTest { fill_random_view(x, rand_pool); fill_random_view(y, rand_pool); } -}; // struct GEMVTest +}; // struct GEMVTest } // namespace Test diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index 30617e14e6..5e50a72189 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -12,14 +12,14 @@ struct SerialGEMVOp : public GemvOpBase { using params = GemvOpBase; SerialGEMVOp(char trans_, ScalarType alpha_, AType A_, XType x_, - ScalarType beta_, YType y_) - : params(trans_, alpha_, A_, x_, beta_, y_) {} + ScalarType beta_, YType y_) + : params(trans_, alpha_, A_, x_, beta_, y_) {} template KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { KokkosBlas::Experimental::Gemv::invoke( - member, params::trans, params::alpha, params::A, params::x, params::beta, - params::y); + member, params::trans, params::alpha, params::A, params::x, + params::beta, params::y); } }; @@ -61,7 +61,8 @@ using simd_float_avx = ::Test::simd_vector; using simd_float_avx512 = ::Test::simd_vector; TEST_CASE2(serial, SerialMKLGemvFactory, mkl_float_sse, simd_float_sse, float) TEST_CASE2(serial, SerialMKLGemvFactory, mkl_float_avx, simd_float_avx, float) -TEST_CASE2(serial, SerialMKLGemvFactory, mkl_float_avx512, simd_float_avx512, float) +TEST_CASE2(serial, SerialMKLGemvFactory, mkl_float_avx512, simd_float_avx512, + float) #endif #endif diff --git a/unit_test/blas/Test_Blas2_team_gemv.hpp b/unit_test/blas/Test_Blas2_team_gemv.hpp index 7c4588fa33..0228bd3b04 100644 --- a/unit_test/blas/Test_Blas2_team_gemv.hpp +++ b/unit_test/blas/Test_Blas2_team_gemv.hpp @@ -12,14 +12,14 @@ struct TeamGEMVOp : public GemvOpBase { using params = GemvOpBase; TeamGEMVOp(char trans_, ScalarType alpha_, AType A_, XType x_, - ScalarType beta_, YType y_) - : params(trans_, alpha_, A_, x_, beta_, y_) {} + ScalarType beta_, YType y_) + : params(trans_, alpha_, A_, x_, beta_, y_) {} template KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { KokkosBlas::Experimental::Gemv::invoke( - member, params::trans, params::alpha, params::A, params::x, params::beta, - params::y); + member, params::trans, params::alpha, params::A, params::x, + params::beta, params::y); } }; diff --git a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp index ea17d12d86..2f3ee80d59 100644 --- a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp +++ b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp @@ -12,14 +12,16 @@ struct TeamVectorGEMVOp : public GemvOpBase { using params = GemvOpBase; TeamVectorGEMVOp(char trans_, ScalarType alpha_, AType A_, XType x_, - ScalarType beta_, YType y_) - : params(trans_, alpha_, A_, x_, beta_, y_) {} + ScalarType beta_, YType y_) + : params(trans_, alpha_, A_, x_, beta_, y_) {} template KOKKOS_INLINE_FUNCTION void operator()(const TeamMember& member) const { - KokkosBlas::Experimental::Gemv::invoke( - member, params::trans, params::alpha, params::A, params::x, params::beta, - params::y); + KokkosBlas::Experimental::Gemv::invoke(member, params::trans, + params::alpha, params::A, + params::x, params::beta, + params::y); } }; From 37c074ed6179e26e84bf5f1d673771a95cc72103 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Tue, 16 Aug 2022 10:38:41 +0200 Subject: [PATCH 042/226] Team/TeamVector GEMV: extend MKL fixes to double --- unit_test/blas/Test_Blas2_serial_gemv.hpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index 5e50a72189..fd73707c9a 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -73,9 +73,12 @@ TEST_SERIAL_CASE(double, double) using simd_double_sse = ::Test::simd_vector; using simd_double_avx = ::Test::simd_vector; using simd_double_avx512 = ::Test::simd_vector; -TEST_SERIAL_CASE2(mkl_double_sse, simd_double_sse, double) -TEST_SERIAL_CASE2(mkl_double_avx, simd_double_avx, double) -TEST_SERIAL_CASE2(mkl_double_avx512, simd_double_avx512, double) +TEST_CASE2(serial, SerialMKLGemvFactory, mkl_double_sse, simd_double_sse, + double) +TEST_CASE2(serial, SerialMKLGemvFactory, mkl_double_avx, simd_double_avx, + double) +TEST_CASE2(serial, SerialMKLGemvFactory, mkl_double_avx512, simd_double_avx512, + double) #endif #endif From 11f12f94f7657485db2dcb05e95c2fe04974f247 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Tue, 16 Aug 2022 10:30:33 +0200 Subject: [PATCH 043/226] Team/TeamVector GEMV: restore CUDA_LAMBDA guards --- unit_test/blas/Test_Blas2_team_gemv.hpp | 8 ++++++++ unit_test/blas/Test_Blas2_teamvector_gemv.hpp | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/unit_test/blas/Test_Blas2_team_gemv.hpp b/unit_test/blas/Test_Blas2_team_gemv.hpp index 0228bd3b04..b985382954 100644 --- a/unit_test/blas/Test_Blas2_team_gemv.hpp +++ b/unit_test/blas/Test_Blas2_team_gemv.hpp @@ -1,3 +1,9 @@ +// Note: Luc Berger-Vergiat 04/14/21 +// This tests uses KOKKOS_LAMBDA so we need +// to make sure that these are enabled in +// the CUDA backend before including this test. +#if !defined(TEST_CUDA_BLAS_CPP) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) + #include #include // for test/inst guards // Note: include serial gemv before util so it knows if CompactMKL is available @@ -71,3 +77,5 @@ TEST_TEAM_CASE2(alphabeta, Kokkos::complex, double) #undef TEST_TEAM_CASE4 #undef TEST_TEAM_CASE2 #undef TEST_TEAM_CASE + +#endif // Check for lambda availability on CUDA backend diff --git a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp index 2f3ee80d59..f5991888ad 100644 --- a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp +++ b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp @@ -1,3 +1,9 @@ +// Note: Luc Berger-Vergiat 04/14/21 +// This tests uses KOKKOS_LAMBDA so we need +// to make sure that these are enabled in +// the CUDA backend before including this test. +#if !defined(TEST_CUDA_BLAS_CPP) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) + #include #include // for test/inst guards // Note: include serial gemv before util so it knows if CompactMKL is available @@ -75,3 +81,5 @@ TEST_TEAMVECTOR_CASE2(alphabeta, Kokkos::complex, double) #undef TEST_TEAMVECTOR_CASE4 #undef TEST_TEAMVECTOR_CASE2 #undef TEST_TEAMVECTOR_CASE + +#endif // Check for lambda availability on CUDA backend From 8448abbf20004736a2abeb0aeaa0d0647cb36d9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Tue, 16 Aug 2022 10:58:39 +0200 Subject: [PATCH 044/226] Team/TeamVector GEMV: skip unsupported ConjNoTranspose in MKL unit tests --- unit_test/blas/Test_Blas2_gemv_util.hpp | 3 +++ unit_test/blas/Test_Blas2_serial_gemv.hpp | 2 ++ unit_test/blas/Test_Blas2_team_gemv.hpp | 1 + unit_test/blas/Test_Blas2_teamvector_gemv.hpp | 1 + 4 files changed, 7 insertions(+) diff --git a/unit_test/blas/Test_Blas2_gemv_util.hpp b/unit_test/blas/Test_Blas2_gemv_util.hpp index ad232ed79c..47a435d50b 100644 --- a/unit_test/blas/Test_Blas2_gemv_util.hpp +++ b/unit_test/blas/Test_Blas2_gemv_util.hpp @@ -134,6 +134,9 @@ struct GEMVTest { // Note: all layouts listed here are subview'ed to test Kokkos::LayoutStride template static void run_layouts(const char *mode) { + if (!GemvFunc::is_supported_mode(mode[0])) { + return; + } #ifdef KOKKOSKERNELS_TEST_LAYOUTLEFT run_view_types(mode); #endif diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index fd73707c9a..d4bf4cbd28 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -31,6 +31,7 @@ struct SerialGemvFactory { using algorithms = std::tuple; + static bool is_supported_mode(char /* trans */) { return true; } }; #ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ @@ -41,6 +42,7 @@ struct SerialMKLGemvFactory { SerialGEMVOp; using algorithms = std::tuple; + static bool is_supported_mode(char trans) { return trans != 'X'; } }; #endif diff --git a/unit_test/blas/Test_Blas2_team_gemv.hpp b/unit_test/blas/Test_Blas2_team_gemv.hpp index b985382954..c2f9ba2a07 100644 --- a/unit_test/blas/Test_Blas2_team_gemv.hpp +++ b/unit_test/blas/Test_Blas2_team_gemv.hpp @@ -37,6 +37,7 @@ struct TeamGemvFactory { using algorithms = std::tuple; + static bool is_supported_mode(char /* trans */) { return true; } }; } // namespace Test diff --git a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp index f5991888ad..ae899c2c78 100644 --- a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp +++ b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp @@ -39,6 +39,7 @@ struct TeamVectorGemvFactory { // no Blocked implementation using algorithms = std::tuple; + static bool is_supported_mode(char /* trans */) { return true; } }; } // namespace Test From 2a2a84ef876dab0cb9da243fba8612508db02033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Tue, 16 Aug 2022 18:23:41 +0200 Subject: [PATCH 045/226] Team/TeamVector GEMV: retract ConjNoTranspose --- src/blas/KokkosBlas2_serial_gemv.hpp | 7 --- src/blas/KokkosBlas2_team_gemv.hpp | 21 ++----- .../impl/KokkosBlas2_serial_gemv_impl.hpp | 28 --------- src/blas/impl/KokkosBlas2_team_gemv_spec.hpp | 57 ------------------- src/blas/impl/KokkosBlas_util.hpp | 1 - .../KokkosBlas2_serial_gemv_tpl_spec_decl.hpp | 17 ------ .../impl/KokkosSparse_spmv_bsrmatrix_impl.hpp | 14 ++--- test_common/KokkosKernels_TestUtils.hpp | 2 +- unit_test/blas/Test_Blas2_gemv_util.hpp | 6 -- unit_test/blas/Test_Blas2_serial_gemv.hpp | 2 - unit_test/blas/Test_Blas2_team_gemv.hpp | 1 - unit_test/blas/Test_Blas2_teamvector_gemv.hpp | 1 - 12 files changed, 13 insertions(+), 144 deletions(-) diff --git a/src/blas/KokkosBlas2_serial_gemv.hpp b/src/blas/KokkosBlas2_serial_gemv.hpp index 1f53fba87e..cb568095b2 100644 --- a/src/blas/KokkosBlas2_serial_gemv.hpp +++ b/src/blas/KokkosBlas2_serial_gemv.hpp @@ -67,13 +67,6 @@ void KOKKOS_INLINE_FUNCTION serial_gemv(const char trans, } else if (trans == 'C' || trans == 'c') { using mode = KokkosBlas::Trans::ConjTranspose; KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); - // - // TODO: what letter should be used here ? - // * in blas "C" means conjugate-transpose - // * in sparse "C" meanse conjugate and "H" conjugate-transpose... - } else if (trans == 'X' || trans == 'x') { - using mode = KokkosBlas::Trans::ConjNoTranspose; - KokkosBlas::SerialGemv::invoke(alpha, A, x, beta, y); } else { Kokkos::abort("Matrix mode not supported"); } diff --git a/src/blas/KokkosBlas2_team_gemv.hpp b/src/blas/KokkosBlas2_team_gemv.hpp index 1950356804..ddc216b8af 100644 --- a/src/blas/KokkosBlas2_team_gemv.hpp +++ b/src/blas/KokkosBlas2_team_gemv.hpp @@ -60,19 +60,15 @@ void KOKKOS_INLINE_FUNCTION team_gemv(const TeamType& team, const char trans, if (trans == 'N' || trans == 'n') TeamGemv::invoke(team, alpha, A, x, beta, y); - if (trans == 'T' || trans == 't') + else if (trans == 'T' || trans == 't') TeamGemv::invoke(team, alpha, A, x, beta, y); - if (trans == 'C' || trans == 'c') + else if (trans == 'C' || trans == 'c') TeamGemv::invoke(team, alpha, A, x, beta, y); - // - // TODO: what letter should be used here ? - // * in blas "C" means conjugate-transpose - // * in sparse "C" meanse conjugate and "H" conjugate-transpose... - if (trans == 'X' || trans == 'x') - TeamGemv::invoke(team, alpha, A, - x, beta, y); + else { + Kokkos::abort("Matrix mode not supported"); + } } // default AlgoTag @@ -101,13 +97,6 @@ teamvector_gemv(const TeamType& team, const char trans, const ScalarType& alpha, } else if (trans == 'C' || trans == 'c') { KokkosBlas::TeamVectorGemv::invoke( team, alpha, A, x, beta, y); - // - // TODO: what letter should be used here ? - // * in blas "C" means conjugate-transpose - // * in sparse "C" meanse conjugate and "H" conjugate-transpose... - } else if (trans == 'X' || trans == 'x') { - KokkosBlas::TeamVectorGemv::invoke(team, alpha, A, x, beta, y); } else { Kokkos::abort("Matrix mode not supported"); } diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp index 9a0734d5e4..0d7f52702b 100644 --- a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp +++ b/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp @@ -156,34 +156,6 @@ SerialGemv::invoke( A.stride_0(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); } -/// -/// CNT -/// - -template <> -template -KOKKOS_INLINE_FUNCTION int -SerialGemv::invoke( - const ScalarType alpha, const AViewType &A, const xViewType &x, - const ScalarType beta, const yViewType &y) { - return Impl::SerialGemvInternal::invoke( - Impl::OpConj{}, A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), - A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); -} - -template <> -template -KOKKOS_INLINE_FUNCTION int -SerialGemv::invoke( - const ScalarType alpha, const AViewType &A, const xViewType &x, - const ScalarType beta, const yViewType &y) { - return Impl::SerialGemvInternal::invoke( - Impl::OpConj{}, A.extent(0), A.extent(1), alpha, A.data(), A.stride_0(), - A.stride_1(), x.data(), x.stride_0(), beta, y.data(), y.stride_0()); -} - } // namespace KokkosBlas #endif diff --git a/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp b/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp index 273a9cddb2..92aac23f26 100644 --- a/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp +++ b/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp @@ -182,42 +182,6 @@ struct TeamGemv { } }; -/// -/// CNT -/// - -template -struct TeamGemv { - template - KOKKOS_INLINE_FUNCTION static int invoke( - const MemberType& member, const ScalarType alpha, const AViewType& A, - const xViewType& x, const ScalarType beta, const yViewType& y) { - static_assert(AViewType::Rank == 2, - "BLAS TeamGemv requires rank-2 A matrix"); - return Impl::TeamGemvInternal::invoke( - member, Impl::OpConj{}, A.extent(0), A.extent(1), alpha, A.data(), - A.stride_0(), A.stride_1(), x.data(), x.stride_0(), beta, y.data(), - y.stride_0()); - } -}; - -template -struct TeamGemv { - template - KOKKOS_INLINE_FUNCTION static int invoke( - const MemberType& member, const ScalarType alpha, const AViewType& A, - const xViewType& x, const ScalarType beta, const yViewType& y) { - static_assert(AViewType::Rank == 2, - "BLAS TeamGemv requires rank-2 A matrix"); - return Impl::TeamGemvInternal::invoke( - member, Impl::OpConj{}, A.extent(0), A.extent(1), alpha, A.data(), - A.stride_0(), A.stride_1(), x.data(), x.stride_0(), beta, y.data(), - y.stride_0()); - } -}; - /// /// NT /// @@ -276,27 +240,6 @@ struct TeamVectorGemv { } }; -/// -/// CNT -/// - -template -struct TeamVectorGemv { - template - KOKKOS_INLINE_FUNCTION static int invoke( - const MemberType& member, const ScalarType alpha, const AViewType& A, - const xViewType& x, const ScalarType beta, const yViewType& y) { - static_assert(AViewType::Rank == 2, - "Batched TeamVectorGemv requires rank-2 A matrix"); - return Impl::TeamVectorGemvInternal::invoke( - member, Impl::OpConj{}, A.extent(0), A.extent(1), alpha, A.data(), - A.stride_0(), A.stride_1(), x.data(), x.stride_0(), beta, y.data(), - y.stride_0()); - } -}; - } // namespace KokkosBlas #endif diff --git a/src/blas/impl/KokkosBlas_util.hpp b/src/blas/impl/KokkosBlas_util.hpp index 7ed3afa9c1..dcee8283d6 100644 --- a/src/blas/impl/KokkosBlas_util.hpp +++ b/src/blas/impl/KokkosBlas_util.hpp @@ -67,7 +67,6 @@ struct Trans { struct Transpose {}; struct NoTranspose {}; struct ConjTranspose {}; - struct ConjNoTranspose {}; // Note: usually not available in BLAS, MKL, etc. }; #if !defined(KOKKOS_IF_ON_HOST) diff --git a/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp b/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp index f35fa4fb34..77aa5a6713 100644 --- a/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp +++ b/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp @@ -199,23 +199,6 @@ SerialGemv::invoke( return 0; } -/// -/// CNT (not supported) -/// - -template <> -template -KOKKOS_INLINE_FUNCTION int -SerialGemv::invoke( - const ScalarType alpha, const AViewType &A, const xViewType &x, - const ScalarType beta, const yViewType &y) { - Kokkos::abort( - "CompactMKL implementation of serial GEMV does not support " - "ConjNoTranspose mode"); - return 0; -} - } // namespace KokkosBlas #endif // __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ diff --git a/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp b/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp index 89a5f79ba9..a0bf8c96ec 100644 --- a/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp +++ b/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp @@ -539,14 +539,12 @@ struct BsrMatrixSpMVTensorCoreDispatcher { #include "KokkosBlas.hpp" #include "KokkosBlas2_serial_gemv_internal.hpp" -#include "KokkosBatched_Gemv_TeamVector_Internal.hpp" +#include "KokkosBlas2_team_gemv_impl.hpp" #include "KokkosBatched_Gemm_Serial_Internal.hpp" #include "KokkosBatched_Gemm_TeamVector_Internal.hpp" #include "KokkosBlas1_team_scal_impl.hpp" #include "KokkosKernels_ExecSpaceUtils.hpp" -#include "KokkosBlas2_team_gemv_spec.hpp" - namespace KokkosSparse { namespace Experimental { namespace Impl { @@ -656,10 +654,12 @@ struct BSR_GEMV_Functor { const auto X_ptBeg = X_blkCol * block_dim; const auto X_cur = Kokkos::subview( m_x, ::Kokkos::make_pair(X_ptBeg, X_ptBeg + block_dim)); - KokkosBlas::TeamVectorGemv< - team_member, KokkosBlas::Trans::ConjNoTranspose, - KokkosBlas::Algo::Gemv::Default>::invoke(dev, alpha, A_cur, X_cur, - val_one, Y_cur); + KokkosBlas::Impl:: + TeamVectorGemvInternal::invoke( + dev, KokkosBlas::Impl::OpConj{}, A_cur.extent(0), + A_cur.extent(1), alpha, A_cur.data(), A_cur.stride_0(), + A_cur.stride_1(), X_cur.data(), X_cur.stride_0(), val_one, + Y_cur.data(), Y_cur.stride_0()); } } else { for (ordinal_type jBlock = 0; jBlock < count; ++jBlock) { diff --git a/test_common/KokkosKernels_TestUtils.hpp b/test_common/KokkosKernels_TestUtils.hpp index 8a51139c5f..b8ce0eb595 100644 --- a/test_common/KokkosKernels_TestUtils.hpp +++ b/test_common/KokkosKernels_TestUtils.hpp @@ -370,7 +370,7 @@ KOKKOS_INLINE_FUNCTION void vanillaGEMV(char mode, AlphaType alpha, using ScalarY = typename ViewTypeY::non_const_value_type; using KAT_A = Kokkos::ArithTraits; const bool transposed = mode == 'T' || mode == 'C'; - const bool conjugated = mode == 'C' || mode == 'X'; + const bool conjugated = mode == 'C'; const bool has_beta = beta != Kokkos::ArithTraits::zero(); int M = A.extent(transposed ? 1 : 0); int N = A.extent(transposed ? 0 : 1); diff --git a/unit_test/blas/Test_Blas2_gemv_util.hpp b/unit_test/blas/Test_Blas2_gemv_util.hpp index 47a435d50b..635f02c558 100644 --- a/unit_test/blas/Test_Blas2_gemv_util.hpp +++ b/unit_test/blas/Test_Blas2_gemv_util.hpp @@ -134,9 +134,6 @@ struct GEMVTest { // Note: all layouts listed here are subview'ed to test Kokkos::LayoutStride template static void run_layouts(const char *mode) { - if (!GemvFunc::is_supported_mode(mode[0])) { - return; - } #ifdef KOKKOSKERNELS_TEST_LAYOUTLEFT run_view_types(mode); #endif @@ -315,9 +312,6 @@ struct GEMVTest { } \ TEST_F(TestCategory, PREFIX##_gemv_ct_##NAME) { \ PREFIX##_##NAME##_gemv_test::run("C"); \ - } \ - TEST_F(TestCategory, PREFIX##_gemv_cnt_##NAME) { \ - PREFIX##_##NAME##_gemv_test::run("X"); \ } #define TEST_CASE2(PREFIX, FACTORY, NAME, SCALAR, SCALAR_COEF) \ diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/unit_test/blas/Test_Blas2_serial_gemv.hpp index d4bf4cbd28..fd73707c9a 100644 --- a/unit_test/blas/Test_Blas2_serial_gemv.hpp +++ b/unit_test/blas/Test_Blas2_serial_gemv.hpp @@ -31,7 +31,6 @@ struct SerialGemvFactory { using algorithms = std::tuple; - static bool is_supported_mode(char /* trans */) { return true; } }; #ifdef __KOKKOSBLAS_ENABLE_INTEL_MKL_COMPACT__ @@ -42,7 +41,6 @@ struct SerialMKLGemvFactory { SerialGEMVOp; using algorithms = std::tuple; - static bool is_supported_mode(char trans) { return trans != 'X'; } }; #endif diff --git a/unit_test/blas/Test_Blas2_team_gemv.hpp b/unit_test/blas/Test_Blas2_team_gemv.hpp index c2f9ba2a07..b985382954 100644 --- a/unit_test/blas/Test_Blas2_team_gemv.hpp +++ b/unit_test/blas/Test_Blas2_team_gemv.hpp @@ -37,7 +37,6 @@ struct TeamGemvFactory { using algorithms = std::tuple; - static bool is_supported_mode(char /* trans */) { return true; } }; } // namespace Test diff --git a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp index ae899c2c78..f5991888ad 100644 --- a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp +++ b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp @@ -39,7 +39,6 @@ struct TeamVectorGemvFactory { // no Blocked implementation using algorithms = std::tuple; - static bool is_supported_mode(char /* trans */) { return true; } }; } // namespace Test From da2149ad02237b0e77997e5b35b7b5767a680c64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Tue, 16 Aug 2022 18:53:22 +0200 Subject: [PATCH 046/226] Team/TeamVector GEMV: fix test headers for top-level interface --- unit_test/blas/Test_Blas2_team_gemv.hpp | 2 +- unit_test/blas/Test_Blas2_teamvector_gemv.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unit_test/blas/Test_Blas2_team_gemv.hpp b/unit_test/blas/Test_Blas2_team_gemv.hpp index b985382954..722aca1938 100644 --- a/unit_test/blas/Test_Blas2_team_gemv.hpp +++ b/unit_test/blas/Test_Blas2_team_gemv.hpp @@ -8,7 +8,7 @@ #include // for test/inst guards // Note: include serial gemv before util so it knows if CompactMKL is available #include -#include +#include namespace Test { diff --git a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp index f5991888ad..5814541bb2 100644 --- a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp +++ b/unit_test/blas/Test_Blas2_teamvector_gemv.hpp @@ -8,7 +8,7 @@ #include // for test/inst guards // Note: include serial gemv before util so it knows if CompactMKL is available #include -#include +#include namespace Test { From 5930a2b92d425ce54870fc69631de6d66069d112 Mon Sep 17 00:00:00 2001 From: Michael Gilbert Date: Mon, 22 Aug 2022 22:57:08 -0400 Subject: [PATCH 047/226] Adding my weighted graph coarsening code into kokkos-kernels (#1043) * adding my wgted graph coarsening code into kokkos-kernels * graph coarsening unit tests * updating coarse builder with recent changes * updating with recent changes * fixing some details * more tests; small fixes * fix some problems * fix some things; unit tests work now * change contact * fixed for pthreads and when openmp/serial are not enabled * enable spgemm dedupe type in unit test * clang format * clang format again * converting all member functions to static; using a handle instead of member variable parameters * clang-format * requested changes * exclude new coarsening files from compilation for cuda builds without lambdas enabled * update files after rebase * clang format * fix g++ compiler warnings for serial build * clang format * 'correct' variable was not needed and has been eliminated * fix compiler warning for SKX gcc-7 build * fix randomly failing coarsening test for small random graphs --- .../KokkosKernels_HashmapAccumulator.hpp | 115 +- src/graph/KokkosGraph_CoarsenConstruct.hpp | 1919 +++++++++++++++++ src/graph/KokkosGraph_CoarsenHeuristics.hpp | 1191 ++++++++++ unit_test/graph/Test_Graph.hpp | 1 + unit_test/graph/Test_Graph_coarsen.hpp | 481 +++++ 5 files changed, 3705 insertions(+), 2 deletions(-) create mode 100644 src/graph/KokkosGraph_CoarsenConstruct.hpp create mode 100644 src/graph/KokkosGraph_CoarsenHeuristics.hpp create mode 100644 unit_test/graph/Test_Graph_coarsen.hpp diff --git a/src/common/KokkosKernels_HashmapAccumulator.hpp b/src/common/KokkosKernels_HashmapAccumulator.hpp index c6397fd9ea..c988e2f4f7 100644 --- a/src/common/KokkosKernels_HashmapAccumulator.hpp +++ b/src/common/KokkosKernels_HashmapAccumulator.hpp @@ -46,8 +46,6 @@ #include #include -//#define HASHMAPACCUMULATOR_ASSERT_ENABLED - namespace KokkosKernels { namespace Experimental { @@ -442,6 +440,77 @@ struct HashmapAccumulator { keys[my_write_index] = key; values[my_write_index] = value; +#if defined(KOKKOS_ARCH_VOLTA) || defined(KOKKOS_ARCH_TURING75) || \ + defined(KOKKOS_ARCH_AMPERE) + // this is an issue on VOLTA because warps do not go in SIMD fashion + // anymore. while some thread might insert my_write_index into linked + // list, another thread in the warp might be reading keys in above loop. + // before inserting the new value in liked list -- which is done with + // atomic exchange below, we make sure that the linked is is complete my + // assigning the hash_next to current head. the head might be different + // when we do the atomic exchange. this would cause temporarily skipping a + // key in the linkedlist until hash_nexts is updated second time as below. + // but this is okay for spgemm, because no two keys will be inserted into + // hashmap at the same time, as rows have unique columns. + + // Neither the compiler nor the execution unit can re-order the line + // directly below with the next line performing the atomic_exchange as the + // atomic exchange writes to hash_begins[hash] and this line reads from + // hash_begins[hash]. + // This line is needed such that threads of execution can still access the + // old linked list, after hash_begins+hash has been atomically overwritten + // with my_write_index but before hash_nexts[my_write_index] is + // overwritten with hashbeginning. If this line was not here, threads may + // not be able to access the dangling linked list since + // hash_nexts[my_write_index] would still be -1. + hash_nexts[my_write_index] = hash_begins[hash]; +#endif + + hashbeginning = + Kokkos::atomic_exchange(hash_begins + hash, my_write_index); + if (hashbeginning == -1) { + used_hashes[Kokkos::atomic_fetch_add(used_hash_size, size_type(1))] = + hash; + } + hash_nexts[my_write_index] = hashbeginning; + return __insert_success; + } + } + + // just like vector_atomic_insert_into_hash_mergeAdd_TrackHashes + // except uses atomic addition on updating the value + // necessary if duplicate key insertions happen simultaneously + KOKKOS_INLINE_FUNCTION + int vector_atomic_insert_into_hash_mergeAtomicAdd_TrackHashes( + const key_type key, const value_type value, + volatile size_type *used_size_, size_type *used_hash_size, + size_type *used_hashes) { + size_type hash, i, my_write_index, hashbeginning; + + if (key == -1) return __insert_success; + + hash = __compute_hash(key, __hashOpRHS); + if (hash != -1) { + i = hash_begins[hash]; + + for (; i != -1; i = hash_nexts[i]) { + if (keys[i] == key) { + Kokkos::atomic_add(values + i, value); + return __insert_success; + } + } + } else { + return __insert_success; + } + + my_write_index = Kokkos::atomic_fetch_add(used_size_, size_type(1)); + + if (my_write_index >= __max_value_size) { + return __insert_full; + } else { + keys[my_write_index] = key; + values[my_write_index] = value; + #if defined(KOKKOS_ARCH_VOLTA) || defined(KOKKOS_ARCH_TURING75) || \ defined(KOKKOS_ARCH_AMPERE) // this is an issue on VOLTA and up because warps do not go in SIMD @@ -480,6 +549,48 @@ struct HashmapAccumulator { } } + KOKKOS_INLINE_FUNCTION + int vector_atomic_insert_into_hash_mergeAdd_TrackHashes_no_list( + const key_type key, const value_type value, size_type *used_hash_size, + size_type *used_hashes) { + size_type hash; + + if (key == -1) return __insert_success; + + hash = __compute_hash(key, __hashOpRHS); + if (hash != -1) { + // loop until an empty hash is found and the key insertion succeeds + // if our capacity is at least some constant multiple of the current used + // hashes then the expected number of iterations is constant + int depth = 0; + // add key to hash to ensure no two keys follow the same paths over hashes + // add depth to prevent cycles + for (;; hash = __compute_hash(hash + key + depth++, __hashOpRHS)) { + if (keys[hash] == key) { + Kokkos::atomic_add(values + hash, value); + return __insert_success; + } else if (keys[hash] == -1) { + if (Kokkos::atomic_compare_exchange_strong(keys + hash, -1, + key)) { + // should only be here if we used a new hash + used_hashes[Kokkos::atomic_fetch_add(used_hash_size, + size_type(1))] = hash; + Kokkos::atomic_add(values + hash, value); + return __insert_success; + } + // we don't care if we failed if some other thread succeeded with the + // same key as ours + if (keys[hash] == key) { + Kokkos::atomic_add(values + hash, value); + return __insert_success; + } + } + } + } else { + return __insert_success; + } + } + // NOTE: this is an exact copy of vector_atmoic_insert_into_hash_mergeAdd from // https://github.com/kokkos/kokkos-kernels/blob/750fe24508a69ed4dba92bb4a9e17a6094b1a083/src/common/KokkosKernels_HashmapAccumulator.hpp#L442-L502 template diff --git a/src/graph/KokkosGraph_CoarsenConstruct.hpp b/src/graph/KokkosGraph_CoarsenConstruct.hpp new file mode 100644 index 0000000000..250f7873de --- /dev/null +++ b/src/graph/KokkosGraph_CoarsenConstruct.hpp @@ -0,0 +1,1919 @@ +#pragma once +// exclude from Cuda builds without lambdas enabled +#if !defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) +#include +#include +#include +#include "KokkosSparse_CrsMatrix.hpp" +#include "KokkosSparse_spgemm.hpp" +#include "KokkosSparse_SortCrs.hpp" +#include "KokkosKernels_HashmapAccumulator.hpp" +#include "KokkosKernels_Uniform_Initialized_MemoryPool.hpp" +#include "KokkosGraph_CoarsenHeuristics.hpp" + +namespace KokkosSparse { + +namespace Impl { + +template +struct SortLowDegreeCrsMatrixFunctor { + using size_type = typename rowmap_t::non_const_value_type; + using lno_t = typename entries_t::non_const_value_type; + using scalar_t = typename values_t::non_const_value_type; + using team_mem = typename Kokkos::TeamPolicy::member_type; + using value_type = lno_t; + + SortLowDegreeCrsMatrixFunctor(bool usingRangePol, const rowmap_t& _rowmap, + const entries_t& _entries, + const values_t& _values, + const lno_t _degreeLimit) + : rowmap(_rowmap), + entries(_entries), + values(_values), + degreeLimit(_degreeLimit) { + if (usingRangePol) { + entriesAux = + entries_t(Kokkos::ViewAllocateWithoutInitializing("Entries aux"), + entries.extent(0)); + valuesAux = + values_t(Kokkos::ViewAllocateWithoutInitializing("Values aux"), + values.extent(0)); + } + // otherwise, aux arrays won't be allocated (sorting in place) + } + + KOKKOS_INLINE_FUNCTION void operator()(const lno_t i, + value_type& reducer) const { + size_type rowStart = rowmap(i); + size_type rowEnd = rowmap(i + 1); + lno_t rowNum = rowEnd - rowStart; + if (rowNum > degreeLimit) { + reducer++; + return; + } + // Radix sort requires unsigned keys for comparison + using unsigned_lno_t = typename std::make_unsigned::type; + KokkosKernels::SerialRadixSort2( + (unsigned_lno_t*)entries.data() + rowStart, + (unsigned_lno_t*)entriesAux.data() + rowStart, values.data() + rowStart, + valuesAux.data() + rowStart, rowNum); + } + + KOKKOS_INLINE_FUNCTION void operator()(const team_mem t, + value_type& reducer) const { + size_type i = t.league_rank(); + size_type rowStart = rowmap(i); + size_type rowEnd = rowmap(i + 1); + lno_t rowNum = rowEnd - rowStart; + if (rowNum > degreeLimit) { + Kokkos::single(Kokkos::PerTeam(t), [&]() { reducer++; }); + return; + } + KokkosKernels::TeamBitonicSort2( + entries.data() + rowStart, values.data() + rowStart, rowNum, t); + } + + rowmap_t rowmap; + entries_t entries; + entries_t entriesAux; + values_t values; + values_t valuesAux; + lno_t degreeLimit; +}; + +} // namespace Impl + +// Sort a CRS matrix: within each row, sort entries ascending by column. +// At the same time, permute the values. +// Only modifies rows below the degreeLimit +template +typename entries_t::non_const_value_type sort_low_degree_rows_crs_matrix( + const rowmap_t& rowmap, const entries_t& entries, const values_t& values, + const typename entries_t::non_const_value_type degreeLimit) { + using lno_t = typename entries_t::non_const_value_type; + using team_pol = Kokkos::TeamPolicy; + bool useRadix = !KokkosKernels::Impl::kk_is_gpu_exec_space(); + Impl::SortLowDegreeCrsMatrixFunctor + funct(useRadix, rowmap, entries, values, degreeLimit); + lno_t numRows = rowmap.extent(0) ? rowmap.extent(0) - 1 : 0; + lno_t notSorted = 0; + if (useRadix) { + Kokkos::parallel_reduce("sort_crs_matrix", + Kokkos::RangePolicy(0, numRows), + funct, notSorted); + } else { + // Try to get teamsize to be largest power of 2 not greater than avg entries + // per row + // TODO (probably important for performnce): add thread-level sort also, and + // use that for small avg degree. But this works for now. probably important + // for this particular use case of only low-degree rows + int teamSize = 1; + lno_t avgDeg = 0; + if (numRows) avgDeg = (entries.extent(0) + numRows - 1) / numRows; + if (avgDeg > degreeLimit) { + avgDeg = degreeLimit; + } + while (teamSize * 2 * 2 <= avgDeg) { + teamSize *= 2; + } + team_pol temp(numRows, teamSize); + teamSize = std::min(teamSize, + temp.team_size_max(funct, Kokkos::ParallelReduceTag())); + Kokkos::parallel_reduce("sort_crs_matrix", team_pol(numRows, teamSize), + funct, notSorted); + } + return notSorted; +} + +} // namespace KokkosSparse + +namespace KokkosGraph { + +namespace Experimental { + +// this class is not meant to be instantiated +// think of it like a templated namespace +template +class coarse_builder { + public: + // define internal types + using matrix_t = crsMat; + using exec_space = typename matrix_t::execution_space; + using mem_space = typename matrix_t::memory_space; + using Device = typename matrix_t::device_type; + using ordinal_t = typename matrix_t::ordinal_type; + using edge_offset_t = typename matrix_t::size_type; + using scalar_t = typename matrix_t::value_type; + using vtx_view_t = Kokkos::View; + using wgt_view_t = Kokkos::View; + using edge_view_t = Kokkos::View; + using edge_subview_t = Kokkos::View; + using graph_type = typename matrix_t::staticcrsgraph_type; + using policy_t = Kokkos::RangePolicy; + using dyn_policy_t = + Kokkos::RangePolicy, exec_space>; + using team_policy_t = Kokkos::TeamPolicy; + using dyn_team_policy_t = + Kokkos::TeamPolicy, exec_space>; + using member = typename team_policy_t::member_type; + using spgemm_kernel_handle = KokkosKernels::Experimental::KokkosKernelsHandle< + edge_offset_t, ordinal_t, scalar_t, exec_space, mem_space, mem_space>; + using uniform_memory_pool_t = + KokkosKernels::Impl::UniformMemoryPool; + using mapper_t = coarsen_heuristics; + static constexpr ordinal_t get_null_val() { + // this value must line up with the null value used by the hashmap + // accumulator + if (std::is_signed::value) { + return -1; + } else { + return std::numeric_limits::max(); + } + } + static constexpr ordinal_t ORD_MAX = get_null_val(); + static constexpr bool is_host_space = std::is_same< + typename exec_space::memory_space, + typename Kokkos::DefaultHostExecutionSpace::memory_space>::value; + static constexpr bool scal_eq_ord = std::is_same::value; + // contains matrix and vertex weights corresponding to current level + // interp matrix maps previous level to this level + struct coarse_level_triple { + matrix_t mtx; + vtx_view_t vtx_wgts; + matrix_t interp_mtx; + int level; + bool uniform_weights; + }; + + // define behavior-controlling enums + enum Heuristic { HECv1, Match, MtMetis, MIS2, GOSHv1, GOSHv2 }; + enum Builder { Sort, Hashmap, Hybrid, Spgemm, Spgemm_transpose_first }; + + struct coarsen_handle { + // internal parameters and data + // default heuristic is HEC + Heuristic h = HECv1; + // default builder is Hybrid + Builder b = Hybrid; + std::list results; + ordinal_t coarse_vtx_cutoff = 50; + ordinal_t min_allowed_vtx = 10; + unsigned int max_levels = 200; + size_t max_mem_allowed = 536870912; + }; + + // determine if dynamic scheduling should be used + static bool should_use_dyn( + const ordinal_t n, const Kokkos::View work, + int t_count) { + bool use_dyn = false; + edge_offset_t max = 0; + edge_offset_t min = std::numeric_limits::max(); + if (is_host_space) { + ordinal_t static_size = (n + t_count) / t_count; + for (ordinal_t i = 0; i < t_count; i++) { + ordinal_t start = i * static_size; + ordinal_t end = start + static_size; + if (start > n) start = n; + if (end > n) end = n; + edge_offset_t size = work(end) - work(start); + if (size > max) { + max = size; + } + if (size < min) { + min = size; + } + } + if (n > 500000 && max > 5 * min) { + use_dyn = true; + } + } + return use_dyn; + } + + // build the course graph according to ((B^T A) B) or (B^T (A B)), where B is + // aggregator matrix + static coarse_level_triple build_coarse_graph_spgemm( + coarsen_handle& handle, const coarse_level_triple level, + const matrix_t interp_mtx) { + vtx_view_t f_vtx_w = level.vtx_wgts; + matrix_t g = level.mtx; + + ordinal_t n = g.numRows(); + ordinal_t nc = interp_mtx.numCols(); + + matrix_t interp_transpose = + KokkosSparse::Impl::transpose_matrix(interp_mtx); + + spgemm_kernel_handle kh; + kh.set_team_work_size(64); + kh.set_dynamic_scheduling(true); + KokkosSparse::SPGEMMAlgorithm spgemm_algorithm = + KokkosSparse::SPGEMM_KK_MEMORY; + kh.create_spgemm_handle(spgemm_algorithm); + + vtx_view_t adj_coarse; + wgt_view_t wgt_coarse; + edge_view_t row_map_coarse; + + if (handle.b == Spgemm_transpose_first) { + edge_view_t row_map_p1("rows_partial", nc + 1); + KokkosSparse::Experimental::spgemm_symbolic( + &kh, nc, n, n, interp_transpose.graph.row_map, + interp_transpose.graph.entries, false, g.graph.row_map, + g.graph.entries, false, row_map_p1); + + // partial-result matrix + vtx_view_t entries_p1("adjacencies_partial", + kh.get_spgemm_handle()->get_c_nnz()); + wgt_view_t values_p1("weights_partial", + kh.get_spgemm_handle()->get_c_nnz()); + + KokkosSparse::Experimental::spgemm_numeric( + &kh, nc, n, n, interp_transpose.graph.row_map, + interp_transpose.graph.entries, interp_transpose.values, false, + g.graph.row_map, g.graph.entries, g.values, false, row_map_p1, + entries_p1, values_p1); + + row_map_coarse = edge_view_t("rows_coarse", nc + 1); + KokkosSparse::Experimental::spgemm_symbolic( + &kh, nc, n, nc, row_map_p1, entries_p1, false, + interp_mtx.graph.row_map, interp_mtx.graph.entries, false, + row_map_coarse); + // coarse-graph adjacency matrix + adj_coarse = + vtx_view_t("adjacencies_coarse", kh.get_spgemm_handle()->get_c_nnz()); + wgt_coarse = + wgt_view_t("weights_coarse", kh.get_spgemm_handle()->get_c_nnz()); + + KokkosSparse::Experimental::spgemm_numeric( + &kh, nc, n, nc, row_map_p1, entries_p1, values_p1, false, + interp_mtx.graph.row_map, interp_mtx.graph.entries, interp_mtx.values, + false, row_map_coarse, adj_coarse, wgt_coarse); + } else { + edge_view_t row_map_p1("rows_partial", n + 1); + KokkosSparse::Experimental::spgemm_symbolic( + &kh, n, n, nc, g.graph.row_map, g.graph.entries, false, + interp_mtx.graph.row_map, interp_mtx.graph.entries, false, + row_map_p1); + + // partial-result matrix + vtx_view_t entries_p1("adjacencies_partial", + kh.get_spgemm_handle()->get_c_nnz()); + wgt_view_t values_p1("weights_partial", + kh.get_spgemm_handle()->get_c_nnz()); + + KokkosSparse::Experimental::spgemm_numeric( + &kh, n, n, nc, g.graph.row_map, g.graph.entries, g.values, false, + interp_mtx.graph.row_map, interp_mtx.graph.entries, interp_mtx.values, + false, row_map_p1, entries_p1, values_p1); + + row_map_coarse = edge_view_t("rows_coarse", nc + 1); + KokkosSparse::Experimental::spgemm_symbolic( + &kh, nc, n, nc, interp_transpose.graph.row_map, + interp_transpose.graph.entries, false, row_map_p1, entries_p1, false, + row_map_coarse); + // coarse-graph adjacency matrix + adj_coarse = + vtx_view_t("adjacencies_coarse", kh.get_spgemm_handle()->get_c_nnz()); + wgt_coarse = + wgt_view_t("weights_coarse", kh.get_spgemm_handle()->get_c_nnz()); + + KokkosSparse::Experimental::spgemm_numeric( + &kh, nc, n, nc, interp_transpose.graph.row_map, + interp_transpose.graph.entries, interp_transpose.values, false, + row_map_p1, entries_p1, values_p1, false, row_map_coarse, adj_coarse, + wgt_coarse); + } + + // now we must remove self-loop edges + edge_view_t nonLoops("nonLoop", nc); + + // gonna reuse this to count non-self loop edges + Kokkos::parallel_for( + policy_t(0, nc), KOKKOS_LAMBDA(ordinal_t i) { nonLoops(i) = 0; }); + + Kokkos::parallel_for( + policy_t(0, nc), KOKKOS_LAMBDA(ordinal_t u) { + for (edge_offset_t j = row_map_coarse(u); j < row_map_coarse(u + 1); + j++) { + if (adj_coarse(j) != u) { + nonLoops(u)++; + } + } + }); + + edge_view_t row_map_nonloop("nonloop row map", nc + 1); + + Kokkos::parallel_scan( + policy_t(0, nc), KOKKOS_LAMBDA(const ordinal_t i, edge_offset_t& update, + const bool final) { + const edge_offset_t val_i = nonLoops(i); + update += val_i; + if (final) { + row_map_nonloop(i + 1) = update; + } + }); + + edge_subview_t rmn_subview = Kokkos::subview(row_map_nonloop, nc); + edge_offset_t rmn = 0; + Kokkos::deep_copy(rmn, rmn_subview); + + vtx_view_t entries_nonloop("nonloop entries", rmn); + wgt_view_t values_nonloop("nonloop values", rmn); + + Kokkos::parallel_for( + policy_t(0, nc), KOKKOS_LAMBDA(const ordinal_t i) { nonLoops(i) = 0; }); + + Kokkos::parallel_for( + policy_t(0, nc), KOKKOS_LAMBDA(const ordinal_t u) { + for (edge_offset_t j = row_map_coarse(u); j < row_map_coarse(u + 1); + j++) { + if (adj_coarse(j) != u) { + edge_offset_t offset = row_map_nonloop(u) + nonLoops(u)++; + entries_nonloop(offset) = adj_coarse(j); + values_nonloop(offset) = wgt_coarse(j); + } + } + }); + // done removing self-loop edges + + kh.destroy_spgemm_handle(); + + graph_type gc_graph(entries_nonloop, row_map_nonloop); + matrix_t gc("gc", nc, values_nonloop, gc_graph); + + vtx_view_t c_vtx_w("coarse vtx weights", interp_mtx.numCols()); + Kokkos::parallel_for( + "compute coarse vtx wgts", policy_t(0, n), + KOKKOS_LAMBDA(const ordinal_t i) { + ordinal_t u = interp_mtx.graph.entries(i); + Kokkos::atomic_add(&c_vtx_w(u), f_vtx_w(i)); + }); + + coarse_level_triple next_level; + next_level.mtx = gc; + next_level.vtx_wgts = c_vtx_w; + next_level.level = level.level + 1; + next_level.interp_mtx = interp_mtx; + next_level.uniform_weights = false; + return next_level; + } + + struct prefix_sum { + vtx_view_t input; + edge_view_t output; + + prefix_sum(vtx_view_t _input, edge_view_t _output) + : input(_input), output(_output) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const ordinal_t i, edge_offset_t& update, + const bool final) const { + const edge_offset_t val_i = input(i); + update += val_i; + if (final) { + output(i + 1) = update; + } + } + }; + + struct functorDedupeLowDegreeAfterSort { + // compiler may get confused what the reduction type is without this + typedef edge_offset_t value_type; + + edge_view_t row_map; + vtx_view_t entries, entriesOut; + wgt_view_t wgts, wgtsOut; + vtx_view_t dedupe_edge_count; + ordinal_t degreeLimit; + + functorDedupeLowDegreeAfterSort(edge_view_t _row_map, vtx_view_t _entries, + vtx_view_t _entriesOut, wgt_view_t _wgts, + wgt_view_t _wgtsOut, + vtx_view_t _dedupe_edge_count, + ordinal_t _degreeLimit_) + : row_map(_row_map), + entries(_entries), + entriesOut(_entriesOut), + wgts(_wgts), + wgtsOut(_wgtsOut), + dedupe_edge_count(_dedupe_edge_count), + degreeLimit(_degreeLimit_) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const member& thread, edge_offset_t& thread_sum) const { + ordinal_t u = thread.league_rank(); + edge_offset_t start = row_map(u); + edge_offset_t end = row_map(u + 1); + ordinal_t degree = end - start; + if (degree > degreeLimit) { + return; + } + Kokkos::parallel_scan( + Kokkos::TeamThreadRange(thread, start, end), + [&](const edge_offset_t& i, edge_offset_t& update, const bool final) { + if (i == start) { + update += 1; + } else if (entries(i) != entries(i - 1)) { + update += 1; + } + if (final) { + entriesOut(start + update - 1) = entries(i); + // requires that wgtsOut be initialized to 0 + Kokkos::atomic_add(&wgtsOut(start + update - 1), wgts(i)); + if (i + 1 == end) { + dedupe_edge_count(u) = update; + } + } + }); + Kokkos::parallel_for( + Kokkos::TeamThreadRange(thread, start, start + dedupe_edge_count(u)), + [&](const edge_offset_t& i) { + entries(i) = entriesOut(i); + wgts(i) = wgtsOut(i); + }); + Kokkos::single(Kokkos::PerTeam(thread), + [&]() { thread_sum += dedupe_edge_count(u); }); + } + + KOKKOS_INLINE_FUNCTION + void operator()(const ordinal_t& u, edge_offset_t& thread_sum) const { + ordinal_t offset = row_map(u); + ordinal_t last = ORD_MAX; + ordinal_t degree = row_map(u + 1) - row_map(u); + if (degree > degreeLimit) { + return; + } + for (edge_offset_t i = row_map(u); i < row_map(u + 1); i++) { + if (last != entries(i)) { + entriesOut(offset) = entries(i); + wgtsOut(offset) = wgts(i); + last = entries(offset); + offset++; + } else { + wgtsOut(offset - 1) += wgts(i); + } + } + dedupe_edge_count(u) = offset - row_map(u); + thread_sum += offset - row_map(u); + } + }; + + struct functorDedupeAfterSort { + // compiler may get confused what the reduction type is without this + typedef edge_offset_t value_type; + + edge_view_t row_map; + vtx_view_t entries, entriesOut; + wgt_view_t wgts, wgtsOut; + vtx_view_t dedupe_edge_count; + + functorDedupeAfterSort(edge_view_t _row_map, vtx_view_t _entries, + vtx_view_t _entriesOut, wgt_view_t _wgts, + wgt_view_t _wgtsOut, vtx_view_t _dedupe_edge_count) + : row_map(_row_map), + entries(_entries), + entriesOut(_entriesOut), + wgts(_wgts), + wgtsOut(_wgtsOut), + dedupe_edge_count(_dedupe_edge_count) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const member& thread, edge_offset_t& thread_sum) const { + ordinal_t u = thread.league_rank(); + edge_offset_t start = row_map(u); + edge_offset_t end = row_map(u + 1); + Kokkos::parallel_scan( + Kokkos::TeamThreadRange(thread, start, end), + [&](const edge_offset_t& i, edge_offset_t& update, const bool final) { + if (i == start) { + update += 1; + } else if (entries(i) != entries(i - 1)) { + update += 1; + } + if (final) { + entriesOut(start + update - 1) = entries(i); + // requires that wgtsOut be initialized to 0 + Kokkos::atomic_add(&wgtsOut(start + update - 1), wgts(i)); + if (i + 1 == end) { + dedupe_edge_count(u) = update; + } + } + }); + Kokkos::single(Kokkos::PerTeam(thread), + [&]() { thread_sum += dedupe_edge_count(u); }); + } + + KOKKOS_INLINE_FUNCTION + void operator()(const ordinal_t& u, edge_offset_t& thread_sum) const { + ordinal_t offset = row_map(u); + ordinal_t last = ORD_MAX; + for (edge_offset_t i = row_map(u); i < row_map(u + 1); i++) { + if (last != entries(i)) { + entries(offset) = entries(i); + wgtsOut(offset) = wgts(i); + last = entries(offset); + offset++; + } else { + wgtsOut(offset - 1) += wgts(i); + } + } + dedupe_edge_count(u) = offset - row_map(u); + thread_sum += offset - row_map(u); + } + }; + + struct functorCollapseDirectedToUndirected { + const edge_view_t source_row_map; + const edge_view_t target_row_map; + const vtx_view_t source_edge_counts; + vtx_view_t target_edge_counts; + const vtx_view_t source_destinations; + vtx_view_t target_destinations; + const wgt_view_t source_wgts; + wgt_view_t target_wgts; + + functorCollapseDirectedToUndirected( + const edge_view_t _source_row_map, const edge_view_t _target_row_map, + const vtx_view_t _source_edge_counts, vtx_view_t _target_edge_counts, + const vtx_view_t _source_destinations, vtx_view_t _target_destinations, + const wgt_view_t _source_wgts, wgt_view_t _target_wgts) + : source_row_map(_source_row_map), + target_row_map(_target_row_map), + source_edge_counts(_source_edge_counts), + target_edge_counts(_target_edge_counts), + source_destinations(_source_destinations), + target_destinations(_target_destinations), + source_wgts(_source_wgts), + target_wgts(_target_wgts) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const member& thread) const { + ordinal_t u = thread.league_rank(); + edge_offset_t u_origin = source_row_map(u); + edge_offset_t u_dest_offset = target_row_map(u); + Kokkos::parallel_for( + Kokkos::TeamThreadRange(thread, source_edge_counts(u)), + [=](const edge_offset_t u_idx) { + ordinal_t v = source_destinations(u_origin + u_idx); + scalar_t wgt = source_wgts(u_origin + u_idx); + edge_offset_t v_dest_offset = target_row_map(v); + edge_offset_t v_dest = + v_dest_offset + + Kokkos::atomic_fetch_add(&target_edge_counts(v), 1); + edge_offset_t u_dest = + u_dest_offset + + Kokkos::atomic_fetch_add(&target_edge_counts(u), 1); + + target_destinations(u_dest) = v; + target_wgts(u_dest) = wgt; + target_destinations(v_dest) = u; + target_wgts(v_dest) = wgt; + }); + } + }; + + struct functorHashmapAccumulator { + // compiler may get confused what the reduction type is without this + typedef ordinal_t value_type; + edge_view_t row_map; + vtx_view_t entries_in, entries_out; + wgt_view_t wgts_in, wgts_out; + vtx_view_t dedupe_edge_count; + uniform_memory_pool_t memory_pool; + const ordinal_t hash_size; + const ordinal_t max_hash_entries; + vtx_view_t remaining; + bool use_out; + + functorHashmapAccumulator(edge_view_t _row_map, vtx_view_t _entries_in, + vtx_view_t _entries_out, wgt_view_t _wgts_in, + wgt_view_t _wgts_out, + vtx_view_t _dedupe_edge_count, + uniform_memory_pool_t _memory_pool, + const ordinal_t _hash_size, + const ordinal_t _max_hash_entries, + vtx_view_t _remaining, bool _use_out) + : row_map(_row_map), + entries_in(_entries_in), + entries_out(_entries_out), + wgts_in(_wgts_in), + wgts_out(_wgts_out), + dedupe_edge_count(_dedupe_edge_count), + memory_pool(_memory_pool), + hash_size(_hash_size), + max_hash_entries(_max_hash_entries), + remaining(_remaining), + use_out(_use_out) {} + + KOKKOS_INLINE_FUNCTION + ordinal_t get_thread_id(const ordinal_t row_index) const { +#if defined(KOKKOS_ENABLE_SERIAL) + if (std::is_same::value) return 0; +#endif +#if defined(KOKKOS_ENABLE_OPENMP) + if (std::is_same::value) + return Kokkos::OpenMP::impl_hardware_thread_id(); +#endif +#if defined(KOKKOS_ENABLE_THREADS) + if (std::is_same::value) + return Kokkos::Threads::impl_hardware_thread_id(); +#endif + return row_index; + } + + // reduces to find total number of rows that were too large + KOKKOS_INLINE_FUNCTION + void operator()(const ordinal_t& rem_idx, ordinal_t& thread_sum) const { + ordinal_t idx = remaining(rem_idx); + typedef ordinal_t hash_size_type; + typedef ordinal_t hash_key_type; + typedef scalar_t hash_value_type; + + // can't do this row at current hashmap size + ordinal_t hash_entries = row_map(idx + 1) - row_map(idx); + if (hash_entries >= max_hash_entries) { + thread_sum++; + return; + } + volatile ordinal_t* ptr_temp = nullptr; + ordinal_t t_id = rem_idx; + // need to use the hardware thread id if the pool type is + // OneThread2OneChunk + t_id = get_thread_id(t_id); + while (nullptr == ptr_temp) { + ptr_temp = (volatile ordinal_t*)(memory_pool.allocate_chunk(t_id)); + } + if (ptr_temp == nullptr) { + return; + } + ordinal_t* ptr_memory_pool_chunk = (ordinal_t*)(ptr_temp); + + // These are updated by Hashmap_Accumulator insert functions. + ordinal_t* used_hash_size = (ordinal_t*)(ptr_temp); + ptr_temp++; + ordinal_t* used_hash_count = (ordinal_t*)(ptr_temp); + ptr_temp++; + *used_hash_size = 0; + *used_hash_count = 0; + + // hash function is hash_size-1 (note: hash_size must be a power of 2) + ordinal_t hash_func_pow2 = hash_size - 1; + + // Set pointer to hash indices + ordinal_t* used_hash_indices = (ordinal_t*)(ptr_temp); + ptr_temp += hash_size; + + // Set pointer to hash begins + ordinal_t* hash_begins = (ordinal_t*)(ptr_temp); + ptr_temp += hash_size; + + // Set pointer to hash nexts + ordinal_t* hash_nexts = (ordinal_t*)(ptr_temp); + + // Set pointer to hash keys + ordinal_t* keys = (ordinal_t*)entries_out.data() + row_map(idx); + + // Set pointer to hash values + scalar_t* values = (scalar_t*)wgts_out.data() + row_map(idx); + + KokkosKernels::Experimental::HashmapAccumulator< + hash_size_type, hash_key_type, hash_value_type, + KokkosKernels::Experimental::HashOpType::bitwiseAnd> + hash_map(hash_size, hash_func_pow2, hash_begins, hash_nexts, keys, + values); + + for (edge_offset_t i = row_map(idx); i < row_map(idx + 1); i++) { + ordinal_t key = entries_in(i); + scalar_t value = wgts_in(i); + hash_map.sequential_insert_into_hash_mergeAdd_TrackHashes( + key, value, used_hash_size, used_hash_count, used_hash_indices); + }; + + // Reset the Begins values to -1 before releasing the memory pool chunk. + // If you don't do this the next thread that grabs this memory chunk will + // not work properly. + for (ordinal_t i = 0; i < *used_hash_count; i++) { + ordinal_t dirty_hash = used_hash_indices[i]; + + hash_map.hash_begins[dirty_hash] = ORD_MAX; + }; + + // used_hash_size gives the number of entries, used_hash_count gives the + // number of dirty hash values (I think) + dedupe_edge_count(idx) = *used_hash_size; + // Release the memory pool chunk back to the pool + memory_pool.release_chunk(ptr_memory_pool_chunk); + + } // operator() + + // reduces to find total number of rows that were too large + KOKKOS_INLINE_FUNCTION + void operator()(const member& thread, ordinal_t& thread_sum) const { + ordinal_t idx = remaining(thread.league_rank()); + typedef ordinal_t hash_size_type; + typedef ordinal_t hash_key_type; + typedef scalar_t hash_value_type; + + // can't do this row at current hashmap size + ordinal_t hash_entries = row_map(idx + 1) - row_map(idx); + if (hash_entries >= max_hash_entries) { + Kokkos::single(Kokkos::PerTeam(thread), [&]() { thread_sum++; }); + thread.team_barrier(); + return; + } + volatile ordinal_t* ptr_temp = nullptr; + Kokkos::single( + Kokkos::PerTeam(thread), + [=](volatile ordinal_t*& ptr_write) { + // Acquire a chunk from the memory pool using a spin-loop. + ptr_write = nullptr; + while (nullptr == ptr_write) { + ptr_write = (volatile ordinal_t*)(memory_pool.allocate_chunk( + thread.league_rank())); + } + }, + ptr_temp); + thread.team_barrier(); + if (ptr_temp == nullptr) { + return; + } + ordinal_t* ptr_memory_pool_chunk = (ordinal_t*)(ptr_temp); + + // These are updated by Hashmap_Accumulator insert functions. + ordinal_t* used_hash_size = (ordinal_t*)(ptr_temp); + ptr_temp++; + ordinal_t* used_hash_count = (ordinal_t*)(ptr_temp); + ptr_temp++; + ordinal_t* write_idx = (ordinal_t*)(ptr_temp); + ptr_temp++; + Kokkos::single(Kokkos::PerTeam(thread), [&]() { + *used_hash_size = 0; + *used_hash_count = 0; + *write_idx = 0; + }); + + // hash function is hash_size-1 (note: hash_size must be a power of 2) + ordinal_t hash_func_pow2 = hash_size - 1; + + // Set pointer to hash indices + ordinal_t* used_hash_indices = (ordinal_t*)(ptr_temp); + ptr_temp += hash_size; + + // Set pointer to hash begins + ordinal_t* hash_begins = (ordinal_t*)(ptr_temp); + ptr_temp += hash_size; + + // Set pointer to hash nexts + ordinal_t* hash_nexts = (ordinal_t*)(ptr_temp); + ptr_temp += max_hash_entries; + + // Set pointer to hash keys + ordinal_t* keys = (ordinal_t*)(ptr_temp); + ptr_temp += max_hash_entries; + + // Set pointer to hash values + scalar_t* values; + if (use_out) { + values = (scalar_t*)wgts_out.data() + row_map(idx); + } else { + values = (scalar_t*)(ptr_temp); + } + + KokkosKernels::Experimental::HashmapAccumulator< + hash_size_type, hash_key_type, hash_value_type, + KokkosKernels::Experimental::HashOpType::bitwiseAnd> + hash_map(hash_size, hash_func_pow2, hash_begins, hash_nexts, keys, + values); + + Kokkos::parallel_for( + Kokkos::ThreadVectorRange(thread, row_map(idx), row_map(idx + 1)), + [&](const edge_offset_t& i) { + ordinal_t key = entries_in(i); + scalar_t value = wgts_in(i); + // duplicate keys may be inserted simultaneously, this causes + // problems we must handle later + int r = + hash_map + .vector_atomic_insert_into_hash_mergeAtomicAdd_TrackHashes( + key, value, used_hash_size, used_hash_count, + used_hash_indices); + + // Check return code + if (r) { + } + }); + thread.team_barrier(); + + // Reset the Begins values to -1 before releasing the memory pool chunk. + // If you don't do this the next thread that grabs this memory chunk will + // not work properly. Also merges values inside each linked list, because + // there can be duplicate key insertions (these are hopefully rare or else + // performance will suffer) This did not work as a TeamThreadRange, don't + // know why (possibly issues with atomic addition on write_idx) + Kokkos::parallel_for( + Kokkos::ThreadVectorRange(thread, (ordinal_t)0, *used_hash_count), + [&](const ordinal_t& i) { + ordinal_t dirty_hash = used_hash_indices[i]; + + ordinal_t bucket = hash_begins[dirty_hash]; + + // ascending-key bubble-sort the linked list + // it really do be like that sometimes + ordinal_t end_inner = ORD_MAX; + while (end_inner != bucket) { + ordinal_t last_idx = bucket; + ordinal_t last_key = keys[last_idx]; + scalar_t last_val = values[last_idx]; + bool is_sorted = true; + // bubble-up + for (ordinal_t k = hash_nexts[bucket]; k != end_inner; + k = hash_nexts[k]) { + // swap + if (keys[k] < last_key) { + keys[last_idx] = keys[k]; + values[last_idx] = values[k]; + keys[k] = last_key; + values[k] = last_val; + is_sorted = false; + } + // increment last + last_key = keys[k]; + last_val = values[k]; + last_idx = k; + } + end_inner = last_idx; + if (is_sorted) { + // end the outer loop + end_inner = bucket; + } + } + ordinal_t key = keys[bucket]; + scalar_t val = values[bucket]; + ordinal_t last = bucket; + // merge linked list and write out + for (ordinal_t j = hash_nexts[bucket]; j != ORD_MAX; + j = hash_nexts[j]) { + if (keys[j] == key) { + val += values[j]; + } else { + ordinal_t write_at = + row_map(idx) + Kokkos::atomic_fetch_add(write_idx, 1); + entries_out(write_at) = key; + if (use_out) { + // reuse wgts_in as scratch space because we are overwriting + // working memory if we use wgts_out + wgts_in(write_at) = val; + } else { + wgts_out(write_at) = val; + } + key = keys[j]; + val = values[j]; + } + hash_nexts[last] = ORD_MAX; + last = j; + } + hash_nexts[last] = ORD_MAX; + // write out the final entry in linked list + ordinal_t write_at = + row_map(idx) + Kokkos::atomic_fetch_add(write_idx, 1); + entries_out(write_at) = key; + if (use_out) { + // reuse wgts_in as scratch space because we are overwriting + // working memory if we use wgts_out + wgts_in(write_at) = val; + } else { + wgts_out(write_at) = val; + } + hash_begins[dirty_hash] = ORD_MAX; + }); + thread.team_barrier(); + // need to copy from wgts_in to wgts_out if we used wgts_in as scratch + // space + if (use_out) { + Kokkos::parallel_for( + Kokkos::ThreadVectorRange(thread, (ordinal_t)0, *write_idx), + [&](const ordinal_t& i) { + wgts_out(row_map(idx) + i) = wgts_in(row_map(idx) + i); + }); + } + + Kokkos::single(Kokkos::PerTeam(thread), [&]() { + // used_hash_size gives the number of entries, used_hash_count gives the + // number of dirty hash values (I think) + dedupe_edge_count(idx) = *write_idx; + // Release the memory pool chunk back to the pool + memory_pool.release_chunk(ptr_memory_pool_chunk); + }); + + } // operator() + + }; // functorHashmapAccumulator + + static void getHashmapSizeAndCount( + coarsen_handle& handle, const ordinal_t n, + const ordinal_t remaining_count, vtx_view_t remaining, + vtx_view_t edges_per_source, ordinal_t& hash_size, ordinal_t& max_entries, + ordinal_t& mem_chunk_size, ordinal_t& mem_chunk_count) { + ordinal_t avg_entries = 0; + if (!is_host_space && + static_cast(remaining_count) / static_cast(n) > 0.01) { + Kokkos::parallel_reduce( + "calc average among remaining", policy_t(0, remaining_count), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& thread_sum) { + ordinal_t u = remaining(i); + ordinal_t degree = edges_per_source(u); + thread_sum += degree; + }, + avg_entries); + // degrees are often skewed so we want to err on the side of bigger + // hashmaps + avg_entries = avg_entries * 2 / remaining_count; + avg_entries++; + if (avg_entries < 50) avg_entries = 50; + } else { + Kokkos::parallel_reduce( + "calc max", policy_t(0, remaining_count), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& thread_max) { + ordinal_t u = remaining(i); + ordinal_t degree = edges_per_source(u); + if (degree > thread_max) { + thread_max = degree; + } + }, + Kokkos::Max(avg_entries)); + // need precisely one larger than max, don't remember why atm + avg_entries++; + } + + // Set the hash_size as the next power of 2 bigger than hash_size_hint. + // - hash_size must be a power of two since we use & rather than % (which is + // slower) for computing the hash value for HashmapAccumulator. + max_entries = avg_entries; + hash_size = 1; + while (hash_size < max_entries) { + hash_size *= 2; + } + + // Determine memory chunk size for UniformMemoryPool + mem_chunk_size = hash_size; // for hash indices + mem_chunk_size += hash_size; // for hash begins + mem_chunk_size += + 3 * max_entries; // for hash nexts, keys, and values (unless scalar_t + // != ordinal_t, in which case memory is unused) + mem_chunk_size += 10; // for metadata + mem_chunk_count = exec_space::concurrency(); + if (mem_chunk_count > remaining_count) { + mem_chunk_count = remaining_count + 1; + } + + if (!is_host_space) { + // decrease number of mem_chunks to reduce memory usage if necessary + size_t mem_needed = static_cast(mem_chunk_count) * + static_cast(mem_chunk_size) * + sizeof(ordinal_t); + //~500MB + size_t max_mem_allowed = handle.max_mem_allowed; + if (mem_needed > max_mem_allowed) { + size_t chunk_dif = mem_needed - max_mem_allowed; + chunk_dif = chunk_dif / + (static_cast(mem_chunk_size) * sizeof(ordinal_t)); + chunk_dif++; + mem_chunk_count -= chunk_dif; + } + } + } + + static void deduplicate_graph(coarsen_handle& handle, const ordinal_t n, + const bool use_team, + vtx_view_t edges_per_source, + vtx_view_t dest_by_source, + wgt_view_t wgt_by_source, + const edge_view_t source_bucket_offset, + edge_offset_t& gc_nedges) { + if (handle.b == Hashmap || is_host_space) { + ordinal_t remaining_count = n; + vtx_view_t remaining("remaining vtx", n); + Kokkos::parallel_for( + policy_t(0, n), + KOKKOS_LAMBDA(const ordinal_t i) { remaining(i) = i; }); + // deduplicate rows in phases starting with the small degree rows so we + // can use small hashmaps increase the hashmap size each phase to the + // necessary size for twice the average of remaining rows + wgt_view_t wgt_out = wgt_by_source; + if (!scal_eq_ord && !is_host_space) { + // only necessary if teams might be used + wgt_out = wgt_view_t("wgts out", wgt_by_source.extent(0)); + } + do { + // determine size for hashmap + ordinal_t hash_size, max_entries, mem_chunk_size, mem_chunk_count; + getHashmapSizeAndCount(handle, n, remaining_count, remaining, + edges_per_source, hash_size, max_entries, + mem_chunk_size, mem_chunk_count); + // Create Uniform Initialized Memory Pool + KokkosKernels::Impl::PoolType pool_type = + KokkosKernels::Impl::ManyThread2OneChunk; + + if (is_host_space) { + pool_type = KokkosKernels::Impl::OneThread2OneChunk; + } + + bool use_dyn = should_use_dyn(n, source_bucket_offset, mem_chunk_count); + + uniform_memory_pool_t memory_pool(mem_chunk_count, mem_chunk_size, + ORD_MAX, pool_type); + + functorHashmapAccumulator hashmapAccumulator( + source_bucket_offset, dest_by_source, dest_by_source, wgt_by_source, + wgt_out, edges_per_source, memory_pool, hash_size, max_entries, + remaining, !scal_eq_ord); + + ordinal_t old_remaining_count = remaining_count; + if (!is_host_space && max_entries >= 128) { + Kokkos::parallel_reduce("hashmap time", + team_policy_t(old_remaining_count, 1, 64), + hashmapAccumulator, remaining_count); + } else { + if (use_dyn) { + Kokkos::parallel_reduce( + "hashmap time", + dyn_policy_t(0, old_remaining_count, Kokkos::ChunkSize(128)), + hashmapAccumulator, remaining_count); + } else { + Kokkos::parallel_reduce("hashmap time", + policy_t(0, old_remaining_count), + hashmapAccumulator, remaining_count); + } + } + + if (remaining_count > 0) { + vtx_view_t new_remaining("new remaining vtx", remaining_count); + + Kokkos::parallel_scan( + "move remaining vertices", policy_t(0, old_remaining_count), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& update, + const bool final) { + ordinal_t u = remaining(i); + if (edges_per_source(u) >= max_entries) { + if (final) { + new_remaining(update) = u; + } + update++; + } + }); + + remaining = new_remaining; + } + } while (remaining_count > 0); + Kokkos::parallel_reduce( + policy_t(0, n), + KOKKOS_LAMBDA(const ordinal_t i, edge_offset_t& sum) { + sum += edges_per_source(i); + }, + gc_nedges); + if (!scal_eq_ord && !is_host_space) { + Kokkos::deep_copy(wgt_by_source, wgt_out); + } + } else if (handle.b == Sort) { + // sort the (implicit) crs matrix + KokkosSparse::sort_crs_matrix(source_bucket_offset, + dest_by_source, wgt_by_source); + + // combine adjacent entries that are equal + if (use_team) { + // thread team version + wgt_view_t wgts_out("wgts after dedupe", wgt_by_source.extent(0)); + vtx_view_t dest_out("dest after dedupe", dest_by_source.extent(0)); + functorDedupeAfterSort deduper(source_bucket_offset, dest_by_source, + dest_out, wgt_by_source, wgts_out, + edges_per_source); + Kokkos::parallel_reduce("deduplicated sorted", team_policy_t(n, 64), + deduper, gc_nedges); + Kokkos::deep_copy(wgt_by_source, wgts_out); + Kokkos::deep_copy(dest_by_source, dest_out); + } else { + // no thread team version + functorDedupeAfterSort deduper(source_bucket_offset, dest_by_source, + dest_by_source, wgt_by_source, + wgt_by_source, edges_per_source); + Kokkos::parallel_reduce("deduplicated sorted", policy_t(0, n), deduper, + gc_nedges); + } + + } else if (handle.b == Hybrid) { + wgt_view_t wgt_out = wgt_by_source; + if (!scal_eq_ord && !is_host_space) { + // only necessary if teams might be used + wgt_out = wgt_view_t("wgts out", wgt_by_source.extent(0)); + } + ordinal_t limit = 128; + // sort the (implicit) crs matrix, but only the low degree rows + ordinal_t remaining_count = + KokkosSparse::sort_low_degree_rows_crs_matrix( + source_bucket_offset, dest_by_source, wgt_by_source, limit); + // combine adjacent entries that are equal + { + // no thread team version + functorDedupeLowDegreeAfterSort deduper( + source_bucket_offset, dest_by_source, dest_by_source, wgt_by_source, + wgt_out, edges_per_source, limit); + Kokkos::parallel_reduce("deduplicated sorted", policy_t(0, n), deduper, + gc_nedges); + } + vtx_view_t remaining("remaining vtx", remaining_count); + Kokkos::parallel_scan( + "move remaining vertices", policy_t(0, n), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& update, + const bool final) { + if (edges_per_source(i) > limit) { + if (final) { + remaining(update) = i; + } + update++; + } + }); + // deduplicate rows in phases starting with the small degree rows so we + // can use small hashmaps increase the hashmap size each phase to the + // necessary size for twice the average of remaining rows + while (remaining_count > 0) { + // determine size for hashmap + ordinal_t hash_size, max_entries, mem_chunk_size, mem_chunk_count; + getHashmapSizeAndCount(handle, n, remaining_count, remaining, + edges_per_source, hash_size, max_entries, + mem_chunk_size, mem_chunk_count); + // Create Uniform Initialized Memory Pool + KokkosKernels::Impl::PoolType pool_type = + KokkosKernels::Impl::ManyThread2OneChunk; + + if (is_host_space) { + pool_type = KokkosKernels::Impl::OneThread2OneChunk; + } + + uniform_memory_pool_t memory_pool(mem_chunk_count, mem_chunk_size, + ORD_MAX, pool_type); + + functorHashmapAccumulator hashmapAccumulator( + source_bucket_offset, dest_by_source, dest_by_source, wgt_by_source, + wgt_out, edges_per_source, memory_pool, hash_size, max_entries, + remaining, !scal_eq_ord); + + ordinal_t old_remaining_count = remaining_count; + if (!is_host_space && max_entries >= 128) { + Kokkos::parallel_reduce("hashmap time", + dyn_team_policy_t(old_remaining_count, 1, 64), + hashmapAccumulator, remaining_count); + } else { + Kokkos::parallel_reduce("hashmap time", + dyn_policy_t(0, old_remaining_count), + hashmapAccumulator, remaining_count); + } + + if (remaining_count > 0) { + vtx_view_t new_remaining("new remaining vtx", remaining_count); + + Kokkos::parallel_scan( + "move remaining vertices", policy_t(0, old_remaining_count), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& update, + const bool final) { + ordinal_t u = remaining(i); + if (edges_per_source(u) >= max_entries) { + if (final) { + new_remaining(update) = u; + } + update++; + } + }); + + remaining = new_remaining; + } + } + gc_nedges = 0; + Kokkos::parallel_reduce( + policy_t(0, n), + KOKKOS_LAMBDA(const ordinal_t i, edge_offset_t& sum) { + sum += edges_per_source(i); + }, + gc_nedges); + if (!scal_eq_ord && !is_host_space) { + Kokkos::deep_copy(wgt_by_source, wgt_out); + } + } + } + + struct translationFunctor { + matrix_t vcmap, g; + vtx_view_t mapped_edges, edges_per_source; + edge_view_t source_bucket_offset; + vtx_view_t edges_out; + wgt_view_t wgts_out; + ordinal_t workLength; + + translationFunctor(matrix_t _vcmap, matrix_t _g, vtx_view_t _mapped_edges, + vtx_view_t _edges_per_source, + edge_view_t _source_bucket_offset, vtx_view_t _edges_out, + wgt_view_t _wgts_out) + : vcmap(_vcmap), + g(_g), + mapped_edges(_mapped_edges), + edges_per_source(_edges_per_source), + source_bucket_offset(_source_bucket_offset), + edges_out(_edges_out), + wgts_out(_wgts_out), + workLength(_g.numRows()) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const member& t) const { + ordinal_t i = t.league_rank() * t.team_size() + t.team_rank(); + if (i >= workLength) return; + ordinal_t u = vcmap.graph.entries(i); + edge_offset_t start = g.graph.row_map(i); + edge_offset_t end = g.graph.row_map(i + 1); + Kokkos::parallel_for(Kokkos::ThreadVectorRange(t, start, end), + [=](const edge_offset_t idx) { + ordinal_t v = mapped_edges(idx); + if (u != v) { + // fix this, inefficient + edge_offset_t offset = Kokkos::atomic_fetch_add( + &edges_per_source(u), 1); + + offset += source_bucket_offset(u); + + edges_out(offset) = v; + wgts_out(offset) = g.values(idx); + } + }); + } + + KOKKOS_INLINE_FUNCTION + void operator()(const ordinal_t& i) const { + ordinal_t u = vcmap.graph.entries(i); + edge_offset_t start = g.graph.row_map(i); + edge_offset_t end = g.graph.row_map(i + 1); + for (edge_offset_t idx = start; idx < end; idx++) { + ordinal_t v = mapped_edges(idx); + if (u != v) { + // fix this + edge_offset_t offset = + Kokkos::atomic_fetch_add(&edges_per_source(u), 1); + + offset += source_bucket_offset(u); + + edges_out(offset) = v; + wgts_out(offset) = g.values(idx); + } + } + } + }; + + // optimized for regular distribution low degree rows + static coarse_level_triple build_nonskew(coarsen_handle& handle, + const matrix_t g, + const matrix_t vcmap, + vtx_view_t mapped_edges, + vtx_view_t edges_per_source) { + ordinal_t n = g.numRows(); + ordinal_t nc = vcmap.numCols(); + edge_view_t source_bucket_offset("source_bucket_offsets", nc + 1); + edge_offset_t gc_nedges = 0; + + Kokkos::parallel_scan("calc source offsets", policy_t(0, nc), + prefix_sum(edges_per_source, source_bucket_offset)); + + Kokkos::deep_copy(edges_per_source, static_cast(0)); + + edge_subview_t sbo_subview = Kokkos::subview(source_bucket_offset, nc); + edge_offset_t nnz_pre_dedupe = 0; + Kokkos::deep_copy(nnz_pre_dedupe, sbo_subview); + + vtx_view_t dest_by_source("dest_by_source", nnz_pre_dedupe); + wgt_view_t wgt_by_source("wgt_by_source", nnz_pre_dedupe); + + // translates fine entries into coarse entries and writes into coarse rows + translationFunctor translateF(vcmap, g, mapped_edges, edges_per_source, + source_bucket_offset, dest_by_source, + wgt_by_source); + if (is_host_space) { + bool use_dyn = + should_use_dyn(n, g.graph.row_map, exec_space::concurrency()); + if (use_dyn) { + Kokkos::parallel_for("move edges to coarse matrix", dyn_policy_t(0, n), + translateF); + } else { + Kokkos::parallel_for("move edges to coarse matrix", policy_t(0, n), + translateF); + } + } else { + auto execSpaceEnum = + KokkosKernels::Impl::kk_get_exec_space_type(); + int vectorLength = KokkosKernels::Impl::kk_get_suggested_vector_size( + n, g.nnz(), execSpaceEnum); + team_policy_t dummy(1, 1, vectorLength); + int teamSize = dummy.team_size_max(translateF, Kokkos::ParallelForTag()); + Kokkos::parallel_for( + "move edges to coarse matrix", + team_policy_t((n + teamSize - 1) / teamSize, teamSize, vectorLength), + translateF); + } + + deduplicate_graph(handle, nc, false, edges_per_source, dest_by_source, + wgt_by_source, source_bucket_offset, gc_nedges); + + edge_view_t source_offsets("source_offsets", nc + 1); + + Kokkos::parallel_scan("calc source offsets again", policy_t(0, nc), + prefix_sum(edges_per_source, source_offsets)); + + edge_subview_t edge_total_subview = Kokkos::subview(source_offsets, nc); + Kokkos::deep_copy(gc_nedges, edge_total_subview); + + vtx_view_t dest_idx("dest_idx", gc_nedges); + wgt_view_t wgts("wgts", gc_nedges); + + if (is_host_space) { + bool use_dyn = + should_use_dyn(nc, source_offsets, exec_space::concurrency()); + if (use_dyn) { + Kokkos::parallel_for( + "move deduped edges to new coarse matrix", dyn_policy_t(0, nc), + KOKKOS_LAMBDA(const ordinal_t& u) { + edge_offset_t start_origin = source_bucket_offset(u); + edge_offset_t start_dest = source_offsets(u); + for (ordinal_t idx = 0; idx < edges_per_source(u); idx++) { + dest_idx(start_dest + idx) = dest_by_source(start_origin + idx); + wgts(start_dest + idx) = wgt_by_source(start_origin + idx); + } + }); + } else { + Kokkos::parallel_for( + "move deduped edges to new coarse matrix", policy_t(0, nc), + KOKKOS_LAMBDA(const ordinal_t& u) { + edge_offset_t start_origin = source_bucket_offset(u); + edge_offset_t start_dest = source_offsets(u); + for (ordinal_t idx = 0; idx < edges_per_source(u); idx++) { + dest_idx(start_dest + idx) = dest_by_source(start_origin + idx); + wgts(start_dest + idx) = wgt_by_source(start_origin + idx); + } + }); + } + } else { + Kokkos::parallel_for( + "move deduped edges to new coarse matrix", + team_policy_t(nc, Kokkos::AUTO), KOKKOS_LAMBDA(const member& thread) { + ordinal_t u = thread.league_rank(); + edge_offset_t start_origin = source_bucket_offset(u); + edge_offset_t start_dest = source_offsets(u); + Kokkos::parallel_for( + Kokkos::TeamThreadRange(thread, edges_per_source(u)), + [=](const ordinal_t idx) { + dest_idx(start_dest + idx) = + dest_by_source(start_origin + idx); + wgts(start_dest + idx) = wgt_by_source(start_origin + idx); + }); + }); + } + + graph_type gc_graph(dest_idx, source_offsets); + matrix_t gc("gc", nc, wgts, gc_graph); + + coarse_level_triple next_level; + next_level.mtx = gc; + return next_level; + } + + // forms the explicit matrix created by symmetrizing the implicit matrix + static matrix_t collapse_directed_to_undirected( + const ordinal_t nc, const vtx_view_t source_edge_counts, + const edge_view_t source_row_map, const vtx_view_t source_destinations, + const wgt_view_t source_wgts) { + vtx_view_t coarse_degree("coarse degree", nc); + Kokkos::deep_copy(coarse_degree, source_edge_counts); + + Kokkos::parallel_for( + "count directed edges owned by opposite endpoint", + team_policy_t(nc, Kokkos::AUTO), KOKKOS_LAMBDA(const member& thread) { + ordinal_t u = thread.league_rank(); + edge_offset_t start = source_row_map(u); + edge_offset_t end = start + source_edge_counts(u); + Kokkos::parallel_for(Kokkos::TeamThreadRange(thread, start, end), + [=](const edge_offset_t idx) { + ordinal_t v = source_destinations(idx); + // increment other vertex + Kokkos::atomic_fetch_add(&coarse_degree(v), 1); + }); + }); + + edge_view_t target_row_map("target row map", nc + 1); + + Kokkos::parallel_scan("calc target row map", policy_t(0, nc), + prefix_sum(coarse_degree, target_row_map)); + + Kokkos::deep_copy(coarse_degree, static_cast(0)); + + edge_offset_t coarse_edges_total = 0; + edge_subview_t coarse_edge_total_subview = + Kokkos::subview(target_row_map, nc); + Kokkos::deep_copy(coarse_edges_total, coarse_edge_total_subview); + + vtx_view_t dest_idx("dest_idx", coarse_edges_total); + wgt_view_t wgts("wgts", coarse_edges_total); + + Kokkos::parallel_for( + "move edges into correct size matrix", team_policy_t(nc, Kokkos::AUTO), + functorCollapseDirectedToUndirected( + source_row_map, target_row_map, source_edge_counts, coarse_degree, + source_destinations, dest_idx, source_wgts, wgts)); + + graph_type gc_graph(dest_idx, target_row_map); + matrix_t gc("gc", nc, wgts, gc_graph); + return gc; + } + + // optimized for skewed degree distributions + static coarse_level_triple build_skew(coarsen_handle& handle, + const matrix_t g, const matrix_t vcmap, + vtx_view_t mapped_edges, + vtx_view_t degree_initial) { + ordinal_t n = g.numRows(); + ordinal_t nc = vcmap.numCols(); + edge_offset_t gc_nedges = 0; + + vtx_view_t edges_per_source("edges_per_source", nc); + + // recount with edges only belonging to coarse vertex of smaller degree + // matrix becomes directed + Kokkos::parallel_for( + "recount edges", team_policy_t(n, Kokkos::AUTO), + KOKKOS_LAMBDA(const member& thread) { + ordinal_t outer_idx = thread.league_rank(); + ordinal_t u = vcmap.graph.entries(outer_idx); + edge_offset_t start = g.graph.row_map(outer_idx); + edge_offset_t end = g.graph.row_map(outer_idx + 1); + ordinal_t nonLoopEdgesTotal = 0; + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(thread, start, end), + [=](const edge_offset_t idx, ordinal_t& local_sum) { + ordinal_t v = mapped_edges(idx); + bool degree_less = degree_initial(u) < degree_initial(v); + bool degree_equal = degree_initial(u) == degree_initial(v); + if (u != v && (degree_less || (degree_equal && u < v))) { + local_sum++; + } + }, + nonLoopEdgesTotal); + Kokkos::single(Kokkos::PerTeam(thread), [=]() { + Kokkos::atomic_add(&edges_per_source(u), nonLoopEdgesTotal); + }); + }); + + edge_view_t source_bucket_offset("source_bucket_offsets", nc + 1); + + Kokkos::parallel_scan("calc source offsets", policy_t(0, nc), + prefix_sum(edges_per_source, source_bucket_offset)); + edge_subview_t sbo_subview = Kokkos::subview(source_bucket_offset, nc); + edge_offset_t nnz_pre_dedupe = 0; + Kokkos::deep_copy(nnz_pre_dedupe, sbo_subview); + + Kokkos::deep_copy(edges_per_source, static_cast(0)); + vtx_view_t dest_by_source("dest by source", nnz_pre_dedupe); + wgt_view_t wgt_by_source("wgt by source", nnz_pre_dedupe); + Kokkos::parallel_for( + "combine fine rows", team_policy_t(n, Kokkos::AUTO), + KOKKOS_LAMBDA(const member& thread) { + ordinal_t outer_idx = thread.league_rank(); + ordinal_t u = vcmap.graph.entries(outer_idx); + edge_offset_t start = g.graph.row_map(outer_idx); + edge_offset_t end = g.graph.row_map(outer_idx + 1); + Kokkos::parallel_for( + Kokkos::TeamThreadRange(thread, start, end), + [=](const edge_offset_t idx) { + ordinal_t v = mapped_edges(idx); + bool degree_less = degree_initial(u) < degree_initial(v); + bool degree_equal = degree_initial(u) == degree_initial(v); + if (degree_less || (degree_equal && u < v)) { + edge_offset_t offset = + Kokkos::atomic_fetch_add(&edges_per_source(u), 1); + + offset += source_bucket_offset(u); + + dest_by_source(offset) = v; + wgt_by_source(offset) = g.values(idx); + } + }); + }); + gc_nedges = 0; + + deduplicate_graph(handle, nc, true, edges_per_source, dest_by_source, + wgt_by_source, source_bucket_offset, gc_nedges); + + // form the final coarse graph, which requires symmetrizing the matrix + matrix_t gc = collapse_directed_to_undirected( + nc, edges_per_source, source_bucket_offset, dest_by_source, + wgt_by_source); + + coarse_level_triple next_level; + next_level.mtx = gc; + return next_level; + } + + // optimized for very large row sizes caused by lots of duplicate entries + // first translates each fine entry to its coarse vertex label + // deduplicates within each fine row + // combines fine rows into coarse rows + // deduplicates within each coarse row + static coarse_level_triple build_high_duplicity(coarsen_handle& handle, + const matrix_t g, + const matrix_t vcmap, + vtx_view_t mapped_edges, + vtx_view_t degree_initial) { + ordinal_t n = g.numRows(); + ordinal_t nc = vcmap.numCols(); + edge_offset_t gc_nedges = 0; + + vtx_view_t dedupe_count("dedupe count", n); + edge_view_t row_map_copy("row map copy", n + 1); + + // recount fine row sizes with edges only belonging to fine vertex of coarse + // vertex of smaller degree matrix becomes directed + Kokkos::parallel_for( + "recount edges", team_policy_t(n, Kokkos::AUTO), + KOKKOS_LAMBDA(const member& thread) { + ordinal_t outer_idx = thread.league_rank(); + ordinal_t u = vcmap.graph.entries(outer_idx); + edge_offset_t start = g.graph.row_map(outer_idx); + edge_offset_t end = g.graph.row_map(outer_idx + 1); + ordinal_t nonLoopEdgesTotal = 0; + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(thread, start, end), + [=](const edge_offset_t idx, ordinal_t& local_sum) { + ordinal_t v = mapped_edges(idx); + bool degree_less = degree_initial(u) < degree_initial(v); + bool degree_equal = degree_initial(u) == degree_initial(v); + if (u != v && (degree_less || (degree_equal && u < v))) { + local_sum++; + } + }, + nonLoopEdgesTotal); + Kokkos::single(Kokkos::PerTeam(thread), [=]() { + dedupe_count(outer_idx) = nonLoopEdgesTotal; + }); + }); + + Kokkos::parallel_scan("calc source offsets", policy_t(0, n), + prefix_sum(dedupe_count, row_map_copy)); + // reset counters to 0 + Kokkos::deep_copy(dedupe_count, static_cast(0)); + + edge_subview_t fine_recount_subview = Kokkos::subview(row_map_copy, n); + edge_offset_t fine_recount = 0; + Kokkos::deep_copy(fine_recount, fine_recount_subview); + + vtx_view_t dest_fine("fine to coarse dests", fine_recount); + wgt_view_t wgt_fine("fine to coarse wgts", fine_recount); + + // create a new directed version of the fine matrix + Kokkos::parallel_for( + "move edges to new matrix", team_policy_t(n, Kokkos::AUTO), + KOKKOS_LAMBDA(const member& thread) { + ordinal_t outer_idx = thread.league_rank(); + ordinal_t u = vcmap.graph.entries(outer_idx); + edge_offset_t start = g.graph.row_map(outer_idx); + edge_offset_t end = g.graph.row_map(outer_idx + 1); + Kokkos::parallel_for( + Kokkos::TeamThreadRange(thread, start, end), + [=](const edge_offset_t idx) { + ordinal_t v = mapped_edges(idx); + bool degree_less = degree_initial(u) < degree_initial(v); + bool degree_equal = degree_initial(u) == degree_initial(v); + if (u != v && (degree_less || (degree_equal && u < v))) { + edge_offset_t offset = + Kokkos::atomic_fetch_add(&dedupe_count(outer_idx), 1); + + offset += row_map_copy(outer_idx); + + dest_fine(offset) = v; + wgt_fine(offset) = g.values(idx); + } + }); + }); + //"delete" these views + Kokkos::resize(mapped_edges, 0); + + // deduplicate coarse adjacencies within each fine row + deduplicate_graph(handle, n, true, dedupe_count, dest_fine, wgt_fine, + row_map_copy, gc_nedges); + + edge_view_t source_bucket_offset("source_bucket_offsets", nc + 1); + vtx_view_t edges_per_source("edges_per_source", nc); + + Kokkos::parallel_for( + "sum fine row sizes", policy_t(0, n), KOKKOS_LAMBDA(const ordinal_t i) { + ordinal_t u = vcmap.graph.entries(i); + Kokkos::atomic_fetch_add(&edges_per_source(u), dedupe_count(i)); + }); + Kokkos::parallel_scan("calc source offsets", policy_t(0, nc), + prefix_sum(edges_per_source, source_bucket_offset)); + Kokkos::deep_copy(edges_per_source, static_cast(0)); + vtx_view_t dest_by_source("dest by source", gc_nedges); + wgt_view_t wgt_by_source("wgt by source", gc_nedges); + Kokkos::parallel_for( + "combine deduped fine rows", team_policy_t(n, Kokkos::AUTO), + KOKKOS_LAMBDA(const member& thread) { + ordinal_t outer_idx = thread.league_rank(); + ordinal_t u = vcmap.graph.entries(outer_idx); + edge_offset_t start = row_map_copy(outer_idx); + edge_offset_t end = start + dedupe_count(outer_idx); + Kokkos::parallel_for( + Kokkos::TeamThreadRange(thread, start, end), + [=](const edge_offset_t idx) { + ordinal_t v = dest_fine(idx); + bool degree_less = degree_initial(u) < degree_initial(v); + bool degree_equal = degree_initial(u) == degree_initial(v); + if (degree_less || (degree_equal && u < v)) { + edge_offset_t offset = + Kokkos::atomic_fetch_add(&edges_per_source(u), 1); + + offset += source_bucket_offset(u); + + dest_by_source(offset) = v; + wgt_by_source(offset) = wgt_fine(idx); + } + }); + }); + gc_nedges = 0; + Kokkos::resize(dest_fine, 0); + Kokkos::resize(wgt_fine, 0); + + deduplicate_graph(handle, nc, true, edges_per_source, dest_by_source, + wgt_by_source, source_bucket_offset, gc_nedges); + + // form the final coarse graph, which requires symmetrizing the matrix + matrix_t gc = collapse_directed_to_undirected( + nc, edges_per_source, source_bucket_offset, dest_by_source, + wgt_by_source); + + coarse_level_triple next_level; + next_level.mtx = gc; + return next_level; + } + + struct countingFunctor { + // counts adjancies for each coarse vertex + // also calculates coarse vertex wgts + matrix_t vcmap, g; + vtx_view_t mapped_edges, degree_initial; + vtx_view_t c_vtx_w, f_vtx_w; + ordinal_t workLength; + + countingFunctor(matrix_t _vcmap, matrix_t _g, vtx_view_t _mapped_edges, + vtx_view_t _degree_initial, vtx_view_t _c_vtx_w, + vtx_view_t _f_vtx_w) + : vcmap(_vcmap), + g(_g), + mapped_edges(_mapped_edges), + degree_initial(_degree_initial), + c_vtx_w(_c_vtx_w), + f_vtx_w(_f_vtx_w), + workLength(_g.numRows()) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const member& t) const { + ordinal_t i = t.league_rank() * t.team_size() + t.team_rank(); + if (i >= workLength) return; + ordinal_t u = vcmap.graph.entries(i); + edge_offset_t start = g.graph.row_map(i); + edge_offset_t end = g.graph.row_map(i + 1); + ordinal_t nonLoopEdgesTotal = 0; + Kokkos::parallel_reduce( + Kokkos::ThreadVectorRange(t, start, end), + [=](const edge_offset_t idx, ordinal_t& local_sum) { + ordinal_t v = vcmap.graph.entries(g.graph.entries(idx)); + mapped_edges(idx) = v; + if (u != v) { + local_sum++; + } + }, + nonLoopEdgesTotal); + Kokkos::single(Kokkos::PerThread(t), [=]() { + Kokkos::atomic_add(°ree_initial(u), nonLoopEdgesTotal); + Kokkos::atomic_add(&c_vtx_w(u), f_vtx_w(i)); + }); + } + + KOKKOS_INLINE_FUNCTION + void operator()(const ordinal_t& i) const { + ordinal_t u = vcmap.graph.entries(i); + edge_offset_t start = g.graph.row_map(i); + edge_offset_t end = g.graph.row_map(i + 1); + ordinal_t nonLoopEdgesTotal = 0; + for (edge_offset_t idx = start; idx < end; idx++) { + ordinal_t v = vcmap.graph.entries(g.graph.entries(idx)); + mapped_edges(idx) = v; + if (u != v) { + nonLoopEdgesTotal++; + } + } + Kokkos::atomic_add(°ree_initial(u), nonLoopEdgesTotal); + Kokkos::atomic_add(&c_vtx_w(u), f_vtx_w(i)); + } + }; + + static coarse_level_triple build_coarse_graph(coarsen_handle& handle, + const coarse_level_triple level, + const matrix_t vcmap) { + if (handle.b == Spgemm || handle.b == Spgemm_transpose_first) { + return build_coarse_graph_spgemm(handle, level, vcmap); + } + + matrix_t g = level.mtx; + ordinal_t n = g.numRows(); + ordinal_t nc = vcmap.numCols(); + + vtx_view_t mapped_edges("mapped edges", g.nnz()); + + vtx_view_t degree_initial("edges_per_source", nc); + vtx_view_t f_vtx_w = level.vtx_wgts; + vtx_view_t c_vtx_w = vtx_view_t("coarse vertex weights", nc); + + // count non-self loop edges per coarse vertex + // also computes coarse vertex weights + countingFunctor countF(vcmap, g, mapped_edges, degree_initial, c_vtx_w, + f_vtx_w); + if (is_host_space) { + Kokkos::parallel_for( + "count edges per coarse vertex (also compute coarse vertex weights)", + policy_t(0, n), countF); + } else { + auto execSpaceEnum = + KokkosKernels::Impl::kk_get_exec_space_type(); + int vectorLength = KokkosKernels::Impl::kk_get_suggested_vector_size( + n, g.nnz(), execSpaceEnum); + team_policy_t dummy(1, 1, vectorLength); + int teamSize = dummy.team_size_max(countF, Kokkos::ParallelForTag()); + // count edges per vertex + Kokkos::parallel_for( + "count edges per coarse vertex (also compute coarse vertex weights)", + team_policy_t((n + teamSize - 1) / teamSize, teamSize, vectorLength), + countF); + } + + // compute max row size and avg row size + // use this to determine most efficient method for building coarse graph + // (for load balance primarily) + edge_offset_t total_unduped = 0; + ordinal_t max_unduped = 0; + Kokkos::parallel_reduce( + "find max", policy_t(0, nc), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& l_max) { + if (l_max <= degree_initial(i)) { + l_max = degree_initial(i); + } + }, + Kokkos::Max(max_unduped)); + Kokkos::parallel_reduce( + "find total", policy_t(0, nc), + KOKKOS_LAMBDA(const ordinal_t i, edge_offset_t& sum) { + sum += degree_initial(i); + }, + total_unduped); + ordinal_t avg_unduped = total_unduped / nc; + + coarse_level_triple next_level; + // optimized subroutines for sufficiently irregular graphs or high average + // adjacency rows don't do optimizations if running on CPU (the default host + // space) + if (avg_unduped > (nc / 4) && !is_host_space) { + next_level = + build_high_duplicity(handle, g, vcmap, mapped_edges, degree_initial); + } else if (avg_unduped > 50 && (max_unduped / 10) > avg_unduped && + !is_host_space) { + next_level = build_skew(handle, g, vcmap, mapped_edges, degree_initial); + } else { + next_level = + build_nonskew(handle, g, vcmap, mapped_edges, degree_initial); + } + + next_level.vtx_wgts = c_vtx_w; + next_level.level = level.level + 1; + next_level.interp_mtx = vcmap; + next_level.uniform_weights = false; + return next_level; + } + + static matrix_t generate_coarse_mapping(coarsen_handle& handle, + const matrix_t g, + bool uniform_weights) { + matrix_t interpolation_graph; + int choice = 0; + + switch (handle.h) { + case Match: choice = 0; break; + case MtMetis: choice = 1; break; + default: choice = 0; + } + + switch (handle.h) { + case HECv1: + interpolation_graph = mapper_t::coarsen_HEC(g, uniform_weights); + break; + case Match: + case MtMetis: + interpolation_graph = + mapper_t::coarsen_match(g, uniform_weights, choice); + break; + case MIS2: interpolation_graph = mapper_t::coarsen_mis_2(g); break; + case GOSHv2: interpolation_graph = mapper_t::coarsen_GOSH_v2(g); break; + case GOSHv1: interpolation_graph = mapper_t::coarsen_GOSH(g); break; + } + return interpolation_graph; + } + + // we can support weighted vertices pretty easily, but we don't rn + // this function can't return the generated list directly because of an NVCC + // compiler bug caller must use the get_levels() method after calling this + // function + static void generate_coarse_graphs(coarsen_handle& handle, + const matrix_t fine_g, + bool uniform_weights = false) { + ordinal_t fine_n = fine_g.numRows(); + std::list& levels = handle.results; + levels.clear(); + coarse_level_triple finest; + finest.mtx = fine_g; + // 1-indexed, not zero indexed + finest.level = 1; + finest.uniform_weights = uniform_weights; + vtx_view_t vtx_weights("vertex weights", fine_n); + Kokkos::deep_copy(vtx_weights, static_cast(1)); + finest.vtx_wgts = vtx_weights; + levels.push_back(finest); + while (levels.rbegin()->mtx.numRows() > handle.coarse_vtx_cutoff) { + coarse_level_triple current_level = *levels.rbegin(); + + matrix_t interp_graph = generate_coarse_mapping( + handle, current_level.mtx, current_level.uniform_weights); + + if (interp_graph.numCols() < handle.min_allowed_vtx) { + break; + } + + coarse_level_triple next_level = + build_coarse_graph(handle, current_level, interp_graph); + + levels.push_back(next_level); + + if (levels.size() > handle.max_levels) break; + } + } +}; + +} // end namespace Experimental +} // end namespace KokkosGraph +// exclude from Cuda builds without lambdas enabled +#endif diff --git a/src/graph/KokkosGraph_CoarsenHeuristics.hpp b/src/graph/KokkosGraph_CoarsenHeuristics.hpp new file mode 100644 index 0000000000..a9a5ce3e21 --- /dev/null +++ b/src/graph/KokkosGraph_CoarsenHeuristics.hpp @@ -0,0 +1,1191 @@ +#pragma once +// exclude from Cuda builds without lambdas enabled +#if !defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) +#include +#include +#include +#include +#include +#include "KokkosSparse_CrsMatrix.hpp" +#include "KokkosGraph_MIS2.hpp" + +namespace KokkosGraph { + +namespace Experimental { + +template +class coarsen_heuristics { + public: + // define internal types + using matrix_t = crsMat; + using exec_space = typename matrix_t::execution_space; + using mem_space = typename matrix_t::memory_space; + using Device = typename matrix_t::device_type; + using ordinal_t = typename matrix_t::ordinal_type; + using edge_offset_t = typename matrix_t::size_type; + using scalar_t = typename matrix_t::value_type; + using vtx_view_t = typename Kokkos::View; + using wgt_view_t = typename Kokkos::View; + using edge_view_t = typename Kokkos::View; + using edge_subview_t = typename Kokkos::View; + using rand_view_t = typename Kokkos::View; + using graph_type = typename matrix_t::staticcrsgraph_type; + using policy_t = typename Kokkos::RangePolicy; + using team_policy_t = typename Kokkos::TeamPolicy; + using member = typename team_policy_t::member_type; + using part_view_t = typename Kokkos::View; + using pool_t = Kokkos::Random_XorShift64_Pool; + using gen_t = typename pool_t::generator_type; + using hasher_t = Kokkos::pod_hash; + static constexpr ordinal_t get_null_val() { + if (std::is_signed::value) { + return -1; + } else { + return std::numeric_limits::max(); + } + } + static constexpr ordinal_t ORD_MAX = get_null_val(); + + static vtx_view_t generate_permutation(ordinal_t n, pool_t rand_pool) { + rand_view_t randoms("randoms", n); + + Kokkos::parallel_for( + "create random entries", policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + gen_t generator = rand_pool.get_state(); + randoms(i) = generator.urand64(); + rand_pool.free_state(generator); + }); + + int t_buckets = 2 * n; + vtx_view_t buckets("buckets", t_buckets); + Kokkos::parallel_for( + "init buckets", policy_t(0, t_buckets), + KOKKOS_LAMBDA(ordinal_t i) { buckets(i) = ORD_MAX; }); + + uint64_t max = std::numeric_limits::max(); + uint64_t bucket_size = max / t_buckets; + Kokkos::parallel_for( + "insert buckets", policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + ordinal_t bucket = randoms(i) / bucket_size; + // find the next open bucket + for (;; bucket++) { + if (bucket >= t_buckets) bucket -= t_buckets; + if (buckets(bucket) == ORD_MAX) { + // attempt to insert into bucket + if (Kokkos::atomic_compare_exchange_strong(&buckets(bucket), + ORD_MAX, i)) { + break; + } + } + } + }); + + vtx_view_t permute("permutation", n); + Kokkos::parallel_scan( + "extract permutation", policy_t(0, t_buckets), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& update, const bool final) { + if (buckets(i) != ORD_MAX) { + if (final) { + permute(update) = buckets(i); + } + update++; + } + }); + + return permute; + } + + // create a mapping when some vertices are already mapped + // hn is a list of vertices such that vertex i wants to aggregate with vertex + // hn(i) + static ordinal_t parallel_map_construct_prefilled( + vtx_view_t vcmap, const ordinal_t n, const vtx_view_t vperm, + const vtx_view_t hn, Kokkos::View nvertices_coarse) { + vtx_view_t match("match", n); + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + if (vcmap(i) == ORD_MAX) { + match(i) = ORD_MAX; + } else { + match(i) = n + 1; + } + }); + ordinal_t perm_length = vperm.extent(0); + + // construct mapping using heaviest edges + int swap = 1; + vtx_view_t curr_perm = vperm; + while (perm_length > 0) { + vtx_view_t next_perm("next perm", perm_length); + Kokkos::View next_length("next_length"); + + Kokkos::parallel_for( + policy_t(0, perm_length), KOKKOS_LAMBDA(ordinal_t i) { + ordinal_t u = curr_perm(i); + ordinal_t v = hn(u); + int condition = u < v; + // need to enforce an ordering condition to allow hard-stall + // conditions to be broken + if (condition ^ swap) { + if (Kokkos::atomic_compare_exchange_strong(&match(u), ORD_MAX, + v)) { + if (u == v || Kokkos::atomic_compare_exchange_strong( + &match(v), ORD_MAX, u)) { + ordinal_t cv = + Kokkos::atomic_fetch_add(&nvertices_coarse(), 1); + vcmap(u) = cv; + vcmap(v) = cv; + } else { + if (vcmap(v) != ORD_MAX) { + vcmap(u) = vcmap(v); + } else { + match(u) = ORD_MAX; + } + } + } + } + }); + Kokkos::fence(); + // add the ones that failed to be reprocessed next round + // maybe count these then create next_perm to save memory? + Kokkos::parallel_for( + policy_t(0, perm_length), KOKKOS_LAMBDA(ordinal_t i) { + ordinal_t u = curr_perm(i); + if (vcmap(u) == ORD_MAX) { + ordinal_t add_next = Kokkos::atomic_fetch_add(&next_length(), 1); + next_perm(add_next) = u; + } + }); + Kokkos::fence(); + swap = swap ^ 1; + Kokkos::deep_copy(perm_length, next_length); + curr_perm = next_perm; + } + ordinal_t nc = 0; + Kokkos::deep_copy(nc, nvertices_coarse); + return nc; + } + + // hn is a list of vertices such that vertex i wants to aggregate with vertex + // hn(i) + static ordinal_t parallel_map_construct(vtx_view_t vcmap, const ordinal_t n, + const vtx_view_t vperm, + const vtx_view_t hn, + const vtx_view_t ordering) { + vtx_view_t match("match", n); + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { match(i) = ORD_MAX; }); + ordinal_t perm_length = n; + Kokkos::View nvertices_coarse("nvertices"); + + // construct mapping using heaviest edges + int swap = 1; + vtx_view_t curr_perm = vperm; + while (perm_length > 0) { + vtx_view_t next_perm("next perm", perm_length); + Kokkos::View next_length("next_length"); + + Kokkos::parallel_for( + policy_t(0, perm_length), KOKKOS_LAMBDA(ordinal_t i) { + ordinal_t u = curr_perm(i); + ordinal_t v = hn(u); + int condition = ordering(u) < ordering(v); + // need to enforce an ordering condition to allow hard-stall + // conditions to be broken + if (condition ^ swap) { + if (Kokkos::atomic_compare_exchange_strong(&match(u), ORD_MAX, + v)) { + if (u == v || Kokkos::atomic_compare_exchange_strong( + &match(v), ORD_MAX, u)) { + ordinal_t cv = u; + if (v < u) { + cv = v; + } + vcmap(u) = cv; + vcmap(v) = cv; + } else { + if (vcmap(v) != ORD_MAX) { + vcmap(u) = vcmap(v); + } else { + match(u) = ORD_MAX; + } + } + } + } + }); + Kokkos::fence(); + // add the ones that failed to be reprocessed next round + // maybe count these then create next_perm to save memory? + Kokkos::parallel_scan( + policy_t(0, perm_length), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& update, + const bool final) { + ordinal_t u = curr_perm(i); + if (vcmap(u) == ORD_MAX) { + if (final) { + next_perm(update) = u; + } + update++; + } + if (final && (i + 1) == perm_length) { + next_length() = update; + } + }); + Kokkos::fence(); + swap = swap ^ 1; + Kokkos::deep_copy(perm_length, next_length); + curr_perm = next_perm; + } + Kokkos::parallel_scan( + "assign aggregates", policy_t(0, n), + KOKKOS_LAMBDA(const ordinal_t u, ordinal_t& update, const bool final) { + if (vcmap(u) == u) { + if (final) { + vcmap(u) = update; + } + update++; + } else if (final) { + vcmap(u) = vcmap(u) + n; + } + if (final && (u + 1) == n) { + nvertices_coarse() = update; + } + }); + Kokkos::parallel_for( + "propagate aggregates", policy_t(0, n), KOKKOS_LAMBDA(ordinal_t u) { + if (vcmap(u) >= n) { + ordinal_t c_id = vcmap(u) - n; + vcmap(u) = vcmap(c_id); + } + }); + ordinal_t nc = 0; + Kokkos::deep_copy(nc, nvertices_coarse); + return nc; + } + + static part_view_t GOSH_clusters(const matrix_t& g) { + // finds the central vertices for GOSH clusters + // approximately this is a maximal independent set (if you pretend edges + // whose endpoints both exceed degree thresholds don't exist) IS vertices + // are preferred to be vertices with high degree, so it should be small + + ordinal_t n = g.numRows(); + + // 0: unassigned + // 1: in IS + //-1: adjacent to an IS vertex + part_view_t state("psuedo is membership", n); + + ordinal_t unassigned_total = n; + + // gonna keep this as an edge view in case we wanna do weighted degree + edge_view_t degrees("degrees", n); + vtx_view_t unassigned("unassigned vertices", n); + Kokkos::parallel_for( + "populate degrees", policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + degrees(i) = g.graph.row_map(i + 1) - g.graph.row_map(i); + unassigned(i) = i; + }); + edge_offset_t threshold = g.nnz() / g.numRows(); + + while (unassigned_total > 0) { + part_view_t tuple_state("tuple state", n); + edge_view_t tuple_degree("tuple rand", n); + vtx_view_t tuple_idx("tuple index", n); + + part_view_t tuple_state_update("tuple state", n); + edge_view_t tuple_degree_update("tuple rand", n); + vtx_view_t tuple_idx_update("tuple index", n); + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(const ordinal_t i) { + tuple_state(i) = state(i); + tuple_degree(i) = degrees(i); + tuple_idx(i) = i; + }); + + Kokkos::parallel_for( + policy_t(0, unassigned_total), KOKKOS_LAMBDA(const ordinal_t i) { + ordinal_t u = unassigned(i); + int max_state = tuple_state(u); + edge_offset_t max_degree = tuple_degree(u); + ordinal_t max_idx = tuple_idx(u); + + for (edge_offset_t j = g.graph.row_map(u); + j < g.graph.row_map(u + 1); j++) { + ordinal_t v = g.graph.entries(j); + bool is_max = false; + if (tuple_state(v) > max_state) { + is_max = true; + } else if (tuple_state(v) == max_state) { + if (tuple_degree(v) > max_degree) { + is_max = true; + } else if (tuple_degree(v) == max_degree) { + if (tuple_idx(v) > max_idx) { + is_max = true; + } + } + } + // pretend edges between two vertices exceeding threshold do not + // exist + if (degrees(u) > threshold && degrees(v) > threshold) { + is_max = false; + } + if (is_max) { + max_state = tuple_state(v); + max_degree = tuple_degree(v); + max_idx = tuple_idx(v); + } + } + tuple_state_update(u) = max_state; + tuple_degree_update(u) = max_degree; + tuple_idx_update(u) = max_idx; + }); + + Kokkos::parallel_for( + policy_t(0, unassigned_total), KOKKOS_LAMBDA(const ordinal_t i) { + ordinal_t u = unassigned(i); + tuple_state(u) = tuple_state_update(u); + tuple_degree(u) = tuple_degree_update(u); + tuple_idx(u) = tuple_idx_update(u); + }); + + ordinal_t next_unassigned_total = 0; + Kokkos::parallel_reduce( + policy_t(0, unassigned_total), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& thread_sum) { + ordinal_t u = unassigned(i); + if (state(u) == 0) { + if (tuple_idx(u) == u) { + state(u) = 1; + } + // check if at least one of neighbors are in the IS or will be + // placed into the IS + else if (tuple_state(u) == 1 || + tuple_idx(tuple_idx(u)) == tuple_idx(u)) { + state(u) = -1; + } + } + if (state(u) == 0) { + thread_sum++; + } + }, + next_unassigned_total); + + vtx_view_t next_unassigned("next unassigned", next_unassigned_total); + Kokkos::parallel_scan( + "create next unassigned", policy_t(0, unassigned_total), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& update, + const bool final) { + ordinal_t u = unassigned(i); + if (state(u) == 0) { + if (final) { + next_unassigned(update) = u; + } + update++; + } + }); + unassigned_total = next_unassigned_total; + unassigned = next_unassigned; + } + return state; + } + + static matrix_t coarsen_mis_2(const matrix_t& g) { + ordinal_t n = g.numRows(); + + typename matrix_t::staticcrsgraph_type::entries_type::non_const_value_type + nc = 0; + vtx_view_t vcmap = KokkosGraph::graph_mis2_aggregate< + Device, typename matrix_t::staticcrsgraph_type::row_map_type, + typename matrix_t::staticcrsgraph_type::entries_type, vtx_view_t>( + g.graph.row_map, g.graph.entries, nc); + + edge_view_t row_map("interpolate row map", n + 1); + + Kokkos::parallel_for( + policy_t(0, n + 1), KOKKOS_LAMBDA(ordinal_t u) { row_map(u) = u; }); + + vtx_view_t entries("interpolate entries", n); + wgt_view_t values("interpolate values", n); + // compute the interpolation weights + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t u) { + entries(u) = vcmap(u); + values(u) = 1.0; + }); + + graph_type graph(entries, row_map); + matrix_t interp("interpolate", nc, values, graph); + + return interp; + } + + static matrix_t coarsen_GOSH(const matrix_t& g) { + ordinal_t n = g.numRows(); + + part_view_t colors = GOSH_clusters(g); + + Kokkos::View nvc("nvertices_coarse"); + vtx_view_t vcmap("vcmap", n); + + int first_color = 1; + + // create aggregates for color 1 + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + if (colors(i) == first_color) { + vcmap(i) = Kokkos::atomic_fetch_add(&nvc(), 1); + } else { + vcmap(i) = ORD_MAX; + } + }); + + // add unaggregated vertices to aggregate of highest degree neighbor + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + if (colors(i) != first_color) { + // could use a thread team here + edge_offset_t max_degree = 0; + for (edge_offset_t j = g.graph.row_map(i); + j < g.graph.row_map(i + 1); j++) { + ordinal_t v = g.graph.entries(j); + edge_offset_t degree = + g.graph.row_map(v + 1) - g.graph.row_map(v); + if (colors(v) == first_color && degree > max_degree) { + max_degree = degree; + vcmap(i) = vcmap(v); + } + } + } + }); + + ordinal_t nc = 0; + Kokkos::deep_copy(nc, nvc); + + edge_view_t row_map("interpolate row map", n + 1); + + Kokkos::parallel_for( + policy_t(0, n + 1), KOKKOS_LAMBDA(ordinal_t u) { row_map(u) = u; }); + + vtx_view_t entries("interpolate entries", n); + wgt_view_t values("interpolate values", n); + // compute the interpolation weights + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t u) { + entries(u) = vcmap(u); + values(u) = 1.0; + }); + + graph_type graph(entries, row_map); + matrix_t interp("interpolate", nc, values, graph); + + return interp; + } + + static matrix_t coarsen_GOSH_v2(const matrix_t& g) { + ordinal_t n = g.numRows(); + + Kokkos::View nvc("nvertices_coarse"); + vtx_view_t vcmap("vcmap", n); + + edge_offset_t threshold_d = g.nnz() / n; + if (threshold_d < 50) { + threshold_d = 50; + } + // create aggregates for large degree vtx + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + if (g.graph.row_map(i + 1) - g.graph.row_map(i) > threshold_d) { + ordinal_t cv = Kokkos::atomic_fetch_add(&nvc(), 1); + vcmap(i) = cv; + } else { + vcmap(i) = ORD_MAX; + } + }); + + // add vertex to max wgt neighbor's aggregate + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + if (vcmap(i) == ORD_MAX) { + ordinal_t argmax = ORD_MAX; + scalar_t max_w = 0; + for (edge_offset_t j = g.graph.row_map(i); + j < g.graph.row_map(i + 1); j++) { + ordinal_t v = g.graph.entries(j); + ordinal_t wgt = g.values(j); + if (vcmap(v) != ORD_MAX) { + if (wgt >= max_w) { + max_w = wgt; + argmax = v; + } + } + } + if (argmax != ORD_MAX) { + vcmap(i) = vcmap(argmax); + } + } + }); + + // add vertex to max degree neighbor's aggregate + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + if (vcmap(i) == ORD_MAX) { + ordinal_t argmax = ORD_MAX; + edge_offset_t max_d = 0; + for (edge_offset_t j = g.graph.row_map(i); + j < g.graph.row_map(i + 1); j++) { + ordinal_t v = g.graph.entries(j); + edge_offset_t degree = + g.graph.row_map(v + 1) - g.graph.row_map(v); + if (vcmap(v) != ORD_MAX) { + if (degree >= max_d) { + max_d = degree; + argmax = v; + } + } + } + if (argmax != ORD_MAX) { + vcmap(i) = vcmap(argmax); + } + } + }); + + // add neighbors of each aggregated vertex to aggregate + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + if (vcmap(i) != ORD_MAX) { + for (edge_offset_t j = g.graph.row_map(i); + j < g.graph.row_map(i + 1); j++) { + ordinal_t v = g.graph.entries(j); + if (vcmap(v) == ORD_MAX) { + vcmap(v) = vcmap(i); + } + } + } + }); + + ordinal_t remaining_total = 0; + + Kokkos::parallel_reduce( + "count remaining", policy_t(0, n), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& sum) { + if (vcmap(i) == ORD_MAX) { + sum++; + } + }, + remaining_total); + + vtx_view_t remaining("remaining vtx", remaining_total); + + Kokkos::parallel_scan( + "count remaining", policy_t(0, n), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& update, const bool final) { + if (vcmap(i) == ORD_MAX) { + if (final) { + remaining(update) = i; + } + update++; + } + }); + + vtx_view_t hn("heaviest neighbors", n); + + pool_t rand_pool(std::time(nullptr)); + + Kokkos::parallel_for( + "fill hn", policy_t(0, remaining_total), + KOKKOS_LAMBDA(ordinal_t r_idx) { + // select heaviest neighbor with ties randomly broken + ordinal_t i = remaining(r_idx); + ordinal_t hn_i = ORD_MAX; + uint64_t max_rand = 0; + scalar_t max_ewt = 0; + + edge_offset_t end_offset = g.graph.row_map(i + 1); + for (edge_offset_t j = g.graph.row_map(i); j < end_offset; j++) { + scalar_t wgt = g.values(j); + ordinal_t v = g.graph.entries(j); + gen_t generator = rand_pool.get_state(); + uint64_t rand = generator.urand64(); + rand_pool.free_state(generator); + bool choose = false; + if (max_ewt < wgt) { + choose = true; + } else if (max_ewt == wgt && max_rand <= rand) { + choose = true; + } + + if (choose) { + max_ewt = wgt; + max_rand = rand; + hn_i = v; + } + } + hn(i) = hn_i; + }); + + ordinal_t nc = + parallel_map_construct_prefilled(vcmap, n, remaining, hn, nvc); + Kokkos::deep_copy(nc, nvc); + + edge_view_t row_map("interpolate row map", n + 1); + + Kokkos::parallel_for( + policy_t(0, n + 1), KOKKOS_LAMBDA(ordinal_t u) { row_map(u) = u; }); + + vtx_view_t entries("interpolate entries", n); + wgt_view_t values("interpolate values", n); + // compute the interpolation weights + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t u) { + entries(u) = vcmap(u); + values(u) = 1.0; + }); + + graph_type graph(entries, row_map); + matrix_t interp("interpolate", nc, values, graph); + + return interp; + } + + static matrix_t coarsen_HEC(const matrix_t& g, bool uniform_weights) { + ordinal_t n = g.numRows(); + + vtx_view_t hn("heavies", n); + + vtx_view_t vcmap("vcmap", n); + + Kokkos::parallel_for( + "initialize vcmap", policy_t(0, n), + KOKKOS_LAMBDA(ordinal_t i) { vcmap(i) = ORD_MAX; }); + + pool_t rand_pool(std::time(nullptr)); + + vtx_view_t vperm = generate_permutation(n, rand_pool); + + vtx_view_t reverse_map("reversed", n); + Kokkos::parallel_for( + "construct reverse map", policy_t(0, n), + KOKKOS_LAMBDA(ordinal_t i) { reverse_map(vperm(i)) = i; }); + + if (uniform_weights) { + // all weights equal at this level so choose heaviest edge randomly + Kokkos::parallel_for( + "Random HN", policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + gen_t generator = rand_pool.get_state(); + ordinal_t adj_size = g.graph.row_map(i + 1) - g.graph.row_map(i); + if (adj_size > 0) { + ordinal_t offset = + g.graph.row_map(i) + (generator.urand64() % adj_size); + hn(i) = g.graph.entries(offset); + } else { + hn(i) = generator.urand64() % n; + } + rand_pool.free_state(generator); + }); + } else { + Kokkos::parallel_for( + "Heaviest HN", team_policy_t(n, Kokkos::AUTO), + KOKKOS_LAMBDA(const member& thread) { + ordinal_t i = thread.league_rank(); + ordinal_t adj_size = g.graph.row_map(i + 1) - g.graph.row_map(i); + if (adj_size > 0) { + edge_offset_t end = g.graph.row_map(i + 1); + typename Kokkos::MaxLoc::value_type argmax{}; + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(thread, g.graph.row_map(i), end), + [=](const edge_offset_t idx, + Kokkos::ValLocScalar& local) { + scalar_t wgt = g.values(idx); + if (wgt >= local.val) { + local.val = wgt; + local.loc = idx; + } + }, + Kokkos::MaxLoc(argmax)); + Kokkos::single(Kokkos::PerTeam(thread), [=]() { + ordinal_t h = g.graph.entries(argmax.loc); + hn(i) = h; + }); + } else { + gen_t generator = rand_pool.get_state(); + hn(i) = generator.urand64() % n; + rand_pool.free_state(generator); + } + }); + } + ordinal_t nc = 0; + nc = parallel_map_construct(vcmap, n, vperm, hn, reverse_map); + + edge_view_t row_map("interpolate row map", n + 1); + + Kokkos::parallel_for( + policy_t(0, n + 1), KOKKOS_LAMBDA(ordinal_t u) { row_map(u) = u; }); + + vtx_view_t entries("interpolate entries", n); + wgt_view_t values("interpolate values", n); + // compute the interpolation weights + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t u) { + entries(u) = vcmap(u); + values(u) = 1.0; + }); + + graph_type graph(entries, row_map); + matrix_t interp("interpolate", nc, values, graph); + + return interp; + } + + static ordinal_t countInf(vtx_view_t target) { + ordinal_t totalInf = 0; + + Kokkos::parallel_reduce( + policy_t(0, target.extent(0)), + KOKKOS_LAMBDA(ordinal_t i, ordinal_t & thread_sum) { + if (target(i) == ORD_MAX) { + thread_sum++; + } + }, + totalInf); + + return totalInf; + } + + struct MatchByHashSorted { + vtx_view_t vcmap, unmapped; + Kokkos::View hashes; + ordinal_t unmapped_total; + Kokkos::View nvertices_coarse; + MatchByHashSorted(vtx_view_t _vcmap, vtx_view_t _unmapped, + Kokkos::View _hashes, + ordinal_t _unmapped_total, + Kokkos::View _nvertices_coarse) + : vcmap(_vcmap), + unmapped(_unmapped), + hashes(_hashes), + unmapped_total(_unmapped_total), + nvertices_coarse(_nvertices_coarse) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const ordinal_t i, ordinal_t& update, + const bool final) const { + ordinal_t u = unmapped(i); + ordinal_t tentative = 0; + if (i == 0) { + tentative = i; + } else if (hashes(i - 1) != hashes(i)) { + tentative = i; + } + + if (tentative > update) { + update = tentative; + } + + if (final) { + // update should contain the index of the first hash that equals + // hash(i), could be i we want to determine if i is an odd offset from + // update + ordinal_t isOddOffset = (i - update) & 1; + // if even (0 counts as even) we match unmapped(i) with unmapped(i+1) if + // hash(i) == hash(i+1) if odd do nothing + if (isOddOffset == 0) { + if (i + 1 < unmapped_total) { + if (hashes(i) == hashes(i + 1)) { + ordinal_t v = unmapped(i + 1); + vcmap(u) = Kokkos::atomic_fetch_add(&nvertices_coarse(), 1); + vcmap(v) = vcmap(u); + } + } + } + } + } + + KOKKOS_INLINE_FUNCTION + void join(volatile ordinal_t& update, + volatile const ordinal_t& input) const { + if (input > update) update = input; + } + }; + + static matrix_t coarsen_match(const matrix_t& g, bool uniform_weights, + int match_choice) { + ordinal_t n = g.numRows(); + + vtx_view_t hn("heavies", n); + + vtx_view_t vcmap("vcmap", n); + + Kokkos::parallel_for( + "initialize vcmap", policy_t(0, n), + KOKKOS_LAMBDA(ordinal_t i) { vcmap(i) = ORD_MAX; }); + + rand_view_t randoms("randoms", n); + + pool_t rand_pool(std::time(nullptr)); + + vtx_view_t vperm = generate_permutation(n, rand_pool); + + vtx_view_t reverse_map("reversed", n); + Kokkos::parallel_for( + "construct reverse map", policy_t(0, n), + KOKKOS_LAMBDA(ordinal_t i) { reverse_map(vperm(i)) = i; }); + + if (uniform_weights) { + // all weights equal at this level so choose heaviest edge randomly + Kokkos::parallel_for( + "Random HN", policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + gen_t generator = rand_pool.get_state(); + ordinal_t adj_size = g.graph.row_map(i + 1) - g.graph.row_map(i); + ordinal_t offset = + g.graph.row_map(i) + (generator.urand64() % adj_size); + hn(i) = g.graph.entries(offset); + rand_pool.free_state(generator); + }); + } else { + Kokkos::parallel_for( + "Heaviest HN", policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + ordinal_t hn_i = g.graph.entries(g.graph.row_map(i)); + scalar_t max_ewt = g.values(g.graph.row_map(i)); + + edge_offset_t end_offset = + g.graph.row_map(i + 1); // +g.edges_per_source[i]; + + for (edge_offset_t j = g.graph.row_map(i) + 1; j < end_offset; + j++) { + if (max_ewt < g.values(j)) { + max_ewt = g.values(j); + hn_i = g.graph.entries(j); + } + } + hn(i) = hn_i; + }); + } + vtx_view_t match("match", n); + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { match(i) = ORD_MAX; }); + + ordinal_t perm_length = n; + + Kokkos::View nvertices_coarse("nvertices"); + + // construct mapping using heaviest edges + int swap = 1; + while (perm_length > 0) { + vtx_view_t next_perm("next perm", perm_length); + Kokkos::View next_length("next_length"); + + // match vertices with heaviest unmatched edge + Kokkos::parallel_for( + policy_t(0, perm_length), KOKKOS_LAMBDA(ordinal_t i) { + ordinal_t u = vperm(i); + ordinal_t v = hn(u); + int condition = reverse_map(u) < reverse_map(v); + // need to enforce an ordering condition to allow hard-stall + // conditions to be broken + if (condition ^ swap) { + if (Kokkos::atomic_compare_exchange_strong(&match(u), ORD_MAX, + v)) { + if (u == v || Kokkos::atomic_compare_exchange_strong( + &match(v), ORD_MAX, u)) { + // u == v avoids problems if there is a self-loop edge + ordinal_t cv = + Kokkos::atomic_fetch_add(&nvertices_coarse(), 1); + vcmap(u) = cv; + vcmap(v) = cv; + } else { + match(u) = ORD_MAX; + } + } + } + }); + Kokkos::fence(); + + // add the ones that failed to be reprocessed next round + // maybe count these then create next_perm to save memory? + Kokkos::parallel_for( + policy_t(0, perm_length), KOKKOS_LAMBDA(ordinal_t i) { + ordinal_t u = vperm(i); + if (vcmap(u) == ORD_MAX) { + ordinal_t h = ORD_MAX; + + if (uniform_weights) { + ordinal_t max_ewt = 0; + // we have to iterate over the edges anyways because we need to + // check if any are unmatched! so instead of randomly choosing a + // heaviest edge, we instead use the reverse permutation order + // as the weight + for (edge_offset_t j = g.graph.row_map(u); + j < g.graph.row_map(u + 1); j++) { + ordinal_t v = g.graph.entries(j); + // v must be unmatched to be considered + if (vcmap(v) == ORD_MAX) { + // using <= so that zero weight edges may still be chosen + if (max_ewt <= reverse_map(v)) { + max_ewt = reverse_map(v); + h = v; + } + } + } + } else { + scalar_t max_ewt = 0; + for (edge_offset_t j = g.graph.row_map(u); + j < g.graph.row_map(u + 1); j++) { + ordinal_t v = g.graph.entries(j); + // v must be unmatched to be considered + if (vcmap(v) == ORD_MAX) { + // using <= so that zero weight edges may still be chosen + if (max_ewt <= g.values(j)) { + max_ewt = g.values(j); + h = v; + } + } + } + } + + if (h != ORD_MAX) { + ordinal_t add_next = + Kokkos::atomic_fetch_add(&next_length(), 1); + next_perm(add_next) = u; + hn(u) = h; + } + } + }); + Kokkos::fence(); + swap = swap ^ 1; + Kokkos::deep_copy(perm_length, next_length); + vperm = next_perm; + } + + if (match_choice == 1) { + ordinal_t unmapped = countInf(vcmap); + double unmappedRatio = + static_cast(unmapped) / static_cast(n); + + // leaf matches + if (unmappedRatio > 0.25) { + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t u) { + if (vcmap(u) != ORD_MAX) { + ordinal_t lastLeaf = ORD_MAX; + for (edge_offset_t j = g.graph.row_map(u); + j < g.graph.row_map(u + 1); j++) { + ordinal_t v = g.graph.entries(j); + // v must be unmatched to be considered + if (vcmap(v) == ORD_MAX) { + // must be degree 1 to be a leaf + if (g.graph.row_map(v + 1) - g.graph.row_map(v) == 1) { + if (lastLeaf == ORD_MAX) { + lastLeaf = v; + } else { + vcmap(lastLeaf) = + Kokkos::atomic_fetch_add(&nvertices_coarse(), 1); + vcmap(v) = vcmap(lastLeaf); + lastLeaf = ORD_MAX; + } + } + } + } + } + }); + } + + unmapped = countInf(vcmap); + unmappedRatio = static_cast(unmapped) / static_cast(n); + + // twin matches + if (unmappedRatio > 0.25) { + vtx_view_t unmappedVtx("unmapped vertices", unmapped); + Kokkos::View hashes("hashes", unmapped); + + Kokkos::View unmappedIdx("unmapped index"); + hasher_t hasher; + // compute digests of adjacency lists + Kokkos::parallel_for( + "create digests", team_policy_t(n, Kokkos::AUTO), + KOKKOS_LAMBDA(const member& thread) { + ordinal_t u = thread.league_rank(); + if (vcmap(u) == ORD_MAX) { + uint32_t hash = 0; + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(thread, g.graph.row_map(u), + g.graph.row_map(u + 1)), + [=](const edge_offset_t j, uint32_t& thread_sum) { + thread_sum += hasher(g.graph.entries(j)); + }, + hash); + Kokkos::single(Kokkos::PerTeam(thread), [=]() { + ordinal_t idx = Kokkos::atomic_fetch_add(&unmappedIdx(), 1); + unmappedVtx(idx) = u; + hashes(idx) = hash; + }); + } + }); + uint32_t max = std::numeric_limits::max(); + typedef Kokkos::BinOp1D > BinOp; + BinOp bin_op(unmapped, 0, max); + // VERY important that final parameter is true + Kokkos::BinSort, BinOp, exec_space, + ordinal_t> + sorter(hashes, bin_op, true); + sorter.create_permute_vector(); + sorter.template sort >(hashes); + sorter.template sort(unmappedVtx); + + MatchByHashSorted matchTwinFunctor(vcmap, unmappedVtx, hashes, unmapped, + nvertices_coarse); + Kokkos::parallel_scan("match twins", policy_t(0, unmapped), + matchTwinFunctor); + } + + unmapped = countInf(vcmap); + unmappedRatio = static_cast(unmapped) / static_cast(n); + + // relative matches + if (unmappedRatio > 0.25) { + // get possibly mappable vertices of unmapped + vtx_view_t mappableVtx("mappable vertices", unmapped); + Kokkos::parallel_scan( + "get unmapped", policy_t(0, n), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& update, + const bool final) { + if (vcmap(i) == ORD_MAX) { + if (final) { + mappableVtx(update) = i; + } + + update++; + } + }); + + ordinal_t mappable_count = unmapped; + do { + Kokkos::parallel_for( + "reset hn", policy_t(0, mappable_count), + KOKKOS_LAMBDA(ordinal_t i) { + ordinal_t u = mappableVtx(i); + hn(u) = ORD_MAX; + }); + + // choose relatives for unmapped vertices + Kokkos::parallel_for( + "assign relatives", policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + if (vcmap(i) != ORD_MAX) { + ordinal_t last_free = ORD_MAX; + for (edge_offset_t j = g.graph.row_map(i); + j < g.graph.row_map(i + 1); j++) { + ordinal_t v = g.graph.entries(j); + if (vcmap(v) == ORD_MAX) { + if (last_free != ORD_MAX) { + // there can be multiple threads updating this but it + // doesn't matter as long as they have some value + hn(last_free) = v; + hn(v) = last_free; + last_free = ORD_MAX; + } else { + last_free = v; + } + } + } + } + }); + + // create a list of all mappable vertices according to set entries of + // hn + ordinal_t old_mappable = mappable_count; + mappable_count = 0; + Kokkos::parallel_reduce( + "count mappable", policy_t(0, old_mappable), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& thread_sum) { + ordinal_t u = mappableVtx(i); + if (hn(u) != ORD_MAX) { + thread_sum++; + } + }, + mappable_count); + + vtx_view_t nextMappable("next mappable vertices", mappable_count); + + Kokkos::parallel_scan( + "get next mappable", policy_t(0, old_mappable), + KOKKOS_LAMBDA(const ordinal_t i, ordinal_t& update, + const bool final) { + ordinal_t u = mappableVtx(i); + if (hn(u) != ORD_MAX) { + if (final) { + nextMappable(update) = u; + } + + update++; + } + }); + mappableVtx = nextMappable; + + // match vertices with chosen relative + if (mappable_count > 0) { + Kokkos::parallel_for( + policy_t(0, mappable_count), KOKKOS_LAMBDA(ordinal_t i) { + ordinal_t u = mappableVtx(i); + ordinal_t v = hn(u); + int condition = reverse_map(u) < reverse_map(v); + // need to enforce an ordering condition to allow hard-stall + // conditions to be broken + if (condition ^ swap) { + if (Kokkos::atomic_compare_exchange_strong(&match(u), + ORD_MAX, v)) { + if (Kokkos::atomic_compare_exchange_strong(&match(v), + ORD_MAX, u)) { + ordinal_t cv = + Kokkos::atomic_fetch_add(&nvertices_coarse(), 1); + vcmap(u) = cv; + vcmap(v) = cv; + } else { + match(u) = ORD_MAX; + } + } + } + }); + } + Kokkos::fence(); + swap = swap ^ 1; + } while (mappable_count > 0); + } + } + + // create singleton aggregates of remaining unmatched vertices + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t i) { + if (vcmap(i) == ORD_MAX) { + vcmap(i) = Kokkos::atomic_fetch_add(&nvertices_coarse(), 1); + } + }); + + ordinal_t nc = 0; + Kokkos::deep_copy(nc, nvertices_coarse); + + edge_view_t row_map("interpolate row map", n + 1); + + Kokkos::parallel_for( + policy_t(0, n + 1), KOKKOS_LAMBDA(ordinal_t u) { row_map(u) = u; }); + + vtx_view_t entries("interpolate entries", n); + wgt_view_t values("interpolate values", n); + // compute the interpolation weights + Kokkos::parallel_for( + policy_t(0, n), KOKKOS_LAMBDA(ordinal_t u) { + entries(u) = vcmap(u); + values(u) = 1.0; + }); + + graph_type graph(entries, row_map); + matrix_t interp("interpolate", nc, values, graph); + + return interp; + } +}; + +} // end namespace Experimental +} // end namespace KokkosGraph +// exclude from Cuda builds without lambdas enabled +#endif diff --git a/unit_test/graph/Test_Graph.hpp b/unit_test/graph/Test_Graph.hpp index 9cce1f52b2..c2aeeab9d3 100644 --- a/unit_test/graph/Test_Graph.hpp +++ b/unit_test/graph/Test_Graph.hpp @@ -5,6 +5,7 @@ #include "Test_Graph_graph_color_distance2.hpp" #include "Test_Graph_graph_color.hpp" #include "Test_Graph_mis2.hpp" +#include "Test_Graph_coarsen.hpp" #include "Test_Graph_rcm.hpp" #endif // TEST_GRAPH_HPP diff --git a/unit_test/graph/Test_Graph_coarsen.hpp b/unit_test/graph/Test_Graph_coarsen.hpp new file mode 100644 index 0000000000..af8ec55a23 --- /dev/null +++ b/unit_test/graph/Test_Graph_coarsen.hpp @@ -0,0 +1,481 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Mike Gilbert (msg5334@psu.edu) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include +#include +#include +#include + +#include "KokkosGraph_CoarsenConstruct.hpp" +#include "KokkosSparse_CrsMatrix.hpp" +#include "KokkosKernels_IOUtils.hpp" +#include "KokkosKernels_Handle.hpp" +#include "KokkosKernels_ExecSpaceUtils.hpp" + +using namespace KokkosKernels; +using namespace KokkosKernels::Experimental; + +using namespace KokkosGraph; +using namespace KokkosGraph::Experimental; + +// namespace Test { + +template +bool verify_coarsening(typename coarsener_t::coarse_level_triple fine_l, + typename coarsener_t::coarse_level_triple coarse_l) { + using crsMat = typename coarsener_t::matrix_t; + using graph_type = typename crsMat::StaticCrsGraphType; + using c_rowmap_t = typename graph_type::row_map_type; + using c_entries_t = typename graph_type::entries_type; + using rowmap_t = typename c_rowmap_t::non_const_type; + using entries_t = typename c_entries_t::non_const_type; + using svt = typename coarsener_t::wgt_view_t; + using ordinal_t = typename entries_t::value_type; + using edge_t = typename rowmap_t::value_type; + + crsMat A = fine_l.mtx; + crsMat coarse_A = coarse_l.mtx; + auto f_rowmap = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.graph.row_map); + auto c_rowmap = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), + coarse_A.graph.row_map); + typename c_entries_t::HostMirror f_entries = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.graph.entries); + typename c_entries_t::HostMirror vcmap = Kokkos::create_mirror_view_and_copy( + Kokkos::HostSpace(), coarse_l.interp_mtx.graph.entries); + typename svt::HostMirror few = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.values); + typename svt::HostMirror cew = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), coarse_A.values); + typename entries_t::HostMirror fvw = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), fine_l.vtx_wgts); + typename entries_t::HostMirror cvw = Kokkos::create_mirror_view_and_copy( + Kokkos::HostSpace(), coarse_l.vtx_wgts); + ordinal_t f_size = 0; + ordinal_t c_size = 0; + for (ordinal_t i = 0; i < static_cast(fvw.extent(0)); i++) { + f_size += fvw(i); + } + for (ordinal_t i = 0; i < static_cast(cvw.extent(0)); i++) { + c_size += cvw(i); + } + // number of columns in interpolation matrix should give number of rows in + // coarse matrix + if (coarse_l.interp_mtx.numCols() != coarse_l.mtx.numRows()) { + return false; + } + // sum of vertex weights in each graph should be equal + if (f_size != c_size) { + return false; + } + typename svt::value_type f_edges = 0, c_edges = 0; + for (ordinal_t i = 0; i < A.numRows(); i++) { + for (edge_t j = f_rowmap(i); j < f_rowmap(i + 1); j++) { + ordinal_t v = f_entries(j); + if (vcmap(i) != vcmap(v)) { + f_edges += few(j); + } + } + } + for (ordinal_t i = 0; i < coarse_A.numRows(); i++) { + for (edge_t j = c_rowmap(i); j < c_rowmap(i + 1); j++) { + c_edges += cew(j); + } + } + // sum of inter-aggregate edges in fine graph should be sum of all edges in + // coarse graph + if (f_edges != c_edges) { + return false; + } + return true; +} + +template +bool verify_is_graph(crsMat A) { + using graph_type = typename crsMat::StaticCrsGraphType; + using c_rowmap_t = typename graph_type::row_map_type; + using c_entries_t = typename graph_type::entries_type; + using rowmap_t = typename c_rowmap_t::non_const_type; + using entries_t = typename c_entries_t::non_const_type; + using ordinal_t = typename entries_t::value_type; + using edge_t = typename rowmap_t::value_type; + auto rowmap = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.graph.row_map); + typename c_entries_t::HostMirror entries = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.graph.entries); + + for (ordinal_t i = 0; i < A.numRows(); i++) { + std::set adjset; + for (edge_t j = rowmap(i); j < rowmap(i + 1); j++) { + ordinal_t v = entries(j); + // A should not contain out-of-bounds columns + if (v >= A.numRows()) { + return false; + } + // Each row should not contain duplicate columns + if (adjset.find(v) != adjset.end()) { + return false; + } + adjset.insert(v); + } + } + return true; +} + +template +bool verify_aggregator(crsMat A, crsMat agg) { + using graph_type = typename crsMat::StaticCrsGraphType; + using c_entries_t = typename graph_type::entries_type; + using entries_t = typename c_entries_t::non_const_type; + using ordinal_t = typename entries_t::value_type; + + // aggregator should have as many rows as A + if (A.numRows() != agg.numRows()) { + return false; + } + // aggregator should have as many entries as A has rows + if (A.numRows() != static_cast(agg.nnz())) { + return false; + } + // column count gives number of vertices in coarse graph + // aggregator should not have more columns than A has rows + // it is valid for coarse graph to be same size as input graph + // some graphs (for example a graph with only self-loops) may produce + // coarsenings that don't shrink the graph + if (A.numRows() < agg.numCols()) { + return false; + } + typename c_entries_t::HostMirror entries = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), + agg.graph.entries); + + std::vector aggregateSizes(agg.numCols(), 0); + for (ordinal_t i = 0; i < static_cast(agg.nnz()); i++) { + ordinal_t v = entries(i); + // aggregator should not have out-of-bounds columns + if (v >= agg.numCols()) { + return false; + } + aggregateSizes[v]++; + } + for (ordinal_t i = 0; i < agg.numCols(); i++) { + // each aggregate label should contain at least one fine vertex + if (aggregateSizes[i] == 0) { + return false; + } + } + return true; +} + +template +crsMat gen_grid() { + using graph_type = typename crsMat::StaticCrsGraphType; + using c_rowmap_t = typename graph_type::row_map_type; + using c_entries_t = typename graph_type::entries_type; + using rowmap_t = typename c_rowmap_t::non_const_type; + using entries_t = typename c_entries_t::non_const_type; + using svt = typename crsMat::values_type; + using lno_t = typename crsMat::ordinal_type; + using scalar = typename crsMat::value_type; + lno_t rows = 200; + lno_t cols = 300; + lno_t total_vtx = rows * cols; + + // create a 2D-mesh + rowmap_t row_map("rowmap", total_vtx + 1); + auto rm = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), row_map); + rm(0) = 0; + for (lno_t i = 0; i < rows; i++) { + for (lno_t j = 0; j < cols; j++) { + lno_t vtx_id = i * cols + j; + lno_t edge_count = 0; + if (i > 0) edge_count++; + if (i + 1 < rows) edge_count++; + if (j > 0) edge_count++; + if (j + 1 < cols) edge_count++; + rm(vtx_id + 1) = rm(vtx_id) + edge_count; + } + } + lno_t total_edges = rm(total_vtx); + Kokkos::deep_copy(row_map, rm); + entries_t entries("entries", total_edges); + auto e = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), entries); + + for (lno_t i = 0; i < rows; i++) { + for (lno_t j = 0; j < cols; j++) { + lno_t vtx_id = i * cols + j; + lno_t write_offset = rm(vtx_id); + if (i > 0) { + e(write_offset) = vtx_id - cols; + write_offset++; + } + if (i + 1 < rows) { + e(write_offset) = vtx_id + cols; + write_offset++; + } + if (j > 0) { + e(write_offset) = vtx_id - 1; + write_offset++; + } + if (j + 1 < cols) { + e(write_offset) = vtx_id + 1; + } + } + } + Kokkos::deep_copy(entries, e); + graph_type g(entries, row_map); + svt values("values", total_edges); + Kokkos::deep_copy(values, static_cast(1)); + crsMat A("A", total_vtx, values, g); + return A; +} + +template +void test_multilevel_coarsen_grid() { + using crsMat = + KokkosSparse::CrsMatrix; + crsMat A = gen_grid(); + using coarsener_t = coarse_builder; + typename coarsener_t::coarsen_handle handle; + using clt = typename coarsener_t::coarse_level_triple; + handle.h = coarsener_t::HECv1; + handle.b = coarsener_t::Hybrid; + coarsener_t::generate_coarse_graphs(handle, A, true); + std::list levels = handle.results; + auto fine = levels.begin(); + auto coarse = fine; + coarse++; + while (coarse != levels.end()) { + bool correct_aggregator = verify_aggregator(fine->mtx, coarse->interp_mtx); + EXPECT_TRUE(correct_aggregator) + << "Multilevel coarsening produced invalid aggregator on level " + << coarse->level - 1; + bool correct_graph = verify_is_graph(coarse->mtx); + bool correct_coarsening = verify_coarsening(*fine, *coarse); + EXPECT_TRUE(correct_graph) + << "Multilevel coarsening produced invalid graph on level " + << coarse->level; + EXPECT_TRUE(correct_coarsening) + << "Multilevel coarsening produced invalid coarsening on level " + << coarse->level; + fine++; + coarse++; + } +} + +template +void test_coarsen_grid() { + using crsMat = + KokkosSparse::CrsMatrix; + using graph_type = typename crsMat::StaticCrsGraphType; + using c_entries_t = typename graph_type::entries_type; + using entries_t = typename c_entries_t::non_const_type; + crsMat A = gen_grid(); + entries_t vWgts("vertex weights", A.numRows()); + Kokkos::deep_copy(vWgts, static_cast(1)); + using coarsener_t = coarse_builder; + typename coarsener_t::coarsen_handle handle; + using clt = typename coarsener_t::coarse_level_triple; + clt fine_A; + fine_A.mtx = A; + fine_A.vtx_wgts = vWgts; + fine_A.level = 0; + fine_A.uniform_weights = true; + std::vector heuristics = { + coarsener_t::HECv1, coarsener_t::Match, coarsener_t::MtMetis, + coarsener_t::MIS2, coarsener_t::GOSHv1, coarsener_t::GOSHv2}; + std::vector builders = { + coarsener_t::Sort, coarsener_t::Hashmap, coarsener_t::Hybrid, + coarsener_t::Spgemm, coarsener_t::Spgemm_transpose_first}; + for (auto h : heuristics) { + handle.h = h; + crsMat aggregator = + coarsener_t::generate_coarse_mapping(handle, fine_A.mtx, true); + bool correct_aggregator = verify_aggregator(fine_A.mtx, aggregator); + EXPECT_TRUE(correct_aggregator) + << "Aggregation heuristic " << static_cast(h) + << " produced invalid aggregator."; + for (auto b : builders) { + handle.b = b; + clt coarse_A = + coarsener_t::build_coarse_graph(handle, fine_A, aggregator); + bool correct_graph = verify_is_graph(coarse_A.mtx); + bool correct_coarsening = + verify_coarsening(fine_A, coarse_A); + EXPECT_TRUE(correct_graph) + << "Coarsening with dedupe method " << static_cast(b) + << " produced invalid graph with aggregation heuristic " + << static_cast(h) << "."; + EXPECT_TRUE(correct_coarsening) + << "Coarsening with dedupe method " << static_cast(b) + << " produced invalid coarsening with aggregation heuristic " + << static_cast(h) << "."; + } + } +} + +template +void test_coarsen_random(lno_t numVerts, size_type nnz, lno_t bandwidth, + lno_t row_size_variance) { + using execution_space = typename device::execution_space; + using crsMat = + KokkosSparse::CrsMatrix; + using graph_type = typename crsMat::StaticCrsGraphType; + using c_rowmap_t = typename graph_type::row_map_type; + using c_entries_t = typename graph_type::entries_type; + using rowmap_t = typename c_rowmap_t::non_const_type; + using entries_t = typename c_entries_t::non_const_type; + using svt = typename crsMat::values_type; + // Generate graph + crsMat A = KokkosSparse::Impl::kk_generate_sparse_matrix( + numVerts, numVerts, nnz, row_size_variance, bandwidth); + auto G = A.graph; + // Symmetrize the graph + rowmap_t symRowmap; + entries_t symEntries; + KokkosKernels::Impl::symmetrize_graph_symbolic_hashmap< + c_rowmap_t, c_entries_t, rowmap_t, entries_t, execution_space>( + numVerts, G.row_map, G.entries, symRowmap, symEntries); + graph_type GS(symEntries, symRowmap); + svt symValues("sym values", symEntries.extent(0)); + entries_t vWgts("vertex weights", numVerts); + Kokkos::deep_copy(symValues, static_cast(2.5)); + Kokkos::deep_copy(vWgts, static_cast(1)); + crsMat AS("A symmetric", numVerts, symValues, GS); + using coarsener_t = coarse_builder; + typename coarsener_t::coarsen_handle handle; + using clt = typename coarsener_t::coarse_level_triple; + clt fine_A; + fine_A.mtx = AS; + fine_A.vtx_wgts = vWgts; + fine_A.level = 0; + fine_A.uniform_weights = true; + std::vector heuristics = { + coarsener_t::HECv1, coarsener_t::Match, coarsener_t::MtMetis, + coarsener_t::MIS2, coarsener_t::GOSHv1, coarsener_t::GOSHv2}; + std::vector builders = { + coarsener_t::Sort, coarsener_t::Hashmap, coarsener_t::Hybrid, + coarsener_t::Spgemm, coarsener_t::Spgemm_transpose_first}; + for (auto h : heuristics) { + handle.h = h; + crsMat aggregator = + coarsener_t::generate_coarse_mapping(handle, fine_A.mtx, true); + bool correct_aggregator = verify_aggregator(fine_A.mtx, aggregator); + EXPECT_TRUE(correct_aggregator) + << "Aggregation heuristic " << static_cast(h) + << " produced invalid aggregator."; + for (auto b : builders) { + handle.b = b; + clt coarse_A = + coarsener_t::build_coarse_graph(handle, fine_A, aggregator); + bool correct_graph = verify_is_graph(coarse_A.mtx); + bool correct_coarsening = + verify_coarsening(fine_A, coarse_A); + EXPECT_TRUE(correct_graph) + << "Coarsening with dedupe method " << static_cast(b) + << " produced invalid graph with aggregation heuristic " + << static_cast(h) << "."; + EXPECT_TRUE(correct_coarsening) + << "Coarsening with dedupe method " << static_cast(b) + << " produced invalid coarsening with aggregation heuristic " + << static_cast(h) << "."; + } + } +} + +#define EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ + TEST_F( \ + TestCategory, \ + graph##_##random_graph_coarsen##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ + test_coarsen_random(5000, 5000 * 20, \ + 1000, 10); \ + test_coarsen_random(50, 50 * 10, 40, 10); \ + test_coarsen_random(5, 5 * 3, 5, 0); \ + } \ + TEST_F( \ + TestCategory, \ + graph##_##grid_graph_coarsen##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ + test_coarsen_grid(); \ + } \ + TEST_F( \ + TestCategory, \ + graph##_##grid_graph_multilevel_coarsen##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ + test_multilevel_coarsen_grid(); \ + } + +// FIXME_SYCL +#ifndef KOKKOS_ENABLE_SYCL +#if defined(KOKKOSKERNELS_INST_DOUBLE) +#if (defined(KOKKOSKERNELS_INST_ORDINAL_INT) && \ + defined(KOKKOSKERNELS_INST_OFFSET_INT)) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +EXECUTE_TEST(double, int, int, TestExecSpace) +#endif +#endif + +#if (defined(KOKKOSKERNELS_INST_ORDINAL_INT64_T) && \ + defined(KOKKOSKERNELS_INST_OFFSET_INT)) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +EXECUTE_TEST(double, int64_t, int, TestExecSpace) +#endif + +#if (defined(KOKKOSKERNELS_INST_ORDINAL_INT) && \ + defined(KOKKOSKERNELS_INST_OFFSET_SIZE_T)) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +EXECUTE_TEST(double, int, size_t, TestExecSpace) +#endif + +#if (defined(KOKKOSKERNELS_INST_ORDINAL_INT64_T) && \ + defined(KOKKOSKERNELS_INST_OFFSET_SIZE_T)) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +EXECUTE_TEST(double, int64_t, size_t, TestExecSpace) +#endif +#endif + +#undef EXECUTE_TEST From 785ec490929c550610a360df480509b0c9719c71 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Tue, 23 Aug 2022 13:44:05 -0600 Subject: [PATCH 048/226] Replace capture-by-value with capture-by-ref to resolve -Werror MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit error: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20 --- src/graph/KokkosGraph_CoarsenConstruct.hpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/graph/KokkosGraph_CoarsenConstruct.hpp b/src/graph/KokkosGraph_CoarsenConstruct.hpp index 250f7873de..f77ac1ffb9 100644 --- a/src/graph/KokkosGraph_CoarsenConstruct.hpp +++ b/src/graph/KokkosGraph_CoarsenConstruct.hpp @@ -598,7 +598,7 @@ class coarse_builder { edge_offset_t u_dest_offset = target_row_map(u); Kokkos::parallel_for( Kokkos::TeamThreadRange(thread, source_edge_counts(u)), - [=](const edge_offset_t u_idx) { + [&](const edge_offset_t u_idx) { ordinal_t v = source_destinations(u_origin + u_idx); scalar_t wgt = source_wgts(u_origin + u_idx); edge_offset_t v_dest_offset = target_row_map(v); @@ -769,7 +769,7 @@ class coarse_builder { volatile ordinal_t* ptr_temp = nullptr; Kokkos::single( Kokkos::PerTeam(thread), - [=](volatile ordinal_t*& ptr_write) { + [&](volatile ordinal_t*& ptr_write) { // Acquire a chunk from the memory pool using a spin-loop. ptr_write = nullptr; while (nullptr == ptr_write) { @@ -1276,7 +1276,7 @@ class coarse_builder { edge_offset_t start = g.graph.row_map(i); edge_offset_t end = g.graph.row_map(i + 1); Kokkos::parallel_for(Kokkos::ThreadVectorRange(t, start, end), - [=](const edge_offset_t idx) { + [&](const edge_offset_t idx) { ordinal_t v = mapped_edges(idx); if (u != v) { // fix this, inefficient @@ -1732,7 +1732,7 @@ class coarse_builder { ordinal_t nonLoopEdgesTotal = 0; Kokkos::parallel_reduce( Kokkos::ThreadVectorRange(t, start, end), - [=](const edge_offset_t idx, ordinal_t& local_sum) { + [&](const edge_offset_t idx, ordinal_t& local_sum) { ordinal_t v = vcmap.graph.entries(g.graph.entries(idx)); mapped_edges(idx) = v; if (u != v) { @@ -1740,7 +1740,7 @@ class coarse_builder { } }, nonLoopEdgesTotal); - Kokkos::single(Kokkos::PerThread(t), [=]() { + Kokkos::single(Kokkos::PerThread(t), [&]() { Kokkos::atomic_add(°ree_initial(u), nonLoopEdgesTotal); Kokkos::atomic_add(&c_vtx_w(u), f_vtx_w(i)); }); From 55b3fd88f378bcd05bd63c12e619f3604b3a2d7a Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 10 Aug 2022 17:00:00 -0600 Subject: [PATCH 049/226] docs: Fix RTD build --- docs/CMakeLists.txt | 3 +-- docs/Doxyfile.in | 2 +- docs/conf.py | 31 ++++++++++++++++++++++++++++--- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index 63a4fa1e43..267c808a0e 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -14,7 +14,6 @@ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/index.rst DESTINATION ${CMAKE_CURRENT_BINA file(GLOB_RECURSE ${PROJECT_NAME}_PUBLIC_HEADERS ${PROJECT_SOURCE_DIR}/src/*.hpp ${KOKKOS_INCLUDE_DIR}/*.hpp) set(DOXYGEN_KOKKOSKERNELS_INPUT_DIR ${PROJECT_SOURCE_DIR}/src) -set(DOXYGEN_KOKKOS_INPUT_DIR ${KOKKOS_INCLUDE_DIR}) set(DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/doxygen/) set(DOXYGEN_INDEX_FILE ${DOXYGEN_OUTPUT_DIR}/xml/index.xml) set(DOXYFILE_IN ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in) @@ -42,4 +41,4 @@ add_custom_target(Sphinx ALL ${SPHINX_SOURCE} ${SPHINX_BUILD} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} DEPENDS Doxygen - COMMENT "Generating documentation with Sphinx") \ No newline at end of file + COMMENT "Generating documentation with Sphinx") diff --git a/docs/Doxyfile.in b/docs/Doxyfile.in index 8ca2c879ea..5ffa339622 100644 --- a/docs/Doxyfile.in +++ b/docs/Doxyfile.in @@ -871,7 +871,7 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = "@DOXYGEN_KOKKOSKERNELS_INPUT_DIR@" "@DOXYGEN_KOKKOS_INPUT_DIR@" +INPUT = "@DOXYGEN_KOKKOSKERNELS_INPUT_DIR@" # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses diff --git a/docs/conf.py b/docs/conf.py index 59377e4f11..f1678c649a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -13,7 +13,17 @@ # import os # import sys # sys.path.insert(0, os.path.abspath('.')) +import subprocess, os +def configureDoxyfile(input_dir, output_dir, doxyfile_in, doxyfile_out): + with open(doxyfile_in, 'r') as file : + filedata = file.read() + + filedata = filedata.replace('@DOXYGEN_KOKKOSKERNELS_INPUT_DIR@', input_dir) + filedata = filedata.replace('@DOXYGEN_OUTPUT_DIR@', output_dir) + + with open(doxyfile_out, 'w') as file: + file.write(filedata) # -- Project information ----------------------------------------------------- @@ -32,7 +42,22 @@ # ones. extensions = [ "breathe" ] -# Breathe Configuration +# Check if we're running on Read the Docs' servers +read_the_docs_build = os.environ.get('READTHEDOCS', None) == 'True' + +breathe_projects = {} + +if read_the_docs_build: + cwd = os.getcwd() + print(cwd) + input_dir = cwd + '/../src/' + output_dir = cwd +'/doxygen/' + doxyfile_in = cwd + '/Doxyfile.in' + doxyfile_out = cwd + '/Doxyfile' + configureDoxyfile(input_dir, output_dir, doxyfile_in, doxyfile_out) + subprocess.call('pwd; ls -lat; doxygen Doxyfile; ls -lat doxygen/xml', shell=True) + breathe_projects['KokkosKernels'] = output_dir + '/xml' + breathe_default_project = "KokkosKernels" # Add any paths that contain templates here, relative to this directory. @@ -41,7 +66,7 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ['Thumbs.db', '.DS_Store'] # -- Options for HTML output ------------------------------------------------- @@ -54,4 +79,4 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] \ No newline at end of file +html_static_path = ['_static'] From 3f598c026aabde30dc6dfaca4158ca2667c04820 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Thu, 4 Aug 2022 14:32:16 -0600 Subject: [PATCH 050/226] scripts/cm_test_all_sandia: - Add spot check options for cuda11 and intel19 on 4 rhel7 machines - Switch cuda11 modules from sems-archive-env to sems-env - Added initial source of /etc/profile.d/modules.sh for the dev queue cmake: - Added cmake option `KokkosKernels_ENABLE_PERFTESTS` - Note: This changes all our cmake configure to, by default, disable building `perf_test`. The default used to be to build `perf_test` but the binaries were never run in PR (or nightly?) testing. In the long run, this will save many cycles. - Document undocumented cmake option `KokkosKernels_ENABLE_TESTS_AND_PERFSUITE` src/sparse: - Fix some warnings as errors in spmv when compiling with cuda11 - Attempted to conditionally skip spmv_mv for ARMPL PR builds --- BUILD.md | 6 ++ CMakeLists.txt | 9 +- perf_test/CMakeLists.txt | 100 +++++++++--------- scripts/cm_test_all_sandia | 61 ++++++++++- .../KokkosSparse_spgemm_cuSPARSE_impl.hpp | 24 +++++ unit_test/sparse/Test_Sparse_spmv.hpp | 7 ++ 6 files changed, 156 insertions(+), 51 deletions(-) diff --git a/BUILD.md b/BUILD.md index e86228529b..f08ea5c320 100644 --- a/BUILD.md +++ b/BUILD.md @@ -149,6 +149,12 @@ endif() * KokkosKernels_ENABLE_TESTS: BOOL * Whether to build tests. * Default: OFF +* KokkosKernels_ENABLE_PERFTESTS: BOOL + * Whether to build performance tests. + * Default: OFF +* KokkosKernels_ENABLE_TESTS_AND_PERFSUITE: BOOL + * Whether to build performance tests and suite. + * Default: OFF * KokkosKernels_ENABLE_DOCS: BOOL * Whether to build docs. * Default: OFF diff --git a/CMakeLists.txt b/CMakeLists.txt index 836b4963c1..90c11a1b3f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,11 +65,17 @@ IF (NOT KOKKOSKERNELS_HAS_TRILINOS) BOOL "Whether to build tests. Default: OFF" ) + KOKKOSKERNELS_ADD_OPTION( + "ENABLE_PERFTESTS" + OFF + BOOL + "Whether to build performance tests. Default: OFF" + ) KOKKOSKERNELS_ADD_OPTION( "ENABLE_TESTS_AND_PERFSUITE" OFF BOOL - "Whether to build tests including Perfsuite. Default: OFF" + "Whether to build performance tests and suite. Default: OFF" ) IF(KokkosKernels_ENABLE_TESTS_AND_PERFSUITE) set(BLT_CODE_CHECK_TARGET_NAME "fix-for-blt" CACHE STRING "Docstring") @@ -77,6 +83,7 @@ IF (NOT KOKKOSKERNELS_HAS_TRILINOS) add_definitions("-DRAJAPERF_INFRASTRUCTURE_ONLY") add_subdirectory(tpls/rajaperf) include_directories(tpls/rajaperf/src) + set(KokkosKernels_ENABLE_PERFTESTS ON CACHE BOOL "Whether to build tests including Perfsuite. Default: OFF" FORCE) ENDIF() ENDIF () diff --git a/perf_test/CMakeLists.txt b/perf_test/CMakeLists.txt index 91dc727867..b73fc47adf 100644 --- a/perf_test/CMakeLists.txt +++ b/perf_test/CMakeLists.txt @@ -1,50 +1,54 @@ -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) - -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../test_common) - -#At some point, we may wish to make this into real "performance -#tests, " in the sense that they can pass or fail. At that point, use -#"CATEGORIES PERFORMANCE" to mark them as such.For now, we just -#build the executables for manual use, but don't run the tests. They -#build correctly with or without MPI, but only run them with a single -#MPI process. - -SET(GTEST_SOURCE_DIR ${PACKAGE_SOURCE_DIR}/tpls/gtest) - -KOKKOSKERNELS_ADD_TEST_LIBRARY( - kokkoskernelsperf_gtest - HEADERS ${GTEST_SOURCE_DIR}/gtest/gtest.h - SOURCES ${GTEST_SOURCE_DIR}/gtest/gtest-all.cc - ) -#Disables pthreads, this is a problem for serial builds in Trilinos & Sierra if it's enabled. - -TARGET_COMPILE_DEFINITIONS(kokkoskernelsperf_gtest PUBLIC "-DGTEST_HAS_PTHREAD=0") -TARGET_INCLUDE_DIRECTORIES(kokkoskernelsperf_gtest PUBLIC $) - -#Gtest minimally requires C++ 11 -TARGET_COMPILE_FEATURES(kokkoskernelsperf_gtest PUBLIC cxx_std_11) -include_directories(sparse) -if (KokkosKernels_ENABLE_TESTS_AND_PERFSUITE) -#Add RPS implementations of KK perf tests here - - KOKKOSKERNELS_ADD_EXECUTABLE( - tracked_testing - SOURCES KokkosKernelsTrackedTesting.cpp - sparse/KokkosSparse_spmv_test.cpp - blas/blas2/KokkosBlas2_gemv_tracked_perf_test.cpp - blas/blas1/KokkosBlas_dot_tracked_perf_test.cpp - blas/blas1/KokkosBlas_team_dot_tracked_perf_test.cpp - blas/blas3/KokkosBlas3_gemm_tracked_perf_test.cpp - PerfTestUtilities.cpp - sparse/spmv/OpenMPSmartStatic_SPMV.cpp - #sparse / KokkosSparse_spgemm_test.cpp - ) +if (KokkosKernels_ENABLE_PERFTESTS) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) + + KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../test_common) + + #At some point, we may wish to make this into real "performance + #tests, " in the sense that they can pass or fail. At that point, use + #"CATEGORIES PERFORMANCE" to mark them as such.For now, we just + #build the executables for manual use, but don't run the tests. They + #build correctly with or without MPI, but only run them with a single + #MPI process. + + SET(GTEST_SOURCE_DIR ${PACKAGE_SOURCE_DIR}/tpls/gtest) + + KOKKOSKERNELS_ADD_TEST_LIBRARY( + kokkoskernelsperf_gtest + HEADERS ${GTEST_SOURCE_DIR}/gtest/gtest.h + SOURCES ${GTEST_SOURCE_DIR}/gtest/gtest-all.cc + ) + #Disables pthreads, this is a problem for serial builds in Trilinos & Sierra if it's enabled. + + TARGET_COMPILE_DEFINITIONS(kokkoskernelsperf_gtest PUBLIC "-DGTEST_HAS_PTHREAD=0") + TARGET_INCLUDE_DIRECTORIES(kokkoskernelsperf_gtest PUBLIC $) + + #Gtest minimally requires C++ 11 + TARGET_COMPILE_FEATURES(kokkoskernelsperf_gtest PUBLIC cxx_std_11) + + include_directories(sparse) + + if(Kokkos_ENABLE_TESTS_AND_PERFSUITE) + #Add RPS implementations of KK perf tests here + KOKKOSKERNELS_ADD_EXECUTABLE( + tracked_testing + SOURCES KokkosKernelsTrackedTesting.cpp + sparse/KokkosSparse_spmv_test.cpp + blas/blas2/KokkosBlas2_gemv_tracked_perf_test.cpp + blas/blas1/KokkosBlas_dot_tracked_perf_test.cpp + blas/blas1/KokkosBlas_team_dot_tracked_perf_test.cpp + blas/blas3/KokkosBlas3_gemm_tracked_perf_test.cpp + PerfTestUtilities.cpp + sparse/spmv/OpenMPSmartStatic_SPMV.cpp + #sparse / KokkosSparse_spgemm_test.cpp + ) + endif() + + ADD_COMPONENT_SUBDIRECTORY(batched) + ADD_COMPONENT_SUBDIRECTORY(graph) + ADD_COMPONENT_SUBDIRECTORY(sparse) + ADD_COMPONENT_SUBDIRECTORY(blas) + ADD_SUBDIRECTORY(performance) + #ADD_SUBDIRECTORY(common) endif() -ADD_COMPONENT_SUBDIRECTORY(batched) -ADD_COMPONENT_SUBDIRECTORY(graph) -ADD_COMPONENT_SUBDIRECTORY(sparse) -ADD_COMPONENT_SUBDIRECTORY(blas) -ADD_SUBDIRECTORY(performance) -#ADD_SUBDIRECTORY(common) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index db7289619d..9337bb001a 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -133,6 +133,7 @@ fi if [[ "$HOSTNAME" =~ weaver.* ]]; then MACHINE=weaver + source /etc/profile.d/modules.sh module load git fi @@ -171,6 +172,10 @@ if [[ "$HOSTNAME" == sogpu01* ]]; then MACHINE=sogpu fi +if [[ "$HOSTNAME" == sorh7* ]]; then + MACHINE=sorh7 +fi + if [ ! -z "$SEMS_MODULEFILES_ROOT" ]; then if [[ "$MACHINE" = "" ]]; then MACHINE=sems @@ -483,7 +488,8 @@ elif [ "$MACHINE" = "sogpu" ]; then INTEL_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.2.0,sems-archive-/" CLANG_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/9.2.0,sems-archive-/" CUDA_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.2.0,sems-archive-/" - CUDA11_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/8.3.0,sems-archive-/" + CUDA11_MODULE_LIST="sems-cmake/3.23.1,sems-gcc/8.3.0,sems-/" + CUDA11_MODULE_TPL_LIST="$CUDA11_MODULE_LIST,sems-openblas/0.3.10" SKIP_HWLOC=True # No sems hwloc module @@ -491,6 +497,15 @@ elif [ "$MACHINE" = "sogpu" ]; then ARCH_FLAG="--arch=Volta70" fi + if [ "$SPOT_CHECK" = "True" ]; then + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("cuda/11.1.0 $CUDA11_MODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + ) + elif [ "$SPOT_CHECK_TPLS" = "True" ]; then + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("cuda/11.1.0 $CUDA11_MODULE_TPL_LIST "Cuda_Serial" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + ) + else # Format: (compiler module-list build-list exe-name warning-flag) COMPILERS=("gcc/5.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" "gcc/6.1.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" @@ -509,6 +524,45 @@ elif [ "$MACHINE" = "sogpu" ]; then "cuda/10.1 $CUDA_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/11.1 $CUDA11_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" ) + + fi +elif [ "$MACHINE" = "sorh7" ]; then + module load sems-cmake/3.23.1 sems-git + BASE_MODULE_LIST="sems-cmake/3.23.1,sems-/" + INTEL_BASE_MODULE_LIST="sems-cmake/3.23.1,sems-gcc/7.3.0,sems-/" + CLANG_BASE_MODULE_LIST="sems-cmake/3.23.1,sems-gcc/10.1.0,sems-/" + SKIP_HWLOC=True + # No sems hwloc module + + if [ -z "$ARCH_FLAG" ]; then + ARCH_FLAG="--arch=SKX" + fi + + if [ "$SPOT_CHECK" = "True" ]; then + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("intel/19.0.5 $INTEL_BASE_MODULE_LIST "OpenMP,Threads" icpc $INTEL_WARNING_FLAGS" + ) + elif [ "$SPOT_CHECK_TPLS" = "True" ]; then + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("intel/19.0.5 $INTEL_BASE_MODULE_LIST "OpenMP,Threads" icpc $INTEL_WARNING_FLAGS" + ) + else + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("gcc/5.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/6.1.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/6.4.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/7.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/8.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/9.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "clang/5.0.1 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "clang/7.0.1 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "clang/9.0.0 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "clang/10.0.0 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "intel/19.0.5 $INTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + ) + + fi elif [ "$MACHINE" = "kokkos-dev" ]; then MODULE_ENVIRONMENT="source /projects/sems/modulefiles/utils/sems-archive-modules-init.sh" eval "$MODULE_ENVIRONMENT" @@ -696,6 +750,7 @@ elif [ "$MACHINE" = "weaver" ]; then "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" "cuda/9.2.88 $CUDA_MODULE_LIST "Cuda_Serial" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/10.1.243 $CUDA10_MODULE_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + "cuda/11.2.2 $CUDA11_MODULE_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" ) elif [ "$SPOT_CHECK_TPLS" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) @@ -810,6 +865,7 @@ elif [ "$MACHINE" = "blake" ]; then COMPILERS=("intel/19.1.144 $BASE_MODULE_LIST_INTEL "OpenMP_Serial" icpc $INTEL_WARNING_FLAGS" "gcc/7.2.0 $BASE_MODULE_LIST "Threads_Serial,OpenMP" g++ $GCC_WARNING_FLAGS" "clang/10.0.1 $BASE_MODULE_LIST "Threads_Serial" clang++ $CLANG_WARNING_FLAGS" + "intel/19.5.281 $BASE_MODULE_LIST_INTEL "OpenMP,Threads" icpc $INTEL_WARNING_FLAGS" ) elif [ "$SPOT_CHECK_TPLS" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) @@ -817,6 +873,7 @@ elif [ "$MACHINE" = "blake" ]; then #"pgi/18.7.0 $BASE_MODULE_LIST $GCC_BUILD_LIST pgc++ $PGI_WARNING_FLAGS" COMPILERS=("intel/18.1.163 $BASE_MODULE_LIST_INTEL "OpenMP,Threads" icpc $INTEL_WARNING_FLAGS" "gcc/7.2.0 $GCC72_MODULE_TPL_LIST "OpenMP_Serial" g++ $GCC_WARNING_FLAGS" + "intel/19.5.281 $BASE_MODULE_LIST_INTEL "OpenMP,Threads" icpc $INTEL_WARNING_FLAGS" ) else COMPILERS=("intel/17.4.196 $BASE_MODULE_LIST_INTEL $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" @@ -1171,7 +1228,7 @@ setup_env() { if [[ "${SPOT_CHECK_TPLS}" = "True" ]]; then # Some machines will require explicitly setting include dirs and libs - if ([[ "$MACHINE" = white* ]] || [[ "$MACHINE" = weaver* ]] || [[ "$MACHINE" = blake* ]]) && [[ "$mod" = openblas* ]]; then + if ([[ "$MACHINE" = white* ]] || [[ "$MACHINE" = weaver* ]] || [[ "$MACHINE" = blake* ]] || [[ "$MACHINE" = sogpu* ]]) && [[ "$mod" = openblas* ]]; then BLAS_LIBRARY_DIRS="${OPENBLAS_ROOT}/lib" LAPACK_LIBRARY_DIRS="${OPENBLAS_ROOT}/lib" # BLAS_LIBRARIES="openblas" diff --git a/src/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp b/src/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp index 7f7b284d4c..2c69ecd578 100644 --- a/src/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp +++ b/src/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp @@ -88,6 +88,17 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, } #if defined(CUSPARSE_VERSION) && (11000 <= CUSPARSE_VERSION) + (void)handle; + (void)m; + (void)n; + (void)k; + (void)row_mapA; + (void)row_mapB; + (void)row_mapC; + (void)entriesA; + (void)entriesB; + (void)transposeA; + (void)transposeB; throw std::runtime_error( "SpGEMM cuSPARSE backend is not yet supported for this CUDA version\n"); #else @@ -166,6 +177,19 @@ void cuSPARSE_apply( cin_nonzero_index_view_type entriesC, cin_nonzero_value_view_type valuesC) { #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE #if defined(CUSPARSE_VERSION) && (11000 <= CUSPARSE_VERSION) + (void)handle; + (void)m; + (void)n; + (void)k; + (void)row_mapA; + (void)row_mapB; + (void)row_mapC; + (void)entriesA; + (void)entriesB; + (void)entriesC; + (void)valuesA; + (void)valuesB; + (void)valuesC; throw std::runtime_error( "SpGEMM cuSPARSE backend is not yet supported for this CUDA version\n"); #else diff --git a/unit_test/sparse/Test_Sparse_spmv.hpp b/unit_test/sparse/Test_Sparse_spmv.hpp index 8a15153dce..113a8d9749 100644 --- a/unit_test/sparse/Test_Sparse_spmv.hpp +++ b/unit_test/sparse/Test_Sparse_spmv.hpp @@ -486,6 +486,13 @@ template void test_spmv_mv(lno_t numRows, size_type nnz, lno_t bandwidth, lno_t row_size_variance, bool heavy, int numMV) { + // The kokkos-kernels gtest does not have GTEST_SKIP defined. Suggest updating + // or using kokkos/tpls/gtest instead. + // if (std::is_same>::value) + // GTEST_SKIP( + // "Skipped until https://github.com/kokkos/kokkos-kernels/issues/1331 is + // " "resolved"); using mag_t = typename Kokkos::ArithTraits::mag_type; constexpr mag_t max_x = static_cast(1); From ef89c7b4de711f3e74d1f7e291d90b81149f12cf Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Mon, 29 Aug 2022 15:48:27 -0600 Subject: [PATCH 051/226] scripts/cm_test_all_sandia: Add gcc 9.3.0 --- scripts/cm_test_all_sandia | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index 9337bb001a..643adcdb7b 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -731,6 +731,7 @@ elif [ "$MACHINE" = "weaver" ]; then GCC72_MODULE_TPL_LIST="cmake/3.19.3,/,openblas/0.2.20/gcc/7.2.0" GCC74_MODULE_TPL_LIST="cmake/3.19.3,/,openblas/0.2.20/gcc/7.2.0,gcc/7.4.0" + GCC93_MODULE_TPL_LIST="cmake/3.19.3,/,openblas/0.2.20/gcc/7.2.0,gcc/9.3.0" CUDA_MODULE_TPL_LIST="cmake/3.19.3,/,gcc/7.2.0,netlib/3.8.0/gcc/7.2.0" CUDA10_MODULE_TPL_LIST="cmake/3.19.3,/,gcc/7.2.0,openblas/0.2.20/gcc/7.2.0" # Cuda/11 modules available only on the dev queue (rhel8 OS); gcc/8.3.1 load by default @@ -751,6 +752,7 @@ elif [ "$MACHINE" = "weaver" ]; then "cuda/9.2.88 $CUDA_MODULE_LIST "Cuda_Serial" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/10.1.243 $CUDA10_MODULE_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/11.2.2 $CUDA11_MODULE_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + "gcc/9.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" ) elif [ "$SPOT_CHECK_TPLS" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) @@ -758,6 +760,7 @@ elif [ "$MACHINE" = "weaver" ]; then "gcc/7.4.0 $GCC74_MODULE_TPL_LIST "OpenMP" g++ $GCC_WARNING_FLAGS" "cuda/9.2.88 $CUDA_MODULE_TPL_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/10.1.243 $CUDA10_MODULE_TPL_LIST "Cuda_Serial" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + "gcc/9.3.0 $GCC93_MODULE_TPL_LIST "OpenMP,Serial" g++ $GCC_WARNING_FLAGS" ) else # Format: (compiler module-list build-list exe-name warning-flag) From 79186c3b5880a5f26a45c6c71a8bc543197a1f76 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Mon, 29 Aug 2022 16:02:31 -0600 Subject: [PATCH 052/226] scripts/cm_test_all_sandia: Add gcc 10.2.0 and gcc 11.2.0 --- scripts/cm_test_all_sandia | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index 643adcdb7b..3caa26e437 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -859,6 +859,7 @@ elif [ "$MACHINE" = "blake" ]; then ONEAPI_WARNING_FLAGS="" GCC72_MODULE_TPL_LIST="$BASE_MODULE_LIST,openblas/0.2.20/gcc/7.2.0" + GCC102_MODULE_TPL_LIST="$BASE_MODULE_LIST,openblas/0.3.13/gcc/10.2.0" if [ "$SPOT_CHECK" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) @@ -869,6 +870,8 @@ elif [ "$MACHINE" = "blake" ]; then "gcc/7.2.0 $BASE_MODULE_LIST "Threads_Serial,OpenMP" g++ $GCC_WARNING_FLAGS" "clang/10.0.1 $BASE_MODULE_LIST "Threads_Serial" clang++ $CLANG_WARNING_FLAGS" "intel/19.5.281 $BASE_MODULE_LIST_INTEL "OpenMP,Threads" icpc $INTEL_WARNING_FLAGS" + "gcc/10.2.0 $BASE_MODULE_LIST "Threads_Serial,OpenMP" g++ $GCC_WARNING_FLAGS" + "gcc/11.2.0 $BASE_MODULE_LIST "Threads_Serial,OpenMP" g++ $GCC_WARNING_FLAGS" ) elif [ "$SPOT_CHECK_TPLS" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) @@ -877,6 +880,7 @@ elif [ "$MACHINE" = "blake" ]; then COMPILERS=("intel/18.1.163 $BASE_MODULE_LIST_INTEL "OpenMP,Threads" icpc $INTEL_WARNING_FLAGS" "gcc/7.2.0 $GCC72_MODULE_TPL_LIST "OpenMP_Serial" g++ $GCC_WARNING_FLAGS" "intel/19.5.281 $BASE_MODULE_LIST_INTEL "OpenMP,Threads" icpc $INTEL_WARNING_FLAGS" + "gcc/10.2.0 $GCC102_MODULE_TPL_LIST "OpenMP_Serial" g++ $GCC_WARNING_FLAGS" ) else COMPILERS=("intel/17.4.196 $BASE_MODULE_LIST_INTEL $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" From fe6d2893d81a7493197ef563d52c7777118dadbc Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Tue, 30 Aug 2022 08:30:42 -0600 Subject: [PATCH 053/226] scripts/cm_test_all_sandia: Switch to openblas module --- scripts/cm_test_all_sandia | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index 3caa26e437..2fde934aa5 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -731,7 +731,7 @@ elif [ "$MACHINE" = "weaver" ]; then GCC72_MODULE_TPL_LIST="cmake/3.19.3,/,openblas/0.2.20/gcc/7.2.0" GCC74_MODULE_TPL_LIST="cmake/3.19.3,/,openblas/0.2.20/gcc/7.2.0,gcc/7.4.0" - GCC93_MODULE_TPL_LIST="cmake/3.19.3,/,openblas/0.2.20/gcc/7.2.0,gcc/9.3.0" + GCC93_MODULE_TPL_LIST="cmake/3.19.3,/,openblas/0.3.20/gcc/9.3.0,gcc/9.3.0" CUDA_MODULE_TPL_LIST="cmake/3.19.3,/,gcc/7.2.0,netlib/3.8.0/gcc/7.2.0" CUDA10_MODULE_TPL_LIST="cmake/3.19.3,/,gcc/7.2.0,openblas/0.2.20/gcc/7.2.0" # Cuda/11 modules available only on the dev queue (rhel8 OS); gcc/8.3.1 load by default From f5f559c90cf9372970f53c490a920f76d554eff1 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 31 Aug 2022 12:25:23 -0600 Subject: [PATCH 054/226] Default perf tests to on --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fece059855..2bb14a5892 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,7 +67,7 @@ IF (NOT KOKKOSKERNELS_HAS_TRILINOS) ) KOKKOSKERNELS_ADD_OPTION( "ENABLE_PERFTESTS" - OFF + ON BOOL "Whether to build performance tests. Default: OFF" ) From 6a1bfca1e2182218d7d257becd7d5cdde2c15db3 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Wed, 31 Aug 2022 12:41:31 -0600 Subject: [PATCH 055/226] cm_test_all_sandia: update modules for sogpu The system currently only has cuda/11.1 module available through the sems-archive pack --- scripts/cm_test_all_sandia | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index 9337bb001a..653e1e153b 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -480,6 +480,7 @@ if [ "$MACHINE" = "sems" ]; then SPACK_CUDA_ARCH="+maxwell50" #use an old one SPACK_CUDA_HOST_COMPILER="%gcc@7.2.0" elif [ "$MACHINE" = "sogpu" ]; then + #source /projects/sems/modulefiles/utils/sems-v2-modules-init.sh #TODO: use this script after moving away from sems-archive modules source /projects/sems/modulefiles/utils/sems-archive-modules-init.sh module load sems-archive-cmake/3.17.1 sems-archive-git @@ -488,7 +489,8 @@ elif [ "$MACHINE" = "sogpu" ]; then INTEL_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.2.0,sems-archive-/" CLANG_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/9.2.0,sems-archive-/" CUDA_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.2.0,sems-archive-/" - CUDA11_MODULE_LIST="sems-cmake/3.23.1,sems-gcc/8.3.0,sems-/" + CUDA11_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/8.3.0,sems-archive-/" + #CUDA11_MODULE_LIST="sems-cmake/3.23.1,sems-gcc/8.3.0,sems-/" # TODO: use this variable after moving away from sems-archive modules CUDA11_MODULE_TPL_LIST="$CUDA11_MODULE_LIST,sems-openblas/0.3.10" SKIP_HWLOC=True # No sems hwloc module @@ -499,11 +501,11 @@ elif [ "$MACHINE" = "sogpu" ]; then if [ "$SPOT_CHECK" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("cuda/11.1.0 $CUDA11_MODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + COMPILERS=("cuda/11.1 $CUDA11_MODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" ) elif [ "$SPOT_CHECK_TPLS" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("cuda/11.1.0 $CUDA11_MODULE_TPL_LIST "Cuda_Serial" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + COMPILERS=("cuda/11.1 $CUDA11_MODULE_TPL_LIST "Cuda_Serial" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" ) else # Format: (compiler module-list build-list exe-name warning-flag) From a6ed16d03d5cb5cbe269c8571422f1c9e47c6d96 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Wed, 31 Aug 2022 13:09:26 -0600 Subject: [PATCH 056/226] KokkosGraph_CoarsenHeuristics: remove volatile qualifier from join Addresses issue #1509 --- src/graph/KokkosGraph_CoarsenHeuristics.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/graph/KokkosGraph_CoarsenHeuristics.hpp b/src/graph/KokkosGraph_CoarsenHeuristics.hpp index a9a5ce3e21..0b61fc2fa5 100644 --- a/src/graph/KokkosGraph_CoarsenHeuristics.hpp +++ b/src/graph/KokkosGraph_CoarsenHeuristics.hpp @@ -803,8 +803,7 @@ class coarsen_heuristics { } KOKKOS_INLINE_FUNCTION - void join(volatile ordinal_t& update, - volatile const ordinal_t& input) const { + void join(ordinal_t& update, const ordinal_t& input) const { if (input > update) update = input; } }; From 5014671ba27f041ce20befb192b6f0fce7490e3a Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 31 Aug 2022 15:22:10 -0600 Subject: [PATCH 057/226] scripts: Add --disable-perftests option --- cm_generate_makefile.bash | 12 +++++++++--- scripts/cm_test_all_sandia | 10 ++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/cm_generate_makefile.bash b/cm_generate_makefile.bash index ee195ca0fe..5fdaaf06a7 100755 --- a/cm_generate_makefile.bash +++ b/cm_generate_makefile.bash @@ -336,7 +336,9 @@ display_help_text() { echo "--gcc-toolchain=/Path/To/GccRoot: Set the gcc toolchain to use with clang (e.g. /usr)" echo "--kokkos-make-j=[NUM]: Set -j parallel level for kokkos install" echo " Default: j == 4" - echo "--enable-tests: build Kokkos Kernels unit and performance tests" + echo "--enable-tests: build Kokkos Kernels unit tests" + echo "--disable-tests: Do not build Kokkos Kernels unit tests" + echo "--disable-perftests: Do not build Kokkos Kernels performance tests" echo "--deprecated-code Enable deprecated code (disabled by default)" echo "--enable-perfsuite: build Kokkos Kernels performance tests with RAJAPerf Suite" @@ -349,6 +351,7 @@ KOKKOS_INSTALL_PATH="" KOKKOS_DO_TESTS=OFF KOKKOS_DO_EXAMPLES=OFF KOKKOSKERNELS_DO_TESTS=ON +KOKKOSKERNELS_DO_PERFTESTS=ON KOKKOSKERNELS_DO_PERFSUITE=OFF KOKKOSKERNELS_DO_EXAMPLES=ON @@ -520,6 +523,9 @@ do --disable-tests) KOKKOSKERNELS_DO_TESTS=OFF ;; + --disable-perftests) + KOKKOSKERNELS_DO_PERFTESTS=OFF + ;; --enable-examples) # This is the default KOKKOSKERNELS_DO_EXAMPLES=ON @@ -773,7 +779,7 @@ cd $STORE_KOKKOSKERNELS_BUILD_PATH # Configure kokkos-kernels echo "" -echo cmake $COMPILER_CMD -DKokkos_DIR="${KOKKOS_FIND_PATH}" -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS}" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DKokkosKernels_ENABLE_TESTS_AND_PERFSUITE=${KOKKOSKERNELS_DO_PERFSUITE} -DKokkosKernels_ENABLE_TESTS=${KOKKOSKERNELS_DO_TESTS} -DKokkosKernels_ENABLE_EXAMPLES:BOOL=${KOKKOSKERNELS_DO_EXAMPLES} ${KOKKOSKERNELS_SCALARS_CMD} ${KOKKOSKERNELS_ORDINALS_CMD} ${KOKKOSKERNELS_OFFSETS_CMD} ${KOKKOSKERNELS_LAYOUTS_CMD} ${KOKKOSKERNELS_TPLS_CMD} ${KOKKOSKERNELS_USER_TPL_PATH_CMD} ${KOKKOSKERNELS_USER_TPL_LIBNAME_CMD} ${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD} ${KOKKOSKERNELS_BUILDTYPE_CMD} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBRARIES} ${KOKKOSKERNELS_SPACES_CMD} ${KERNELS_DEFAULT_ETI_OPTION} ${KOKKOSKERNELS_PATH} +echo cmake $COMPILER_CMD -DKokkos_DIR="${KOKKOS_FIND_PATH}" -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS}" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DKokkosKernels_ENABLE_TESTS_AND_PERFSUITE=${KOKKOSKERNELS_DO_PERFSUITE} -DKokkosKernels_ENABLE_TESTS=${KOKKOSKERNELS_DO_TESTS} -DKokkosKernels_ENABLE_PERFTESTS=${KOKKOSKERNELS_DO_PERFTESTS} -DKokkosKernels_ENABLE_EXAMPLES:BOOL=${KOKKOSKERNELS_DO_EXAMPLES} ${KOKKOSKERNELS_SCALARS_CMD} ${KOKKOSKERNELS_ORDINALS_CMD} ${KOKKOSKERNELS_OFFSETS_CMD} ${KOKKOSKERNELS_LAYOUTS_CMD} ${KOKKOSKERNELS_TPLS_CMD} ${KOKKOSKERNELS_USER_TPL_PATH_CMD} ${KOKKOSKERNELS_USER_TPL_LIBNAME_CMD} ${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD} ${KOKKOSKERNELS_BUILDTYPE_CMD} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBRARIES} ${KOKKOSKERNELS_SPACES_CMD} ${KERNELS_DEFAULT_ETI_OPTION} ${KOKKOSKERNELS_PATH} echo "" -cmake $COMPILER_CMD -DKokkos_DIR="${KOKKOS_FIND_PATH}" -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS//\"}" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DKokkosKernels_ENABLE_TESTS_AND_PERFSUITE=${KOKKOSKERNELS_DO_PERFSUITE} -DKokkosKernels_ENABLE_TESTS=${KOKKOSKERNELS_DO_TESTS} -DKokkosKernels_ENABLE_EXAMPLES:BOOL=${KOKKOSKERNELS_DO_EXAMPLES} ${KOKKOSKERNELS_SCALARS_CMD} ${KOKKOSKERNELS_ORDINALS_CMD} ${KOKKOSKERNELS_OFFSETS_CMD} ${KOKKOSKERNELS_LAYOUTS_CMD} ${KOKKOSKERNELS_TPLS_CMD} ${KOKKOSKERNELS_USER_TPL_PATH_CMD} ${KOKKOSKERNELS_USER_TPL_LIBNAME_CMD} ${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD} ${KOKKOSKERNELS_BUILDTYPE_CMD} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBRARIES} ${KOKKOSKERNELS_SPACES_CMD} ${KERNELS_DEFAULT_ETI_OPTION} ${KOKKOSKERNELS_PATH} +cmake $COMPILER_CMD -DKokkos_DIR="${KOKKOS_FIND_PATH}" -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS//\"}" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DKokkosKernels_ENABLE_TESTS_AND_PERFSUITE=${KOKKOSKERNELS_DO_PERFSUITE} -DKokkosKernels_ENABLE_TESTS=${KOKKOSKERNELS_DO_TESTS} -DKokkosKernels_ENABLE_PERFTESTS=${KOKKOSKERNELS_DO_PERFTESTS} -DKokkosKernels_ENABLE_EXAMPLES:BOOL=${KOKKOSKERNELS_DO_EXAMPLES} ${KOKKOSKERNELS_SCALARS_CMD} ${KOKKOSKERNELS_ORDINALS_CMD} ${KOKKOSKERNELS_OFFSETS_CMD} ${KOKKOSKERNELS_LAYOUTS_CMD} ${KOKKOSKERNELS_TPLS_CMD} ${KOKKOSKERNELS_USER_TPL_PATH_CMD} ${KOKKOSKERNELS_USER_TPL_LIBNAME_CMD} ${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD} ${KOKKOSKERNELS_BUILDTYPE_CMD} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBRARIES} ${KOKKOSKERNELS_SPACES_CMD} ${KERNELS_DEFAULT_ETI_OPTION} ${KOKKOSKERNELS_PATH} diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index 2fde934aa5..f577d7c695 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -80,6 +80,8 @@ print_help() { echo "--with-spaces=SPACES: Set spaces to be instantiated." echo " Options: hostspace, cudaspace, cudauvmspace" echo "" + echo "--disable-perftests: Do not build perftests for Kokkos Kernels" + echo "" echo "ARGS: list of expressions matching compilers to test" echo " supported compilers sems" @@ -217,6 +219,7 @@ TEST_SPACK=False SKIP_HWLOC=False SPOT_CHECK=False NO_DEFAULT_ETI=False +ENABLE_PERFTESTS=True PRINT_HELP=False OPT_FLAG="" @@ -376,6 +379,9 @@ do --no-default-eti*) NO_DEFAULT_ETI=True ;; + --disable-perftests*) + ENABLE_PERFTESTS=False + ;; --with-spaces*) KOKKOSKERNELS_SPACES="${key#*=}" ;; @@ -1351,6 +1357,10 @@ single_build_and_test() { local extra_args="$extra_args --no-default-eti" fi + if [ "${ENABLE_PERFTESTS}" = "False" ]; then + local extra_args="$extra_args --disable-perftests" + fi + echo " Starting job $desc" From 6ff87653cfc37f102c124b9223591ea69daef971 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 31 Aug 2022 15:56:52 -0600 Subject: [PATCH 058/226] scripts: Added --enable-perftests --- BUILD.md | 2 +- cm_generate_makefile.bash | 4 ++++ scripts/cm_test_all_sandia | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/BUILD.md b/BUILD.md index f08ea5c320..6c91042b78 100644 --- a/BUILD.md +++ b/BUILD.md @@ -151,7 +151,7 @@ endif() * Default: OFF * KokkosKernels_ENABLE_PERFTESTS: BOOL * Whether to build performance tests. - * Default: OFF + * Default: ON * KokkosKernels_ENABLE_TESTS_AND_PERFSUITE: BOOL * Whether to build performance tests and suite. * Default: OFF diff --git a/cm_generate_makefile.bash b/cm_generate_makefile.bash index 5fdaaf06a7..c8d238fc84 100755 --- a/cm_generate_makefile.bash +++ b/cm_generate_makefile.bash @@ -339,6 +339,7 @@ display_help_text() { echo "--enable-tests: build Kokkos Kernels unit tests" echo "--disable-tests: Do not build Kokkos Kernels unit tests" echo "--disable-perftests: Do not build Kokkos Kernels performance tests" + echo "--enable-perftests: build Kokkos Kernels performance tests (default)" echo "--deprecated-code Enable deprecated code (disabled by default)" echo "--enable-perfsuite: build Kokkos Kernels performance tests with RAJAPerf Suite" @@ -526,6 +527,9 @@ do --disable-perftests) KOKKOSKERNELS_DO_PERFTESTS=OFF ;; + --enable-perftests) + KOKKOSKERNELS_DO_PERFTESTS=ON + ;; --enable-examples) # This is the default KOKKOSKERNELS_DO_EXAMPLES=ON diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index f577d7c695..a4b0651ef4 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -82,6 +82,8 @@ print_help() { echo "" echo "--disable-perftests: Do not build perftests for Kokkos Kernels" echo "" + echo "--enable-perftests: build perftests for Kokkos Kernels (default)" + echo "" echo "ARGS: list of expressions matching compilers to test" echo " supported compilers sems" @@ -382,6 +384,9 @@ do --disable-perftests*) ENABLE_PERFTESTS=False ;; + --enable-perftests*) + ENABLE_PERFTESTS=True + ;; --with-spaces*) KOKKOSKERNELS_SPACES="${key#*=}" ;; From 4544b74ba89005d59e68c105cd6d23d63a6962b4 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Tue, 6 Sep 2022 16:37:48 -0600 Subject: [PATCH 059/226] Graph coarsen: fix test by adding pre-processor guards, issue #1516 New capabilities added to perform graph coarsening rely on LAMBDA expression that are only available in CUDA when specifically enabled in Kokkos Core. Adding guards for CUDA LAMBDAs fix a compilation issue in the unit-tests. --- src/graph/KokkosGraph_CoarsenConstruct.hpp | 44 ++++++++++++++++++++++ unit_test/graph/Test_Graph_coarsen.hpp | 18 +++++++++ 2 files changed, 62 insertions(+) diff --git a/src/graph/KokkosGraph_CoarsenConstruct.hpp b/src/graph/KokkosGraph_CoarsenConstruct.hpp index f77ac1ffb9..ae40aec410 100644 --- a/src/graph/KokkosGraph_CoarsenConstruct.hpp +++ b/src/graph/KokkosGraph_CoarsenConstruct.hpp @@ -1,3 +1,47 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Mike Gilbert (msg5334@psu.edu) +// +// ************************************************************************ +//@HEADER +*/ + #pragma once // exclude from Cuda builds without lambdas enabled #if !defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) diff --git a/unit_test/graph/Test_Graph_coarsen.hpp b/unit_test/graph/Test_Graph_coarsen.hpp index af8ec55a23..9c8e28887e 100644 --- a/unit_test/graph/Test_Graph_coarsen.hpp +++ b/unit_test/graph/Test_Graph_coarsen.hpp @@ -272,6 +272,7 @@ crsMat gen_grid() { return A; } +#if !defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) template void test_multilevel_coarsen_grid() { using crsMat = @@ -304,7 +305,13 @@ void test_multilevel_coarsen_grid() { coarse++; } } +#else +template +void test_multilevel_coarsen_grid() {} +#endif + +#if !defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) template void test_coarsen_grid() { using crsMat = @@ -355,7 +362,13 @@ void test_coarsen_grid() { } } } +#else +template +void test_coarsen_grid() {} +#endif + +#if !defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) template void test_coarsen_random(lno_t numVerts, size_type nnz, lno_t bandwidth, lno_t row_size_variance) { @@ -424,6 +437,11 @@ void test_coarsen_random(lno_t numVerts, size_type nnz, lno_t bandwidth, } } } +#else +template +void test_coarsen_random(lno_t /*numVerts*/, size_type /*nnz*/, lno_t /*bandwidth*/, + lno_t /*row_size_variance*/) {} +#endif #define EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ TEST_F( \ From 82e684342820a08acdca3aee7e8d5e6442587c18 Mon Sep 17 00:00:00 2001 From: iyamazaki Date: Tue, 6 Sep 2022 18:41:46 -0400 Subject: [PATCH 060/226] update supernodal SpTRSV perf-test, and disable turning off diagonal-inversion when using SpMV --- perf_test/sparse/CMakeLists.txt | 7 +++++- .../sparse/KokkosSparse_sptrsv_cholmod.cpp | 13 +++++++--- .../sparse/KokkosSparse_sptrsv_superlu.cpp | 4 ++- src/sparse/KokkosKernels_Handle.hpp | 25 ++++++++++++++++--- 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/perf_test/sparse/CMakeLists.txt b/perf_test/sparse/CMakeLists.txt index fe2b7a094e..2b9805e6c0 100644 --- a/perf_test/sparse/CMakeLists.txt +++ b/perf_test/sparse/CMakeLists.txt @@ -85,7 +85,12 @@ KOKKOSKERNELS_ADD_EXECUTABLE( SOURCES KokkosSparse_sptrsv_cholmod.cpp ) -IF (NOT ${KOKKOS_HAS_TRILINOS}) +IF (KOKKOS_HAS_TRILINOS) + SET (KOKKOSKERNELS_ENABLE_SPTRSV_SUPERLU OFF) +ELSE () + SET (KOKKOSKERNELS_ENABLE_SPTRSV_SUPERLU ON) +ENDIF () +IF (KOKKOSKERNELS_ENABLE_SPTRSV_SUPERLU) # Disable this perf test with Trilinos builds to workaround # -Werror issues error: declaration of xyz with C language linkage KOKKOSKERNELS_ADD_EXECUTABLE( diff --git a/perf_test/sparse/KokkosSparse_sptrsv_cholmod.cpp b/perf_test/sparse/KokkosSparse_sptrsv_cholmod.cpp index 07b1e99bb1..7823f5d9b7 100644 --- a/perf_test/sparse/KokkosSparse_sptrsv_cholmod.cpp +++ b/perf_test/sparse/KokkosSparse_sptrsv_cholmod.cpp @@ -43,6 +43,8 @@ #include "Kokkos_Random.hpp" #include "KokkosSparse_CrsMatrix.hpp" +#include "KokkosSparse_IOUtils.hpp" + #include "KokkosSparse_spmv.hpp" #include "KokkosSparse_sptrsv.hpp" #include "KokkosSparse_sptrsv_cholmod.hpp" @@ -234,7 +236,7 @@ int test_sptrsv_perf(std::vector tests, std::string &filename, std::cout << " CHOLMOD Tester Begin: Read matrix filename " << filename << std::endl; host_crsmat_t Mtx = - KokkosKernels::Impl::read_kokkos_crst_matrix( + KokkosSparse::Impl::read_kokkos_crst_matrix( filename.c_str()); // in_matrix auto graph_host = Mtx.graph; // in_graph const size_type nrows = graph_host.numRows(); @@ -323,16 +325,19 @@ int test_sptrsv_perf(std::vector tests, std::string &filename, // ============================================== // specify wheather to invert diagonal blocks - std::cout << " Invert diagonal : " << invert_diag << std::endl; khL.set_sptrsv_invert_diagonal(invert_diag); khU.set_sptrsv_invert_diagonal(invert_diag); + invert_diag = khU.get_sptrsv_invert_diagonal(); + std::cout << " Invert diagonal : " << invert_diag << std::endl; // ============================================== // specify wheather to apply diagonal-inversion to off-diagonal blocks // (optional, default is false) - std::cout << " Invert Off-diagonal: " << invert_offdiag << std::endl; - khL.set_sptrsv_invert_offdiagonal(invert_offdiag); khU.set_sptrsv_invert_offdiagonal(invert_offdiag); + // > make sure if the flag is set before setting for L + invert_offdiag = khU.get_sptrsv_invert_offdiagonal(); + khL.set_sptrsv_invert_offdiagonal(invert_offdiag); + std::cout << " Invert Off-diagonal: " << invert_offdiag << std::endl; // ============================================== // block size to switch to device call diff --git a/perf_test/sparse/KokkosSparse_sptrsv_superlu.cpp b/perf_test/sparse/KokkosSparse_sptrsv_superlu.cpp index 049d560309..589fed54e6 100644 --- a/perf_test/sparse/KokkosSparse_sptrsv_superlu.cpp +++ b/perf_test/sparse/KokkosSparse_sptrsv_superlu.cpp @@ -44,6 +44,8 @@ #include "Kokkos_Random.hpp" #include "KokkosSparse_CrsMatrix.hpp" +#include "KokkosSparse_IOUtils.hpp" + #include "KokkosSparse_spmv.hpp" #include "KokkosSparse_sptrsv.hpp" #include "KokkosSparse_sptrsv_superlu.hpp" @@ -382,7 +384,7 @@ int test_sptrsv_perf(std::vector tests, bool verbose, std::cout << " SuperLU Tester Begin: Read matrix filename " << filename << std::endl; host_crsmat_t Mtx = - KokkosKernels::Impl::read_kokkos_crst_matrix( + KokkosSparse::Impl::read_kokkos_crst_matrix( filename.c_str()); const size_type nrows = Mtx.graph.numRows(); diff --git a/src/sparse/KokkosKernels_Handle.hpp b/src/sparse/KokkosKernels_Handle.hpp index 69a74c3e5d..c8904f561e 100644 --- a/src/sparse/KokkosKernels_Handle.hpp +++ b/src/sparse/KokkosKernels_Handle.hpp @@ -756,9 +756,9 @@ class KokkosKernelsHandle { #ifdef KOKKOSKERNELS_ENABLE_SUPERNODAL_SPTRSV // default SpMV option - if (algm == KokkosSparse::Experimental::SPTRSVAlgorithm::SUPERNODAL_SPMV || - algm == - KokkosSparse::Experimental::SPTRSVAlgorithm::SUPERNODAL_SPMV_DAG) { + using namespace KokkosSparse::Experimental; + if (algm == SPTRSVAlgorithm::SUPERNODAL_SPMV || + algm == SPTRSVAlgorithm::SUPERNODAL_SPMV_DAG) { this->set_sptrsv_column_major(true); } #endif @@ -790,20 +790,39 @@ class KokkosKernelsHandle { } void set_sptrsv_invert_diagonal(bool flag) { + auto algo = this->sptrsvHandle->get_algorithm(); + using namespace KokkosSparse::Experimental; + if(!flag && (algo == SPTRSVAlgorithm::SUPERNODAL_SPMV || + algo == SPTRSVAlgorithm::SUPERNODAL_SPMV_DAG)) { + std::cout << std::endl + << " ** Supernodal SpTRSV with SpMV require diagonal inversion **" + << std::endl << std::endl; + this->sptrsvHandle->set_invert_diagonal(true); + return; + } this->sptrsvHandle->set_invert_diagonal(flag); } + bool get_sptrsv_invert_diagonal() { + return this->sptrsvHandle->get_invert_diagonal(); + } + void set_sptrsv_invert_offdiagonal(bool flag) { if (flag == true && !(this->is_sptrsv_column_major())) { std::cout << std::endl << " ** cannot invert offdiagonal in CSR **" << std::endl << std::endl; + this->sptrsvHandle->set_invert_offdiagonal(false); return; } this->sptrsvHandle->set_invert_offdiagonal(flag); } + bool get_sptrsv_invert_offdiagonal() { + return this->sptrsvHandle->get_invert_offdiagonal(); + } + void set_sptrsv_etree(int *etree) { this->sptrsvHandle->set_etree(etree); } void set_sptrsv_column_major(bool col_major) { From b4c1e3c7902b8dd8f4c0702681a950429dd58cf5 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Tue, 6 Sep 2022 17:06:56 -0600 Subject: [PATCH 061/226] Graph coarse: apply clang-format --- unit_test/graph/Test_Graph_coarsen.hpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/unit_test/graph/Test_Graph_coarsen.hpp b/unit_test/graph/Test_Graph_coarsen.hpp index 9c8e28887e..7cc0becde6 100644 --- a/unit_test/graph/Test_Graph_coarsen.hpp +++ b/unit_test/graph/Test_Graph_coarsen.hpp @@ -310,7 +310,6 @@ template void test_multilevel_coarsen_grid() {} #endif - #if !defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) template void test_coarsen_grid() { @@ -367,7 +366,6 @@ template void test_coarsen_grid() {} #endif - #if !defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) template void test_coarsen_random(lno_t numVerts, size_type nnz, lno_t bandwidth, @@ -439,8 +437,8 @@ void test_coarsen_random(lno_t numVerts, size_type nnz, lno_t bandwidth, } #else template -void test_coarsen_random(lno_t /*numVerts*/, size_type /*nnz*/, lno_t /*bandwidth*/, - lno_t /*row_size_variance*/) {} +void test_coarsen_random(lno_t /*numVerts*/, size_type /*nnz*/, + lno_t /*bandwidth*/, lno_t /*row_size_variance*/) {} #endif #define EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ From 593fc0c38d6988d39a8738fdecc7f3ddc486397a Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Tue, 6 Sep 2022 17:31:18 -0600 Subject: [PATCH 062/226] Graph coarse: take into account Brian's feedback --- unit_test/graph/Test_Graph.hpp | 2 ++ unit_test/graph/Test_Graph_coarsen.hpp | 16 ---------------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/unit_test/graph/Test_Graph.hpp b/unit_test/graph/Test_Graph.hpp index c2aeeab9d3..ad916cc92a 100644 --- a/unit_test/graph/Test_Graph.hpp +++ b/unit_test/graph/Test_Graph.hpp @@ -5,7 +5,9 @@ #include "Test_Graph_graph_color_distance2.hpp" #include "Test_Graph_graph_color.hpp" #include "Test_Graph_mis2.hpp" +#if !defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) #include "Test_Graph_coarsen.hpp" +#endif #include "Test_Graph_rcm.hpp" #endif // TEST_GRAPH_HPP diff --git a/unit_test/graph/Test_Graph_coarsen.hpp b/unit_test/graph/Test_Graph_coarsen.hpp index 7cc0becde6..af8ec55a23 100644 --- a/unit_test/graph/Test_Graph_coarsen.hpp +++ b/unit_test/graph/Test_Graph_coarsen.hpp @@ -272,7 +272,6 @@ crsMat gen_grid() { return A; } -#if !defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) template void test_multilevel_coarsen_grid() { using crsMat = @@ -305,12 +304,7 @@ void test_multilevel_coarsen_grid() { coarse++; } } -#else -template -void test_multilevel_coarsen_grid() {} -#endif -#if !defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) template void test_coarsen_grid() { using crsMat = @@ -361,12 +355,7 @@ void test_coarsen_grid() { } } } -#else -template -void test_coarsen_grid() {} -#endif -#if !defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) template void test_coarsen_random(lno_t numVerts, size_type nnz, lno_t bandwidth, lno_t row_size_variance) { @@ -435,11 +424,6 @@ void test_coarsen_random(lno_t numVerts, size_type nnz, lno_t bandwidth, } } } -#else -template -void test_coarsen_random(lno_t /*numVerts*/, size_type /*nnz*/, - lno_t /*bandwidth*/, lno_t /*row_size_variance*/) {} -#endif #define EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ TEST_F( \ From 0a866b9b38a9df03ea77b2a57127fb3120eb042d Mon Sep 17 00:00:00 2001 From: iyamazaki Date: Wed, 7 Sep 2022 12:28:23 -0600 Subject: [PATCH 063/226] sptrsv : clang-format-8 --- perf_test/sparse/KokkosSparse_sptrsv_cholmod.cpp | 6 +++--- src/sparse/KokkosKernels_Handle.hpp | 12 +++++++----- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/perf_test/sparse/KokkosSparse_sptrsv_cholmod.cpp b/perf_test/sparse/KokkosSparse_sptrsv_cholmod.cpp index 7823f5d9b7..117d23c445 100644 --- a/perf_test/sparse/KokkosSparse_sptrsv_cholmod.cpp +++ b/perf_test/sparse/KokkosSparse_sptrsv_cholmod.cpp @@ -327,15 +327,15 @@ int test_sptrsv_perf(std::vector tests, std::string &filename, // specify wheather to invert diagonal blocks khL.set_sptrsv_invert_diagonal(invert_diag); khU.set_sptrsv_invert_diagonal(invert_diag); - invert_diag = khU.get_sptrsv_invert_diagonal(); + invert_diag = khU.get_sptrsv_invert_diagonal(); std::cout << " Invert diagonal : " << invert_diag << std::endl; // ============================================== // specify wheather to apply diagonal-inversion to off-diagonal blocks // (optional, default is false) khU.set_sptrsv_invert_offdiagonal(invert_offdiag); - // > make sure if the flag is set before setting for L - invert_offdiag = khU.get_sptrsv_invert_offdiagonal(); + // > make sure if the flag is set before setting for L + invert_offdiag = khU.get_sptrsv_invert_offdiagonal(); khL.set_sptrsv_invert_offdiagonal(invert_offdiag); std::cout << " Invert Off-diagonal: " << invert_offdiag << std::endl; diff --git a/src/sparse/KokkosKernels_Handle.hpp b/src/sparse/KokkosKernels_Handle.hpp index c8904f561e..2aa587011b 100644 --- a/src/sparse/KokkosKernels_Handle.hpp +++ b/src/sparse/KokkosKernels_Handle.hpp @@ -792,11 +792,13 @@ class KokkosKernelsHandle { void set_sptrsv_invert_diagonal(bool flag) { auto algo = this->sptrsvHandle->get_algorithm(); using namespace KokkosSparse::Experimental; - if(!flag && (algo == SPTRSVAlgorithm::SUPERNODAL_SPMV || - algo == SPTRSVAlgorithm::SUPERNODAL_SPMV_DAG)) { - std::cout << std::endl - << " ** Supernodal SpTRSV with SpMV require diagonal inversion **" - << std::endl << std::endl; + if (!flag && (algo == SPTRSVAlgorithm::SUPERNODAL_SPMV || + algo == SPTRSVAlgorithm::SUPERNODAL_SPMV_DAG)) { + std::cout + << std::endl + << " ** Supernodal SpTRSV with SpMV require diagonal inversion **" + << std::endl + << std::endl; this->sptrsvHandle->set_invert_diagonal(true); return; } From 6d22947a468f28a8737f64695e9acfc247c654a5 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Fri, 9 Sep 2022 11:26:25 -0600 Subject: [PATCH 064/226] cm_test_all_sandia: Add diagnostic suppression flags for intel builds Add flags -diag-disable=1011,-diag-disable=869 for intel builds Workaround kokkos/kokkos#5432 for nightly and CI builds --- scripts/cm_test_all_sandia | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index c14979428f..9a5080ac35 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -204,7 +204,7 @@ CUDA_IBM_BUILD_LIST="Cuda_OpenMP,Cuda_Serial" GCC_WARNING_FLAGS="-Wall,-Wunused-parameter,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wignored-qualifiers,-Wempty-body,-Wclobbered,-Wuninitialized" IBM_WARNING_FLAGS="-Wall,-Wunused-parameter,-Wshadow,-pedantic,-Wsign-compare,-Wtype-limits,-Wuninitialized" CLANG_WARNING_FLAGS="-Wall,-Wunused-parameter,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" -INTEL_WARNING_FLAGS="-Wall,-Wunused-parameter,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" +INTEL_WARNING_FLAGS="-Wall,-Wunused-parameter,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized,-diag-disable=1011,-diag-disable=869" CUDA_WARNING_FLAGS="-Wall,-Wunused-parameter,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" #CUDA_WARNING_FLAGS="-Wall,-Wunused-parameter,-Wshadow,-pedantic,-Wsign-compare,-Wtype-limits,-Wuninitialized" PGI_WARNING_FLAGS="" From 072bc9114b71862bdccf50de5e0ba9e729acfd70 Mon Sep 17 00:00:00 2001 From: Carl Pearson Date: Fri, 9 Sep 2022 13:57:16 -0600 Subject: [PATCH 065/226] utils: implicit copy-assign deprecated in array_sum_reduce (#1494) --- src/common/KokkosKernels_Utils.hpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/common/KokkosKernels_Utils.hpp b/src/common/KokkosKernels_Utils.hpp index eae4080879..4db72c40fa 100644 --- a/src/common/KokkosKernels_Utils.hpp +++ b/src/common/KokkosKernels_Utils.hpp @@ -1454,10 +1454,7 @@ struct array_sum_reduce { array_sum_reduce() { for (int i = 0; i < N; i++) data[i] = scalar_t(); } - KOKKOS_INLINE_FUNCTION - array_sum_reduce(const ValueType &rhs) { - for (int i = 0; i < N; i++) data[i] = rhs.data[i]; - } + KOKKOS_INLINE_FUNCTION // add operator array_sum_reduce & operator+=(const ValueType &src) { From 0dfe66a849b2f978c3881553165ba5c6d08019e4 Mon Sep 17 00:00:00 2001 From: Junchao Zhang Date: Fri, 2 Sep 2022 12:51:11 -0500 Subject: [PATCH 066/226] spgemm: add support of cuSparse-11.4 --- src/sparse/KokkosSparse_Utils_cusparse.hpp | 2 + src/sparse/KokkosSparse_spgemm_handle.hpp | 96 ++++++--- .../KokkosSparse_spgemm_cuSPARSE_impl.hpp | 192 ++++++++++++++---- .../impl/KokkosSparse_spgemm_numeric_spec.hpp | 5 + .../KokkosSparse_spgemm_symbolic_spec.hpp | 6 + 5 files changed, 234 insertions(+), 67 deletions(-) diff --git a/src/sparse/KokkosSparse_Utils_cusparse.hpp b/src/sparse/KokkosSparse_Utils_cusparse.hpp index 6e9eee5ab5..b33d6137d7 100644 --- a/src/sparse/KokkosSparse_Utils_cusparse.hpp +++ b/src/sparse/KokkosSparse_Utils_cusparse.hpp @@ -46,6 +46,8 @@ #define _KOKKOSKERNELS_SPARSEUTILS_CUSPARSE_HPP #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE +#include "cuda.h" +#include "cuda_runtime.h" #include "cusparse.h" namespace KokkosSparse { diff --git a/src/sparse/KokkosSparse_spgemm_handle.hpp b/src/sparse/KokkosSparse_spgemm_handle.hpp index f7da72d07b..f2d2a219be 100644 --- a/src/sparse/KokkosSparse_spgemm_handle.hpp +++ b/src/sparse/KokkosSparse_spgemm_handle.hpp @@ -41,17 +41,19 @@ // ************************************************************************ //@HEADER */ +#ifndef _SPGEMMHANDLE_HPP +#define _SPGEMMHANDLE_HPP +#include +#include #include #include #include +//#define VERBOSE #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE -#include "cusparse.h" +#include "KokkosSparse_Utils_cusparse.hpp" #endif -#ifndef _SPGEMMHANDLE_HPP -#define _SPGEMMHANDLE_HPP -//#define VERBOSE namespace KokkosSparse { @@ -142,14 +144,59 @@ class SPGEMMHandle { nnz_lno_persistent_work_host_view_t; // Host view type #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE - struct cuSparseHandleType { - cusparseHandle_t handle; +#if (CUDA_VERSION >= 11040) + struct cuSparseSpgemmHandleType { + KokkosKernels::Experimental::Controls kkControls; + cusparseHandle_t cusparseHandle; + cusparseOperation_t opA, opB; + cusparseSpMatDescr_t descr_A, descr_B, descr_C; + cusparseSpGEMMDescr_t spgemmDescr; + + cudaDataType scalarType; + cusparseSpGEMMAlg_t alg; + + // buffer1~2 are not needed in the numeric phase, + // so we don't have them as member variables + size_t bufferSize3, bufferSize4, bufferSize5; + void *buffer3, *buffer4, *buffer5; + + bool C_populated; + + cuSparseSpgemmHandleType(bool transposeA, bool transposeB) { + opA = transposeA ? CUSPARSE_OPERATION_TRANSPOSE + : CUSPARSE_OPERATION_NON_TRANSPOSE; + opB = transposeB ? CUSPARSE_OPERATION_TRANSPOSE + : CUSPARSE_OPERATION_NON_TRANSPOSE; + scalarType = Impl::cuda_data_type_from(); + + alg = CUSPARSE_SPGEMM_DEFAULT; + bufferSize3 = bufferSize4 = bufferSize5 = 0; + buffer3 = buffer4 = buffer5 = NULL; + C_populated = false; + + cusparseHandle = kkControls.getCusparseHandle(); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_createDescr(&spgemmDescr)); + } + + ~cuSparseSpgemmHandleType() { + cusparseDestroySpMat(descr_A); + cusparseDestroySpMat(descr_B); + cusparseDestroySpMat(descr_C); + cusparseSpGEMM_destroyDescr(spgemmDescr); + cudaFree(buffer3); + cudaFree(buffer4); + cudaFree(buffer5); + } + }; +#else + struct cuSparseSpgemmHandleType { + cusparse_spgemm_handle_t handle; cusparseOperation_t transA; cusparseOperation_t transB; cusparseMatDescr_t a_descr; cusparseMatDescr_t b_descr; cusparseMatDescr_t c_descr; - cuSparseHandleType(bool transposeA, bool transposeB) { + cuSparseSpgemmHandleType(bool transposeA, bool transposeB) { cusparseStatus_t status; status = cusparseCreate(&handle); if (status != CUSPARSE_STATUS_SUCCESS) { @@ -193,15 +240,14 @@ class SPGEMMHandle { cusparseSetMatType(c_descr, CUSPARSE_MATRIX_TYPE_GENERAL); cusparseSetMatIndexBase(c_descr, CUSPARSE_INDEX_BASE_ZERO); } - ~cuSparseHandleType() { + ~cuSparseSpgemmHandleType() { cusparseDestroyMatDescr(a_descr); cusparseDestroyMatDescr(b_descr); cusparseDestroyMatDescr(c_descr); cusparseDestroy(handle); } }; - - typedef cuSparseHandleType SPGEMMcuSparseHandleType; +#endif #endif private: SPGEMMAlgorithm algorithm_type; @@ -299,7 +345,7 @@ class SPGEMMHandle { #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE private: - SPGEMMcuSparseHandleType *cuSPARSEHandle; + cuSparseSpgemmHandleType *cusparse_spgemm_handle; public: #endif @@ -483,7 +529,7 @@ class SPGEMMHandle { is_compression_single_step(false) #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE , - cuSPARSEHandle(NULL) + cusparse_spgemm_handle(NULL) #endif { if (gs == SPGEMM_DEFAULT) { @@ -493,26 +539,27 @@ class SPGEMMHandle { virtual ~SPGEMMHandle() { #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE - this->destroy_cuSPARSE_Handle(); + this->destroy_cusparse_spgemm_handle(); #endif }; #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE - void create_cuSPARSE_Handle(bool transA, bool transB) { - this->destroy_cuSPARSE_Handle(); - this->cuSPARSEHandle = new cuSparseHandleType(transA, transB); - } - void destroy_cuSPARSE_Handle() { - if (this->cuSPARSEHandle != NULL) { - delete this->cuSPARSEHandle; - this->cuSPARSEHandle = NULL; + void create_cusparse_spgemm_handle(bool transA, bool transB) { + this->destroy_cusparse_spgemm_handle(); + this->cusparse_spgemm_handle = new cuSparseSpgemmHandleType(transA, transB); + } + void destroy_cusparse_spgemm_handle() { + if (this->cusparse_spgemm_handle != NULL) { + delete this->cusparse_spgemm_handle; + this->cusparse_spgemm_handle = NULL; } } - SPGEMMcuSparseHandleType *get_cuSparseHandle() { - return this->cuSPARSEHandle; + cuSparseSpgemmHandleType *get_cusparse_spgemm_handle() { + return this->cusparse_spgemm_handle; } #endif + void choose_default_algorithm() { #if defined(KOKKOS_ENABLE_SERIAL) if (std::is_same::value) { @@ -546,7 +593,8 @@ class SPGEMMHandle { #if defined(KOKKOS_ENABLE_CUDA) if (std::is_same::value) { -#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE +#if defined(KOKKOSKERNELS_ENABLE_TPL_CUSPARSE) && \ + (CUDA_VERSION >= 11040 || CUSPARSE_VERSION < 11000) this->algorithm_type = SPGEMM_CUSPARSE; #else this->algorithm_type = SPGEMM_KK; diff --git a/src/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp b/src/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp index 2c69ecd578..bb34846ef5 100644 --- a/src/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp +++ b/src/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp @@ -45,12 +45,9 @@ #ifndef _KOKKOSSPGEMMCUSPARSE_HPP #define _KOKKOSSPGEMMCUSPARSE_HPP -//#define KOKKOSKERNELS_ENABLE_TPL_CUSPARSE - #include "KokkosKernels_Controls.hpp" -#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE -#include "cusparse.h" -#endif +#include "KokkosSparse_Utils_cusparse.hpp" + namespace KokkosSparse { namespace Impl { @@ -69,11 +66,15 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, bin_nonzero_index_view_type entriesB, bool transposeB, cin_row_index_view_type row_mapC) { #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE + using device1 = typename ain_row_index_view_type::device_type; + using device2 = typename ain_nonzero_index_view_type::device_type; + using idx = typename KernelHandle::nnz_lno_t; + using size_type = typename KernelHandle::size_type; + using scalar_type = typename KernelHandle::nnz_scalar_t; - using device1 = typename ain_row_index_view_type::device_type; - using device2 = typename ain_nonzero_index_view_type::device_type; - using idx = typename KernelHandle::nnz_lno_t; - using size_type = typename KernelHandle::size_type; + // In case the KernelHandle uses const types! + using non_const_idx = typename std::remove_cv::type; + using non_const_size_type = typename std::remove_cv::type; // TODO this is not correct, check memory space. if (std::is_same::value) { @@ -87,18 +88,89 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, // return; } -#if defined(CUSPARSE_VERSION) && (11000 <= CUSPARSE_VERSION) - (void)handle; - (void)m; - (void)n; - (void)k; - (void)row_mapA; - (void)row_mapB; - (void)row_mapC; - (void)entriesA; - (void)entriesB; - (void)transposeA; - (void)transposeB; + // CUDA_VERSION coming along with CUDAToolkit is easier to find than + // CUSPARSE_VERSION +#if (CUDA_VERSION >= 11040) + if (!std::is_same::value || + !std::is_same::value) { + throw std::runtime_error( + "cusparseSpGEMMreuse requires local ordinals to be 32-bit integer."); + } + + handle->set_sort_option(1); // tells users the output is sorted + handle->create_cusparse_spgemm_handle(transposeA, transposeB); + typename KernelHandle::cuSparseSpgemmHandleType *h = + handle->get_cusparse_spgemm_handle(); + + // Follow + // https://github.com/NVIDIA/CUDALibrarySamples/tree/master/cuSPARSE/spgemm_reuse + void *buffer1 = NULL; + void *buffer2 = NULL; + size_t bufferSize1 = 0; + size_t bufferSize2 = 0; + + // When nnz is not zero, cusparseCreateCsr insists non-null a value pointer, + // which however is not available in this function. So we fake it with the + // entries instead. Fortunately, it seems cupsarse does not access that in the + // symbolic phase. + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &h->descr_A, m, n, entriesA.extent(0), (void *)row_mapA.data(), + (void *)entriesA.data(), (void *)entriesA.data() /*fake*/, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, + h->scalarType)); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &h->descr_B, n, k, entriesB.extent(0), (void *)row_mapB.data(), + (void *)entriesB.data(), (void *)entriesB.data() /*fake*/, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, + h->scalarType)); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &h->descr_C, m, k, 0, NULL, NULL, NULL, CUSPARSE_INDEX_32I, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); + + //---------------------------------------------------------------------- + // ask bufferSize1 bytes for external memory + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_workEstimation( + h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, + h->alg, h->spgemmDescr, &bufferSize1, NULL)); + + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&buffer1, bufferSize1)); + // inspect matrices A and B to understand the memory requirement for the next + // step + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_workEstimation( + h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, + h->alg, h->spgemmDescr, &bufferSize1, buffer1)); + + //---------------------------------------------------------------------- + // Compute nnz of C + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_nnz( + h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, + h->alg, h->spgemmDescr, &bufferSize2, NULL, &h->bufferSize3, NULL, + &h->bufferSize4, NULL)); + + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&buffer2, bufferSize2)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&h->buffer3, h->bufferSize3)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&h->buffer4, h->bufferSize4)); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_nnz( + h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, + h->alg, h->spgemmDescr, &bufferSize2, buffer2, &h->bufferSize3, + h->buffer3, &h->bufferSize4, h->buffer4)); + + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer1)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer2)); + + int64_t C_nrow, C_ncol, C_nnz; + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSpMatGetSize(h->descr_C, &C_nrow, &C_ncol, &C_nnz)); + if (C_nnz > std::numeric_limits::max()) { + throw std::runtime_error("nnz of C overflowed over 32-bit int\n"); + } + handle->set_c_nnz(C_nnz); + h->C_populated = false; // sparsity pattern of C is not set yet + +#elif defined(CUSPARSE_VERSION) && (11000 <= CUSPARSE_VERSION) throw std::runtime_error( "SpGEMM cuSPARSE backend is not yet supported for this CUDA version\n"); #else @@ -110,9 +182,9 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, const idx *a_adj = entriesA.data(); const idx *b_adj = entriesB.data(); - handle->create_cuSPARSE_Handle(transposeA, transposeB); - typename KernelHandle::SPGEMMcuSparseHandleType *h = - handle->get_cuSparseHandle(); + handle->create_cusparse_spgemm_handle(transposeA, transposeB); + typename KernelHandle::get_cusparse_spgemm_handle *h = + handle->get_cusparse_spgemm_handle(); int nnzA = entriesA.extent(0); int nnzB = entriesB.extent(0); @@ -120,6 +192,7 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, int baseC, nnzC; int *nnzTotalDevHostPtr = &nnzC; + handle->set_sort_option(1); // tells users the output is sorted cusparseXcsrgemmNnz(h->handle, h->transA, h->transB, (int)m, (int)n, (int)k, h->a_descr, nnzA, (int *)a_xadj, (int *)a_adj, h->b_descr, nnzB, (int *)b_xadj, (int *)b_adj, @@ -176,23 +249,6 @@ void cuSPARSE_apply( bool /* transposeB */, cin_row_index_view_type row_mapC, cin_nonzero_index_view_type entriesC, cin_nonzero_value_view_type valuesC) { #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE -#if defined(CUSPARSE_VERSION) && (11000 <= CUSPARSE_VERSION) - (void)handle; - (void)m; - (void)n; - (void)k; - (void)row_mapA; - (void)row_mapB; - (void)row_mapC; - (void)entriesA; - (void)entriesB; - (void)entriesC; - (void)valuesA; - (void)valuesB; - (void)valuesC; - throw std::runtime_error( - "SpGEMM cuSPARSE backend is not yet supported for this CUDA version\n"); -#else typedef typename KernelHandle::nnz_lno_t idx; typedef typename KernelHandle::nnz_scalar_t value_type; @@ -216,7 +272,57 @@ void cuSPARSE_apply( "MEMORY IS NOT ALLOCATED IN GPU DEVICE for CUSPARSE\n"); // return; } +#if (CUDA_VERSION >= 11040) + typename KernelHandle::cuSparseSpgemmHandleType *h = + handle->get_cusparse_spgemm_handle(); + + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_A, (void *)row_mapA.data(), + (void *)entriesA.data(), (void *)valuesA.data())); + + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_B, (void *)row_mapB.data(), + (void *)entriesB.data(), (void *)valuesB.data())); + + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_C, (void *)row_mapC.data(), + (void *)entriesC.data(), (void *)valuesC.data())); + + if (!h->C_populated) { + cusparseSpGEMMreuse_copy(h->cusparseHandle, h->opA, h->opB, h->descr_A, + h->descr_B, h->descr_C, h->alg, h->spgemmDescr, + &h->bufferSize5, NULL); + cudaMalloc((void **)&h->buffer5, h->bufferSize5); + cusparseSpGEMMreuse_copy(h->cusparseHandle, h->opA, h->opB, h->descr_A, + h->descr_B, h->descr_C, h->alg, h->spgemmDescr, + &h->bufferSize5, h->buffer5); + cudaFree(h->buffer3); + h->buffer3 = NULL; + h->C_populated = true; + } + + // C' = alpha * opA(A) * opB(B) + beta * C + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); + + // alpha, beta are on host, but since we use singleton on the cusparse + // handle, we save/restore the pointer mode to not interference with + // others' use + cusparsePointerMode_t oldPtrMode; + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseGetPointerMode(h->cusparseHandle, &oldPtrMode)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetPointerMode(h->cusparseHandle, CUSPARSE_POINTER_MODE_HOST)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_compute( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, h->alg, h->spgemmDescr)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetPointerMode(h->cusparseHandle, oldPtrMode)); +#elif (CUSPARSE_VERSION >= 11000) + throw std::runtime_error( + "SpGEMM cuSPARSE backend is not yet supported for this CUDA version\n"); +#else if (std::is_same::value) { int *a_xadj = (int *)row_mapA.data(); int *b_xadj = (int *)row_mapB.data(); @@ -226,8 +332,8 @@ void cuSPARSE_apply( int *b_adj = (int *)entriesB.data(); int *c_adj = (int *)entriesC.data(); - typename KernelHandle::SPGEMMcuSparseHandleType *h = - handle->get_cuSparseHandle(); + typename KernelHandle::cuSparseSpgemmHandleType *h = + handle->get_cusparse_spgemm_handle(); int nnzA = entriesA.extent(0); int nnzB = entriesB.extent(0); diff --git a/src/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp b/src/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp index 24008d3b26..98e8f4434b 100644 --- a/src/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp +++ b/src/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp @@ -215,9 +215,14 @@ struct SPGEMM_NUMERIC< switch (sh->get_algorithm_type()) { case SPGEMM_CUSPARSE: +#if defined(KOKKOSKERNELS_ENABLE_TPL_CUSPARSE) cuSPARSE_apply( sh, m, n, k, row_mapA, entriesA, valuesA, transposeA, row_mapB, entriesB, valuesB, transposeB, row_mapC, entriesC, valuesC); +#else + throw std::runtime_error( + "Requiring SPGEMM_CUSPARSE but TPL_CUSPARSE was not enabled!"); +#endif break; case SPGEMM_CUSP: CUSP_applyget_spgemm_handle(); switch (sh->get_algorithm_type()) { case SPGEMM_CUSPARSE: +#if defined(KOKKOSKERNELS_ENABLE_TPL_CUSPARSE) cuSPARSE_symbolic( sh, m, n, k, row_mapA, entriesA, transposeA, row_mapB, entriesB, transposeB, row_mapC); +#else + throw std::runtime_error( + "Requiring SPGEMM_CUSPARSE but TPL_CUSPARSE was not enabled!"); +#endif + break; break; case SPGEMM_CUSP: case SPGEMM_VIENNA: break; From ddaddbeb89f4c2638a6d85956e6e6074165fcdad Mon Sep 17 00:00:00 2001 From: Junchao Zhang Date: Fri, 2 Sep 2022 12:53:45 -0500 Subject: [PATCH 067/226] spgemm: add support of rocSparse --- src/sparse/KokkosSparse_spgemm_handle.hpp | 87 ++++- .../impl/KokkosSparse_spgemm_numeric_spec.hpp | 11 + .../KokkosSparse_spgemm_rocSPARSE_impl.hpp | 307 ++++++++++++++++++ .../KokkosSparse_spgemm_symbolic_spec.hpp | 12 + 4 files changed, 414 insertions(+), 3 deletions(-) create mode 100644 src/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp diff --git a/src/sparse/KokkosSparse_spgemm_handle.hpp b/src/sparse/KokkosSparse_spgemm_handle.hpp index f2d2a219be..7514082ef1 100644 --- a/src/sparse/KokkosSparse_spgemm_handle.hpp +++ b/src/sparse/KokkosSparse_spgemm_handle.hpp @@ -51,6 +51,10 @@ #include //#define VERBOSE +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE +#include "KokkosSparse_Utils_rocsparse.hpp" +#endif + #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE #include "KokkosSparse_Utils_cusparse.hpp" #endif @@ -70,6 +74,7 @@ enum SPGEMMAlgorithm { SPGEMM_MKL, SPGEMM_MKL2PHASE, SPGEMM_VIENNA, // TPLS + SPGEMM_ROCSPARSE, // TRIANGLE COUNTING SPECIALIZED SPGEMM_KK_TRIANGLE_AI, // SPGEMM_KK_TRIANGLE_DEFAULT, SPGEMM_KK_TRIANGLE_MEM, @@ -143,6 +148,46 @@ class SPGEMMHandle { typedef typename nnz_lno_persistent_work_view_t::HostMirror nnz_lno_persistent_work_host_view_t; // Host view type +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE + struct rocSparseSpgemmHandleType { + KokkosKernels::Experimental::Controls + kkControls; // give a singleton rocsparse handle + rocsparse_handle rocsparseHandle; + rocsparse_operation opA, opB; + rocsparse_mat_descr descr_A, descr_B, descr_C, descr_D; + rocsparse_mat_info info_C; + size_t bufferSize; + void *buffer; + bool C_populated; + + rocSparseSpgemmHandleType(bool transposeA, bool transposeB) { + opA = + transposeA ? rocsparse_operation_transpose : rocsparse_operation_none; + opB = + transposeB ? rocsparse_operation_transpose : rocsparse_operation_none; + + bufferSize = 0; + buffer = NULL; + C_populated = false; + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_create_mat_descr(&descr_A)); + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_create_mat_descr(&descr_B)); + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_create_mat_descr(&descr_C)); + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_create_mat_descr(&descr_D)); + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_create_mat_info(&info_C)); + rocsparseHandle = kkControls.getRocsparseHandle(); + } + + ~rocSparseSpgemmHandleType() { + rocsparse_destroy_mat_info(info_C); + rocsparse_destroy_mat_descr(descr_A); + rocsparse_destroy_mat_descr(descr_B); + rocsparse_destroy_mat_descr(descr_C); + rocsparse_destroy_mat_descr(descr_D); + } + }; + +#endif + #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE #if (CUDA_VERSION >= 11040) struct cuSparseSpgemmHandleType { @@ -343,6 +388,13 @@ class SPGEMMHandle { } int get_mkl_sort_option() { return this->mkl_sort_option; } +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE + private: + rocSparseSpgemmHandleType *rocsparse_spgemm_handle; + + public: +#endif + #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE private: cuSparseSpgemmHandleType *cusparse_spgemm_handle; @@ -527,6 +579,10 @@ class SPGEMMHandle { mkl_keep_output(true), mkl_convert_to_1base(true), is_compression_single_step(false) +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE + , + rocsparse_spgemm_handle(NULL) +#endif #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE , cusparse_spgemm_handle(NULL) @@ -538,11 +594,34 @@ class SPGEMMHandle { } virtual ~SPGEMMHandle() { +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE + this->destroy_rocsparse_spgemm_handle(); +#endif #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE this->destroy_cusparse_spgemm_handle(); #endif }; +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE + void create_rocsparse_spgemm_handle(bool transA, bool transB) { + this->destroy_rocsparse_spgemm_handle(); + this->rocsparse_spgemm_handle = + new rocSparseSpgemmHandleType(transA, transB); + } + + rocSparseSpgemmHandleType *get_rocsparse_spgemm_handle() { + return this->rocsparse_spgemm_handle; + } + + void destroy_rocsparse_spgemm_handle() { + if (this->rocsparse_spgemm_handle != NULL) { + delete this->rocsparse_spgemm_handle; + this->rocsparse_spgemm_handle = NULL; + } + } + +#endif + #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE void create_cusparse_spgemm_handle(bool transA, bool transB) { this->destroy_cusparse_spgemm_handle(); @@ -608,10 +687,10 @@ class SPGEMMHandle { #if defined(KOKKOS_ENABLE_HIP) if (std::is_same::value) { +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE + this->algorithm_type = SPGEMM_ROCSPARSE; +#else this->algorithm_type = SPGEMM_KK; -#ifdef VERBOSE - std::cout << "HIP Execution Space, Default Algorithm: SPGEMM_KK" - << std::endl; #endif } #endif @@ -728,6 +807,8 @@ inline SPGEMMAlgorithm StringToSPGEMMAlgorithm(std::string &name) { return SPGEMM_SERIAL; else if (name == "SPGEMM_CUSPARSE") return SPGEMM_CUSPARSE; + else if (name == "SPGEMM_ROCSPARSE") + return SPGEMM_ROCSPARSE; else if (name == "SPGEMM_CUSP") return SPGEMM_CUSP; else if (name == "SPGEMM_MKL") diff --git a/src/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp b/src/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp index 98e8f4434b..e6c7e05632 100644 --- a/src/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp +++ b/src/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp @@ -53,6 +53,7 @@ #if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY //#include "KokkosSparse_spgemm_symbolic.hpp" #include "KokkosSparse_spgemm_cuSPARSE_impl.hpp" +#include "KokkosSparse_spgemm_rocSPARSE_impl.hpp" #include "KokkosSparse_spgemm_CUSP_impl.hpp" #include "KokkosSparse_spgemm_impl.hpp" #include "KokkosSparse_spgemm_impl_seq.hpp" @@ -222,6 +223,16 @@ struct SPGEMM_NUMERIC< #else throw std::runtime_error( "Requiring SPGEMM_CUSPARSE but TPL_CUSPARSE was not enabled!"); +#endif + break; + case SPGEMM_ROCSPARSE: +#if defined(KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE) + rocsparse_spgemm_numeric( + sh, m, n, k, row_mapA, entriesA, valuesA, transposeA, row_mapB, + entriesB, valuesB, transposeB, row_mapC, entriesC, valuesC); +#else + throw std::runtime_error( + "Requiring SPGEMM_ROCSPARSE but TPL_ROCSPARSE was not enabled!"); #endif break; case SPGEMM_CUSP: diff --git a/src/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp b/src/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp new file mode 100644 index 0000000000..bc2837130e --- /dev/null +++ b/src/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp @@ -0,0 +1,307 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef _KOKKOSSPGEMMROCSPARSE_HPP +#define _KOKKOSSPGEMMROCSPARSE_HPP + +#include + +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE + +#include "KokkosKernels_Controls.hpp" +#include "rocsparse.h" + +namespace KokkosSparse { + +namespace Impl { + +//============================================================================= +// Overload rocsparse_Xcsrgemm_buffer_size() over scalar types +#define ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(scalar_type, TOKEN) \ + inline rocsparse_status rocsparse_Xcsrgemm_buffer_size( \ + rocsparse_handle handle, rocsparse_operation trans_A, \ + rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, \ + rocsparse_int k, const scalar_type *alpha, \ + const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, \ + const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, \ + const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, \ + const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, \ + const scalar_type *beta, const rocsparse_mat_descr descr_D, \ + rocsparse_int nnz_D, const rocsparse_int *csr_row_ptr_D, \ + const rocsparse_int *csr_col_ind_D, rocsparse_mat_info info_C, \ + size_t *buffer_size) { \ + return rocsparse_##TOKEN##csrgemm_buffer_size( \ + handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, \ + csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, \ + csr_col_ind_B, beta, descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, \ + info_C, buffer_size); \ + } +ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(float, s) +ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(double, d) +ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(rocsparse_float_complex, c) +ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(rocsparse_double_complex, z) + +//============================================================================= +// Overload rocsparse_Xcsrgemm_numeric() over scalar types +#define ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(scalar_type, TOKEN) \ + inline rocsparse_status rocsparse_Xcsrgemm_numeric( \ + rocsparse_handle handle, rocsparse_operation trans_A, \ + rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, \ + rocsparse_int k, const scalar_type *alpha, \ + const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, \ + const scalar_type *csr_val_A, const rocsparse_int *csr_row_ptr_A, \ + const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, \ + rocsparse_int nnz_B, const scalar_type *csr_val_B, \ + const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, \ + const scalar_type *beta, const rocsparse_mat_descr descr_D, \ + rocsparse_int nnz_D, const scalar_type *csr_val_D, \ + const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, \ + const rocsparse_mat_descr descr_C, rocsparse_int nnz_C, \ + scalar_type *csr_val_C, const rocsparse_int *csr_row_ptr_C, \ + const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, \ + void *buffer) { \ + return rocsparse_##TOKEN##csrgemm_numeric( \ + handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, csr_val_A, \ + csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_val_B, \ + csr_row_ptr_B, csr_col_ind_B, beta, descr_D, nnz_D, csr_val_D, \ + csr_row_ptr_D, csr_col_ind_D, descr_C, nnz_C, csr_val_C, \ + csr_row_ptr_C, csr_col_ind_C, info_C, buffer); \ + } +ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(float, s) +ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(double, d) +ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(rocsparse_float_complex, c) +ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(rocsparse_double_complex, z) + +//============================================================================= +template +inline typename std::enable_if< + (not std::is_same::value) or + (not std::is_same::value), + void>::type +rocsparse_spgemm_symbolic_internal(KernelHandle *handle, index_type m, + index_type n, index_type k, size_type nnz_A, + const size_type *rowptrA, + const index_type *colidxA, bool transposeA, + size_type nnz_B, const size_type *rowptrB, + const index_type *colidxB, bool transposeB, + size_type *rowptrC) { + // normal code should use the specializations and not go here + throw std::runtime_error( + "The installed rocsparse does not support the index type and size type"); +} + +template +inline + typename std::enable_if::value and + std::is_same::value, + void>::type + rocsparse_spgemm_symbolic_internal( + KernelHandle *handle, index_type m, index_type n, index_type k, + size_type nnz_A, const size_type *rowptrA, const index_type *colidxA, + bool transposeA, size_type nnz_B, const size_type *rowptrB, + const index_type *colidxB, bool transposeB, size_type *rowptrC) { + handle->create_rocsparse_spgemm_handle(transposeA, transposeB); + typename KernelHandle::rocSparseSpgemmHandleType *h = + handle->get_rocsparse_spgemm_handle(); + + // alpha, beta are on host, but since we use singleton on the rocsparse + // handle, we save/restore the pointer mode to not interference with + // others' use + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); + rocsparse_pointer_mode oldPtrMode; + + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL( + rocsparse_get_pointer_mode(h->rocsparseHandle, &oldPtrMode)); + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_set_pointer_mode( + h->rocsparseHandle, rocsparse_pointer_mode_host)); + + // C = alpha * OpA(A) * OpB(B) + beta * D + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_Xcsrgemm_buffer_size( + h->rocsparseHandle, h->opA, h->opB, m, n, k, &alpha, h->descr_A, nnz_A, + rowptrA, colidxA, h->descr_B, nnz_B, rowptrB, colidxB, &beta, h->descr_D, + 0, NULL, NULL, h->info_C, &h->bufferSize)); + + KOKKOS_IMPL_HIP_SAFE_CALL(hipMalloc(&h->buffer, h->bufferSize)); + + rocsparse_int C_nnz = 0; + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_csrgemm_nnz( + h->rocsparseHandle, h->opA, h->opB, m, n, k, h->descr_A, nnz_A, rowptrA, + colidxA, h->descr_B, nnz_B, rowptrB, colidxB, h->descr_D, 0, NULL, NULL, + h->descr_C, rowptrC, &C_nnz, h->info_C, h->buffer)); + + handle->set_c_nnz(C_nnz); + h->C_populated = false; // sparsity pattern of C is not set yet, so this is a + // fake symbolic + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL( + rocsparse_set_pointer_mode(h->rocsparseHandle, oldPtrMode)); +} + +template < + typename KernelHandle, typename ain_row_index_view_type, + typename ain_nonzero_index_view_type, typename bin_row_index_view_type, + typename bin_nonzero_index_view_type, typename cin_row_index_view_type> +void rocsparse_spgemm_symbolic( + KernelHandle *handle, typename KernelHandle::nnz_lno_t m, + typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, + ain_row_index_view_type rowptrA, ain_nonzero_index_view_type colidxA, + bool transposeA, bin_row_index_view_type rowptrB, + bin_nonzero_index_view_type colidxB, bool transposeB, + cin_row_index_view_type rowptrC) { + using index_type = typename KernelHandle::nnz_lno_t; + using size_type = typename KernelHandle::size_type; + using scalar_type = typename KernelHandle::nnz_scalar_t; + + // In case the KernelHandle uses const types! + using non_const_index_type = typename std::remove_cv::type; + using non_const_size_type = typename std::remove_cv::type; + using non_const_scalar_type = typename std::remove_cv::type; + + handle->set_sort_option(1); // tells users the output matrix is sorted + rocsparse_spgemm_symbolic_internal( + handle, m, n, k, colidxA.extent(0), rowptrA.data(), colidxA.data(), + transposeA, colidxB.extent(0), rowptrB.data(), colidxB.data(), transposeB, + rowptrC.data()); +} + +//============================================================================= +template +inline typename std::enable_if< + (not std::is_same::value) or + (not std::is_same::value), + void>::type +rocsparse_spgemm_numeric_internal( + KernelHandle *handle, index_type m, index_type n, index_type k, + size_type nnz_A, const size_type *rowptrA, const index_type *colidxA, + const scalar_type *valuesA, size_type nnz_B, const size_type *rowptrB, + const index_type *colidxB, const scalar_type *valuesB, size_type nnz_C, + const size_type *rowptrC, index_type *colidxC, scalar_type *valuesC) { + // normal code should use the specializations and not go here + throw std::runtime_error( + "The installed rocsparse does not support the index type and size type"); +} + +template +inline + typename std::enable_if::value and + std::is_same::value, + void>::type + rocsparse_spgemm_numeric_internal( + KernelHandle *handle, index_type m, index_type n, index_type k, + size_type nnz_A, const size_type *rowptrA, const index_type *colidxA, + const scalar_type *valuesA, size_type nnz_B, const size_type *rowptrB, + const index_type *colidxB, const scalar_type *valuesB, size_type nnz_C, + const size_type *rowptrC, index_type *colidxC, scalar_type *valuesC) { + typename KernelHandle::rocSparseSpgemmHandleType *h = + handle->get_rocsparse_spgemm_handle(); + + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); + rocsparse_pointer_mode oldPtrMode; + + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL( + rocsparse_get_pointer_mode(h->rocsparseHandle, &oldPtrMode)); + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_set_pointer_mode( + h->rocsparseHandle, rocsparse_pointer_mode_host)); + + if (!h->C_populated) { + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_csrgemm_symbolic( + h->rocsparseHandle, h->opA, h->opB, m, n, k, h->descr_A, nnz_A, rowptrA, + colidxA, h->descr_B, nnz_B, rowptrB, colidxB, h->descr_D, 0, NULL, NULL, + h->descr_C, nnz_C, rowptrC, colidxC, h->info_C, h->buffer)); + h->C_populated = true; + } + + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_Xcsrgemm_numeric( + h->rocsparseHandle, h->opA, h->opB, m, n, k, &alpha, h->descr_A, nnz_A, + valuesA, rowptrA, colidxA, h->descr_B, nnz_B, valuesB, rowptrB, colidxB, + &beta, h->descr_D, 0, NULL, NULL, NULL, h->descr_C, nnz_C, valuesC, + rowptrC, colidxC, h->info_C, h->buffer)); + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL( + rocsparse_set_pointer_mode(h->rocsparseHandle, oldPtrMode)); +} + +template < + typename KernelHandle, typename ain_row_index_view_type, + typename ain_nonzero_index_view_type, typename ain_nonzero_value_view_type, + typename bin_row_index_view_type, typename bin_nonzero_index_view_type, + typename bin_nonzero_value_view_type, typename cin_row_index_view_type, + typename cin_nonzero_index_view_type, typename cin_nonzero_value_view_type> +void rocsparse_spgemm_numeric( + KernelHandle *handle, typename KernelHandle::nnz_lno_t m, + typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, + ain_row_index_view_type rowptrA, ain_nonzero_index_view_type colidxA, + ain_nonzero_value_view_type valuesA, bool /* transposeA */, + bin_row_index_view_type rowptrB, bin_nonzero_index_view_type colidxB, + bin_nonzero_value_view_type valuesB, bool /* transposeB */, + cin_row_index_view_type rowptrC, cin_nonzero_index_view_type colidxC, + cin_nonzero_value_view_type valuesC) { + using index_type = typename KernelHandle::nnz_lno_t; + using size_type = typename KernelHandle::size_type; + using scalar_type = typename KernelHandle::nnz_scalar_t; + + // In case the KernelHandle uses const types! + using non_const_index_type = typename std::remove_cv::type; + using non_const_size_type = typename std::remove_cv::type; + using non_const_scalar_type = typename std::remove_cv::type; + + rocsparse_spgemm_numeric_internal( + handle, m, n, k, colidxA.extent(0), rowptrA.data(), colidxA.data(), + valuesA.data(), colidxB.extent(0), rowptrB.data(), colidxB.data(), + valuesB.data(), colidxC.extent(0), rowptrC.data(), colidxC.data(), + valuesC.data()); +} + +} // namespace Impl +} // namespace KokkosSparse + +#endif +#endif diff --git a/src/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp b/src/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp index af2445789a..67acfa1827 100644 --- a/src/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp +++ b/src/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp @@ -52,6 +52,7 @@ // Include the actual functors #if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY #include "KokkosSparse_spgemm_cuSPARSE_impl.hpp" +#include "KokkosSparse_spgemm_rocSPARSE_impl.hpp" #include "KokkosSparse_spgemm_CUSP_impl.hpp" #include "KokkosSparse_spgemm_impl.hpp" #include "KokkosSparse_spgemm_impl_seq.hpp" @@ -158,6 +159,17 @@ struct SPGEMM_SYMBOLIC( + sh, m, n, k, row_mapA, entriesA, transposeA, row_mapB, entriesB, + transposeB, row_mapC); +#else + throw std::runtime_error( + "Requiring SPGEMM_ROCSPARSE but TPL_ROCSPARSE was not enabled!"); +#endif break; case SPGEMM_CUSP: case SPGEMM_VIENNA: break; From 0f5c8cc57f366a902cf415b97898d2ed88de9d56 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Thu, 8 Sep 2022 16:30:48 -0600 Subject: [PATCH 068/226] src/batched/dense: Barrier after broadcast - A timing bug was hidden with the lenthier epilogue generated by gcc 7.2.0. This commit adds a memory barrier for GNU compilers after avx512 broadcast intrinsics to ensure the broadcasted writes land before the memory locations are read from. Fixes #1512. --- src/KokkosKernels_Macros.hpp | 6 ++++++ src/batched/dense/KokkosBatched_Vector_SIMD.hpp | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/src/KokkosKernels_Macros.hpp b/src/KokkosKernels_Macros.hpp index 67d86b6e0e..6e84e79d41 100644 --- a/src/KokkosKernels_Macros.hpp +++ b/src/KokkosKernels_Macros.hpp @@ -114,6 +114,12 @@ #else #define KOKKOSKERNELS_UNUSED_ATTRIBUTE #endif // __GNUC__ + +#if defined(KOKKOS_COMPILER_GNU) +#define KOKKOSKERNELS_GNU_COMPILER_FENCE __sync_synchronize(); +#else +#define KOKKOSKERNELS_GNU_COMPILER_FENCE +#endif // KOKKOS_COMPILER_GNU /******* END other helper macros *******/ #endif // KOKKOSKERNELS_MACROS_HPP_ diff --git a/src/batched/dense/KokkosBatched_Vector_SIMD.hpp b/src/batched/dense/KokkosBatched_Vector_SIMD.hpp index 13cf1eacac..2b1951fca3 100644 --- a/src/batched/dense/KokkosBatched_Vector_SIMD.hpp +++ b/src/batched/dense/KokkosBatched_Vector_SIMD.hpp @@ -591,10 +591,12 @@ class Vector >, 2> { inline Vector() { _data = _mm256_setzero_pd(); } inline Vector(const value_type &val) { _data = _mm256_broadcast_pd((const __m128d *)&val); + KOKKOSKERNELS_GNU_COMPILER_FENCE } inline Vector(const mag_type &val) { const value_type a(val); _data = _mm256_broadcast_pd((__m128d const *)&a); + KOKKOSKERNELS_GNU_COMPILER_FENCE } inline Vector(const type &b) { _data = b._data; } inline Vector(const __m256d &val) { _data = val; } @@ -744,10 +746,12 @@ class Vector >, 4> { inline Vector(const value_type &val) { _data = _mm512_mask_broadcast_f64x4(_mm512_set1_pd(val.imag()), 0x55, _mm256_set1_pd(val.real())); + KOKKOSKERNELS_GNU_COMPILER_FENCE } inline Vector(const mag_type &val) { _data = _mm512_mask_broadcast_f64x4(_mm512_setzero_pd(), 0x55, _mm256_set1_pd(val)); + KOKKOSKERNELS_GNU_COMPILER_FENCE } inline Vector(const type &b) { _data = b._data; } inline Vector(const __m512d &val) { _data = val; } From 4f1bc181a8f072e0ba10040d7ea7194588f5f27e Mon Sep 17 00:00:00 2001 From: Carl William Pearson Date: Tue, 5 Jul 2022 14:50:49 -0600 Subject: [PATCH 069/226] Remove BlockCrsMatrix The suggested replacement is BsrMatrix, which is more compatible with TPLs. * perf_test/sparse: remove sparse_spmv_blockcrs perf test. Use BSR in block PCG perf test. * scripts/analysis: remove BlockCrsMatrix processing code * perf_test/batched: remove BlockCrs tests * src/CMakeLists: remove ETI for BlockCrsMatrix SpMV and SpMM * src/batched: remove BlockCrs Tests * src/impl/generated_specializations: remove BlockCrsMatrix SpMV and SpMM * src/impl/TPLs: remove BlockCrsMatrix SpMV * src/sparse: remove BlockCrsMatrix class. Remove BlockCrsMatrix references in utils. Dramatically simplify creating BSR from properly-formatted CRS. Remove BlockCrsMatrix SpMV interface --- .../KokkosBatched_Test_BlockCrs_Cuda.cpp | 133 -- .../KokkosBatched_Test_BlockCrs_Host.cpp | 120 -- perf_test/batched/scripts/test-bcrs.sh | 43 - perf_test/sparse/CMakeLists.txt | 4 - perf_test/sparse/KokkosSparse_block_pcg.cpp | 4 +- .../sparse/KokkosSparse_spmv_blockcrs.cpp | 526 ------ scripts/analysis/batched/pd.py | 225 +-- src/CMakeLists.txt | 14 - .../KokkosBatched_Test_BlockCrs_Util.hpp | 942 ----------- ...e_spmv_blockcrsmatrix_eti_spec_inst.cpp.in | 56 - ...pmv_mv_blockcrsmatrix_eti_spec_inst.cpp.in | 56 - ..._spmv_blockcrsmatrix_eti_spec_avail.hpp.in | 56 - ...e_spmv_blockcrsmatrix_eti_spec_decl.hpp.in | 56 - ...mv_mv_blockcrsmatrix_eti_spec_avail.hpp.in | 56 - ...pmv_mv_blockcrsmatrix_eti_spec_decl.hpp.in | 56 - ...rse_spmv_blockcrsmatrix_tpl_spec_avail.hpp | 70 - ...arse_spmv_blockcrsmatrix_tpl_spec_decl.hpp | 48 - src/sparse/KokkosSparse_BlockCrsMatrix.hpp | 1006 ----------- src/sparse/KokkosSparse_Utils.hpp | 210 ++- src/sparse/KokkosSparse_gauss_seidel.hpp | 27 +- src/sparse/KokkosSparse_spmv.hpp | 277 +--- .../impl/KokkosSparse_gauss_seidel_impl.hpp | 3 +- .../impl/KokkosSparse_gauss_seidel_spec.hpp | 28 +- .../KokkosSparse_spmv_blockcrsmatrix_impl.hpp | 1179 ------------- .../KokkosSparse_spmv_blockcrsmatrix_spec.hpp | 284 ---- test_common/KokkosBatched_Test_BlockCrs.hpp | 1467 ----------------- unit_test/sparse/Test_Sparse.hpp | 2 - .../sparse/Test_Sparse_BlockCrsMatrix.hpp | 384 ----- .../sparse/Test_Sparse_block_gauss_seidel.hpp | 68 +- .../sparse/Test_Sparse_spmv_blockcrs.hpp | 527 ------ 30 files changed, 175 insertions(+), 7752 deletions(-) delete mode 100644 perf_test/batched/KokkosBatched_Test_BlockCrs_Cuda.cpp delete mode 100644 perf_test/batched/KokkosBatched_Test_BlockCrs_Host.cpp delete mode 100755 perf_test/batched/scripts/test-bcrs.sh delete mode 100644 perf_test/sparse/KokkosSparse_spmv_blockcrs.cpp delete mode 100644 src/batched/dense/KokkosBatched_Test_BlockCrs_Util.hpp delete mode 100644 src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_blockcrsmatrix_eti_spec_inst.cpp.in delete mode 100644 src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_blockcrsmatrix_eti_spec_inst.cpp.in delete mode 100644 src/impl/generated_specializations_hpp/KokkosSparse_spmv_blockcrsmatrix_eti_spec_avail.hpp.in delete mode 100644 src/impl/generated_specializations_hpp/KokkosSparse_spmv_blockcrsmatrix_eti_spec_decl.hpp.in delete mode 100644 src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_blockcrsmatrix_eti_spec_avail.hpp.in delete mode 100644 src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_blockcrsmatrix_eti_spec_decl.hpp.in delete mode 100644 src/impl/tpls/KokkosSparse_spmv_blockcrsmatrix_tpl_spec_avail.hpp delete mode 100644 src/impl/tpls/KokkosSparse_spmv_blockcrsmatrix_tpl_spec_decl.hpp delete mode 100644 src/sparse/KokkosSparse_BlockCrsMatrix.hpp delete mode 100644 src/sparse/impl/KokkosSparse_spmv_blockcrsmatrix_impl.hpp delete mode 100644 src/sparse/impl/KokkosSparse_spmv_blockcrsmatrix_spec.hpp delete mode 100644 test_common/KokkosBatched_Test_BlockCrs.hpp delete mode 100644 unit_test/sparse/Test_Sparse_BlockCrsMatrix.hpp delete mode 100644 unit_test/sparse/Test_Sparse_spmv_blockcrs.hpp diff --git a/perf_test/batched/KokkosBatched_Test_BlockCrs_Cuda.cpp b/perf_test/batched/KokkosBatched_Test_BlockCrs_Cuda.cpp deleted file mode 100644 index 50f15cf719..0000000000 --- a/perf_test/batched/KokkosBatched_Test_BlockCrs_Cuda.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/* Implementation for testing KokkosKernels on BCRS operations - - block-tridiagonal factorization - - block-tridiagonal solve - - bcrs matvec - - StructuredBlock represents a 3D mesh having ni, nj, nk cells in each - dimension. Variable ordering is such that the k index is the fastest and the - i index is slowest. Smoothing lines are built in the k direction. - BlockCrsMatrix is a simple block CRS data structure. - BlockTridiagMatrices holds the block tridiagonal matrices. - - An example run is - ./driver -ni 32 -nj 32 -nk 128 -bs 5 -c - - This runs a sequence of unit tests, then runs a problem having a 32x32x128 - structured block with the lines oriented along the third dimension (line - length = 128). The block size is 5. -c adds a somewhat expensive check of the - answer. It's good to run with -c once in a while, but the cheap unit tests - that always run before the big problem already provide good coverage. -*/ - -#include "Kokkos_Core.hpp" -#include "Kokkos_Timer.hpp" - -#if defined(KOKKOS_ENABLE_CUDA) -#define __KOKKOSBATCHED_TEST_ENABLE_CUDA__ - -#include "KokkosBatched_Util.hpp" - -#define KOKKOSBATCHED_USE_UNBLOCKED_ALGO 1 -//#define KOKKOSBATCHED_USE_BLOCKED_ALGO 1 - -#if defined(KOKKOSBATCHED_USE_UNBLOCKED_ALGO) -typedef KokkosBatched::Algo::LU::Unblocked AlgoLU; -typedef KokkosBatched::Algo::Trsm::Unblocked AlgoTrsm; -typedef KokkosBatched::Algo::Gemm::Unblocked AlgoGemm; - -typedef KokkosBatched::Algo::Trsv::Unblocked AlgoTrsv; -typedef KokkosBatched::Algo::Gemv::Unblocked AlgoGemv; -#endif -#if defined(KOKKOSBATCHED_USE_BLOCKED_ALGO) -typedef KokkosBatched::Algo::LU::Blocked AlgoLU; -typedef KokkosBatched::Algo::Trsm::Blocked AlgoTrsm; -typedef KokkosBatched::Algo::Gemm::Blocked AlgoGemm; - -typedef KokkosBatched::Algo::Trsv::Blocked AlgoTrsv; -typedef KokkosBatched::Algo::Gemv::Blocked AlgoGemv; -#endif - -#include "KokkosBatched_Test_BlockCrs.hpp" - -using namespace KokkosBatched; - -int main(int argc, char* argv[]) { - Kokkos::initialize(argc, argv); - - typedef Kokkos::DefaultExecutionSpace DeviceSpaceType; - - const bool detail = false; - - Kokkos::print_configuration(std::cout, detail); - - enum : int { - VectorLength = - DefaultVectorLength::value, - RangeTagOper = 0, - TeamTagOper = 1 - }; - - // Unit tests - bool profile = false; - for (int i = 1; i < argc; ++i) { - const std::string& token = argv[i]; - if (strncmp(token.c_str(), "-profile", 8) == 0) profile = true; - } - - if (!profile) { - // std::cout << " Unit Test::Range :: Begin\n"; - // { - // Test::run( - // 3, 4, 2, 25, 2); - // Test::run(44, - // 63, 15, 4, 1); - // Test::run( - // 2, 2, 15, 3, 3); - // Test::run( - // 1, 1, 2, 63, 8); - - // for (int nrhs=1;nrhs<=33;++nrhs) - // Test::run(2, - // 2, 15, 3, nrhs); - // } - // std::cout << " Unit Test::Range :: End\n"; - - std::cout << " Unit Test::Team :: Begin\n"; - { - Test::run( - 3, 4, 2, 25, 2); - Test::run( - 44, 63, 15, 4, 1); - Test::run( - 2, 2, 15, 3, 3); - Test::run( - 1, 1, 2, 63, 8); - - for (int nrhs = 1; nrhs <= 33; ++nrhs) - Test::run(2, 2, 15, 3, nrhs); - } - std::cout << " Unit Test::Team :: End\n"; - } - - // Performance tests - std::cout << " Perf Test:: Begin\n"; - { - const Test::Input input(argc, argv); - Test::run(input); - } - std::cout << " Perf Test:: End\n"; - - Kokkos::finalize(); - - return 0; -} -#else - -int main(int argc, char *argv[]) { - std::cout << "Kokkos::Cuda is not enabled\n"; - return -1; -} - -#endif diff --git a/perf_test/batched/KokkosBatched_Test_BlockCrs_Host.cpp b/perf_test/batched/KokkosBatched_Test_BlockCrs_Host.cpp deleted file mode 100644 index 1319fa03db..0000000000 --- a/perf_test/batched/KokkosBatched_Test_BlockCrs_Host.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* Implementation for testing KokkosKernels on BCRS operations - - block-tridiagonal factorization - - block-tridiagonal solve - - bcrs matvec - - StructuredBlock represents a 3D mesh having ni, nj, nk cells in each - dimension. Variable ordering is such that the k index is the fastest and the - i index is slowest. Smoothing lines are built in the k direction. - BlockCrsMatrix is a simple block CRS data structure. - BlockTridiagMatrices holds the block tridiagonal matrices. - - An example run is - ./driver -ni 32 -nj 32 -nk 128 -bs 5 -c - - This runs a sequence of unit tests, then runs a problem having a 32x32x128 - structured block with the lines oriented along the third dimension (line - length = 128). The block size is 5. -c adds a somewhat expensive check of the - answer. It's good to run with -c once in a while, but the cheap unit tests - that always run before the big problem already provide good coverage. -*/ - -#include "Kokkos_Core.hpp" -#include "Kokkos_Timer.hpp" - -#include "KokkosBatched_Util.hpp" - -//#define KOKKOSBATCHED_USE_UNBLOCKED_ALGO 1 -#define KOKKOSBATCHED_USE_BLOCKED_ALGO 1 - -#if defined(KOKKOSBATCHED_USE_UNBLOCKED_ALGO) -typedef KokkosBatched::Algo::LU::Unblocked AlgoLU; -typedef KokkosBatched::Algo::Trsm::Unblocked AlgoTrsm; -typedef KokkosBatched::Algo::Gemm::Unblocked AlgoGemm; - -typedef KokkosBatched::Algo::Trsv::Unblocked AlgoTrsv; -typedef KokkosBatched::Algo::Gemv::Unblocked AlgoGemv; -#endif -#if defined(KOKKOSBATCHED_USE_BLOCKED_ALGO) -typedef KokkosBatched::Algo::LU::Blocked AlgoLU; -typedef KokkosBatched::Algo::Trsm::Blocked AlgoTrsm; -typedef KokkosBatched::Algo::Gemm::Blocked AlgoGemm; - -typedef KokkosBatched::Algo::Trsv::Blocked AlgoTrsv; -typedef KokkosBatched::Algo::Gemv::Blocked AlgoGemv; -#endif - -#include "KokkosBatched_Test_BlockCrs.hpp" - -using namespace KokkosBatched; - -int main(int argc, char* argv[]) { - Kokkos::initialize(argc, argv); - -#if !defined(__CUDA_ARCH__) && !defined(__HIP_DEVICE_COMPILE__) - typedef Kokkos::DefaultHostExecutionSpace HostSpaceType; - const bool detail = false; - - Kokkos::print_configuration(std::cout, detail); - - enum : int { - VectorLength = - DefaultVectorLength::value, - RangeTagOper = 0 - }; - - // vector type - typedef Vector, VectorLength> VectorType; - - // Unit tests - bool profile = false; - for (int i = 1; i < argc; ++i) { - const std::string& token = argv[i]; - if (strncmp(token.c_str(), "-profile", 8) == 0) profile = true; - } - - if (!profile) { - // including compact layer, it is not possible to test - // scalar and vector in the same code without templating - std::cout << " Unit Test::Range::Vector :: Begin\n"; - { - Test::run(3, 4, 2, - 25, 2); - Test::run( - 44, 63, 15, 4, 1); - Test::run(2, 2, 15, - 3, 3); - - for (int nrhs = 1; nrhs <= 33; ++nrhs) - Test::run( - 2, 2, 15, 3, nrhs); - } - - std::cout << " Unit Test::Range::Vector :: End\n"; - } - - // MKL -#if defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL_COMPACT_BATCHED__) - std::cout << " Perf Test::CompactMKL Begin\n"; - { - const bool test_mkl = true; - const Test::Input input(argc, argv); - Test::run(input, test_mkl); - } - std::cout << " Perf Test::CompactMKL End\n"; -#endif - - // Performance tests - std::cout << " Perf Test::Vector Begin\n"; - { - const Test::Input input(argc, argv); - Test::run(input); - } - std::cout << " Perf Test::Vector End\n"; - -#endif - Kokkos::finalize(); - - return 0; -} diff --git a/perf_test/batched/scripts/test-bcrs.sh b/perf_test/batched/scripts/test-bcrs.sh deleted file mode 100755 index 639fa8bb6c..0000000000 --- a/perf_test/batched/scripts/test-bcrs.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -# ./testboth.sh > output.txt -# grep ">>>\|>> \|Timer:" output.txt - -#numacmd="KMP_AFFINITY=balanced numactl --membind 1" - -# 128x128x128 domain is too large to use hbm only -numacmd="KMP_AFFINITY=balanced" -#sz="-ni 128 -nj 128 -nk 128" - -# 4 5 8 9 A < 10 GB -for bsz in 3 5; do - sz="-ni 128 -nj 128 -nk 128" - echo ">>> bsz $bsz" - for nth in 4 8 16 34 68 136 272; do - echo ">> nthread $nth" - echo "> kk" - cmd="$numacmd ./KokkosKernels_Test_BlockCrs --kokkos-threads=$nth $sz -bs $bsz" - echo $cmd - eval $cmd - echo "> sparc" - cmd="$numacmd ./bcrs --kokkos-threads=$nth $sz -bs $bsz" - echo $cmd - eval $cmd - done -done - -for bsz in 10 15; do - sz="-ni 64 -nj 64 -nk 128" - echo ">>> bsz $bsz" - for nth in 4 8 16 34 68 136 272; do - echo ">> nthread $nth" - echo "> kk" - cmd="$numacmd ./KokkosKernels_Test_BlockCrs --kokkos-threads=$nth $sz -bs $bsz" - echo $cmd - eval $cmd - echo "> sparc" - cmd="$numacmd ./bcrs --kokkos-threads=$nth $sz -bs $bsz" - echo $cmd - eval $cmd - done -done diff --git a/perf_test/sparse/CMakeLists.txt b/perf_test/sparse/CMakeLists.txt index fe2b7a094e..0a8538cef4 100644 --- a/perf_test/sparse/CMakeLists.txt +++ b/perf_test/sparse/CMakeLists.txt @@ -65,10 +65,6 @@ IF (KOKKOSKERNELS_ENABLE_TPL_CUSPARSE) ) ENDIF () -KOKKOSKERNELS_ADD_EXECUTABLE( - sparse_spmv_blockcrs - SOURCES KokkosSparse_spmv_blockcrs.cpp -) KOKKOSKERNELS_ADD_EXECUTABLE( sparse_spmv_bsr diff --git a/perf_test/sparse/KokkosSparse_block_pcg.cpp b/perf_test/sparse/KokkosSparse_block_pcg.cpp index 3628eac956..34da8f45be 100644 --- a/perf_test/sparse/KokkosSparse_block_pcg.cpp +++ b/perf_test/sparse/KokkosSparse_block_pcg.cpp @@ -322,7 +322,7 @@ void run_experiment( // typedef typename lno_nnz_view_t::value_type lno_t; // typedef typename lno_view_t::value_type size_type; // typedef typename scalar_view_t::value_type scalar_t; - KokkosSparse::Impl::kk_create_blockcrs_formatted_point_crsmatrix( + KokkosSparse::Impl::kk_create_bsr_formated_point_crsmatrix( block_size, crsmat.numRows(), crsmat.numCols(), crsmat.graph.row_map, crsmat.graph.entries, crsmat.values, out_r, out_c, pf_rm, pf_e, pf_v); @@ -349,7 +349,7 @@ void run_experiment( scalar_view_t bf_v; size_t but_r, but_c; - KokkosSparse::Impl::kk_create_blockcrs_from_blockcrs_formatted_point_crs( + KokkosSparse::Impl::kk_create_bsr_from_bsr_formatted_point_crs( block_size, out_r, out_c, pf_rm, pf_e, pf_v, but_r, but_c, bf_rm, bf_e, bf_v); diff --git a/perf_test/sparse/KokkosSparse_spmv_blockcrs.cpp b/perf_test/sparse/KokkosSparse_spmv_blockcrs.cpp deleted file mode 100644 index 1eb7f0b8da..0000000000 --- a/perf_test/sparse/KokkosSparse_spmv_blockcrs.cpp +++ /dev/null @@ -1,526 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Luc Berger-Vergiat (lberge@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include "KokkosKernels_default_types.hpp" -#include - -namespace details { - -enum class Implementation : int { KokkosKernels = 0, Cuda = 1, MKL = 2 }; - -/// -/// Define default types -/// -typedef double Scalar; -typedef int Ordinal; -/// -////////////////////////// - -/// Random generator -template -inline scalar_t random() { - auto const max = static_cast(RAND_MAX) + static_cast(1); - return static_cast(std::rand()) / max; -} - -template -inline void set_random_value(scalar_t &v) { - v = random(); -} - -template -inline void set_random_value(Kokkos::complex &v) { - Scalar vre = random(); - Scalar vim = random(); - v = Kokkos::complex(vre, vim); -} - -template -inline void set_random_value(std::complex &v) { - scalar_t vre = random(); - scalar_t vim = random(); - v = std::complex(vre, vim); -} - -template -void make_block_entries( - const KokkosSparse::CrsMatrix &mat_b1, - int blockSize, std::vector &mat_rowmap, - std::vector &mat_colidx, std::vector &mat_val) { - Ordinal nRow = blockSize * mat_b1.numRows(); - size_t nnz = static_cast(blockSize) * static_cast(blockSize) * - mat_b1.nnz(); - - mat_val.resize(nnz); - for (size_t ii = 0; ii < nnz; ++ii) set_random_value(mat_val[ii]); - - // - // Create graph for CrsMatrix - // - - mat_rowmap.assign(nRow + 1, 0); - mat_colidx.assign(nnz, 0); - - for (Ordinal ir = 0; ir < mat_b1.numRows(); ++ir) { - const auto jbeg = mat_b1.graph.row_map(ir); - const auto jend = mat_b1.graph.row_map(ir + 1); - for (Ordinal ib = 0; ib < blockSize; ++ib) { - const Ordinal my_row = ir * blockSize + ib; - mat_rowmap[my_row + 1] = mat_rowmap[my_row] + (jend - jbeg) * blockSize; - for (auto ijk = jbeg; ijk < jend; ++ijk) { - const auto col0 = mat_b1.graph.entries(ijk); - for (Ordinal jb = 0; jb < blockSize; ++jb) { - mat_colidx[mat_rowmap[my_row] + (ijk - jbeg) * blockSize + jb] = - col0 * blockSize + jb; - } - } - } - } // for (Ordinal ir = 0; ir < mat_b1.numRows(); ++ir) -} - -template -int test_blockcrs_matrix_single_vec( - const char fOp[], - KokkosSparse::CrsMatrix - mat_b1, - int test, int loop, const scalar_t alpha, const scalar_t beta, - const int bMax) { - typedef typename KokkosSparse::CrsMatrix< - scalar_t, Ordinal, Kokkos::DefaultExecutionSpace, void, size_t> - crsMat_type; - - typedef typename crsMat_type::values_type::non_const_type scalar_view_t; - typedef scalar_view_t x_vector_type; - typedef scalar_view_t y_vector_type; - - srand(17312837); - - int num_errors = 0; - const auto bMax_o = static_cast(bMax); - for (Ordinal blockSize = 1; blockSize <= bMax_o; ++blockSize) { - Ordinal nRow = blockSize * mat_b1.numRows(); - Ordinal nCol = nRow; - std::vector mat_rowmap; - std::vector mat_colidx; - std::vector mat_val; - - // Create the entries - make_block_entries(mat_b1, blockSize, mat_rowmap, mat_colidx, - mat_val); - - // Create the CrsMatrix for the reference computation - crsMat_type Acrs("new_crs_matr", nRow, nCol, mat_val.size(), &mat_val[0], - &mat_rowmap[0], &mat_colidx[0]); - - x_vector_type xref("new_right_hand_side", nRow); - auto h_xref = Kokkos::create_mirror_view(xref); - for (Ordinal ir = 0; ir < nRow; ++ir) { - set_random_value(h_xref(ir)); - } - Kokkos::deep_copy(xref, h_xref); - - y_vector_type y0("y_init", nRow); - auto h_y0 = Kokkos::create_mirror_view(y0); - for (Ordinal ir = 0; ir < nRow; ++ir) set_random_value(h_y0(ir)); - Kokkos::deep_copy(y0, h_y0); - - y_vector_type ycrs("crs_product_result", nRow); - auto h_ycrs = Kokkos::create_mirror_view(ycrs); - - // Time a series of multiplications with the CrsMatrix - double time_crs = 0.0; - for (int jr = 0; jr < loop; ++jr) { - for (Ordinal ir = 0; ir < nRow; ++ir) h_ycrs(ir) = h_y0(ir); - Kokkos::deep_copy(ycrs, h_ycrs); - Kokkos::Timer timer; - KokkosSparse::spmv(fOp, alpha, Acrs, xref, beta, ycrs); - time_crs += timer.seconds(); - } - - // Create the output vector - y_vector_type yblockcrs("product_result", nRow); - auto h_yblockcrs = Kokkos::create_mirror_view(yblockcrs); - - double time_blockcrs = 0.0; - // Create the BlockCrsMatrix - KokkosSparse::Experimental::BlockCrsMatrix< - scalar_t, Ordinal, Kokkos::DefaultExecutionSpace, void, size_t> - Ablockcrs(Acrs, blockSize); - - switch (static_cast(test)) { - default: - case Implementation::KokkosKernels: { - // Time a series of multiplications with the BlockCrsMatrix - for (int jr = 0; jr < loop; ++jr) { - for (Ordinal ir = 0; ir < nRow; ++ir) h_yblockcrs(ir) = h_y0(ir); - Kokkos::deep_copy(yblockcrs, h_yblockcrs); - Kokkos::Timer timer; - KokkosSparse::spmv(fOp, alpha, Ablockcrs, xref, beta, yblockcrs); - time_blockcrs += timer.seconds(); - } - } break; - } - - // Check that the numerical result is matching - Kokkos::deep_copy(h_ycrs, ycrs); - Kokkos::deep_copy(h_yblockcrs, yblockcrs); - double error = 0.0, maxNorm = 0.0; - for (size_t ir = 0; ir < h_ycrs.extent(0); ++ir) { - maxNorm = std::max(maxNorm, Kokkos::ArithTraits::abs(h_ycrs(ir))); - error = std::max(error, Kokkos::ArithTraits::abs( - h_ycrs(ir) - h_yblockcrs(ir))); - } - - double tol = - (mat_val.size() / nRow) * std::numeric_limits::epsilon(); - if (error > tol * maxNorm) { - num_errors += 1; - std::cout << static_cast(test) << " "; - std::cout << fOp << ", " << blockSize << " : " - << " error " << error << " maxNorm " << maxNorm << " tol " - << tol << " tol * maxNorm " << tol * maxNorm << "\n"; - } - - //-- Print the number of Gflops for both products - if (blockSize == 1) { - printf("Op, blockSize: AvgGFlop(CrsMatrix) AvgGFlop(BlockCrsMatrix) \n"); - } - double num_flops = mat_val.size() * 2 * loop; - double crs_flop = (num_flops / time_crs) * 1.0e-09; - double blockcrs_flop = (num_flops / time_blockcrs) * 1.0e-09; - std::cout << fOp << ", " << blockSize << " : "; - if (crs_flop < blockcrs_flop) { - std::cout << crs_flop << " <" << blockcrs_flop << ">"; - } else { - std::cout << "<" << crs_flop << "> " << blockcrs_flop; - } - std::cout << std::endl; - - } // for (Ordinal blockSize = 1; blockSize < bMax; ++blockSize) - - return int(num_errors); -} - -template -int test_blockcrs_matrix_vec( - const char fOp[], - KokkosSparse::CrsMatrix - mat_b1, - int nvec, int test, int loop, const scalar_t alpha, const scalar_t beta, - const int bMax) { - typedef typename KokkosSparse::CrsMatrix< - scalar_t, Ordinal, Kokkos::DefaultExecutionSpace, void, size_t> - crsMat_type; - - typedef Kokkos::View - block_vector_t; - - srand(17312837); - - int num_errors = 0; - const auto bMax_o = static_cast(bMax); - for (Ordinal blockSize = 1; blockSize <= bMax_o; ++blockSize) { - Ordinal nRow = blockSize * mat_b1.numRows(); - Ordinal nCol = nRow; - std::vector mat_rowmap; - std::vector mat_colidx; - std::vector mat_val; - - make_block_entries(mat_b1, blockSize, mat_rowmap, mat_colidx, - mat_val); - - // Create the CrsMatrix for the reference computation - crsMat_type Acrs("new_crs_matr", nRow, nCol, mat_val.size(), &mat_val[0], - &mat_rowmap[0], &mat_colidx[0]); - - block_vector_t xref("new_right_hand_side", nRow, nvec); - auto h_xref = Kokkos::create_mirror_view(xref); - for (Ordinal jc = 0; jc < nvec; ++jc) { - for (Ordinal ir = 0; ir < nRow; ++ir) { - set_random_value(h_xref(ir, jc)); - } - } - Kokkos::deep_copy(xref, h_xref); - - block_vector_t y0("y_init", nRow, nvec); - auto h_y0 = Kokkos::create_mirror_view(y0); - for (Ordinal jc = 0; jc < nvec; ++jc) - for (Ordinal ir = 0; ir < nRow; ++ir) set_random_value(h_y0(ir, jc)); - Kokkos::deep_copy(y0, h_y0); - - block_vector_t ycrs("crs_product_result", nRow, nvec); - auto h_ycrs = Kokkos::create_mirror_view(ycrs); - - // Time a series of multiplications with the CrsMatrix format - double time_crs = 0.0; - for (int jr = 0; jr < loop; ++jr) { - for (Ordinal jc = 0; jc < nvec; ++jc) - for (Ordinal ir = 0; ir < nRow; ++ir) h_ycrs(ir, jc) = h_y0(ir, jc); - Kokkos::deep_copy(ycrs, h_ycrs); - Kokkos::Timer timer; - KokkosSparse::spmv(fOp, alpha, Acrs, xref, beta, ycrs); - time_crs += timer.seconds(); - } - - // Create the BlockCrsMatrix variable - KokkosSparse::Experimental::BlockCrsMatrix< - scalar_t, Ordinal, Kokkos::DefaultExecutionSpace, void, size_t> - Ablockcrs(Acrs, blockSize); - - block_vector_t yblockcrs("blockcrs_product_result", nRow, nvec); - auto h_yblockcrs = Kokkos::create_mirror_view(yblockcrs); - - // Time a series of multiplications with the BlockCrsMatrix - double time_blockcrs = 0.0; - switch (static_cast(test)) { - default: - case Implementation::KokkosKernels: { - // Time a series of multiplications with the BlockCrsMatrix - for (int jr = 0; jr < loop; ++jr) { - for (Ordinal jc = 0; jc < nvec; ++jc) { - for (Ordinal ir = 0; ir < nRow; ++ir) - h_yblockcrs(ir, jc) = h_y0(ir, jc); - } - Kokkos::deep_copy(yblockcrs, h_yblockcrs); - Kokkos::Timer timer; - KokkosSparse::spmv(fOp, alpha, Ablockcrs, xref, beta, yblockcrs); - time_blockcrs += timer.seconds(); - } - } break; - } - - // Check that the result is matching - Kokkos::deep_copy(h_ycrs, ycrs); - Kokkos::deep_copy(h_yblockcrs, yblockcrs); - double tol = - (mat_val.size() / nRow) * std::numeric_limits::epsilon(); - for (int jc = 0; jc < nvec; ++jc) { - double error = 0.0, maxNorm = 0.0; - for (size_t ir = 0; ir < h_ycrs.extent(0); ++ir) { - maxNorm = - std::max(maxNorm, Kokkos::ArithTraits::abs(h_ycrs(ir, jc))); - error = std::max(error, Kokkos::ArithTraits::abs( - h_ycrs(ir, jc) - h_yblockcrs(ir, jc))); - } - if (error > tol * maxNorm) { - num_errors += 1; - std::cout << fOp << ", " << blockSize << " : rhs " << jc << " error " - << error << " maxNorm " << maxNorm << " tol " << tol - << " tol * maxNorm " << tol * maxNorm << "\n"; - } - } - - // Print the number of Gflops - if (blockSize == 1) { - printf("Op, blockSize: AvgGFlop(CrsMatrix) AvgGFlop(BlockCrsMatrix) \n"); - } - double num_flops = mat_val.size() * 2 * loop * nvec; - double crs_flop = (num_flops / time_crs) * 1.0e-09; - double blockcrs_flop = (num_flops / time_blockcrs) * 1.0e-09; - std::cout << fOp << ", " << blockSize << " "; - if (crs_flop < blockcrs_flop) { - // std::cout << crs_flop << " <" << blockcrs_flop << ">"; - std::cout << crs_flop << " " << blockcrs_flop << " "; - } else { - // std::cout << "<" << crs_flop << "> " << blockcrs_flop; - std::cout << " " << crs_flop << " " << blockcrs_flop; - } - std::cout << std::endl; - } - - return int(num_errors); -} - -void print_help() { - printf("BlockCrsMatrix SPMV benchmark code \n"); - printf("Options:\n"); - printf( - " -bs : Maximum blocksize for the sparse matrix (default " - "= " - "16). \n"); - printf(" -h : Help. \n"); - printf( - " -l [LOOP] : How many spmv to run to aggregate average time " - "(default = 512). \n"); - printf( - " -nx : Number of points in the x-direction (default = " - "32).\n"); - printf( - " The matrix will be of dimension nx (nx - 1) (nx + " - "1).\n"); - printf( - " -nv : Number of vectors to multiply with (default = 1). " - "\n"); - printf(" --op : Use different operation \n"); - printf(" Options: \n"); - printf(" N = normal (default) y <- alpha A x + beta y\n"); - printf( - " C = conjugate y <- alpha conj(A) x + beta " - "y\n"); - printf( - " T = transpose y <- alpha A^T x + beta " - "y\n"); - printf( - " H = hermitian y <- alpha A^H x + beta " - "y\n"); -} -} // namespace details - -int main(int argc, char **argv) { - int loop = 512; - int bMax = 16; - int nvec = 1; - int nx = 32; - - char fOp[] = "N"; - - int test = static_cast(details::Implementation::KokkosKernels); - - for (int i = 0; i < argc; i++) { - if ((strcmp(argv[i], "-bs") == 0)) { - int tmp = atoi(argv[++i]); - bMax = (tmp > 0) ? tmp : bMax; - continue; - } - - if ((strcmp(argv[i], "--tpl") == 0)) { - i++; - if ((strcmp(argv[i], "cuda") == 0)) - test = static_cast(details::Implementation::Cuda); - if ((strcmp(argv[i], "mkl") == 0)) - test = static_cast(details::Implementation::MKL); - continue; - } - - if ((strcmp(argv[i], "--help") == 0) || (strcmp(argv[i], "-h") == 0)) { - details::print_help(); - return 0; - } - - if ((strcmp(argv[i], "-l") == 0)) { - int tmp = atoi(argv[++i]); - loop = (tmp > 0) ? tmp : loop; - continue; - } - - if ((strcmp(argv[i], "-nx") == 0)) { - int tmp = atoi(argv[++i]); - nx = (tmp > 0) ? tmp : nx; - continue; - } - - if ((strcmp(argv[i], "-nv") == 0)) { - int tmp = atoi(argv[++i]); - nvec = (tmp > 0) ? tmp : nvec; - continue; - } - - if ((strcmp(argv[i], "--op") == 0)) { - i++; - if ((strcmp(argv[i], "N") == 0)) strcpy(fOp, "N"); - if ((strcmp(argv[i], "C") == 0)) strcpy(fOp, "C"); - if ((strcmp(argv[i], "T") == 0)) strcpy(fOp, "T"); - if ((strcmp(argv[i], "H") == 0)) strcpy(fOp, "H"); - continue; - } - } - - Kokkos::initialize(argc, argv); - { - // The mat_structure view is used to generate a matrix using - // finite difference (FD) or finite element (FE) discretization - // on a cartesian grid. - Kokkos::View mat_structure( - "Matrix Structure", 3); - mat_structure(0, 0) = nx; // Request 8 grid point in 'x' direction - mat_structure(0, 1) = 0; // Add BC to the left - mat_structure(0, 2) = 0; // Add BC to the right - mat_structure(1, 0) = nx - 1; // Request 7 grid point in 'y' direction - mat_structure(1, 1) = 0; // Add BC to the bottom - mat_structure(1, 2) = 0; // Add BC to the top - mat_structure(2, 0) = nx + 1; // Request 9 grid point in 'z' direction - mat_structure(2, 1) = 0; // Add BC to the bottom - mat_structure(2, 2) = 0; // Add BC to the top - - typedef typename KokkosSparse::CrsMatrix - h_crsMat_type; - - h_crsMat_type mat_b1 = - Test::generate_structured_matrix3D("FD", mat_structure); - - int total_errors = 0; - - if (nvec == 1) - total_errors = details::test_blockcrs_matrix_single_vec( - fOp, mat_b1, test, loop, details::Scalar(3.1), details::Scalar(-2.4), - bMax); - else - total_errors = details::test_blockcrs_matrix_vec( - fOp, mat_b1, nvec, test, loop, details::Scalar(3.1), - details::Scalar(-2.4), bMax); - - if (total_errors != 0) { - printf("Kokkos::BlockCrsMatrix SpMV Test: Failed\n"); - } - } - Kokkos::finalize(); -} diff --git a/scripts/analysis/batched/pd.py b/scripts/analysis/batched/pd.py index 5b7ac37768..2379b223a6 100644 --- a/scripts/analysis/batched/pd.py +++ b/scripts/analysis/batched/pd.py @@ -23,9 +23,6 @@ Right now, this is probably the best format: ./pd.py -t --kkt-parse --kkt-plot-vs-nthreads-linlog -s foo -f KokkosKernels_Test_Gemm.txt --per-thread - Parse KokkosKernels_Test_BlockCrs_* example line: - ./pd.py --bcrs-parse --bcrs-plot-vs-nthreads-linlog --gflops -f KokkosKernels_Test_BlockCrs_SPARC.txt -s foo - Plots for workset size: ./pd.py --kkt-parse --kkt-plot-workset -f KokkosKernels_Test_Gemm.workset.txt -s foo To show speedup w.r.t. OpenMP MKL, add --speedup: @@ -391,209 +388,6 @@ def kkt_plot_workset(d, fn_prefix, speedup=False, wide=False): dispfig(fn_prefix) -#> Line solver analysis. - -def bcrs_is_line_blksz(ln): return strleq(ln, '>>> bsz') -def bcrs_get_blksz(ln): return sscanf(ln, 's,s,i')[2] - -def bcrs_is_line_nthread(ln): return strleq(ln, '>> nthread') -def bcrs_get_nthread(ln): return sscanf(ln, 's,s,i')[2] - -def bcrs_is_I_line(ln): return strleq(ln, '') -def bcrs_get_I_line(ln): - o = sscanf(ln, 's,s,i,s,i,s,i,s,i,s,i,s,i') - return (o[2], o[4], o[6], o[8], o[10]) - -def bcrs_is_kk_trumpet(ln): return ln == '> kk' -def bcrs_is_bcrs_trumpet(ln): return ln == '> sparc' - -def bcrs_is_kk_perf_test(ln): return strleq(ln, ' Perf Test') -def bcrs_get_kk_alg(ln): return get_first_word(ln[12:]) - -def bcrs_parse(text): - "Parse output from bcrs performance test drivers." - def insert_time(lineno, time): - scale = 1 - if lineno == 0: subalg = 'matvec'; scale = 0.02; - elif lineno == 1: subalg = 'extract' - elif lineno == 2: subalg = 'Factor' - elif lineno == 3: subalg = 'Solve'; scale = 0.02; - d[nthread][alg][sz][subalg] = time*scale - lns = text.split('\n') - d = {} - state = -1 - for ln in lns: - if bcrs_is_line_blksz(ln): - bs = bcrs_get_blksz(ln) - elif bcrs_is_line_nthread(ln): - nthread = bcrs_get_nthread(ln) - if not d.has_key(nthread): d[nthread] = {} - elif bcrs_is_kk_trumpet(ln): - state = 0 - elif bcrs_is_bcrs_trumpet(ln): - state = 1 - lineno = 0 - alg = 'Native' - if not d[nthread].has_key(alg): d[nthread][alg] = {} - elif bcrs_is_I_line(ln): - sz = bcrs_get_I_line(ln) - if not d[nthread][alg].has_key(sz): d[nthread][alg][sz] = {} - elif state == 0: - # kk output - if bcrs_is_kk_perf_test(ln): - alg = bcrs_get_kk_alg(ln) - lineno = 0 - if not d[nthread].has_key(alg): d[nthread][alg] = {} - if get_first_word(ln) != 'KokkosKernels::Timer::': continue - time = float(ln.split()[-2]) - # skip first three - if lineno - 3 >= 0: - insert_time(lineno - 3, time) - lineno += 1 - elif state == 1: - # bcrs output - if get_first_word(ln) != '+': continue - time = float(get_last_word(ln)) - insert_time(lineno, time); - lineno += 1 - return d - -def bcrs_get_nthreads(d): - a = d.keys() - a.sort() - return a - -def bcrs_get_algorithms(d): - 'Return list of algorithm names.' - a = d.values()[0].keys() - a.sort() - return a - -def bcrs_get_problems(d): - 'Return list of problem names.' - a = d.values()[0].values()[0].values()[0].keys() - a.sort(cmp) - a.remove('matvec') # we're not studying this problem right now - a.remove('extract') # nor this one - return a - -def bcrs_get_sizes(d): - 'Return list of problem sizes.' - a = d.values()[0].values()[0].keys() - def cmp(x, y): - i = 3 - if x[i] < y[i]: return -1 - if x[i] > y[i]: return 1 - return 0 - a.sort(cmp=cmp) - return a - -def bcrs_plot_vs_nthreads(d, fn_prefix, xlinear=False, ylinear=False, perthread=False, gflops=False, wide=False): - nthreads = bcrs_get_nthreads(d) - algs = bcrs_get_algorithms(d) - probs = bcrs_get_problems(d) - szs = bcrs_get_sizes(d) - - corecnt = max(nthreads) == 68 - fs = 12 if wide else 15 - ival = 1 - patmap = patternmap() - scale = 1.0 - x = [1, 2, 4, 8, 16, 34, 68, 136, 272] - if xlinear: - x.remove(2) - xfn = lambda x: x - else: - xfn = np.log2 - pl.figure(num=1, figsize=(16,7) if wide else (16,16)) - probs.reverse() - for ibs, bs in enumerate(szs): - for ipfwd, prob in enumerate(probs): - ip = len(probs) - ipfwd - 1 - if wide: - pl.subplot(len(probs), len(szs), len(szs)*ip + ibs + 1) - else: - pl.subplot(len(szs), len(probs), len(probs)*ibs + ip + 1) - ymin = 10 - ymax = 0 - for ialg, alg in enumerate(algs): - if prob == 'Solve' and strleq(alg, 'MKL'): - continue - y = [] - pat = patmap[rename(alg)] if patmap.has_key(rename(alg)) else '' - for i, nthr in enumerate(nthreads): - f = scale - if perthread: - f /= nthr - try: - y.append(f / d[nthr][alg][bs][prob]) - except: - pass - if len(y) == 0: - continue - - ymin = min(min(y), ymin) - ymax = max(max(y), ymax) - - if ylinear: - pl.plot(xfn(nthreads), y, pat, linewidth=2.0, label=rename(alg), **plot_styles()) - else: - pl.semilogy(xfn(nthreads), y, pat, linewidth=2.0, label=rename(alg), **plot_styles()) - pl.xticks(xfn(x), [str(i) for i in x], fontsize=fs) - pl.yticks(fontsize=fs) - ymin *= 0.96 - if ylinear: ymin = 0 - ymax *= 1.04 - xmin = 4; - xmax = nthreads[-1] - if xlinear: - xmin -= 1 - xmax += 1 - else: - xmin = np.log2(xmin) - 0.1 - xmax = np.log2(xmax) + 0.1 - pl.axis([xmin, xmax, ymin, ymax]) - pl.grid(True) - - perthread_str = '' - if perthread: perthread_str = ' / Core' if corecnt else ' / Thread' - if wide: - if ibs == 0: pl.ylabel('{0}\nOperations/s{1}'.format(prob, perthread_str), fontsize=fs) - if ip == 0: - pl.title(r'Block Size {3} (${0}\times\ {1}\times\ {2}$)'.format(bs[0], bs[1], bs[2], bs[3]), - fontsize=fs) - if ip == len(probs) - 1: - pl.xlabel('# Cores' if corecnt else '# Threads', fontsize=fs) - else: - if ip == 0: - pl.ylabel('Operations/s{0}\n{1}'.format(perthread_str, bs), fontsize=fs) - if ibs == 0: - pl.title('{0}'.format(prob)) - if ibs == len(szs) - 1: - pl.xlabel('# Cores' if corecnt else '# Threads', fontsize=fs) - if ibs == 0 and ip == 0: - pl.legend(loc='lower left', fontsize=fs-1, bbox_to_anchor=(-0.03,-0.5)) - - if gflops: - yl = pl.ylim() - yt = pl.yticks()[0] - ax = pl.gca().twinx() - N = bs[0]*bs[1] - n = bs[2] - if prob == 'Factor': - nflop = N*flop_tridiag_factor(n, bs[3]) - elif prob == 'Solve': - nflop = N*flop_tridiag_solve(n, bs[3], 1) - gfs = [nflop*nop*1e-9 for nop in yt] - gf = [('{0:1.1f}' if gf < 100 else '{0:1.0f}').format(gf) for gf in gfs] - pl.yticks(yt, gf, fontsize=fs) - ax.set_ylim(yl) - if (not wide and ip == len(probs)-1) or (wide and ibs == len(szs)-1): - ax.set_ylabel('GFLOPS{0}'.format(perthread_str), rotation=270, fontsize=fs, - verticalalignment='bottom') - - dispfig(fn_prefix) - #> Driver. def run_tests(): @@ -624,11 +418,6 @@ def get_optparser(): p.add_option('--kkt-plot-vs-nthreads-linlog', dest='kkt_plot_vs_nthreads_linlog', action='store_true', default=False) p.add_option('--kkt-plot-workset', dest='kkt_plot_workset', action='store_true', default=False) - p.add_option('--bcrs-parse', dest='bcrs_parse', action='store_true', default=False, help='Parse KokkosKernels_Test_BlockCrs_* files.') - p.add_option('--bcrs-plot-vs-nthreads-loglog', dest='bcrs_plot_vs_nthreads_loglog', action='store_true', default=False) - p.add_option('--bcrs-plot-vs-nthreads-linlin', dest='bcrs_plot_vs_nthreads_linlin', action='store_true', default=False) - p.add_option('--bcrs-plot-vs-nthreads-linlog', dest='bcrs_plot_vs_nthreads_linlog', action='store_true', default=False) - p.add_option('--per-thread', dest='perthread', action='store_true', default=False) p.add_option('--gflops', dest='gflops', action='store_true', default=False) p.add_option('--speedup', dest='speedup', action='store_true', default=False) @@ -642,7 +431,7 @@ def get_optparser(): (opts, args) = p.parse_args() if opts.test: run_tests() - if opts.kkt_parse or opts.bcrs_parse: + if opts.kkt_parse: text = readall(opts.filename) if len(text) == 0: print "Empty file '" + opts.filename + "'; exiting." @@ -661,15 +450,3 @@ def get_optparser(): perthread=opts.perthread, wide=opts.wide) elif opts.kkt_plot_workset: kkt_plot_workset(d, opts.save_prefix, speedup=opts.speedup, wide=opts.wide) - - if opts.bcrs_parse: - d = bcrs_parse(text) - if opts.bcrs_plot_vs_nthreads_loglog: - bcrs_plot_vs_nthreads(d, opts.save_prefix, xlinear=False, ylinear=False, - perthread=opts.perthread, gflops=opts.gflops, wide=opts.wide) - elif opts.bcrs_plot_vs_nthreads_linlin: - bcrs_plot_vs_nthreads(d, opts.save_prefix, xlinear=True, ylinear=True, - perthread=opts.perthread, gflops=opts.gflops, wide=opts.wide) - elif opts.bcrs_plot_vs_nthreads_linlog: - bcrs_plot_vs_nthreads(d, opts.save_prefix, xlinear=False, ylinear=True, - perthread=opts.perthread, gflops=opts.gflops, wide=opts.wide) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a1c938aed5..6a31cd4954 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -304,20 +304,6 @@ KOKKOSKERNELS_GENERATE_ETI(Sparse_spmv_mv_struct spmv TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) -KOKKOSKERNELS_GENERATE_ETI(Sparse_spmv_blockcrsmatrix spmv - COMPONENTS sparse - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Sparse_spmv_mv_blockcrsmatrix spmv - COMPONENTS sparse - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES -) - KOKKOSKERNELS_GENERATE_ETI(Sparse_spmv_bsrmatrix spmv COMPONENTS sparse HEADER_LIST ETI_HEADERS diff --git a/src/batched/dense/KokkosBatched_Test_BlockCrs_Util.hpp b/src/batched/dense/KokkosBatched_Test_BlockCrs_Util.hpp deleted file mode 100644 index 77fa690908..0000000000 --- a/src/batched/dense/KokkosBatched_Test_BlockCrs_Util.hpp +++ /dev/null @@ -1,942 +0,0 @@ -#include -#include -#include - -#include - -#include "Kokkos_Core.hpp" - -#include "KokkosBatched_Util.hpp" - -#define TEST_ASSERT(m, success) \ - if (!(m)) { \ - success = false; \ - printf("FAILED: %s, at %d, %s\n", #m, __LINE__, __FILE__); \ - } - -namespace KokkosBatched { - -namespace Test { - -typedef int ordinal_type; -typedef int size_type; -typedef double scalar_type; -#define BLOCKCRS_MAX_BLOCKSIZE 32 -#define FLOP_MUL 1.0 -#define FLOP_ADD 1.0 - -double LU_FlopCount(int mm, int nn) { - double m = (double)mm; - double n = (double)nn; - if (m > n) - return (FLOP_MUL * (0.5 * m * n * n - (1.0 / 6.0) * n * n * n + - 0.5 * m * n - 0.5 * n * n + (2.0 / 3.0) * n) + - FLOP_ADD * (0.5 * m * n * n - (1.0 / 6.0) * n * n * n - - 0.5 * m * n + (1.0 / 6.0) * n)); - else - return (FLOP_MUL * (0.5 * n * m * m - (1.0 / 6.0) * m * m * m + - 0.5 * n * m - 0.5 * m * m + (2.0 / 3.0) * m) + - FLOP_ADD * (0.5 * n * m * m - (1.0 / 6.0) * m * m * m - - 0.5 * n * m + (1.0 / 6.0) * m)); -} - -double Trsm_Lower_FlopCountLower(int mm, int nn) { - double m = (double)mm; - double n = (double)nn; - return (FLOP_MUL * (0.5 * m * n * (n + 1.0)) + - FLOP_ADD * (0.5 * m * n * (n - 1.0))); -} - -double Trsm_Upper_FlopCountUpper(int mm, int nn) { - double m = (double)mm; - double n = (double)nn; - return (FLOP_MUL * (0.5 * m * n * (n + 1.0)) + - FLOP_ADD * (0.5 * m * n * (n - 1.0))); -} - -double Gemm_FlopCount(int mm, int nn, int kk) { - double m = (double)mm; - double n = (double)nn; - double k = (double)kk; - return (FLOP_MUL * (m * n * k) + FLOP_ADD * (m * n * k)); -} - -template -double compute_relative_diff(const aViewType a, const bViewType b) { - // Bring the vectors to the host. This is just a correctness checker. - auto aa = Kokkos::create_mirror_view(a); - Kokkos::deep_copy(aa, a); - auto bb = Kokkos::create_mirror_view(b); - Kokkos::deep_copy(bb, b); - - double diff2 = 0, norm2 = 0; - for (ordinal_type i = 0, iend = aa.extent(0); i < iend; ++i) - for (ordinal_type j = 0, jend = aa.extent(1); j < jend; ++j) - for (ordinal_type k = 0, kend = aa.extent(2); k < kend; ++k) - for (ordinal_type l = 0, lend = aa.extent(3); l < lend; ++l) { - const double val = aa.access(i, j, k, l), - diff = aa.access(i, j, k, l) - bb.access(i, j, k, l); - diff2 += diff * diff; - norm2 += val * val; - } - - return std::sqrt(diff2 / norm2); -} - -// Representation of a structured block mesh. The fastest index is k. -struct StencilShape { - enum Enum { cross }; -}; - -struct StructuredBlock { - const ordinal_type ni, nj, nk; - - StructuredBlock(const ordinal_type ni_, const ordinal_type nj_, - const ordinal_type nk_) - : ni(ni_), nj(nj_), nk(nk_), _njnk(nj_ * nk_) {} - - KOKKOS_INLINE_FUNCTION - size_type size() const { return ni * nj * nk; } - - KOKKOS_INLINE_FUNCTION - size_type ij2id(const ordinal_type i, const ordinal_type j) const { - return i * nj + j; - } - - KOKKOS_INLINE_FUNCTION - void id2ij(const size_type id, ordinal_type &i, ordinal_type &j) const { - i = id / nj; - j = id % nj; - } - - KOKKOS_INLINE_FUNCTION - size_type ijk2id(const ordinal_type i, const ordinal_type j, - const ordinal_type k) const { - return (i * nj + j) * nk + k; - } - - KOKKOS_INLINE_FUNCTION - void id2ijk(const size_type id, ordinal_type &i, ordinal_type &j, - ordinal_type &k) const { - i = id / _njnk; - k = id % _njnk; - j = k / nk; - k = k % nk; - } - - private: - const ordinal_type _njnk; -}; - -template -struct CrsGraph { - typedef ExecSpace exec_space; - typedef ArrayLayout array_layout; - - typedef Kokkos::View row_ptr_type; - typedef Kokkos::View row_idx_type; - typedef Kokkos::View col_idx_type; - - row_ptr_type rowptr; - row_idx_type rowidx; - col_idx_type colidx; - - CrsGraph() : rowptr("rowptr", 1), rowidx("rowidx", 0), colidx("colidx", 0) {} - - KOKKOS_INLINE_FUNCTION - bool isEmpty() const { - return (rowptr.extent(0) <= 1 || colidx.extent(0) == 0 || - rowidx.extent(0) == 0); - } - - KOKKOS_INLINE_FUNCTION - ordinal_type NumRows() const { - return (isEmpty() ? 0 : static_cast(rowptr.extent(0)) - 1); - } - - KOKKOS_INLINE_FUNCTION - size_type NumNonZeros() const { - return (isEmpty() ? 0 : static_cast(colidx.extent(0))); - } -}; - -template -inline CrsGraph create_mirror( - const CrsGraph src) { - CrsGraph dst; - - dst.rowptr = - Kokkos::create_mirror_view(typename DstSpace::memory_space(), src.rowptr); - dst.rowidx = - Kokkos::create_mirror_view(typename DstSpace::memory_space(), src.rowidx); - dst.colidx = - Kokkos::create_mirror_view(typename DstSpace::memory_space(), src.colidx); - - return dst; -} - -template -inline void deep_copy(const CrsGraph dst, - const CrsGraph src) { - Kokkos::deep_copy(dst.rowptr, src.rowptr); - Kokkos::deep_copy(dst.rowidx, src.rowidx); - Kokkos::deep_copy(dst.colidx, src.colidx); -} - -// Given a structured block and a stencil (at present, just a 3D 1-hop cross), -// construct a corresponding CRS graph. -template -CrsGraph -create_graph_host_for_structured_block(const StructuredBlock mesh, - const StencilShape::Enum shape) { - CrsGraph graph; - - Kokkos::resize(graph.rowptr, mesh.size() + 1); - graph.rowptr[0] = 0; - - std::vector colidx, rowidx; - switch (shape) { - case StencilShape::cross: - for (ordinal_type c = 0; c < mesh.size(); ++c) { - ordinal_type i, j, k, n = 0; - - mesh.id2ijk(c, i, j, k); - - rowidx.push_back(c); - colidx.push_back(c); - ++n; - if (i > 0) { - rowidx.push_back(c); - colidx.push_back(mesh.ijk2id(i - 1, j, k)); - ++n; - } - if (i + 1 < mesh.ni) { - rowidx.push_back(c); - colidx.push_back(mesh.ijk2id(i + 1, j, k)); - ++n; - } - if (j > 0) { - rowidx.push_back(c); - colidx.push_back(mesh.ijk2id(i, j - 1, k)); - ++n; - } - if (j + 1 < mesh.nj) { - rowidx.push_back(c); - colidx.push_back(mesh.ijk2id(i, j + 1, k)); - ++n; - } - if (k > 0) { - rowidx.push_back(c); - colidx.push_back(mesh.ijk2id(i, j, k - 1)); - ++n; - } - if (k + 1 < mesh.nk) { - rowidx.push_back(c); - colidx.push_back(mesh.ijk2id(i, j, k + 1)); - ++n; - } - graph.rowptr[c + 1] = graph.rowptr[c] + n; - } - break; - } - assert(graph.rowptr[mesh.size()] == static_cast(colidx.size())); - assert(graph.rowptr[mesh.size()] == static_cast(rowidx.size())); - - for (ordinal_type c = 0; c < mesh.size(); ++c) - std::sort(colidx.begin() + graph.rowptr[c], - colidx.begin() + graph.rowptr[c + 1]); - - const ordinal_type nnz = graph.rowptr[mesh.size()]; - Kokkos::resize(graph.colidx, nnz); - Kokkos::resize(graph.rowidx, nnz); - for (ordinal_type c = 0; c < nnz; ++c) { - graph.colidx[c] = colidx[c]; - graph.rowidx[c] = rowidx[c]; - } - return graph; -} - -template -class BlockCrsMatrix { - public: - typedef ExeSpace exec_space; - typedef ArrayLayout array_layout; - typedef Test::CrsGraph crs_graph_type; - - typedef scalar_type value_type; - typedef Kokkos::View - value_array_type; - - private: - crs_graph_type _graph; - ordinal_type _blocksize; - value_array_type _values; - - public: - BlockCrsMatrix() : _graph(), _blocksize(), _values() {} - - BlockCrsMatrix(const BlockCrsMatrix &b) - : _graph(b._graph), _blocksize(b._blocksize), _values(b._values) {} - - BlockCrsMatrix(const crs_graph_type graph, const ordinal_type blocksize) - : _graph(graph), - _blocksize(blocksize), - _values("BlockCrsMatrix::_values", _graph.NumNonZeros(), _blocksize, - _blocksize) {} - - BlockCrsMatrix(const crs_graph_type graph, const ordinal_type blocksize, - const value_array_type values) - : _graph(graph), _blocksize(blocksize), _values(values) {} - - ordinal_type BlockSize() const { return _blocksize; } - crs_graph_type CrsGraph() const { return _graph; } - value_array_type Values() const { return _values; } -}; - -template -inline BlockCrsMatrix create_mirror( - const BlockCrsMatrix src) { - const auto graph = create_mirror(src.CrsGraph()); - const auto blocksize = src.BlockSize(); - const auto values = Kokkos::create_mirror_view( - typename DstSpace::memory_space(), src.Values()); - return BlockCrsMatrix(graph, blocksize, values); -} - -template -inline void deep_copy(const BlockCrsMatrix dst, - const BlockCrsMatrix src) { - deep_copy(dst.CrsGraph(), src.CrsGraph()); - Kokkos::deep_copy(dst.Values(), src.Values()); -} - -template -void fill_block_crs_matrix_host( - BlockCrsMatrix A) { - // extract graph and blocksizes - const auto graph = A.CrsGraph(); - const auto values = A.Values(); - const ordinal_type blocksize = A.BlockSize(); - - scalar_type tmp[BLOCKCRS_MAX_BLOCKSIZE * - BLOCKCRS_MAX_BLOCKSIZE], //[blocksize*blocksize], - diag_block[BLOCKCRS_MAX_BLOCKSIZE] - [BLOCKCRS_MAX_BLOCKSIZE], //[blocksize][blocksize], - offdiag_block[BLOCKCRS_MAX_BLOCKSIZE] - [BLOCKCRS_MAX_BLOCKSIZE]; //[blocksize][blocksize]; - - Random random; - - // for diagonal block, make spd - { - const ordinal_type iend = blocksize * blocksize; - for (ordinal_type i = 0; i < iend; ++i) tmp[i] = 2 * (random.value() - 0.5); - - for (ordinal_type i = 0; i < blocksize; ++i) - for (ordinal_type j = i; j < blocksize; ++j) { - diag_block[i][j] = 0; - for (ordinal_type k = 0; k < blocksize; ++k) - diag_block[i][j] += tmp[i * blocksize + k] * tmp[j * blocksize + k]; - if (i != j) - diag_block[j][i] = diag_block[i][j]; // symmetrize - else - diag_block[i][j] *= 0.5 * blocksize; // improve condition - } - } - - { - // for off diagonal; down-weight off-diag blocks to improve conditioning. - for (ordinal_type i = 0; i < blocksize; ++i) - for (ordinal_type j = 0; j < blocksize; ++j) - offdiag_block[i][j] = 0.1 * 2 * (random.value() - 0.5); - } - - for (ordinal_type r = 0; r < graph.NumRows(); ++r) { - // random number generator (-1, 1) - const ordinal_type cbegin = graph.rowptr(r), cend = graph.rowptr(r + 1); - for (ordinal_type c = cbegin; c < cend; ++c) { - auto block = Kokkos::subview(values, c, Kokkos::ALL(), Kokkos::ALL()); - - if (graph.colidx(c) == r) { - for (ordinal_type i = 0; i < blocksize; ++i) - for (ordinal_type j = i; j < blocksize; ++j) - block(i, j) = diag_block[i][j]; - } else { - // for off diagonal; down-weight off-diag blocks to improve - // conditioning. - for (ordinal_type i = 0; i < blocksize; ++i) - for (ordinal_type j = 0; j < blocksize; ++j) - block(i, j) = offdiag_block[i][j]; - } - } - } -} - -// nrhs should go after blocksize to match matrix dimensions consistently -template -class BlockMultiVector { - public: - typedef ExeSpace exec_space; - typedef ArrayLayout array_layout; - - typedef scalar_type value_type; - typedef Kokkos::View - value_array_type; - - private: - value_array_type _values; - - public: - BlockMultiVector(const ordinal_type nvecs, const ordinal_type nrows, - const ordinal_type blocksize) - : _values("BlockMultiVector::_values", nvecs, nrows, blocksize) {} - - BlockMultiVector(const value_array_type values) : _values(values) {} - - ordinal_type NumVectors() const { return _values.extent(0); } - ordinal_type NumRows() const { return _values.extent(1); } - ordinal_type BlockSize() const { return _values.extent(2); } - - value_array_type Values() const { return _values; } -}; - -template -inline BlockMultiVector create_mirror( - const BlockMultiVector src) { - return BlockMultiVector(Kokkos::create_mirror_view( - typename DstSpace::memory_space(), src.Values())); -} - -template -inline void deep_copy(const BlockMultiVector dst, - const BlockMultiVector src) { - Kokkos::deep_copy(dst.Values(), src.Values()); -} - -template -void fill_block_multi_vector_host( - BlockMultiVector B) { - const ordinal_type jend = B.NumVectors(), iend = B.NumRows(), - kend = B.BlockSize(); - - auto B_val = B.Values(); - - for (ordinal_type j = 0; j < jend; ++j) - for (ordinal_type i = 0; i < iend; ++i) - for (ordinal_type k = 0; k < kend; ++k) - B_val(j, i, k) = static_cast((i + j + k) % 7) - 3; -} - -template -class BlockTridiagMatrices { - public: - typedef ExecSpace exec_space; - typedef ValueType value_type; - typedef ArrayLayout array_layout; - - typedef Kokkos::View - value_array_type; - - private: - const ordinal_type _ntridiags, _nrows, _blocksize; - // A B - // C - value_array_type _A, _B, _C; - - public: - BlockTridiagMatrices(const ordinal_type ntridiags, const ordinal_type nrows, - const ordinal_type blocksize) - : _ntridiags(ntridiags), - _nrows(nrows), - _blocksize(blocksize), - _A("BlockTridiagMatrix::_A", _ntridiags, _nrows, _blocksize, - _blocksize), - _B("BlockTridiagMatrix::_B", _ntridiags, _nrows - 1, _blocksize, - _blocksize), - _C("BlockTridiagMatrix::_C", _ntridiags, _nrows - 1, _blocksize, - _blocksize) {} - - BlockTridiagMatrices(const ordinal_type ntridiags, const ordinal_type nrows, - const ordinal_type blocksize, const value_array_type A_, - const value_array_type B_, const value_array_type C_) - : _ntridiags(ntridiags), - _nrows(nrows), - _blocksize(blocksize), - _A(A_), - _B(B_), - _C(C_) {} - - value_array_type A() const { return _A; } - value_array_type B() const { return _B; } - value_array_type C() const { return _C; } - - ordinal_type BlockSize() const { return _blocksize; } - ordinal_type NumRows() const { return _nrows; } - ordinal_type NumTridiagMatrices() const { return _ntridiags; } -}; - -template -BlockTridiagMatrices -create_block_tridiag_matrices(const ordinal_type ntridiags, - const ordinal_type nrows, - const ordinal_type blocksize) { - return BlockTridiagMatrices( - adjustDimension(ntridiags), nrows, blocksize); -} - -template -inline BlockTridiagMatrices create_mirror( - const BlockTridiagMatrices src) { - return BlockTridiagMatrices( - src.NumTridiagMatrices(), src.NumRows(), src.BlockSize(), - Kokkos::create_mirror_view(typename DstSpace::memory_space(), src.A()), - Kokkos::create_mirror_view(typename DstSpace::memory_space(), src.B()), - Kokkos::create_mirror_view(typename DstSpace::memory_space(), src.C())); -} - -template -inline void deep_copy( - const BlockTridiagMatrices dst, - const BlockTridiagMatrices src) { - Kokkos::deep_copy(dst.A(), src.A()); - Kokkos::deep_copy(dst.B(), src.B()); - Kokkos::deep_copy(dst.C(), src.C()); -} - -template -KOKKOS_INLINE_FUNCTION typename std::enable_if< - std::is_same::value, - scalar_type &>::type -tdiag_val(const ViewType &A, const ordinal_type &t, const ordinal_type &i, - const ordinal_type &ii, const ordinal_type &jj) { - return A(t, i, ii, jj); -} - -template -KOKKOS_INLINE_FUNCTION typename std::enable_if< - !std::is_same::value, - scalar_type &>::type -tdiag_val(const ViewType &A, const ordinal_type &t, const ordinal_type &i, - const ordinal_type &ii, const ordinal_type &jj) { - typedef typename ViewType::value_type value_type; - return A(t / value_type::vector_length, i, ii, - jj)[t % value_type::vector_length]; -} - -template -class PartitionedBlockMultiVector { - public: - typedef ExeSpace exec_space; - typedef ValueType value_type; - typedef ArrayLayout array_layout; - - typedef Kokkos::View - value_array_type; - - private: - value_array_type _values; - - public: - PartitionedBlockMultiVector(const ordinal_type nparts, - const ordinal_type nvectors, - const ordinal_type nrows, - const ordinal_type blocksize) - : _values("BlockMultiVector::_values", nparts, nvectors, nrows, - blocksize) {} - - PartitionedBlockMultiVector(const value_array_type values) - : _values(values) {} - - ordinal_type NumPartitions() const { return _values.extent(0); } - ordinal_type NumVectors() const { return _values.extent(1); } - ordinal_type NumRows() const { return _values.extent(2); } - ordinal_type BlockSize() const { return _values.extent(3); } - - value_array_type Values() const { return _values; } -}; - -template -PartitionedBlockMultiVector -create_partitioned_block_multi_vector(const ordinal_type nparts, - const ordinal_type nvectors, - const ordinal_type nrows, - const ordinal_type blocksize) { - return PartitionedBlockMultiVector( - adjustDimension(nparts), nvectors, nrows, blocksize); -} - -template -inline PartitionedBlockMultiVector -create_mirror( - const PartitionedBlockMultiVector src) { - return PartitionedBlockMultiVector( - Kokkos::create_mirror_view(typename DstSpace::memory_space(), - src.Values())); -} - -template -inline void deep_copy( - const PartitionedBlockMultiVector dst, - const PartitionedBlockMultiVector src) { - Kokkos::deep_copy(dst.Values(), src.Values()); -} - -template -void fill_partitioned_block_multi_vector_host( - PartitionedBlockMultiVector - B, - const ordinal_type ninj) { - const ordinal_type iend = ninj, // B.NumPartitions(), - jend = B.NumVectors(), kend = B.NumRows(), lend = B.BlockSize(); - - auto B_val = B.Values(); - for (ordinal_type i = 0; i < iend; ++i) - for (ordinal_type j = 0; j < jend; ++j) - for (ordinal_type k = 0; k < kend; ++k) - for (ordinal_type l = 0; l < lend; ++l) - tdiag_val(B_val, i, j, k, l) = - static_cast((i + j + k + l) % 7) - 3; -} - -template -class BlockCrsMatrixVectorProductByRow { - public: - typedef BlockCrsMatrix block_crs_matrix_type; - typedef typename block_crs_matrix_type::crs_graph_type crs_graph_type; - typedef BlockMultiVector block_multi_vector_type; - - private: - ConstUnmanagedViewType _rowptr; - ConstUnmanagedViewType _colidx; - - ConstUnmanagedViewType _A; - ConstUnmanagedViewType _x; - /**/ UnmanagedViewType _y; - - ordinal_type _blocksize; - - public: - // A thread maps to a point row of the matrix. - // loop = blksize*m - KOKKOS_INLINE_FUNCTION - void operator()(const ordinal_type idx) const { - // index of blockrow and row in a block - const ordinal_type i = idx / _blocksize; - const ordinal_type ii = idx % _blocksize; - - // loop over multivectors - const ordinal_type jend = _y.extent(0); - for (ordinal_type j = 0; j < jend; ++j) { - scalar_type tmp = 0; - - // block row - const ordinal_type cbegin = _rowptr(i), cend = _rowptr(i + 1); - - for (ordinal_type c = cbegin; c < cend; ++c) { - const ordinal_type col = _colidx(c); - for (ordinal_type jj = 0; jj < _blocksize; ++jj) - tmp += _A(col, ii, jj) * _x(j, col, jj); - } - _y(j, i, ii) = tmp; - } - } - - void run(const block_crs_matrix_type A, const block_multi_vector_type x, - const block_multi_vector_type y) { - _rowptr = A.CrsGraph().rowptr; - _colidx = A.CrsGraph().colidx; - - _blocksize = A.BlockSize(); - - _A = A.Values(); - _x = x.Values(); - _y = y.Values(); - - Kokkos::RangePolicy policy(0, _x.extent(1) * _blocksize); - Kokkos::parallel_for("BlockCrsMatrixVectorProductByRow::run", policy, - *this); - } -}; - -template -class BlockCrsMatrixVectorProductByBlockRow { - public: - typedef BlockCrsMatrix block_crs_matrix_type; - typedef typename block_crs_matrix_type::crs_graph_type crs_graph_type; - typedef BlockMultiVector block_multi_vector_type; - - private: - ConstUnmanagedViewType _rowptr; - ConstUnmanagedViewType _colidx; - - ConstUnmanagedViewType _A; - ConstUnmanagedViewType _x; - /**/ UnmanagedViewType _y; - - ordinal_type _blocksize; - - public: - // A thread maps to a row block of the matrix. - // loop = m - KOKKOS_INLINE_FUNCTION - void operator()(const ordinal_type i) const { - // loop over multivector colums - const ordinal_type jend = _y.extent(0); - for (ordinal_type j = 0; j < jend; ++j) { - // set zero - for (ordinal_type ii = 0; ii < _blocksize; ++ii) _y(j, i, ii) = 0; - - // block row - const ordinal_type cbegin = _rowptr(i), cend = _rowptr(i + 1); - - for (ordinal_type c = cbegin; c < cend; ++c) { - const ordinal_type col = _colidx(c); - for (ordinal_type ii = 0; ii < _blocksize; ++ii) { - scalar_type tmp = 0; - for (ordinal_type jj = 0; jj < _blocksize; ++jj) - tmp += _A(col, ii, jj) * _x(j, col, jj); - _y(j, i, ii) += tmp; - } - } - } - } - - void run(const block_crs_matrix_type A, const block_multi_vector_type x, - const block_multi_vector_type y) { - _rowptr = A.CrsGraph().rowptr; - _colidx = A.CrsGraph().colidx; - - _blocksize = A.BlockSize(); - - _A = A.Values(); - _x = x.Values(); - _y = y.Values(); - - Kokkos::RangePolicy policy(0, _x.extent(1)); - Kokkos::parallel_for(policy, *this); - } -}; - -template -class ExtractBlockTridiagMatrices { - public: - typedef ExecSpace exec_space; - typedef ValueType value_type; - typedef ArrayLayout array_layout; - - typedef StructuredBlock structured_block_mesh_type; - typedef BlockCrsMatrix block_crs_matrix_type; - typedef typename block_crs_matrix_type::crs_graph_type crs_graph_type; - typedef BlockTridiagMatrices - block_tridiag_matrices_type; - - private: - structured_block_mesh_type _mesh; - ordinal_type _blocksize; - - ConstUnmanagedViewType _rowptr; - ConstUnmanagedViewType _rowidx; - ConstUnmanagedViewType _colidx; - - ConstUnmanagedViewType _A; - /**/ UnmanagedViewType - _TA, _TB, _TC; - - public: - ExtractBlockTridiagMatrices(const structured_block_mesh_type mesh) - : _mesh(mesh) {} - - template - KOKKOS_INLINE_FUNCTION void elementwise_copy( - const TViewType &T, const AViewType &A, const ordinal_type ij, - const ordinal_type k, const ordinal_type c, - const ordinal_type blocksize) const { - for (ordinal_type ii = 0; ii < blocksize; ++ii) - for (ordinal_type jj = 0; jj < blocksize; ++jj) - tdiag_val(T, ij, k, ii, jj) = A(c, ii, jj); - } - - // A thread maps nonzero blocks - KOKKOS_INLINE_FUNCTION - void operator()(const ordinal_type c) const { - const ordinal_type row = _rowidx[c], col = _colidx[c]; - - ordinal_type ri, rj, rk, ci, cj, ck; - _mesh.id2ijk(row, ri, rj, rk); - _mesh.id2ijk(col, ci, cj, ck); - - if (ri == ci && rj == cj) { - const ordinal_type ij = _mesh.ij2id(ri, rj); - // consider connectivity to k-direction - switch (rk - ck) { - case 1: elementwise_copy(_TC, _A, ij, ck, c, _blocksize); break; - case 0: elementwise_copy(_TA, _A, ij, rk, c, _blocksize); break; - case -1: elementwise_copy(_TB, _A, ij, rk, c, _blocksize); break; - } - } - } - - void run(const block_crs_matrix_type A, const block_tridiag_matrices_type T) { - _rowptr = A.CrsGraph().rowptr; - _rowidx = A.CrsGraph().rowidx; - _colidx = A.CrsGraph().colidx; - - _A = A.Values(); - - _TA = T.A(); - _TB = T.B(); - _TC = T.C(); - - _blocksize = A.BlockSize(); - Kokkos::RangePolicy policy(0, _A.extent(0)); - Kokkos::parallel_for(policy, *this); - } - - template - bool elementwise_check(const TViewType &T, const AViewType &A, - const ordinal_type ij, const ordinal_type k, - const ordinal_type c, - const ordinal_type blocksize) const { - const auto eps = 1e2 * std::numeric_limits::epsilon(); - for (ordinal_type ii = 0; ii < blocksize; ++ii) - for (ordinal_type jj = 0; jj < blocksize; ++jj) - if (Kokkos::ArithTraits::abs(tdiag_val(T, ij, k, ii, jj) - - A(c, ii, jj)) >= eps) - return false; - return true; - } - - bool check() const { - auto rowptr = Kokkos::create_mirror_view(_rowptr); - Kokkos::deep_copy(rowptr, _rowptr); - auto colidx = Kokkos::create_mirror_view(_colidx); - Kokkos::deep_copy(colidx, _colidx); - auto TA = Kokkos::create_mirror_view(_TA); - Kokkos::deep_copy(TA, _TA); - auto TB = Kokkos::create_mirror_view(_TB); - Kokkos::deep_copy(TB, _TB); - auto TC = Kokkos::create_mirror_view(_TC); - Kokkos::deep_copy(TC, _TC); - auto A = Kokkos::create_mirror_view(_A); - Kokkos::deep_copy(A, _A); - - const ordinal_type ijend = adjustDimension(_mesh.ni * _mesh.nj), - kend = _mesh.nk; - - assert(ijend == ordinal_type(TA.extent(0))); - assert((kend - 0) == ordinal_type(TA.extent(1))); - assert(ijend == ordinal_type(TB.extent(0))); - assert((kend - 1) == ordinal_type(TB.extent(1))); - assert(ijend == ordinal_type(TC.extent(0))); - assert((kend - 1) == ordinal_type(TC.extent(1))); - - for (ordinal_type ij = 0; ij < ijend; ++ij) { - ordinal_type i, j; - _mesh.id2ij(ij, i, j); - - for (ordinal_type k = 0; k < kend; ++k) { - const ordinal_type row = _mesh.ijk2id(i, j, k), idx_begin = rowptr[row], - idx_end = rowptr[row + 1]; - - // check - bool found[3] = {}, same[3] = {}; - for (ordinal_type idx = idx_begin; idx < idx_end; ++idx) { - switch (row - colidx[idx]) { - case 1: - same[2] = elementwise_check(TC, A, ij, k - 1, idx, _blocksize); - found[2] = true; - break; - case 0: - same[0] = elementwise_check(TA, A, ij, k, idx, _blocksize); - found[0] = true; - break; - case -1: - same[1] = elementwise_check(TB, A, ij, k, idx, _blocksize); - found[1] = true; - break; - } - } - if (k == 0) - assert(found[0] & same[0] && found[1] & same[1]); - else if (k == (kend - 1)) - assert(found[0] & same[0] && found[2] & same[2]); - else - assert(found[0] & same[0] && found[1] & same[1] && - found[2] & same[2]); - } - } - return true; - } -}; - -inline bool eq(const std::string &a, const char *const b1, - const char *const b2 = 0) { - return (a == std::string(b1) || (b2 && a == std::string(b2)) || - a == std::string("-") + std::string(b1)); -} - -// Command-line argument parser and holder. -template -struct Input { - bool quiet, check; - ordinal_type ni, nj, nk; - ordinal_type bs; // block size - ordinal_type nrhs; // #vectors in multivector - ordinal_type opf, ops; - StencilShape::Enum stencil_shape; - - Input(int argc, char **argv) { - quiet = false; - check = false; - ni = nj = nk = 10; - bs = 5; - nrhs = 1; - if (std::is_same::value) { - opf = 0; - ops = 0; // range policy default - } else { - opf = 1; - ops = 1; // team is default - } - stencil_shape = StencilShape::cross; - - for (ordinal_type i = 1; i < argc; ++i) { - const std::string &token = argv[i]; - if (eq(token, "-nijk")) - ni = nj = nk = std::atoi(argv[++i]); - else if (eq(token, "-ni")) - ni = std::atoi(argv[++i]); - else if (eq(token, "-nj")) - nj = std::atoi(argv[++i]); - else if (eq(token, "-nk")) - nk = std::atoi(argv[++i]); - else if (eq(token, "-bs")) - bs = std::atoi(argv[++i]); - else if (eq(token, "-nrhs")) - nrhs = std::atoi(argv[++i]); - else if (eq(token, "-opf")) - opf = std::atoi(argv[++i]); - else if (eq(token, "-ops")) - ops = std::atoi(argv[++i]); - else if (eq(token, "-c", "-check")) - check = true; - } - if (nk <= 1) throw std::runtime_error("k dimension is <= 1; must be >= 2."); - if (!quiet) print(std::cout); - } - - void print(std::ostream &os) const { - os << " ni " << ni << " nj " << nj << " nk " << nk << " bs " << bs - << " nrhs " << nrhs << " opf " << opf << " ops " << ops << " sc " - << stencil_shape << "\n"; - } -}; - -} // namespace Test -} // namespace KokkosBatched diff --git a/src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_blockcrsmatrix_eti_spec_inst.cpp.in b/src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_blockcrsmatrix_eti_spec_inst.cpp.in deleted file mode 100644 index 1bb85d6067..0000000000 --- a/src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_blockcrsmatrix_eti_spec_inst.cpp.in +++ /dev/null @@ -1,56 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation -// -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true -#include "KokkosKernels_config.h" -#include "KokkosSparse_spmv_blockcrsmatrix_spec.hpp" - -namespace KokkosSparse { -namespace Experimental { -namespace Impl { -// clang-format off -@SPARSE_SPMV_BLOCKCRSMATRIX_ETI_INST_BLOCK@ -// clang-format on -} // namespace Impl -} // namespace Experimental -} // namespace KokkosSparse diff --git a/src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_blockcrsmatrix_eti_spec_inst.cpp.in b/src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_blockcrsmatrix_eti_spec_inst.cpp.in deleted file mode 100644 index ae672bc04a..0000000000 --- a/src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_blockcrsmatrix_eti_spec_inst.cpp.in +++ /dev/null @@ -1,56 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation -// -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true -#include "KokkosKernels_config.h" -#include "KokkosSparse_spmv_blockcrsmatrix_spec.hpp" - -namespace KokkosSparse { -namespace Experimental { -namespace Impl { -// clang-format off -@SPARSE_SPMV_MV_BLOCKCRSMATRIX_ETI_INST_BLOCK@ -// clang-format on -} // namespace Impl -} // namespace Experimental -} // namespace KokkosSparse diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_blockcrsmatrix_eti_spec_avail.hpp.in b/src/impl/generated_specializations_hpp/KokkosSparse_spmv_blockcrsmatrix_eti_spec_avail.hpp.in deleted file mode 100644 index 1ce97a5795..0000000000 --- a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_blockcrsmatrix_eti_spec_avail.hpp.in +++ /dev/null @@ -1,56 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation -// -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_ETI_SPEC_AVAIL_HPP_ - -namespace KokkosSparse { -namespace Experimental { -namespace Impl { -// clang-format off -@SPARSE_SPMV_BLOCKCRSMATRIX_ETI_AVAIL_BLOCK@ -// clang-format on -} // namespace Impl -} // namespace Experimental -} // namespace KokkosSparse -#endif diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_blockcrsmatrix_eti_spec_decl.hpp.in b/src/impl/generated_specializations_hpp/KokkosSparse_spmv_blockcrsmatrix_eti_spec_decl.hpp.in deleted file mode 100644 index 9ad333ccfd..0000000000 --- a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_blockcrsmatrix_eti_spec_decl.hpp.in +++ /dev/null @@ -1,56 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation -// -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_ETI_SPEC_DECL_HPP_ - -namespace KokkosSparse { -namespace Experimental { -namespace Impl { -// clang-format off -@SPARSE_SPMV_BLOCKCRSMATRIX_ETI_DECL_BLOCK@ -// clang-format on -} // namespace Impl -} // namespace Experimental -} // namespace KokkosSparse -#endif diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_blockcrsmatrix_eti_spec_avail.hpp.in b/src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_blockcrsmatrix_eti_spec_avail.hpp.in deleted file mode 100644 index 85b72e3b7b..0000000000 --- a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_blockcrsmatrix_eti_spec_avail.hpp.in +++ /dev/null @@ -1,56 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation -// -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOSSPARSE_SPMV_MV_BLOCKCRSMATRIX_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPMV_MV_BLOCKCRSMATRIX_ETI_SPEC_AVAIL_HPP_ - -namespace KokkosSparse { -namespace Experimental { -namespace Impl { -// clang-format off -@SPARSE_SPMV_MV_BLOCKCRSMATRIX_ETI_AVAIL_BLOCK@ -// clang-format on -} // namespace Impl -} // namespace Experimental -} // namespace KokkosSparse -#endif diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_blockcrsmatrix_eti_spec_decl.hpp.in b/src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_blockcrsmatrix_eti_spec_decl.hpp.in deleted file mode 100644 index c0b77c54f2..0000000000 --- a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_blockcrsmatrix_eti_spec_decl.hpp.in +++ /dev/null @@ -1,56 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation -// -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOSSPARSE_SPMV_MV_BLOCKCRSMATRIX_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPMV_MV_BLOCKCRSMATRIX_ETI_SPEC_DECL_HPP_ - -namespace KokkosSparse { -namespace Experimental { -namespace Impl { -// clang-format off -@SPARSE_SPMV_MV_BLOCKCRSMATRIX_ETI_DECL_BLOCK@ -// clang-format on -} // namespace Impl -} // namespace Experimental -} // namespace KokkosSparse -#endif diff --git a/src/impl/tpls/KokkosSparse_spmv_blockcrsmatrix_tpl_spec_avail.hpp b/src/impl/tpls/KokkosSparse_spmv_blockcrsmatrix_tpl_spec_avail.hpp deleted file mode 100644 index e7ac862f22..0000000000 --- a/src/impl/tpls/KokkosSparse_spmv_blockcrsmatrix_tpl_spec_avail.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOSPARSE_SPMV_BLOCKCRSMATRIX_TPL_SPEC_AVAIL_HPP_ -#define KOKKOSPARSE_SPMV_BLOCKCRSMATRIX_TPL_SPEC_AVAIL_HPP_ - -namespace KokkosSparse { -namespace Experimental { -namespace Impl { - -// Specialization struct which defines whether a specialization exists -template -struct spmv_blockcrsmatrix_tpl_spec_avail { - enum : bool { value = false }; -}; - -// Specialization struct which defines whether a specialization exists -template -struct spmv_mv_blockcrsmatrix_tpl_spec_avail { - enum : bool { value = false }; -}; - -} // namespace Impl -} // namespace Experimental -} // namespace KokkosSparse - -#endif // KOKKOSPARSE_SPMV_BLOCKCRSMATRIX_TPL_SPEC_AVAIL_HPP_ diff --git a/src/impl/tpls/KokkosSparse_spmv_blockcrsmatrix_tpl_spec_decl.hpp b/src/impl/tpls/KokkosSparse_spmv_blockcrsmatrix_tpl_spec_decl.hpp deleted file mode 100644 index d5e9aad5be..0000000000 --- a/src/impl/tpls/KokkosSparse_spmv_blockcrsmatrix_tpl_spec_decl.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOSKERNELS_KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_TPL_SPEC_DECL_HPP -#define KOKKOSKERNELS_KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_TPL_SPEC_DECL_HPP - -#endif // KOKKOSKERNELS_KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_TPL_SPEC_DECL_HPP diff --git a/src/sparse/KokkosSparse_BlockCrsMatrix.hpp b/src/sparse/KokkosSparse_BlockCrsMatrix.hpp deleted file mode 100644 index 4e52c0f693..0000000000 --- a/src/sparse/KokkosSparse_BlockCrsMatrix.hpp +++ /dev/null @@ -1,1006 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -/// \file Kokkos_Sparse_BlockCrsMatrix.hpp -/// \brief Local sparse matrix interface -/// -/// This file provides KokkosSparse::BlockCrsMatrix. This implements a -/// local (no MPI) sparse matrix stored in block compressed row sparse -/// ("BlockCrs") format. - -#ifndef KOKKOS_SPARSE_BLOCKCRSMATRIX_HPP_ -#define KOKKOS_SPARSE_BLOCKCRSMATRIX_HPP_ - -#include "Kokkos_Core.hpp" -#include "Kokkos_StaticCrsGraph.hpp" -#include "Kokkos_ArithTraits.hpp" -#include -#include -#include -#include "KokkosSparse_CrsMatrix.hpp" - -namespace KokkosSparse { - -namespace Experimental { - -/// \class SparseBlockRowView -/// \brief View of a block-row of a sparse matrix. -/// \tparam MatrixType BlockCrsMatrix Sparse matrix type -/// -/// This class provides a generic view of a block-row of a sparse matrix. -/// -/// Whether the view is const or not, depends on whether -/// MatrixType is a const or nonconst view of the matrix. If -/// you always want a const view, use SparseBlockRowViewConst (see below). -/// -/// MatrixType must provide the \c value_type and \c ordinal_type -/// typedefs. In addition, it must make sense to use SparseBlockRowView to -/// view a block-row of MatrixType. -template -struct SparseBlockRowView { - //! The type of the values in the row. - typedef typename MatrixType::value_type value_type; - //! The type of the column indices in the row. - typedef typename MatrixType::ordinal_type ordinal_type; - //! The type for returned block of values. - typedef Kokkos::View - block_values_type; - - private: - //! Array of values in the row. - value_type* values_; - //! Array of (local) column indices in the row. - ordinal_type* colidx_; - /// \brief Stride between successive rows in a block. - /// - /// For block compressed sparse row (BlockCSR) storage with row-major layout - /// by full row, (i.e. consecutive rows within a block are NOT contiguous), - /// this will be the stride between rows within a block-row - const ordinal_type blockDim_; - - public: - /// \brief Constructor - /// - /// \param values [in] Array of the row's values. - /// \param colidx [in] Array of the row's column indices. - /// \param blockDim [in] (Constant) stride between block rows - /// within a block-row in the above arrays. - /// \param count [in] Number of blocks in the desired block-row. - // - // Assumes values and colidx__ already offset to the correct location - KOKKOS_INLINE_FUNCTION - SparseBlockRowView(value_type* const values, ordinal_type* const colidx__, - const ordinal_type& blockDim, const ordinal_type& count) - : values_(values), - colidx_(colidx__), - blockDim_(blockDim), - length(count) {} - - /// \brief Constructor with offset into \c colidx array - /// - /// \param values [in] Array of the row's values. - /// \param colidx [in] Array of the row's column indices. - /// \param blockDim [in] (Constant) stride between rows in - /// within a block in the above arrays. - /// \param count [in] Number of blocks in the desired block-row - /// \param start [in] Offset into values and colidx of the desired block-row - /// start. - /// Note: The offset into the values array for a block-row equals - /// num_blocks_prior_to_block-row*blockDim*blockDim - /// - /// \tparam OffsetType The type of \c start (see above). Must be a - /// built-in integer type. This may differ from ordinal_type. - /// For example, the matrix may have dimensions that fit in int, - /// but a number of entries that does not fit in int. - template - KOKKOS_INLINE_FUNCTION SparseBlockRowView( - const typename MatrixType::values_type& values, - const typename MatrixType::index_type& colidx__, - const ordinal_type& blockDim, const ordinal_type& count, - const OffsetType& start, - const typename std::enable_if::value, - int>::type& = 0) - : values_(&values(start * blockDim * blockDim)), - colidx_(&colidx__(start)), - blockDim_(blockDim), - length(count) {} - - /// \brief Number of entries (i.e. blocks) in the row. - /// - /// This is a public const field rather than a public const method, - /// in order to avoid possible overhead of a method call if the - /// compiler is unable to inline that method call. - /// - /// We assume that rows contain no duplicate entries (i.e., entries - /// with the same column index). Thus, a row may have up to - /// A.numCols() entries. This means that the correct type of - /// 'length' is ordinal_type. - /// Here, length refers to the number of blocks in a block-row - const ordinal_type length; - - /// \brief Return a pointer offset to full-row i of values_ array; - /// user responsible for indexing into this pointer correctly - /// \param i [in] must be the LOCAL row index offset within this block-row - /// - /// Output: pointer to values_ array at start of full row with local index i - /// - /// Pointer interfaces are NOT guaranteed for backward compatibility - /// This interface is intended for performant kernels, not common usage - KOKKOS_INLINE_FUNCTION - value_type* full_row_in_block_row(const ordinal_type& i) const { - return values_ + (i * length * blockDim_); - } - - /// /brief Return a pointer offset to local row i of block K of values_ array; - /// user responsible for indexing into this pointer correctly - /// \param K [in] must be the LOCAL block index within this block-row - /// \param i [in] must be the LOCAL row index offset within this block-row - /// - /// Output: pointer to values_ array at start of local row within block K - /// - /// Pointer interfaces are NOT guaranteed for backward compatibility - /// This interface is intended for performant kernels, not common usage - KOKKOS_INLINE_FUNCTION - value_type* local_row_in_block(const ordinal_type& K, - const ordinal_type& i) const { - return (values_ + (K * blockDim_ + i * length * blockDim_)); - } - - /// \brief Return the value at a specified block K of block-row - /// with local row and col offset (i,j) - /// \param K [in] must be the LOCAL block index within this block-row - /// \param i [in] must be the LOCAL row index offset within this block-row - /// \param j [in] must be the LOCAL col index offset within this block-row - /// - /// Output: reference to value_type at the given (K, i, j) offset into values_ - KOKKOS_INLINE_FUNCTION - value_type& local_block_value(const ordinal_type& K, const ordinal_type& i, - const ordinal_type& j) const { - return values_[K * blockDim_ + i * length * blockDim_ + j]; - } - - /// \brief Return the block column index for a specified block K - /// - /// \param K [in] must be the LOCAL block index within this block-row - /// \return Block column index for "uncompressed" block row - KOKKOS_INLINE_FUNCTION - ordinal_type block_colidx(const ordinal_type K) const { return colidx_[K]; } - - /// \brief Return unmanaged 2D strided View wrapping local block K from this - /// block-row \param K [in] must be the LOCAL block index within this - /// block-row - KOKKOS_INLINE_FUNCTION - block_values_type block(const ordinal_type& K) const { - return block_values_type( - &(values_[K * blockDim_]), - Kokkos::LayoutStride(blockDim_, length * blockDim_, blockDim_, 1)); - } - - /// \brief Return offset into colidx_ for the requested block idx - /// If none found, return Kokkos::Details::ArithTraits::max - /// \param idx_to_match [in] local block idx within block-row - /// \param is_sorted [in] defaulted to false; no usage at this time - KOKKOS_INLINE_FUNCTION - ordinal_type findRelBlockOffset(const ordinal_type idx_to_match, - bool /*is_sorted*/ = false) const { - ordinal_type offset = Kokkos::Details::ArithTraits::max(); - for (ordinal_type blk_offset = 0; blk_offset < length; ++blk_offset) { - ordinal_type idx = colidx_[blk_offset]; - if (idx == idx_to_match) { - offset = blk_offset; - break; - } // return relative offset - } - return offset; - } -}; - -/// \class SparseBlockRowViewConst -/// \brief Const view of a row of a sparse matrix. -/// \tparam MatrixType Sparse matrix type, such as BlockCrsMatrix. -/// -/// This class is like SparseBlockRowView, except that it provides a const -/// view. This class exists in order to let users get a const view of -/// a row of a nonconst matrix. -template -struct SparseBlockRowViewConst { - //! The type of the values in the row. - typedef const typename MatrixType::non_const_value_type value_type; - //! The type of the column indices in the row. - typedef const typename MatrixType::non_const_ordinal_type ordinal_type; - //! The type for returned block of values. - typedef Kokkos::View - block_values_type; - - private: - //! Array of values in the row. - value_type* values_; - //! Array of (local) column indices in the row. - ordinal_type* colidx_; - /// \brief Stride between successive rows in a block-row - /// - /// For block compressed sparse row (BlockCSR) storage with row-major layout, - /// (i.e. consecutive rows within a block are NOT contiguous), this will be - /// the stride between rows within a block-row - const ordinal_type blockDim_; - - public: - /// \brief Constructor - /// - /// \param values [in] Array of the row's values. - /// \param colidx [in] Array of the row's column indices. - /// \param blockDim [in] (Constant) stride between block rows - /// within a block-row in the above arrays. - /// \param count [in] Number of entries in the row. - // - // Assumes values and colidx__ already offset to the correct location - KOKKOS_INLINE_FUNCTION - SparseBlockRowViewConst(value_type* const values, - ordinal_type* const colidx__, - const ordinal_type& blockDim, - const ordinal_type& count) - : values_(values), - colidx_(colidx__), - blockDim_(blockDim), - length(count) {} - - /// \brief Constructor with offset into \c colidx array - /// - /// \param values [in] Array of the row's values. - /// \param colidx [in] Array of the row's column indices. - /// \param count [in] Number of entries in the row. - /// \param start [in] Offset into values and colidx of the desired block-row - /// start. - /// Note: The offset into the values array for a block-row equals - /// num_blocks_prior_to_block-row*blockDim*blockDim - /// - /// \tparam OffsetType The type of \c start (see above). Must be a - /// built-in integer type. This may differ from ordinal_type. - /// For example, the matrix may have dimensions that fit in int, - /// but a number of entries that does not fit in int. - template - KOKKOS_INLINE_FUNCTION SparseBlockRowViewConst( - const typename MatrixType::values_type& values, - const typename MatrixType::index_type& colidx__, - const ordinal_type& blockDim, const ordinal_type& count, - const OffsetType& start, - const typename std::enable_if::value, - int>::type& = 0) - : values_(&values(start * blockDim * blockDim)), - colidx_(&colidx__(start)), - blockDim_(blockDim), - length(count) {} - - /// \brief Number of entries (i.e. blocks) in the row. - /// - /// This is a public const field rather than a public const method, - /// in order to avoid possible overhead of a method call if the - /// compiler is unable to inline that method call. - /// - /// We assume that rows contain no duplicate entries (i.e., entries - /// with the same column index). Thus, a row may have up to - /// A.numCols() entries. This means that the correct type of - /// 'length' is ordinal_type. - const ordinal_type length; - - /// \brief Return a pointer offset to full-row i of values_ array; - /// user responsible for indexing into this pointer correctly - /// \param i [in] must be the LOCAL row index offset within this block-row - /// - /// Output: pointer to values_ array at start of full row with local index i - /// - /// Pointer interfaces are NOT guaranteed for backward compatibility - /// This interface is intended for performant kernels, not common usage - KOKKOS_INLINE_FUNCTION - value_type* full_row_in_block_row(const ordinal_type& i) const { - return values_ + (i * length * blockDim_); - } - - /// /brief Return a pointer offset to local row i of block K of values_ array; - /// user responsible for indexing into this pointer correctly - /// \param K [in] must be the LOCAL block index within this block-row - /// \param i [in] must be the LOCAL row index offset within this block-row - /// - /// Output: pointer to values_ array at start of local row within block K - /// - /// Pointer interfaces are NOT guaranteed for backward compatibility - /// This interface is intended for performant kernels, not common usage - KOKKOS_INLINE_FUNCTION - value_type* local_row_in_block(const ordinal_type& K, - const ordinal_type& i) const { - return (values_ + (K * blockDim_ + i * length * blockDim_)); - } - - /// \brief Return the value at a specified block K with local row and col ids - /// (i,j) \param K [in] must be the LOCAL block index within this block-row - /// \param i [in] must be the LOCAL row index offset within this block-row - /// \param j [in] must be the LOCAL col index offset within this block-row - /// - /// Output: reference to value_type at the given (K, i, j) offset into values_ - KOKKOS_INLINE_FUNCTION - value_type& local_block_value(const ordinal_type& K, const ordinal_type& i, - const ordinal_type& j) const { - return values_[K * blockDim_ + i * length * blockDim_ + j]; - } - - /// \brief Return the block column index for a specified block K - /// - /// \param K [in] must be the LOCAL block index within this block-row - /// \return Block column index for "uncompressed" block row - KOKKOS_INLINE_FUNCTION - ordinal_type block_colidx(const ordinal_type K) const { return colidx_[K]; } - - /// \brief Return unmanaged 2D strided View wrapping local block K from this - /// block-row \param K [in] must be the LOCAL block index within this - /// block-row - KOKKOS_INLINE_FUNCTION - block_values_type block(const ordinal_type& K) const { - return block_values_type( - &(values_[K * blockDim_]), - Kokkos::LayoutStride(blockDim_, length * blockDim_, blockDim_, 1)); - } - - /// \brief Return offset into colidx_ for the requested block idx - /// If none found, return Kokkos::Details::ArithTraits::max - /// \param idx_to_match [in] local block idx within block-row - /// \param is_sorted [in] defaulted to false; no usage at this time - KOKKOS_INLINE_FUNCTION - ordinal_type findRelBlockOffset(const ordinal_type& idx_to_match, - bool /*is_sorted*/ = false) const { - typedef typename std::remove_cv::type non_const_ordinal_type; - non_const_ordinal_type offset = - Kokkos::Details::ArithTraits::max(); - for (non_const_ordinal_type blk_offset = 0; blk_offset < length; - ++blk_offset) { - ordinal_type idx = colidx_[blk_offset]; - if (idx == idx_to_match) { - offset = blk_offset; - break; - } // return relative offset - } - return offset; - } -}; - -/// \class BlockCrsMatrix -/// \brief Compressed sparse row implementation of a sparse matrix. -/// \tparam ScalarType The type of entries in the sparse matrix. -/// \tparam OrdinalType The type of column indices in the sparse matrix. -/// \tparam Device The Kokkos Device type. -/// \tparam MemoryTraits Traits describing how Kokkos manages and -/// accesses data. The default parameter suffices for most users. -/// -/// "Crs" stands for "compressed row sparse." This is the phrase -/// Trilinos traditionally uses to describe compressed sparse row -/// storage for sparse matrices, as described, for example, in Saad -/// (2nd ed.). -template ::size_type> -class BlockCrsMatrix { - static_assert( - std::is_signed::value, - "BlockCrsMatrix requires that OrdinalType is a signed integer type."); - - private: - typedef - typename Kokkos::ViewTraits::host_mirror_space host_mirror_space; - - public: - //! Type of the matrix's execution space. - typedef typename Device::execution_space execution_space; - //! Type of the matrix's memory space. - typedef typename Device::memory_space memory_space; - //! Type of the matrix's device type. - typedef Kokkos::Device device_type; - - //! Type of each value in the matrix. - typedef ScalarType value_type; - //! Type of each (column) index in the matrix. - typedef OrdinalType ordinal_type; - typedef MemoryTraits memory_traits; - /// \brief Type of each entry of the "row map." - /// - /// The "row map" corresponds to the \c ptr array of row offsets in - /// compressed sparse row (CSR) storage. - typedef SizeType size_type; - - //! Type of a host-memory mirror of the sparse matrix. - typedef BlockCrsMatrix - HostMirror; - //! Type of the graph structure of the sparse matrix. - typedef Kokkos::StaticCrsGraph - StaticCrsGraphType; - //! Type of the graph structure of the sparse matrix - consistent with Kokkos. - typedef Kokkos::StaticCrsGraph - staticcrsgraph_type; - //! Type of column indices in the sparse matrix. - typedef typename staticcrsgraph_type::entries_type index_type; - //! Const version of the type of column indices in the sparse matrix. - typedef typename index_type::const_value_type const_ordinal_type; - //! Nonconst version of the type of column indices in the sparse matrix. - typedef typename index_type::non_const_value_type non_const_ordinal_type; - //! Type of the "row map" (which contains the offset for each row's data). - typedef typename staticcrsgraph_type::row_map_type row_map_type; - //! Const version of the type of row offsets in the sparse matrix. - typedef typename row_map_type::const_value_type const_size_type; - //! Nonconst version of the type of row offsets in the sparse matrix. - typedef typename row_map_type::non_const_value_type non_const_size_type; - //! Kokkos Array type of the entries (values) in the sparse matrix. - typedef Kokkos::View - values_type; - //! Const version of the type of the entries in the sparse matrix. - typedef typename values_type::const_value_type const_value_type; - //! Nonconst version of the type of the entries in the sparse matrix. - typedef typename values_type::non_const_value_type non_const_value_type; - - /// \name Storage of the actual sparsity structure and values. - /// - /// BlockCrsMatrix uses the compressed sparse row (CSR) storage format to - /// store the sparse matrix. CSR is also called "compressed row - /// storage"; hence the name, which it inherits from Tpetra and from - /// Epetra before it. - //@{ - //! The graph (sparsity structure) of the sparse matrix. - staticcrsgraph_type graph; - //! The 1-D array of values of the sparse matrix. - values_type values; - //@} - - /// \brief Launch configuration that can be used by - /// overloads/specializations of MV_multiply(). - /// - /// This is a hack and needs to be replaced by a general - /// state mechanism. - DeviceConfig dev_config; - - /// \brief Default constructor; constructs an empty sparse matrix. - /// - /// mfh: numCols and nnz should be properties of the graph, not the matrix. - /// Then BlockCrsMatrix needs methods to get these from the graph. - BlockCrsMatrix() : numCols_(0), blockDim_(0) {} - - //! Copy constructor (shallow copy). - template - BlockCrsMatrix(const BlockCrsMatrix& B) - : graph(B.graph.entries, B.graph.row_map), - values(B.values), - dev_config(B.dev_config), - numCols_(B.numCols()), - blockDim_(B.blockDim()) { - graph.row_block_offsets = B.graph.row_block_offsets; - // MD: Changed the copy constructor of graph - // as the constructor of StaticCrsGraph does not allow copy from non const - // version. - } - - /// \brief Construct with a graph that will be shared. - /// - /// \param[in] arg_label The sparse matrix's label. - /// \param[in] arg_graph The graph between the blocks. - /// \param[in] blockDimIn The block size. - /// - /// Allocate the values array for subsequent fill. - BlockCrsMatrix(const std::string& arg_label, - const staticcrsgraph_type& arg_graph, - const OrdinalType& blockDimIn) - : graph(arg_graph), - values(arg_label, - arg_graph.entries.extent(0) * blockDimIn * blockDimIn), - numCols_(maximum_entry(arg_graph) + 1), - blockDim_(blockDimIn) {} - - /// \brief Constructor that copies raw arrays of host data in - /// coordinate format. - /// - /// On input, each entry of the sparse matrix is stored in val[k], - /// with row index rows[k] and column index cols[k]. We assume that - /// the entries are sorted in increasing order by row index. - /// - /// This constructor is mainly useful for benchmarking or for - /// reading the sparse matrix's data from a file. - /// - /// \param label [in] The sparse matrix's label. - /// \param nrows [in] The number of rows. - /// \param ncols [in] The number of columns. - /// \param annz [in] The number of entries. - /// \param val [in] The entries. - /// \param rows [in] The row indices. rows[k] is the row index of - /// val[k]. - /// \param cols [in] The column indices. cols[k] is the column - /// index of val[k]. - /// \param pad [in] If true, pad the sparse matrix's storage with - /// zeros in order to improve cache alignment and / or - /// vectorization. - /// - /// The \c pad argument is currently not used. - BlockCrsMatrix(const std::string& label, OrdinalType nrows, OrdinalType ncols, - size_type annz, ScalarType* val, OrdinalType* rows, - OrdinalType* cols, OrdinalType blockdim, bool pad = false) { - (void)pad; - ctor_impl(label, nrows, ncols, annz, val, rows, cols, blockdim); - } - - /// \brief Constructor that accepts a row map, column indices, and - /// values. - /// - /// The matrix will store and use the row map, indices, and values - /// directly (by view, not by deep copy). - /// - /// \param label [in] The sparse matrix's label. - /// \param nrows [in] The number of rows. - /// \param ncols [in] The number of columns. - /// \param annz [in] The number of entries. - /// \param vals [in/out] The entries. - /// \param rows [in/out] The row map (containing the offsets to the - /// data in each row). - /// \param cols [in/out] The column indices. - BlockCrsMatrix(const std::string& /*label*/, const OrdinalType nrows, - const OrdinalType ncols, const size_type /*annz*/, - const values_type& vals, const row_map_type& rows, - const index_type& cols, const OrdinalType blockDimIn) - : graph(cols, rows), - values(vals), - numCols_(ncols), - blockDim_(blockDimIn) { - const ordinal_type actualNumRows = - (rows.extent(0) != 0) ? static_cast( - rows.extent(0) - static_cast(1)) - : static_cast(0); - if (nrows != actualNumRows) { - std::ostringstream os; - os << "Input argument nrows = " << nrows - << " != the actual number of " - "rows " - << actualNumRows << " according to the 'rows' input argument."; - throw std::invalid_argument(os.str()); - } - // nnz returns graph.entries.extent(0) i.e. ptr[ nrows + 1 ] nnz entry - // input annz is nnz of values, not comparable with block ptr 'nnz' i.e. - // numBlocks - if (blockDim_ <= 0) { - std::ostringstream os; - os << "Input argument blockDim = " << blockDim_ - << " is not larger than 0."; - throw std::invalid_argument(os.str()); - } - } - - /// \brief Constructor that accepts a a static graph, and values. - /// - /// The matrix will store and use the row map, indices, and values - /// directly (by view, not by deep copy). - /// - /// \param[in] label The sparse matrix's label. - /// \param[in] ncols The number of columns. - /// \param[in] vals The entries. - /// \param[in] graph_ The graph between the blocks. - /// \param[in] blockDimIn The block size. - BlockCrsMatrix(const std::string& /*label*/, const OrdinalType& ncols, - const values_type& vals, const staticcrsgraph_type& graph_, - const OrdinalType& blockDimIn) - : graph(graph_), values(vals), numCols_(ncols), blockDim_(blockDimIn) {} - - /// \brief Constructor that accepts a CrsMatrix and block dimension, - /// assuming the provided CrsMatrix has appropriate block structure. - template - BlockCrsMatrix(const KokkosSparse::CrsMatrix& crs_mtx, - const OrdinalType blockDimIn) { - typedef typename KokkosSparse::CrsMatrix - crs_matrix_type; - typedef typename crs_matrix_type::staticcrsgraph_type crs_graph_type; - typedef typename crs_graph_type::entries_type crs_graph_entries_type; - typedef typename crs_graph_type::row_map_type crs_graph_row_map_type; - - blockDim_ = blockDimIn; - numCols_ = crs_mtx.numCols() / blockDim_; - values = crs_mtx.values; - - OrdinalType nbrows = - crs_mtx.numRows() / - blockDim_; // actual number of block rows; add 1 for ptr length - - // block_rows will accumulate the number of blocks per row - this is NOT the - // row_map with cum sum!! - std::vector block_rows(nbrows, 0); - - typename crs_graph_row_map_type::HostMirror h_crs_row_map = - Kokkos::create_mirror_view(crs_mtx.graph.row_map); - Kokkos::deep_copy(h_crs_row_map, crs_mtx.graph.row_map); - typename crs_graph_entries_type::HostMirror h_crs_entries = - Kokkos::create_mirror_view(crs_mtx.graph.entries); - Kokkos::deep_copy(h_crs_entries, crs_mtx.graph.entries); - - // determine size of block cols indices == number of blocks, i.e. nnz for - // the block CRS graph - OrdinalType numBlocks = 0; - for (OrdinalType i = 0; i < crs_mtx.numRows(); i += blockDim_) { - numBlocks += - (h_crs_row_map(i + 1) - h_crs_row_map(i)) / blockDim_; // cum sum - block_rows[i / blockDim_] = (h_crs_row_map(i + 1) - h_crs_row_map(i)) / - blockDim_; // frequency counts - } - - // create_staticcrsgraph takes the frequency of blocks per row - // and returns the cum sum pointer row_map with nbrows+1 size, and total - // numBlocks in the final entry - graph = Kokkos::create_staticcrsgraph("blockgraph", - block_rows); - typename index_type::HostMirror h_entries = - Kokkos::create_mirror_view(graph.entries); - typename row_map_type::HostMirror h_rowmap = - Kokkos::create_mirror_view(graph.row_map); - - Kokkos::deep_copy(h_rowmap, graph.row_map); - - for (OrdinalType i = 0; i < nbrows; ++i) { - OrdinalType blks_in_row = block_rows[i]; - - OrdinalType offset_into_blkcolidx_start = h_rowmap(i); - OrdinalType offset_into_colidx_start = - offset_into_blkcolidx_start * blockDim_ * blockDim_; - - for (OrdinalType lidx = 0; lidx < blks_in_row; ++lidx) { - h_entries(offset_into_blkcolidx_start + lidx) = - h_crs_entries(offset_into_colidx_start + blockDim_ * lidx) / - blockDim_; - } - } - - Kokkos::deep_copy(graph.entries, h_entries); - } - - /// Declaration for ctor_impl - this member function is not inlined - void ctor_impl(const std::string& label, const OrdinalType nrows, - const OrdinalType ncols, const size_type annz, ScalarType* val, - OrdinalType* rows, OrdinalType* cols, - const OrdinalType blockDimIn); - - /// \brief Given an array of blocks, sum the values into corresponding - /// block in BlockCrsMatrix - /// \param rowi [in] is a block-row index - /// \param ncol [in] is number of blocks referenced in cols[] array - /// \param cols[] [in] are block colidxs within the block-row to be summed - /// into - /// ncol entries - /// \param vals[] [in] array containing 'block' of values - /// ncol*block_size*block_size entries - /// assume vals block is provided in 'LayoutRight' or 'Row Major' - /// format, that is e.g. 2x2 block [ a b ; c d ] provided as flattened - /// 1d array as [a b c d] Assume that each block is stored contiguously - /// in vals: [a b; c d] [e f; g h] -> [a b c d e f g h] If so, then i - /// in [0, ncols) for cols[] maps to i*block_size*block_size in vals[] - KOKKOS_INLINE_FUNCTION - OrdinalType sumIntoValues(const OrdinalType rowi, const OrdinalType cols[], - const OrdinalType ncol, const ScalarType vals[], - const bool is_sorted = false, - const bool force_atomic = false) const { - SparseBlockRowView row_view = this->block_row(rowi); - const ordinal_type block_size = this->blockDim(); - - ordinal_type numValid = 0; // number of valid local column indices - - for (ordinal_type i = 0; i < ncol; ++i) { - // Find offset into values for block-row rowi and colidx cols[i] - // cols[i] is the index to match - // blk_offset is the offset for block colidx from bptr[rowi] to bptr[rowi - // + 1] (not global offset) colidx_ and values_ are already offset to the - // beginning of blockrow rowi - auto blk_offset = row_view.findRelBlockOffset(cols[i], is_sorted); - if (blk_offset != Kokkos::Details::ArithTraits::max()) { - ordinal_type offset_into_vals = - i * block_size * - block_size; // stride == 1 assumed between elements - for (ordinal_type lrow = 0; lrow < block_size; ++lrow) { - auto local_row_values = row_view.local_row_in_block( - blk_offset, lrow); // pointer to start of specified local row - // within this block - for (ordinal_type lcol = 0; lcol < block_size; ++lcol) { - if (force_atomic) { - Kokkos::atomic_add( - &(local_row_values[lcol]), - vals[offset_into_vals + lrow * block_size + lcol]); - } else { - local_row_values[lcol] += - vals[offset_into_vals + lrow * block_size + lcol]; - } - } - } - ++numValid; - } - } // end for ncol - return numValid; - } - - /// \brief Given an array of blocks, replace the values of corresponding - /// blocks in BlockCrsMatrix - /// \param rowi [in] is a block-row index - /// \param ncol [in] is number of blocks referenced in cols[] array - /// \param cols[] [in] are block colidxs within the block-row to be summed - /// into - /// ncol entries - /// \param vals[] [in] array containing 'block' of values - // ncol*block_size*block_size entries - // assume vals block is provided in 'LayoutRight' or 'Row Major' - // format, that is e.g. 2x2 block [ a b ; c d ] provided as flattened - // 1d array as [a b c d] Assume that each block is stored contiguously - // in vals: [a b; c d] [e f; g h] -> [a b c d e f g h] If so, then i in - // [0, ncols) for cols[] maps to i*block_size*block_size in vals[] - KOKKOS_INLINE_FUNCTION - OrdinalType replaceValues(const OrdinalType rowi, const OrdinalType cols[], - const OrdinalType ncol, const ScalarType vals[], - const bool is_sorted = false, - const bool force_atomic = false) const { - SparseBlockRowView row_view = this->block_row(rowi); - const ordinal_type block_size = this->blockDim(); - - ordinal_type numValid = 0; // number of valid local column indices - - for (ordinal_type i = 0; i < ncol; ++i) { - // Find offset into values for block-row rowi and colidx cols[i] - // cols[i] is the index to match - // blk_offset is the offset for block colidx from bptr[rowi] to bptr[rowi - // + 1] (not global offset) colidx_ and values_ are already offset to the - // beginning of blockrow rowi - auto blk_offset = row_view.findRelBlockOffset(cols[i], is_sorted); - if (blk_offset != Kokkos::Details::ArithTraits::max()) { - ordinal_type offset_into_vals = - i * block_size * - block_size; // stride == 1 assumed between elements - for (ordinal_type lrow = 0; lrow < block_size; ++lrow) { - auto local_row_values = row_view.local_row_in_block( - blk_offset, lrow); // pointer to start of specified local row - // within this block - for (ordinal_type lcol = 0; lcol < block_size; ++lcol) { - if (force_atomic) { - Kokkos::atomic_assign( - &(local_row_values[lcol]), - vals[offset_into_vals + lrow * block_size + lcol]); - } else { - local_row_values[lcol] = - vals[offset_into_vals + lrow * block_size + lcol]; - } - } - } - ++numValid; - } - } // end for ncol - return numValid; - } - - //! Attempt to assign the input matrix to \c *this. - // Are the CUDA sparse handles needed to be copied here?? - template - BlockCrsMatrix& operator=( - const BlockCrsMatrix& mtx) { - numCols_ = mtx.numCols(); - blockDim_ = mtx.blockDim(); - graph = mtx.graph; - values = mtx.values; - dev_config = mtx.dev_config; - return *this; - } - - //! The number of rows in the sparse matrix. - KOKKOS_INLINE_FUNCTION ordinal_type numRows() const { - return graph.numRows(); - } - - //! The number of columns in the sparse matrix. - KOKKOS_INLINE_FUNCTION ordinal_type numCols() const { return numCols_; } - - //! The block dimension in the sparse block matrix. - KOKKOS_INLINE_FUNCTION ordinal_type blockDim() const { return blockDim_; } - - //! The number of "point" (non-block) rows in the matrix. - // This is the dimension of the range of this matrix as a linear operator. - KOKKOS_INLINE_FUNCTION ordinal_type numPointRows() const { - return numRows() * blockDim(); - } - - //! The number of "point" (non-block) columns in the matrix. - // This is the dimension of the domain of this matrix as a linear operator. - KOKKOS_INLINE_FUNCTION ordinal_type numPointCols() const { - return numCols() * blockDim(); - } - - //! The number of stored entries in the sparse matrix. - KOKKOS_INLINE_FUNCTION size_type nnz() const { - return graph.entries.extent(0); - } - - friend struct SparseBlockRowView; - - /// \brief Return a SparseBlockRowView of block-row i of the matrix. - /// - /// If row i does not belong to the matrix, return an empty view. - /// - /// The returned object \c view implements the following interface: - ///
    - ///
  • \c view.length is the number of entries (i.e. blocks) - /// in the block row
  • - ///
  • \c view.local_row_in_block_row(K, i) returns a nonconst pointer - /// to the values of the ith local row in the k-th block of the block-row - ///
  • - ///
  • \c view.full_row_in_block_row(i) returns a nonconst pointer - /// to the values of the ith local row of the block-row
  • - ///
  • \c view.local_block_value(K, i, j) returns a nonconst reference - /// to the value in the ith local row and jth local col - /// of the k-th block of the block-row
  • - ///
  • \c view.block(K) returns an unmanaged 2D strided Kokkos::View - /// of the values of the k-th block of the block-row
  • - ///
- /// - /// Users should not rely on the return type of this method. They - /// should instead assign to 'auto'. - /// - KOKKOS_INLINE_FUNCTION - SparseBlockRowView block_row(const ordinal_type i) const { - const size_type start = - graph.row_map(i); // total num blocks prior to this block-row - const ordinal_type count = static_cast( - graph.row_map(i + 1) - start); // num blocks in this row - - if (count == 0) { - return SparseBlockRowView(nullptr, nullptr, 1, 0); - } else { - return SparseBlockRowView(values, graph.entries, - blockDim(), count, start); - } - } - - /// \brief Return a SparseBlockRowViewConst of block-row i of the matrix. - /// - /// If row i does not belong to the matrix, return an empty view. - /// - /// The returned object \c view implements the following interface: - ///
    - ///
  • \c view.length is the number of entries (i.e. blocks) - /// in the block row
  • - ///
  • \c view.local_row_in_block_row(K, i) returns a nonconst pointer - /// to the values of the ith local row in the k-th block of the block-row - ///
  • - ///
  • \c view.full_row_in_block_row(i) returns a nonconst pointer - /// to the values of the ith local row of the block-row
  • - ///
  • \c view.local_block_value(K, i, j) returns a nonconst reference - /// to the value in the ith local row and jth local col - /// of the k-th block of the block-row
  • - ///
  • \c view.block(K) returns an unmanaged 2D strided Kokkos::View - /// of the values of the k-th block of the block-row
  • - ///
- /// - /// Users should not rely on the return type of this method. They - /// should instead assign to 'auto'. - /// - KOKKOS_INLINE_FUNCTION - SparseBlockRowViewConst block_row_Const( - const ordinal_type i) const { - const size_type start = - graph.row_map(i); // total num blocks prior to this block-row - const ordinal_type count = static_cast( - graph.row_map(i + 1) - start); // num blocks in this row - - if (count == 0) { - return SparseBlockRowViewConst(nullptr, nullptr, 1, 0); - } else { - return SparseBlockRowViewConst(values, graph.entries, - blockDim(), count, start); - } - } - - private: - ordinal_type numCols_; - ordinal_type blockDim_; // TODO Assuming square blocks for now - add - // blockRowDim, blockColDim -}; - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -// Input assumptions: -// rows is pointer rep for the row_map member View of the BlockCrsMatrix graph -// (i.e. cum sum of number of blocks per block-row) cols is pointer rep for -// the entries member View of the BlockCrsMatrix graph (colidx for block-row -// blocks) annz is the total number of non-zeros in the CrsMatrix (equal to -// blockDim*blockDim*numBlocks) -template -void BlockCrsMatrix::ctor_impl(const std::string& /*label*/, - const OrdinalType nrows, - const OrdinalType ncols, - const size_type annz, ScalarType* val, - OrdinalType* rows, OrdinalType* cols, - const OrdinalType blockDimIn) { - numCols_ = ncols; - blockDim_ = blockDimIn; - - // Wrap the raw pointers in unmanaged host Views - typename values_type::HostMirror unman_val(val, annz); - typename row_map_type::HostMirror unman_rows(rows, nrows + 1); - typename index_type::HostMirror unman_cols(cols, ncols); - - // Create temporary Views for row_map and entries because the StaticCrsGraph - // ctor requires View inputs - values_type tmp_row_map("tmp_row_map", nrows + 1); - values_type tmp_entries("tmp_entries", ncols); - - Kokkos::deep_copy(val, unman_val); - Kokkos::deep_copy(tmp_row_map, unman_rows); - Kokkos::deep_copy(tmp_entries, unman_cols); - - // Initialize graph using the temp entries and row_map Views - graph = staticcrsgraph_type(tmp_entries, tmp_row_map); -} - -/// \class is_block_crs_matrix -/// \brief is_block_crs_matrix::value is true if T is a BlockCrsMatrix<...>, -/// false oterhwise -template -struct is_block_crs_matrix : public std::false_type {}; -template -struct is_block_crs_matrix> : public std::true_type {}; -template -struct is_block_crs_matrix> : public std::true_type { -}; - -} // namespace Experimental -} // namespace KokkosSparse - -#endif diff --git a/src/sparse/KokkosSparse_Utils.hpp b/src/sparse/KokkosSparse_Utils.hpp index 007b2aea85..e8f7fca72d 100644 --- a/src/sparse/KokkosSparse_Utils.hpp +++ b/src/sparse/KokkosSparse_Utils.hpp @@ -43,14 +43,14 @@ */ #ifndef _KOKKOSKERNELS_SPARSEUTILS_HPP #define _KOKKOSKERNELS_SPARSEUTILS_HPP +#include + #include "Kokkos_Core.hpp" #include "KokkosKernels_SimpleUtils.hpp" #include "KokkosKernels_IOUtils.hpp" #include "KokkosKernels_ExecSpaceUtils.hpp" -#include #include "KokkosKernels_PrintUtils.hpp" #include "KokkosSparse_CrsMatrix.hpp" -#include "KokkosSparse_BlockCrsMatrix.hpp" #include "KokkosSparse_BsrMatrix.hpp" #ifdef KOKKOSKERNELS_HAVE_PARALLEL_GNUSORT @@ -59,25 +59,23 @@ namespace KokkosSparse { -enum SparseMatrixFormat { - BlockCRS, +enum class SparseMatrixFormat { BSR, - CRS = BlockCRS, // convenience alias: for block_size=1 or no-blocks there is - // no difference in value ordering (so the format tag becomes - // irrelevant) + CRS, }; namespace Impl { +/* create a block-sparse version of a CrsMatrix + */ template -void kk_create_blockcrs_formatted_point_crsmatrix( +void kk_create_bsr_formated_point_crsmatrix( int block_size, size_t num_rows, size_t num_cols, in_row_view_t in_xadj, - in_nnz_view_t in_adj, in_val_view_t in_vals, - - size_t &out_num_rows, size_t &out_num_cols, out_row_view_t &out_xadj, - out_nnz_view_t &out_adj, out_val_view_t &out_vals) { + in_nnz_view_t in_adj, in_val_view_t in_vals, size_t &out_num_rows, + size_t &out_num_cols, out_row_view_t &out_xadj, out_nnz_view_t &out_adj, + out_val_view_t &out_vals) { typedef typename in_nnz_view_t::non_const_value_type lno_t; typedef typename in_row_view_t::non_const_value_type size_type; typedef typename in_val_view_t::non_const_value_type scalar_t; @@ -103,13 +101,13 @@ void kk_create_blockcrs_formatted_point_crsmatrix( std::vector block_accumulators(out_num_cols, 0); std::vector block_flags(out_num_cols, false); + // loop over first rows of each block-row for (lno_t i = 0; i < lno_t(num_rows); i += block_size) { - // std::cout << "row:" << i << std::endl; lno_t outputrowsize = 0; + // loop over rows in block for (lno_t block_ind = 0; block_ind < block_size; ++block_ind) { - lno_t row_ind = block_ind + i; - // std::cout << "\nrow_ind:" << row_ind << std::endl; + const lno_t row_ind = block_ind + i; if (row_ind < lno_t(num_rows)) { size_type adj_begin = hr(row_ind); size_type adj_end = hr(row_ind + 1); @@ -216,73 +214,74 @@ void kk_create_blockcrs_formatted_point_crsmatrix( Kokkos::deep_copy(out_vals, hov); } -template -void kk_create_blockcrs_from_blockcrs_formatted_point_crs( - int block_size, size_t num_rows, size_t num_cols, in_row_view_t in_xadj, - in_nnz_view_t in_adj, in_val_view_t in_vals, - - size_t &out_num_rows, size_t &out_num_cols, out_row_view_t &out_xadj, - out_nnz_view_t &out_adj, out_val_view_t &out_vals) { - typename in_row_view_t::HostMirror hr = Kokkos::create_mirror_view(in_xadj); - Kokkos::deep_copy(hr, in_xadj); - typename in_nnz_view_t::HostMirror he = Kokkos::create_mirror_view(in_adj); - Kokkos::deep_copy(he, in_adj); - typename in_val_view_t::HostMirror hv = Kokkos::create_mirror_view(in_vals); - Kokkos::deep_copy(hv, in_vals); - - out_num_rows = num_rows / block_size; - out_num_cols = num_cols / block_size; - - out_xadj = out_row_view_t("BlockedCRS XADJ", out_num_rows + 1); - out_adj = out_nnz_view_t("BlockedCRS ADJ", - in_adj.extent(0) / (block_size * block_size)); - out_vals = out_val_view_t("BlockedCRS VALS", in_vals.extent(0)); - - typename out_row_view_t::HostMirror hor = - Kokkos::create_mirror_view(out_xadj); - typename out_nnz_view_t::HostMirror hoe = Kokkos::create_mirror_view(out_adj); - typename out_val_view_t::HostMirror hov = - Kokkos::create_mirror_view(out_vals); - - typedef typename in_nnz_view_t::non_const_value_type lno_t; - typedef typename in_row_view_t::non_const_value_type size_type; - // typedef typename in_val_view_t::non_const_value_type scalar_t; +/* can be used in a parallel for to copy between compatible views + */ +template +struct ViewConverter { + ViewConverter(const T &_dst, const U &_src) : dst(_dst), src(_src) {} + KOKKOS_INLINE_FUNCTION void operator()(size_t i) const { dst[i] = src[i]; } + T dst; + U src; +}; - for (lno_t i = 0; i < lno_t(out_num_rows); ++i) { - hor(i) = hr(i * block_size) / (block_size * block_size); +/* Create output row pointer, col index, and value arrays + for BSR-format data from CRS data consistent with BSR format - size_type ib = hr(i * block_size); - size_type ie = hr(i * block_size + 1); +*/ +template +void kk_create_bsr_from_bsr_formatted_point_crs( + int block_size, size_t num_rows, size_t num_cols, + in_row_view_t in_xadj, // row pointer (CrsMatrix::graph.row_map) + in_nnz_view_t in_adj, // col index (CrsMatrix::graph.entries) + in_val_view_t in_vals, // values CrsMatrix::values + size_t &out_num_rows, // rows of blocks in output + size_t &out_num_cols, // cols of blocks in output + out_row_view_t &out_xadj, out_nnz_view_t &out_adj, + out_val_view_t &out_vals) { + typedef typename in_nnz_view_t::non_const_value_type in_ordinal_type; + typedef typename in_val_view_t::non_const_value_type in_scalar_type; + typedef typename in_nnz_view_t::device_type in_device_type; + typedef typename out_nnz_view_t::non_const_value_type out_ordinal_type; + typedef typename out_val_view_t::non_const_value_type out_scalar_type; + typedef typename out_nnz_view_t::device_type out_device_type; + + // in_row_view_t and out_row_view_t may not be the same, so use ViewConverter + // to do the conversion + typedef KokkosSparse::CrsMatrix + InMatrix; + typedef KokkosSparse::Experimental::BsrMatrix< + out_scalar_type, out_ordinal_type, out_device_type> + OutMatrix; + + // in_rowmap <- in_xadj + Kokkos::View + in_rowmap("", in_xadj.size()); + Kokkos::parallel_for( + "", in_xadj.size(), + ViewConverter(in_rowmap, in_xadj)); - lno_t is = ie - ib; + // reconstruct original CrsMatrix + InMatrix in("", num_rows, num_cols, in_vals.size(), in_vals, in_rowmap, + in_adj); - size_type ob = hor(i); - // size_type oe = hr(i * block_size + 1) / block_size; - lno_t os = (ie - ib) / block_size; - lno_t write_index = 0; - for (lno_t j = 0; j < is; ++j) { - lno_t e = he(ib + j); - if (e % block_size == 0) { - hoe(ob + write_index++) = e / block_size; - } - } - if (write_index != os) { - std::cerr << "row:" << i << " expected size:" << os - << " written size:" << write_index << std::endl; - exit(1); - } - } - hor(out_num_rows) = hr(out_num_rows * block_size) / (block_size * block_size); - Kokkos::deep_copy(out_xadj, hor); - Kokkos::deep_copy(out_adj, hoe); + // convert to BsrMatrix + OutMatrix out(in, block_size); - size_type ne = in_adj.extent(0); - for (size_type i = 0; i < ne; ++i) { - hov(i) = hv(i); - } - Kokkos::deep_copy(out_vals, hov); + // out_xadj <- out.graph.row_map + Kokkos::resize(out_xadj, out.graph.row_map.size()); + Kokkos::parallel_for( + "", out_xadj.size(), + ViewConverter( + out_xadj, out.graph.row_map)); + + out_adj = out.graph.entries; + out_vals = out.values; + out_num_rows = out.numRows(); + out_num_cols = out.numCols(); } template class RowIndexBase { @@ -1978,11 +1977,20 @@ class RowIndexBase { lno_t row_size; }; +/* The only use of this is in Sparse Gauss Seidel, which is only implemented + for BSR and CRS, which are identical when block size is 1 + +*/ template class MatrixRowIndex; +/* CWP August 11 2022 + This is pretty much the old BlockCRS one, but + Should be able to create a specialized version of this for CRS because block + size is 1 +*/ template -class MatrixRowIndex +class MatrixRowIndex : public RowIndexBase { public: using Base = RowIndexBase; @@ -2008,7 +2016,7 @@ class MatrixRowIndex }; template -class MatrixRowIndex +class MatrixRowIndex : public RowIndexBase { public: using Base = RowIndexBase; @@ -2040,49 +2048,26 @@ template struct MatrixTraits< KokkosSparse::CrsMatrix> { - static constexpr auto format = KokkosSparse::CRS; -}; - -template -struct MatrixTraits> { - static constexpr auto format = KokkosSparse::BlockCRS; + static constexpr auto format = KokkosSparse::SparseMatrixFormat::CRS; }; template struct MatrixTraits> { - static constexpr auto format = KokkosSparse::BSR; + static constexpr auto format = KokkosSparse::SparseMatrixFormat::BSR; }; template struct MatrixConverter; template <> -struct MatrixConverter { - template < - typename scalar_t, typename lno_t, typename device, typename size_type, - typename crsMat_t = - KokkosSparse::CrsMatrix, - typename blockCrsMat_t = KokkosSparse::Experimental::BlockCrsMatrix< - scalar_t, lno_t, device, void, size_type>> - static blockCrsMat_t from_blockcrs_formatted_point_crsmatrix( - const KokkosSparse::CrsMatrix - &mtx, - lno_t block_size) { - return blockCrsMat_t(mtx, block_size); - } -}; - -template <> -struct MatrixConverter { +struct MatrixConverter { template > - static bsrMtx_t from_blockcrs_formatted_point_crsmatrix( + static bsrMtx_t from_bsr_formated_point_crsmatrix( const KokkosSparse::CrsMatrix &mtx, lno_t block_size) { @@ -2093,15 +2078,4 @@ struct MatrixConverter { } // namespace Impl } // namespace KokkosSparse -namespace KokkosKernels { - -enum [[deprecated]] SparseMatrixFormat{ - BlockCRS, BSR, - CRS = BlockCRS, // convenience alias: for block_size=1 or no-blocks there - // is no difference in value ordering (so the format tag - // becomes irrelevant) -}; - -} // namespace KokkosKernels - #endif diff --git a/src/sparse/KokkosSparse_gauss_seidel.hpp b/src/sparse/KokkosSparse_gauss_seidel.hpp index 1df960860b..38e028a9a7 100644 --- a/src/sparse/KokkosSparse_gauss_seidel.hpp +++ b/src/sparse/KokkosSparse_gauss_seidel.hpp @@ -132,7 +132,8 @@ void block_gauss_seidel_symbolic( is_graph_symmetric); } -template void gauss_seidel_numeric(KernelHandle *handle, @@ -207,7 +208,8 @@ void gauss_seidel_numeric(KernelHandle *handle, is_graph_symmetric); } -template void gauss_seidel_numeric(KernelHandle *handle, @@ -286,7 +288,8 @@ void gauss_seidel_numeric(KernelHandle *handle, is_graph_symmetric); } -template void block_gauss_seidel_numeric( @@ -307,7 +310,8 @@ void block_gauss_seidel_numeric( values, is_graph_symmetric); } -template @@ -437,7 +441,8 @@ void symmetric_gauss_seidel_apply( update_y_vector, omega, numIter, true, true); } -template @@ -471,7 +476,8 @@ void symmetric_block_gauss_seidel_apply( handle, num_rows, num_cols, row_map, entries, values, x_lhs_output_vec, y_rhs_input_vec, init_zero_x_vector, update_y_vector, omega, numIter); } -template @@ -603,7 +609,8 @@ void forward_sweep_gauss_seidel_apply( update_y_vector, omega, numIter, true, false); } -template @@ -637,7 +644,8 @@ void forward_sweep_block_gauss_seidel_apply( handle, num_rows, num_cols, row_map, entries, values, x_lhs_output_vec, y_rhs_input_vec, init_zero_x_vector, update_y_vector, omega, numIter); } -template @@ -769,7 +777,8 @@ void backward_sweep_gauss_seidel_apply( update_y_vector, omega, numIter, false, true); } -template diff --git a/src/sparse/KokkosSparse_spmv.hpp b/src/sparse/KokkosSparse_spmv.hpp index 95860029f1..a95ae4fe90 100644 --- a/src/sparse/KokkosSparse_spmv.hpp +++ b/src/sparse/KokkosSparse_spmv.hpp @@ -53,12 +53,10 @@ #include "KokkosKernels_Controls.hpp" #include "KokkosSparse_spmv_spec.hpp" #include "KokkosSparse_spmv_struct_spec.hpp" -#include "KokkosSparse_spmv_blockcrsmatrix_spec.hpp" #include "KokkosSparse_spmv_bsrmatrix_spec.hpp" #include #include "KokkosSparse_BsrMatrix.hpp" #include "KokkosSparse_CrsMatrix.hpp" -#include "KokkosSparse_BlockCrsMatrix.hpp" #include "KokkosBlas1_scal.hpp" #include "KokkosKernels_Utils.hpp" #include "KokkosKernels_Error.hpp" @@ -74,8 +72,7 @@ struct RANK_TWO {}; /// vector /// /// -/// \tparam AMatrix A KokkosSparse::CrsMatrix, KokkosSparse::BlockCrsMatrix or -/// KokkosSparse::BsrMatrix +/// \tparam AMatrix A KokkosSparse::CrsMatrix, or KokkosSparse::BsrMatrix /// /// \param controls [in] kokkos-kernels control structure. /// \param mode [in] @@ -255,122 +252,6 @@ void spmv(KokkosKernels::Experimental::Controls controls, const char mode[], } } -#ifdef DOXY // hide SFINAE from documentation -template -#else -template < - class AlphaType, class AMatrix, class XVector, class BetaType, - class YVector, - typename std::enable_if::value>::type* = nullptr> -#endif -void spmv(KokkosKernels::Experimental::Controls controls, const char mode[], - const AlphaType& alpha, const AMatrix& A, const XVector& x, - const BetaType& beta, const YVector& y, const RANK_ONE) { - // Make sure that x and y have the same rank. - static_assert( - static_cast(XVector::rank) == static_cast(YVector::rank), - "KokkosSparse::spmv: Vector ranks do not match."); - // Make sure that x (and therefore y) is rank 1. - static_assert(static_cast(XVector::rank) == 1, - "KokkosSparse::spmv: Both Vector inputs must have rank 1 " - "in order to call this specialization of spmv."); - // Make sure that y is non-const. - static_assert(std::is_same::value, - "KokkosSparse::spmv: Output Vector must be non-const."); - // - if (A.blockDim() == 1) { - KokkosSparse::CrsMatrix< - typename AMatrix::value_type, typename AMatrix::ordinal_type, - typename AMatrix::device_type, Kokkos::MemoryTraits, - typename AMatrix::size_type> - Acrs("bsr_to_crs", A.numCols(), A.values, A.graph); - KokkosSparse::spmv(controls, mode, alpha, Acrs, x, beta, y, RANK_ONE()); - return; - } - // Check compatibility of dimensions at run time. - if ((mode[0] == NoTranspose[0]) || (mode[0] == Conjugate[0])) { - if ((x.extent(1) != y.extent(1)) || - (static_cast(A.numCols() * A.blockDim()) != - static_cast(x.extent(0))) || - (static_cast(A.numRows() * A.blockDim()) != - static_cast(y.extent(0)))) { - std::ostringstream os; - os << "KokkosSparse::spmv (BlockCrsMatrix): Dimensions do not match: " - << ", A: " << A.numRows() * A.blockDim() << " x " - << A.numCols() * A.blockDim() << ", x: " << x.extent(0) << " x " - << x.extent(1) << ", y: " << y.extent(0) << " x " << y.extent(1); - - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - } else { - if ((x.extent(1) != y.extent(1)) || - (static_cast(A.numCols() * A.blockDim()) != - static_cast(y.extent(0))) || - (static_cast(A.numRows() * A.blockDim()) != - static_cast(x.extent(0)))) { - std::ostringstream os; - os << "KokkosSparse::spmv (BlockCrsMatrix): Dimensions do not match " - "(transpose): " - << ", A: " << A.numRows() * A.blockDim() << " x " - << A.numCols() * A.blockDim() << ", x: " << x.extent(0) << " x " - << x.extent(1) << ", y: " << y.extent(0) << " x " << y.extent(1); - - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - } - // - typedef KokkosSparse::Experimental::BlockCrsMatrix< - typename AMatrix::const_value_type, typename AMatrix::const_ordinal_type, - typename AMatrix::device_type, Kokkos::MemoryTraits, - typename AMatrix::const_size_type> - AMatrix_Internal; - - typedef Kokkos::View< - typename XVector::const_value_type*, - typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, - typename XVector::device_type, - Kokkos::MemoryTraits > - XVector_Internal; - - typedef Kokkos::View< - typename YVector::non_const_value_type*, - typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, - typename YVector::device_type, Kokkos::MemoryTraits > - YVector_Internal; - - AMatrix_Internal A_i(A); - XVector_Internal x_i(x); - YVector_Internal y_i(y); - -#define __SPMV_TYPES__ \ - typename AMatrix_Internal::const_value_type, \ - typename AMatrix_Internal::const_ordinal_type, \ - typename AMatrix_Internal::device_type, \ - typename AMatrix_Internal::memory_traits, \ - typename AMatrix_Internal::const_size_type, \ - typename XVector_Internal::const_value_type*, \ - typename XVector_Internal::array_layout, \ - typename XVector_Internal::device_type, \ - typename XVector_Internal::memory_traits, \ - typename YVector_Internal::value_type*, \ - typename YVector_Internal::array_layout, \ - typename YVector_Internal::device_type, \ - typename YVector_Internal::memory_traits - - constexpr bool eti_spec_avail = - KokkosSparse::Experimental::Impl::spmv_blockcrsmatrix_eti_spec_avail< - __SPMV_TYPES__>::value; - - Experimental::Impl::SPMV_BLOCKCRSMATRIX< - __SPMV_TYPES__, eti_spec_avail>::spmv_blockcrsmatrix(controls, mode, - alpha, A_i, x_i, - beta, y_i); -#undef __SPMV_TYPES__ -} - #ifdef DOXY // hide SFINAE template @@ -641,8 +522,7 @@ struct SPMV2D1D -#else -template < - class AlphaType, class AMatrix, class XVector, class BetaType, - class YVector, - typename std::enable_if::value>::type* = nullptr> -#endif -void spmv(KokkosKernels::Experimental::Controls controls, const char mode[], - const AlphaType& alpha, const AMatrix& A, const XVector& x, - const BetaType& beta, const YVector& y, const RANK_TWO) { - // Make sure that x and y have the same rank. - static_assert( - static_cast(XVector::rank) == static_cast(YVector::rank), - "KokkosSparse::spmv: Vector ranks do not match."); - // Make sure that x (and therefore y) is rank 2. - static_assert(static_cast(XVector::rank) == 2, - "KokkosSparse::spmv: Both Vector inputs must have rank 2 " - "in order to call this specialization of spmv."); - // Make sure that y is non-const. - static_assert(std::is_same::value, - "KokkosSparse::spmv: Output Vector must be non-const."); - - if (A.blockDim() == 1) { - KokkosSparse::CrsMatrix< - typename AMatrix::value_type, typename AMatrix::ordinal_type, - typename AMatrix::device_type, Kokkos::MemoryTraits, - typename AMatrix::size_type> - Acrs("blockcrs_to_crs", A.numCols(), A.values, A.graph); - KokkosSparse::spmv(controls, mode, alpha, Acrs, x, beta, y, RANK_TWO()); - return; - } - // Check compatibility of dimensions at run time. - if ((mode[0] == NoTranspose[0]) || (mode[0] == Conjugate[0])) { - if ((x.extent(1) != y.extent(1)) || - (static_cast(A.numCols() * A.blockDim()) != - static_cast(x.extent(0))) || - (static_cast(A.numRows() * A.blockDim()) != - static_cast(y.extent(0)))) { - std::ostringstream os; - os << "KokkosSparse::spmv (BlockCrsMatrix): Dimensions do not match: " - << ", A: " << A.numRows() * A.blockDim() << " x " - << A.numCols() * A.blockDim() << ", x: " << x.extent(0) << " x " - << x.extent(1) << ", y: " << y.extent(0) << " x " << y.extent(1); - - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - } else { - if ((x.extent(1) != y.extent(1)) || - (static_cast(A.numCols() * A.blockDim()) != - static_cast(y.extent(0))) || - (static_cast(A.numRows() * A.blockDim()) != - static_cast(x.extent(0)))) { - std::ostringstream os; - os << "KokkosSparse::spmv (BlockCrsMatrix): Dimensions do not match " - "(transpose): " - << ", A: " << A.numRows() * A.blockDim() << " x " - << A.numCols() * A.blockDim() << ", x: " << x.extent(0) << " x " - << x.extent(1) << ", y: " << y.extent(0) << " x " << y.extent(1); - - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - } - // - typedef KokkosSparse::Experimental::BlockCrsMatrix< - typename AMatrix::const_value_type, typename AMatrix::const_ordinal_type, - typename AMatrix::device_type, Kokkos::MemoryTraits, - typename AMatrix::const_size_type> - AMatrix_Internal; - AMatrix_Internal A_i(A); - - typedef Kokkos::View< - typename XVector::const_value_type**, - typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, - typename XVector::device_type, - Kokkos::MemoryTraits > - XVector_Internal; - XVector_Internal x_i(x); - - typedef Kokkos::View< - typename YVector::non_const_value_type**, - typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, - typename YVector::device_type, Kokkos::MemoryTraits > - YVector_Internal; - YVector_Internal y_i(y); - // - // - // Call single-vector version if appropriate - // - if (x.extent(1) == 1) { - typedef Kokkos::View< - typename XVector::const_value_type*, - typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, - typename XVector::device_type, - Kokkos::MemoryTraits > - XVector_SubInternal; - typedef Kokkos::View< - typename YVector::non_const_value_type*, - typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, - typename YVector::device_type, Kokkos::MemoryTraits > - YVector_SubInternal; - - XVector_SubInternal x_0 = Kokkos::subview(x_i, Kokkos::ALL(), 0); - YVector_SubInternal y_0 = Kokkos::subview(y_i, Kokkos::ALL(), 0); - - return spmv(controls, mode, alpha, A_i, x_0, beta, y_0, RANK_ONE()); - } - // - return Experimental::Impl::SPMV_MV_BLOCKCRSMATRIX< - typename AMatrix_Internal::const_value_type, - typename AMatrix_Internal::const_ordinal_type, - typename AMatrix_Internal::device_type, - typename AMatrix_Internal::memory_traits, - typename AMatrix_Internal::const_size_type, - typename XVector_Internal::const_value_type**, - typename XVector_Internal::array_layout, - typename XVector_Internal::device_type, - typename XVector_Internal::memory_traits, - typename YVector_Internal::value_type**, - typename YVector_Internal::array_layout, - typename YVector_Internal::device_type, - typename YVector_Internal::memory_traits>:: - spmv_mv_blockcrsmatrix(controls, mode, alpha, A_i, x_i, beta, y_i); -} - /// \brief Public interface to local sparse matrix-vector multiply. /// /// Compute y = beta*y + alpha*Op(A)*x, where x and y are either both @@ -1144,8 +896,7 @@ void spmv(KokkosKernels::Experimental::Controls controls, const char mode[], /// enabled for Kokkos::CrsMatrix and Kokkos::Experimental::BsrMatrix on a /// single vector, or for Kokkos::Experimental::BsrMatrix with a multivector. /// -/// \tparam AMatrix KokkosSparse::CrsMatrix, -/// KokkosSparse::Experimental::BlockCrsMatrix, or +/// \tparam AMatrix KokkosSparse::CrsMatrix or /// KokkosSparse::Experimental::BsrMatrix /// /// \param controls [in] kokkos-kernels control structure @@ -1228,26 +979,22 @@ void spmv(KokkosKernels::Experimental::Controls controls, const char mode[], /// argument types /// /// This is a catch-all interfaceace that throws a compile-time error if \c -/// AMatrix is not a CrsMatrix, BsrMatrix, or BlockCrsMatrix +/// AMatrix is not a CrsMatrix, or BsrMatrix /// -template < - class AlphaType, class AMatrix, class XVector, class BetaType, - class YVector, - typename std::enable_if< - !KokkosSparse::Experimental::is_block_crs_matrix::value && - !KokkosSparse::Experimental::is_bsr_matrix::value && - !KokkosSparse::is_crs_matrix::value>::type* = nullptr> +template ::value && + !KokkosSparse::is_crs_matrix::value>::type* = nullptr> void spmv(KokkosKernels::Experimental::Controls /*controls*/, const char[] /*mode*/, const AlphaType& /*alpha*/, const AMatrix& /*A*/, const XVector& /*x*/, const BetaType& /*beta*/, const YVector& /*y*/) { // have to arrange this so that the compiler can't tell this is false until // instantiation - static_assert( - KokkosSparse::is_crs_matrix::value || - KokkosSparse::Experimental::is_bsr_matrix::value || - KokkosSparse::Experimental::is_block_crs_matrix::value, - "SpMV: AMatrix must be CrsMatrix, BsrMatrix, or BlockCrsMatrix"); + static_assert(KokkosSparse::is_crs_matrix::value || + KokkosSparse::Experimental::is_bsr_matrix::value, + "SpMV: AMatrix must be CrsMatrix or BsrMatrix"); } // Overload for backward compatibility and also just simpler diff --git a/src/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp b/src/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp index 137b75b3f7..313e398620 100644 --- a/src/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp +++ b/src/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp @@ -63,7 +63,8 @@ namespace Impl { template + KokkosSparse::SparseMatrixFormat format = + KokkosSparse::SparseMatrixFormat::CRS> class PointGaussSeidel { public: typedef lno_row_view_t_ in_lno_row_view_t; diff --git a/src/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp b/src/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp index 5af78f96c5..0681138960 100644 --- a/src/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp +++ b/src/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp @@ -383,6 +383,22 @@ struct GAUSS_SEIDEL_APPLY, \ + KokkosSparse::SparseMatrixFormat::BSR, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + false, true>; \ + extern template struct GAUSS_SEIDEL_NUMERIC< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, SLOW_MEM_SPACE>, \ + KokkosSparse::SparseMatrixFormat::CRS, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ @@ -401,7 +417,7 @@ struct GAUSS_SEIDEL_APPLY, \ - KokkosSparse::BlockCRS, \ + KokkosSparse::SparseMatrixFormat::BSR, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ @@ -416,7 +432,7 @@ struct GAUSS_SEIDEL_APPLY, \ - KokkosSparse::BSR, \ + KokkosSparse::SparseMatrixFormat::CRS, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ @@ -435,7 +451,7 @@ struct GAUSS_SEIDEL_APPLY, \ - KokkosSparse::BlockCRS, \ + KokkosSparse::SparseMatrixFormat::BSR, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ @@ -456,7 +472,7 @@ struct GAUSS_SEIDEL_APPLY, \ - KokkosSparse::BSR, \ + KokkosSparse::SparseMatrixFormat::CRS, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ @@ -481,7 +497,7 @@ struct GAUSS_SEIDEL_APPLY, \ - KokkosSparse::BlockCRS, \ + KokkosSparse::SparseMatrixFormat::BSR, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ @@ -502,7 +518,7 @@ struct GAUSS_SEIDEL_APPLY, \ - KokkosSparse::BSR, \ + KokkosSparse::SparseMatrixFormat::CRS, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ diff --git a/src/sparse/impl/KokkosSparse_spmv_blockcrsmatrix_impl.hpp b/src/sparse/impl/KokkosSparse_spmv_blockcrsmatrix_impl.hpp deleted file mode 100644 index 36f0f80dd6..0000000000 --- a/src/sparse/impl/KokkosSparse_spmv_blockcrsmatrix_impl.hpp +++ /dev/null @@ -1,1179 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOSKERNELS_KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_IMPL_HPP -#define KOKKOSKERNELS_KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_IMPL_HPP - -#include "KokkosBlas.hpp" -#include "KokkosBlas2_serial_gemv_internal.hpp" -#include "KokkosBatched_Gemm_Serial_Internal.hpp" -#include "KokkosKernels_ExecSpaceUtils.hpp" -#include "KokkosSparse_spmv_impl.hpp" - -namespace KokkosSparse { -namespace Experimental { -namespace Impl { -namespace BCRS { - -template -struct BCRS_GEMV_Functor { - typedef typename AMatrix::execution_space execution_space; - typedef typename AMatrix::non_const_value_type value_type; - typedef typename Kokkos::TeamPolicy team_policy; - typedef typename team_policy::member_type team_member; - typedef Kokkos::Details::ArithTraits ATV; - - //! Nonconst version of the type of column indices in the sparse matrix. - typedef typename AMatrix::non_const_ordinal_type ordinal_type; - //! Nonconst version of the type of row offsets in the sparse matrix. - typedef typename AMatrix::non_const_size_type size_type; - - const value_type alpha; - AMatrix m_A; - XVector m_x; - YVector m_y; - - const ordinal_type block_dim; - const ordinal_type blocks_per_team; - - bool conjugate = false; - - BCRS_GEMV_Functor(const value_type alpha_, const AMatrix m_A_, - const XVector m_x_, const YVector m_y_, - const int blocks_per_team_, bool conj_) - : alpha(alpha_), - m_A(m_A_), - m_x(m_x_), - m_y(m_y_), - block_dim(m_A_.blockDim()), - blocks_per_team(blocks_per_team_), - conjugate(conj_) { - static_assert(static_cast(XVector::rank) == 1, - "XVector must be a rank 1 View."); - static_assert(static_cast(YVector::rank) == 1, - "YVector must be a rank 1 View."); - } - - KOKKOS_INLINE_FUNCTION - void operator()(const ordinal_type iBlock) const { - const auto ystart = iBlock * block_dim; - const auto start = m_A.graph.row_map(iBlock); - const ordinal_type count = - static_cast(m_A.graph.row_map(iBlock + 1) - start); - const auto row = m_A.block_row_Const(iBlock); - const auto beta1 = static_cast(1); - // - if (conjugate) { - for (ordinal_type ic = 0; ic < count; ++ic) { - const auto Aview = row.block(ic); - const auto xstart = row.block_colidx(ic) * block_dim; - for (ordinal_type ii = 0; ii < block_dim; ++ii) { - value_type t(0); - for (ordinal_type jj = 0; jj < block_dim; ++jj) { - const auto aval = - Kokkos::ArithTraits::conj(Aview(ii, jj)); - t += aval * m_x(xstart + jj); - } - m_y(ystart + ii) += alpha * t; - } - } - } else { - for (ordinal_type ic = 0; ic < count; ++ic) { - const auto Aview = row.block(ic); - const auto xstart = row.block_colidx(ic) * block_dim; - KokkosBlas::Impl::SerialGemvInternal< - KokkosBatched::Algo::Gemv::Blocked>::invoke( - block_dim, block_dim, alpha, Aview.data(), Aview.stride_0(), - Aview.stride_1(), &m_x(xstart), m_x.stride_0(), beta1, &m_y(ystart), - m_y.stride_0()); - } - } - } - - KOKKOS_INLINE_FUNCTION - void operator()(const team_member &dev) const { - using y_value_type = typename YVector::non_const_value_type; - Kokkos::parallel_for( - Kokkos::TeamThreadRange(dev, 0, blocks_per_team), - [&](const ordinal_type &loop) { - const ordinal_type iBlock = - static_cast(dev.league_rank()) * blocks_per_team + - loop; - if (iBlock >= m_A.numRows()) { - return; - } - const auto start = m_A.graph.row_map(iBlock); - const ordinal_type count = - static_cast(m_A.graph.row_map(iBlock + 1) - start); - const auto row = m_A.block_row_Const(iBlock); - // - auto yview = Kokkos::subview( - m_y, Kokkos::make_pair(iBlock * block_dim, - iBlock * block_dim + block_dim)); - // - for (ordinal_type ir = 0; ir < block_dim; ++ir) { - y_value_type sum = 0; - - Kokkos::parallel_reduce( - Kokkos::ThreadVectorRange(dev, count), - [&](const ordinal_type &iEntry, y_value_type &lsum) { - const auto start_col = row.block_colidx(iEntry) * block_dim; - for (ordinal_type jr = 0; jr < block_dim; ++jr) { - const value_type val = - conjugate - ? ATV::conj(row.local_block_value(iEntry, ir, jr)) - : row.local_block_value(iEntry, ir, jr); - lsum += val * m_x(start_col + jr); - } - }, - sum); - - Kokkos::single(Kokkos::PerThread(dev), [&]() { - sum *= alpha; - yview(ir) += sum; - }); - } - }); - } -}; - -/* ******************* */ - -// -// spMatVec_no_transpose: version for CPU execution spaces -// (RangePolicy or trivial serial impl used) -// -template ()>::type * = nullptr> -void spMatVec_no_transpose( - const KokkosKernels::Experimental::Controls &controls, - const AlphaType &alpha, - const KokkosSparse::Experimental::BlockCrsMatrix< - AT, AO, AD, Kokkos::MemoryTraits, AS> &A, - const XVector &x, const BetaType &beta, YVector &y, bool useConjugate) { - // This is required to maintain semantics of KokkosKernels native SpMV: - // if y contains NaN but beta = 0, the result y should be filled with 0. - // For example, this is useful for passing in uninitialized y and beta=0. - if (beta == Kokkos::ArithTraits::zero()) - Kokkos::deep_copy(y, Kokkos::ArithTraits::zero()); - else - KokkosBlas::scal(y, beta, y); - - // - // Treat the case y <- alpha * A * x + beta * y - // - - typedef KokkosSparse::Experimental::BlockCrsMatrix< - AT, AO, AD, Kokkos::MemoryTraits, AS> - AMatrix_Internal; - - bool use_dynamic_schedule = false; // Forces the use of a dynamic schedule - bool use_static_schedule = false; // Forces the use of a static schedule - if (controls.isParameter("schedule")) { - if (controls.getParameter("schedule") == "dynamic") { - use_dynamic_schedule = true; - } else if (controls.getParameter("schedule") == "static") { - use_static_schedule = true; - } - } - - BCRS_GEMV_Functor func(alpha, A, x, y, 1, - useConjugate); - if (((A.nnz() > 10000000) || use_dynamic_schedule) && !use_static_schedule) { - Kokkos::parallel_for( - "KokkosSparse::bcrs_spmv", - Kokkos::RangePolicy< - typename AMatrix_Internal::device_type::execution_space, - Kokkos::Schedule>(0, A.numRows()), - func); - } else { - Kokkos::parallel_for( - "KokkosSparse::bcrs_spmv", - Kokkos::RangePolicy< - typename AMatrix_Internal::device_type::execution_space, - Kokkos::Schedule>(0, A.numRows()), - func); - } -} - -/* ******************* */ - -// -// spMatVec_no_transpose: version for GPU execution spaces (TeamPolicy used) -// -template ()>::type * = nullptr> -void spMatVec_no_transpose( - const KokkosKernels::Experimental::Controls &controls, - const AlphaType &alpha, - const KokkosSparse::Experimental::BlockCrsMatrix< - AT, AO, AD, Kokkos::MemoryTraits, AS> &A, - const XVector &x, const BetaType &beta, YVector &y, bool useConjugate) { - if (A.numRows() <= static_cast(0)) { - return; - } - - // We need to scale y first ("scaling" by zero just means filling - // with zeros), since the functor updates y (by adding alpha Op(A) x). - KokkosBlas::scal(y, beta, y); - - typedef KokkosSparse::Experimental::BlockCrsMatrix< - AT, AO, AD, Kokkos::MemoryTraits, AS> - AMatrix_Internal; - typedef typename AMatrix_Internal::execution_space execution_space; - - bool use_dynamic_schedule = false; // Forces the use of a dynamic schedule - bool use_static_schedule = false; // Forces the use of a static schedule - if (controls.isParameter("schedule")) { - if (controls.getParameter("schedule") == "dynamic") { - use_dynamic_schedule = true; - } else if (controls.getParameter("schedule") == "static") { - use_static_schedule = true; - } - } - int team_size = -1; - int vector_length = -1; - int64_t blocks_per_thread = -1; - - // - // Use the controls to allow the user to pass in some tuning parameters. - // - if (controls.isParameter("team size")) { - team_size = std::stoi(controls.getParameter("team size")); - } - if (controls.isParameter("vector length")) { - vector_length = std::stoi(controls.getParameter("vector length")); - } - if (controls.isParameter("rows per thread")) { - blocks_per_thread = std::stoll(controls.getParameter("rows per thread")); - } - - // - // Use the existing launch parameters routine from SPMV - // - int64_t blocks_per_team = - KokkosSparse::Impl::spmv_launch_parameters( - A.numRows(), A.nnz(), blocks_per_thread, team_size, vector_length); - int64_t worksets = (A.numRows() + blocks_per_team - 1) / blocks_per_team; - - AMatrix_Internal A_internal = A; - - BCRS_GEMV_Functor func( - alpha, A_internal, x, y, blocks_per_team, useConjugate); - - if (((A.nnz() > 10000000) || use_dynamic_schedule) && !use_static_schedule) { - Kokkos::TeamPolicy> - policy(1, 1); - if (team_size < 0) - policy = Kokkos::TeamPolicy>( - worksets, Kokkos::AUTO, vector_length); - else - policy = Kokkos::TeamPolicy>( - worksets, team_size, vector_length); - Kokkos::parallel_for("KokkosSparse::bcrs_spmv", policy, - func); - } else { - Kokkos::TeamPolicy> - policy(1, 1); - if (team_size < 0) - policy = - Kokkos::TeamPolicy>( - worksets, Kokkos::AUTO, vector_length); - else - policy = - Kokkos::TeamPolicy>( - worksets, team_size, vector_length); - Kokkos::parallel_for("KokkosSparse::bcrs_spmv", policy, - func); - } -} - -/* ******************* */ - -template -struct BCRS_GEMV_Transpose_Functor { - typedef typename AMatrix::execution_space execution_space; - typedef typename AMatrix::non_const_value_type value_type; - typedef typename Kokkos::TeamPolicy team_policy; - typedef typename team_policy::member_type team_member; - typedef Kokkos::Details::ArithTraits ATV; - - //! Nonconst version of the type of column indices in the sparse matrix. - typedef typename AMatrix::non_const_ordinal_type ordinal_type; - //! Nonconst version of the type of row offsets in the sparse matrix. - typedef typename AMatrix::non_const_size_type size_type; - - const value_type alpha; - - AMatrix m_A; - XVector m_x; - YVector m_y; - - const ordinal_type block_dim; - const ordinal_type blocks_per_team; - - bool conjugate = false; - - BCRS_GEMV_Transpose_Functor(const value_type alpha_, const AMatrix m_A_, - const XVector m_x_, const YVector m_y_, - const int blocks_per_team_, bool conj_) - : alpha(alpha_), - m_A(m_A_), - m_x(m_x_), - m_y(m_y_), - block_dim(m_A_.blockDim()), - blocks_per_team(blocks_per_team_), - conjugate(conj_) { - static_assert(static_cast(XVector::rank) == 1, - "XVector must be a rank 1 View."); - static_assert(static_cast(YVector::rank) == 1, - "YVector must be a rank 1 View."); - } - - KOKKOS_INLINE_FUNCTION - void operator()(const ordinal_type iBlock) const { - // - // Assume that alpha is not zero - // - const auto xstart = iBlock * block_dim; - const auto xview = - Kokkos::subview(m_x, Kokkos::make_pair(xstart, xstart + block_dim)); - const auto start = m_A.graph.row_map(iBlock); - const ordinal_type count = - static_cast(m_A.graph.row_map(iBlock + 1) - start); - const auto row = m_A.block_row_Const(iBlock); - const auto beta1 = static_cast(1); - const auto alpha1 = beta1; - if (conjugate) { - for (ordinal_type ic = 0; ic < count; ++ic) { - const auto Aview = row.block(ic); - const auto ystart = row.block_colidx(ic) * block_dim; - for (ordinal_type jj = 0; jj < block_dim; ++jj) { - value_type t(0); - for (ordinal_type ii = 0; ii < block_dim; ++ii) { - const auto aval = - Kokkos::ArithTraits::conj(Aview(ii, jj)); - t += aval * xview(ii); - } - t *= alpha; - Kokkos::atomic_add(&m_y(ystart + jj), t); - } - } - } else { - for (ordinal_type ic = 0; ic < count; ++ic) { - const auto Aview = row.block(ic); - const auto ystart = row.block_colidx(ic) * block_dim; - for (ordinal_type jj = 0; jj < block_dim; ++jj) { - value_type t(0); - KokkosBlas::Impl::SerialGemvInternal< - KokkosBatched::Algo::Gemv::Blocked>::invoke( - 1, block_dim, alpha1, Aview.data() + jj, Aview.stride_1(), - Aview.stride_0(), xview.data(), xview.stride_0(), beta1, &t, 1); - t *= alpha; - Kokkos::atomic_add(&m_y(ystart + jj), t); - } - } - } - } - - KOKKOS_INLINE_FUNCTION - void operator()(const team_member &dev) const { - using y_value_type = typename YVector::non_const_value_type; - Kokkos::parallel_for( - Kokkos::TeamThreadRange(dev, 0, blocks_per_team), - [&](const ordinal_type &loop) { - const ordinal_type iBlock = - static_cast(dev.league_rank()) * blocks_per_team + - loop; - if (iBlock >= m_A.numRows()) { - return; - } - const auto start = m_A.graph.row_map(iBlock); - const ordinal_type count = - static_cast(m_A.graph.row_map(iBlock + 1) - start); - const auto row = m_A.block_row_Const(iBlock); - // - for (ordinal_type ir = 0; ir < block_dim; ++ir) { - Kokkos::parallel_for( - Kokkos::ThreadVectorRange(dev, count), - [&](const ordinal_type &iEntry) { - for (ordinal_type jr = 0; jr < block_dim; ++jr) { - const value_type val = - conjugate - ? ATV::conj(row.local_block_value(iEntry, jr, ir)) - : row.local_block_value(iEntry, jr, ir); - const ordinal_type ind = row.block_colidx(iEntry); - Kokkos::atomic_add( - &m_y(block_dim * ind + ir), - static_cast( - alpha * val * m_x(block_dim * iBlock + jr))); - } - }); - } - }); - } -}; - -/* ******************* */ - -/// \brief spMatVec_transpose: version for CPU execution spaces (RangePolicy or -/// trivial serial impl used) -template ()>::type * = nullptr> -void spMatVec_transpose( - const KokkosKernels::Experimental::Controls &controls, - const AlphaType &alpha, - const KokkosSparse::Experimental::BlockCrsMatrix< - AT, AO, AD, Kokkos::MemoryTraits, AS> &A, - const XVector &x, const BetaType &beta, YVector &y, bool useConjugate) { - // This is required to maintain semantics of KokkosKernels native SpMV: - // if y contains NaN but beta = 0, the result y should be filled with 0. - // For example, this is useful for passing in uninitialized y and beta=0. - if (beta == Kokkos::ArithTraits::zero()) - Kokkos::deep_copy(y, Kokkos::ArithTraits::zero()); - else - KokkosBlas::scal(y, beta, y); - - if (alpha == Kokkos::ArithTraits::zero()) return; - - // - // Treat the case y <- alpha * A^T * x + beta * y - // - - typedef KokkosSparse::Experimental::BlockCrsMatrix< - AT, AO, AD, Kokkos::MemoryTraits, AS> - AMatrix_Internal; - - AMatrix_Internal A_internal = A; - - bool use_dynamic_schedule = false; // Forces the use of a dynamic schedule - bool use_static_schedule = false; // Forces the use of a static schedule - if (controls.isParameter("schedule")) { - if (controls.getParameter("schedule") == "dynamic") { - use_dynamic_schedule = true; - } else if (controls.getParameter("schedule") == "static") { - use_static_schedule = true; - } - } - - BCRS_GEMV_Transpose_Functor func( - alpha, A_internal, x, y, 1, useConjugate); - if (((A.nnz() > 10000000) || use_dynamic_schedule) && !use_static_schedule) { - Kokkos::parallel_for( - "KokkosSparse::blockcrs_spmv", - Kokkos::RangePolicy< - typename AMatrix_Internal::device_type::execution_space, - Kokkos::Schedule>(0, A.numRows()), - func); - } else { - Kokkos::parallel_for( - "KokkosSparse::blockcrs_spmv", - Kokkos::RangePolicy< - typename AMatrix_Internal::device_type::execution_space, - Kokkos::Schedule>(0, A.numRows()), - func); - } -} - -// -// spMatVec_transpose: version for GPU execution spaces (TeamPolicy used) -// -template ()>::type * = nullptr> -void spMatVec_transpose(const KokkosKernels::Experimental::Controls &controls, - const AlphaType &alpha, const AMatrix &A, - const XVector &x, const BetaType &beta, YVector &y, - bool useConjugate) { - if (A.numRows() <= 0) { - return; - } - - // We need to scale y first ("scaling" by zero just means filling - // with zeros), since the functor works by atomic-adding into y. - KokkosBlas::scal(y, beta, y); - - typedef typename AMatrix::execution_space execution_space; - - bool use_dynamic_schedule = false; // Forces the use of a dynamic schedule - bool use_static_schedule = false; // Forces the use of a static schedule - if (controls.isParameter("schedule")) { - if (controls.getParameter("schedule") == "dynamic") { - use_dynamic_schedule = true; - } else if (controls.getParameter("schedule") == "static") { - use_static_schedule = true; - } - } - int team_size = -1; - int vector_length = -1; - int64_t blocks_per_thread = -1; - - // - // Use the controls to allow the user to pass in some tuning parameters. - // - if (controls.isParameter("team size")) { - team_size = std::stoi(controls.getParameter("team size")); - } - if (controls.isParameter("vector length")) { - vector_length = std::stoi(controls.getParameter("vector length")); - } - if (controls.isParameter("rows per thread")) { - blocks_per_thread = std::stoll(controls.getParameter("rows per thread")); - } - - // - // Use the existing launch parameters routine from SPMV - // - int64_t blocks_per_team = - KokkosSparse::Impl::spmv_launch_parameters( - A.numRows(), A.nnz(), blocks_per_thread, team_size, vector_length); - int64_t worksets = (A.numRows() + blocks_per_team - 1) / blocks_per_team; - - BCRS_GEMV_Transpose_Functor func( - alpha, A, x, y, blocks_per_team, useConjugate); - - if (((A.nnz() > 10000000) || use_dynamic_schedule) && !use_static_schedule) { - Kokkos::TeamPolicy> - policy(1, 1); - if (team_size < 0) - policy = Kokkos::TeamPolicy>( - worksets, Kokkos::AUTO, vector_length); - else - policy = Kokkos::TeamPolicy>( - worksets, team_size, vector_length); - Kokkos::parallel_for("KokkosSparse::bspmv", policy, - func); - } else { - Kokkos::TeamPolicy> - policy(1, 1); - if (team_size < 0) - policy = - Kokkos::TeamPolicy>( - worksets, Kokkos::AUTO, vector_length); - else - policy = - Kokkos::TeamPolicy>( - worksets, team_size, vector_length); - Kokkos::parallel_for("KokkosSparse::bspmv", policy, - func); - } -} - -/* ******************* */ - -template -struct BCRS_GEMM_Functor { - typedef typename AMatrix::execution_space execution_space; - typedef typename AMatrix::non_const_value_type value_type; - typedef typename Kokkos::TeamPolicy team_policy; - typedef typename team_policy::member_type team_member; - typedef Kokkos::Details::ArithTraits ATV; - - //! Nonconst version of the type of column indices in the sparse matrix. - typedef typename AMatrix::non_const_ordinal_type ordinal_type; - //! Nonconst version of the type of row offsets in the sparse matrix. - typedef typename AMatrix::non_const_size_type size_type; - - const value_type alpha; - AMatrix m_A; - XVector m_x; - YVector m_y; - const ordinal_type block_dim; - const ordinal_type num_rhs; - - const ordinal_type blocks_per_team; - - bool conjugate = false; - - BCRS_GEMM_Functor(const value_type alpha_, const AMatrix m_A_, - const XVector m_x_, const YVector m_y_, - const int blocks_per_team_, bool conj_) - : alpha(alpha_), - m_A(m_A_), - m_x(m_x_), - m_y(m_y_), - block_dim(m_A_.blockDim()), - num_rhs(m_x_.extent(1)), - blocks_per_team(blocks_per_team_), - conjugate(conj_) { - static_assert(static_cast(XVector::rank) == 2, - "XVector must be a rank 2 View."); - static_assert(static_cast(YVector::rank) == 2, - "YVector must be a rank 2 View."); - } - - KOKKOS_INLINE_FUNCTION - void operator()(const ordinal_type iBlock) const { - // - const auto ystart = iBlock * block_dim; - const auto start = m_A.graph.row_map(iBlock); - const ordinal_type count = - static_cast(m_A.graph.row_map(iBlock + 1) - start); - const auto row = m_A.block_row_Const(iBlock); - // - for (ordinal_type ic = 0; ic < count; ++ic) { - const auto Aview = row.block(ic); - const auto xstart = row.block_colidx(ic) * block_dim; - for (ordinal_type jr = 0; jr < num_rhs; ++jr) { - for (ordinal_type ii = 0; ii < block_dim; ++ii) { - value_type t(0); - for (ordinal_type jj = 0; jj < block_dim; ++jj) { - const auto aval = - (conjugate) - ? Kokkos::ArithTraits::conj(Aview(ii, jj)) - : Aview(ii, jj); - t += aval * m_x(xstart + jj, jr); - } - m_y(ystart + ii, jr) += alpha * t; - } - } - } - } - - KOKKOS_INLINE_FUNCTION - void operator()(const team_member &dev) const { - using y_value_type = typename YVector::non_const_value_type; - Kokkos::parallel_for( - Kokkos::TeamThreadRange(dev, 0, blocks_per_team), - [&](const ordinal_type &loop) { - const ordinal_type iBlock = - static_cast(dev.league_rank()) * blocks_per_team + - loop; - if (iBlock >= m_A.numRows()) { - return; - } - // - const auto start = m_A.graph.row_map(iBlock); - const ordinal_type count = - static_cast(m_A.graph.row_map(iBlock + 1) - start); - const auto row = m_A.block_row_Const(iBlock); - const auto nrhs = num_rhs; - // - for (ordinal_type ic = 0; ic < nrhs; ++ic) { - for (ordinal_type ir = 0; ir < block_dim; ++ir) { - y_value_type sum = 0; - - Kokkos::parallel_reduce( - Kokkos::ThreadVectorRange(dev, count), - [&](const ordinal_type &iEntry, y_value_type &lsum) { - const auto start_col = row.block_colidx(iEntry) * block_dim; - for (ordinal_type jr = 0; jr < block_dim; ++jr) { - const value_type val = - conjugate - ? ATV::conj(row.local_block_value(iEntry, ir, jr)) - : row.local_block_value(iEntry, ir, jr); - lsum += val * m_x(start_col + jr, ic); - } - }, - sum); - - Kokkos::single(Kokkos::PerThread(dev), [&]() { - sum *= alpha; - m_y(iBlock * block_dim + ir, ic) += sum; - }); - } - } - // - }); - } -}; - -/* ******************* */ - -// -// spMatMultiVec_no_transpose: version for CPU execution spaces -// (RangePolicy or trivial serial impl used) -// -template ()>::type * = nullptr> -void spMatMultiVec_no_transpose( - const KokkosKernels::Experimental::Controls &controls, - const AlphaType &alpha, - const KokkosSparse::Experimental::BlockCrsMatrix< - AT, AO, AD, Kokkos::MemoryTraits, AS> &A, - const XVector &x, const BetaType &beta, YVector &y, bool useConjugate) { - // This is required to maintain semantics of KokkosKernels native SpMV: - // if y contains NaN but beta = 0, the result y should be filled with 0. - // For example, this is useful for passing in uninitialized y and beta=0. - if (beta == Kokkos::ArithTraits::zero()) - Kokkos::deep_copy(y, Kokkos::ArithTraits::zero()); - else - KokkosBlas::scal(y, beta, y); - // - // Treat the case y <- alpha * A * x + beta * y - // - typedef KokkosSparse::Experimental::BlockCrsMatrix< - AT, AO, AD, Kokkos::MemoryTraits, AS> - AMatrix_Internal; - - bool use_dynamic_schedule = false; // Forces the use of a dynamic schedule - bool use_static_schedule = false; // Forces the use of a static schedule - if (controls.isParameter("schedule")) { - if (controls.getParameter("schedule") == "dynamic") { - use_dynamic_schedule = true; - } else if (controls.getParameter("schedule") == "static") { - use_static_schedule = true; - } - } - - BCRS_GEMM_Functor func(alpha, A, x, y, 1, - useConjugate); - if (((A.nnz() > 10000000) || use_dynamic_schedule) && !use_static_schedule) { - Kokkos::parallel_for( - "KokkosSparse::bcrs_spm_mv", - Kokkos::RangePolicy< - typename AMatrix_Internal::device_type::execution_space, - Kokkos::Schedule>(0, A.numRows()), - func); - } else { - Kokkos::parallel_for( - "KokkosSparse::bcrs_spm_mv", - Kokkos::RangePolicy< - typename AMatrix_Internal::device_type::execution_space, - Kokkos::Schedule>(0, A.numRows()), - func); - } -} - -/* ******************* */ - -// -// spMatMultiVec_no_transpose: version for GPU execution spaces (TeamPolicy -// used) -// -template ()>::type * = nullptr> -void spMatMultiVec_no_transpose( - const KokkosKernels::Experimental::Controls &controls, - const AlphaType &alpha, - const KokkosSparse::Experimental::BlockCrsMatrix< - AT, AO, AD, Kokkos::MemoryTraits, AS> &A, - const XVector &x, const BetaType &beta, YVector &y, bool useConjugate) { - if (A.numRows() <= static_cast(0)) { - return; - } - - KokkosBlas::scal(y, beta, y); - - typedef KokkosSparse::Experimental::BlockCrsMatrix< - AT, AO, AD, Kokkos::MemoryTraits, AS> - AMatrix_Internal; - typedef typename AMatrix_Internal::execution_space execution_space; - - bool use_dynamic_schedule = false; // Forces the use of a dynamic schedule - bool use_static_schedule = false; // Forces the use of a static schedule - if (controls.isParameter("schedule")) { - if (controls.getParameter("schedule") == "dynamic") { - use_dynamic_schedule = true; - } else if (controls.getParameter("schedule") == "static") { - use_static_schedule = true; - } - } - int team_size = -1; - int vector_length = -1; - int64_t blocks_per_thread = -1; - - // - // Use the controls to allow the user to pass in some tuning parameters. - // - if (controls.isParameter("team size")) { - team_size = std::stoi(controls.getParameter("team size")); - } - if (controls.isParameter("vector length")) { - vector_length = std::stoi(controls.getParameter("vector length")); - } - if (controls.isParameter("rows per thread")) { - blocks_per_thread = std::stoll(controls.getParameter("rows per thread")); - } - - // - // Use the existing launch parameters routine from SPMV - // - int64_t blocks_per_team = - KokkosSparse::Impl::spmv_launch_parameters( - A.numRows(), A.nnz(), blocks_per_thread, team_size, vector_length); - int64_t worksets = (A.numRows() + blocks_per_team - 1) / blocks_per_team; - - AMatrix_Internal A_internal = A; - - BCRS_GEMM_Functor func( - alpha, A_internal, x, y, blocks_per_team, useConjugate); - - if (((A.nnz() > 10000000) || use_dynamic_schedule) && !use_static_schedule) { - Kokkos::TeamPolicy> - policy(1, 1); - if (team_size < 0) - policy = Kokkos::TeamPolicy>( - worksets, Kokkos::AUTO, vector_length); - else - policy = Kokkos::TeamPolicy>( - worksets, team_size, vector_length); - Kokkos::parallel_for("KokkosSparse::bcrs_spm_mv", - policy, func); - } else { - Kokkos::TeamPolicy> - policy(1, 1); - if (team_size < 0) - policy = - Kokkos::TeamPolicy>( - worksets, Kokkos::AUTO, vector_length); - else - policy = - Kokkos::TeamPolicy>( - worksets, team_size, vector_length); - Kokkos::parallel_for("KokkosSparse::bcrs_spm_mv", - policy, func); - } -} - -/* ******************* */ - -template -struct BCRS_GEMM_Transpose_Functor { - typedef typename AMatrix::execution_space execution_space; - typedef typename AMatrix::non_const_value_type value_type; - typedef typename Kokkos::TeamPolicy team_policy; - typedef typename team_policy::member_type team_member; - typedef Kokkos::Details::ArithTraits ATV; - - //! Nonconst version of the type of column indices in the sparse matrix. - typedef typename AMatrix::non_const_ordinal_type ordinal_type; - //! Nonconst version of the type of row offsets in the sparse matrix. - typedef typename AMatrix::non_const_size_type size_type; - - const value_type alpha; - AMatrix m_A; - XVector m_x; - YVector m_y; - const ordinal_type block_dim; - const ordinal_type num_rhs; - - const ordinal_type blocks_per_team; - - bool conjugate = false; - - BCRS_GEMM_Transpose_Functor(const value_type alpha_, const AMatrix m_A_, - const XVector m_x_, const YVector m_y_, - const int blocks_per_team_, bool conj_) - : alpha(alpha_), - m_A(m_A_), - m_x(m_x_), - m_y(m_y_), - block_dim(m_A_.blockDim()), - num_rhs(m_x_.extent(1)), - blocks_per_team(blocks_per_team_), - conjugate(conj_) { - static_assert(static_cast(XVector::rank) == 2, - "XVector must be a rank 2 View."); - static_assert(static_cast(YVector::rank) == 2, - "YVector must be a rank 2 View."); - } - - KOKKOS_INLINE_FUNCTION - void operator()(const ordinal_type iBlock) const { - // - const auto xstart = iBlock * block_dim; - const auto xview = Kokkos::subview( - m_x, Kokkos::make_pair(xstart, xstart + block_dim), Kokkos::ALL()); - const auto start = m_A.graph.row_map(iBlock); - const ordinal_type count = - static_cast(m_A.graph.row_map(iBlock + 1) - start); - const auto row = m_A.block_row_Const(iBlock); - const auto beta1 = static_cast(1); - const auto alpha1 = beta1; - const auto ldx = m_x.stride_1(); - // - if (conjugate) { - for (ordinal_type ic = 0; ic < count; ++ic) { - const auto Aview = row.block(ic); - const auto ystart = row.block_colidx(ic) * block_dim; - for (ordinal_type jr = 0; jr < num_rhs; ++jr) { - for (ordinal_type jj = 0; jj < block_dim; ++jj) { - value_type t(0); - for (ordinal_type ii = 0; ii < block_dim; ++ii) { - const auto aval = - Kokkos::ArithTraits::conj(Aview(ii, jj)); - t += aval * xview(ii, jr); - } - t *= alpha; - Kokkos::atomic_add(&m_y(ystart + jj, jr), t); - } - } - } - } else { - for (ordinal_type ic = 0; ic < count; ++ic) { - const auto Aview = row.block(ic); - const auto ystart = row.block_colidx(ic) * block_dim; - for (ordinal_type jr = 0; jr < num_rhs; ++jr) { - for (ordinal_type jj = 0; jj < block_dim; ++jj) { - value_type t(0); - KokkosBlas::Impl::SerialGemvInternal< - KokkosBatched::Algo::Gemv::Blocked>::invoke( - 1, block_dim, alpha1, Aview.data() + jj, Aview.stride_1(), - Aview.stride_0(), xview.data() + jr * ldx, xview.stride_0(), - beta1, &t, 1); - t *= alpha; - Kokkos::atomic_add(&m_y(ystart + jj, jr), t); - } - } - } - } - } - - KOKKOS_INLINE_FUNCTION - void operator()(const team_member &dev) const { - using y_value_type = typename YVector::non_const_value_type; - Kokkos::parallel_for( - Kokkos::TeamThreadRange(dev, 0, blocks_per_team), - [&](const ordinal_type &loop) { - const ordinal_type iBlock = - static_cast(dev.league_rank()) * blocks_per_team + - loop; - if (iBlock >= m_A.numRows()) { - return; - } - // - const auto start = m_A.graph.row_map(iBlock); - const ordinal_type count = - static_cast(m_A.graph.row_map(iBlock + 1) - start); - const auto row = m_A.block_row_Const(iBlock); - const auto nrhs = m_x.extent(1); - // - for (size_t ic = 0; ic < nrhs; ++ic) { - for (ordinal_type ir = 0; ir < block_dim; ++ir) { - Kokkos::parallel_for( - Kokkos::ThreadVectorRange(dev, count), - [&](const ordinal_type &iEntry) { - for (ordinal_type jr = 0; jr < block_dim; ++jr) { - const value_type val = - conjugate - ? ATV::conj(row.local_block_value(iEntry, jr, ir)) - : row.local_block_value(iEntry, jr, ir); - const ordinal_type ind = row.block_colidx(iEntry); - Kokkos::atomic_add( - &m_y(block_dim * ind + ir, ic), - static_cast( - alpha * val * m_x(block_dim * iBlock + jr, ic))); - } - }); - } - } - // - }); - } -}; - -/* ******************* */ - -/// \brief spMatMultiVec_transpose: version for CPU execution spaces -/// (RangePolicy or trivial serial impl used) -template ()>::type * = nullptr> -void spMatMultiVec_transpose( - const KokkosKernels::Experimental::Controls &controls, - const AlphaType &alpha, - const KokkosSparse::Experimental::BlockCrsMatrix< - AT, AO, AD, Kokkos::MemoryTraits, AS> &A, - const XVector &x, const BetaType &beta, YVector &y, bool useConjugate) { - // This is required to maintain semantics of KokkosKernels native SpMV: - // if y contains NaN but beta = 0, the result y should be filled with 0. - // For example, this is useful for passing in uninitialized y and beta=0. - if (beta == Kokkos::ArithTraits::zero()) - Kokkos::deep_copy(y, Kokkos::ArithTraits::zero()); - else - KokkosBlas::scal(y, beta, y); - // - // Treat the case y <- alpha * A^T * x + beta * y - // - typedef KokkosSparse::Experimental::BlockCrsMatrix< - AT, AO, AD, Kokkos::MemoryTraits, AS> - AMatrix_Internal; - typedef typename AMatrix_Internal::execution_space execution_space; - - AMatrix_Internal A_internal = A; - - bool use_dynamic_schedule = false; // Forces the use of a dynamic schedule - bool use_static_schedule = false; // Forces the use of a static schedule - if (controls.isParameter("schedule")) { - if (controls.getParameter("schedule") == "dynamic") { - use_dynamic_schedule = true; - } else if (controls.getParameter("schedule") == "static") { - use_static_schedule = true; - } - } - - BCRS_GEMM_Transpose_Functor func( - alpha, A_internal, x, y, 1, useConjugate); - if (((A.nnz() > 10000000) || use_dynamic_schedule) && !use_static_schedule) { - Kokkos::parallel_for( - "KokkosSparse::blockcrs_spm_mv", - Kokkos::RangePolicy>( - 0, A.numRows()), - func); - } else { - Kokkos::parallel_for( - "KokkosSparse::blockcrs_spm_mv", - Kokkos::RangePolicy>( - 0, A.numRows()), - func); - } -} - -// -// spMatMultiVec_transpose: version for GPU execution spaces (TeamPolicy used) -// -template ()>::type * = nullptr> -void spMatMultiVec_transpose( - const KokkosKernels::Experimental::Controls &controls, - const AlphaType &alpha, const AMatrix &A, const XVector &x, - const BetaType &beta, YVector &y, bool useConjugate) { - if (A.numRows() <= 0) { - return; - } - - KokkosBlas::scal(y, beta, y); - - typedef typename AMatrix::execution_space execution_space; - - bool use_dynamic_schedule = false; // Forces the use of a dynamic schedule - bool use_static_schedule = false; // Forces the use of a static schedule - if (controls.isParameter("schedule")) { - if (controls.getParameter("schedule") == "dynamic") { - use_dynamic_schedule = true; - } else if (controls.getParameter("schedule") == "static") { - use_static_schedule = true; - } - } - int team_size = -1; - int vector_length = -1; - int64_t blocks_per_thread = -1; - - // - // Use the controls to allow the user to pass in some tuning - // parameters. - // - if (controls.isParameter("team size")) { - team_size = std::stoi(controls.getParameter("team size")); - } - if (controls.isParameter("vector length")) { - vector_length = std::stoi(controls.getParameter("vector length")); - } - if (controls.isParameter("rows per thread")) { - blocks_per_thread = std::stoll(controls.getParameter("rows per thread")); - } - - // - // Use the existing launch parameters routine from SPMV - // - int64_t blocks_per_team = - KokkosSparse::Impl::spmv_launch_parameters( - A.numRows(), A.nnz(), blocks_per_thread, team_size, vector_length); - int64_t worksets = (A.numRows() + blocks_per_team - 1) / blocks_per_team; - - BCRS_GEMM_Transpose_Functor func( - alpha, A, x, y, blocks_per_team, useConjugate); - - if (((A.nnz() > 10000000) || use_dynamic_schedule) && !use_static_schedule) { - Kokkos::TeamPolicy> - policy(1, 1); - if (team_size < 0) - policy = Kokkos::TeamPolicy>( - worksets, Kokkos::AUTO, vector_length); - else - policy = Kokkos::TeamPolicy>( - worksets, team_size, vector_length); - Kokkos::parallel_for("KokkosSparse::blockcrs_spm_mv", - policy, func); - } else { - Kokkos::TeamPolicy> - policy(1, 1); - if (team_size < 0) - policy = - Kokkos::TeamPolicy>( - worksets, Kokkos::AUTO, vector_length); - else - policy = - Kokkos::TeamPolicy>( - worksets, team_size, vector_length); - Kokkos::parallel_for("KokkosSparse::blockcrs_spm_mv", - policy, func); - } -} - -/* ******************* */ - -} // namespace BCRS - -} // namespace Impl -} // namespace Experimental -} // namespace KokkosSparse - -#endif // KOKKOSKERNELS_KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_IMPL_HPP diff --git a/src/sparse/impl/KokkosSparse_spmv_blockcrsmatrix_spec.hpp b/src/sparse/impl/KokkosSparse_spmv_blockcrsmatrix_spec.hpp deleted file mode 100644 index 14b75f1c39..0000000000 --- a/src/sparse/impl/KokkosSparse_spmv_blockcrsmatrix_spec.hpp +++ /dev/null @@ -1,284 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ -#ifndef KOKKOSSPARSE_IMPL_SPMV_BLOCKCRSMATRIX_SPEC_HPP_ -#define KOKKOSSPARSE_IMPL_SPMV_BLOCKCRSMATRIX_SPEC_HPP_ - -#include -#include -#include - -#include "KokkosSparse_BlockCrsMatrix.hpp" -#include "KokkosKernels_Controls.hpp" -#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY -#include -#endif - -namespace KokkosSparse { -namespace Experimental { -namespace Impl { - -// default is no eti available -template -struct spmv_blockcrsmatrix_eti_spec_avail { - enum : bool { value = false }; -}; - -// default is no eti available -template -struct spmv_mv_blockcrsmatrix_eti_spec_avail { - enum : bool { value = false }; -}; - -} // namespace Impl -} // namespace Experimental -} // namespace KokkosSparse - -#define KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_ETI_SPEC_AVAIL( \ - SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - MEM_SPACE_TYPE) \ - template <> \ - struct spmv_blockcrsmatrix_eti_spec_avail< \ - const SCALAR_TYPE, const ORDINAL_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, const OFFSET_TYPE, \ - SCALAR_TYPE const *, LAYOUT_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, \ - SCALAR_TYPE *, LAYOUT_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits > { \ - enum : bool { value = true }; \ - }; - -#define KOKKOSSPARSE_SPMV_MV_BLOCKCRSMATRIX_ETI_SPEC_AVAIL( \ - SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - MEM_SPACE_TYPE) \ - template <> \ - struct spmv_mv_blockcrsmatrix_eti_spec_avail< \ - const SCALAR_TYPE, const ORDINAL_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, const OFFSET_TYPE, \ - SCALAR_TYPE const **, LAYOUT_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, \ - SCALAR_TYPE **, LAYOUT_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits > { \ - enum : bool { value = true }; \ - }; - -// Include which ETIs are available -#include -#include -#include - -namespace KokkosSparse { -namespace Experimental { -namespace Impl { - -// declaration -template ::value> -struct SPMV_BLOCKCRSMATRIX { - typedef BlockCrsMatrix AMatrix; - typedef Kokkos::View XVector; - typedef Kokkos::View YVector; - typedef typename YVector::non_const_value_type YScalar; - - static void spmv_blockcrsmatrix( - const KokkosKernels::Experimental::Controls &controls, const char mode[], - const YScalar &alpha, const AMatrix &A, const XVector &x, - const YScalar &beta, const YVector &y); -}; - -// declaration -template ::value> -struct SPMV_MV_BLOCKCRSMATRIX { - typedef BlockCrsMatrix AMatrix; - typedef Kokkos::View XVector; - typedef Kokkos::View YVector; - typedef typename YVector::non_const_value_type YScalar; - - static void spmv_mv_blockcrsmatrix( - const KokkosKernels::Experimental::Controls &controls, const char mode[], - const YScalar &alpha, const AMatrix &A, const XVector &x, - const YScalar &beta, const YVector &y); -}; - -// actual implementations to be compiled -#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY -template -struct SPMV_BLOCKCRSMATRIX { - typedef BlockCrsMatrix AMatrix; - typedef Kokkos::View XVector; - typedef Kokkos::View YVector; - typedef typename YVector::non_const_value_type YScalar; - - static void spmv_blockcrsmatrix( - const KokkosKernels::Experimental::Controls &controls, const char mode[], - const YScalar &alpha, const AMatrix &A, const XVector &X, - const YScalar &beta, const YVector &Y) { - // - if ((mode[0] == KokkosSparse::NoTranspose[0]) || - (mode[0] == KokkosSparse::Conjugate[0])) { - bool useConjugate = (mode[0] == KokkosSparse::Conjugate[0]); - return BCRS::spMatVec_no_transpose(controls, alpha, A, X, beta, Y, - useConjugate); - } else { - bool useConjugate = (mode[0] == KokkosSparse::ConjugateTranspose[0]); - return BCRS::spMatVec_transpose(controls, alpha, A, X, beta, Y, - useConjugate); - } - } -}; - -template -struct SPMV_MV_BLOCKCRSMATRIX { - typedef BlockCrsMatrix AMatrix; - typedef Kokkos::View XVector; - typedef Kokkos::View YVector; - typedef typename YVector::non_const_value_type YScalar; - - static void spmv_mv_blockcrsmatrix( - const KokkosKernels::Experimental::Controls &controls, const char mode[], - const YScalar &alpha, const AMatrix &A, const XVector &X, - const YScalar &beta, const YVector &Y) { - // - if ((mode[0] == KokkosSparse::NoTranspose[0]) || - (mode[0] == KokkosSparse::Conjugate[0])) { - bool useConjugate = (mode[0] == KokkosSparse::Conjugate[0]); - return BCRS::spMatMultiVec_no_transpose(controls, alpha, A, X, beta, Y, - useConjugate); - } else { - bool useConjugate = (mode[0] == KokkosSparse::ConjugateTranspose[0]); - return BCRS::spMatMultiVec_transpose(controls, alpha, A, X, beta, Y, - useConjugate); - } - } -}; - -#endif // !defined(KOKKOSKERNELS_ETI_ONLY) || -// KOKKOSKERNELS_IMPL_COMPILE_LIBRARY -} // namespace Impl -} // namespace Experimental -} // namespace KokkosSparse - -// declare / instantiate the vector version -// Instantiate with A,x,y are all the requested Scalar type (no instantiation of -// mixed-precision operands) -#define KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_ETI_SPEC_DECL( \ - SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - MEM_SPACE_TYPE) \ - extern template struct SPMV_BLOCKCRSMATRIX< \ - const SCALAR_TYPE, const ORDINAL_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, const OFFSET_TYPE, \ - SCALAR_TYPE const *, LAYOUT_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, \ - SCALAR_TYPE *, LAYOUT_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, true>; - -#define KOKKOSSPARSE_SPMV_BLOCKCRSMATRIX_ETI_SPEC_INST( \ - SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - MEM_SPACE_TYPE) \ - template struct SPMV_BLOCKCRSMATRIX< \ - const SCALAR_TYPE, const ORDINAL_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, const OFFSET_TYPE, \ - SCALAR_TYPE const *, LAYOUT_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, \ - SCALAR_TYPE *, LAYOUT_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, true>; - -// declare / instantiate the 2D MV version -// Instantiate with A,x,y are all the requested Scalar type (no instantiation of -// mixed-precision operands) -#define KOKKOSSPARSE_SPMV_MV_BLOCKCRSMATRIX_ETI_SPEC_DECL( \ - SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - MEM_SPACE_TYPE) \ - extern template struct SPMV_MV_BLOCKCRSMATRIX< \ - const SCALAR_TYPE, const ORDINAL_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, const OFFSET_TYPE, \ - SCALAR_TYPE const **, LAYOUT_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, \ - SCALAR_TYPE **, LAYOUT_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, true>; - -#define KOKKOSSPARSE_SPMV_MV_BLOCKCRSMATRIX_ETI_SPEC_INST( \ - SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - MEM_SPACE_TYPE) \ - template struct SPMV_MV_BLOCKCRSMATRIX< \ - const SCALAR_TYPE, const ORDINAL_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, const OFFSET_TYPE, \ - SCALAR_TYPE const **, LAYOUT_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, \ - SCALAR_TYPE **, LAYOUT_TYPE, \ - Kokkos::Device, \ - Kokkos::MemoryTraits, true>; - -#include -#include -#include - -#endif // KOKKOSSPARSE_IMPL_SPMV_BLOCKCRSMATRIX_SPEC_HPP_ diff --git a/test_common/KokkosBatched_Test_BlockCrs.hpp b/test_common/KokkosBatched_Test_BlockCrs.hpp deleted file mode 100644 index 32734da625..0000000000 --- a/test_common/KokkosBatched_Test_BlockCrs.hpp +++ /dev/null @@ -1,1467 +0,0 @@ -#include -#include -#include - -#include "KokkosBatched_Util.hpp" -#if defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL__) -#include "mkl.h" -#endif - -#if defined(__KOKKOSBATCHED_NVIDIA_CUBLAS__) -#include "cuda_runtime.h" -#include "cublas_v2.h" -#include "cublas_api.h" -#endif - -#include "Kokkos_Core.hpp" - -#include "KokkosBatched_Vector.hpp" - -#include "KokkosBatched_Copy_Decl.hpp" -#include "KokkosBatched_Copy_Impl.hpp" - -#include "KokkosBatched_AddRadial_Decl.hpp" -#include "KokkosBatched_AddRadial_Impl.hpp" - -#include "KokkosBatched_Gemv_Decl.hpp" -#include "KokkosBatched_Gemv_Serial_Impl.hpp" -#include "KokkosBatched_Gemv_Team_Impl.hpp" - -#include "KokkosBatched_Trsv_Decl.hpp" -#include "KokkosBatched_Trsv_Serial_Impl.hpp" -#include "KokkosBatched_Trsv_Team_Impl.hpp" - -#include "KokkosBatched_Gemm_Decl.hpp" -#include "KokkosBatched_Gemm_Serial_Impl.hpp" -#include "KokkosBatched_Gemm_Team_Impl.hpp" - -#include "KokkosBatched_Trsm_Decl.hpp" -#include "KokkosBatched_Trsm_Serial_Impl.hpp" -#include "KokkosBatched_Trsm_Team_Impl.hpp" - -#include "KokkosBatched_LU_Decl.hpp" -#include "KokkosBatched_LU_Serial_Impl.hpp" -#include "KokkosBatched_LU_Team_Impl.hpp" - -#include "KokkosBatched_Test_BlockCrs_Util.hpp" - -namespace KokkosBatched { -namespace Test { - -struct RangeTag {}; -struct TeamTag {}; -struct TeamShmemTag {}; - -template -class FactorizeBlockTridiagMatrices { - public: - typedef ExecSpace exec_space; - typedef ValueType value_type; - typedef ArrayLayout array_layout; - - typedef BlockTridiagMatrices - block_tridiag_matrices_type; - - private: - ordinal_type _ntridiag, _m, _blocksize, _shmemlvl; - - UnmanagedViewType _TA, - _TB, _TC; - typedef typename MagnitudeScalarType::type magnitude_scalar_type; - - public: - FactorizeBlockTridiagMatrices() {} - - // A thread maps nonzero blocks - KOKKOS_INLINE_FUNCTION - void operator()(const RangeTag &, const ordinal_type ij) const { - auto A = - Kokkos::subview(_TA, ij, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); - auto B = - Kokkos::subview(_TB, ij, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); - auto C = - Kokkos::subview(_TC, ij, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); - - auto AA = Kokkos::subview(A, 0, Kokkos::ALL(), Kokkos::ALL()); - auto BB = Kokkos::subview(B, 0, Kokkos::ALL(), Kokkos::ALL()); - auto CC = Kokkos::subview(C, 0, Kokkos::ALL(), Kokkos::ALL()); - auto DD = AA; - - const auto tiny = - Kokkos::Details::ArithTraits::epsilon() * 100; - - const ordinal_type kend = _m - 1; - for (ordinal_type k = 0; k < kend; ++k) { - AA.assign_data(&A(k, 0, 0)); - BB.assign_data(&B(k, 0, 0)); - CC.assign_data(&C(k, 0, 0)); - DD.assign_data(&A(k + 1, 0, 0)); - - SerialAddRadial::invoke(tiny, AA); - SerialLU::invoke(AA); - SerialTrsm::invoke(1.0, AA, BB); - SerialTrsm::invoke(1.0, AA, CC); - SerialGemm::invoke(-1.0, CC, BB, 1.0, DD); - } - AA.assign_data(&A(kend, 0, 0)); - SerialLU::invoke(AA); - } - - template - KOKKOS_INLINE_FUNCTION void operator()(const TeamTag &, - const MemberType &member) const { - const int ijbeg = member.league_rank() * VectorLength; - Kokkos::parallel_for( - Kokkos::ThreadVectorRange(member, VectorLength), [&](const int &idx) { - const int ij = ijbeg + idx; - if (ij < _ntridiag) { - auto A = Kokkos::subview(_TA, ij, Kokkos::ALL(), Kokkos::ALL(), - Kokkos::ALL()); - auto B = Kokkos::subview(_TB, ij, Kokkos::ALL(), Kokkos::ALL(), - Kokkos::ALL()); - auto C = Kokkos::subview(_TC, ij, Kokkos::ALL(), Kokkos::ALL(), - Kokkos::ALL()); - - const auto tiny = - Kokkos::Details::ArithTraits::epsilon() * - 100; - - const ordinal_type kend = _m - 1; - { - auto AA = Kokkos::subview(A, 0, Kokkos::ALL(), Kokkos::ALL()); - auto BB = Kokkos::subview(B, 0, Kokkos::ALL(), Kokkos::ALL()); - auto CC = Kokkos::subview(C, 0, Kokkos::ALL(), Kokkos::ALL()); - auto DD = AA; - - for (ordinal_type k = 0; k < kend; ++k) { - AA.assign_data(&A(k, 0, 0)); - BB.assign_data(&B(k, 0, 0)); - CC.assign_data(&C(k, 0, 0)); - DD.assign_data(&A(k + 1, 0, 0)); - - member.team_barrier(); - TeamAddRadial::invoke(member, tiny, AA); - member.team_barrier(); - TeamLU::invoke(member, AA); - member.team_barrier(); - TeamTrsm::invoke(member, 1.0, AA, BB); - TeamTrsm::invoke(member, 1.0, AA, CC); - member.team_barrier(); - TeamGemm::invoke(member, -1.0, CC, BB, 1.0, - DD); - } - { - member.team_barrier(); - AA.assign_data(&A(kend, 0, 0)); - TeamLU::invoke(member, AA); - } - } -#if 0 - { // 0.028 vs 0.035; without subview it performs 0.028 - const int as0 = A.stride_1(), as1 = A.stride_2(); - const int bs0 = B.stride_1(), bs1 = B.stride_2(); - const int cs0 = C.stride_1(), cs1 = C.stride_2(); - - for (ordinal_type k=0;k - ::invoke(member, _blocksize, _blocksize, AA, as0, as1); - member.team_barrier(); - TeamTrsmInternalLeftLower - ::invoke(member, true, _blocksize, _blocksize, - 1.0, AA, as0, as1, BB, bs0, bs1); - TeamTrsmInternalLeftLower - ::invoke(member, false, _blocksize, _blocksize, - 1.0, AA, as1, as0, CC, cs1, cs0); - member.team_barrier(); - TeamGemmInternal:: - invoke(member, _blocksize, _blocksize, _blocksize, - -1.0, - CC, cs0, cs1, BB, bs0, bs1, - 1.0, - DD, as0, as1); - } - { - member.team_barrier(); - auto AA = &A(kend, 0,0); - TeamLU_Internal - ::invoke(member, _blocksize, _blocksize, AA, as0, as1); - } - } -#endif - } - }); - } - - template - KOKKOS_INLINE_FUNCTION void operator()(const TeamShmemTag &, - const MemberType &member) const { - typedef Kokkos::View packed_view_type; - ScratchViewType sA(member.team_scratch(_shmemlvl), - VectorLength, _blocksize, _blocksize); - - const int ijbeg = member.league_rank() * VectorLength; - Kokkos::parallel_for( - Kokkos::ThreadVectorRange(member, VectorLength), [&](const int &idx) { - const int ij = ijbeg + idx; - if (ij < _ntridiag) { - auto A = Kokkos::subview(_TA, ij, Kokkos::ALL(), Kokkos::ALL(), - Kokkos::ALL()); - auto B = Kokkos::subview(_TB, ij, Kokkos::ALL(), Kokkos::ALL(), - Kokkos::ALL()); - auto C = Kokkos::subview(_TC, ij, Kokkos::ALL(), Kokkos::ALL(), - Kokkos::ALL()); - - auto sAA = Kokkos::subview(sA, idx, Kokkos::ALL(), Kokkos::ALL()); - const ordinal_type kend = _m - 1; - for (ordinal_type k = 0; k < kend; ++k) { - auto AA = Kokkos::subview(A, k, Kokkos::ALL(), Kokkos::ALL()); - auto BB = Kokkos::subview(B, k, Kokkos::ALL(), Kokkos::ALL()); - auto CC = Kokkos::subview(C, k, Kokkos::ALL(), Kokkos::ALL()); - auto DD = Kokkos::subview(A, k + 1, Kokkos::ALL(), Kokkos::ALL()); - - TeamCopy::invoke(member, AA, sAA); - member.team_barrier(); - - TeamLU::invoke(member, sAA); - member.team_barrier(); - - TeamCopy::invoke(member, sAA, AA); - - TeamTrsm::invoke(member, 1.0, sAA, - BB); - TeamTrsm::invoke(member, 1.0, - sAA, CC); - member.team_barrier(); - - TeamGemm::invoke(member, -1.0, CC, BB, 1.0, DD); - } - - { - member.team_barrier(); - auto AA = Kokkos::subview(A, kend, Kokkos::ALL(), Kokkos::ALL()); - TeamLU::invoke(member, AA); - } - } - }); - } - - double FlopCount(const block_tridiag_matrices_type T) { - const int ntridiag = T.NumTridiagMatrices(), m = T.NumRows(), - blocksize = T.BlockSize(); - - return ntridiag * - ((m - 1) * (LU_FlopCount(blocksize, blocksize) + - Trsm_Lower_FlopCountLower(blocksize, blocksize) + - Trsm_Upper_FlopCountUpper(blocksize, blocksize) + - Gemm_FlopCount(blocksize, blocksize, blocksize)) + - LU_FlopCount(blocksize, blocksize)); - } - - // for batched blas check - void run(const int op, const block_tridiag_matrices_type T, - const bool fake = false) { - _ntridiag = T.NumTridiagMatrices(); - _m = T.NumRows(); - _blocksize = T.BlockSize(); - - _TA = T.A(); - _TB = T.B(); - _TC = T.C(); - - // parallel over the instances of tridiagonal matrices - if (!fake) { -#if defined(KOKKOS_ENABLE_CUDA) && defined(__KOKKOSBATCHED_TEST_ENABLE_CUDA__) - typedef FactorizeBlockTridiagMatrices< - exec_space, value_type, array_layout, VectorLength, LU_AlgoTagType, - Trsm_AlgoTagType, Gemm_AlgoTagType> - functor_type; -#endif - - switch (op) { - case 0: { - std::cout << "KokkosBatched::RangeTag::" << Gemm_AlgoTagType::name() - << "\n"; - const Kokkos::RangePolicy policy(0, _ntridiag); - Kokkos::parallel_for( - "KokkosBatched::Test::BlockCrs::FactorizeBlockTridiagMatrices::" - "Op0", - policy, *this); - break; - } -#if defined(KOKKOS_ENABLE_CUDA) && defined(__KOKKOSBATCHED_TEST_ENABLE_CUDA__) - case 1: { - typedef Kokkos::TeamPolicy policy_type; - - int team_size = 0; - - // this is what cuda allows - const int max_team_size = - policy_type(_ntridiag, Kokkos::AUTO, VectorLength) - .team_size_max(functor_type(), Kokkos::ParallelForTag()); - - // this is what algorithm allows - if (std::is_same::value) { - const int mb = - Algo::Gemm::Blocked::mb(); - const int mp = _blocksize % mb, mblk = (_blocksize / mb) + (mp > 0); - // - max parallelism in gemm / 2 (no idea...) - team_size = - std::min(std::max(mblk * mblk / 2, 1), max_team_size / 2); - std::cout << "KokkosBatched::TeamTag::Blocked::TeamSize:: " - << team_size << " " << (max_team_size) << "\n"; - } else { - // - max parallelism in trsm * scheduling efficiency 2 - // - max cuda team size / scheduling efficiency 2 - team_size = - std::min(std::max(_blocksize * 2, 4), max_team_size / 2); - std::cout << "KokkosBatched::TeamTag::Unblocked::TeamSize:: " - << team_size << " " << (max_team_size) << "\n"; - } - - const policy_type policy(_ntridiag, team_size, VectorLength); - Kokkos::parallel_for( - "KokkosBatched::Test::BlockCrs::FactorizeBlockTridiagMatrices::" - "Op1", - policy, *this); - break; - } - case 2: { - typedef Kokkos::View packed_view_type; - typedef Kokkos::TeamPolicy policy_type; - - const int per_team_scratch = - ScratchViewType::shmem_size( - VectorLength, _blocksize, _blocksize); - - _shmemlvl = ((per_team_scratch / 1024) < 48 ? 0 : 1); - { - int team_size = 0; - - // this is what cuda allows - const int max_team_size = - policy_type(_ntridiag, Kokkos::AUTO, VectorLength) - .set_scratch_size(_shmemlvl, - Kokkos::PerTeam(per_team_scratch)) - .team_size_max(functor_type(), Kokkos::ParallelForTag()); - - // this is what algorithm allows - if (std::is_same::value) { - const int mb = - Algo::Gemm::Blocked::mb(); - const int mp = _blocksize % mb, - mblk = (_blocksize / mb) + (mp > 0); - // - max parallelism in gemm / 2 (no idea...) - team_size = - std::min(std::max(mblk * mblk / 2, 1), max_team_size / 2); - std::cout << "KokkosBatched::TeamShmemTag::Blocked::TeamSize:: " - << team_size << " " << (max_team_size) << "\n"; - } else { - team_size = - std::min(std::max(_blocksize * 2, 4), max_team_size / 2); - std::cout << "KokkosBatched::TeamShmemTag::Unblocked::TeamSize:: " - << team_size << " " << (max_team_size) << "\n"; - } - - policy_type policy = - policy_type(_ntridiag, team_size, VectorLength) - .set_scratch_size(_shmemlvl, - Kokkos::PerTeam(per_team_scratch)); - Kokkos::parallel_for( - "KokkosBatched::Test::BlockCrs::FactorizeBlockTridiagMatrices::" - "Op2", - policy, *this); - } - break; - } -#endif - default: { - std::cout << "Not supported operation mode: " << op << " \n"; - break; - } - } - } - } - - template - void a_subtract_mult_l_and_u(const ordinal_type tl, const ordinal_type il, - AViewType A, const ordinal_type tr, - const ordinal_type ir, LViewType L, - UViewType U) { - for (ordinal_type ii = 0; ii < _blocksize; ++ii) - for (ordinal_type jj = 0; jj < _blocksize; ++jj) - for (ordinal_type kk = 0; kk < _blocksize; ++kk) { - const auto l = - (ii == kk ? 1 : ii > kk ? tdiag_val(L, tr, ir, ii, kk) : 0); - const auto u = (kk <= jj ? tdiag_val(U, tr, ir, kk, jj) : 0); - tdiag_val(A, tl, il, ii, jj) -= l * u; - } - } - - template - void a_subtract_mult_b_and_c(const ordinal_type tl, const ordinal_type il, - AViewType A, const ordinal_type tr, - const ordinal_type ir, BViewType B, - CViewType C) { - for (ordinal_type ii = 0; ii < _blocksize; ++ii) - for (ordinal_type jj = 0; jj < _blocksize; ++jj) - for (ordinal_type kk = 0; kk < _blocksize; ++kk) - tdiag_val(A, tl, il, ii, jj) -= - (tdiag_val(B, tr, ir, ii, kk) * tdiag_val(C, tr, ir, kk, jj)); - } - - template - void a_subtract_mult_l_and_b(const ordinal_type tl, const ordinal_type il, - AViewType A, const ordinal_type tr, - const ordinal_type ir, LViewType L, - BViewType B) { - for (ordinal_type ii = 0; ii < _blocksize; ++ii) - for (ordinal_type jj = 0; jj < _blocksize; ++jj) - for (ordinal_type kk = 0; kk < _blocksize; ++kk) { - const auto l = - (ii == kk ? 1.0 : ii > kk ? tdiag_val(L, tr, ir, ii, kk) : 0); - tdiag_val(A, tl, il, ii, jj) -= l * tdiag_val(B, tr, ir, kk, jj); - } - } - - template - void a_subtract_mult_b_and_u(const ordinal_type tl, const ordinal_type il, - AViewType A, const ordinal_type tr, - const ordinal_type ir, BViewType B, - UViewType U) { - for (ordinal_type ii = 0; ii < _blocksize; ++ii) - for (ordinal_type jj = 0; jj < _blocksize; ++jj) - for (ordinal_type kk = 0; kk < _blocksize; ++kk) { - const auto u = (kk <= jj ? tdiag_val(U, tr, ir, kk, jj) : 0); - tdiag_val(A, tl, il, ii, jj) -= tdiag_val(B, tr, ir, ii, kk) * u; - } - } - - bool check(const block_tridiag_matrices_type T) { - // factors - auto DD = Kokkos::create_mirror_view(_TA); - Kokkos::deep_copy(DD, _TA); - auto UU = Kokkos::create_mirror_view(_TB); - Kokkos::deep_copy(UU, _TB); - auto LL = Kokkos::create_mirror_view(_TC); - Kokkos::deep_copy(LL, _TC); - - // input A - auto A = Kokkos::create_mirror_view(T.A()); - Kokkos::deep_copy(A, T.A()); - auto B = Kokkos::create_mirror_view(T.B()); - Kokkos::deep_copy(B, T.B()); - auto C = Kokkos::create_mirror_view(T.C()); - Kokkos::deep_copy(C, T.C()); - - // diffs - Kokkos::View AA( - "AA", _ntridiag, _m, _blocksize, _blocksize), - BB("BB", _ntridiag, _m - 1, _blocksize, _blocksize), - CC("CC", _ntridiag, _m - 1, _blocksize, _blocksize); - - Kokkos::deep_copy(AA, A); - Kokkos::deep_copy(BB, B); - Kokkos::deep_copy(CC, C); - - // Check | A - L U | / | A | - for (ordinal_type t = 0; t < _ntridiag; ++t) { - a_subtract_mult_l_and_u(t, 0, AA, t, 0, DD, DD); - for (ordinal_type i = 1; i < _m; ++i) { - a_subtract_mult_l_and_u(t, i, AA, t, i, DD, DD); - a_subtract_mult_b_and_c(t, i, AA, t, i - 1, LL, UU); - a_subtract_mult_l_and_b(t, i - 1, BB, t, i - 1, DD, UU); - a_subtract_mult_b_and_u(t, i - 1, CC, t, i - 1, LL, DD); - } - } - - double norm = 0, diff = 0; - for (ordinal_type t = 0; t < _ntridiag; ++t) { - for (ordinal_type ii = 0; ii < _blocksize; ++ii) - for (ordinal_type jj = 0; jj < _blocksize; ++jj) { - norm += - Kokkos::ArithTraits::abs(tdiag_val(A, t, 0, ii, jj)); - diff += - Kokkos::ArithTraits::abs(tdiag_val(AA, t, 0, ii, jj)); - } - for (ordinal_type i = 1; i < _m; ++i) - for (ordinal_type ii = 0; ii < _blocksize; ++ii) - for (ordinal_type jj = 0; jj < _blocksize; ++jj) { - norm += Kokkos::ArithTraits::abs( - tdiag_val(A, t, i, ii, jj)); - diff += Kokkos::ArithTraits::abs( - tdiag_val(AA, t, i, ii, jj)); - norm += Kokkos::ArithTraits::abs( - tdiag_val(B, t, i - 1, ii, jj)); - diff += Kokkos::ArithTraits::abs( - tdiag_val(BB, t, i - 1, ii, jj)); - norm += Kokkos::ArithTraits::abs( - tdiag_val(C, t, i - 1, ii, jj)); - diff += Kokkos::ArithTraits::abs( - tdiag_val(CC, t, i - 1, ii, jj)); - } - } - // std::cout << "tridiag factor check norm = " << norm << " diff = " << - // diff << std::endl; - const bool r_val = - diff / norm < 1e2 * std::numeric_limits::epsilon(); - return r_val; - } -}; - -template -class SolveBlockTridiagMatrices { - public: - typedef ExecSpace exec_space; - typedef ValueType value_type; - typedef ArrayLayout array_layout; - - typedef BlockTridiagMatrices - block_tridiag_matrices_type; - typedef PartitionedBlockMultiVector - partitioned_block_multi_vector_type; - - private: - ordinal_type _ntridiag, _m, _blocksize, _nvectors, _shmemlvl; - - ConstUnmanagedViewType - _TA, _TB, _TC; - ConstUnmanagedViewType< - typename partitioned_block_multi_vector_type::value_array_type> - _b; - /**/ UnmanagedViewType< - typename partitioned_block_multi_vector_type::value_array_type> - _x; - - public: - SolveBlockTridiagMatrices() {} - - KOKKOS_INLINE_FUNCTION - void operator()(const RangeTag &, const ordinal_type ij) const { - auto A = - Kokkos::subview(_TA, ij, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); - auto B = - Kokkos::subview(_TB, ij, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); - auto C = - Kokkos::subview(_TC, ij, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); - - // subview patterns - auto A_0_all_all = Kokkos::subview(A, 0, Kokkos::ALL(), Kokkos::ALL()); - auto B_0_all_all = Kokkos::subview(B, 0, Kokkos::ALL(), Kokkos::ALL()); - auto C_0_all_all = Kokkos::subview(C, 0, Kokkos::ALL(), Kokkos::ALL()); - - auto mx_0_0_all_all = - Kokkos::subview(_x, 0, 0, Kokkos::ALL(), Kokkos::ALL()); - auto mb_0_0_all_all = - Kokkos::subview(_b, 0, 0, Kokkos::ALL(), Kokkos::ALL()); - - auto x_0_all = Kokkos::subview(mx_0_0_all_all, 0, Kokkos::ALL()); - auto b_0_all = Kokkos::subview(mb_0_0_all_all, 0, Kokkos::ALL()); - - /// - /// loop over multivectors - /// - - auto &x = mx_0_0_all_all; - auto &b = mb_0_0_all_all; - - auto &xt = x_0_all; - auto xb = x_0_all; - - auto &bt = b_0_all; - auto bb = b_0_all; - - for (int jvec = 0; jvec < _nvectors; ++jvec) { - x.assign_data(&_x(ij, jvec, 0, 0)); - b.assign_data(&_b(ij, jvec, 0, 0)); - - /// - /// forward substitution - /// - { - auto < = A_0_all_all; - auto &LB = C_0_all_all; - - const bool is_same_x_and_b = (x.data() == b.data()); - { - if (!is_same_x_and_b) { - xt.assign_data(&x(0, 0)); - bt.assign_data(&b(0, 0)); - SerialCopy::invoke(bt, xt); - } - } - const ordinal_type kend = _m - 1; - for (ordinal_type k = 0; k < kend; ++k) { - LT.assign_data(&A(k, 0, 0)); - LB.assign_data(&C(k, 0, 0)); - - xt.assign_data(&x(k, 0)); - xb.assign_data(&x(k + 1, 0)); - - if (!is_same_x_and_b) { - bb.assign_data(&b(k + 1, 0)); - SerialCopy::invoke(bb, xb); - } - - SerialTrsv::invoke(1.0, LT, xt); - SerialGemv::invoke(-1.0, LB, xt, - 1.0, xb); - } - - LT.assign_data(&A(kend, 0, 0)); - xt.assign_data(&x(kend, 0)); - SerialTrsv::invoke(1.0, LT, xt); - } - - /// - /// backward substitution - /// - { - auto &UT = B_0_all_all; - auto &UB = A_0_all_all; - - const ordinal_type kbegin = _m - 1; - for (ordinal_type k = kbegin; k > 0; --k) { - UT.assign_data(&B(k - 1, 0, 0)); - UB.assign_data(&A(k, 0, 0)); - - xt.assign_data(&x(k - 1, 0)); - xb.assign_data(&x(k, 0)); - - SerialTrsv::invoke(1.0, UB, xb); - SerialGemv::invoke(-1.0, UT, xb, - 1.0, xt); - } - UT.assign_data(&A(0, 0, 0)); - xt.assign_data(&x(0, 0)); - SerialTrsv::invoke(1.0, UT, xt); - } - } - } - - template - KOKKOS_INLINE_FUNCTION void operator()(const TeamTag &, - const MemberType &member) const { - const int ijbeg = member.league_rank() * VectorLength; - Kokkos::parallel_for( - Kokkos::ThreadVectorRange(member, VectorLength), [&](const int &idx) { - const int ij = ijbeg + idx; - if (ij < _ntridiag) { - auto A = Kokkos::subview(_TA, ij, Kokkos::ALL(), Kokkos::ALL(), - Kokkos::ALL()); - auto B = Kokkos::subview(_TB, ij, Kokkos::ALL(), Kokkos::ALL(), - Kokkos::ALL()); - auto C = Kokkos::subview(_TC, ij, Kokkos::ALL(), Kokkos::ALL(), - Kokkos::ALL()); - - /// - /// loop over multivectors - /// - for (int jvec = 0; jvec < _nvectors; ++jvec) { - auto x = - Kokkos::subview(_x, ij, jvec, Kokkos::ALL(), Kokkos::ALL()); - auto b = - Kokkos::subview(_b, ij, jvec, Kokkos::ALL(), Kokkos::ALL()); - - /// - /// forward substitution - /// - { - const bool is_same_x_and_b = (x.data() == b.data()); - { - if (!is_same_x_and_b) { - auto x0 = Kokkos::subview(x, 0, Kokkos::ALL()); - auto b0 = Kokkos::subview(b, 0, Kokkos::ALL()); - TeamCopy::invoke(member, b0, - x0); - member.team_barrier(); - } - } - const ordinal_type kend = _m - 1; - for (ordinal_type k = 0; k < kend; ++k) { - auto LT = Kokkos::subview(A, k, Kokkos::ALL(), Kokkos::ALL()); - auto LB = Kokkos::subview(C, k, Kokkos::ALL(), Kokkos::ALL()); - - auto xt = Kokkos::subview(x, k, Kokkos::ALL()); - auto xb = Kokkos::subview(x, k + 1, Kokkos::ALL()); - - if (!is_same_x_and_b) { - auto bb = Kokkos::subview(b, k + 1, Kokkos::ALL()); - TeamCopy::invoke(member, bb, - xb); - } - - member.team_barrier(); - TeamTrsv::invoke(member, 1.0, - LT, xt); - - member.team_barrier(); - TeamGemv::invoke(member, -1.0, LB, xt, 1.0, - xb); - } - { - auto LL = - Kokkos::subview(A, kend, Kokkos::ALL(), Kokkos::ALL()); - auto xx = Kokkos::subview(x, kend, Kokkos::ALL()); - member.team_barrier(); - TeamTrsv::invoke(member, 1.0, - LL, xx); - } - } - - /// - /// backward substitution - /// - { - const ordinal_type kbegin = _m - 1; - for (ordinal_type k = kbegin; k > 0; --k) { - auto UT = - Kokkos::subview(B, k - 1, Kokkos::ALL(), Kokkos::ALL()); - auto UB = Kokkos::subview(A, k, Kokkos::ALL(), Kokkos::ALL()); - - auto xt = Kokkos::subview(x, k - 1, Kokkos::ALL()); - auto xb = Kokkos::subview(x, k, Kokkos::ALL()); - - member.team_barrier(); - TeamTrsv::invoke(member, 1.0, - UB, xb); - - member.team_barrier(); - TeamGemv::invoke(member, -1.0, UT, xb, 1.0, - xt); - } - { - auto UU = Kokkos::subview(A, 0, Kokkos::ALL(), Kokkos::ALL()); - auto xx = Kokkos::subview(x, 0, Kokkos::ALL()); - - member.team_barrier(); - TeamTrsv::invoke(member, 1.0, - UU, xx); - } - } - } - } - }); - } - - template - KOKKOS_INLINE_FUNCTION void operator()(const TeamShmemTag &, - const MemberType &member) const { - typedef Kokkos::View packed_view_type; - ScratchViewType s(member.team_scratch(_shmemlvl), - VectorLength, _m, _blocksize); - - const int ijbeg = member.league_rank() * VectorLength; - Kokkos::parallel_for( - Kokkos::ThreadVectorRange(member, VectorLength), [&](const int &idx) { - const int ij = ijbeg + idx; - if (ij < _ntridiag) { - auto A = Kokkos::subview(_TA, ij, Kokkos::ALL(), Kokkos::ALL(), - Kokkos::ALL()); - auto B = Kokkos::subview(_TB, ij, Kokkos::ALL(), Kokkos::ALL(), - Kokkos::ALL()); - auto C = Kokkos::subview(_TC, ij, Kokkos::ALL(), Kokkos::ALL(), - Kokkos::ALL()); - - auto sx = Kokkos::subview(s, idx, Kokkos::ALL(), Kokkos::ALL()); - - /// - /// loop over multivectors - /// - for (int jvec = 0; jvec < _nvectors; ++jvec) { - auto x = - Kokkos::subview(_x, ij, jvec, Kokkos::ALL(), Kokkos::ALL()); - auto b = - Kokkos::subview(_b, ij, jvec, Kokkos::ALL(), Kokkos::ALL()); - - // copy the entire vector into shared memory (if necessary it - // needs chunking) - TeamCopy::invoke(member, b, sx); - member.team_barrier(); - - /// - /// forward substitution - /// - { - const ordinal_type kend = _m - 1; - for (ordinal_type k = 0; k < kend; ++k) { - auto LT = Kokkos::subview(A, k, Kokkos::ALL(), Kokkos::ALL()); - auto LB = Kokkos::subview(C, k, Kokkos::ALL(), Kokkos::ALL()); - - auto xt = Kokkos::subview(sx, k, Kokkos::ALL()); - auto xb = Kokkos::subview(sx, k + 1, Kokkos::ALL()); - - member.team_barrier(); - TeamTrsv::invoke(member, 1.0, - LT, xt); - - member.team_barrier(); - TeamGemv::invoke(member, -1.0, LB, xt, 1.0, - xb); - } - { - auto LL = - Kokkos::subview(A, kend, Kokkos::ALL(), Kokkos::ALL()); - auto xx = Kokkos::subview(sx, kend, Kokkos::ALL()); - member.team_barrier(); - TeamTrsv::invoke(member, 1.0, - LL, xx); - } - } - - /// - /// backward substitution - /// - { - const ordinal_type kbegin = _m - 1; - for (ordinal_type k = kbegin; k > 0; --k) { - auto UT = - Kokkos::subview(B, k - 1, Kokkos::ALL(), Kokkos::ALL()); - auto UB = Kokkos::subview(A, k, Kokkos::ALL(), Kokkos::ALL()); - - auto xt = Kokkos::subview(sx, k - 1, Kokkos::ALL()); - auto xb = Kokkos::subview(sx, k, Kokkos::ALL()); - - member.team_barrier(); - TeamTrsv::invoke(member, 1.0, - UB, xb); - - member.team_barrier(); - TeamGemv::invoke(member, -1.0, UT, xb, 1.0, - xt); - } - { - auto UU = Kokkos::subview(A, 0, Kokkos::ALL(), Kokkos::ALL()); - auto xx = Kokkos::subview(sx, 0, Kokkos::ALL()); - - member.team_barrier(); - TeamTrsv::invoke(member, 1.0, - UU, xx); - } - } - // copy the entire vector into shared memory (if necessary it - // needs chunking) - TeamCopy::invoke(member, sx, x); - member.team_barrier(); - } - } - }); - } - - void run(const int op, const block_tridiag_matrices_type T, - const partitioned_block_multi_vector_type x, - const partitioned_block_multi_vector_type b) { - assert(T.NumTridiagMatrices() == x.NumPartitions()); - assert(T.NumRows() == x.NumRows()); - assert(T.BlockSize() == x.BlockSize()); - - _ntridiag = T.NumTridiagMatrices(); - _m = T.NumRows(); - _blocksize = T.BlockSize(); - _nvectors = x.NumVectors(); - - _TA = T.A(); - _TB = T.B(); - _TC = T.C(); - - _x = x.Values(); - _b = b.Values(); - - { -#if defined(KOKKOS_ENABLE_CUDA) && defined(__KOKKOSBATCHED_TEST_ENABLE_CUDA__) - typedef SolveBlockTridiagMatrices - functor_type; -#endif - - switch (op) { - case 0: { - const Kokkos::RangePolicy policy(0, _ntridiag); - Kokkos::parallel_for( - "KokkosBatched::Test::BlockCrs::SolveBlockTridiagMatrices::Op0", - policy, *this); - break; - } -#if defined(KOKKOS_ENABLE_CUDA) && defined(__KOKKOSBATCHED_TEST_ENABLE_CUDA__) - case 1: { - typedef Kokkos::TeamPolicy policy_type; - - int team_size = 0; - - // this is what cuda allows - const int max_team_size = - policy_type(_ntridiag, Kokkos::AUTO, VectorLength) - .team_size_max(functor_type(), Kokkos::ParallelForTag()); - - // this is what algorithm allows - if (std::is_same::value) { - const int mb = - Algo::Gemv::Blocked::mb(); - const int mp = _blocksize % mb, mblk = (_blocksize / mb) + (mp > 0); - team_size = std::min(std::max(mblk / 2, 1), int(max_team_size / 2)); - } else { - // in solve phase, max peak parallelism is same as blocksize (one - // iteration) better to give blocksize/2 - team_size = - std::min(std::max(_blocksize / 2, 4), int(max_team_size / 2)); - } - - const policy_type policy(_ntridiag, team_size, VectorLength); - Kokkos::parallel_for( - "KokkosBatched::Test::BlockCrs::SolveBlockTridiagMatrices::Op1", - policy, *this); - break; - } - case 2: { - typedef Kokkos::View packed_view_type; - typedef Kokkos::TeamPolicy policy_type; - - const int per_team_scratch = - ScratchViewType::shmem_size(VectorLength, _m, - _blocksize); - - _shmemlvl = ((per_team_scratch / 1024) < 48 ? 0 : 1); - { - int team_size = 0; - - // this is what cuda allows - const int max_team_size = - policy_type(_ntridiag, Kokkos::AUTO, VectorLength) - .set_scratch_size(_shmemlvl, - Kokkos::PerTeam(per_team_scratch)) - .team_size_max(functor_type(), Kokkos::ParallelForTag()); - - // this is what algorithm allows - if (std::is_same::value) { - const int mb = - Algo::Gemv::Blocked::mb(); - const int mp = _blocksize % mb, - mblk = (_blocksize / mb) + (mp > 0); - team_size = - std::min(std::max(mblk / 2, 1), int(max_team_size / 2)); - } else { - team_size = - std::min(std::max(_blocksize / 2, 4), int(max_team_size / 2)); - } - - policy_type policy = - policy_type(_ntridiag, team_size, VectorLength) - .set_scratch_size(_shmemlvl, - Kokkos::PerTeam(per_team_scratch)); - ; - Kokkos::parallel_for( - "KokkosBatched::Test::BlockCrs::SolveBlockTridiagMatrices::Op2", - policy, *this); - } - break; - } -#endif - default: { - std::cout << "Not supported operation mode: " << op << " \n"; - break; - } - } - } - } - - template - void r_subtract_mult_a_and_x(const ordinal_type tr, const ordinal_type ir, - RViewType R, const ordinal_type ta, - const ordinal_type ia, AViewType A, - const ordinal_type tx, const ordinal_type ix, - XViewType X) { - for (ordinal_type kk = 0; kk < _nvectors; ++kk) - for (ordinal_type ii = 0; ii < _blocksize; ++ii) - for (ordinal_type jj = 0; jj < _blocksize; ++jj) - tdiag_val(R, tr, kk, ir, ii) -= - tdiag_val(A, ta, ia, ii, jj) * tdiag_val(X, tx, kk, ix, jj); - } - - bool check(const block_tridiag_matrices_type T, - const partitioned_block_multi_vector_type b) { - // input A - auto AA = Kokkos::create_mirror_view(T.A()); - Kokkos::deep_copy(AA, T.A()); - auto BB = Kokkos::create_mirror_view(T.B()); - Kokkos::deep_copy(BB, T.B()); - auto CC = Kokkos::create_mirror_view(T.C()); - Kokkos::deep_copy(CC, T.C()); - - auto bb = Kokkos::create_mirror_view(b.Values()); - Kokkos::deep_copy(bb, b.Values()); - auto xx = Kokkos::create_mirror_view(_x); - Kokkos::deep_copy(xx, _x); - - // diffs - Kokkos::View rr( - "rr", bb.extent(0), bb.extent(1), bb.extent(2), bb.extent(3)); - - Kokkos::deep_copy(rr, bb); - - // Check | Ax - b | / | b | - for (ordinal_type t = 0; t < _ntridiag; ++t) { - r_subtract_mult_a_and_x(t, 0, rr, t, 0, AA, t, 0, xx); - r_subtract_mult_a_and_x(t, 0, rr, t, 0, BB, t, 1, xx); - - for (ordinal_type i = 1; i < (_m - 1); ++i) { - r_subtract_mult_a_and_x(t, i, rr, t, i - 1, CC, t, i - 1, xx); - r_subtract_mult_a_and_x(t, i, rr, t, i, AA, t, i, xx); - r_subtract_mult_a_and_x(t, i, rr, t, i, BB, t, i + 1, xx); - } - r_subtract_mult_a_and_x(t, _m - 1, rr, t, _m - 2, CC, t, _m - 2, xx); - r_subtract_mult_a_and_x(t, _m - 1, rr, t, _m - 1, AA, t, _m - 1, xx); - } - - double norm = 0, diff = 0; - for (ordinal_type t = 0; t < _ntridiag; ++t) - for (ordinal_type jvec = 0; jvec < _nvectors; ++jvec) - for (ordinal_type i = 0; i < _m; ++i) - for (ordinal_type ii = 0; ii < _blocksize; ++ii) { - norm += Kokkos::ArithTraits::abs( - tdiag_val(bb, t, jvec, i, ii)); - diff += Kokkos::ArithTraits::abs( - tdiag_val(rr, t, jvec, i, ii)); - } - - // std::cout << "tridiag solve check norm = " << norm << " diff = " << - // diff << std::endl; - const bool r_val = - diff / norm < 1e2 * std::numeric_limits::epsilon(); - return r_val; - } -}; - -// unit tests -template -void run(const ordinal_type ni, const ordinal_type nj, const ordinal_type nk, - const ordinal_type blocksize, const ordinal_type nrhs, - const bool test_tpl = false) { - typedef typename DeviceSpace::array_layout DeviceArrayLayout; - typedef Kokkos::DefaultHostExecutionSpace HostSpace; - - bool success = true; - StructuredBlock mesh(ni, nj, nk); - - // Test StructuredBlock. - for (ordinal_type c = 0; c < mesh.size(); ++c) { - ordinal_type i, j, k; - mesh.id2ijk(c, i, j, k); - TEST_ASSERT(i >= 0 && i < mesh.ni, success); - TEST_ASSERT(j >= 0 && j < mesh.nj, success); - TEST_ASSERT(k >= 0 && k < mesh.nk, success); - TEST_ASSERT(mesh.ijk2id(i, j, k) == c, success); - } - - // Graph construction - CrsGraph graph_host = - create_graph_host_for_structured_block( - mesh, StencilShape::cross); - - // Crs matrix and multi vector construction - BlockCrsMatrix A_host(graph_host, blocksize); - fill_block_crs_matrix_host(A_host); - - // Device mirroring - auto A_device = create_mirror(A_host); - deep_copy(A_device, A_host); - - // Test Matrix Vector product - { - const ordinal_type m = graph_host.NumRows(); - - BlockMultiVector x_host(nrhs, m, blocksize); - fill_block_multi_vector_host(x_host); - - auto x_device = create_mirror(x_host); - deep_copy(x_device, x_host); - - BlockMultiVector y1_device(nrhs, m, - blocksize), - y2_device(nrhs, m, blocksize); - - { - BlockCrsMatrixVectorProductByRow matvec; - matvec.run(A_device, x_device, y1_device); - } - { - BlockCrsMatrixVectorProductByBlockRow - matvec; - matvec.run(A_device, x_device, y2_device); - } - - const double rdiff = - compute_relative_diff(y1_device.Values(), y2_device.Values()); - TEST_ASSERT(rdiff <= 1e2 * std::numeric_limits::epsilon(), - success); - } - - // Test Block TriDiag Extraction - BlockTridiagMatrices T_device = - create_block_tridiag_matrices( - mesh.ni * mesh.nj, mesh.nk, blocksize); - { - ExtractBlockTridiagMatrices - extblk(mesh); - extblk.run(A_device, T_device); - TEST_ASSERT(extblk.check(), success); - } - - BlockTridiagMatrices T_org_device = - create_block_tridiag_matrices( - mesh.ni * mesh.nj, mesh.nk, blocksize); - - deep_copy(T_org_device, T_device); - - // Test Block TriDiag Factorization - if (test_tpl) { -#if defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL__) && \ - defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL_BATCHED__) && \ - defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL_COMPACT_BATCHED__) - FactorizeBlockTridiagMatrices< - DeviceSpace, ValueType, DeviceArrayLayout, VectorLength, - Algo::LU::CompactMKL, Algo::Trsm::CompactMKL, Algo::Gemm::CompactMKL> - factorblk; - factorblk.run(0, T_device); // range policy only now - TEST_ASSERT(factorblk.check(T_org_device), success); -#elif defined(__KOKKOSBATCHED_NVIDIA_CUBLAS__) - std::cout << "CUBLAS compact version does not exist\n"; -#else - std::cout << "TPLs (CompactMKL or CUBLAS) are not found\n"; -#endif - } else { - FactorizeBlockTridiagMatrices - factorblk; - factorblk.run(Oper, T_device); - TEST_ASSERT(factorblk.check(T_org_device), success); - } - - // Test Block TriDiag Solve - { - PartitionedBlockMultiVector - b_host = create_partitioned_block_multi_vector( - mesh.ni * mesh.nj, nrhs, mesh.nk, blocksize); - fill_partitioned_block_multi_vector_host(b_host, mesh.ni * mesh.nj); - - auto b_device = create_mirror(b_host); - deep_copy(b_device, b_host); - - PartitionedBlockMultiVector - x_device = create_partitioned_block_multi_vector( - mesh.ni * mesh.nj, nrhs, mesh.nk, blocksize); - if (test_tpl) { -#if defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL__) && \ - defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL_BATCHED__) && \ - defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL_COMPACT_BATCHED__) - SolveBlockTridiagMatrices - solveblk; - - solveblk.run(0, T_device, x_device, b_device); - TEST_ASSERT(solveblk.check(T_org_device, b_device), success); -#elif defined(__KOKKOSBATCHED_NVIDIA_CUBLAS__) - std::cout << "CUBLAS compact version does not exist\n"; -#else - std::cout << "TPLs (CompactMKL or CUBLAS) are not found\n"; -#endif - } else { - SolveBlockTridiagMatrices - solveblk; - - solveblk.run(Oper, T_device, x_device, b_device); - TEST_ASSERT(solveblk.check(T_org_device, b_device), success); - } - } - - if (!success) - std::cout << "Unit Tests:: Failed:: " - << " ni = " << ni << " nj = " << nj << " nk = " << nk - << " blocksize = " << blocksize << " nrhs = " << nrhs << " \n"; -} - -// performance tests -template -int run(const Input &input, const bool test_tpl = false) { - typedef typename DeviceSpace::array_layout DeviceArrayLayout; - typedef Kokkos::DefaultHostExecutionSpace HostSpace; - - const ordinal_type niter = 50; - int dontopt = 0; - bool success = true; - - /// - /// construct a discrete system of equations - /// - const ordinal_type ni = input.ni, nj = input.nj, nk = input.nk, - blocksize = input.bs, nrhs = input.nrhs, opf = input.opf, - ops = input.ops; - - StructuredBlock mesh(ni, nj, nk); - - // something is not copyable ... don't know why yet... - BlockCrsMatrix A_device; - // double t_fill_block_crs_matrix = 0.0, t_fill_graph = 0.0; - { - const StencilShape::Enum stencil_shape = input.stencil_shape; - CrsGraph graph_host; - { - Timer timer("Fill Graph _______________"); - timer.reset(); - graph_host = create_graph_host_for_structured_block( - mesh, stencil_shape); - /* t_fill_graph = */ timer.seconds(); - } - BlockCrsMatrix A_host(graph_host, blocksize); - { - Timer timer("Fill Block CRS Matrix_______________"); - timer.reset(); - fill_block_crs_matrix_host(A_host); - /* t_fill_block_crs_matrix = */ timer.seconds(); - } - A_device = create_mirror(A_host); - deep_copy(A_device, A_host); - } - - // memory size - const double memsize_A = - A_device.Values().extent(0) * blocksize * blocksize * 8; - - /// - /// matrix vector multiplication test - /// - double t_matvec = 0.0; - // double t_fill_block_multi_vector = 0.0; - { - const ordinal_type m = mesh.size(); - - BlockMultiVector x_host(nrhs, m, blocksize); - { - Timer timer("Fill Block Multi Vector______________"); - timer.reset(); - fill_block_multi_vector_host(x_host); - /* t_fill_block_multi_vector = */ timer.seconds(); - } - auto x_device = create_mirror(x_host); - deep_copy(x_device, x_host); - - BlockMultiVector y_device(nrhs, m, - blocksize); - { - // BlockCrsMatrixVectorProductByRow matvec; - BlockCrsMatrixVectorProductByBlockRow - matvec; - { - Timer timer("50 BlockCrsMatrixVectorProduct"); - timer.reset(); - for (ordinal_type i = 0; i < niter; ++i) { - matvec.run(A_device, x_device, y_device); - dontopt += i; - } - t_matvec = timer.seconds(); - } - } - } - - /// - /// block tridiag extraction test - /// - const double memsize_T = - ni * nj * (3 * (nk - 1) * blocksize * blocksize + blocksize * blocksize) * - 8; - - double t_extract = 0.0; - BlockTridiagMatrices T_device = - create_block_tridiag_matrices( - ni * nj, nk, blocksize); - { - ExtractBlockTridiagMatrices - extblk(mesh); - { - Timer timer("ExtractBlockTridiagMatrices"); - timer.reset(); - extblk.run(A_device, T_device); - t_extract = timer.seconds(); - } - if (input.check) TEST_ASSERT(extblk.check(), success); - } - - // keep original matrix for check - BlockTridiagMatrices T_org_device = - create_block_tridiag_matrices( - ni * nj, nk, blocksize); - - deep_copy(T_org_device, T_device); - - /// - /// block tridiag factorization test - /// - double t_factorize = 0.0, f_factorize = 0.0; - if (test_tpl) { -#if defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL__) && \ - defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL_BATCHED__) && \ - defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL_COMPACT_BATCHED__) - FactorizeBlockTridiagMatrices< - DeviceSpace, ValueType, DeviceArrayLayout, VectorLength, - Algo::LU::CompactMKL, Algo::Trsm::CompactMKL, Algo::Gemm::CompactMKL> - factorblk; - f_factorize = - factorblk.FlopCount(T_device) * (sizeof(ValueType) / sizeof(double)); - { - Timer timer("FactorizeBlockTridiagMatrices"); - timer.reset(); - Kokkos::fence(); - factorblk.run(0, T_device); - Kokkos::fence(); - t_factorize = timer.seconds(); - } - TEST_ASSERT(factorblk.check(T_org_device), success); -#elif defined(__KOKKOSBATCHED_NVIDIA_CUBLAS__) - std::cout << "CUBLAS compact version does not exist\n"; -#else - std::cout << "TPLs (CompactMKL or CUBLAS) are not found\n"; -#endif - } else { - FactorizeBlockTridiagMatrices - factorblk; - - f_factorize = - factorblk.FlopCount(T_device) * (sizeof(ValueType) / sizeof(double)); - { - Timer timer("FactorizeBlockTridiagMatrices"); - timer.reset(); - Kokkos::fence(); - factorblk.run(opf, T_device); - Kokkos::fence(); - t_factorize = timer.seconds(); - } - if (input.check) TEST_ASSERT(factorblk.check(T_org_device), success); - } - - /// - /// block tridiag solve test - /// - double t_solve = 0.0; - { - PartitionedBlockMultiVector - b_host = create_partitioned_block_multi_vector( - ni * nj, nrhs, nk, blocksize); - fill_partitioned_block_multi_vector_host(b_host, ni * nj); - - auto b_device = create_mirror(b_host); - deep_copy(b_device, b_host); - - PartitionedBlockMultiVector - x_device = create_partitioned_block_multi_vector( - ni * nj, nrhs, nk, blocksize); - if (test_tpl) { -#if defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL__) && \ - defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL_BATCHED__) && \ - defined(__KOKKOSBATCHED_ENABLE_INTEL_MKL_COMPACT_BATCHED__) - SolveBlockTridiagMatrices - solveblk; - { - Timer timer("50 SolveBlockTridiagMatrices"); - timer.reset(); - Kokkos::fence(); - for (ordinal_type i = 0; i < niter; ++i) { - solveblk.run(0, T_device, x_device, b_device); - dontopt += i; - } - Kokkos::fence(); - t_solve = timer.seconds(); - } - if (input.check) - TEST_ASSERT(solveblk.check(T_org_device, b_device), success); -#elif defined(__KOKKOSBATCHED_NVIDIA_CUBLAS__) - std::cout << "CUBLAS compact version does not exist\n"; -#else - std::cout << "TPLs (CompactMKL or CUBLAS) are not found\n"; -#endif - } else { - SolveBlockTridiagMatrices - solveblk; - { - Timer timer("50 SolveBlockTridiagMatrices"); - timer.reset(); - Kokkos::fence(); - for (ordinal_type i = 0; i < niter; ++i) { - solveblk.run(ops, T_device, x_device, b_device); - dontopt += i; - } - Kokkos::fence(); - t_solve = timer.seconds(); - } - if (input.check) - TEST_ASSERT(solveblk.check(T_org_device, b_device), success); - } - } - - const double t_matvec_per_iter = t_matvec / double(niter), - t_solve_per_iter = t_solve / double(niter); - std::cout << " matvec = " << t_matvec_per_iter << std::endl; - std::cout << " extract = " << t_extract - << " extract/matvec = " << (t_extract / t_matvec_per_iter) - << std::endl; - // std::cout << " factor = " << t_factorize << " factor/matvec = " - // << (t_factorize/t_matvec_per_iter) << std::endl; - std::cout << " factor = " << t_factorize - << " factor/matvec = " << (t_factorize / t_matvec_per_iter) - << " flop = " << f_factorize - << " flop/s = " << (f_factorize / t_factorize) << std::endl; - std::cout << " solve = " << t_solve_per_iter - << " solve/matvec = " << (t_solve_per_iter / t_matvec_per_iter) - << std::endl; - std::cout << " memory used = " << (memsize_A + memsize_T) << std::endl; - - return dontopt + success; -} - -} // namespace Test -} // namespace KokkosBatched diff --git a/unit_test/sparse/Test_Sparse.hpp b/unit_test/sparse/Test_Sparse.hpp index e75eb1ce6a..5a240ce228 100644 --- a/unit_test/sparse/Test_Sparse.hpp +++ b/unit_test/sparse/Test_Sparse.hpp @@ -3,7 +3,6 @@ #include "Test_Sparse_block_gauss_seidel.hpp" #include "Test_Sparse_CrsMatrix.hpp" -#include "Test_Sparse_BlockCrsMatrix.hpp" #include "Test_Sparse_BsrMatrix.hpp" #include "Test_Sparse_findRelOffset.hpp" #include "Test_Sparse_gauss_seidel.hpp" @@ -16,7 +15,6 @@ #include "Test_Sparse_SortCrs.hpp" #include "Test_Sparse_spiluk.hpp" #include "Test_Sparse_spmv.hpp" -#include "Test_Sparse_spmv_blockcrs.hpp" #include "Test_Sparse_spmv_bsr.hpp" #include "Test_Sparse_sptrsv.hpp" #include "Test_Sparse_trsv.hpp" diff --git a/unit_test/sparse/Test_Sparse_BlockCrsMatrix.hpp b/unit_test/sparse/Test_Sparse_BlockCrsMatrix.hpp deleted file mode 100644 index 6eb4488c72..0000000000 --- a/unit_test/sparse/Test_Sparse_BlockCrsMatrix.hpp +++ /dev/null @@ -1,384 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -//#include "KokkosKernels_ETIHelperMacros.h" -#include -#include -#include -#include "KokkosSparse_BlockCrsMatrix.hpp" -#include "KokkosSparse_CrsMatrix.hpp" - -// #ifndef kokkos_complex_double -// #define kokkos_complex_double Kokkos::complex -// #define kokkos_complex_float Kokkos::complex -// #endif - -typedef Kokkos::complex kokkos_complex_double; -typedef Kokkos::complex kokkos_complex_float; - -namespace Test { // anonymous - -using std::cerr; -using std::endl; - -// Create a test sparse matrix A. -// -// Identify the matrix to create by number (whichMatrix). The -// following lists the valid options for whichMatrix: -// -// 0: A square 8 x 8 sparse CrsMatrix with implicit block structure -// 1: A square 4 x 4 sparse BlockCrsMatrix -// -// \param ptr [out] Array of row offsets, of length numRows+1. -// \param ind [out] Array of column indices, of length nnz (CrsMatrix) -// or numBlocks (BlockCrsMatrix). -// \param val [out] Array of entries (values), of length nnz. -// \param numRows [out] The number of rows in the matrix. -// \param numCols [out] The number of columns in the matrix. -// \param nnz [out] The number of stored entries in the matrix. -// \param whichMatrix [in] The index of the matrix to create. -template -void makeSparseMatrix( - typename sparseMat_t::StaticCrsGraphType::row_map_type::non_const_type &ptr, - typename sparseMat_t::StaticCrsGraphType::entries_type::non_const_type &ind, - typename sparseMat_t::values_type::non_const_type &val, - typename sparseMat_t::ordinal_type &numRows, - typename sparseMat_t::ordinal_type &numCols, - typename sparseMat_t::size_type &nnz, const int whichMatrix, - typename sparseMat_t::ordinal_type &blockDim) { - typedef typename sparseMat_t::StaticCrsGraphType::row_map_type::non_const_type - ptr_type; - typedef typename sparseMat_t::StaticCrsGraphType::entries_type::non_const_type - ind_type; - typedef typename sparseMat_t::values_type::non_const_type val_type; - typedef typename sparseMat_t::ordinal_type lno_t; - typedef typename sparseMat_t::size_type size_type; - typedef typename sparseMat_t::value_type scalar_t; - - using Kokkos::HostSpace; - using Kokkos::MemoryUnmanaged; - using Kokkos::View; - - if (whichMatrix == 0) { - numRows = 8; - numCols = 8; - nnz = 24; - blockDim = 1; - - const size_type ptrRaw[] = {0, 4, 8, 10, 12, 14, 16, 20, 24}; - const lno_t indRaw[] = {0, 1, 4, 5, 0, 1, 4, 5, 2, 3, 2, 3, - 4, 5, 4, 5, 2, 3, 6, 7, 2, 3, 6, 7}; - const scalar_t valRaw[] = {.1, 1, 4, 5, -.1, -1, -4, -5, 2, 3, -2, -3, - 4, 5, -4, -5, 2, 3, 6, 7, -2, -3, -6, -7}; - - // Create the output Views. - ptr = ptr_type("ptr", numRows + 1); - ind = ind_type("ind", nnz); - val = val_type("val", nnz); - - // Wrap the above three arrays in unmanaged Views, so we can use deep_copy. - typename ptr_type::HostMirror::const_type ptrIn(ptrRaw, numRows + 1); - typename ind_type::HostMirror::const_type indIn(indRaw, nnz); - typename val_type::HostMirror::const_type valIn(valRaw, nnz); - - Kokkos::deep_copy(ptr, ptrIn); - Kokkos::deep_copy(ind, indIn); - Kokkos::deep_copy(val, valIn); - } else if (whichMatrix == 1) { - numRows = 4; - numCols = 4; - nnz = 24; - - blockDim = 2; - const lno_t numBlocks = 6; - - const size_type ptrRaw[] = {0, 2, 3, 4, 6}; - const lno_t indRaw[] = {0, 2, 1, 2, 1, 3}; - const scalar_t valRaw[] = {.1, 1, 4, 5, -.1, -1, -4, -5, 2, 3, -2, -3, - 4, 5, -4, -5, 2, 3, 6, 7, -2, -3, -6, -7}; - - // Create the output Views. - ptr = ptr_type("ptr", numRows + 1); - ind = ind_type("ind", numBlocks); - val = val_type("val", nnz); - - // Wrap the above three arrays in unmanaged Views, so we can use deep_copy. - typename ptr_type::HostMirror::const_type ptrIn(ptrRaw, numRows + 1); - typename ind_type::HostMirror::const_type indIn(indRaw, numBlocks); - typename val_type::HostMirror::const_type valIn(valRaw, nnz); - - Kokkos::deep_copy(ptr, ptrIn); - Kokkos::deep_copy(ind, indIn); - Kokkos::deep_copy(val, valIn); - } - - else { // whichMatrix != 0 - std::ostringstream os; - os << "Invalid whichMatrix value " << whichMatrix - << ". Valid value(s) include " << 0 << "."; - throw std::invalid_argument(os.str()); - } -} - -// Return the Kokkos::CrsMatrix corresponding to makeSparseMatrix(). -template -crsMat_t makeCrsMatrix_BlockStructure() { - typedef typename crsMat_t::StaticCrsGraphType graph_t; - typedef typename graph_t::row_map_type::non_const_type lno_view_t; - typedef typename graph_t::entries_type::non_const_type lno_nnz_view_t; - typedef typename crsMat_t::values_type::non_const_type scalar_view_t; - typedef typename crsMat_t::ordinal_type lno_t; - typedef typename crsMat_t::size_type size_type; - - lno_view_t ptr; - lno_nnz_view_t ind; - scalar_view_t val; - lno_t numRows; - lno_t numCols; - size_type nnz; - lno_t blockDim; - - const int whichMatrix = 0; - makeSparseMatrix(ptr, ind, val, numRows, numCols, nnz, whichMatrix, - blockDim); - return crsMat_t("A", numRows, numCols, nnz, val, ptr, ind); -} - -template -blkcrsMat_t makeBlockCrsMatrix() { - typedef typename blkcrsMat_t::StaticCrsGraphType graph_t; - typedef typename graph_t::row_map_type::non_const_type lno_view_t; - typedef typename graph_t::entries_type::non_const_type lno_nnz_view_t; - typedef typename blkcrsMat_t::values_type::non_const_type scalar_view_t; - typedef typename blkcrsMat_t::ordinal_type lno_t; - typedef typename blkcrsMat_t::size_type size_type; - - lno_view_t ptr; - lno_nnz_view_t ind; - scalar_view_t val; - lno_t numRows; - lno_t numCols; - size_type nnz; - lno_t blockDim; - - const int whichMatrix = 1; - makeSparseMatrix(ptr, ind, val, numRows, numCols, nnz, - whichMatrix, blockDim); - return blkcrsMat_t("blkA", numRows, numCols, nnz, val, ptr, ind, blockDim); -} - -template -struct TestFunctor { - typedef typename MatrixType::value_type scalar_t; - typedef typename MatrixType::ordinal_type lno_t; - - // Members - MatrixType A; - ResultsType d_results; - - // Constructor - TestFunctor(MatrixType &A_, ResultsType &d_results_) - : A(A_), d_results(d_results_) {} - - KOKKOS_INLINE_FUNCTION - void operator()(const int /*rid*/) const { - // Test 1: Check member functions behave as expected - bool check0 = true; - bool check1 = true; - bool check2 = true; - bool check3 = true; - for (lno_t i = 0; i < A.numRows(); ++i) { - // Test SparseBlockRowView - { - auto iblockrow = A.block_row(i); - auto num_blocks_in_row = iblockrow.length; - for (auto blk = 0; blk < num_blocks_in_row; ++blk) { - auto view_blk = iblockrow.block(blk); - for (auto lrow = 0; lrow < A.blockDim(); ++lrow) { - auto row_ptr = iblockrow.local_row_in_block(blk, lrow); - for (auto lcol = 0; lcol < A.blockDim(); ++lcol) { - auto entry = iblockrow.local_block_value(blk, lrow, lcol); - // std::cout << "check0: " << ( entry == row_ptr[lcol] ); - // std::cout << "check1: " << ( entry == view_blk(lrow,lcol) ); - check0 = check0 && (entry == row_ptr[lcol]); - check1 = check1 && (entry == view_blk(lrow, lcol)); - } // end local col in row - } // end local row in blk - } // end blk - } - d_results(0) = check0; - d_results(1) = check1; - - // Test SparseBlockRowViewConst - { - auto iblockrow = A.block_row_Const(i); - auto num_blocks_in_row = iblockrow.length; - for (auto blk = 0; blk < num_blocks_in_row; ++blk) { - auto view_blk = iblockrow.block(blk); - for (auto lrow = 0; lrow < A.blockDim(); ++lrow) { - auto row_ptr = iblockrow.local_row_in_block(blk, lrow); - for (auto lcol = 0; lcol < A.blockDim(); ++lcol) { - auto entry = iblockrow.local_block_value(blk, lrow, lcol); - check2 = check2 && (entry == row_ptr[lcol]); - check3 = check3 && (entry == view_blk(lrow, lcol)); - } // end local col in row - } // end local row in blk - } // end blk - } - d_results(0) = check0; - d_results(1) = check1; - d_results(2) = check2; - d_results(3) = check3; - } // end for blk rows - - // Test sumIntoValues - { - check0 = true; - check1 = true; - check2 = true; - const lno_t ncols = 1; - const lno_t cols[] = {3}; - const lno_t browi = 3; - const scalar_t vals[] = { - 10, 11, 20, 22}; // represents a single block: [10 11; 20 22] - const scalar_t result[] = {16, 18, 14, 15}; - - // This block will be summed into the existing block [6 7; -6 -7] - // Expected result: [16 18; 14 15] - A.sumIntoValues(browi, cols, ncols, vals); - auto iblockrow = A.block_row_Const(browi); - auto relBlk = iblockrow.findRelBlockOffset(cols[0]); - auto view_blk = iblockrow.block(relBlk); - for (auto lrow = 0; lrow < A.blockDim(); ++lrow) { - auto row_ptr = iblockrow.local_row_in_block(relBlk, lrow); - for (auto lcol = 0; lcol < A.blockDim(); ++lcol) { - auto entry = iblockrow.local_block_value(relBlk, lrow, lcol); - check0 = check0 && (entry == row_ptr[lcol]); - check1 = check1 && (entry == view_blk(lrow, lcol)); - check2 = check2 && (entry == result[lrow * A.blockDim() + lcol]); - } // end local col in row - } // end local row in blk - d_results(4) = check0; - d_results(5) = check1; - d_results(6) = check2; - } - - // Test replaceValues - { - check0 = true; - check1 = true; - check2 = true; - const lno_t ncols = 1; - const lno_t cols[] = {3}; - const lno_t browi = 3; - const scalar_t valsreplace[] = { - -10, -11, -20, -22}; // represents a single block: [10 11; 20 22] - - // The existing block to be replaced was: [6 7; -6 -7] - A.replaceValues(browi, cols, ncols, valsreplace); - - auto iblockrow = A.block_row_Const(browi); - auto relBlk = iblockrow.findRelBlockOffset(cols[0]); - auto view_blk = iblockrow.block(relBlk); - for (auto lrow = 0; lrow < A.blockDim(); ++lrow) { - auto row_ptr = iblockrow.local_row_in_block(relBlk, lrow); - for (auto lcol = 0; lcol < A.blockDim(); ++lcol) { - auto entry = iblockrow.local_block_value(relBlk, lrow, lcol); - check0 = check0 && (entry == row_ptr[lcol]); - check1 = check1 && (entry == view_blk(lrow, lcol)); - check2 = check2 && (entry == valsreplace[lrow * A.blockDim() + lcol]); - } // end local col in row - } // end local row in blk - d_results(7) = check0; - d_results(8) = check1; - d_results(9) = check2; - } - - } // end operator()(i) -}; // end TestFunctor - -} // namespace Test - -// Create a CrsMatrix and BlockCrsMatrix and test member functions. -template -void testBlockCrsMatrix() { - using namespace Test; - - typedef KokkosSparse::CrsMatrix - crs_matrix_type; - typedef KokkosSparse::Experimental::BlockCrsMatrix - block_crs_matrix_type; - - crs_matrix_type crsA = makeCrsMatrix_BlockStructure(); - block_crs_matrix_type A = makeBlockCrsMatrix(); - - const int num_entries = 10; - typedef Kokkos::View result_view_type; - result_view_type d_results("d_results"); - auto h_results = Kokkos::create_mirror_view(d_results); - - Kokkos::parallel_for( - "KokkosSparse::Test::BlockCrsMatrix", - Kokkos::RangePolicy(0, 1), - Test::TestFunctor(A, d_results)); - - Kokkos::deep_copy(h_results, d_results); - - for (decltype(h_results.extent(0)) i = 0; i < h_results.extent(0); ++i) { - EXPECT_EQ(h_results[i], true); - } -} - -#define KOKKOSKERNELS_EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ - TEST_F( \ - TestCategory, \ - sparse##_##blkcrsmatrix##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ - testBlockCrsMatrix(); \ - } - -#include - -#undef KOKKOSKERNELS_EXECUTE_TEST diff --git a/unit_test/sparse/Test_Sparse_block_gauss_seidel.hpp b/unit_test/sparse/Test_Sparse_block_gauss_seidel.hpp index 51e0899529..e22a1fdacb 100644 --- a/unit_test/sparse/Test_Sparse_block_gauss_seidel.hpp +++ b/unit_test/sparse/Test_Sparse_block_gauss_seidel.hpp @@ -203,15 +203,15 @@ void test_block_gauss_seidel_rank1(lno_t numRows, size_type nnz, // this makes consecutive 5 rows to have same columns. // it will add scalar 0's for those entries that does not exists. // the result is still a point crs matrix. - KokkosSparse::Impl::kk_create_blockcrs_formatted_point_crsmatrix( + KokkosSparse::Impl::kk_create_bsr_formated_point_crsmatrix( block_size, crsmat.numRows(), crsmat.numCols(), crsmat.graph.row_map, crsmat.graph.entries, crsmat.values, out_r, out_c, pf_rm, pf_e, pf_v); graph_t static_graph2(pf_e, pf_rm); crsMat_t crsmat2("CrsMatrix2", out_c, pf_v, static_graph2); // this converts the previous generated matrix to block matrix. - auto input_mat = MatrixConverter::from_blockcrs_formatted_point_crsmatrix( - crsmat2, block_size); + auto input_mat = + MatrixConverter::from_bsr_formated_point_crsmatrix(crsmat2, block_size); lno_t nv = ((crsmat2.numRows() + block_size - 1) / block_size) * block_size; @@ -290,14 +290,14 @@ void test_block_gauss_seidel_rank2(lno_t numRows, size_type nnz, // this makes consecutive 5 rows to have same columns. // it will add scalar 0's for those entries that does not exists. // the result is still a point crs matrix. - KokkosSparse::Impl::kk_create_blockcrs_formatted_point_crsmatrix( + KokkosSparse::Impl::kk_create_bsr_formated_point_crsmatrix( block_size, crsmat.numRows(), crsmat.numCols(), crsmat.graph.row_map, crsmat.graph.entries, crsmat.values, out_r, out_c, pf_rm, pf_e, pf_v); graph_t static_graph2(pf_e, pf_rm); crsMat_t crsmat2("CrsMatrix2", out_c, pf_v, static_graph2); - auto input_mat = MatrixConverter::from_blockcrs_formatted_point_crsmatrix( - crsmat2, block_size); + auto input_mat = + MatrixConverter::from_bsr_formated_point_crsmatrix(crsmat2, block_size); lno_t nv = ((crsmat2.numRows() + block_size - 1) / block_size) * block_size; @@ -405,42 +405,26 @@ void test_block_gauss_seidel_empty() { } } -#define KOKKOSKERNELS_EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ - TEST_F( \ - TestCategory, \ - sparse_blockcrs_gauss_seidel_rank1##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ - test_block_gauss_seidel_rank1(500, 500 * 10, 70, 3); \ - } \ - TEST_F( \ - TestCategory, \ - sparse_blockcrs_gauss_seidel_rank2_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ - test_block_gauss_seidel_rank2(500, 500 * 10, 70, 3); \ - } \ - TEST_F( \ - TestCategory, \ - sparse_blockcrs_gauss_seidel_empty_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ - test_block_gauss_seidel_empty(); \ - } \ - TEST_F( \ - TestCategory, \ - sparse_bsr_gauss_seidel_rank1_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ - test_block_gauss_seidel_rank1(500, 500 * 10, 70, 3); \ - } \ - TEST_F( \ - TestCategory, \ - sparse_bsr_gauss_seidel_rank2_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ - test_block_gauss_seidel_rank2(500, 500 * 10, 70, 3); \ - } \ - TEST_F( \ - TestCategory, \ - sparse_bsr_gauss_seidel_empty_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ - test_block_gauss_seidel_empty(); \ +#define KOKKOSKERNELS_EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ + TEST_F( \ + TestCategory, \ + sparse_bsr_gauss_seidel_rank1_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ + test_block_gauss_seidel_rank1( \ + 500, 500 * 10, 70, 3); \ + } \ + TEST_F( \ + TestCategory, \ + sparse_bsr_gauss_seidel_rank2_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ + test_block_gauss_seidel_rank2( \ + 500, 500 * 10, 70, 3); \ + } \ + TEST_F( \ + TestCategory, \ + sparse_bsr_gauss_seidel_empty_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ + test_block_gauss_seidel_empty(); \ } #include diff --git a/unit_test/sparse/Test_Sparse_spmv_blockcrs.hpp b/unit_test/sparse/Test_Sparse_spmv_blockcrs.hpp deleted file mode 100644 index a96af6973e..0000000000 --- a/unit_test/sparse/Test_Sparse_spmv_blockcrs.hpp +++ /dev/null @@ -1,527 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include -#include -#include -#include "KokkosSparse_spmv.hpp" -#include "KokkosSparse_BlockCrsMatrix.hpp" -#include "KokkosSparse_CrsMatrix.hpp" - -#include -#include -#include -#include - -#include "KokkosKernels_Controls.hpp" -#include "KokkosKernels_default_types.hpp" - -typedef Kokkos::complex kokkos_complex_double; -typedef Kokkos::complex kokkos_complex_float; - -namespace Test_BlockCrs { - -/// Random generator -template -inline Scalar random() { - auto const max = static_cast(RAND_MAX) + static_cast(1); - return static_cast(std::rand()) / max; -} - -template -inline void set_random_value(Scalar &v) { - v = random(); -} - -template -inline void set_random_value(Kokkos::complex &v) { - Scalar vre = random(); - Scalar vim = random(); - v = Kokkos::complex(vre, vim); -} - -template -inline void set_random_value(std::complex &v) { - Scalar vre = random(); - Scalar vim = random(); - v = std::complex(vre, vim); -} - -/// \brief Driver routine for checking BlockCrsMatrix times vector -template -void check_blockcrs_times_v(const char fOp[], scalar_t alpha, scalar_t beta, - const lno_t bMax, int &num_errors) { - // The mat_structure view is used to generate a matrix using - // finite difference (FD) or finite element (FE) discretization - // on a cartesian grid. - Kokkos::View mat_structure("Matrix Structure", - 3); - mat_structure(0, 0) = 8; // Request 8 grid point in 'x' direction - mat_structure(0, 1) = 0; // Add BC to the left - mat_structure(0, 2) = 0; // Add BC to the right - mat_structure(1, 0) = 7; // Request 7 grid point in 'y' direction - mat_structure(1, 1) = 0; // Add BC to the bottom - mat_structure(1, 2) = 0; // Add BC to the top - mat_structure(2, 0) = 9; // Request 9 grid point in 'z' direction - mat_structure(2, 1) = 0; // Add BC to the bottom - mat_structure(2, 2) = 0; // Add BC to the top - - typedef - typename KokkosSparse::CrsMatrix - crsMat_t; - typedef typename KokkosSparse::CrsMatrix - h_crsMat_t; - typedef typename crsMat_t::values_type::non_const_type scalar_view_t; - typedef scalar_view_t x_vector_type; - typedef scalar_view_t y_vector_type; - - h_crsMat_t mat_b1 = - Test::generate_structured_matrix3D("FD", mat_structure); - - num_errors = 0; - for (lno_t blockSize = 1; blockSize <= bMax; ++blockSize) { - lno_t nRow = blockSize * mat_b1.numRows(); - lno_t nCol = blockSize * mat_b1.numCols(); - size_type nnz = static_cast(blockSize) * - static_cast(blockSize) * mat_b1.nnz(); - - // - // Create graph for CrsMatrix - // - - Kokkos::View d_rowmap("crsmatrix", nRow + 1); - auto h_rowmap = Kokkos::create_mirror_view(d_rowmap); - - Kokkos::View d_colidx("crsmatrix", nnz); - auto h_colidx = Kokkos::create_mirror_view(d_colidx); - - Kokkos::View d_matval("crsmatrix", nnz); - auto h_matval = Kokkos::create_mirror_view(d_matval); - - for (size_type ii = 0; ii < nnz; ++ii) set_random_value(h_matval[ii]); - - for (lno_t ir = 0; ir < mat_b1.numRows(); ++ir) { - const size_type jbeg = mat_b1.graph.row_map(ir); - const size_type jend = mat_b1.graph.row_map(ir + 1); - for (lno_t ib = 0; ib < blockSize; ++ib) { - const lno_t my_row = ir * blockSize + ib; - h_rowmap[my_row + 1] = h_rowmap[my_row] + (jend - jbeg) * blockSize; - for (size_type ijk = jbeg; ijk < jend; ++ijk) { - const auto col0 = mat_b1.graph.entries(ijk); - for (lno_t jb = 0; jb < blockSize; ++jb) { - h_colidx[h_rowmap[my_row] + (ijk - jbeg) * blockSize + jb] = - col0 * blockSize + jb; - } - } - } - } // for (lno_t ir = 0; ir < mat_b1.numRows(); ++ir) - - Kokkos::deep_copy(d_matval, h_matval); - Kokkos::deep_copy(d_colidx, h_colidx); - Kokkos::deep_copy(d_rowmap, h_rowmap); - - // Create the CrsMatrix for the reference computation - crsMat_t Acrs("new_crs_matr", nRow, nCol, nnz, d_matval, d_rowmap, - d_colidx); - - x_vector_type xref("new_right_hand_side", nRow); - auto h_xref = Kokkos::create_mirror_view(xref); - for (lno_t ir = 0; ir < nRow; ++ir) { - set_random_value(h_xref(ir)); - } - Kokkos::deep_copy(xref, h_xref); - - y_vector_type y0("y_init", nRow); - auto h_y0 = Kokkos::create_mirror_view(y0); - for (lno_t ir = 0; ir < nRow; ++ir) set_random_value(h_y0(ir)); - Kokkos::deep_copy(y0, h_y0); - - y_vector_type ycrs("crs_product_result", nRow); - auto h_ycrs = Kokkos::create_mirror_view(ycrs); - for (lno_t ir = 0; ir < nRow; ++ir) h_ycrs(ir) = h_y0(ir); - Kokkos::deep_copy(ycrs, h_ycrs); - - // Compute the reference product - KokkosSparse::spmv(fOp, alpha, Acrs, xref, beta, ycrs); - - y_vector_type ybcrs("bcrs_product_result", nRow); - auto h_ybcrs = Kokkos::create_mirror_view(ybcrs); - for (lno_t ir = 0; ir < nRow; ++ir) h_ybcrs(ir) = h_y0(ir); - Kokkos::deep_copy(ybcrs, h_ybcrs); - - // Create the BlockCrsMatrix - KokkosSparse::Experimental::BlockCrsMatrix - Abcrs(Acrs, blockSize); - - // Compute the product with the BlockCrsMatrix format - KokkosSparse::spmv(fOp, alpha, Abcrs, xref, beta, ybcrs); - - // Compare the two products - using KATS = Kokkos::ArithTraits; - using mag_type = typename KATS::mag_type; - - const mag_type zero_mag = Kokkos::ArithTraits::zero(); - mag_type error = zero_mag, maxNorm = zero_mag; - - Kokkos::deep_copy(h_ycrs, ycrs); - Kokkos::deep_copy(h_ybcrs, ybcrs); - for (lno_t ir = 0; ir < nRow; ++ir) { - error = std::max(error, KATS::abs(h_ycrs(ir) - h_ybcrs(ir))); - maxNorm = std::max(maxNorm, KATS::abs(h_ycrs(ir))); - } - - mag_type tmps = KATS::abs(alpha) + KATS::abs(beta); - if ((tmps > zero_mag) && (maxNorm == zero_mag)) { - std::cout << " BlockCRSMatrix - SpMV times V >> blockSize " << blockSize - << " maxNorm " << maxNorm << " error " << error << " alpha " - << alpha << " beta " << beta << "\n"; - num_errors += 1; - } - - // - // --- Factor ((nnz / nRow) + 1) = Average number of non-zeros per row - // - const mag_type tol = ((static_cast(nnz) / nRow) + 1) * - Kokkos::ArithTraits::epsilon(); - if (error > tol * maxNorm) { - std::cout << " BlockCRSMatrix - SpMV times V >> blockSize " << blockSize - << " ratio " << error / maxNorm << " tol " << tol << " maxNorm " - << maxNorm << " alpha " << alpha << " beta " << beta << "\n"; - num_errors += 1; - } - - } // for (int blockSize = 1; blockSize <= bMax; ++blockSize) -} - -/// \brief Driver routine for checking BlockCrsMatrix times multiple vector -template -void check_blockcrs_times_mv(const char fOp[], scalar_t alpha, scalar_t beta, - const lno_t bMax, int &num_errors) { - // The mat_structure view is used to generate a matrix using - // finite difference (FD) or finite element (FE) discretization - // on a cartesian grid. - Kokkos::View mat_structure("Matrix Structure", - 3); - mat_structure(0, 0) = 7; // Request 7 grid point in 'x' direction - mat_structure(0, 1) = 0; // Add BC to the left - mat_structure(0, 2) = 0; // Add BC to the right - mat_structure(1, 0) = 5; // Request 11 grid point in 'y' direction - mat_structure(1, 1) = 0; // Add BC to the bottom - mat_structure(1, 2) = 0; // Add BC to the top - mat_structure(2, 0) = 9; // Request 13 grid point in 'y' direction - mat_structure(2, 1) = 0; // Add BC to the bottom - mat_structure(2, 2) = 0; // Add BC to the top - - typedef typename KokkosSparse::CrsMatrix - h_crsMat_t; - typedef - typename KokkosSparse::CrsMatrix - crsMat_t; - typedef Kokkos::View block_vector_t; - - h_crsMat_t mat_b1 = - Test::generate_structured_matrix3D("FD", mat_structure); - - num_errors = 0; - const int nrhs = 5; - - for (lno_t blockSize = 1; blockSize <= bMax; ++blockSize) { - // - // Fill blocks with random values - // - - lno_t nRow = blockSize * mat_b1.numRows(); - lno_t nCol = blockSize * mat_b1.numCols(); - size_type nnz = static_cast(blockSize) * - static_cast(blockSize) * mat_b1.nnz(); - - Kokkos::View d_rowmap("crsmatrix", nRow + 1); - auto h_rowmap = Kokkos::create_mirror_view(d_rowmap); - - Kokkos::View d_colidx("crsmatrix", nnz); - auto h_colidx = Kokkos::create_mirror_view(d_colidx); - - Kokkos::View d_matval("crsmatrix", nnz); - auto h_matval = Kokkos::create_mirror_view(d_matval); - - for (size_type ii = 0; ii < nnz; ++ii) set_random_value(h_matval[ii]); - - for (lno_t ir = 0; ir < mat_b1.numRows(); ++ir) { - const size_type jbeg = mat_b1.graph.row_map(ir); - const size_type jend = mat_b1.graph.row_map(ir + 1); - for (lno_t ib = 0; ib < blockSize; ++ib) { - const lno_t my_row = ir * blockSize + ib; - h_rowmap[my_row + 1] = h_rowmap[my_row] + (jend - jbeg) * blockSize; - for (size_type ijk = jbeg; ijk < jend; ++ijk) { - const auto col0 = mat_b1.graph.entries(ijk); - for (lno_t jb = 0; jb < blockSize; ++jb) { - h_colidx[h_rowmap[my_row] + (ijk - jbeg) * blockSize + jb] = - col0 * blockSize + jb; - } - } - } - } // for (lno_t ir = 0; ir < mat_b1.numRows(); ++ir) - - Kokkos::deep_copy(d_matval, h_matval); - Kokkos::deep_copy(d_colidx, h_colidx); - Kokkos::deep_copy(d_rowmap, h_rowmap); - - // Create the CrsMatrix for the reference computation - crsMat_t Acrs("new_crs_matr", nRow, nCol, nnz, d_matval, d_rowmap, - d_colidx); - - block_vector_t xref("new_right_hand_side", nRow, nrhs); - auto h_xref = Kokkos::create_mirror_view(xref); - for (int jc = 0; jc < nrhs; ++jc) - for (lno_t ir = 0; ir < nRow; ++ir) set_random_value(h_xref(ir, jc)); - Kokkos::deep_copy(xref, h_xref); - - block_vector_t y0("y_init", nRow, nrhs); - auto h_y0 = Kokkos::create_mirror_view(y0); - for (int jc = 0; jc < nrhs; ++jc) - for (lno_t ir = 0; ir < nRow; ++ir) set_random_value(h_y0(ir, jc)); - Kokkos::deep_copy(y0, h_y0); - - block_vector_t ycrs("crs_product_result", nRow, nrhs); - auto h_ycrs = Kokkos::create_mirror_view(ycrs); - for (int jc = 0; jc < nrhs; ++jc) - for (lno_t ir = 0; ir < nRow; ++ir) h_ycrs(ir, jc) = h_y0(ir, jc); - Kokkos::deep_copy(ycrs, h_ycrs); - - KokkosSparse::spmv(fOp, alpha, Acrs, xref, beta, ycrs); - - block_vector_t ybcrs("bcrs_product_result", nRow, nrhs); - auto h_ybcrs = Kokkos::create_mirror_view(ybcrs); - for (int jc = 0; jc < nrhs; ++jc) - for (lno_t ir = 0; ir < nRow; ++ir) h_ybcrs(ir, jc) = h_y0(ir, jc); - Kokkos::deep_copy(ybcrs, h_ybcrs); - - // Create the BlockCrsMatrix - KokkosSparse::Experimental::BlockCrsMatrix - Abcrs(Acrs, blockSize); - - // Compute the product for the BlockCrsMatrix format - KokkosSparse::spmv(fOp, alpha, Abcrs, xref, beta, ybcrs); - - Kokkos::deep_copy(h_ycrs, ycrs); - Kokkos::deep_copy(h_ybcrs, ybcrs); - - // Compare the two products - using KATS = Kokkos::ArithTraits; - using mag_type = typename KATS::mag_type; - - const mag_type zero_mag = Kokkos::ArithTraits::zero(); - mag_type error = zero_mag, maxNorm = zero_mag; - - for (int jc = 0; jc < nrhs; ++jc) { - for (int ir = 0; ir < nRow; ++ir) { - error = std::max(error, - KATS::abs(h_ycrs(ir, jc) - h_ybcrs(ir, jc))); - maxNorm = std::max(maxNorm, KATS::abs(h_ycrs(ir, jc))); - } - } - - const mag_type tmps = KATS::abs(alpha) + KATS::abs(beta); - if ((tmps > zero_mag) && (maxNorm == zero_mag)) { - std::cout << " BlockCRSMatrix - SpMV times MV >> blockSize " << blockSize - << " maxNorm " << maxNorm << " error " << error << " alpha " - << alpha << " beta " << beta << "\n"; - num_errors += 1; - } - - const mag_type tol = ((static_cast(nnz) / nRow) + 1) * - Kokkos::ArithTraits::epsilon(); - - if (error > tol * maxNorm) { - std::cout << " BlockCRSMatrix - SpMV times MV >> blockSize " << blockSize - << " ratio " << error / maxNorm << " tol " << tol << " maxNorm " - << maxNorm << " alpha " << alpha << " beta " << beta << "\n"; - num_errors += 1; - } - - } // for (int blockSize = 1; blockSize <= bMax; ++blockSize) -} - -} // namespace Test_BlockCrs - -template -void testSpMVBlockCrsMatrix() { - // - // Test for the operation y <- alpha * Op(A) * x + beta * y - // - - // Define the function Op: Op(A) = A, Op(A) = conj(A), Op(A) = A^T, Op(A) = - // A^H - std::vector modes = {'N', 'C', 'T', 'H'}; - - // Define a set of pairs (alpha, beta) - std::vector testAlphaBeta = {0.0, 0.0, -1.0, 0.0, - 0.0, 1.0, 3.1, -2.5}; - - // - // Set the largest block size for the block matrix - // The code will create matrices with block sizes 1, .., bMax - // - const lno_t bMax = 13; - - //--- Test single vector case - for (const auto mode : modes) { - int num_errors = 0; - for (size_t ii = 0; ii < testAlphaBeta.size(); ii += 2) { - auto alpha_s = static_cast(testAlphaBeta[ii]); - auto beta_s = static_cast(testAlphaBeta[ii + 1]); - num_errors = 0; - Test_BlockCrs::check_blockcrs_times_v( - &mode, alpha_s, beta_s, bMax, num_errors); - if (num_errors > 0) { - printf( - "KokkosSparse::Test::spmv_blockcrs: %i errors of %i with params: " - "%c %lf %lf\n", - num_errors, bMax, mode, Kokkos::ArithTraits::abs(alpha_s), - Kokkos::ArithTraits::abs(beta_s)); - } - EXPECT_TRUE(num_errors == 0); - } - } -} - -template -void testBlockCrsMatrix_SpM_MV() { - // - // Test for the operation Y <- alpha * Op(A) * X + beta * Y - // - - // Define the function Op: Op(A) = A, Op(A) = conj(A), Op(A) = A^T, Op(A) = - // A^H - std::vector modes = {'N', 'C', 'T', 'H'}; - - // Define a set of pairs (alpha, beta) - std::vector testAlphaBeta = {0.0, 0.0, -1.0, 0.0, - 0.0, 1.0, 3.1, -2.5}; - - // - // Set the largest block size for the block matrix - // The code will create matrices with block sizes 1, .., bMax - // - const lno_t bMax = 13; - - //--- Test multiple vector case - for (auto mode : modes) { - int num_errors = 0; - for (size_t ii = 0; ii < testAlphaBeta.size(); ii += 2) { - auto alpha_s = static_cast(testAlphaBeta[ii]); - auto beta_s = static_cast(testAlphaBeta[ii + 1]); - num_errors = 0; - Test_BlockCrs::check_blockcrs_times_mv(&mode, alpha_s, beta_s, - bMax, num_errors); - if (num_errors > 0) { - printf( - "KokkosSparse::Test::spm_mv_blockcrs: %i errors of %i with params: " - "%c %lf %lf\n", - num_errors, bMax, mode, Kokkos::ArithTraits::abs(alpha_s), - Kokkos::ArithTraits::abs(beta_s)); - } - EXPECT_TRUE(num_errors == 0); - } - } -} - -////////////////////////// - -#define KOKKOSKERNELS_EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ - TEST_F( \ - TestCategory, \ - sparse##_##bcrs_times_vec##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ - testSpMVBlockCrsMatrix(); \ - } - -#include - -#undef KOKKOSKERNELS_EXECUTE_TEST - -////////////////////////// - -#define EXECUTE_BCRS_TIMES_MVEC_TEST(SCALAR, ORDINAL, OFFSET, LAYOUT, DEVICE) \ - TEST_F( \ - TestCategory, \ - sparse##_##bcrs_times_multivec##_##SCALAR##_##ORDINAL##_##OFFSET##_##LAYOUT##_##DEVICE) { \ - testBlockCrsMatrix_SpM_MV(); \ - } - -#if defined(KOKKOSKERNELS_INST_LAYOUTLEFT) - -#define KOKKOSKERNELS_EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ - EXECUTE_BCRS_TIMES_MVEC_TEST(SCALAR, ORDINAL, OFFSET, LayoutLeft, \ - TestExecSpace) - -#include - -#undef KOKKOSKERNELS_EXECUTE_TEST - -#endif // KOKKOSKERNELS_INST_LAYOUTLEFT - -#if defined(KOKKOSKERNELS_INST_LAYOUTRIGHT) - -#define KOKKOSKERNELS_EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ - EXECUTE_BCRS_TIMES_MVEC_TEST(SCALAR, ORDINAL, OFFSET, LayoutRight, \ - TestExecSpace) - -#include - -#undef KOKKOSKERNELS_EXECUTE_TEST - -#endif // KOKKOSKERNELS_INST_LAYOUTRIGHT - -#undef EXECUTE_BCRS_TIMES_MVEC_TEST From b9fb9563259d262e3dcf233b1a1fbe1ecaf3f381 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Tue, 13 Sep 2022 12:09:27 -0600 Subject: [PATCH 070/226] .githob/workflows: Fix redundant workflow triggers - Fixes #1491 --- .github/workflows/format.yml | 2 +- .github/workflows/osx.yml | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 834add9314..328881b6d7 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -8,7 +8,7 @@ on: jobs: clang-format-check: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/osx.yml b/.github/workflows/osx.yml index d24b68c7f2..aa14cace30 100644 --- a/.github/workflows/osx.yml +++ b/.github/workflows/osx.yml @@ -2,7 +2,18 @@ name: github-OSX on: pull_request: - types: [ opened, labeled, unlabeled, reopened, synchronize ] + paths-ignore: + - '**/*.rst' + - '**/*.md' + - '**/requirements.txt' + - '**/*.py' + - 'docs/**' + types: [ opened, reopened, synchronize ] + +# Cancels any in progress 'workflow' associated with this PR +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: check-pr-labels: @@ -49,7 +60,6 @@ jobs: - name: configure_kokkos run: | - ls -lat mkdir -p kokkos/{build,install} cd kokkos/build cmake \ @@ -69,7 +79,6 @@ jobs: - name: configure_kokkos_kernels run: | - ls -lat mkdir -p kokkos-kernels/{build,install} cd kokkos-kernels/build cmake \ From 62fdbabd1e17fb1719e76803995874f803196d6f Mon Sep 17 00:00:00 2001 From: Brian Kelley Date: Wed, 14 Sep 2022 12:38:36 -0600 Subject: [PATCH 071/226] Fix valgrind uninitialized errors in EB coloring --- src/graph/impl/KokkosGraph_Distance1Color_impl.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/graph/impl/KokkosGraph_Distance1Color_impl.hpp b/src/graph/impl/KokkosGraph_Distance1Color_impl.hpp index 64873708b5..2ababa0a96 100644 --- a/src/graph/impl/KokkosGraph_Distance1Color_impl.hpp +++ b/src/graph/impl/KokkosGraph_Distance1Color_impl.hpp @@ -2299,8 +2299,7 @@ class GraphColor_EB : public GraphColornv); color_temp_work_view_type tentative_color_ban( - Kokkos::view_alloc(Kokkos::WithoutInitializing, "tentative_color_ban"), - this->nv); // views are initialized with zero + "tentative_color_ban", this->nv); // views are initialized with zero // allocate memory for vertex color set shifts. nnz_lno_temp_work_view_t color_set("color_set", this->nv); // initialized with zero. From 2a8053e3a3ec85de4890bfddbaac97783e65b39f Mon Sep 17 00:00:00 2001 From: brian-kelley Date: Wed, 14 Sep 2022 14:46:15 -0600 Subject: [PATCH 072/226] MIS2 aggregation: fix bug with uninitialized memory (#1528) A Kokkos view in the phase 3 aggregation kernel was not initialized when it should have been. Another view (connectivities) was initialized but actually didn't need to be. --- src/graph/impl/KokkosGraph_Distance2MIS_impl.hpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/graph/impl/KokkosGraph_Distance2MIS_impl.hpp b/src/graph/impl/KokkosGraph_Distance2MIS_impl.hpp index 195d08dc0a..39ff6529de 100644 --- a/src/graph/impl/KokkosGraph_Distance2MIS_impl.hpp +++ b/src/graph/impl/KokkosGraph_Distance2MIS_impl.hpp @@ -1117,7 +1117,8 @@ struct D2_MIS_Aggregation { if (neiAgg == agg) connect++; } connectivities_(i) = connect; - } + } else + connectivities_(i) = 0; } lno_t numVerts_; @@ -1224,9 +1225,9 @@ struct D2_MIS_Aggregation { // neighboring aggregate. labels_t labelsOld("old", numVerts); Kokkos::deep_copy(labelsOld, labels); - labels_t connectivities("connect", numVerts); - labels_t aggSizes( - Kokkos::ViewAllocateWithoutInitializing("Phase3 Agg Sizes"), numAggs); + labels_t connectivities(Kokkos::ViewAllocateWithoutInitializing("connect"), + numVerts); + labels_t aggSizes("Phase3 Agg Sizes", numAggs); Kokkos::parallel_for( range_pol(0, numVerts), SizeAndConnectivityFunctor(numVerts, rowmap, entries, labels, From dc77279f89f0df126a2e32bf7160222af96ba220 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 24 Aug 2022 16:49:41 -0600 Subject: [PATCH 073/226] Modular build: allowing to build "common" only Refactoring the CMake logic to allow us to build the common directory and its content as an independent module. The idea is to propagate this to other more meaningful modules so that we can have faster compilation. Signed-off-by: Luc Berger-Vergiat --- CMakeLists.txt | 127 +++++++++++++++++- common/CMakeLists.txt | 9 ++ .../src}/KokkosKernels_BitUtils.hpp | 0 .../KokkosKernels_BlockHashmapAccumulator.hpp | 0 .../src}/KokkosKernels_BlockUtils.hpp | 0 .../src}/KokkosKernels_Error.hpp | 0 .../src}/KokkosKernels_ExecSpaceUtils.hpp | 0 .../src}/KokkosKernels_Half.hpp | 0 .../src}/KokkosKernels_HashmapAccumulator.hpp | 0 .../src}/KokkosKernels_IOUtils.hpp | 0 .../src}/KokkosKernels_PrintUtils.hpp | 0 .../src}/KokkosKernels_SimpleUtils.hpp | 0 .../src}/KokkosKernels_Sorting.hpp | 0 ...Kernels_Uniform_Initialized_MemoryPool.hpp | 0 .../src}/KokkosKernels_Utils.hpp | 0 .../src}/KokkosKernels_VectorUtils.hpp | 0 .../src}/KokkosKernels_default_types.hpp | 0 .../src}/Kokkos_ArithTraits.hpp | 0 .../src}/Kokkos_InnerProductSpaceTraits.hpp | 0 common/unit_test/CMakeLists.txt | 97 +++++++++++++ .../unit_test}/Test_Common.hpp | 1 - .../unit_test}/Test_Common_ArithTraits.hpp | 0 .../unit_test}/Test_Common_Error.hpp | 0 .../unit_test}/Test_Common_IOUtils.hpp | 0 .../unit_test}/Test_Common_Sorting.hpp | 2 +- .../unit_test}/Test_Common_float128.hpp | 0 .../unit_test}/Test_Common_set_bit_count.hpp | 0 .../unit_test/backends}/Test_Cuda_Common.cpp | 0 .../unit_test/backends}/Test_HIP_Common.cpp | 0 .../backends}/Test_OpenMPTarget_Common.cpp | 0 .../backends}/Test_OpenMP_Common.cpp | 0 .../unit_test/backends}/Test_SYCL_Common.cpp | 0 .../backends}/Test_Serial_Common.cpp | 0 .../backends}/Test_Threads_Common.cpp | 0 src/CMakeLists.txt | 120 ++++------------- src/cmake/kokkoskernels_eti.cmake | 8 +- .../Test_Common_Test_All_Type_Combos.hpp | 0 test_common/Test_OpenMP.hpp | 22 +++ unit_test/CMakeLists.txt | 85 +----------- unit_test/sparse/Test_Sparse.hpp | 1 + .../Test_Sparse_Controls.hpp} | 6 +- 41 files changed, 285 insertions(+), 193 deletions(-) create mode 100644 common/CMakeLists.txt rename {src/common => common/src}/KokkosKernels_BitUtils.hpp (100%) rename {src/common => common/src}/KokkosKernels_BlockHashmapAccumulator.hpp (100%) rename {src/common => common/src}/KokkosKernels_BlockUtils.hpp (100%) rename {src/common => common/src}/KokkosKernels_Error.hpp (100%) rename {src/common => common/src}/KokkosKernels_ExecSpaceUtils.hpp (100%) rename {src/common => common/src}/KokkosKernels_Half.hpp (100%) rename {src/common => common/src}/KokkosKernels_HashmapAccumulator.hpp (100%) rename {src/common => common/src}/KokkosKernels_IOUtils.hpp (100%) rename {src/common => common/src}/KokkosKernels_PrintUtils.hpp (100%) rename {src/common => common/src}/KokkosKernels_SimpleUtils.hpp (100%) rename {src/common => common/src}/KokkosKernels_Sorting.hpp (100%) rename {src/common => common/src}/KokkosKernels_Uniform_Initialized_MemoryPool.hpp (100%) rename {src/common => common/src}/KokkosKernels_Utils.hpp (100%) rename {src/common => common/src}/KokkosKernels_VectorUtils.hpp (100%) rename {src/common => common/src}/KokkosKernels_default_types.hpp (100%) rename {src/common => common/src}/Kokkos_ArithTraits.hpp (100%) rename {src/common => common/src}/Kokkos_InnerProductSpaceTraits.hpp (100%) create mode 100644 common/unit_test/CMakeLists.txt rename {unit_test/common => common/unit_test}/Test_Common.hpp (89%) rename {unit_test/common => common/unit_test}/Test_Common_ArithTraits.hpp (100%) rename {unit_test/common => common/unit_test}/Test_Common_Error.hpp (100%) rename {unit_test/common => common/unit_test}/Test_Common_IOUtils.hpp (100%) rename {unit_test/common => common/unit_test}/Test_Common_Sorting.hpp (99%) rename {unit_test/common => common/unit_test}/Test_Common_float128.hpp (100%) rename {unit_test/common => common/unit_test}/Test_Common_set_bit_count.hpp (100%) rename {unit_test/cuda => common/unit_test/backends}/Test_Cuda_Common.cpp (100%) rename {unit_test/hip => common/unit_test/backends}/Test_HIP_Common.cpp (100%) rename {unit_test/openmptarget => common/unit_test/backends}/Test_OpenMPTarget_Common.cpp (100%) rename {unit_test/openmp => common/unit_test/backends}/Test_OpenMP_Common.cpp (100%) rename {unit_test/sycl => common/unit_test/backends}/Test_SYCL_Common.cpp (100%) rename {unit_test/serial => common/unit_test/backends}/Test_Serial_Common.cpp (100%) rename {unit_test/threads => common/unit_test/backends}/Test_Threads_Common.cpp (100%) rename {unit_test/common => test_common}/Test_Common_Test_All_Type_Combos.hpp (100%) create mode 100644 test_common/Test_OpenMP.hpp rename unit_test/{common/Test_Common_Controls.hpp => sparse/Test_Sparse_Controls.hpp} (96%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2bb14a5892..0902632115 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,8 +54,8 @@ KOKKOSKERNELS_PACKAGE() IF (NOT KOKKOSKERNELS_HAS_TRILINOS) SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/") KOKKOSKERNELS_ADD_OPTION( - "ENABLE_EXAMPLES" - OFF + "ENABLE_EXAMPLES" + OFF BOOL "Whether to build examples. Default: OFF" ) @@ -94,6 +94,13 @@ KOKKOSKERNELS_ADD_OPTION( "Whether to build docs. Default: OFF" ) +KOKKOSKERNELS_ADD_OPTION( + "ENABLE_REMAINDER" + ON + BOOL + "Whether to build library remainder components. Default: ON" +) + SET(KokkosKernels_INSTALL_TESTING OFF CACHE INTERNAL "Whether to build tests and examples against installation") IF (KokkosKernels_INSTALL_TESTING) @@ -106,7 +113,10 @@ IF (KokkosKernels_INSTALL_TESTING) INCLUDE(cmake/kokkos_backends.cmake) # Only build the tests KOKKOSKERNELS_ADD_TEST_DIRECTORIES(perf_test) - KOKKOSKERNELS_ADD_TEST_DIRECTORIES(unit_test) + IF(KokkosKernels_ENABLE_REMAINDER) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(unit_test) + ENDIF() + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(common/unit_test) KOKKOSKERNELS_ADD_EXAMPLE_DIRECTORIES(example) ELSE() # Regular build, not install testing @@ -222,15 +232,118 @@ ELSE() ENDFOREACH() MESSAGE("=======================") MESSAGE("") + + + + ## configure the library + KOKKOSKERNELS_CONFIGURE_FILE(KokkosKernels_config.h) + + SET(KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}) + + #I don't want the complexity of sometimes interface/sometimes not + #Just minimally force an empty dummy file + SET(SOURCES src/dummy.cpp) + + + # Skip building Kokkos Kernels if we are doing an installation test - ADD_SUBDIRECTORY(src) + IF (KokkosKernels_ENABLE_REMAINDER) + INCLUDE(src/CMakeLists.txt) + ENDIF() + INCLUDE(common/CMakeLists.txt) + + + + # For now, don't add the ETI headers to complete list of headers + # This will break some IDEs and won't properly display headers in the file list + # However, because of the behavior of TRIBITS_ADD_LIBRARY + # I can't add the ETI headers with them getting double-installed + # with a bunch of headers in the wrong location + # This doesn't change pre-existing behavior before the ETI changes + #LIST(APPEND HEADERS ${ETI_HEADERS}) + #----------------------------------------------------------------------------- + + KOKKOSKERNELS_ADD_LIBRARY( + kokkoskernels + HEADERS ${HEADERS} + SOURCES ${SOURCES} + ) + + # It does not seem to be possible to automatically have headers installed + # in the correct subdirectory structure using HEADERS and ADD_LIBRARY with tribits + # Force the specializations to be installed in a subdirectory + INSTALL(FILES ${ETI_HEADERS} DESTINATION ${KOKKOSKERNELS_HEADER_INSTALL_DIR}/generated_specializations_hpp/) + + IF (KOKKOSKERNELS_HAS_TRILINOS) + #no linking commands required - tribits does this + ELSE() + ADD_LIBRARY(Kokkos::kokkoskernels ALIAS kokkoskernels) + TARGET_LINK_LIBRARIES(kokkoskernels PUBLIC Kokkos::kokkos) + FOREACH(DIR ${KK_INCLUDE_DIRS}) + TARGET_INCLUDE_DIRECTORIES(kokkoskernels PUBLIC $) + ENDFOREACH() + TARGET_INCLUDE_DIRECTORIES(kokkoskernels PUBLIC + $) + ENDIF() + + IF (KOKKOS_ENABLE_SYCL) + SET(KOKKOSKERNELS_INTEL_ARCHS ${Kokkos_ARCH}) + LIST(FILTER KOKKOSKERNELS_INTEL_ARCHS INCLUDE REGEX ".*INTEL.*") + LIST(LENGTH KOKKOSKERNELS_INTEL_ARCHS KOKKOSKERNELS_INTEL_ARCHS_NUM) + IF(KOKKOSKERNELS_INTEL_ARCHS_NUM GREATER_EQUAL 1) + IF (NOT BUILD_SHARED_LIBS) + MESSAGE(SEND_ERROR + "At the moment, we require KokkosKernels (and Kokkos) to be built as " + "shared libraries to allow querying free and total device memory!" + ) + ENDIF() + TARGET_LINK_LIBRARIES(kokkoskernels PUBLIC ze_loader) + ENDIF() + ENDIF() + + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC LAPACK) + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC BLAS) + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC CBLAS) + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC LAPACKE) + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC SUPERLU) + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC CHOLMOD) + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC MKL) + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC CUBLAS) + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC CUSPARSE) + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC ROCBLAS) + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC ROCSPARSE) + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC METIS) + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC ARMPL) + KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC MAGMA) + # Not yet here KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC MAGMA) + + + IF (KokkosKernels_ENABLE_INSTALL_TEST) ADD_SUBDIRECTORY(install_test) MESSAGE("The install test has been enabled, you will need to peform: make install before running the tests otherwise install_test will fail") ENDIF () - KOKKOSKERNELS_ADD_TEST_DIRECTORIES(perf_test) - KOKKOSKERNELS_ADD_TEST_DIRECTORIES(unit_test) - KOKKOSKERNELS_ADD_EXAMPLE_DIRECTORIES(example) + IF(KokkosKernels_ENABLE_TESTS OR KokkosKernels_ENABLE_TESTS_AND_PERFSUITE) + SET(GTEST_SOURCE_DIR ${KOKKOSKERNELS_TOP_SOURCE_DIR}/tpls/gtest) + + KOKKOSKERNELS_ADD_TEST_LIBRARY( + kokkoskernels_gtest + HEADERS ${GTEST_SOURCE_DIR}/gtest/gtest.h + SOURCES ${GTEST_SOURCE_DIR}/gtest/gtest-all.cc + ) + # Disables pthreads, this is a problem for serial builds in Trilinos & Sierra if it's enabled. + TARGET_COMPILE_DEFINITIONS(kokkoskernels_gtest PUBLIC "-DGTEST_HAS_PTHREAD=0") + TARGET_INCLUDE_DIRECTORIES(kokkoskernels_gtest PUBLIC $) + + #Gtest minimally requires C++11 + TARGET_COMPILE_FEATURES(kokkoskernels_gtest PUBLIC cxx_std_11) + ENDIF() + IF (KokkosKernels_ENABLE_REMAINDER) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(perf_test) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(unit_test) + KOKKOSKERNELS_ADD_EXAMPLE_DIRECTORIES(example) + ENDIF() + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(common/unit_test) KOKKOSKERNELS_PACKAGE_POSTPROCESS() IF (KokkosKernels_ENABLE_DOCS) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt new file mode 100644 index 0000000000..72972b5cd7 --- /dev/null +++ b/common/CMakeLists.txt @@ -0,0 +1,9 @@ +# Adding source directory to the build +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/common/src) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/common/src/impl) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/common/src/tpls) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/common/unit_test) + +# Adding unit-tests +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/common) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/common) diff --git a/src/common/KokkosKernels_BitUtils.hpp b/common/src/KokkosKernels_BitUtils.hpp similarity index 100% rename from src/common/KokkosKernels_BitUtils.hpp rename to common/src/KokkosKernels_BitUtils.hpp diff --git a/src/common/KokkosKernels_BlockHashmapAccumulator.hpp b/common/src/KokkosKernels_BlockHashmapAccumulator.hpp similarity index 100% rename from src/common/KokkosKernels_BlockHashmapAccumulator.hpp rename to common/src/KokkosKernels_BlockHashmapAccumulator.hpp diff --git a/src/common/KokkosKernels_BlockUtils.hpp b/common/src/KokkosKernels_BlockUtils.hpp similarity index 100% rename from src/common/KokkosKernels_BlockUtils.hpp rename to common/src/KokkosKernels_BlockUtils.hpp diff --git a/src/common/KokkosKernels_Error.hpp b/common/src/KokkosKernels_Error.hpp similarity index 100% rename from src/common/KokkosKernels_Error.hpp rename to common/src/KokkosKernels_Error.hpp diff --git a/src/common/KokkosKernels_ExecSpaceUtils.hpp b/common/src/KokkosKernels_ExecSpaceUtils.hpp similarity index 100% rename from src/common/KokkosKernels_ExecSpaceUtils.hpp rename to common/src/KokkosKernels_ExecSpaceUtils.hpp diff --git a/src/common/KokkosKernels_Half.hpp b/common/src/KokkosKernels_Half.hpp similarity index 100% rename from src/common/KokkosKernels_Half.hpp rename to common/src/KokkosKernels_Half.hpp diff --git a/src/common/KokkosKernels_HashmapAccumulator.hpp b/common/src/KokkosKernels_HashmapAccumulator.hpp similarity index 100% rename from src/common/KokkosKernels_HashmapAccumulator.hpp rename to common/src/KokkosKernels_HashmapAccumulator.hpp diff --git a/src/common/KokkosKernels_IOUtils.hpp b/common/src/KokkosKernels_IOUtils.hpp similarity index 100% rename from src/common/KokkosKernels_IOUtils.hpp rename to common/src/KokkosKernels_IOUtils.hpp diff --git a/src/common/KokkosKernels_PrintUtils.hpp b/common/src/KokkosKernels_PrintUtils.hpp similarity index 100% rename from src/common/KokkosKernels_PrintUtils.hpp rename to common/src/KokkosKernels_PrintUtils.hpp diff --git a/src/common/KokkosKernels_SimpleUtils.hpp b/common/src/KokkosKernels_SimpleUtils.hpp similarity index 100% rename from src/common/KokkosKernels_SimpleUtils.hpp rename to common/src/KokkosKernels_SimpleUtils.hpp diff --git a/src/common/KokkosKernels_Sorting.hpp b/common/src/KokkosKernels_Sorting.hpp similarity index 100% rename from src/common/KokkosKernels_Sorting.hpp rename to common/src/KokkosKernels_Sorting.hpp diff --git a/src/common/KokkosKernels_Uniform_Initialized_MemoryPool.hpp b/common/src/KokkosKernels_Uniform_Initialized_MemoryPool.hpp similarity index 100% rename from src/common/KokkosKernels_Uniform_Initialized_MemoryPool.hpp rename to common/src/KokkosKernels_Uniform_Initialized_MemoryPool.hpp diff --git a/src/common/KokkosKernels_Utils.hpp b/common/src/KokkosKernels_Utils.hpp similarity index 100% rename from src/common/KokkosKernels_Utils.hpp rename to common/src/KokkosKernels_Utils.hpp diff --git a/src/common/KokkosKernels_VectorUtils.hpp b/common/src/KokkosKernels_VectorUtils.hpp similarity index 100% rename from src/common/KokkosKernels_VectorUtils.hpp rename to common/src/KokkosKernels_VectorUtils.hpp diff --git a/src/common/KokkosKernels_default_types.hpp b/common/src/KokkosKernels_default_types.hpp similarity index 100% rename from src/common/KokkosKernels_default_types.hpp rename to common/src/KokkosKernels_default_types.hpp diff --git a/src/common/Kokkos_ArithTraits.hpp b/common/src/Kokkos_ArithTraits.hpp similarity index 100% rename from src/common/Kokkos_ArithTraits.hpp rename to common/src/Kokkos_ArithTraits.hpp diff --git a/src/common/Kokkos_InnerProductSpaceTraits.hpp b/common/src/Kokkos_InnerProductSpaceTraits.hpp similarity index 100% rename from src/common/Kokkos_InnerProductSpaceTraits.hpp rename to common/src/Kokkos_InnerProductSpaceTraits.hpp diff --git a/common/unit_test/CMakeLists.txt b/common/unit_test/CMakeLists.txt new file mode 100644 index 0000000000..f782b1aafd --- /dev/null +++ b/common/unit_test/CMakeLists.txt @@ -0,0 +1,97 @@ +##################### +# # +# Add include files # +# # +##################### + +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/test_common) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/test_common) + +##################### +# # +# Define unit-tests # +# # +##################### + +##################### +# # +# Add GPU backends # +# # +##################### +IF (KOKKOS_ENABLE_CUDA) + KOKKOSKERNELS_ADD_UNIT_TEST( + common_cuda + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_Cuda_Common.cpp + COMPONENTS common + ) +ENDIF () + +IF (KOKKOS_ENABLE_HIP) + KOKKOSKERNELS_ADD_UNIT_TEST( + common_hip + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_HIP_Common.cpp + COMPONENTS common + ) +ENDIF () + +IF (KOKKOS_ENABLE_SYCL) + KOKKOSKERNELS_ADD_UNIT_TEST( + common_sycl + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_SYCL_Common.cpp + COMPONENTS common + ) +ENDIF () + +IF (KOKKOS_ENABLE_OPENMPTARGET) + # KOKKOSKERNELS_ADD_UNIT_TEST( + # common_openmptarget + # SOURCES + # ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + # backends/Test_OpenMPTarget_Common.cpp + # COMPONENTS common + # ) +ENDIF () + + + +##################### +# # +# Add CPU backends # +# # +##################### +IF (KOKKOS_ENABLE_SERIAL) + KOKKOSKERNELS_ADD_UNIT_TEST( + common_serial + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_Serial_Common.cpp + COMPONENTS common + ) +ENDIF () + +IF (KOKKOS_ENABLE_OPENMP) + KOKKOSKERNELS_ADD_UNIT_TEST( + common_openmp + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_OpenMP_Common.cpp + COMPONENTS common + ) +ENDIF () + +IF (KOKKOS_ENABLE_THREADS) + KOKKOSKERNELS_ADD_UNIT_TEST( + common_threads + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_Threads_Common.cpp + COMPONENTS common + ) +ENDIF () + diff --git a/unit_test/common/Test_Common.hpp b/common/unit_test/Test_Common.hpp similarity index 89% rename from unit_test/common/Test_Common.hpp rename to common/unit_test/Test_Common.hpp index 20b875f4a5..9cb8082a7f 100644 --- a/unit_test/common/Test_Common.hpp +++ b/common/unit_test/Test_Common.hpp @@ -7,6 +7,5 @@ #include #include #include -#include #endif // TEST_COMMON_HPP diff --git a/unit_test/common/Test_Common_ArithTraits.hpp b/common/unit_test/Test_Common_ArithTraits.hpp similarity index 100% rename from unit_test/common/Test_Common_ArithTraits.hpp rename to common/unit_test/Test_Common_ArithTraits.hpp diff --git a/unit_test/common/Test_Common_Error.hpp b/common/unit_test/Test_Common_Error.hpp similarity index 100% rename from unit_test/common/Test_Common_Error.hpp rename to common/unit_test/Test_Common_Error.hpp diff --git a/unit_test/common/Test_Common_IOUtils.hpp b/common/unit_test/Test_Common_IOUtils.hpp similarity index 100% rename from unit_test/common/Test_Common_IOUtils.hpp rename to common/unit_test/Test_Common_IOUtils.hpp diff --git a/unit_test/common/Test_Common_Sorting.hpp b/common/unit_test/Test_Common_Sorting.hpp similarity index 99% rename from unit_test/common/Test_Common_Sorting.hpp rename to common/unit_test/Test_Common_Sorting.hpp index f0320cb637..c4fb13f807 100644 --- a/unit_test/common/Test_Common_Sorting.hpp +++ b/common/unit_test/Test_Common_Sorting.hpp @@ -53,7 +53,7 @@ #include #include #include -#include +// #include #include #include #include diff --git a/unit_test/common/Test_Common_float128.hpp b/common/unit_test/Test_Common_float128.hpp similarity index 100% rename from unit_test/common/Test_Common_float128.hpp rename to common/unit_test/Test_Common_float128.hpp diff --git a/unit_test/common/Test_Common_set_bit_count.hpp b/common/unit_test/Test_Common_set_bit_count.hpp similarity index 100% rename from unit_test/common/Test_Common_set_bit_count.hpp rename to common/unit_test/Test_Common_set_bit_count.hpp diff --git a/unit_test/cuda/Test_Cuda_Common.cpp b/common/unit_test/backends/Test_Cuda_Common.cpp similarity index 100% rename from unit_test/cuda/Test_Cuda_Common.cpp rename to common/unit_test/backends/Test_Cuda_Common.cpp diff --git a/unit_test/hip/Test_HIP_Common.cpp b/common/unit_test/backends/Test_HIP_Common.cpp similarity index 100% rename from unit_test/hip/Test_HIP_Common.cpp rename to common/unit_test/backends/Test_HIP_Common.cpp diff --git a/unit_test/openmptarget/Test_OpenMPTarget_Common.cpp b/common/unit_test/backends/Test_OpenMPTarget_Common.cpp similarity index 100% rename from unit_test/openmptarget/Test_OpenMPTarget_Common.cpp rename to common/unit_test/backends/Test_OpenMPTarget_Common.cpp diff --git a/unit_test/openmp/Test_OpenMP_Common.cpp b/common/unit_test/backends/Test_OpenMP_Common.cpp similarity index 100% rename from unit_test/openmp/Test_OpenMP_Common.cpp rename to common/unit_test/backends/Test_OpenMP_Common.cpp diff --git a/unit_test/sycl/Test_SYCL_Common.cpp b/common/unit_test/backends/Test_SYCL_Common.cpp similarity index 100% rename from unit_test/sycl/Test_SYCL_Common.cpp rename to common/unit_test/backends/Test_SYCL_Common.cpp diff --git a/unit_test/serial/Test_Serial_Common.cpp b/common/unit_test/backends/Test_Serial_Common.cpp similarity index 100% rename from unit_test/serial/Test_Serial_Common.cpp rename to common/unit_test/backends/Test_Serial_Common.cpp diff --git a/unit_test/threads/Test_Threads_Common.cpp b/common/unit_test/backends/Test_Threads_Common.cpp similarity index 100% rename from unit_test/threads/Test_Threads_Common.cpp rename to common/unit_test/backends/Test_Threads_Common.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6a31cd4954..45c389195f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,43 +1,36 @@ -KOKKOSKERNELS_CONFIGURE_FILE(KokkosKernels_config.h) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) -SET(KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}) - -#I don't want the complexity of sometimes interface/sometimes not -#Just minimally force an empty dummy file -SET(SOURCES dummy.cpp) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src) #----------------------------------------------------------------------------- LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/impl) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/impl) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/impl/tpls) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/impl) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/impl) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/src/impl) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/impl/tpls) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/blas) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/blas/impl) #Include Sparse -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/sparse) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/sparse/impl) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/sparse) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/sparse/impl) #Include graph -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/graph) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/graph/impl) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/graph) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/graph/impl) #Include batched -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/impl) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/impl) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/dense) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/dense/impl) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/sparse) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/sparse/impl) -#Include Common -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/common) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/impl) +# #Include Common +# LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/common) +# LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/impl) FOREACH(DIR ${KK_INCLUDE_DIRS}) @@ -52,7 +45,7 @@ IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL) APPEND_GLOB(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/impl/tpls/KokkosBlas_Host_tpl.cpp) ENDIF() -include(cmake/kokkoskernels_eti.cmake) +include(src/cmake/kokkoskernels_eti.cmake) SET(ETI_HEADERS) #Build up a list of DECL, AVAIL, and INST macros @@ -436,72 +429,9 @@ LIST(APPEND HEADERS ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}_config.h) #Add a few other utility files LIST(APPEND SOURCES - batched/KokkosBatched_Util.cpp - impl/tpls/KokkosBlas_Host_tpl.cpp - impl/tpls/KokkosBlas_Cuda_tpl.cpp - impl/tpls/KokkosBlas_Rocm_tpl.cpp - impl/tpls/KokkosKernels_tpl_handles.cpp -) - -# For now, don't add the ETI headers to complete list of headers -# This will break some IDEs and won't properly display headers in the file list -# However, because of the behavior of TRIBITS_ADD_LIBRARY -# I can't add the ETI headers with them getting double-installed -# with a bunch of headers in the wrong location -# This doesn't change pre-existing behavior before the ETI changes -#LIST(APPEND HEADERS ${ETI_HEADERS}) -#----------------------------------------------------------------------------- - -KOKKOSKERNELS_ADD_LIBRARY( - kokkoskernels - HEADERS ${HEADERS} - SOURCES ${SOURCES} -) - -# It does not seem to be possible to automatically have headers installed -# in the correct subdirectory structure using HEADERS and ADD_LIBRARY with tribits -# Force the specializations to be installed in a subdirectory -INSTALL(FILES ${ETI_HEADERS} DESTINATION ${KOKKOSKERNELS_HEADER_INSTALL_DIR}/generated_specializations_hpp/) - -IF (KOKKOSKERNELS_HAS_TRILINOS) - #no linking commands required - tribits does this -ELSE() - ADD_LIBRARY(Kokkos::kokkoskernels ALIAS kokkoskernels) - TARGET_LINK_LIBRARIES(kokkoskernels PUBLIC Kokkos::kokkos) - FOREACH(DIR ${KK_INCLUDE_DIRS}) - TARGET_INCLUDE_DIRECTORIES(kokkoskernels PUBLIC $) - ENDFOREACH() - TARGET_INCLUDE_DIRECTORIES(kokkoskernels PUBLIC - $) -ENDIF() - -IF (KOKKOS_ENABLE_SYCL) - SET(KOKKOSKERNELS_INTEL_ARCHS ${Kokkos_ARCH}) - LIST(FILTER KOKKOSKERNELS_INTEL_ARCHS INCLUDE REGEX ".*INTEL.*") - LIST(LENGTH KOKKOSKERNELS_INTEL_ARCHS KOKKOSKERNELS_INTEL_ARCHS_NUM) - IF(KOKKOSKERNELS_INTEL_ARCHS_NUM GREATER_EQUAL 1) - IF (NOT BUILD_SHARED_LIBS) - MESSAGE(SEND_ERROR - "At the moment, we require KokkosKernels (and Kokkos) to be built as " - "shared libraries to allow querying free and total device memory!" - ) - ENDIF() - TARGET_LINK_LIBRARIES(kokkoskernels PUBLIC ze_loader) - ENDIF() -ENDIF() - -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC LAPACK) -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC BLAS) -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC CBLAS) -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC LAPACKE) -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC SUPERLU) -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC CHOLMOD) -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC MKL) -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC CUBLAS) -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC CUSPARSE) -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC ROCBLAS) -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC ROCSPARSE) -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC METIS) -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC ARMPL) -KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC MAGMA) -# Not yet here KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC MAGMA) + src/batched/KokkosBatched_Util.cpp + src/impl/tpls/KokkosBlas_Host_tpl.cpp + src/impl/tpls/KokkosBlas_Cuda_tpl.cpp + src/impl/tpls/KokkosBlas_Rocm_tpl.cpp + src/impl/tpls/KokkosKernels_tpl_handles.cpp +) diff --git a/src/cmake/kokkoskernels_eti.cmake b/src/cmake/kokkoskernels_eti.cmake index 04a6f412c9..4d6fe64094 100644 --- a/src/cmake/kokkoskernels_eti.cmake +++ b/src/cmake/kokkoskernels_eti.cmake @@ -156,8 +156,8 @@ MACRO(KOKKOSKERNELS_GENERATE_ETI FUNCTION_NAME SUBFOLDER) LIST(APPEND ${UPPER_NAME}_ETI_AVAIL_LIST "${ETI_AVAIL_MACRO}${MACRO_STRING}") SET(${UPPER_NAME}_ETI_DECL_LIST "${ETI_DECL_MACRO}${MACRO_STRING}") #Make a different source file for each instance - SET(INST_SOURCE "impl/generated_specializations_cpp/${SUBFOLDER}/${ETI}.cpp") - SET(INST_TEMPLATE "impl/generated_specializations_cpp/${SUBFOLDER}/Kokkos${FUNCTION_NAME}_eti_spec_inst.cpp.in") + SET(INST_SOURCE "src/impl/generated_specializations_cpp/${SUBFOLDER}/${ETI}.cpp") + SET(INST_TEMPLATE "src/impl/generated_specializations_cpp/${SUBFOLDER}/Kokkos${FUNCTION_NAME}_eti_spec_inst.cpp.in") SET(${UPPER_NAME}_ETI_INST_BLOCK "${ETI_INST_MACRO}${MACRO_STRING}") CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${INST_TEMPLATE} ${CMAKE_CURRENT_BINARY_DIR}/${INST_SOURCE}) @@ -167,9 +167,9 @@ MACRO(KOKKOSKERNELS_GENERATE_ETI FUNCTION_NAME SUBFOLDER) MESSAGE(STATUS "Skipping ETI files for ${FUNCTION_NAME} because not all components are enabled") ENDIF() - SET(AVAIL_HEADER "impl/generated_specializations_hpp/Kokkos${FUNCTION_NAME}_eti_spec_avail.hpp") + SET(AVAIL_HEADER "src/impl/generated_specializations_hpp/Kokkos${FUNCTION_NAME}_eti_spec_avail.hpp") SET(AVAIL_TEMPLATE "${AVAIL_HEADER}.in") - SET(DECL_HEADER "impl/generated_specializations_hpp/Kokkos${FUNCTION_NAME}_eti_spec_decl.hpp") + SET(DECL_HEADER "src/impl/generated_specializations_hpp/Kokkos${FUNCTION_NAME}_eti_spec_decl.hpp") SET(DECL_TEMPLATE "${DECL_HEADER}.in") STRING(REPLACE ";" "\n" ${UPPER_NAME}_ETI_INST_BLOCK "${${UPPER_NAME}_ETI_INST_LIST}") diff --git a/unit_test/common/Test_Common_Test_All_Type_Combos.hpp b/test_common/Test_Common_Test_All_Type_Combos.hpp similarity index 100% rename from unit_test/common/Test_Common_Test_All_Type_Combos.hpp rename to test_common/Test_Common_Test_All_Type_Combos.hpp diff --git a/test_common/Test_OpenMP.hpp b/test_common/Test_OpenMP.hpp new file mode 100644 index 0000000000..f9c46457d8 --- /dev/null +++ b/test_common/Test_OpenMP.hpp @@ -0,0 +1,22 @@ +#ifndef TEST_OPENMP_HPP +#define TEST_OPENMP_HPP + +#include +#include +#include + +#if defined(KOKKOSKERNELS_TEST_ETI_ONLY) && !defined(KOKKOSKERNELS_ETI_ONLY) +#define KOKKOSKERNELS_ETI_ONLY +#endif + +class openmp : public ::testing::Test { + protected: + static void SetUpTestCase() {} + + static void TearDownTestCase() {} +}; + +#define TestCategory openmp +#define TestExecSpace Kokkos::OpenMP + +#endif // TEST_OPENMP_HPP diff --git a/unit_test/CMakeLists.txt b/unit_test/CMakeLists.txt index 8eb4cc7a6e..7eaddf7cfe 100644 --- a/unit_test/CMakeLists.txt +++ b/unit_test/CMakeLists.txt @@ -27,29 +27,6 @@ KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_C KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched/sparse/impl) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/impl) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/common) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/common) - -# Kyungjoo: when kokkoskernels and kokkos are symbolic link and their src directories are overrided -# the following relative path does not work or users should put kokkoskernels and kokkos -# at the same place -SET(GTEST_SOURCE_DIR ${PACKAGE_SOURCE_DIR}/tpls/gtest) - -KOKKOSKERNELS_ADD_TEST_LIBRARY( - kokkoskernels_gtest - HEADERS ${GTEST_SOURCE_DIR}/gtest/gtest.h - SOURCES ${GTEST_SOURCE_DIR}/gtest/gtest-all.cc - ) -# Disables pthreads, this is a problem for serial builds in Trilinos & Sierra if it's enabled. -TARGET_COMPILE_DEFINITIONS(kokkoskernels_gtest PUBLIC "-DGTEST_HAS_PTHREAD=0") -TARGET_INCLUDE_DIRECTORIES(kokkoskernels_gtest PUBLIC $) - -#Gtest minimally requires C++11 -TARGET_COMPILE_FEATURES(kokkoskernels_gtest PUBLIC cxx_std_11) - - - - IF (KOKKOS_ENABLE_CUDA) @@ -95,14 +72,6 @@ IF (KOKKOS_ENABLE_CUDA) cuda/Test_Cuda_Graph.cpp COMPONENTS graph ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - common_cuda - SOURCES - Test_Main.cpp - cuda/Test_Cuda_Common.cpp - COMPONENTS common - ) ENDIF () IF (KOKKOS_ENABLE_SYCL) @@ -148,14 +117,6 @@ IF (KOKKOS_ENABLE_SYCL) sycl/Test_SYCL_Graph.cpp COMPONENTS graph ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - common_sycl - SOURCES - Test_Main.cpp - sycl/Test_SYCL_Common.cpp - COMPONENTS common - ) ENDIF () IF (KOKKOS_ENABLE_HIP) @@ -201,14 +162,6 @@ IF (KOKKOS_ENABLE_HIP) hip/Test_HIP_Graph.cpp COMPONENTS graph ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - common_hip - SOURCES - Test_Main.cpp - hip/Test_HIP_Common.cpp - COMPONENTS common - ) ENDIF () IF (KOKKOS_ENABLE_OPENMPTARGET) @@ -246,14 +199,6 @@ IF (KOKKOS_ENABLE_OPENMPTARGET) openmptarget/Test_OpenMPTarget_Graph.cpp COMPONENTS graph ) - - # KOKKOSKERNELS_ADD_UNIT_TEST( - # common_openmptarget - # SOURCES - # Test_Main.cpp - # openmptarget/Test_OpenMPTarget_Common.cpp - # COMPONENTS common - # ) ENDIF () IF (KOKKOS_ENABLE_OPENMP) @@ -299,14 +244,6 @@ IF (KOKKOS_ENABLE_OPENMP) openmp/Test_OpenMP_Graph.cpp COMPONENTS graph ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - common_openmp - SOURCES - Test_Main.cpp - openmp/Test_OpenMP_Common.cpp - COMPONENTS common - ) ENDIF () IF (KOKKOS_ENABLE_SERIAL) @@ -324,7 +261,7 @@ IF (KOKKOS_ENABLE_SERIAL) serial/Test_Serial_Blas.cpp COMPONENTS blas ) - + KOKKOSKERNELS_ADD_UNIT_TEST( batched_dla_serial SOURCES @@ -356,14 +293,6 @@ IF (KOKKOS_ENABLE_SERIAL) serial/Test_Serial_Graph.cpp COMPONENTS graph ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - common_serial - SOURCES - Test_Main.cpp - serial/Test_Serial_Common.cpp - COMPONENTS common - ) ENDIF () IF (KOKKOS_ENABLE_THREADS) @@ -377,7 +306,7 @@ IF (KOKKOS_ENABLE_THREADS) threads/Test_Threads_Blas.cpp COMPONENTS blas ) - + KOKKOSKERNELS_ADD_UNIT_TEST( batched_dla_threads SOURCES @@ -409,15 +338,7 @@ IF (KOKKOS_ENABLE_THREADS) threads/Test_Threads_Graph.cpp COMPONENTS graph ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - common_threads - SOURCES - Test_Main.cpp - threads/Test_Threads_Common.cpp - COMPONENTS common - ) ENDIF () - + diff --git a/unit_test/sparse/Test_Sparse.hpp b/unit_test/sparse/Test_Sparse.hpp index 5a240ce228..6df9ab613d 100644 --- a/unit_test/sparse/Test_Sparse.hpp +++ b/unit_test/sparse/Test_Sparse.hpp @@ -2,6 +2,7 @@ #define TEST_SPARSE_HPP #include "Test_Sparse_block_gauss_seidel.hpp" +#include "Test_Sparse_Controls.hpp" #include "Test_Sparse_CrsMatrix.hpp" #include "Test_Sparse_BsrMatrix.hpp" #include "Test_Sparse_findRelOffset.hpp" diff --git a/unit_test/common/Test_Common_Controls.hpp b/unit_test/sparse/Test_Sparse_Controls.hpp similarity index 96% rename from unit_test/common/Test_Common_Controls.hpp rename to unit_test/sparse/Test_Sparse_Controls.hpp index 48c2a96715..fec24b573a 100644 --- a/unit_test/common/Test_Common_Controls.hpp +++ b/unit_test/sparse/Test_Sparse_Controls.hpp @@ -42,8 +42,8 @@ //@HEADER */ -#ifndef TEST_COMMON_CONTROLS_HPP -#define TEST_COMMON_CONTROLS_HPP +#ifndef TEST_SPARSE_CONTROLS_HPP +#define TEST_SPARSE_CONTROLS_HPP #include "KokkosKernels_Controls.hpp" @@ -69,4 +69,4 @@ void test_controls_set() { TEST_F(TestCategory, controls_empty) { test_controls_empty(); } TEST_F(TestCategory, controls_set) { test_controls_set(); } -#endif // TEST_COMMON_CONTROLS_HPP +#endif // TEST_SPARSE_CONTROLS_HPP From 7c484e2d2dad812ae8bbd05c99bec002f896de6b Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 24 Aug 2022 18:04:06 -0600 Subject: [PATCH 074/226] modular build: moving some headers to make them accessible to all modules Moving some generic headers to test_common so they will be accessibles to all the modules. --- {unit_test/cuda => test_common}/Test_Cuda.hpp | 0 {unit_test/hip => test_common}/Test_HIP.hpp | 0 .../Test_OpenMPTarget.hpp | 0 {unit_test/sycl => test_common}/Test_SYCL.hpp | 0 .../serial => test_common}/Test_Serial.hpp | 0 .../threads => test_common}/Test_Threads.hpp | 0 unit_test/openmp/Test_OpenMP.hpp | 22 ------------------- 7 files changed, 22 deletions(-) rename {unit_test/cuda => test_common}/Test_Cuda.hpp (100%) rename {unit_test/hip => test_common}/Test_HIP.hpp (100%) rename {unit_test/openmptarget => test_common}/Test_OpenMPTarget.hpp (100%) rename {unit_test/sycl => test_common}/Test_SYCL.hpp (100%) rename {unit_test/serial => test_common}/Test_Serial.hpp (100%) rename {unit_test/threads => test_common}/Test_Threads.hpp (100%) delete mode 100644 unit_test/openmp/Test_OpenMP.hpp diff --git a/unit_test/cuda/Test_Cuda.hpp b/test_common/Test_Cuda.hpp similarity index 100% rename from unit_test/cuda/Test_Cuda.hpp rename to test_common/Test_Cuda.hpp diff --git a/unit_test/hip/Test_HIP.hpp b/test_common/Test_HIP.hpp similarity index 100% rename from unit_test/hip/Test_HIP.hpp rename to test_common/Test_HIP.hpp diff --git a/unit_test/openmptarget/Test_OpenMPTarget.hpp b/test_common/Test_OpenMPTarget.hpp similarity index 100% rename from unit_test/openmptarget/Test_OpenMPTarget.hpp rename to test_common/Test_OpenMPTarget.hpp diff --git a/unit_test/sycl/Test_SYCL.hpp b/test_common/Test_SYCL.hpp similarity index 100% rename from unit_test/sycl/Test_SYCL.hpp rename to test_common/Test_SYCL.hpp diff --git a/unit_test/serial/Test_Serial.hpp b/test_common/Test_Serial.hpp similarity index 100% rename from unit_test/serial/Test_Serial.hpp rename to test_common/Test_Serial.hpp diff --git a/unit_test/threads/Test_Threads.hpp b/test_common/Test_Threads.hpp similarity index 100% rename from unit_test/threads/Test_Threads.hpp rename to test_common/Test_Threads.hpp diff --git a/unit_test/openmp/Test_OpenMP.hpp b/unit_test/openmp/Test_OpenMP.hpp deleted file mode 100644 index f9c46457d8..0000000000 --- a/unit_test/openmp/Test_OpenMP.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef TEST_OPENMP_HPP -#define TEST_OPENMP_HPP - -#include -#include -#include - -#if defined(KOKKOSKERNELS_TEST_ETI_ONLY) && !defined(KOKKOSKERNELS_ETI_ONLY) -#define KOKKOSKERNELS_ETI_ONLY -#endif - -class openmp : public ::testing::Test { - protected: - static void SetUpTestCase() {} - - static void TearDownTestCase() {} -}; - -#define TestCategory openmp -#define TestExecSpace Kokkos::OpenMP - -#endif // TEST_OPENMP_HPP From c3e66aa54e25d49bca7cdb5414fd94910311a949 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 29 Aug 2022 13:28:28 -0600 Subject: [PATCH 075/226] Modular build: adding the batched component The batched algorithms can now be built on their own with associated tests. Some small clean-up was required in the unit-test utilities. One question that comes up: what are we doing with the TPLs? They could be split by component or kept in a top level tpls directory. --- CMakeLists.txt | 30 ++++- batched/CMakeLists.txt | 21 +++ .../KokkosBatched_Util.cpp | 0 .../KokkosBatched_Util.hpp | 0 {src/batched => batched}/README | 0 .../impl/KokkosBatched_AddRadial_Impl.hpp | 0 .../impl/KokkosBatched_AddRadial_Internal.hpp | 0 ...kosBatched_ApplyGivens_Serial_Internal.hpp | 0 ...osBatched_ApplyHouseholder_Serial_Impl.hpp | 0 ...tched_ApplyHouseholder_Serial_Internal.hpp | 0 ...tched_ApplyHouseholder_TeamVector_Impl.hpp | 0 ...d_ApplyHouseholder_TeamVector_Internal.hpp | 0 .../impl/KokkosBatched_ApplyPivot_Impl.hpp | 0 .../KokkosBatched_ApplyPivot_Internal.hpp | 0 .../impl/KokkosBatched_ApplyQ_Serial_Impl.hpp | 0 .../KokkosBatched_ApplyQ_Serial_Internal.hpp | 0 .../KokkosBatched_ApplyQ_TeamVector_Impl.hpp | 0 ...kkosBatched_ApplyQ_TeamVector_Internal.hpp | 0 .../dense/impl/KokkosBatched_Axpy_Impl.hpp | 0 .../dense/impl/KokkosBatched_Copy_Impl.hpp | 0 .../impl/KokkosBatched_Copy_Internal.hpp | 0 .../dense/impl/KokkosBatched_Dot_Internal.hpp | 0 ...Batched_Eigendecomposition_Serial_Impl.hpp | 0 ...hed_Eigendecomposition_Serial_Internal.hpp | 0 ...hed_Eigendecomposition_TeamVector_Impl.hpp | 0 ...Eigendecomposition_TeamVector_Internal.hpp | 0 ...kkosBatched_Eigenvalue_Serial_Internal.hpp | 0 .../impl/KokkosBatched_FindAmax_Internal.hpp | 0 .../KokkosBatched_Francis_Serial_Internal.hpp | 0 .../impl/KokkosBatched_Gemm_Armpl_Impl.hpp | 0 .../impl/KokkosBatched_Gemm_DblBuf_Impl.hpp | 0 .../impl/KokkosBatched_Gemm_Serial_Impl.hpp | 0 .../KokkosBatched_Gemm_Serial_Internal.hpp | 0 .../KokkosBatched_Gemm_TeamVector_Impl.hpp | 0 ...KokkosBatched_Gemm_TeamVector_Internal.hpp | 0 .../impl/KokkosBatched_Gemm_Team_Impl.hpp | 0 .../impl/KokkosBatched_Gemm_Team_Internal.hpp | 0 .../KokkosBatched_Gemv_TeamVector_Impl.hpp | 0 ...KokkosBatched_Gemv_TeamVector_Internal.hpp | 0 .../impl/KokkosBatched_Gemv_Team_Impl.hpp | 0 .../impl/KokkosBatched_Gemv_Team_Internal.hpp | 0 .../dense/impl/KokkosBatched_Gesv_Impl.hpp | 0 .../KokkosBatched_Givens_Serial_Internal.hpp | 0 .../KokkosBatched_HadamardProduct_Impl.hpp | 0 ...atched_HessenbergFormQ_Serial_Internal.hpp | 0 ...HessenbergQR_WithShift_Serial_Internal.hpp | 0 ...kkosBatched_Hessenberg_Serial_Internal.hpp | 0 .../KokkosBatched_Householder_Serial_Impl.hpp | 0 ...kosBatched_Householder_Serial_Internal.hpp | 0 ...kosBatched_Householder_TeamVector_Impl.hpp | 0 ...atched_Householder_TeamVector_Internal.hpp | 0 ...okkosBatched_InnerGemmFixA_Serial_Impl.hpp | 0 ...okkosBatched_InnerGemmFixB_Serial_Impl.hpp | 0 ...okkosBatched_InnerGemmFixC_Serial_Impl.hpp | 0 .../KokkosBatched_InnerGemmFixC_Team_Impl.hpp | 0 .../KokkosBatched_InnerLU_Serial_Impl.hpp | 0 .../KokkosBatched_InnerTrsm_Serial_Impl.hpp | 0 .../KokkosBatched_InverseLU_Serial_Impl.hpp | 0 .../impl/KokkosBatched_LU_Serial_Impl.hpp | 0 .../impl/KokkosBatched_LU_Serial_Internal.hpp | 0 .../dense/impl/KokkosBatched_LU_Team_Impl.hpp | 0 .../impl/KokkosBatched_LU_Team_Internal.hpp | 0 ...ftEigenvectorFromSchur_Serial_Internal.hpp | 0 .../impl/KokkosBatched_Normalize_Internal.hpp | 0 ...KokkosBatched_QR_FormQ_Serial_Internal.hpp | 0 ...osBatched_QR_FormQ_TeamVector_Internal.hpp | 0 .../impl/KokkosBatched_QR_Serial_Impl.hpp | 0 .../impl/KokkosBatched_QR_Serial_Internal.hpp | 0 .../impl/KokkosBatched_QR_TeamVector_Impl.hpp | 0 .../KokkosBatched_QR_TeamVector_Internal.hpp | 0 ..._QR_WithColumnPivoting_TeamVector_Impl.hpp | 0 ...WithColumnPivoting_TeamVector_Internal.hpp | 0 ...htEigenvectorFromSchur_Serial_Internal.hpp | 0 .../impl/KokkosBatched_SVD_Serial_Impl.hpp | 0 .../KokkosBatched_SVD_Serial_Internal.hpp | 0 ...KokkosBatched_Schur2x2_Serial_Internal.hpp | 0 .../KokkosBatched_Schur_Serial_Internal.hpp | 0 .../impl/KokkosBatched_SetIdentity_Impl.hpp | 0 .../KokkosBatched_SetIdentity_Internal.hpp | 0 .../KokkosBatched_SetTriangular_Internal.hpp | 0 ...kosBatched_ShiftedTrsv_Serial_Internal.hpp | 0 ...KokkosBatched_SolveUTV_TeamVector_Impl.hpp | 0 ...osBatched_SolveUTV_TeamVector_Internal.hpp | 0 .../impl/KokkosBatched_Trmm_Serial_Impl.hpp | 0 .../KokkosBatched_Trmm_Serial_Internal.hpp | 0 .../impl/KokkosBatched_Trsm_Serial_Impl.hpp | 0 .../KokkosBatched_Trsm_Serial_Internal.hpp | 0 .../KokkosBatched_Trsm_TeamVector_Impl.hpp | 0 ...KokkosBatched_Trsm_TeamVector_Internal.hpp | 0 .../impl/KokkosBatched_Trsm_Team_Impl.hpp | 0 .../impl/KokkosBatched_Trsm_Team_Internal.hpp | 0 .../impl/KokkosBatched_Trsv_Serial_Impl.hpp | 0 .../KokkosBatched_Trsv_Serial_Internal.hpp | 0 .../KokkosBatched_Trsv_TeamVector_Impl.hpp | 0 ...KokkosBatched_Trsv_TeamVector_Internal.hpp | 0 .../impl/KokkosBatched_Trsv_Team_Impl.hpp | 0 .../impl/KokkosBatched_Trsv_Team_Internal.hpp | 0 .../impl/KokkosBatched_Trtri_Serial_Impl.hpp | 0 .../KokkosBatched_Trtri_Serial_Internal.hpp | 0 .../KokkosBatched_UTV_TeamVector_Impl.hpp | 0 .../KokkosBatched_UTV_TeamVector_Internal.hpp | 0 .../KokkosBatched_UpdateGivens_Internal.hpp | 0 .../impl/KokkosBatched_Vector_SIMD_Arith.hpp | 0 .../KokkosBatched_Vector_SIMD_Logical.hpp | 0 .../impl/KokkosBatched_Vector_SIMD_Math.hpp | 0 .../impl/KokkosBatched_Vector_SIMD_Misc.hpp | 0 .../KokkosBatched_Vector_SIMD_Relation.hpp | 0 .../impl/KokkosBatched_Vector_SIMD_View.hpp | 0 ...Batched_WilkinsonShift_Serial_Internal.hpp | 0 .../dense/impl/KokkosBatched_Xpay_Impl.hpp | 0 .../src}/KokkosBatched_AddRadial_Decl.hpp | 0 .../KokkosBatched_ApplyHouseholder_Decl.hpp | 0 .../src}/KokkosBatched_ApplyPivot_Decl.hpp | 0 .../dense/src}/KokkosBatched_ApplyQ_Decl.hpp | 0 .../dense/src}/KokkosBatched_Axpy.hpp | 0 .../dense/src}/KokkosBatched_Copy_Decl.hpp | 0 .../dense/src}/KokkosBatched_Dot.hpp | 0 .../KokkosBatched_Eigendecomposition_Decl.hpp | 0 .../dense/src}/KokkosBatched_Gemm_Decl.hpp | 0 .../dense/src}/KokkosBatched_Gemm_Handle.hpp | 0 .../dense/src}/KokkosBatched_Gemv_Decl.hpp | 0 .../dense/src}/KokkosBatched_Gesv.hpp | 0 .../src}/KokkosBatched_HadamardProduct.hpp | 0 .../src}/KokkosBatched_Householder_Decl.hpp | 0 .../src}/KokkosBatched_InnerGemmFixA_Decl.hpp | 0 .../src}/KokkosBatched_InnerGemmFixB_Decl.hpp | 0 .../src}/KokkosBatched_InnerGemmFixC_Decl.hpp | 0 .../dense/src}/KokkosBatched_InnerLU_Decl.hpp | 0 .../src}/KokkosBatched_InnerTrsm_Decl.hpp | 0 .../src}/KokkosBatched_InverseLU_Decl.hpp | 0 .../src}/KokkosBatched_Kernel_Handle.hpp | 0 .../dense/src}/KokkosBatched_LU_Decl.hpp | 0 .../dense/src}/KokkosBatched_QR_Decl.hpp | 0 ...kkosBatched_QR_WithColumnPivoting_Decl.hpp | 0 .../dense/src}/KokkosBatched_SVD_Decl.hpp | 0 .../dense/src}/KokkosBatched_Scale_Decl.hpp | 0 .../src}/KokkosBatched_SetIdentity_Decl.hpp | 0 .../dense/src}/KokkosBatched_Set_Decl.hpp | 0 .../dense/src}/KokkosBatched_SolveLU_Decl.hpp | 0 .../src}/KokkosBatched_SolveUTV_Decl.hpp | 0 .../dense/src}/KokkosBatched_Trmm_Decl.hpp | 0 .../dense/src}/KokkosBatched_Trsm_Decl.hpp | 0 .../dense/src}/KokkosBatched_Trsv_Decl.hpp | 0 .../dense/src}/KokkosBatched_Trtri_Decl.hpp | 0 .../dense/src}/KokkosBatched_UTV_Decl.hpp | 0 .../dense/src}/KokkosBatched_Vector.hpp | 0 .../dense/src}/KokkosBatched_Vector_SIMD.hpp | 0 .../dense/src}/KokkosBatched_Xpay.hpp | 0 batched/dense/unit_test/CMakeLists.txt | 116 ++++++++++++++++ .../unit_test}/Test_Batched_BatchedGemm.hpp | 0 .../Test_Batched_BatchedGemm_Complex.hpp | 0 .../Test_Batched_BatchedGemm_Real.hpp | 0 .../dense/unit_test}/Test_Batched_Dense.hpp | 0 .../unit_test}/Test_Batched_DenseUtils.hpp | 0 .../unit_test}/Test_Batched_SerialAxpy.hpp | 0 .../Test_Batched_SerialAxpy_Complex.hpp | 0 .../Test_Batched_SerialAxpy_Real.hpp | 0 .../Test_Batched_SerialEigendecomposition.hpp | 0 ..._Batched_SerialEigendecomposition_Real.hpp | 0 .../unit_test}/Test_Batched_SerialGemm.hpp | 0 .../Test_Batched_SerialGemm_Complex.hpp | 0 .../Test_Batched_SerialGemm_Real.hpp | 0 .../unit_test}/Test_Batched_SerialGesv.hpp | 0 .../Test_Batched_SerialGesv_Real.hpp | 0 .../Test_Batched_SerialInverseLU.hpp | 0 .../Test_Batched_SerialInverseLU_Complex.hpp | 0 .../Test_Batched_SerialInverseLU_Real.hpp | 0 .../unit_test}/Test_Batched_SerialLU.hpp | 0 .../Test_Batched_SerialLU_Complex.hpp | 0 .../unit_test}/Test_Batched_SerialLU_Real.hpp | 0 .../unit_test}/Test_Batched_SerialSVD.hpp | 0 .../unit_test}/Test_Batched_SerialSolveLU.hpp | 0 .../Test_Batched_SerialSolveLU_Complex.hpp | 0 .../Test_Batched_SerialSolveLU_Real.hpp | 0 .../unit_test}/Test_Batched_SerialTrmm.hpp | 0 .../Test_Batched_SerialTrmm_Complex.hpp | 0 .../Test_Batched_SerialTrmm_Real.hpp | 0 .../unit_test}/Test_Batched_SerialTrsm.hpp | 0 .../Test_Batched_SerialTrsm_Complex.hpp | 0 .../Test_Batched_SerialTrsm_Real.hpp | 0 .../unit_test}/Test_Batched_SerialTrsv.hpp | 0 .../Test_Batched_SerialTrsv_Complex.hpp | 0 .../Test_Batched_SerialTrsv_Real.hpp | 0 .../unit_test}/Test_Batched_SerialTrtri.hpp | 0 .../Test_Batched_SerialTrtri_Complex.hpp | 0 .../Test_Batched_SerialTrtri_Real.hpp | 0 .../unit_test}/Test_Batched_TeamAxpy.hpp | 0 .../Test_Batched_TeamAxpy_Complex.hpp | 0 .../unit_test}/Test_Batched_TeamAxpy_Real.hpp | 0 .../unit_test}/Test_Batched_TeamGemm.hpp | 0 .../Test_Batched_TeamGemm_Complex.hpp | 0 .../unit_test}/Test_Batched_TeamGemm_Real.hpp | 0 .../unit_test}/Test_Batched_TeamGesv.hpp | 0 .../unit_test}/Test_Batched_TeamGesv_Real.hpp | 0 .../unit_test}/Test_Batched_TeamInverseLU.hpp | 0 .../Test_Batched_TeamInverseLU_Complex.hpp | 0 .../Test_Batched_TeamInverseLU_Real.hpp | 0 .../dense/unit_test}/Test_Batched_TeamLU.hpp | 0 .../Test_Batched_TeamLU_Complex.hpp | 0 .../unit_test}/Test_Batched_TeamLU_Real.hpp | 0 .../unit_test}/Test_Batched_TeamSolveLU.hpp | 0 .../Test_Batched_TeamSolveLU_Complex.hpp | 0 .../Test_Batched_TeamSolveLU_Real.hpp | 0 .../unit_test}/Test_Batched_TeamTrsm.hpp | 0 .../Test_Batched_TeamTrsm_Complex.hpp | 0 .../unit_test}/Test_Batched_TeamTrsm_Real.hpp | 0 .../unit_test}/Test_Batched_TeamTrsv.hpp | 0 .../Test_Batched_TeamTrsv_Complex.hpp | 0 .../unit_test}/Test_Batched_TeamTrsv_Real.hpp | 0 .../Test_Batched_TeamVectorAxpy.hpp | 0 .../Test_Batched_TeamVectorAxpy_Complex.hpp | 0 .../Test_Batched_TeamVectorAxpy_Real.hpp | 0 ...t_Batched_TeamVectorEigendecomposition.hpp | 0 ...ched_TeamVectorEigendecomposition_Real.hpp | 0 .../Test_Batched_TeamVectorGemm.hpp | 0 .../Test_Batched_TeamVectorGemm_Complex.hpp | 0 .../Test_Batched_TeamVectorGemm_Real.hpp | 0 .../Test_Batched_TeamVectorGesv.hpp | 0 .../Test_Batched_TeamVectorGesv_Real.hpp | 0 .../unit_test}/Test_Batched_TeamVectorQR.hpp | 0 .../Test_Batched_TeamVectorQR_Real.hpp | 0 ...atched_TeamVectorQR_WithColumnPivoting.hpp | 0 ...d_TeamVectorQR_WithColumnPivoting_Real.hpp | 0 .../Test_Batched_TeamVectorSolveUTV.hpp | 0 .../Test_Batched_TeamVectorSolveUTV2.hpp | 0 .../Test_Batched_TeamVectorSolveUTV2_Real.hpp | 0 .../Test_Batched_TeamVectorSolveUTV_Real.hpp | 0 .../unit_test}/Test_Batched_TeamVectorUTV.hpp | 0 .../Test_Batched_TeamVectorUTV_Real.hpp | 0 .../Test_Batched_VectorArithmatic.hpp | 0 .../unit_test}/Test_Batched_VectorLogical.hpp | 0 .../unit_test}/Test_Batched_VectorMath.hpp | 0 .../unit_test}/Test_Batched_VectorMisc.hpp | 0 .../Test_Batched_VectorRelation.hpp | 0 .../unit_test}/Test_Batched_VectorView.hpp | 0 .../backends}/Test_Cuda_Batched_Dense.cpp | 0 .../backends}/Test_HIP_Batched_Dense.cpp | 0 .../Test_OpenMPTarget_Batched_Dense.cpp | 0 .../backends}/Test_OpenMP_Batched_Dense.cpp | 0 .../backends}/Test_SYCL_Batched_Dense.cpp | 0 .../backends}/Test_Serial_Batched_Dense.cpp | 0 .../backends}/Test_Threads_Batched_Dense.cpp | 0 .../impl/KokkosBatched_CG_TeamVector_Impl.hpp | 0 .../impl/KokkosBatched_CG_Team_Impl.hpp | 0 .../impl/KokkosBatched_GMRES_Serial_Impl.hpp | 0 .../KokkosBatched_GMRES_TeamVector_Impl.hpp | 0 .../impl/KokkosBatched_GMRES_Team_Impl.hpp | 0 .../impl/KokkosBatched_Spmv_Serial_Impl.hpp | 0 .../KokkosBatched_Spmv_TeamVector_Impl.hpp | 0 .../impl/KokkosBatched_Spmv_Team_Impl.hpp | 0 .../sparse/src}/KokkosBatched_CG.hpp | 0 .../sparse/src}/KokkosBatched_CrsMatrix.hpp | 0 .../sparse/src}/KokkosBatched_GMRES.hpp | 0 .../sparse/src}/KokkosBatched_Identity.hpp | 0 .../sparse/src}/KokkosBatched_JacobiPrec.hpp | 0 .../src}/KokkosBatched_Krylov_Handle.hpp | 0 .../src}/KokkosBatched_Krylov_Solvers.hpp | 0 .../sparse/src}/KokkosBatched_Spmv.hpp | 0 batched/sparse/unit_test/CMakeLists.txt | 117 ++++++++++++++++ .../unit_test}/Test_Batched_SerialGMRES.hpp | 0 .../Test_Batched_SerialGMRES_Real.hpp | 0 .../unit_test}/Test_Batched_SerialSpmv.hpp | 0 .../Test_Batched_SerialSpmv_Real.hpp | 0 .../sparse/unit_test}/Test_Batched_Sparse.hpp | 0 .../unit_test}/Test_Batched_SparseUtils.hpp | 0 .../sparse/unit_test}/Test_Batched_TeamCG.hpp | 0 .../unit_test}/Test_Batched_TeamCG_Real.hpp | 0 .../unit_test}/Test_Batched_TeamGMRES.hpp | 0 .../Test_Batched_TeamGMRES_Real.hpp | 0 .../unit_test}/Test_Batched_TeamSpmv.hpp | 0 .../unit_test}/Test_Batched_TeamSpmv_Real.hpp | 0 .../unit_test}/Test_Batched_TeamVectorCG.hpp | 0 .../Test_Batched_TeamVectorCG_Real.hpp | 0 .../Test_Batched_TeamVectorGMRES.hpp | 0 .../Test_Batched_TeamVectorGMRES_Real.hpp | 0 .../Test_Batched_TeamVectorSpmv.hpp | 0 .../Test_Batched_TeamVectorSpmv_Real.hpp | 0 .../backends}/Test_Cuda_Batched_Sparse.cpp | 0 .../backends}/Test_HIP_Batched_Sparse.cpp | 0 .../Test_OpenMPTarget_Batched_Sparse.cpp | 0 .../backends}/Test_OpenMP_Batched_Sparse.cpp | 0 .../backends}/Test_SYCL_Batched_Sparse.cpp | 0 .../backends}/Test_Serial_Batched_Sparse.cpp | 0 .../backends}/Test_Threads_Batched_Sparse.cpp | 0 cmake/kokkoskernels_components.cmake | 44 ++++++ src/CMakeLists.txt | 14 +- test_common/KokkosKernels_TestUtils.hpp | 17 --- unit_test/CMakeLists.txt | 126 ------------------ unit_test/sparse/Test_Sparse_Utils.hpp | 70 ++++++++++ .../sparse/Test_Sparse_block_gauss_seidel.hpp | 1 + unit_test/sparse/Test_Sparse_gauss_seidel.hpp | 1 + 291 files changed, 398 insertions(+), 159 deletions(-) create mode 100644 batched/CMakeLists.txt rename {src/batched => batched}/KokkosBatched_Util.cpp (100%) rename {src/batched => batched}/KokkosBatched_Util.hpp (100%) rename {src/batched => batched}/README (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_AddRadial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_AddRadial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_ApplyGivens_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_ApplyPivot_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_ApplyPivot_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_ApplyQ_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_ApplyQ_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_ApplyQ_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_ApplyQ_TeamVector_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Axpy_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Copy_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Copy_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Dot_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Eigendecomposition_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Eigendecomposition_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Eigenvalue_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_FindAmax_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Francis_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Gemm_Armpl_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Gemm_DblBuf_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Gemm_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Gemm_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Gemm_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Gemm_TeamVector_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Gemm_Team_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Gemm_Team_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Gesv_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Givens_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_HadamardProduct_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_HessenbergFormQ_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_HessenbergQR_WithShift_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Hessenberg_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Householder_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Householder_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Householder_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Householder_TeamVector_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_InnerGemmFixA_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_InnerGemmFixB_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_InnerGemmFixC_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_InnerGemmFixC_Team_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_InnerLU_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_InnerTrsm_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_InverseLU_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_LU_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_LU_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_LU_Team_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_LU_Team_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_LeftEigenvectorFromSchur_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Normalize_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_QR_FormQ_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_QR_FormQ_TeamVector_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_QR_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_QR_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_QR_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_QR_TeamVector_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_RightEigenvectorFromSchur_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_SVD_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_SVD_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Schur2x2_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Schur_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_SetIdentity_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_SetIdentity_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_SetTriangular_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_ShiftedTrsv_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_SolveUTV_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_SolveUTV_TeamVector_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trmm_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trmm_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trsm_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trsm_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trsm_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trsm_TeamVector_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trsm_Team_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trsm_Team_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trsv_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trsv_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trsv_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trsv_TeamVector_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trsv_Team_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trsv_Team_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trtri_Serial_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Trtri_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_UTV_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_UTV_TeamVector_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_UpdateGivens_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Vector_SIMD_Arith.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Vector_SIMD_Logical.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Vector_SIMD_Math.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Vector_SIMD_Misc.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Vector_SIMD_Relation.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Vector_SIMD_View.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_WilkinsonShift_Serial_Internal.hpp (100%) rename {src/batched => batched}/dense/impl/KokkosBatched_Xpay_Impl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_AddRadial_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_ApplyHouseholder_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_ApplyPivot_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_ApplyQ_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Axpy.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Copy_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Dot.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Eigendecomposition_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Gemm_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Gemm_Handle.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Gemv_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Gesv.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_HadamardProduct.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Householder_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_InnerGemmFixA_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_InnerGemmFixB_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_InnerGemmFixC_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_InnerLU_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_InnerTrsm_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_InverseLU_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Kernel_Handle.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_LU_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_QR_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_QR_WithColumnPivoting_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_SVD_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Scale_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_SetIdentity_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Set_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_SolveLU_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_SolveUTV_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Trmm_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Trsm_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Trsv_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Trtri_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_UTV_Decl.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Vector.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Vector_SIMD.hpp (100%) rename {src/batched/dense => batched/dense/src}/KokkosBatched_Xpay.hpp (100%) create mode 100644 batched/dense/unit_test/CMakeLists.txt rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_BatchedGemm.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_BatchedGemm_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_BatchedGemm_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_Dense.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_DenseUtils.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialAxpy.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialAxpy_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialAxpy_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialEigendecomposition.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialEigendecomposition_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialGemm.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialGemm_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialGemm_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialGesv.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialGesv_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialInverseLU.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialInverseLU_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialInverseLU_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialLU.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialLU_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialLU_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialSVD.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialSolveLU.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialSolveLU_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialSolveLU_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialTrmm.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialTrmm_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialTrmm_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialTrsm.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialTrsm_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialTrsm_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialTrsv.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialTrsv_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialTrsv_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialTrtri.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialTrtri_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_SerialTrtri_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamAxpy.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamAxpy_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamAxpy_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamGemm.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamGemm_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamGemm_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamGesv.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamGesv_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamInverseLU.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamInverseLU_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamInverseLU_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamLU.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamLU_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamLU_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamSolveLU.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamSolveLU_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamSolveLU_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamTrsm.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamTrsm_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamTrsm_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamTrsv.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamTrsv_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamTrsv_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorAxpy.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorAxpy_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorAxpy_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorEigendecomposition.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorEigendecomposition_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorGemm.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorGemm_Complex.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorGemm_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorGesv.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorGesv_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorQR.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorQR_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorQR_WithColumnPivoting.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorQR_WithColumnPivoting_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorSolveUTV.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorSolveUTV2.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorSolveUTV2_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorSolveUTV_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorUTV.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_TeamVectorUTV_Real.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_VectorArithmatic.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_VectorLogical.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_VectorMath.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_VectorMisc.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_VectorRelation.hpp (100%) rename {unit_test/batched/dense => batched/dense/unit_test}/Test_Batched_VectorView.hpp (100%) rename {unit_test/cuda => batched/dense/unit_test/backends}/Test_Cuda_Batched_Dense.cpp (100%) rename {unit_test/hip => batched/dense/unit_test/backends}/Test_HIP_Batched_Dense.cpp (100%) rename {unit_test/openmptarget => batched/dense/unit_test/backends}/Test_OpenMPTarget_Batched_Dense.cpp (100%) rename {unit_test/openmp => batched/dense/unit_test/backends}/Test_OpenMP_Batched_Dense.cpp (100%) rename {unit_test/sycl => batched/dense/unit_test/backends}/Test_SYCL_Batched_Dense.cpp (100%) rename {unit_test/serial => batched/dense/unit_test/backends}/Test_Serial_Batched_Dense.cpp (100%) rename {unit_test/threads => batched/dense/unit_test/backends}/Test_Threads_Batched_Dense.cpp (100%) rename {src/batched => batched}/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/sparse/impl/KokkosBatched_CG_Team_Impl.hpp (100%) rename {src/batched => batched}/sparse/impl/KokkosBatched_GMRES_Serial_Impl.hpp (100%) rename {src/batched => batched}/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp (100%) rename {src/batched => batched}/sparse/impl/KokkosBatched_Spmv_Serial_Impl.hpp (100%) rename {src/batched => batched}/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp (100%) rename {src/batched => batched}/sparse/impl/KokkosBatched_Spmv_Team_Impl.hpp (100%) rename {src/batched/sparse => batched/sparse/src}/KokkosBatched_CG.hpp (100%) rename {src/batched/sparse => batched/sparse/src}/KokkosBatched_CrsMatrix.hpp (100%) rename {src/batched/sparse => batched/sparse/src}/KokkosBatched_GMRES.hpp (100%) rename {src/batched/sparse => batched/sparse/src}/KokkosBatched_Identity.hpp (100%) rename {src/batched/sparse => batched/sparse/src}/KokkosBatched_JacobiPrec.hpp (100%) rename {src/batched/sparse => batched/sparse/src}/KokkosBatched_Krylov_Handle.hpp (100%) rename {src/batched/sparse => batched/sparse/src}/KokkosBatched_Krylov_Solvers.hpp (100%) rename {src/batched/sparse => batched/sparse/src}/KokkosBatched_Spmv.hpp (100%) create mode 100644 batched/sparse/unit_test/CMakeLists.txt rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_SerialGMRES.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_SerialGMRES_Real.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_SerialSpmv.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_SerialSpmv_Real.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_Sparse.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_SparseUtils.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_TeamCG.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_TeamCG_Real.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_TeamGMRES.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_TeamGMRES_Real.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_TeamSpmv.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_TeamSpmv_Real.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_TeamVectorCG.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_TeamVectorCG_Real.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_TeamVectorGMRES.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_TeamVectorGMRES_Real.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_TeamVectorSpmv.hpp (100%) rename {unit_test/batched/sparse => batched/sparse/unit_test}/Test_Batched_TeamVectorSpmv_Real.hpp (100%) rename {unit_test/cuda => batched/sparse/unit_test/backends}/Test_Cuda_Batched_Sparse.cpp (100%) rename {unit_test/hip => batched/sparse/unit_test/backends}/Test_HIP_Batched_Sparse.cpp (100%) rename {unit_test/openmptarget => batched/sparse/unit_test/backends}/Test_OpenMPTarget_Batched_Sparse.cpp (100%) rename {unit_test/openmp => batched/sparse/unit_test/backends}/Test_OpenMP_Batched_Sparse.cpp (100%) rename {unit_test/sycl => batched/sparse/unit_test/backends}/Test_SYCL_Batched_Sparse.cpp (100%) rename {unit_test/serial => batched/sparse/unit_test/backends}/Test_Serial_Batched_Sparse.cpp (100%) rename {unit_test/threads => batched/sparse/unit_test/backends}/Test_Threads_Batched_Sparse.cpp (100%) create mode 100644 cmake/kokkoskernels_components.cmake create mode 100644 unit_test/sparse/Test_Sparse_Utils.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 0902632115..71ca6c4211 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,10 +113,14 @@ IF (KokkosKernels_INSTALL_TESTING) INCLUDE(cmake/kokkos_backends.cmake) # Only build the tests KOKKOSKERNELS_ADD_TEST_DIRECTORIES(perf_test) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(common/unit_test) + IF (KokkosKernels_ENABLE_BATCHED) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/dense/unit_test) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/sparse/unit_test) + ENDIF() IF(KokkosKernels_ENABLE_REMAINDER) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(unit_test) ENDIF() - KOKKOSKERNELS_ADD_TEST_DIRECTORIES(common/unit_test) KOKKOSKERNELS_ADD_EXAMPLE_DIRECTORIES(example) ELSE() # Regular build, not install testing @@ -242,16 +246,28 @@ ELSE() #I don't want the complexity of sometimes interface/sometimes not #Just minimally force an empty dummy file + SET(HEADERS) SET(SOURCES src/dummy.cpp) - - # Skip building Kokkos Kernels if we are doing an installation test + # Only enable requested components + # if nothing requested, build everything + # to recover original behavior. + INCLUDE(cmake/kokkoskernels_components.cmake) + INCLUDE(common/CMakeLists.txt) + LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/impl/tpls) + IF (KokkosKernels_ENABLE_BATCHED) + INCLUDE(batched/CMakeLists.txt) + ENDIF() IF (KokkosKernels_ENABLE_REMAINDER) INCLUDE(src/CMakeLists.txt) ENDIF() - INCLUDE(common/CMakeLists.txt) + FOREACH(DIR ${KK_INCLUDE_DIRS}) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(${DIR}) + APPEND_GLOB(HEADERS ${DIR}/*.hpp) + ENDFOREACH() + # MESSAGE("HEADERS: ${HEADERS}") # For now, don't add the ETI headers to complete list of headers @@ -338,12 +354,16 @@ ELSE() #Gtest minimally requires C++11 TARGET_COMPILE_FEATURES(kokkoskernels_gtest PUBLIC cxx_std_11) ENDIF() + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(common/unit_test) + IF (KokkosKernels_ENABLE_BATCHED) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/dense/unit_test) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/sparse/unit_test) + ENDIF() IF (KokkosKernels_ENABLE_REMAINDER) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(perf_test) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(unit_test) KOKKOSKERNELS_ADD_EXAMPLE_DIRECTORIES(example) ENDIF() - KOKKOSKERNELS_ADD_TEST_DIRECTORIES(common/unit_test) KOKKOSKERNELS_PACKAGE_POSTPROCESS() IF (KokkosKernels_ENABLE_DOCS) diff --git a/batched/CMakeLists.txt b/batched/CMakeLists.txt new file mode 100644 index 0000000000..b4c4bf9225 --- /dev/null +++ b/batched/CMakeLists.txt @@ -0,0 +1,21 @@ +# Adding source directory to the build +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/src) + +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/src) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/impl) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/unit_test) + +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/src) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/impl) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/unit_test) + +IF (NOT KokkosKernels_ENABLE_BLAS) + MESSAGE("batched enabled and blas not enabled, we need to include some headers manually!") + APPEND_GLOB(HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/blas/impl/KokkosBlas_util.hpp) + APPEND_GLOB(HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/blas/) + LIST(APPEND SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/batched/KokkosBatched_Util.cpp) +ENDIF() + +# Adding unit-tests +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched) diff --git a/src/batched/KokkosBatched_Util.cpp b/batched/KokkosBatched_Util.cpp similarity index 100% rename from src/batched/KokkosBatched_Util.cpp rename to batched/KokkosBatched_Util.cpp diff --git a/src/batched/KokkosBatched_Util.hpp b/batched/KokkosBatched_Util.hpp similarity index 100% rename from src/batched/KokkosBatched_Util.hpp rename to batched/KokkosBatched_Util.hpp diff --git a/src/batched/README b/batched/README similarity index 100% rename from src/batched/README rename to batched/README diff --git a/src/batched/dense/impl/KokkosBatched_AddRadial_Impl.hpp b/batched/dense/impl/KokkosBatched_AddRadial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_AddRadial_Impl.hpp rename to batched/dense/impl/KokkosBatched_AddRadial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_AddRadial_Internal.hpp b/batched/dense/impl/KokkosBatched_AddRadial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_AddRadial_Internal.hpp rename to batched/dense/impl/KokkosBatched_AddRadial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_ApplyGivens_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_ApplyGivens_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_ApplyGivens_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_ApplyGivens_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Impl.hpp rename to batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Internal.hpp rename to batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_ApplyPivot_Impl.hpp b/batched/dense/impl/KokkosBatched_ApplyPivot_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_ApplyPivot_Impl.hpp rename to batched/dense/impl/KokkosBatched_ApplyPivot_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_ApplyPivot_Internal.hpp b/batched/dense/impl/KokkosBatched_ApplyPivot_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_ApplyPivot_Internal.hpp rename to batched/dense/impl/KokkosBatched_ApplyPivot_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_ApplyQ_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_ApplyQ_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Impl.hpp rename to batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Internal.hpp rename to batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Axpy_Impl.hpp b/batched/dense/impl/KokkosBatched_Axpy_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Axpy_Impl.hpp rename to batched/dense/impl/KokkosBatched_Axpy_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Copy_Impl.hpp b/batched/dense/impl/KokkosBatched_Copy_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Copy_Impl.hpp rename to batched/dense/impl/KokkosBatched_Copy_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Copy_Internal.hpp b/batched/dense/impl/KokkosBatched_Copy_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Copy_Internal.hpp rename to batched/dense/impl/KokkosBatched_Copy_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Dot_Internal.hpp b/batched/dense/impl/KokkosBatched_Dot_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Dot_Internal.hpp rename to batched/dense/impl/KokkosBatched_Dot_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Impl.hpp rename to batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Internal.hpp rename to batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Eigenvalue_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Eigenvalue_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Eigenvalue_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_Eigenvalue_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_FindAmax_Internal.hpp b/batched/dense/impl/KokkosBatched_FindAmax_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_FindAmax_Internal.hpp rename to batched/dense/impl/KokkosBatched_FindAmax_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Francis_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Francis_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Francis_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_Francis_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gemm_Armpl_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemm_Armpl_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Gemm_Armpl_Impl.hpp rename to batched/dense/impl/KokkosBatched_Gemm_Armpl_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gemm_DblBuf_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemm_DblBuf_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Gemm_DblBuf_Impl.hpp rename to batched/dense/impl/KokkosBatched_Gemm_DblBuf_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gemm_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemm_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Gemm_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_Gemm_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gemm_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Gemm_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Gemm_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_Gemm_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Impl.hpp rename to batched/dense/impl/KokkosBatched_Gemm_TeamVector_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Internal.hpp rename to batched/dense/impl/KokkosBatched_Gemm_TeamVector_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gemm_Team_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemm_Team_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Gemm_Team_Impl.hpp rename to batched/dense/impl/KokkosBatched_Gemm_Team_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gemm_Team_Internal.hpp b/batched/dense/impl/KokkosBatched_Gemm_Team_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Gemm_Team_Internal.hpp rename to batched/dense/impl/KokkosBatched_Gemm_Team_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp rename to batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp rename to batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp rename to batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp b/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp rename to batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Gesv_Impl.hpp b/batched/dense/impl/KokkosBatched_Gesv_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Gesv_Impl.hpp rename to batched/dense/impl/KokkosBatched_Gesv_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Givens_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Givens_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Givens_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_Givens_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_HadamardProduct_Impl.hpp b/batched/dense/impl/KokkosBatched_HadamardProduct_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_HadamardProduct_Impl.hpp rename to batched/dense/impl/KokkosBatched_HadamardProduct_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_HessenbergFormQ_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_HessenbergFormQ_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_HessenbergFormQ_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_HessenbergFormQ_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_HessenbergQR_WithShift_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_HessenbergQR_WithShift_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_HessenbergQR_WithShift_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_HessenbergQR_WithShift_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Hessenberg_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Hessenberg_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Hessenberg_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_Hessenberg_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Householder_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Householder_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Householder_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_Householder_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Householder_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Householder_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Householder_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_Householder_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Householder_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_Householder_TeamVector_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Householder_TeamVector_Impl.hpp rename to batched/dense/impl/KokkosBatched_Householder_TeamVector_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Householder_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_Householder_TeamVector_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Householder_TeamVector_Internal.hpp rename to batched/dense/impl/KokkosBatched_Householder_TeamVector_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_InnerGemmFixA_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_InnerGemmFixA_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_InnerGemmFixA_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_InnerGemmFixA_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_InnerGemmFixB_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_InnerGemmFixB_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_InnerGemmFixB_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_InnerGemmFixB_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_InnerGemmFixC_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_InnerGemmFixC_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_InnerGemmFixC_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_InnerGemmFixC_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_InnerGemmFixC_Team_Impl.hpp b/batched/dense/impl/KokkosBatched_InnerGemmFixC_Team_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_InnerGemmFixC_Team_Impl.hpp rename to batched/dense/impl/KokkosBatched_InnerGemmFixC_Team_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_InnerLU_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_InnerLU_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_InnerLU_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_InnerLU_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_InnerTrsm_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_InnerTrsm_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_InnerTrsm_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_InnerTrsm_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_InverseLU_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_InverseLU_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_InverseLU_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_InverseLU_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_LU_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_LU_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_LU_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_LU_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_LU_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_LU_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_LU_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_LU_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_LU_Team_Impl.hpp b/batched/dense/impl/KokkosBatched_LU_Team_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_LU_Team_Impl.hpp rename to batched/dense/impl/KokkosBatched_LU_Team_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_LU_Team_Internal.hpp b/batched/dense/impl/KokkosBatched_LU_Team_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_LU_Team_Internal.hpp rename to batched/dense/impl/KokkosBatched_LU_Team_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_LeftEigenvectorFromSchur_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_LeftEigenvectorFromSchur_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_LeftEigenvectorFromSchur_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_LeftEigenvectorFromSchur_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Normalize_Internal.hpp b/batched/dense/impl/KokkosBatched_Normalize_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Normalize_Internal.hpp rename to batched/dense/impl/KokkosBatched_Normalize_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_QR_FormQ_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_QR_FormQ_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_QR_FormQ_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_QR_FormQ_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_QR_FormQ_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_QR_FormQ_TeamVector_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_QR_FormQ_TeamVector_Internal.hpp rename to batched/dense/impl/KokkosBatched_QR_FormQ_TeamVector_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_QR_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_QR_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_QR_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_QR_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_QR_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_QR_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_QR_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_QR_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_QR_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_QR_TeamVector_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_QR_TeamVector_Impl.hpp rename to batched/dense/impl/KokkosBatched_QR_TeamVector_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_QR_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_QR_TeamVector_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_QR_TeamVector_Internal.hpp rename to batched/dense/impl/KokkosBatched_QR_TeamVector_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Impl.hpp rename to batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Internal.hpp rename to batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_RightEigenvectorFromSchur_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_RightEigenvectorFromSchur_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_RightEigenvectorFromSchur_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_RightEigenvectorFromSchur_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_SVD_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_SVD_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_SVD_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_SVD_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_SVD_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_SVD_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_SVD_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_SVD_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Schur2x2_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Schur2x2_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Schur2x2_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_Schur2x2_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Schur_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Schur_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Schur_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_Schur_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_SetIdentity_Impl.hpp b/batched/dense/impl/KokkosBatched_SetIdentity_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_SetIdentity_Impl.hpp rename to batched/dense/impl/KokkosBatched_SetIdentity_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_SetIdentity_Internal.hpp b/batched/dense/impl/KokkosBatched_SetIdentity_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_SetIdentity_Internal.hpp rename to batched/dense/impl/KokkosBatched_SetIdentity_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_SetTriangular_Internal.hpp b/batched/dense/impl/KokkosBatched_SetTriangular_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_SetTriangular_Internal.hpp rename to batched/dense/impl/KokkosBatched_SetTriangular_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_ShiftedTrsv_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_ShiftedTrsv_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_ShiftedTrsv_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_ShiftedTrsv_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Impl.hpp rename to batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Internal.hpp rename to batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trmm_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Trmm_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trmm_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_Trmm_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trmm_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Trmm_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trmm_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_Trmm_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trsm_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Trsm_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trsm_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_Trsm_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trsm_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Trsm_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trsm_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_Trsm_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Impl.hpp rename to batched/dense/impl/KokkosBatched_Trsm_TeamVector_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Internal.hpp rename to batched/dense/impl/KokkosBatched_Trsm_TeamVector_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trsm_Team_Impl.hpp b/batched/dense/impl/KokkosBatched_Trsm_Team_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trsm_Team_Impl.hpp rename to batched/dense/impl/KokkosBatched_Trsm_Team_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trsm_Team_Internal.hpp b/batched/dense/impl/KokkosBatched_Trsm_Team_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trsm_Team_Internal.hpp rename to batched/dense/impl/KokkosBatched_Trsm_Team_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trsv_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Trsv_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trsv_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_Trsv_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trsv_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Trsv_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trsv_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_Trsv_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Impl.hpp rename to batched/dense/impl/KokkosBatched_Trsv_TeamVector_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Internal.hpp rename to batched/dense/impl/KokkosBatched_Trsv_TeamVector_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trsv_Team_Impl.hpp b/batched/dense/impl/KokkosBatched_Trsv_Team_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trsv_Team_Impl.hpp rename to batched/dense/impl/KokkosBatched_Trsv_Team_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trsv_Team_Internal.hpp b/batched/dense/impl/KokkosBatched_Trsv_Team_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trsv_Team_Internal.hpp rename to batched/dense/impl/KokkosBatched_Trsv_Team_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trtri_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Trtri_Serial_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trtri_Serial_Impl.hpp rename to batched/dense/impl/KokkosBatched_Trtri_Serial_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Trtri_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Trtri_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Trtri_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_Trtri_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_UTV_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_UTV_TeamVector_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_UTV_TeamVector_Impl.hpp rename to batched/dense/impl/KokkosBatched_UTV_TeamVector_Impl.hpp diff --git a/src/batched/dense/impl/KokkosBatched_UTV_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_UTV_TeamVector_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_UTV_TeamVector_Internal.hpp rename to batched/dense/impl/KokkosBatched_UTV_TeamVector_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_UpdateGivens_Internal.hpp b/batched/dense/impl/KokkosBatched_UpdateGivens_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_UpdateGivens_Internal.hpp rename to batched/dense/impl/KokkosBatched_UpdateGivens_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Vector_SIMD_Arith.hpp b/batched/dense/impl/KokkosBatched_Vector_SIMD_Arith.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Vector_SIMD_Arith.hpp rename to batched/dense/impl/KokkosBatched_Vector_SIMD_Arith.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Vector_SIMD_Logical.hpp b/batched/dense/impl/KokkosBatched_Vector_SIMD_Logical.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Vector_SIMD_Logical.hpp rename to batched/dense/impl/KokkosBatched_Vector_SIMD_Logical.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Vector_SIMD_Math.hpp b/batched/dense/impl/KokkosBatched_Vector_SIMD_Math.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Vector_SIMD_Math.hpp rename to batched/dense/impl/KokkosBatched_Vector_SIMD_Math.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Vector_SIMD_Misc.hpp b/batched/dense/impl/KokkosBatched_Vector_SIMD_Misc.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Vector_SIMD_Misc.hpp rename to batched/dense/impl/KokkosBatched_Vector_SIMD_Misc.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Vector_SIMD_Relation.hpp b/batched/dense/impl/KokkosBatched_Vector_SIMD_Relation.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Vector_SIMD_Relation.hpp rename to batched/dense/impl/KokkosBatched_Vector_SIMD_Relation.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Vector_SIMD_View.hpp b/batched/dense/impl/KokkosBatched_Vector_SIMD_View.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Vector_SIMD_View.hpp rename to batched/dense/impl/KokkosBatched_Vector_SIMD_View.hpp diff --git a/src/batched/dense/impl/KokkosBatched_WilkinsonShift_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_WilkinsonShift_Serial_Internal.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_WilkinsonShift_Serial_Internal.hpp rename to batched/dense/impl/KokkosBatched_WilkinsonShift_Serial_Internal.hpp diff --git a/src/batched/dense/impl/KokkosBatched_Xpay_Impl.hpp b/batched/dense/impl/KokkosBatched_Xpay_Impl.hpp similarity index 100% rename from src/batched/dense/impl/KokkosBatched_Xpay_Impl.hpp rename to batched/dense/impl/KokkosBatched_Xpay_Impl.hpp diff --git a/src/batched/dense/KokkosBatched_AddRadial_Decl.hpp b/batched/dense/src/KokkosBatched_AddRadial_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_AddRadial_Decl.hpp rename to batched/dense/src/KokkosBatched_AddRadial_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_ApplyHouseholder_Decl.hpp b/batched/dense/src/KokkosBatched_ApplyHouseholder_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_ApplyHouseholder_Decl.hpp rename to batched/dense/src/KokkosBatched_ApplyHouseholder_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_ApplyPivot_Decl.hpp b/batched/dense/src/KokkosBatched_ApplyPivot_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_ApplyPivot_Decl.hpp rename to batched/dense/src/KokkosBatched_ApplyPivot_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_ApplyQ_Decl.hpp b/batched/dense/src/KokkosBatched_ApplyQ_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_ApplyQ_Decl.hpp rename to batched/dense/src/KokkosBatched_ApplyQ_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_Axpy.hpp b/batched/dense/src/KokkosBatched_Axpy.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Axpy.hpp rename to batched/dense/src/KokkosBatched_Axpy.hpp diff --git a/src/batched/dense/KokkosBatched_Copy_Decl.hpp b/batched/dense/src/KokkosBatched_Copy_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Copy_Decl.hpp rename to batched/dense/src/KokkosBatched_Copy_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_Dot.hpp b/batched/dense/src/KokkosBatched_Dot.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Dot.hpp rename to batched/dense/src/KokkosBatched_Dot.hpp diff --git a/src/batched/dense/KokkosBatched_Eigendecomposition_Decl.hpp b/batched/dense/src/KokkosBatched_Eigendecomposition_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Eigendecomposition_Decl.hpp rename to batched/dense/src/KokkosBatched_Eigendecomposition_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_Gemm_Decl.hpp b/batched/dense/src/KokkosBatched_Gemm_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Gemm_Decl.hpp rename to batched/dense/src/KokkosBatched_Gemm_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_Gemm_Handle.hpp b/batched/dense/src/KokkosBatched_Gemm_Handle.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Gemm_Handle.hpp rename to batched/dense/src/KokkosBatched_Gemm_Handle.hpp diff --git a/src/batched/dense/KokkosBatched_Gemv_Decl.hpp b/batched/dense/src/KokkosBatched_Gemv_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Gemv_Decl.hpp rename to batched/dense/src/KokkosBatched_Gemv_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_Gesv.hpp b/batched/dense/src/KokkosBatched_Gesv.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Gesv.hpp rename to batched/dense/src/KokkosBatched_Gesv.hpp diff --git a/src/batched/dense/KokkosBatched_HadamardProduct.hpp b/batched/dense/src/KokkosBatched_HadamardProduct.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_HadamardProduct.hpp rename to batched/dense/src/KokkosBatched_HadamardProduct.hpp diff --git a/src/batched/dense/KokkosBatched_Householder_Decl.hpp b/batched/dense/src/KokkosBatched_Householder_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Householder_Decl.hpp rename to batched/dense/src/KokkosBatched_Householder_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_InnerGemmFixA_Decl.hpp b/batched/dense/src/KokkosBatched_InnerGemmFixA_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_InnerGemmFixA_Decl.hpp rename to batched/dense/src/KokkosBatched_InnerGemmFixA_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_InnerGemmFixB_Decl.hpp b/batched/dense/src/KokkosBatched_InnerGemmFixB_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_InnerGemmFixB_Decl.hpp rename to batched/dense/src/KokkosBatched_InnerGemmFixB_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_InnerGemmFixC_Decl.hpp b/batched/dense/src/KokkosBatched_InnerGemmFixC_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_InnerGemmFixC_Decl.hpp rename to batched/dense/src/KokkosBatched_InnerGemmFixC_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_InnerLU_Decl.hpp b/batched/dense/src/KokkosBatched_InnerLU_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_InnerLU_Decl.hpp rename to batched/dense/src/KokkosBatched_InnerLU_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_InnerTrsm_Decl.hpp b/batched/dense/src/KokkosBatched_InnerTrsm_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_InnerTrsm_Decl.hpp rename to batched/dense/src/KokkosBatched_InnerTrsm_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_InverseLU_Decl.hpp b/batched/dense/src/KokkosBatched_InverseLU_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_InverseLU_Decl.hpp rename to batched/dense/src/KokkosBatched_InverseLU_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_Kernel_Handle.hpp b/batched/dense/src/KokkosBatched_Kernel_Handle.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Kernel_Handle.hpp rename to batched/dense/src/KokkosBatched_Kernel_Handle.hpp diff --git a/src/batched/dense/KokkosBatched_LU_Decl.hpp b/batched/dense/src/KokkosBatched_LU_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_LU_Decl.hpp rename to batched/dense/src/KokkosBatched_LU_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_QR_Decl.hpp b/batched/dense/src/KokkosBatched_QR_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_QR_Decl.hpp rename to batched/dense/src/KokkosBatched_QR_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_QR_WithColumnPivoting_Decl.hpp b/batched/dense/src/KokkosBatched_QR_WithColumnPivoting_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_QR_WithColumnPivoting_Decl.hpp rename to batched/dense/src/KokkosBatched_QR_WithColumnPivoting_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_SVD_Decl.hpp b/batched/dense/src/KokkosBatched_SVD_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_SVD_Decl.hpp rename to batched/dense/src/KokkosBatched_SVD_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_Scale_Decl.hpp b/batched/dense/src/KokkosBatched_Scale_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Scale_Decl.hpp rename to batched/dense/src/KokkosBatched_Scale_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_SetIdentity_Decl.hpp b/batched/dense/src/KokkosBatched_SetIdentity_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_SetIdentity_Decl.hpp rename to batched/dense/src/KokkosBatched_SetIdentity_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_Set_Decl.hpp b/batched/dense/src/KokkosBatched_Set_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Set_Decl.hpp rename to batched/dense/src/KokkosBatched_Set_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_SolveLU_Decl.hpp b/batched/dense/src/KokkosBatched_SolveLU_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_SolveLU_Decl.hpp rename to batched/dense/src/KokkosBatched_SolveLU_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_SolveUTV_Decl.hpp b/batched/dense/src/KokkosBatched_SolveUTV_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_SolveUTV_Decl.hpp rename to batched/dense/src/KokkosBatched_SolveUTV_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_Trmm_Decl.hpp b/batched/dense/src/KokkosBatched_Trmm_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Trmm_Decl.hpp rename to batched/dense/src/KokkosBatched_Trmm_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_Trsm_Decl.hpp b/batched/dense/src/KokkosBatched_Trsm_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Trsm_Decl.hpp rename to batched/dense/src/KokkosBatched_Trsm_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_Trsv_Decl.hpp b/batched/dense/src/KokkosBatched_Trsv_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Trsv_Decl.hpp rename to batched/dense/src/KokkosBatched_Trsv_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_Trtri_Decl.hpp b/batched/dense/src/KokkosBatched_Trtri_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Trtri_Decl.hpp rename to batched/dense/src/KokkosBatched_Trtri_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_UTV_Decl.hpp b/batched/dense/src/KokkosBatched_UTV_Decl.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_UTV_Decl.hpp rename to batched/dense/src/KokkosBatched_UTV_Decl.hpp diff --git a/src/batched/dense/KokkosBatched_Vector.hpp b/batched/dense/src/KokkosBatched_Vector.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Vector.hpp rename to batched/dense/src/KokkosBatched_Vector.hpp diff --git a/src/batched/dense/KokkosBatched_Vector_SIMD.hpp b/batched/dense/src/KokkosBatched_Vector_SIMD.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Vector_SIMD.hpp rename to batched/dense/src/KokkosBatched_Vector_SIMD.hpp diff --git a/src/batched/dense/KokkosBatched_Xpay.hpp b/batched/dense/src/KokkosBatched_Xpay.hpp similarity index 100% rename from src/batched/dense/KokkosBatched_Xpay.hpp rename to batched/dense/src/KokkosBatched_Xpay.hpp diff --git a/batched/dense/unit_test/CMakeLists.txt b/batched/dense/unit_test/CMakeLists.txt new file mode 100644 index 0000000000..fae0d2e33e --- /dev/null +++ b/batched/dense/unit_test/CMakeLists.txt @@ -0,0 +1,116 @@ +##################### +# # +# Add include files # +# # +##################### + +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/test_common) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/test_common) + +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/src) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/src) + +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched) + +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched/dense/src) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/src) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched/dense/impl) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/impl) + +IF (NOT KokkosKernels_ENABLE_BLAS) + MESSAGE("batched enabled and blas not enabled, we need to include some include directories manually!") + KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/src/blas) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/src/blas) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/src/blas/impl) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/src/blas/impl) +ENDIF() + +##################### +# # +# Define unit-tests # +# # +##################### + +##################### +# # +# Add GPU backends # +# # +##################### +IF (KOKKOS_ENABLE_CUDA) + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_dla_cuda + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_Cuda_Batched_Dense.cpp + COMPONENTS batched_dla + ) +ENDIF () + +IF (KOKKOS_ENABLE_HIP) + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_dla_hip + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_HIP_Batched_Dense.cpp + COMPONENTS batched_dla + ) +ENDIF () + +IF (KOKKOS_ENABLE_SYCL) + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_dla_sycl + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_SYCL_Batched_Dense.cpp + COMPONENTS batched_dla + ) +ENDIF () + +IF (KOKKOS_ENABLE_OPENMPTARGET) + # KOKKOSKERNELS_ADD_UNIT_TEST( + # batched_dla_openmptarget + # SOURCES + # ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + # backends/Test_OpenMPTarget_Batched_Dense.cpp + # COMPONENTS batched_dla + # ) +ENDIF () + + + +##################### +# # +# Add CPU backends # +# # +##################### +IF (KOKKOS_ENABLE_SERIAL) + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_dla_serial + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_Serial_Batched_Dense.cpp + COMPONENTS batched_dla + ) +ENDIF () + +IF (KOKKOS_ENABLE_OPENMP) + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_dla_openmp + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_OpenMP_Batched_Dense.cpp + COMPONENTS batched_dla + ) +ENDIF () + +IF (KOKKOS_ENABLE_THREADS) + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_dla_threads + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_Threads_Batched_Dense.cpp + COMPONENTS batched_dla + ) +ENDIF () + diff --git a/unit_test/batched/dense/Test_Batched_BatchedGemm.hpp b/batched/dense/unit_test/Test_Batched_BatchedGemm.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_BatchedGemm.hpp rename to batched/dense/unit_test/Test_Batched_BatchedGemm.hpp diff --git a/unit_test/batched/dense/Test_Batched_BatchedGemm_Complex.hpp b/batched/dense/unit_test/Test_Batched_BatchedGemm_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_BatchedGemm_Complex.hpp rename to batched/dense/unit_test/Test_Batched_BatchedGemm_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_BatchedGemm_Real.hpp b/batched/dense/unit_test/Test_Batched_BatchedGemm_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_BatchedGemm_Real.hpp rename to batched/dense/unit_test/Test_Batched_BatchedGemm_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_Dense.hpp b/batched/dense/unit_test/Test_Batched_Dense.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_Dense.hpp rename to batched/dense/unit_test/Test_Batched_Dense.hpp diff --git a/unit_test/batched/dense/Test_Batched_DenseUtils.hpp b/batched/dense/unit_test/Test_Batched_DenseUtils.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_DenseUtils.hpp rename to batched/dense/unit_test/Test_Batched_DenseUtils.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialAxpy.hpp b/batched/dense/unit_test/Test_Batched_SerialAxpy.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialAxpy.hpp rename to batched/dense/unit_test/Test_Batched_SerialAxpy.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialAxpy_Complex.hpp b/batched/dense/unit_test/Test_Batched_SerialAxpy_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialAxpy_Complex.hpp rename to batched/dense/unit_test/Test_Batched_SerialAxpy_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialAxpy_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialAxpy_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialAxpy_Real.hpp rename to batched/dense/unit_test/Test_Batched_SerialAxpy_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialEigendecomposition.hpp b/batched/dense/unit_test/Test_Batched_SerialEigendecomposition.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialEigendecomposition.hpp rename to batched/dense/unit_test/Test_Batched_SerialEigendecomposition.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialEigendecomposition_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialEigendecomposition_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialEigendecomposition_Real.hpp rename to batched/dense/unit_test/Test_Batched_SerialEigendecomposition_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialGemm.hpp b/batched/dense/unit_test/Test_Batched_SerialGemm.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialGemm.hpp rename to batched/dense/unit_test/Test_Batched_SerialGemm.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialGemm_Complex.hpp b/batched/dense/unit_test/Test_Batched_SerialGemm_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialGemm_Complex.hpp rename to batched/dense/unit_test/Test_Batched_SerialGemm_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialGemm_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialGemm_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialGemm_Real.hpp rename to batched/dense/unit_test/Test_Batched_SerialGemm_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialGesv.hpp b/batched/dense/unit_test/Test_Batched_SerialGesv.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialGesv.hpp rename to batched/dense/unit_test/Test_Batched_SerialGesv.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialGesv_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialGesv_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialGesv_Real.hpp rename to batched/dense/unit_test/Test_Batched_SerialGesv_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialInverseLU.hpp b/batched/dense/unit_test/Test_Batched_SerialInverseLU.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialInverseLU.hpp rename to batched/dense/unit_test/Test_Batched_SerialInverseLU.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialInverseLU_Complex.hpp b/batched/dense/unit_test/Test_Batched_SerialInverseLU_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialInverseLU_Complex.hpp rename to batched/dense/unit_test/Test_Batched_SerialInverseLU_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialInverseLU_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialInverseLU_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialInverseLU_Real.hpp rename to batched/dense/unit_test/Test_Batched_SerialInverseLU_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialLU.hpp b/batched/dense/unit_test/Test_Batched_SerialLU.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialLU.hpp rename to batched/dense/unit_test/Test_Batched_SerialLU.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialLU_Complex.hpp b/batched/dense/unit_test/Test_Batched_SerialLU_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialLU_Complex.hpp rename to batched/dense/unit_test/Test_Batched_SerialLU_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialLU_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialLU_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialLU_Real.hpp rename to batched/dense/unit_test/Test_Batched_SerialLU_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialSVD.hpp b/batched/dense/unit_test/Test_Batched_SerialSVD.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialSVD.hpp rename to batched/dense/unit_test/Test_Batched_SerialSVD.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialSolveLU.hpp b/batched/dense/unit_test/Test_Batched_SerialSolveLU.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialSolveLU.hpp rename to batched/dense/unit_test/Test_Batched_SerialSolveLU.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialSolveLU_Complex.hpp b/batched/dense/unit_test/Test_Batched_SerialSolveLU_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialSolveLU_Complex.hpp rename to batched/dense/unit_test/Test_Batched_SerialSolveLU_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialSolveLU_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialSolveLU_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialSolveLU_Real.hpp rename to batched/dense/unit_test/Test_Batched_SerialSolveLU_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialTrmm.hpp b/batched/dense/unit_test/Test_Batched_SerialTrmm.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialTrmm.hpp rename to batched/dense/unit_test/Test_Batched_SerialTrmm.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialTrmm_Complex.hpp b/batched/dense/unit_test/Test_Batched_SerialTrmm_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialTrmm_Complex.hpp rename to batched/dense/unit_test/Test_Batched_SerialTrmm_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialTrmm_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialTrmm_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialTrmm_Real.hpp rename to batched/dense/unit_test/Test_Batched_SerialTrmm_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialTrsm.hpp b/batched/dense/unit_test/Test_Batched_SerialTrsm.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialTrsm.hpp rename to batched/dense/unit_test/Test_Batched_SerialTrsm.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialTrsm_Complex.hpp b/batched/dense/unit_test/Test_Batched_SerialTrsm_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialTrsm_Complex.hpp rename to batched/dense/unit_test/Test_Batched_SerialTrsm_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialTrsm_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialTrsm_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialTrsm_Real.hpp rename to batched/dense/unit_test/Test_Batched_SerialTrsm_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialTrsv.hpp b/batched/dense/unit_test/Test_Batched_SerialTrsv.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialTrsv.hpp rename to batched/dense/unit_test/Test_Batched_SerialTrsv.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialTrsv_Complex.hpp b/batched/dense/unit_test/Test_Batched_SerialTrsv_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialTrsv_Complex.hpp rename to batched/dense/unit_test/Test_Batched_SerialTrsv_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialTrsv_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialTrsv_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialTrsv_Real.hpp rename to batched/dense/unit_test/Test_Batched_SerialTrsv_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialTrtri.hpp b/batched/dense/unit_test/Test_Batched_SerialTrtri.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialTrtri.hpp rename to batched/dense/unit_test/Test_Batched_SerialTrtri.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialTrtri_Complex.hpp b/batched/dense/unit_test/Test_Batched_SerialTrtri_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialTrtri_Complex.hpp rename to batched/dense/unit_test/Test_Batched_SerialTrtri_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_SerialTrtri_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialTrtri_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_SerialTrtri_Real.hpp rename to batched/dense/unit_test/Test_Batched_SerialTrtri_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamAxpy.hpp b/batched/dense/unit_test/Test_Batched_TeamAxpy.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamAxpy.hpp rename to batched/dense/unit_test/Test_Batched_TeamAxpy.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamAxpy_Complex.hpp b/batched/dense/unit_test/Test_Batched_TeamAxpy_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamAxpy_Complex.hpp rename to batched/dense/unit_test/Test_Batched_TeamAxpy_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamAxpy_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamAxpy_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamAxpy_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamAxpy_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamGemm.hpp b/batched/dense/unit_test/Test_Batched_TeamGemm.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamGemm.hpp rename to batched/dense/unit_test/Test_Batched_TeamGemm.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamGemm_Complex.hpp b/batched/dense/unit_test/Test_Batched_TeamGemm_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamGemm_Complex.hpp rename to batched/dense/unit_test/Test_Batched_TeamGemm_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamGemm_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamGemm_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamGemm_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamGemm_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamGesv.hpp b/batched/dense/unit_test/Test_Batched_TeamGesv.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamGesv.hpp rename to batched/dense/unit_test/Test_Batched_TeamGesv.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamGesv_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamGesv_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamGesv_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamGesv_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamInverseLU.hpp b/batched/dense/unit_test/Test_Batched_TeamInverseLU.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamInverseLU.hpp rename to batched/dense/unit_test/Test_Batched_TeamInverseLU.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamInverseLU_Complex.hpp b/batched/dense/unit_test/Test_Batched_TeamInverseLU_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamInverseLU_Complex.hpp rename to batched/dense/unit_test/Test_Batched_TeamInverseLU_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamInverseLU_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamInverseLU_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamInverseLU_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamInverseLU_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamLU.hpp b/batched/dense/unit_test/Test_Batched_TeamLU.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamLU.hpp rename to batched/dense/unit_test/Test_Batched_TeamLU.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamLU_Complex.hpp b/batched/dense/unit_test/Test_Batched_TeamLU_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamLU_Complex.hpp rename to batched/dense/unit_test/Test_Batched_TeamLU_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamLU_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamLU_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamLU_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamLU_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamSolveLU.hpp b/batched/dense/unit_test/Test_Batched_TeamSolveLU.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamSolveLU.hpp rename to batched/dense/unit_test/Test_Batched_TeamSolveLU.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamSolveLU_Complex.hpp b/batched/dense/unit_test/Test_Batched_TeamSolveLU_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamSolveLU_Complex.hpp rename to batched/dense/unit_test/Test_Batched_TeamSolveLU_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamSolveLU_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamSolveLU_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamSolveLU_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamSolveLU_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamTrsm.hpp b/batched/dense/unit_test/Test_Batched_TeamTrsm.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamTrsm.hpp rename to batched/dense/unit_test/Test_Batched_TeamTrsm.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamTrsm_Complex.hpp b/batched/dense/unit_test/Test_Batched_TeamTrsm_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamTrsm_Complex.hpp rename to batched/dense/unit_test/Test_Batched_TeamTrsm_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamTrsm_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamTrsm_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamTrsm_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamTrsm_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamTrsv.hpp b/batched/dense/unit_test/Test_Batched_TeamTrsv.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamTrsv.hpp rename to batched/dense/unit_test/Test_Batched_TeamTrsv.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamTrsv_Complex.hpp b/batched/dense/unit_test/Test_Batched_TeamTrsv_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamTrsv_Complex.hpp rename to batched/dense/unit_test/Test_Batched_TeamTrsv_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamTrsv_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamTrsv_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamTrsv_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamTrsv_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorAxpy.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorAxpy.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorAxpy.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorAxpy.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorAxpy_Complex.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorAxpy_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorAxpy_Complex.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorAxpy_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorAxpy_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorAxpy_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorAxpy_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorAxpy_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorEigendecomposition.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorEigendecomposition.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorEigendecomposition.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorEigendecomposition.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorEigendecomposition_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorEigendecomposition_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorEigendecomposition_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorEigendecomposition_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorGemm.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorGemm.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorGemm.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorGemm.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorGemm_Complex.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorGemm_Complex.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorGemm_Complex.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorGemm_Complex.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorGemm_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorGemm_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorGemm_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorGemm_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorGesv.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorGesv.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorGesv.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorGesv.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorGesv_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorGesv_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorGesv_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorGesv_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorQR.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorQR.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorQR.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorQR.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorQR_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorQR_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorQR_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorQR_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorQR_WithColumnPivoting.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorQR_WithColumnPivoting.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorQR_WithColumnPivoting.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorQR_WithColumnPivoting.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorQR_WithColumnPivoting_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorQR_WithColumnPivoting_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorQR_WithColumnPivoting_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorQR_WithColumnPivoting_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorSolveUTV.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorSolveUTV.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorSolveUTV.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorSolveUTV.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorSolveUTV2.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorSolveUTV2.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorSolveUTV2.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorSolveUTV2.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorSolveUTV2_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorSolveUTV2_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorSolveUTV2_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorSolveUTV2_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorSolveUTV_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorSolveUTV_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorSolveUTV_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorSolveUTV_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorUTV.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorUTV.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorUTV.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorUTV.hpp diff --git a/unit_test/batched/dense/Test_Batched_TeamVectorUTV_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamVectorUTV_Real.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_TeamVectorUTV_Real.hpp rename to batched/dense/unit_test/Test_Batched_TeamVectorUTV_Real.hpp diff --git a/unit_test/batched/dense/Test_Batched_VectorArithmatic.hpp b/batched/dense/unit_test/Test_Batched_VectorArithmatic.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_VectorArithmatic.hpp rename to batched/dense/unit_test/Test_Batched_VectorArithmatic.hpp diff --git a/unit_test/batched/dense/Test_Batched_VectorLogical.hpp b/batched/dense/unit_test/Test_Batched_VectorLogical.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_VectorLogical.hpp rename to batched/dense/unit_test/Test_Batched_VectorLogical.hpp diff --git a/unit_test/batched/dense/Test_Batched_VectorMath.hpp b/batched/dense/unit_test/Test_Batched_VectorMath.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_VectorMath.hpp rename to batched/dense/unit_test/Test_Batched_VectorMath.hpp diff --git a/unit_test/batched/dense/Test_Batched_VectorMisc.hpp b/batched/dense/unit_test/Test_Batched_VectorMisc.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_VectorMisc.hpp rename to batched/dense/unit_test/Test_Batched_VectorMisc.hpp diff --git a/unit_test/batched/dense/Test_Batched_VectorRelation.hpp b/batched/dense/unit_test/Test_Batched_VectorRelation.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_VectorRelation.hpp rename to batched/dense/unit_test/Test_Batched_VectorRelation.hpp diff --git a/unit_test/batched/dense/Test_Batched_VectorView.hpp b/batched/dense/unit_test/Test_Batched_VectorView.hpp similarity index 100% rename from unit_test/batched/dense/Test_Batched_VectorView.hpp rename to batched/dense/unit_test/Test_Batched_VectorView.hpp diff --git a/unit_test/cuda/Test_Cuda_Batched_Dense.cpp b/batched/dense/unit_test/backends/Test_Cuda_Batched_Dense.cpp similarity index 100% rename from unit_test/cuda/Test_Cuda_Batched_Dense.cpp rename to batched/dense/unit_test/backends/Test_Cuda_Batched_Dense.cpp diff --git a/unit_test/hip/Test_HIP_Batched_Dense.cpp b/batched/dense/unit_test/backends/Test_HIP_Batched_Dense.cpp similarity index 100% rename from unit_test/hip/Test_HIP_Batched_Dense.cpp rename to batched/dense/unit_test/backends/Test_HIP_Batched_Dense.cpp diff --git a/unit_test/openmptarget/Test_OpenMPTarget_Batched_Dense.cpp b/batched/dense/unit_test/backends/Test_OpenMPTarget_Batched_Dense.cpp similarity index 100% rename from unit_test/openmptarget/Test_OpenMPTarget_Batched_Dense.cpp rename to batched/dense/unit_test/backends/Test_OpenMPTarget_Batched_Dense.cpp diff --git a/unit_test/openmp/Test_OpenMP_Batched_Dense.cpp b/batched/dense/unit_test/backends/Test_OpenMP_Batched_Dense.cpp similarity index 100% rename from unit_test/openmp/Test_OpenMP_Batched_Dense.cpp rename to batched/dense/unit_test/backends/Test_OpenMP_Batched_Dense.cpp diff --git a/unit_test/sycl/Test_SYCL_Batched_Dense.cpp b/batched/dense/unit_test/backends/Test_SYCL_Batched_Dense.cpp similarity index 100% rename from unit_test/sycl/Test_SYCL_Batched_Dense.cpp rename to batched/dense/unit_test/backends/Test_SYCL_Batched_Dense.cpp diff --git a/unit_test/serial/Test_Serial_Batched_Dense.cpp b/batched/dense/unit_test/backends/Test_Serial_Batched_Dense.cpp similarity index 100% rename from unit_test/serial/Test_Serial_Batched_Dense.cpp rename to batched/dense/unit_test/backends/Test_Serial_Batched_Dense.cpp diff --git a/unit_test/threads/Test_Threads_Batched_Dense.cpp b/batched/dense/unit_test/backends/Test_Threads_Batched_Dense.cpp similarity index 100% rename from unit_test/threads/Test_Threads_Batched_Dense.cpp rename to batched/dense/unit_test/backends/Test_Threads_Batched_Dense.cpp diff --git a/src/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp similarity index 100% rename from src/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp rename to batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp diff --git a/src/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp b/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp similarity index 100% rename from src/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp rename to batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp diff --git a/src/batched/sparse/impl/KokkosBatched_GMRES_Serial_Impl.hpp b/batched/sparse/impl/KokkosBatched_GMRES_Serial_Impl.hpp similarity index 100% rename from src/batched/sparse/impl/KokkosBatched_GMRES_Serial_Impl.hpp rename to batched/sparse/impl/KokkosBatched_GMRES_Serial_Impl.hpp diff --git a/src/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp similarity index 100% rename from src/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp rename to batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp diff --git a/src/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp b/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp similarity index 100% rename from src/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp rename to batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp diff --git a/src/batched/sparse/impl/KokkosBatched_Spmv_Serial_Impl.hpp b/batched/sparse/impl/KokkosBatched_Spmv_Serial_Impl.hpp similarity index 100% rename from src/batched/sparse/impl/KokkosBatched_Spmv_Serial_Impl.hpp rename to batched/sparse/impl/KokkosBatched_Spmv_Serial_Impl.hpp diff --git a/src/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp similarity index 100% rename from src/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp rename to batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp diff --git a/src/batched/sparse/impl/KokkosBatched_Spmv_Team_Impl.hpp b/batched/sparse/impl/KokkosBatched_Spmv_Team_Impl.hpp similarity index 100% rename from src/batched/sparse/impl/KokkosBatched_Spmv_Team_Impl.hpp rename to batched/sparse/impl/KokkosBatched_Spmv_Team_Impl.hpp diff --git a/src/batched/sparse/KokkosBatched_CG.hpp b/batched/sparse/src/KokkosBatched_CG.hpp similarity index 100% rename from src/batched/sparse/KokkosBatched_CG.hpp rename to batched/sparse/src/KokkosBatched_CG.hpp diff --git a/src/batched/sparse/KokkosBatched_CrsMatrix.hpp b/batched/sparse/src/KokkosBatched_CrsMatrix.hpp similarity index 100% rename from src/batched/sparse/KokkosBatched_CrsMatrix.hpp rename to batched/sparse/src/KokkosBatched_CrsMatrix.hpp diff --git a/src/batched/sparse/KokkosBatched_GMRES.hpp b/batched/sparse/src/KokkosBatched_GMRES.hpp similarity index 100% rename from src/batched/sparse/KokkosBatched_GMRES.hpp rename to batched/sparse/src/KokkosBatched_GMRES.hpp diff --git a/src/batched/sparse/KokkosBatched_Identity.hpp b/batched/sparse/src/KokkosBatched_Identity.hpp similarity index 100% rename from src/batched/sparse/KokkosBatched_Identity.hpp rename to batched/sparse/src/KokkosBatched_Identity.hpp diff --git a/src/batched/sparse/KokkosBatched_JacobiPrec.hpp b/batched/sparse/src/KokkosBatched_JacobiPrec.hpp similarity index 100% rename from src/batched/sparse/KokkosBatched_JacobiPrec.hpp rename to batched/sparse/src/KokkosBatched_JacobiPrec.hpp diff --git a/src/batched/sparse/KokkosBatched_Krylov_Handle.hpp b/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp similarity index 100% rename from src/batched/sparse/KokkosBatched_Krylov_Handle.hpp rename to batched/sparse/src/KokkosBatched_Krylov_Handle.hpp diff --git a/src/batched/sparse/KokkosBatched_Krylov_Solvers.hpp b/batched/sparse/src/KokkosBatched_Krylov_Solvers.hpp similarity index 100% rename from src/batched/sparse/KokkosBatched_Krylov_Solvers.hpp rename to batched/sparse/src/KokkosBatched_Krylov_Solvers.hpp diff --git a/src/batched/sparse/KokkosBatched_Spmv.hpp b/batched/sparse/src/KokkosBatched_Spmv.hpp similarity index 100% rename from src/batched/sparse/KokkosBatched_Spmv.hpp rename to batched/sparse/src/KokkosBatched_Spmv.hpp diff --git a/batched/sparse/unit_test/CMakeLists.txt b/batched/sparse/unit_test/CMakeLists.txt new file mode 100644 index 0000000000..91c3a39741 --- /dev/null +++ b/batched/sparse/unit_test/CMakeLists.txt @@ -0,0 +1,117 @@ +##################### +# # +# Add include files # +# # +##################### + +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/test_common) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/test_common) + +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/src) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/src) + +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched) + +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched/dense/src) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/src) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched/dense/impl) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/impl) + +IF (NOT KokkosKernels_ENABLE_BLAS) + MESSAGE("batched enabled and blas not enabled, we need to include some include directories manually!") + KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/src/blas) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/src/blas) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/src/blas/impl) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/src/blas/impl) +ENDIF() + + +##################### +# # +# Define unit-tests # +# # +##################### + +##################### +# # +# Add GPU backends # +# # +##################### +IF (KOKKOS_ENABLE_CUDA) + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_sla_cuda + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_Cuda_Batched_Sparse.cpp + COMPONENTS batched_sla + ) +ENDIF () + +IF (KOKKOS_ENABLE_HIP) + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_sla_hip + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_HIP_Batched_Sparse.cpp + COMPONENTS batched_sla + ) +ENDIF () + +IF (KOKKOS_ENABLE_SYCL) + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_sla_sycl + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_SYCL_Batched_Sparse.cpp + COMPONENTS batched_sla + ) +ENDIF () + +IF (KOKKOS_ENABLE_OPENMPTARGET) + # KOKKOSKERNELS_ADD_UNIT_TEST( + # batched_sla_openmptarget + # SOURCES + # ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + # backends/Test_OpenMPTarget_Batched_Sparse.cpp + # COMPONENTS batched_sla + # ) +ENDIF () + + + +##################### +# # +# Add CPU backends # +# # +##################### +IF (KOKKOS_ENABLE_SERIAL) + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_sla_serial + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_Serial_Batched_Sparse.cpp + COMPONENTS batched_sla + ) +ENDIF () + +IF (KOKKOS_ENABLE_OPENMP) + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_sla_openmp + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_OpenMP_Batched_Sparse.cpp + COMPONENTS batched_sla + ) +ENDIF () + +IF (KOKKOS_ENABLE_THREADS) + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_sla_threads + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_Threads_Batched_Sparse.cpp + COMPONENTS batched_sla + ) +ENDIF () + diff --git a/unit_test/batched/sparse/Test_Batched_SerialGMRES.hpp b/batched/sparse/unit_test/Test_Batched_SerialGMRES.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_SerialGMRES.hpp rename to batched/sparse/unit_test/Test_Batched_SerialGMRES.hpp diff --git a/unit_test/batched/sparse/Test_Batched_SerialGMRES_Real.hpp b/batched/sparse/unit_test/Test_Batched_SerialGMRES_Real.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_SerialGMRES_Real.hpp rename to batched/sparse/unit_test/Test_Batched_SerialGMRES_Real.hpp diff --git a/unit_test/batched/sparse/Test_Batched_SerialSpmv.hpp b/batched/sparse/unit_test/Test_Batched_SerialSpmv.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_SerialSpmv.hpp rename to batched/sparse/unit_test/Test_Batched_SerialSpmv.hpp diff --git a/unit_test/batched/sparse/Test_Batched_SerialSpmv_Real.hpp b/batched/sparse/unit_test/Test_Batched_SerialSpmv_Real.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_SerialSpmv_Real.hpp rename to batched/sparse/unit_test/Test_Batched_SerialSpmv_Real.hpp diff --git a/unit_test/batched/sparse/Test_Batched_Sparse.hpp b/batched/sparse/unit_test/Test_Batched_Sparse.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_Sparse.hpp rename to batched/sparse/unit_test/Test_Batched_Sparse.hpp diff --git a/unit_test/batched/sparse/Test_Batched_SparseUtils.hpp b/batched/sparse/unit_test/Test_Batched_SparseUtils.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_SparseUtils.hpp rename to batched/sparse/unit_test/Test_Batched_SparseUtils.hpp diff --git a/unit_test/batched/sparse/Test_Batched_TeamCG.hpp b/batched/sparse/unit_test/Test_Batched_TeamCG.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_TeamCG.hpp rename to batched/sparse/unit_test/Test_Batched_TeamCG.hpp diff --git a/unit_test/batched/sparse/Test_Batched_TeamCG_Real.hpp b/batched/sparse/unit_test/Test_Batched_TeamCG_Real.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_TeamCG_Real.hpp rename to batched/sparse/unit_test/Test_Batched_TeamCG_Real.hpp diff --git a/unit_test/batched/sparse/Test_Batched_TeamGMRES.hpp b/batched/sparse/unit_test/Test_Batched_TeamGMRES.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_TeamGMRES.hpp rename to batched/sparse/unit_test/Test_Batched_TeamGMRES.hpp diff --git a/unit_test/batched/sparse/Test_Batched_TeamGMRES_Real.hpp b/batched/sparse/unit_test/Test_Batched_TeamGMRES_Real.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_TeamGMRES_Real.hpp rename to batched/sparse/unit_test/Test_Batched_TeamGMRES_Real.hpp diff --git a/unit_test/batched/sparse/Test_Batched_TeamSpmv.hpp b/batched/sparse/unit_test/Test_Batched_TeamSpmv.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_TeamSpmv.hpp rename to batched/sparse/unit_test/Test_Batched_TeamSpmv.hpp diff --git a/unit_test/batched/sparse/Test_Batched_TeamSpmv_Real.hpp b/batched/sparse/unit_test/Test_Batched_TeamSpmv_Real.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_TeamSpmv_Real.hpp rename to batched/sparse/unit_test/Test_Batched_TeamSpmv_Real.hpp diff --git a/unit_test/batched/sparse/Test_Batched_TeamVectorCG.hpp b/batched/sparse/unit_test/Test_Batched_TeamVectorCG.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_TeamVectorCG.hpp rename to batched/sparse/unit_test/Test_Batched_TeamVectorCG.hpp diff --git a/unit_test/batched/sparse/Test_Batched_TeamVectorCG_Real.hpp b/batched/sparse/unit_test/Test_Batched_TeamVectorCG_Real.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_TeamVectorCG_Real.hpp rename to batched/sparse/unit_test/Test_Batched_TeamVectorCG_Real.hpp diff --git a/unit_test/batched/sparse/Test_Batched_TeamVectorGMRES.hpp b/batched/sparse/unit_test/Test_Batched_TeamVectorGMRES.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_TeamVectorGMRES.hpp rename to batched/sparse/unit_test/Test_Batched_TeamVectorGMRES.hpp diff --git a/unit_test/batched/sparse/Test_Batched_TeamVectorGMRES_Real.hpp b/batched/sparse/unit_test/Test_Batched_TeamVectorGMRES_Real.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_TeamVectorGMRES_Real.hpp rename to batched/sparse/unit_test/Test_Batched_TeamVectorGMRES_Real.hpp diff --git a/unit_test/batched/sparse/Test_Batched_TeamVectorSpmv.hpp b/batched/sparse/unit_test/Test_Batched_TeamVectorSpmv.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_TeamVectorSpmv.hpp rename to batched/sparse/unit_test/Test_Batched_TeamVectorSpmv.hpp diff --git a/unit_test/batched/sparse/Test_Batched_TeamVectorSpmv_Real.hpp b/batched/sparse/unit_test/Test_Batched_TeamVectorSpmv_Real.hpp similarity index 100% rename from unit_test/batched/sparse/Test_Batched_TeamVectorSpmv_Real.hpp rename to batched/sparse/unit_test/Test_Batched_TeamVectorSpmv_Real.hpp diff --git a/unit_test/cuda/Test_Cuda_Batched_Sparse.cpp b/batched/sparse/unit_test/backends/Test_Cuda_Batched_Sparse.cpp similarity index 100% rename from unit_test/cuda/Test_Cuda_Batched_Sparse.cpp rename to batched/sparse/unit_test/backends/Test_Cuda_Batched_Sparse.cpp diff --git a/unit_test/hip/Test_HIP_Batched_Sparse.cpp b/batched/sparse/unit_test/backends/Test_HIP_Batched_Sparse.cpp similarity index 100% rename from unit_test/hip/Test_HIP_Batched_Sparse.cpp rename to batched/sparse/unit_test/backends/Test_HIP_Batched_Sparse.cpp diff --git a/unit_test/openmptarget/Test_OpenMPTarget_Batched_Sparse.cpp b/batched/sparse/unit_test/backends/Test_OpenMPTarget_Batched_Sparse.cpp similarity index 100% rename from unit_test/openmptarget/Test_OpenMPTarget_Batched_Sparse.cpp rename to batched/sparse/unit_test/backends/Test_OpenMPTarget_Batched_Sparse.cpp diff --git a/unit_test/openmp/Test_OpenMP_Batched_Sparse.cpp b/batched/sparse/unit_test/backends/Test_OpenMP_Batched_Sparse.cpp similarity index 100% rename from unit_test/openmp/Test_OpenMP_Batched_Sparse.cpp rename to batched/sparse/unit_test/backends/Test_OpenMP_Batched_Sparse.cpp diff --git a/unit_test/sycl/Test_SYCL_Batched_Sparse.cpp b/batched/sparse/unit_test/backends/Test_SYCL_Batched_Sparse.cpp similarity index 100% rename from unit_test/sycl/Test_SYCL_Batched_Sparse.cpp rename to batched/sparse/unit_test/backends/Test_SYCL_Batched_Sparse.cpp diff --git a/unit_test/serial/Test_Serial_Batched_Sparse.cpp b/batched/sparse/unit_test/backends/Test_Serial_Batched_Sparse.cpp similarity index 100% rename from unit_test/serial/Test_Serial_Batched_Sparse.cpp rename to batched/sparse/unit_test/backends/Test_Serial_Batched_Sparse.cpp diff --git a/unit_test/threads/Test_Threads_Batched_Sparse.cpp b/batched/sparse/unit_test/backends/Test_Threads_Batched_Sparse.cpp similarity index 100% rename from unit_test/threads/Test_Threads_Batched_Sparse.cpp rename to batched/sparse/unit_test/backends/Test_Threads_Batched_Sparse.cpp diff --git a/cmake/kokkoskernels_components.cmake b/cmake/kokkoskernels_components.cmake new file mode 100644 index 0000000000..deb968761d --- /dev/null +++ b/cmake/kokkoskernels_components.cmake @@ -0,0 +1,44 @@ +# Define component dependencies and enable +# them selectively based on what the user +# requests. + +KOKKOSKERNELS_ADD_OPTION( + "ENABLE_ALL_COMPONENTS" + ON + BOOL + "Whether to build all the library's components. Default: ON" +) + +# BATCHED only depends on COMMON which +# is always enabled so nothing more needs +# to be enabled for this component. +KOKKOSKERNELS_ADD_OPTION( + "ENABLE_BATCHED" + OFF + BOOL + "Whether to build the batched component. Default: OFF" +) + +# The user requested individual components, +# the assumption is that a full build is not +# desired and ENABLE_ALL_COMPONENETS is turned +# off. +IF (KokkosKernels_ENABLE_BATCHED) + SET(KokkosKernels_ENABLE_ALL_COMPONENTS OFF) +ENDIF() + + + +# At this point, if ENABLE_ALL_COMPONENTS is +# still ON we need to enable all individual +# components as they are required for this +# build. +IF (KokkosKernels_ENABLE_ALL_COMPONENTS) + SET(KokkosKernels_ENABLE_BATCHED ON) + SET(KokkosKernels_ENABLE_REMAINDER ON) +ENDIF() + +MESSAGE("Kokkos Kernels components") +MESSAGE(" COMMON: ON") +MESSAGE(" BATCHED: ${KokkosKernels_ENABLE_BATCHED}") +MESSAGE(" REMAINDER: ${KokkosKernels_ENABLE_REMAINDER}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 45c389195f..7b8553cfa6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,7 +9,6 @@ LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/impl) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/src/impl) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/impl/tpls) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/blas) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/blas/impl) @@ -22,9 +21,9 @@ LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/graph) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/graph/impl) #Include batched -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/dense) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/dense/impl) +# LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched) +# LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/dense) +# LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/dense/impl) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/sparse) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/sparse/impl) @@ -33,12 +32,6 @@ LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/sparse/impl) # LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/impl) -FOREACH(DIR ${KK_INCLUDE_DIRS}) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(${DIR}) - APPEND_GLOB(HEADERS ${DIR}/*.hpp) -ENDFOREACH() - - #Include BLAS, Blas host wrapper IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL) #Do NOT add this to include path @@ -429,7 +422,6 @@ LIST(APPEND HEADERS ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}_config.h) #Add a few other utility files LIST(APPEND SOURCES - src/batched/KokkosBatched_Util.cpp src/impl/tpls/KokkosBlas_Host_tpl.cpp src/impl/tpls/KokkosBlas_Cuda_tpl.cpp src/impl/tpls/KokkosBlas_Rocm_tpl.cpp diff --git a/test_common/KokkosKernels_TestUtils.hpp b/test_common/KokkosKernels_TestUtils.hpp index b8ce0eb595..d534695afd 100644 --- a/test_common/KokkosKernels_TestUtils.hpp +++ b/test_common/KokkosKernels_TestUtils.hpp @@ -51,7 +51,6 @@ #include "KokkosKernels_IOUtils.hpp" #include "Kokkos_ArithTraits.hpp" #include "KokkosBatched_Vector.hpp" -#include "KokkosSparse_spmv.hpp" // Make this include-able from all subdirectories #include "../tpls/gtest/gtest/gtest.h" //for EXPECT_** @@ -495,22 +494,6 @@ vec_t create_random_x_vector(vec_t& kok_x, double max_value = 10.0) { return kok_x; } -template -vector_t create_random_y_vector(crsMat_t crsMat, vector_t x_vector) { - vector_t y_vector(Kokkos::view_alloc(Kokkos::WithoutInitializing, "Y VECTOR"), - crsMat.numRows()); - KokkosSparse::spmv("N", 1, crsMat, x_vector, 0, y_vector); - return y_vector; -} - -template -vector_t create_random_y_vector_mv(crsMat_t crsMat, vector_t x_vector) { - vector_t y_vector(Kokkos::view_alloc(Kokkos::WithoutInitializing, "Y VECTOR"), - crsMat.numRows(), x_vector.extent(1)); - KokkosSparse::spmv("N", 1, crsMat, x_vector, 0, y_vector); - return y_vector; -} - /// \brief SharedParamTag class used to specify how to invoke templates within /// batched unit tests /// \var TA Indicates which transpose operation to apply to the A matrix diff --git a/unit_test/CMakeLists.txt b/unit_test/CMakeLists.txt index 7eaddf7cfe..9bf1eabcc0 100644 --- a/unit_test/CMakeLists.txt +++ b/unit_test/CMakeLists.txt @@ -14,20 +14,6 @@ KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_C KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/graph) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/graph) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched) - -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched/dense) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched/dense/impl) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/impl) - -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched/sparse) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched/sparse/impl) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/impl) - - IF (KOKKOS_ENABLE_CUDA) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/cuda) @@ -41,22 +27,6 @@ IF (KOKKOS_ENABLE_CUDA) COMPONENTS blas ) - KOKKOSKERNELS_ADD_UNIT_TEST( - batched_dla_cuda - SOURCES - Test_Main.cpp - cuda/Test_Cuda_Batched_Dense.cpp - COMPONENTS batched - ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - batched_sla_cuda - SOURCES - Test_Main.cpp - cuda/Test_Cuda_Batched_Sparse.cpp - COMPONENTS batched - ) - KOKKOSKERNELS_ADD_UNIT_TEST( sparse_cuda SOURCES @@ -86,22 +56,6 @@ IF (KOKKOS_ENABLE_SYCL) COMPONENTS blas ) - KOKKOSKERNELS_ADD_UNIT_TEST( - batched_dla_sycl - SOURCES - Test_Main.cpp - sycl/Test_SYCL_Batched_Dense.cpp - COMPONENTS batched - ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - batched_sla_sycl - SOURCES - Test_Main.cpp - sycl/Test_SYCL_Batched_Sparse.cpp - COMPONENTS batched - ) - KOKKOSKERNELS_ADD_UNIT_TEST( sparse_sycl SOURCES @@ -131,22 +85,6 @@ IF (KOKKOS_ENABLE_HIP) COMPONENTS blas ) - KOKKOSKERNELS_ADD_UNIT_TEST( - batched_dla_hip - SOURCES - Test_Main.cpp - hip/Test_HIP_Batched_Dense.cpp - COMPONENTS batched - ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - batched_sla_hip - SOURCES - Test_Main.cpp - hip/Test_HIP_Batched_Sparse.cpp - COMPONENTS batched - ) - KOKKOSKERNELS_ADD_UNIT_TEST( sparse_hip SOURCES @@ -176,22 +114,6 @@ IF (KOKKOS_ENABLE_OPENMPTARGET) COMPONENTS blas ) - # KOKKOSKERNELS_ADD_UNIT_TEST( - # batched_dla_openmptarget - # SOURCES - # Test_Main.cpp - # openmptarget/Test_OpenMPTarget_Batched_Dense.cpp - # COMPONENTS batched - # ) - - # KOKKOSKERNELS_ADD_UNIT_TEST( - # sparse_openmptarget - # SOURCES - # Test_Main.cpp - # openmptarget/Test_OpenMPTarget_Sparse.cpp - # COMPONENTS sparse - # ) - KOKKOSKERNELS_ADD_UNIT_TEST( graph_openmptarget SOURCES @@ -213,22 +135,6 @@ IF (KOKKOS_ENABLE_OPENMP) COMPONENTS blas ) - KOKKOSKERNELS_ADD_UNIT_TEST( - batched_dla_openmp - SOURCES - Test_Main.cpp - openmp/Test_OpenMP_Batched_Dense.cpp - COMPONENTS batched - ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - batched_sla_openmp - SOURCES - Test_Main.cpp - openmp/Test_OpenMP_Batched_Sparse.cpp - COMPONENTS batched - ) - KOKKOSKERNELS_ADD_UNIT_TEST( sparse_openmp SOURCES @@ -262,22 +168,6 @@ IF (KOKKOS_ENABLE_SERIAL) COMPONENTS blas ) - KOKKOSKERNELS_ADD_UNIT_TEST( - batched_dla_serial - SOURCES - Test_Main.cpp - serial/Test_Serial_Batched_Dense.cpp - COMPONENTS batched - ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - batched_sla_serial - SOURCES - Test_Main.cpp - serial/Test_Serial_Batched_Sparse.cpp - COMPONENTS batched - ) - KOKKOSKERNELS_ADD_UNIT_TEST( sparse_serial SOURCES @@ -307,22 +197,6 @@ IF (KOKKOS_ENABLE_THREADS) COMPONENTS blas ) - KOKKOSKERNELS_ADD_UNIT_TEST( - batched_dla_threads - SOURCES - Test_Main.cpp - threads/Test_Threads_Batched_Dense.cpp - COMPONENTS batched - ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - batched_sla_threads - SOURCES - Test_Main.cpp - threads/Test_Threads_Batched_Sparse.cpp - COMPONENTS batched - ) - KOKKOSKERNELS_ADD_UNIT_TEST( sparse_threads SOURCES diff --git a/unit_test/sparse/Test_Sparse_Utils.hpp b/unit_test/sparse/Test_Sparse_Utils.hpp new file mode 100644 index 0000000000..7b1c605b71 --- /dev/null +++ b/unit_test/sparse/Test_Sparse_Utils.hpp @@ -0,0 +1,70 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef TEST_SPARSE_UTILS_HPP +#define TEST_SPARSE_UTILS_HPP + +#include "KokkosSparse_spmv.hpp" + +namespace Test { + +template +vector_t create_random_y_vector(crsMat_t crsMat, vector_t x_vector) { + vector_t y_vector(Kokkos::view_alloc(Kokkos::WithoutInitializing, "Y VECTOR"), + crsMat.numRows()); + KokkosSparse::spmv("N", 1, crsMat, x_vector, 0, y_vector); + return y_vector; +} + +template +vector_t create_random_y_vector_mv(crsMat_t crsMat, vector_t x_vector) { + vector_t y_vector(Kokkos::view_alloc(Kokkos::WithoutInitializing, "Y VECTOR"), + crsMat.numRows(), x_vector.extent(1)); + KokkosSparse::spmv("N", 1, crsMat, x_vector, 0, y_vector); + return y_vector; +} + +} + +#endif // TEST_SPARSE_UTILS_HPP diff --git a/unit_test/sparse/Test_Sparse_block_gauss_seidel.hpp b/unit_test/sparse/Test_Sparse_block_gauss_seidel.hpp index e22a1fdacb..c250af361f 100644 --- a/unit_test/sparse/Test_Sparse_block_gauss_seidel.hpp +++ b/unit_test/sparse/Test_Sparse_block_gauss_seidel.hpp @@ -46,6 +46,7 @@ #include #include "KokkosKernels_TestUtils.hpp" +#include "Test_Sparse_Utils.hpp" #include "KokkosKernels_Handle.hpp" #include "KokkosKernels_IOUtils.hpp" #include "KokkosSparse_IOUtils.hpp" diff --git a/unit_test/sparse/Test_Sparse_gauss_seidel.hpp b/unit_test/sparse/Test_Sparse_gauss_seidel.hpp index 627a9fc99e..323598b606 100644 --- a/unit_test/sparse/Test_Sparse_gauss_seidel.hpp +++ b/unit_test/sparse/Test_Sparse_gauss_seidel.hpp @@ -64,6 +64,7 @@ #include "KokkosSparse_sor_sequential_impl.hpp" #include "KokkosSparse_SortCrs.hpp" #include "KokkosKernels_TestUtils.hpp" +#include "Test_Sparse_Utils.hpp" // #ifndef kokkos_complex_double // #define kokkos_complex_double Kokkos::complex From ce51f31e0ca0b2c53b7d70a02c6c3e0035b0c417 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 29 Aug 2022 17:33:29 -0600 Subject: [PATCH 076/226] Modular build: reorganize the library to build BLAS only Now BLAS can be built independently of the rest of the library, the ETI is still performed but only on BLAS algorithms. Since some BLAS functions require batched implementation the batched headers are included in the BLAS build. --- CMakeLists.txt | 16 +- batched/CMakeLists.txt | 5 +- batched/dense/unit_test/CMakeLists.txt | 8 +- blas/CMakeLists.txt | 281 ++++++++++++++++++ .../impl/KokkosBlas1_abs_impl.hpp | 0 .../impl/KokkosBlas1_abs_spec.hpp | 0 .../impl/KokkosBlas1_axpby_impl.hpp | 0 .../impl/KokkosBlas1_axpby_mv_impl.hpp | 0 .../impl/KokkosBlas1_axpby_spec.hpp | 0 .../impl/KokkosBlas1_dot_impl.hpp | 0 .../impl/KokkosBlas1_dot_mv_impl.hpp | 0 .../impl/KokkosBlas1_dot_spec.hpp | 0 .../impl/KokkosBlas1_iamax_impl.hpp | 0 .../impl/KokkosBlas1_iamax_spec.hpp | 0 .../impl/KokkosBlas1_mult_impl.hpp | 0 .../impl/KokkosBlas1_mult_spec.hpp | 0 .../impl/KokkosBlas1_nrm1_impl.hpp | 0 .../impl/KokkosBlas1_nrm1_spec.hpp | 0 .../impl/KokkosBlas1_nrm2_impl.hpp | 0 .../impl/KokkosBlas1_nrm2_spec.hpp | 0 .../impl/KokkosBlas1_nrm2w_impl.hpp | 0 .../impl/KokkosBlas1_nrm2w_spec.hpp | 0 .../impl/KokkosBlas1_nrminf_impl.hpp | 0 .../impl/KokkosBlas1_nrminf_spec.hpp | 0 .../impl/KokkosBlas1_reciprocal_impl.hpp | 0 .../impl/KokkosBlas1_reciprocal_spec.hpp | 0 .../impl/KokkosBlas1_scal_impl.hpp | 0 .../impl/KokkosBlas1_scal_mv_impl.hpp | 0 .../impl/KokkosBlas1_scal_spec.hpp | 0 .../impl/KokkosBlas1_serial_scal_impl.hpp | 0 .../impl/KokkosBlas1_set_impl.hpp | 0 .../impl/KokkosBlas1_sum_impl.hpp | 0 .../impl/KokkosBlas1_sum_spec.hpp | 0 .../impl/KokkosBlas1_team_abs_spec.hpp | 0 .../impl/KokkosBlas1_team_axpby_spec.hpp | 0 .../impl/KokkosBlas1_team_dot_spec.hpp | 0 .../impl/KokkosBlas1_team_mult_spec.hpp | 0 .../impl/KokkosBlas1_team_nrm2_spec.hpp | 0 .../impl/KokkosBlas1_team_scal_impl.hpp | 0 .../impl/KokkosBlas1_team_scal_spec.hpp | 0 .../impl/KokkosBlas1_team_update_spec.hpp | 0 .../impl/KokkosBlas1_update_impl.hpp | 0 .../impl/KokkosBlas1_update_spec.hpp | 0 .../impl/KokkosBlas2_gemv_impl.hpp | 0 .../impl/KokkosBlas2_gemv_spec.hpp | 0 .../impl/KokkosBlas2_serial_gemv_impl.hpp | 0 ...osBlas2_serial_gemv_inner_multiple_dot.hpp | 0 .../impl/KokkosBlas2_serial_gemv_internal.hpp | 0 .../impl/KokkosBlas2_team_gemv_impl.hpp | 0 .../impl/KokkosBlas2_team_gemv_spec.hpp | 0 .../impl/KokkosBlas3_gemm_dotbased_impl.hpp | 0 .../impl/KokkosBlas3_gemm_impl.hpp | 0 .../impl/KokkosBlas3_gemm_spec.hpp | 0 .../impl/KokkosBlas3_trmm_impl.hpp | 0 .../impl/KokkosBlas3_trmm_spec.hpp | 0 .../impl/KokkosBlas3_trsm_impl.hpp | 0 .../impl/KokkosBlas3_trsm_spec.hpp | 0 .../impl/KokkosBlas_Newton_impl.hpp | 0 .../impl/KokkosBlas_gesv_impl.hpp | 0 .../impl/KokkosBlas_gesv_spec.hpp | 0 .../impl/KokkosBlas_serial_axpy.hpp | 0 .../impl/KokkosBlas_serial_nrm2.hpp | 0 .../impl/KokkosBlas_trtri_impl.hpp | 0 .../impl/KokkosBlas_trtri_spec.hpp | 0 {src/blas => blas}/impl/KokkosBlas_util.hpp | 0 {src/blas => blas/src}/KokkosBlas.hpp | 0 {src/blas => blas/src}/KokkosBlas1_abs.hpp | 0 {src/blas => blas/src}/KokkosBlas1_axpby.hpp | 0 {src/blas => blas/src}/KokkosBlas1_dot.hpp | 0 {src/blas => blas/src}/KokkosBlas1_fill.hpp | 0 {src/blas => blas/src}/KokkosBlas1_iamax.hpp | 0 {src/blas => blas/src}/KokkosBlas1_mult.hpp | 0 {src/blas => blas/src}/KokkosBlas1_nrm1.hpp | 0 {src/blas => blas/src}/KokkosBlas1_nrm2.hpp | 0 .../src}/KokkosBlas1_nrm2_squared.hpp | 0 {src/blas => blas/src}/KokkosBlas1_nrm2w.hpp | 0 .../src}/KokkosBlas1_nrm2w_squared.hpp | 0 {src/blas => blas/src}/KokkosBlas1_nrminf.hpp | 0 .../src}/KokkosBlas1_reciprocal.hpp | 0 {src/blas => blas/src}/KokkosBlas1_scal.hpp | 0 {src/blas => blas/src}/KokkosBlas1_set.hpp | 0 {src/blas => blas/src}/KokkosBlas1_sum.hpp | 0 .../src}/KokkosBlas1_team_abs.hpp | 0 .../src}/KokkosBlas1_team_axpby.hpp | 0 .../src}/KokkosBlas1_team_dot.hpp | 0 .../src}/KokkosBlas1_team_mult.hpp | 0 .../src}/KokkosBlas1_team_nrm2.hpp | 0 .../src}/KokkosBlas1_team_scal.hpp | 0 .../src}/KokkosBlas1_team_update.hpp | 0 {src/blas => blas/src}/KokkosBlas1_update.hpp | 0 {src/blas => blas/src}/KokkosBlas2_gemv.hpp | 0 .../src}/KokkosBlas2_serial_gemv.hpp | 0 .../src}/KokkosBlas2_team_gemv.hpp | 0 {src/blas => blas/src}/KokkosBlas3_gemm.hpp | 0 {src/blas => blas/src}/KokkosBlas3_trmm.hpp | 0 {src/blas => blas/src}/KokkosBlas3_trsm.hpp | 0 {src/blas => blas/src}/KokkosBlas_gesv.hpp | 0 {src/blas => blas/src}/KokkosBlas_trtri.hpp | 0 blas/unit_test/CMakeLists.txt | 94 ++++++ .../blas => blas/unit_test}/Test_Blas.hpp | 0 .../unit_test}/Test_Blas1_abs.hpp | 0 .../unit_test}/Test_Blas1_asum.hpp | 0 .../unit_test}/Test_Blas1_axpby.hpp | 0 .../unit_test}/Test_Blas1_axpy.hpp | 0 .../unit_test}/Test_Blas1_dot.hpp | 0 .../unit_test}/Test_Blas1_iamax.hpp | 0 .../unit_test}/Test_Blas1_mult.hpp | 0 .../unit_test}/Test_Blas1_nrm1.hpp | 0 .../unit_test}/Test_Blas1_nrm2.hpp | 0 .../unit_test}/Test_Blas1_nrm2_squared.hpp | 0 .../unit_test}/Test_Blas1_nrm2w.hpp | 0 .../unit_test}/Test_Blas1_nrm2w_squared.hpp | 0 .../unit_test}/Test_Blas1_nrminf.hpp | 0 .../unit_test}/Test_Blas1_reciprocal.hpp | 0 .../unit_test}/Test_Blas1_scal.hpp | 0 .../unit_test}/Test_Blas1_serial_setscal.hpp | 0 .../unit_test}/Test_Blas1_sum.hpp | 0 .../unit_test}/Test_Blas1_team_abs.hpp | 0 .../unit_test}/Test_Blas1_team_axpby.hpp | 0 .../unit_test}/Test_Blas1_team_axpy.hpp | 0 .../unit_test}/Test_Blas1_team_dot.hpp | 0 .../unit_test}/Test_Blas1_team_mult.hpp | 0 .../unit_test}/Test_Blas1_team_nrm2.hpp | 0 .../unit_test}/Test_Blas1_team_scal.hpp | 0 .../unit_test}/Test_Blas1_team_setscal.hpp | 0 .../unit_test}/Test_Blas1_team_update.hpp | 0 .../unit_test}/Test_Blas1_update.hpp | 0 .../unit_test}/Test_Blas2_gemv.hpp | 0 .../unit_test}/Test_Blas2_gemv_util.hpp | 0 .../unit_test}/Test_Blas2_serial_gemv.hpp | 0 .../unit_test}/Test_Blas2_team_gemv.hpp | 0 .../unit_test}/Test_Blas2_teamvector_gemv.hpp | 0 .../unit_test}/Test_Blas3_gemm.hpp | 0 .../unit_test}/Test_Blas3_trmm.hpp | 0 .../unit_test}/Test_Blas3_trsm.hpp | 0 .../unit_test}/Test_Blas_Newton.hpp | 0 .../unit_test}/Test_Blas_gesv.hpp | 0 .../unit_test}/Test_Blas_rocblas.hpp | 0 .../unit_test}/Test_Blas_serial_axpy.hpp | 0 .../unit_test}/Test_Blas_serial_nrm2.hpp | 0 .../unit_test}/Test_Blas_trtri.hpp | 0 .../unit_test/backends}/Test_Cuda_Blas.cpp | 0 .../unit_test/backends}/Test_HIP_Blas.cpp | 0 .../backends}/Test_OpenMPTarget_Blas.cpp | 0 .../unit_test/backends}/Test_OpenMP_Blas.cpp | 0 .../unit_test/backends}/Test_SYCL_Blas.cpp | 0 .../unit_test/backends}/Test_Serial_Blas.cpp | 0 .../unit_test/backends}/Test_Threads_Blas.cpp | 0 cmake/kokkoskernels_components.cmake | 15 +- .../impl => common}/KokkosKernels_helpers.hpp | 0 .../blas1/KokkosBlas_dot_mv_perf_test.cpp | 2 +- .../blas/blas1/KokkosBlas_dot_perf_test.cpp | 1 - .../blas/blas1/KokkosBlas_dot_perf_test.hpp | 2 +- src/CMakeLists.txt | 248 ---------------- unit_test/CMakeLists.txt | 56 ---- unit_test/sparse/Test_Sparse_Utils.hpp | 4 +- 156 files changed, 414 insertions(+), 318 deletions(-) create mode 100644 blas/CMakeLists.txt rename {src/blas => blas}/impl/KokkosBlas1_abs_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_abs_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_axpby_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_axpby_mv_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_axpby_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_dot_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_dot_mv_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_dot_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_iamax_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_iamax_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_mult_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_mult_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_nrm1_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_nrm1_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_nrm2_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_nrm2_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_nrm2w_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_nrm2w_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_nrminf_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_nrminf_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_reciprocal_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_reciprocal_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_scal_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_scal_mv_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_scal_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_serial_scal_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_set_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_sum_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_sum_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_team_abs_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_team_axpby_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_team_dot_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_team_mult_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_team_nrm2_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_team_scal_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_team_scal_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_team_update_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_update_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas1_update_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas2_gemv_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas2_gemv_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas2_serial_gemv_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas2_serial_gemv_internal.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas2_team_gemv_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas2_team_gemv_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas3_gemm_dotbased_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas3_gemm_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas3_gemm_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas3_trmm_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas3_trmm_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas3_trsm_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas3_trsm_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas_Newton_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas_gesv_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas_gesv_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas_serial_axpy.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas_serial_nrm2.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas_trtri_impl.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas_trtri_spec.hpp (100%) rename {src/blas => blas}/impl/KokkosBlas_util.hpp (100%) rename {src/blas => blas/src}/KokkosBlas.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_abs.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_axpby.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_dot.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_fill.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_iamax.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_mult.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_nrm1.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_nrm2.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_nrm2_squared.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_nrm2w.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_nrm2w_squared.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_nrminf.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_reciprocal.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_scal.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_set.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_sum.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_team_abs.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_team_axpby.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_team_dot.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_team_mult.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_team_nrm2.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_team_scal.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_team_update.hpp (100%) rename {src/blas => blas/src}/KokkosBlas1_update.hpp (100%) rename {src/blas => blas/src}/KokkosBlas2_gemv.hpp (100%) rename {src/blas => blas/src}/KokkosBlas2_serial_gemv.hpp (100%) rename {src/blas => blas/src}/KokkosBlas2_team_gemv.hpp (100%) rename {src/blas => blas/src}/KokkosBlas3_gemm.hpp (100%) rename {src/blas => blas/src}/KokkosBlas3_trmm.hpp (100%) rename {src/blas => blas/src}/KokkosBlas3_trsm.hpp (100%) rename {src/blas => blas/src}/KokkosBlas_gesv.hpp (100%) rename {src/blas => blas/src}/KokkosBlas_trtri.hpp (100%) create mode 100644 blas/unit_test/CMakeLists.txt rename {unit_test/blas => blas/unit_test}/Test_Blas.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_abs.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_asum.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_axpby.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_axpy.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_dot.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_iamax.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_mult.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_nrm1.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_nrm2.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_nrm2_squared.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_nrm2w.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_nrm2w_squared.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_nrminf.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_reciprocal.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_scal.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_serial_setscal.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_sum.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_team_abs.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_team_axpby.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_team_axpy.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_team_dot.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_team_mult.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_team_nrm2.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_team_scal.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_team_setscal.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_team_update.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas1_update.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas2_gemv.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas2_gemv_util.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas2_serial_gemv.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas2_team_gemv.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas2_teamvector_gemv.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas3_gemm.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas3_trmm.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas3_trsm.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas_Newton.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas_gesv.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas_rocblas.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas_serial_axpy.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas_serial_nrm2.hpp (100%) rename {unit_test/blas => blas/unit_test}/Test_Blas_trtri.hpp (100%) rename {unit_test/cuda => blas/unit_test/backends}/Test_Cuda_Blas.cpp (100%) rename {unit_test/hip => blas/unit_test/backends}/Test_HIP_Blas.cpp (100%) rename {unit_test/openmptarget => blas/unit_test/backends}/Test_OpenMPTarget_Blas.cpp (100%) rename {unit_test/openmp => blas/unit_test/backends}/Test_OpenMP_Blas.cpp (100%) rename {unit_test/sycl => blas/unit_test/backends}/Test_SYCL_Blas.cpp (100%) rename {unit_test/serial => blas/unit_test/backends}/Test_Serial_Blas.cpp (100%) rename {unit_test/threads => blas/unit_test/backends}/Test_Threads_Blas.cpp (100%) rename {src/impl => common}/KokkosKernels_helpers.hpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 71ca6c4211..4a590a52af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -118,6 +118,9 @@ IF (KokkosKernels_INSTALL_TESTING) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/dense/unit_test) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/sparse/unit_test) ENDIF() + IF (KokkosKernels_ENABLE_BLAS) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(blas/unit_test) + ENDIF() IF(KokkosKernels_ENABLE_REMAINDER) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(unit_test) ENDIF() @@ -249,16 +252,24 @@ ELSE() SET(HEADERS) SET(SOURCES src/dummy.cpp) + # ETI infrastructure to be used by components + include(src/cmake/kokkoskernels_eti.cmake) + SET(ETI_HEADERS) # Only enable requested components # if nothing requested, build everything # to recover original behavior. INCLUDE(cmake/kokkoskernels_components.cmake) - INCLUDE(common/CMakeLists.txt) + LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/impl/tpls) + LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/src/impl) + INCLUDE(common/CMakeLists.txt) IF (KokkosKernels_ENABLE_BATCHED) INCLUDE(batched/CMakeLists.txt) ENDIF() + IF (KokkosKernels_ENABLE_BLAS) + INCLUDE(blas/CMakeLists.txt) + ENDIF() IF (KokkosKernels_ENABLE_REMAINDER) INCLUDE(src/CMakeLists.txt) ENDIF() @@ -359,6 +370,9 @@ ELSE() KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/dense/unit_test) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/sparse/unit_test) ENDIF() + IF (KokkosKernels_ENABLE_BLAS) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(blas/unit_test) + ENDIF() IF (KokkosKernels_ENABLE_REMAINDER) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(perf_test) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(unit_test) diff --git a/batched/CMakeLists.txt b/batched/CMakeLists.txt index b4c4bf9225..a545406fd5 100644 --- a/batched/CMakeLists.txt +++ b/batched/CMakeLists.txt @@ -10,9 +10,8 @@ LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/impl) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/unit_test) IF (NOT KokkosKernels_ENABLE_BLAS) - MESSAGE("batched enabled and blas not enabled, we need to include some headers manually!") - APPEND_GLOB(HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/blas/impl/KokkosBlas_util.hpp) - APPEND_GLOB(HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/blas/) + LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/impl) + APPEND_GLOB(HEADERS ${PACKAGE_SOURCE_DIR}/blas/impl/KokkosBlas_util.hpp) LIST(APPEND SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/batched/KokkosBatched_Util.cpp) ENDIF() diff --git a/batched/dense/unit_test/CMakeLists.txt b/batched/dense/unit_test/CMakeLists.txt index fae0d2e33e..e8119fd5a1 100644 --- a/batched/dense/unit_test/CMakeLists.txt +++ b/batched/dense/unit_test/CMakeLists.txt @@ -20,10 +20,10 @@ KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_C IF (NOT KokkosKernels_ENABLE_BLAS) MESSAGE("batched enabled and blas not enabled, we need to include some include directories manually!") - KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/src/blas) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/src/blas) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/src/blas/impl) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/src/blas/impl) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/blas/src) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/blas/src) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/blas/impl) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/blas/impl) ENDIF() ##################### diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt new file mode 100644 index 0000000000..9c6253bbca --- /dev/null +++ b/blas/CMakeLists.txt @@ -0,0 +1,281 @@ +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/src) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/impl) + +IF (NOT KokkosKernels_ENABLE_BATCHED) + MESSAGE("blas enabled and batched not enabled, we need to include some headers manually!") + LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched) + LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/src) + LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/impl) +ENDIF() + + +# Adding unit-tests +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/blas) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/blas) + +####################### +# # +# Logic for BLAS TPLs # +# # +####################### + +#Include BLAS, Blas host wrapper +IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL) + #Do NOT add this to include path + APPEND_GLOB(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/impl/tpls/KokkosBlas_Host_tpl.cpp) +ENDIF() + +# Include host blas TPL source file +IF (KOKKOSKERNELS_ENABLE_TPL_BLAS) + LIST(APPEND SOURCES + src/impl/tpls/KokkosBlas_Host_tpl.cpp + ) +ENDIF() + +# Include cuda blas TPL source file +IF (KOKKOSKERNELS_ENABLE_TPL_CUBLAS) + LIST(APPEND SOURCES + src/impl/tpls/KokkosBlas_Cuda_tpl.cpp + ) +ENDIF() + +# Include rocm blas TPL source file +IF (KOKKOSKERNELS_ENABLE_TPL_ROCBLAS) + LIST(APPEND SOURCES + src/impl/tpls/KokkosBlas_Rocm_tpl.cpp + ) +ENDIF() + +################## +# # +# ETI generation # +# # +################## + +#Build up a list of DECL, AVAIL, and INST macros +#that should be instantiated based on input options +#Generate @X@ variables in the template X.hpp.in and X.cpp.in +#files containing the list of all needed macros +KOKKOSKERNELS_GENERATE_ETI(Blas1_abs abs + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_abs_mv abs + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_scal scal + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_scal_mv scal + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_dot dot + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_dot_mv dot + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas_gesv gesv + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_axpby axpby + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_axpby_mv axpby + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_update update + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_update_mv update + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_sum sum + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_sum_mv sum + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_nrm1 nrm1 + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_nrm1_mv nrm1 + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_nrm2w nrm2w + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_nrm2w_mv nrm2w + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_nrminf nrminf + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_nrminf_mv nrminf + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_iamax iamax + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_iamax_mv iamax + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_nrm2 nrm2 + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_nrm2_mv nrm2 + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_mult mult + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_mult_mv mult + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_reciprocal reciprocal + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas1_reciprocal_mv reciprocal + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas2_gemv gemv + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas3_gemm gemm + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas3_trsm trsm + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas3_trmm trmm + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Blas_trtri trtri + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) diff --git a/src/blas/impl/KokkosBlas1_abs_impl.hpp b/blas/impl/KokkosBlas1_abs_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_abs_impl.hpp rename to blas/impl/KokkosBlas1_abs_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_abs_spec.hpp b/blas/impl/KokkosBlas1_abs_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_abs_spec.hpp rename to blas/impl/KokkosBlas1_abs_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_axpby_impl.hpp b/blas/impl/KokkosBlas1_axpby_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_axpby_impl.hpp rename to blas/impl/KokkosBlas1_axpby_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_axpby_mv_impl.hpp b/blas/impl/KokkosBlas1_axpby_mv_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_axpby_mv_impl.hpp rename to blas/impl/KokkosBlas1_axpby_mv_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_axpby_spec.hpp b/blas/impl/KokkosBlas1_axpby_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_axpby_spec.hpp rename to blas/impl/KokkosBlas1_axpby_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_dot_impl.hpp b/blas/impl/KokkosBlas1_dot_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_dot_impl.hpp rename to blas/impl/KokkosBlas1_dot_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_dot_mv_impl.hpp b/blas/impl/KokkosBlas1_dot_mv_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_dot_mv_impl.hpp rename to blas/impl/KokkosBlas1_dot_mv_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_dot_spec.hpp b/blas/impl/KokkosBlas1_dot_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_dot_spec.hpp rename to blas/impl/KokkosBlas1_dot_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_iamax_impl.hpp b/blas/impl/KokkosBlas1_iamax_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_iamax_impl.hpp rename to blas/impl/KokkosBlas1_iamax_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_iamax_spec.hpp b/blas/impl/KokkosBlas1_iamax_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_iamax_spec.hpp rename to blas/impl/KokkosBlas1_iamax_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_mult_impl.hpp b/blas/impl/KokkosBlas1_mult_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_mult_impl.hpp rename to blas/impl/KokkosBlas1_mult_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_mult_spec.hpp b/blas/impl/KokkosBlas1_mult_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_mult_spec.hpp rename to blas/impl/KokkosBlas1_mult_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_nrm1_impl.hpp b/blas/impl/KokkosBlas1_nrm1_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_nrm1_impl.hpp rename to blas/impl/KokkosBlas1_nrm1_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_nrm1_spec.hpp b/blas/impl/KokkosBlas1_nrm1_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_nrm1_spec.hpp rename to blas/impl/KokkosBlas1_nrm1_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_nrm2_impl.hpp b/blas/impl/KokkosBlas1_nrm2_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_nrm2_impl.hpp rename to blas/impl/KokkosBlas1_nrm2_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_nrm2_spec.hpp b/blas/impl/KokkosBlas1_nrm2_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_nrm2_spec.hpp rename to blas/impl/KokkosBlas1_nrm2_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_nrm2w_impl.hpp b/blas/impl/KokkosBlas1_nrm2w_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_nrm2w_impl.hpp rename to blas/impl/KokkosBlas1_nrm2w_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_nrm2w_spec.hpp b/blas/impl/KokkosBlas1_nrm2w_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_nrm2w_spec.hpp rename to blas/impl/KokkosBlas1_nrm2w_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_nrminf_impl.hpp b/blas/impl/KokkosBlas1_nrminf_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_nrminf_impl.hpp rename to blas/impl/KokkosBlas1_nrminf_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_nrminf_spec.hpp b/blas/impl/KokkosBlas1_nrminf_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_nrminf_spec.hpp rename to blas/impl/KokkosBlas1_nrminf_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_reciprocal_impl.hpp b/blas/impl/KokkosBlas1_reciprocal_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_reciprocal_impl.hpp rename to blas/impl/KokkosBlas1_reciprocal_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_reciprocal_spec.hpp b/blas/impl/KokkosBlas1_reciprocal_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_reciprocal_spec.hpp rename to blas/impl/KokkosBlas1_reciprocal_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_scal_impl.hpp b/blas/impl/KokkosBlas1_scal_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_scal_impl.hpp rename to blas/impl/KokkosBlas1_scal_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_scal_mv_impl.hpp b/blas/impl/KokkosBlas1_scal_mv_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_scal_mv_impl.hpp rename to blas/impl/KokkosBlas1_scal_mv_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_scal_spec.hpp b/blas/impl/KokkosBlas1_scal_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_scal_spec.hpp rename to blas/impl/KokkosBlas1_scal_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_serial_scal_impl.hpp b/blas/impl/KokkosBlas1_serial_scal_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_serial_scal_impl.hpp rename to blas/impl/KokkosBlas1_serial_scal_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_set_impl.hpp b/blas/impl/KokkosBlas1_set_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_set_impl.hpp rename to blas/impl/KokkosBlas1_set_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_sum_impl.hpp b/blas/impl/KokkosBlas1_sum_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_sum_impl.hpp rename to blas/impl/KokkosBlas1_sum_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_sum_spec.hpp b/blas/impl/KokkosBlas1_sum_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_sum_spec.hpp rename to blas/impl/KokkosBlas1_sum_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_team_abs_spec.hpp b/blas/impl/KokkosBlas1_team_abs_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_team_abs_spec.hpp rename to blas/impl/KokkosBlas1_team_abs_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_team_axpby_spec.hpp b/blas/impl/KokkosBlas1_team_axpby_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_team_axpby_spec.hpp rename to blas/impl/KokkosBlas1_team_axpby_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_team_dot_spec.hpp b/blas/impl/KokkosBlas1_team_dot_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_team_dot_spec.hpp rename to blas/impl/KokkosBlas1_team_dot_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_team_mult_spec.hpp b/blas/impl/KokkosBlas1_team_mult_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_team_mult_spec.hpp rename to blas/impl/KokkosBlas1_team_mult_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_team_nrm2_spec.hpp b/blas/impl/KokkosBlas1_team_nrm2_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_team_nrm2_spec.hpp rename to blas/impl/KokkosBlas1_team_nrm2_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_team_scal_impl.hpp b/blas/impl/KokkosBlas1_team_scal_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_team_scal_impl.hpp rename to blas/impl/KokkosBlas1_team_scal_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_team_scal_spec.hpp b/blas/impl/KokkosBlas1_team_scal_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_team_scal_spec.hpp rename to blas/impl/KokkosBlas1_team_scal_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_team_update_spec.hpp b/blas/impl/KokkosBlas1_team_update_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_team_update_spec.hpp rename to blas/impl/KokkosBlas1_team_update_spec.hpp diff --git a/src/blas/impl/KokkosBlas1_update_impl.hpp b/blas/impl/KokkosBlas1_update_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_update_impl.hpp rename to blas/impl/KokkosBlas1_update_impl.hpp diff --git a/src/blas/impl/KokkosBlas1_update_spec.hpp b/blas/impl/KokkosBlas1_update_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas1_update_spec.hpp rename to blas/impl/KokkosBlas1_update_spec.hpp diff --git a/src/blas/impl/KokkosBlas2_gemv_impl.hpp b/blas/impl/KokkosBlas2_gemv_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas2_gemv_impl.hpp rename to blas/impl/KokkosBlas2_gemv_impl.hpp diff --git a/src/blas/impl/KokkosBlas2_gemv_spec.hpp b/blas/impl/KokkosBlas2_gemv_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas2_gemv_spec.hpp rename to blas/impl/KokkosBlas2_gemv_spec.hpp diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp b/blas/impl/KokkosBlas2_serial_gemv_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas2_serial_gemv_impl.hpp rename to blas/impl/KokkosBlas2_serial_gemv_impl.hpp diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp b/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp similarity index 100% rename from src/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp rename to blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp diff --git a/src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp b/blas/impl/KokkosBlas2_serial_gemv_internal.hpp similarity index 100% rename from src/blas/impl/KokkosBlas2_serial_gemv_internal.hpp rename to blas/impl/KokkosBlas2_serial_gemv_internal.hpp diff --git a/src/blas/impl/KokkosBlas2_team_gemv_impl.hpp b/blas/impl/KokkosBlas2_team_gemv_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas2_team_gemv_impl.hpp rename to blas/impl/KokkosBlas2_team_gemv_impl.hpp diff --git a/src/blas/impl/KokkosBlas2_team_gemv_spec.hpp b/blas/impl/KokkosBlas2_team_gemv_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas2_team_gemv_spec.hpp rename to blas/impl/KokkosBlas2_team_gemv_spec.hpp diff --git a/src/blas/impl/KokkosBlas3_gemm_dotbased_impl.hpp b/blas/impl/KokkosBlas3_gemm_dotbased_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas3_gemm_dotbased_impl.hpp rename to blas/impl/KokkosBlas3_gemm_dotbased_impl.hpp diff --git a/src/blas/impl/KokkosBlas3_gemm_impl.hpp b/blas/impl/KokkosBlas3_gemm_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas3_gemm_impl.hpp rename to blas/impl/KokkosBlas3_gemm_impl.hpp diff --git a/src/blas/impl/KokkosBlas3_gemm_spec.hpp b/blas/impl/KokkosBlas3_gemm_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas3_gemm_spec.hpp rename to blas/impl/KokkosBlas3_gemm_spec.hpp diff --git a/src/blas/impl/KokkosBlas3_trmm_impl.hpp b/blas/impl/KokkosBlas3_trmm_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas3_trmm_impl.hpp rename to blas/impl/KokkosBlas3_trmm_impl.hpp diff --git a/src/blas/impl/KokkosBlas3_trmm_spec.hpp b/blas/impl/KokkosBlas3_trmm_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas3_trmm_spec.hpp rename to blas/impl/KokkosBlas3_trmm_spec.hpp diff --git a/src/blas/impl/KokkosBlas3_trsm_impl.hpp b/blas/impl/KokkosBlas3_trsm_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas3_trsm_impl.hpp rename to blas/impl/KokkosBlas3_trsm_impl.hpp diff --git a/src/blas/impl/KokkosBlas3_trsm_spec.hpp b/blas/impl/KokkosBlas3_trsm_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas3_trsm_spec.hpp rename to blas/impl/KokkosBlas3_trsm_spec.hpp diff --git a/src/blas/impl/KokkosBlas_Newton_impl.hpp b/blas/impl/KokkosBlas_Newton_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas_Newton_impl.hpp rename to blas/impl/KokkosBlas_Newton_impl.hpp diff --git a/src/blas/impl/KokkosBlas_gesv_impl.hpp b/blas/impl/KokkosBlas_gesv_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas_gesv_impl.hpp rename to blas/impl/KokkosBlas_gesv_impl.hpp diff --git a/src/blas/impl/KokkosBlas_gesv_spec.hpp b/blas/impl/KokkosBlas_gesv_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas_gesv_spec.hpp rename to blas/impl/KokkosBlas_gesv_spec.hpp diff --git a/src/blas/impl/KokkosBlas_serial_axpy.hpp b/blas/impl/KokkosBlas_serial_axpy.hpp similarity index 100% rename from src/blas/impl/KokkosBlas_serial_axpy.hpp rename to blas/impl/KokkosBlas_serial_axpy.hpp diff --git a/src/blas/impl/KokkosBlas_serial_nrm2.hpp b/blas/impl/KokkosBlas_serial_nrm2.hpp similarity index 100% rename from src/blas/impl/KokkosBlas_serial_nrm2.hpp rename to blas/impl/KokkosBlas_serial_nrm2.hpp diff --git a/src/blas/impl/KokkosBlas_trtri_impl.hpp b/blas/impl/KokkosBlas_trtri_impl.hpp similarity index 100% rename from src/blas/impl/KokkosBlas_trtri_impl.hpp rename to blas/impl/KokkosBlas_trtri_impl.hpp diff --git a/src/blas/impl/KokkosBlas_trtri_spec.hpp b/blas/impl/KokkosBlas_trtri_spec.hpp similarity index 100% rename from src/blas/impl/KokkosBlas_trtri_spec.hpp rename to blas/impl/KokkosBlas_trtri_spec.hpp diff --git a/src/blas/impl/KokkosBlas_util.hpp b/blas/impl/KokkosBlas_util.hpp similarity index 100% rename from src/blas/impl/KokkosBlas_util.hpp rename to blas/impl/KokkosBlas_util.hpp diff --git a/src/blas/KokkosBlas.hpp b/blas/src/KokkosBlas.hpp similarity index 100% rename from src/blas/KokkosBlas.hpp rename to blas/src/KokkosBlas.hpp diff --git a/src/blas/KokkosBlas1_abs.hpp b/blas/src/KokkosBlas1_abs.hpp similarity index 100% rename from src/blas/KokkosBlas1_abs.hpp rename to blas/src/KokkosBlas1_abs.hpp diff --git a/src/blas/KokkosBlas1_axpby.hpp b/blas/src/KokkosBlas1_axpby.hpp similarity index 100% rename from src/blas/KokkosBlas1_axpby.hpp rename to blas/src/KokkosBlas1_axpby.hpp diff --git a/src/blas/KokkosBlas1_dot.hpp b/blas/src/KokkosBlas1_dot.hpp similarity index 100% rename from src/blas/KokkosBlas1_dot.hpp rename to blas/src/KokkosBlas1_dot.hpp diff --git a/src/blas/KokkosBlas1_fill.hpp b/blas/src/KokkosBlas1_fill.hpp similarity index 100% rename from src/blas/KokkosBlas1_fill.hpp rename to blas/src/KokkosBlas1_fill.hpp diff --git a/src/blas/KokkosBlas1_iamax.hpp b/blas/src/KokkosBlas1_iamax.hpp similarity index 100% rename from src/blas/KokkosBlas1_iamax.hpp rename to blas/src/KokkosBlas1_iamax.hpp diff --git a/src/blas/KokkosBlas1_mult.hpp b/blas/src/KokkosBlas1_mult.hpp similarity index 100% rename from src/blas/KokkosBlas1_mult.hpp rename to blas/src/KokkosBlas1_mult.hpp diff --git a/src/blas/KokkosBlas1_nrm1.hpp b/blas/src/KokkosBlas1_nrm1.hpp similarity index 100% rename from src/blas/KokkosBlas1_nrm1.hpp rename to blas/src/KokkosBlas1_nrm1.hpp diff --git a/src/blas/KokkosBlas1_nrm2.hpp b/blas/src/KokkosBlas1_nrm2.hpp similarity index 100% rename from src/blas/KokkosBlas1_nrm2.hpp rename to blas/src/KokkosBlas1_nrm2.hpp diff --git a/src/blas/KokkosBlas1_nrm2_squared.hpp b/blas/src/KokkosBlas1_nrm2_squared.hpp similarity index 100% rename from src/blas/KokkosBlas1_nrm2_squared.hpp rename to blas/src/KokkosBlas1_nrm2_squared.hpp diff --git a/src/blas/KokkosBlas1_nrm2w.hpp b/blas/src/KokkosBlas1_nrm2w.hpp similarity index 100% rename from src/blas/KokkosBlas1_nrm2w.hpp rename to blas/src/KokkosBlas1_nrm2w.hpp diff --git a/src/blas/KokkosBlas1_nrm2w_squared.hpp b/blas/src/KokkosBlas1_nrm2w_squared.hpp similarity index 100% rename from src/blas/KokkosBlas1_nrm2w_squared.hpp rename to blas/src/KokkosBlas1_nrm2w_squared.hpp diff --git a/src/blas/KokkosBlas1_nrminf.hpp b/blas/src/KokkosBlas1_nrminf.hpp similarity index 100% rename from src/blas/KokkosBlas1_nrminf.hpp rename to blas/src/KokkosBlas1_nrminf.hpp diff --git a/src/blas/KokkosBlas1_reciprocal.hpp b/blas/src/KokkosBlas1_reciprocal.hpp similarity index 100% rename from src/blas/KokkosBlas1_reciprocal.hpp rename to blas/src/KokkosBlas1_reciprocal.hpp diff --git a/src/blas/KokkosBlas1_scal.hpp b/blas/src/KokkosBlas1_scal.hpp similarity index 100% rename from src/blas/KokkosBlas1_scal.hpp rename to blas/src/KokkosBlas1_scal.hpp diff --git a/src/blas/KokkosBlas1_set.hpp b/blas/src/KokkosBlas1_set.hpp similarity index 100% rename from src/blas/KokkosBlas1_set.hpp rename to blas/src/KokkosBlas1_set.hpp diff --git a/src/blas/KokkosBlas1_sum.hpp b/blas/src/KokkosBlas1_sum.hpp similarity index 100% rename from src/blas/KokkosBlas1_sum.hpp rename to blas/src/KokkosBlas1_sum.hpp diff --git a/src/blas/KokkosBlas1_team_abs.hpp b/blas/src/KokkosBlas1_team_abs.hpp similarity index 100% rename from src/blas/KokkosBlas1_team_abs.hpp rename to blas/src/KokkosBlas1_team_abs.hpp diff --git a/src/blas/KokkosBlas1_team_axpby.hpp b/blas/src/KokkosBlas1_team_axpby.hpp similarity index 100% rename from src/blas/KokkosBlas1_team_axpby.hpp rename to blas/src/KokkosBlas1_team_axpby.hpp diff --git a/src/blas/KokkosBlas1_team_dot.hpp b/blas/src/KokkosBlas1_team_dot.hpp similarity index 100% rename from src/blas/KokkosBlas1_team_dot.hpp rename to blas/src/KokkosBlas1_team_dot.hpp diff --git a/src/blas/KokkosBlas1_team_mult.hpp b/blas/src/KokkosBlas1_team_mult.hpp similarity index 100% rename from src/blas/KokkosBlas1_team_mult.hpp rename to blas/src/KokkosBlas1_team_mult.hpp diff --git a/src/blas/KokkosBlas1_team_nrm2.hpp b/blas/src/KokkosBlas1_team_nrm2.hpp similarity index 100% rename from src/blas/KokkosBlas1_team_nrm2.hpp rename to blas/src/KokkosBlas1_team_nrm2.hpp diff --git a/src/blas/KokkosBlas1_team_scal.hpp b/blas/src/KokkosBlas1_team_scal.hpp similarity index 100% rename from src/blas/KokkosBlas1_team_scal.hpp rename to blas/src/KokkosBlas1_team_scal.hpp diff --git a/src/blas/KokkosBlas1_team_update.hpp b/blas/src/KokkosBlas1_team_update.hpp similarity index 100% rename from src/blas/KokkosBlas1_team_update.hpp rename to blas/src/KokkosBlas1_team_update.hpp diff --git a/src/blas/KokkosBlas1_update.hpp b/blas/src/KokkosBlas1_update.hpp similarity index 100% rename from src/blas/KokkosBlas1_update.hpp rename to blas/src/KokkosBlas1_update.hpp diff --git a/src/blas/KokkosBlas2_gemv.hpp b/blas/src/KokkosBlas2_gemv.hpp similarity index 100% rename from src/blas/KokkosBlas2_gemv.hpp rename to blas/src/KokkosBlas2_gemv.hpp diff --git a/src/blas/KokkosBlas2_serial_gemv.hpp b/blas/src/KokkosBlas2_serial_gemv.hpp similarity index 100% rename from src/blas/KokkosBlas2_serial_gemv.hpp rename to blas/src/KokkosBlas2_serial_gemv.hpp diff --git a/src/blas/KokkosBlas2_team_gemv.hpp b/blas/src/KokkosBlas2_team_gemv.hpp similarity index 100% rename from src/blas/KokkosBlas2_team_gemv.hpp rename to blas/src/KokkosBlas2_team_gemv.hpp diff --git a/src/blas/KokkosBlas3_gemm.hpp b/blas/src/KokkosBlas3_gemm.hpp similarity index 100% rename from src/blas/KokkosBlas3_gemm.hpp rename to blas/src/KokkosBlas3_gemm.hpp diff --git a/src/blas/KokkosBlas3_trmm.hpp b/blas/src/KokkosBlas3_trmm.hpp similarity index 100% rename from src/blas/KokkosBlas3_trmm.hpp rename to blas/src/KokkosBlas3_trmm.hpp diff --git a/src/blas/KokkosBlas3_trsm.hpp b/blas/src/KokkosBlas3_trsm.hpp similarity index 100% rename from src/blas/KokkosBlas3_trsm.hpp rename to blas/src/KokkosBlas3_trsm.hpp diff --git a/src/blas/KokkosBlas_gesv.hpp b/blas/src/KokkosBlas_gesv.hpp similarity index 100% rename from src/blas/KokkosBlas_gesv.hpp rename to blas/src/KokkosBlas_gesv.hpp diff --git a/src/blas/KokkosBlas_trtri.hpp b/blas/src/KokkosBlas_trtri.hpp similarity index 100% rename from src/blas/KokkosBlas_trtri.hpp rename to blas/src/KokkosBlas_trtri.hpp diff --git a/blas/unit_test/CMakeLists.txt b/blas/unit_test/CMakeLists.txt new file mode 100644 index 0000000000..d114e3a82b --- /dev/null +++ b/blas/unit_test/CMakeLists.txt @@ -0,0 +1,94 @@ +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/test_common) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/test_common) + +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}) + +##################### +# # +# Define unit-tests # +# # +##################### + +##################### +# # +# Add GPU backends # +# # +##################### +IF (KOKKOS_ENABLE_CUDA) + KOKKOSKERNELS_ADD_UNIT_TEST( + blas_cuda + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_Cuda_Blas.cpp + COMPONENTS blas + ) +ENDIF () + +IF (KOKKOS_ENABLE_HIP) + KOKKOSKERNELS_ADD_UNIT_TEST( + blas_hip + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_HIP_Blas.cpp + COMPONENTS blas + ) +ENDIF () + +IF (KOKKOS_ENABLE_SYCL) + KOKKOSKERNELS_ADD_UNIT_TEST( + blas_sycl + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_SYCL_Blas.cpp + COMPONENTS blas + ) +ENDIF () + +IF (KOKKOS_ENABLE_OPENMPTARGET) + # KOKKOSKERNELS_ADD_UNIT_TEST( + # blas_openmptarget + # SOURCES + # ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + # backends/Test_OpenMPTarget_Blas.cpp + # COMPONENTS blas + # ) +ENDIF () + + + +##################### +# # +# Add CPU backends # +# # +##################### +IF (KOKKOS_ENABLE_SERIAL) + KOKKOSKERNELS_ADD_UNIT_TEST( + blas_serial + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_Serial_Blas.cpp + COMPONENTS blas + ) +ENDIF () + +IF (KOKKOS_ENABLE_OPENMP) + KOKKOSKERNELS_ADD_UNIT_TEST( + blas_openmp + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_OpenMP_Blas.cpp + COMPONENTS blas + ) +ENDIF () + +IF (KOKKOS_ENABLE_THREADS) + KOKKOSKERNELS_ADD_UNIT_TEST( + blas_threads + SOURCES + ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + backends/Test_Threads_Blas.cpp + COMPONENTS blas + ) +ENDIF () + diff --git a/unit_test/blas/Test_Blas.hpp b/blas/unit_test/Test_Blas.hpp similarity index 100% rename from unit_test/blas/Test_Blas.hpp rename to blas/unit_test/Test_Blas.hpp diff --git a/unit_test/blas/Test_Blas1_abs.hpp b/blas/unit_test/Test_Blas1_abs.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_abs.hpp rename to blas/unit_test/Test_Blas1_abs.hpp diff --git a/unit_test/blas/Test_Blas1_asum.hpp b/blas/unit_test/Test_Blas1_asum.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_asum.hpp rename to blas/unit_test/Test_Blas1_asum.hpp diff --git a/unit_test/blas/Test_Blas1_axpby.hpp b/blas/unit_test/Test_Blas1_axpby.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_axpby.hpp rename to blas/unit_test/Test_Blas1_axpby.hpp diff --git a/unit_test/blas/Test_Blas1_axpy.hpp b/blas/unit_test/Test_Blas1_axpy.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_axpy.hpp rename to blas/unit_test/Test_Blas1_axpy.hpp diff --git a/unit_test/blas/Test_Blas1_dot.hpp b/blas/unit_test/Test_Blas1_dot.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_dot.hpp rename to blas/unit_test/Test_Blas1_dot.hpp diff --git a/unit_test/blas/Test_Blas1_iamax.hpp b/blas/unit_test/Test_Blas1_iamax.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_iamax.hpp rename to blas/unit_test/Test_Blas1_iamax.hpp diff --git a/unit_test/blas/Test_Blas1_mult.hpp b/blas/unit_test/Test_Blas1_mult.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_mult.hpp rename to blas/unit_test/Test_Blas1_mult.hpp diff --git a/unit_test/blas/Test_Blas1_nrm1.hpp b/blas/unit_test/Test_Blas1_nrm1.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_nrm1.hpp rename to blas/unit_test/Test_Blas1_nrm1.hpp diff --git a/unit_test/blas/Test_Blas1_nrm2.hpp b/blas/unit_test/Test_Blas1_nrm2.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_nrm2.hpp rename to blas/unit_test/Test_Blas1_nrm2.hpp diff --git a/unit_test/blas/Test_Blas1_nrm2_squared.hpp b/blas/unit_test/Test_Blas1_nrm2_squared.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_nrm2_squared.hpp rename to blas/unit_test/Test_Blas1_nrm2_squared.hpp diff --git a/unit_test/blas/Test_Blas1_nrm2w.hpp b/blas/unit_test/Test_Blas1_nrm2w.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_nrm2w.hpp rename to blas/unit_test/Test_Blas1_nrm2w.hpp diff --git a/unit_test/blas/Test_Blas1_nrm2w_squared.hpp b/blas/unit_test/Test_Blas1_nrm2w_squared.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_nrm2w_squared.hpp rename to blas/unit_test/Test_Blas1_nrm2w_squared.hpp diff --git a/unit_test/blas/Test_Blas1_nrminf.hpp b/blas/unit_test/Test_Blas1_nrminf.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_nrminf.hpp rename to blas/unit_test/Test_Blas1_nrminf.hpp diff --git a/unit_test/blas/Test_Blas1_reciprocal.hpp b/blas/unit_test/Test_Blas1_reciprocal.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_reciprocal.hpp rename to blas/unit_test/Test_Blas1_reciprocal.hpp diff --git a/unit_test/blas/Test_Blas1_scal.hpp b/blas/unit_test/Test_Blas1_scal.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_scal.hpp rename to blas/unit_test/Test_Blas1_scal.hpp diff --git a/unit_test/blas/Test_Blas1_serial_setscal.hpp b/blas/unit_test/Test_Blas1_serial_setscal.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_serial_setscal.hpp rename to blas/unit_test/Test_Blas1_serial_setscal.hpp diff --git a/unit_test/blas/Test_Blas1_sum.hpp b/blas/unit_test/Test_Blas1_sum.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_sum.hpp rename to blas/unit_test/Test_Blas1_sum.hpp diff --git a/unit_test/blas/Test_Blas1_team_abs.hpp b/blas/unit_test/Test_Blas1_team_abs.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_team_abs.hpp rename to blas/unit_test/Test_Blas1_team_abs.hpp diff --git a/unit_test/blas/Test_Blas1_team_axpby.hpp b/blas/unit_test/Test_Blas1_team_axpby.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_team_axpby.hpp rename to blas/unit_test/Test_Blas1_team_axpby.hpp diff --git a/unit_test/blas/Test_Blas1_team_axpy.hpp b/blas/unit_test/Test_Blas1_team_axpy.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_team_axpy.hpp rename to blas/unit_test/Test_Blas1_team_axpy.hpp diff --git a/unit_test/blas/Test_Blas1_team_dot.hpp b/blas/unit_test/Test_Blas1_team_dot.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_team_dot.hpp rename to blas/unit_test/Test_Blas1_team_dot.hpp diff --git a/unit_test/blas/Test_Blas1_team_mult.hpp b/blas/unit_test/Test_Blas1_team_mult.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_team_mult.hpp rename to blas/unit_test/Test_Blas1_team_mult.hpp diff --git a/unit_test/blas/Test_Blas1_team_nrm2.hpp b/blas/unit_test/Test_Blas1_team_nrm2.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_team_nrm2.hpp rename to blas/unit_test/Test_Blas1_team_nrm2.hpp diff --git a/unit_test/blas/Test_Blas1_team_scal.hpp b/blas/unit_test/Test_Blas1_team_scal.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_team_scal.hpp rename to blas/unit_test/Test_Blas1_team_scal.hpp diff --git a/unit_test/blas/Test_Blas1_team_setscal.hpp b/blas/unit_test/Test_Blas1_team_setscal.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_team_setscal.hpp rename to blas/unit_test/Test_Blas1_team_setscal.hpp diff --git a/unit_test/blas/Test_Blas1_team_update.hpp b/blas/unit_test/Test_Blas1_team_update.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_team_update.hpp rename to blas/unit_test/Test_Blas1_team_update.hpp diff --git a/unit_test/blas/Test_Blas1_update.hpp b/blas/unit_test/Test_Blas1_update.hpp similarity index 100% rename from unit_test/blas/Test_Blas1_update.hpp rename to blas/unit_test/Test_Blas1_update.hpp diff --git a/unit_test/blas/Test_Blas2_gemv.hpp b/blas/unit_test/Test_Blas2_gemv.hpp similarity index 100% rename from unit_test/blas/Test_Blas2_gemv.hpp rename to blas/unit_test/Test_Blas2_gemv.hpp diff --git a/unit_test/blas/Test_Blas2_gemv_util.hpp b/blas/unit_test/Test_Blas2_gemv_util.hpp similarity index 100% rename from unit_test/blas/Test_Blas2_gemv_util.hpp rename to blas/unit_test/Test_Blas2_gemv_util.hpp diff --git a/unit_test/blas/Test_Blas2_serial_gemv.hpp b/blas/unit_test/Test_Blas2_serial_gemv.hpp similarity index 100% rename from unit_test/blas/Test_Blas2_serial_gemv.hpp rename to blas/unit_test/Test_Blas2_serial_gemv.hpp diff --git a/unit_test/blas/Test_Blas2_team_gemv.hpp b/blas/unit_test/Test_Blas2_team_gemv.hpp similarity index 100% rename from unit_test/blas/Test_Blas2_team_gemv.hpp rename to blas/unit_test/Test_Blas2_team_gemv.hpp diff --git a/unit_test/blas/Test_Blas2_teamvector_gemv.hpp b/blas/unit_test/Test_Blas2_teamvector_gemv.hpp similarity index 100% rename from unit_test/blas/Test_Blas2_teamvector_gemv.hpp rename to blas/unit_test/Test_Blas2_teamvector_gemv.hpp diff --git a/unit_test/blas/Test_Blas3_gemm.hpp b/blas/unit_test/Test_Blas3_gemm.hpp similarity index 100% rename from unit_test/blas/Test_Blas3_gemm.hpp rename to blas/unit_test/Test_Blas3_gemm.hpp diff --git a/unit_test/blas/Test_Blas3_trmm.hpp b/blas/unit_test/Test_Blas3_trmm.hpp similarity index 100% rename from unit_test/blas/Test_Blas3_trmm.hpp rename to blas/unit_test/Test_Blas3_trmm.hpp diff --git a/unit_test/blas/Test_Blas3_trsm.hpp b/blas/unit_test/Test_Blas3_trsm.hpp similarity index 100% rename from unit_test/blas/Test_Blas3_trsm.hpp rename to blas/unit_test/Test_Blas3_trsm.hpp diff --git a/unit_test/blas/Test_Blas_Newton.hpp b/blas/unit_test/Test_Blas_Newton.hpp similarity index 100% rename from unit_test/blas/Test_Blas_Newton.hpp rename to blas/unit_test/Test_Blas_Newton.hpp diff --git a/unit_test/blas/Test_Blas_gesv.hpp b/blas/unit_test/Test_Blas_gesv.hpp similarity index 100% rename from unit_test/blas/Test_Blas_gesv.hpp rename to blas/unit_test/Test_Blas_gesv.hpp diff --git a/unit_test/blas/Test_Blas_rocblas.hpp b/blas/unit_test/Test_Blas_rocblas.hpp similarity index 100% rename from unit_test/blas/Test_Blas_rocblas.hpp rename to blas/unit_test/Test_Blas_rocblas.hpp diff --git a/unit_test/blas/Test_Blas_serial_axpy.hpp b/blas/unit_test/Test_Blas_serial_axpy.hpp similarity index 100% rename from unit_test/blas/Test_Blas_serial_axpy.hpp rename to blas/unit_test/Test_Blas_serial_axpy.hpp diff --git a/unit_test/blas/Test_Blas_serial_nrm2.hpp b/blas/unit_test/Test_Blas_serial_nrm2.hpp similarity index 100% rename from unit_test/blas/Test_Blas_serial_nrm2.hpp rename to blas/unit_test/Test_Blas_serial_nrm2.hpp diff --git a/unit_test/blas/Test_Blas_trtri.hpp b/blas/unit_test/Test_Blas_trtri.hpp similarity index 100% rename from unit_test/blas/Test_Blas_trtri.hpp rename to blas/unit_test/Test_Blas_trtri.hpp diff --git a/unit_test/cuda/Test_Cuda_Blas.cpp b/blas/unit_test/backends/Test_Cuda_Blas.cpp similarity index 100% rename from unit_test/cuda/Test_Cuda_Blas.cpp rename to blas/unit_test/backends/Test_Cuda_Blas.cpp diff --git a/unit_test/hip/Test_HIP_Blas.cpp b/blas/unit_test/backends/Test_HIP_Blas.cpp similarity index 100% rename from unit_test/hip/Test_HIP_Blas.cpp rename to blas/unit_test/backends/Test_HIP_Blas.cpp diff --git a/unit_test/openmptarget/Test_OpenMPTarget_Blas.cpp b/blas/unit_test/backends/Test_OpenMPTarget_Blas.cpp similarity index 100% rename from unit_test/openmptarget/Test_OpenMPTarget_Blas.cpp rename to blas/unit_test/backends/Test_OpenMPTarget_Blas.cpp diff --git a/unit_test/openmp/Test_OpenMP_Blas.cpp b/blas/unit_test/backends/Test_OpenMP_Blas.cpp similarity index 100% rename from unit_test/openmp/Test_OpenMP_Blas.cpp rename to blas/unit_test/backends/Test_OpenMP_Blas.cpp diff --git a/unit_test/sycl/Test_SYCL_Blas.cpp b/blas/unit_test/backends/Test_SYCL_Blas.cpp similarity index 100% rename from unit_test/sycl/Test_SYCL_Blas.cpp rename to blas/unit_test/backends/Test_SYCL_Blas.cpp diff --git a/unit_test/serial/Test_Serial_Blas.cpp b/blas/unit_test/backends/Test_Serial_Blas.cpp similarity index 100% rename from unit_test/serial/Test_Serial_Blas.cpp rename to blas/unit_test/backends/Test_Serial_Blas.cpp diff --git a/unit_test/threads/Test_Threads_Blas.cpp b/blas/unit_test/backends/Test_Threads_Blas.cpp similarity index 100% rename from unit_test/threads/Test_Threads_Blas.cpp rename to blas/unit_test/backends/Test_Threads_Blas.cpp diff --git a/cmake/kokkoskernels_components.cmake b/cmake/kokkoskernels_components.cmake index deb968761d..cbf62457a0 100644 --- a/cmake/kokkoskernels_components.cmake +++ b/cmake/kokkoskernels_components.cmake @@ -19,11 +19,22 @@ KOKKOSKERNELS_ADD_OPTION( "Whether to build the batched component. Default: OFF" ) +# BLAS only depends on COMMON which +# is always enabled so nothing more needs +# to be enabled for this component. +KOKKOSKERNELS_ADD_OPTION( + "ENABLE_BLAS" + OFF + BOOL + "Whether to build the blas component. Default: OFF" +) + + # The user requested individual components, # the assumption is that a full build is not # desired and ENABLE_ALL_COMPONENETS is turned # off. -IF (KokkosKernels_ENABLE_BATCHED) +IF (KokkosKernels_ENABLE_BATCHED OR KokkosKernels_ENABLE_BLAS) SET(KokkosKernels_ENABLE_ALL_COMPONENTS OFF) ENDIF() @@ -35,10 +46,12 @@ ENDIF() # build. IF (KokkosKernels_ENABLE_ALL_COMPONENTS) SET(KokkosKernels_ENABLE_BATCHED ON) + SET(KokkosKernels_ENABLE_BLAS ON) SET(KokkosKernels_ENABLE_REMAINDER ON) ENDIF() MESSAGE("Kokkos Kernels components") MESSAGE(" COMMON: ON") MESSAGE(" BATCHED: ${KokkosKernels_ENABLE_BATCHED}") +MESSAGE(" BLAS: ${KokkosKernels_ENABLE_BLAS}") MESSAGE(" REMAINDER: ${KokkosKernels_ENABLE_REMAINDER}") diff --git a/src/impl/KokkosKernels_helpers.hpp b/common/KokkosKernels_helpers.hpp similarity index 100% rename from src/impl/KokkosKernels_helpers.hpp rename to common/KokkosKernels_helpers.hpp diff --git a/perf_test/blas/blas1/KokkosBlas_dot_mv_perf_test.cpp b/perf_test/blas/blas1/KokkosBlas_dot_mv_perf_test.cpp index 7b353cf160..a9d3ef3a05 100644 --- a/perf_test/blas/blas1/KokkosBlas_dot_mv_perf_test.cpp +++ b/perf_test/blas/blas1/KokkosBlas_dot_mv_perf_test.cpp @@ -43,7 +43,7 @@ */ #include -#include +#include #include #include "KokkosKernels_TestUtils.hpp" diff --git a/perf_test/blas/blas1/KokkosBlas_dot_perf_test.cpp b/perf_test/blas/blas1/KokkosBlas_dot_perf_test.cpp index 50840ddea6..00af807374 100644 --- a/perf_test/blas/blas1/KokkosBlas_dot_perf_test.cpp +++ b/perf_test/blas/blas1/KokkosBlas_dot_perf_test.cpp @@ -43,7 +43,6 @@ */ #include -#include #include // For RPS implementation diff --git a/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp b/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp index c98749c2ff..0c1944c754 100644 --- a/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp +++ b/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp @@ -6,7 +6,7 @@ #define KOKKOSKERNELS_KOKKOSBLAS_DOT_TEST_RPS_HPP #include -#include "blas/KokkosBlas1_dot.hpp" +#include "src/KokkosBlas1_dot.hpp" #include // These headers are required for RPS perf test implementation diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7b8553cfa6..46de1bd936 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,8 +9,6 @@ LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/impl) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/src/impl) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/blas) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/blas/impl) #Include Sparse LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/sparse) @@ -20,255 +18,12 @@ LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/sparse/impl) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/graph) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/graph/impl) -#Include batched -# LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched) -# LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/dense) -# LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/dense/impl) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/sparse) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/batched/sparse/impl) -# #Include Common -# LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/common) -# LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/impl) - - -#Include BLAS, Blas host wrapper -IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL) - #Do NOT add this to include path - APPEND_GLOB(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/impl/tpls/KokkosBlas_Host_tpl.cpp) -ENDIF() - -include(src/cmake/kokkoskernels_eti.cmake) -SET(ETI_HEADERS) #Build up a list of DECL, AVAIL, and INST macros #that should be instantiated based on input options #Generate @X@ variables in the template X.hpp.in and X.cpp.in #files containing the list of all needed macros -KOKKOSKERNELS_GENERATE_ETI(Blas1_abs abs - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_abs_mv abs - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_scal scal - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_scal_mv scal - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_dot dot - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_dot_mv dot - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas_gesv gesv - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_axpby axpby - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_axpby_mv axpby - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_update update - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_update_mv update - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_sum sum - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_sum_mv sum - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_nrm1 nrm1 - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_nrm1_mv nrm1 - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_nrm2w nrm2w - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_nrm2w_mv nrm2w - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_nrminf nrminf - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_nrminf_mv nrminf - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_iamax iamax - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_iamax_mv iamax - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_nrm2 nrm2 - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_nrm2_mv nrm2 - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_mult mult - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_mult_mv mult - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_reciprocal reciprocal - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas1_reciprocal_mv reciprocal - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas2_gemv gemv - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas3_gemm gemm - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas3_trsm trsm - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas3_trmm trmm - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Blas_trtri trtri - COMPONENTS blas - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS LAYOUTS DEVICES -) - KOKKOSKERNELS_GENERATE_ETI(Sparse_sptrsv_solve sptrsv_solve COMPONENTS sparse HEADER_LIST ETI_HEADERS @@ -422,8 +177,5 @@ LIST(APPEND HEADERS ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}_config.h) #Add a few other utility files LIST(APPEND SOURCES - src/impl/tpls/KokkosBlas_Host_tpl.cpp - src/impl/tpls/KokkosBlas_Cuda_tpl.cpp - src/impl/tpls/KokkosBlas_Rocm_tpl.cpp src/impl/tpls/KokkosKernels_tpl_handles.cpp ) diff --git a/unit_test/CMakeLists.txt b/unit_test/CMakeLists.txt index 9bf1eabcc0..7871f41426 100644 --- a/unit_test/CMakeLists.txt +++ b/unit_test/CMakeLists.txt @@ -19,14 +19,6 @@ IF (KOKKOS_ENABLE_CUDA) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/cuda) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/cuda) - KOKKOSKERNELS_ADD_UNIT_TEST( - blas_cuda - SOURCES - Test_Main.cpp - cuda/Test_Cuda_Blas.cpp - COMPONENTS blas - ) - KOKKOSKERNELS_ADD_UNIT_TEST( sparse_cuda SOURCES @@ -48,14 +40,6 @@ IF (KOKKOS_ENABLE_SYCL) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/sycl) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/sycl) - KOKKOSKERNELS_ADD_UNIT_TEST( - blas_sycl - SOURCES - Test_Main.cpp - sycl/Test_SYCL_Blas.cpp - COMPONENTS blas - ) - KOKKOSKERNELS_ADD_UNIT_TEST( sparse_sycl SOURCES @@ -77,14 +61,6 @@ IF (KOKKOS_ENABLE_HIP) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/hip) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/hip) - KOKKOSKERNELS_ADD_UNIT_TEST( - blas_hip - SOURCES - Test_Main.cpp - hip/Test_HIP_Blas.cpp - COMPONENTS blas - ) - KOKKOSKERNELS_ADD_UNIT_TEST( sparse_hip SOURCES @@ -106,14 +82,6 @@ IF (KOKKOS_ENABLE_OPENMPTARGET) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/openmp_target) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/openmptarget) - KOKKOSKERNELS_ADD_UNIT_TEST( - blas_openmptarget - SOURCES - Test_Main.cpp - openmptarget/Test_OpenMPTarget_Blas.cpp - COMPONENTS blas - ) - KOKKOSKERNELS_ADD_UNIT_TEST( graph_openmptarget SOURCES @@ -127,14 +95,6 @@ IF (KOKKOS_ENABLE_OPENMP) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/openmp) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/openmp) - KOKKOSKERNELS_ADD_UNIT_TEST( - blas_openmp - SOURCES - Test_Main.cpp - openmp/Test_OpenMP_Blas.cpp - COMPONENTS blas - ) - KOKKOSKERNELS_ADD_UNIT_TEST( sparse_openmp SOURCES @@ -160,14 +120,6 @@ IF (KOKKOS_ENABLE_SERIAL) # SET(DISABLE_SLOW_DGEMM_DOUBLE_TEST "--gtest_filter=-serial.gemm_double") # ENDIF() - KOKKOSKERNELS_ADD_UNIT_TEST( - blas_serial - SOURCES - Test_Main.cpp - serial/Test_Serial_Blas.cpp - COMPONENTS blas - ) - KOKKOSKERNELS_ADD_UNIT_TEST( sparse_serial SOURCES @@ -189,14 +141,6 @@ IF (KOKKOS_ENABLE_THREADS) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/threads) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/threads) - KOKKOSKERNELS_ADD_UNIT_TEST( - blas_threads - SOURCES - Test_Main.cpp - threads/Test_Threads_Blas.cpp - COMPONENTS blas - ) - KOKKOSKERNELS_ADD_UNIT_TEST( sparse_threads SOURCES diff --git a/unit_test/sparse/Test_Sparse_Utils.hpp b/unit_test/sparse/Test_Sparse_Utils.hpp index 7b1c605b71..7c96dfe74e 100644 --- a/unit_test/sparse/Test_Sparse_Utils.hpp +++ b/unit_test/sparse/Test_Sparse_Utils.hpp @@ -65,6 +65,6 @@ vector_t create_random_y_vector_mv(crsMat_t crsMat, vector_t x_vector) { return y_vector; } -} +} // namespace Test -#endif // TEST_SPARSE_UTILS_HPP +#endif // TEST_SPARSE_UTILS_HPP From d1ac4fc7e7534e39395f13472e1a0cebc4eec8a6 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Tue, 30 Aug 2022 11:48:00 -0600 Subject: [PATCH 077/226] Modular build: adding sparse and graph to modular build Even though these two are not that modular at the moment, it might be possible to do better down the road with some thoughts... --- CMakeLists.txt | 33 +++++-- batched/dense/unit_test/CMakeLists.txt | 14 +-- batched/sparse/unit_test/CMakeLists.txt | 14 +-- blas/unit_test/CMakeLists.txt | 14 +-- cmake/kokkoskernels_components.cmake | 37 +++++++- common/unit_test/CMakeLists.txt | 14 +-- graph/CMakeLists.txt | 25 +++++ .../impl/KokkosGraph_BFS_impl.hpp | 0 .../impl/KokkosGraph_Distance1Color_impl.hpp | 0 .../impl/KokkosGraph_Distance2Color_impl.hpp | 0 .../impl/KokkosGraph_Distance2MIS_impl.hpp | 0 .../KokkosGraph_ExplicitCoarsening_impl.hpp | 0 .../impl/KokkosGraph_color_d1_spec.hpp | 0 .../src}/KokkosGraph_CoarsenConstruct.hpp | 0 .../src}/KokkosGraph_CoarsenHeuristics.hpp | 0 .../src}/KokkosGraph_Distance1Color.hpp | 0 .../src}/KokkosGraph_Distance1ColorHandle.hpp | 0 .../src}/KokkosGraph_Distance2Color.hpp | 0 .../src}/KokkosGraph_Distance2ColorHandle.hpp | 0 .../src}/KokkosGraph_ExplicitCoarsening.hpp | 0 .../src}/KokkosGraph_GraphColorHandle.hpp | 0 {src/graph => graph/src}/KokkosGraph_MIS2.hpp | 0 {src/graph => graph/src}/KokkosGraph_RCM.hpp | 0 .../src}/KokkosGraph_Triangle.hpp | 0 .../src}/KokkosGraph_graph_color.hpp | 0 {src/graph => graph/src}/README.txt | 0 graph/unit_test/CMakeLists.txt | 94 ++++++++++++++++++ .../graph => graph/unit_test}/Test_Graph.hpp | 0 .../unit_test}/Test_Graph_coarsen.hpp | 0 .../unit_test}/Test_Graph_graph_color.hpp | 0 .../Test_Graph_graph_color_deterministic.hpp | 0 .../Test_Graph_graph_color_distance2.hpp | 0 .../unit_test}/Test_Graph_mis2.hpp | 0 .../unit_test}/Test_Graph_rcm.hpp | 0 .../unit_test/backends}/Test_Cuda_Graph.cpp | 0 .../unit_test/backends}/Test_HIP_Graph.cpp | 0 .../backends}/Test_OpenMPTarget_Graph.cpp | 0 .../unit_test/backends}/Test_OpenMP_Graph.cpp | 0 .../unit_test/backends}/Test_SYCL_Graph.cpp | 0 .../unit_test/backends}/Test_Serial_Graph.cpp | 0 .../backends}/Test_Threads_Graph.cpp | 0 {src => sparse}/CMakeLists.txt | 55 +++++------ .../impl/KokkosSparse_bspgemm_impl.hpp | 0 .../impl/KokkosSparse_bspgemm_impl_def.hpp | 0 .../impl/KokkosSparse_bspgemm_impl_kkmem.hpp | 0 .../impl/KokkosSparse_bspgemm_impl_seq.hpp | 0 .../impl/KokkosSparse_bspgemm_impl_speed.hpp | 0 .../KokkosSparse_bspgemm_numeric_spec.hpp | 0 ...KokkosSparse_cluster_gauss_seidel_impl.hpp | 0 .../impl/KokkosSparse_gauss_seidel_impl.hpp | 0 .../impl/KokkosSparse_gauss_seidel_spec.hpp | 0 ...kkosSparse_getDiagCopyWithOffsets_impl.hpp | 0 .../impl/KokkosSparse_partitioning_impl.hpp | 0 .../impl/KokkosSparse_sor_sequential_impl.hpp | 0 .../impl/KokkosSparse_spadd_numeric_impl.hpp | 0 .../impl/KokkosSparse_spadd_numeric_spec.hpp | 0 .../impl/KokkosSparse_spadd_symbolic_impl.hpp | 0 .../impl/KokkosSparse_spadd_symbolic_spec.hpp | 0 .../impl/KokkosSparse_spgemm_CUSP_impl.hpp | 0 .../KokkosSparse_spgemm_cuSPARSE_impl.hpp | 0 .../impl/KokkosSparse_spgemm_imp_outer.hpp | 0 .../impl/KokkosSparse_spgemm_impl.hpp | 0 .../impl/KokkosSparse_spgemm_impl_color.hpp | 0 .../KokkosSparse_spgemm_impl_compression.hpp | 0 .../impl/KokkosSparse_spgemm_impl_def.hpp | 0 .../impl/KokkosSparse_spgemm_impl_kkmem.hpp | 0 .../KokkosSparse_spgemm_impl_memaccess.hpp | 0 .../impl/KokkosSparse_spgemm_impl_seq.hpp | 0 .../impl/KokkosSparse_spgemm_impl_speed.hpp | 0 .../KokkosSparse_spgemm_impl_symbolic.hpp | 0 .../KokkosSparse_spgemm_impl_triangle.hpp | 0 ...se_spgemm_impl_triangle_no_compression.hpp | 0 ...kkosSparse_spgemm_jacobi_denseacc_impl.hpp | 0 .../KokkosSparse_spgemm_jacobi_seq_impl.hpp | 0 ...kosSparse_spgemm_jacobi_sparseacc_impl.hpp | 0 .../impl/KokkosSparse_spgemm_jacobi_spec.hpp | 0 .../KokkosSparse_spgemm_mkl2phase_impl.hpp | 0 .../impl/KokkosSparse_spgemm_mkl_impl.hpp | 0 .../impl/KokkosSparse_spgemm_numeric_spec.hpp | 0 .../KokkosSparse_spgemm_symbolic_spec.hpp | 0 .../KokkosSparse_spgemm_viennaCL_impl.hpp | 0 .../impl/KokkosSparse_spiluk_numeric_impl.hpp | 0 .../impl/KokkosSparse_spiluk_numeric_spec.hpp | 0 .../KokkosSparse_spiluk_symbolic_impl.hpp | 0 .../KokkosSparse_spiluk_symbolic_spec.hpp | 0 .../impl/KokkosSparse_spmv_bsrmatrix_impl.hpp | 0 .../impl/KokkosSparse_spmv_bsrmatrix_spec.hpp | 0 .../impl/KokkosSparse_spmv_impl.hpp | 0 .../impl/KokkosSparse_spmv_impl_omp.hpp | 0 .../impl/KokkosSparse_spmv_spec.hpp | 0 .../impl/KokkosSparse_spmv_struct_impl.hpp | 0 .../impl/KokkosSparse_spmv_struct_spec.hpp | 0 .../KokkosSparse_sptrsv_cuSPARSE_impl.hpp | 0 .../impl/KokkosSparse_sptrsv_solve_impl.hpp | 0 .../impl/KokkosSparse_sptrsv_solve_spec.hpp | 0 .../KokkosSparse_sptrsv_symbolic_impl.hpp | 0 .../KokkosSparse_sptrsv_symbolic_spec.hpp | 0 .../impl/KokkosSparse_trsv_impl.hpp | 0 .../impl/KokkosSparse_trsv_spec.hpp | 0 ...okkosSparse_twostage_gauss_seidel_impl.hpp | 0 .../src}/KokkosKernels_Controls.hpp | 0 .../src}/KokkosKernels_Handle.hpp | 0 {src/sparse => sparse/src}/KokkosSparse.hpp | 0 .../src}/KokkosSparse_BsrMatrix.hpp | 0 .../src}/KokkosSparse_CrsMatrix.hpp | 0 .../src}/KokkosSparse_IOUtils.hpp | 0 .../src}/KokkosSparse_OrdinalTraits.hpp | 0 .../src}/KokkosSparse_SortCrs.hpp | 0 .../src}/KokkosSparse_Utils.hpp | 0 .../src}/KokkosSparse_Utils_cusparse.hpp | 0 .../src}/KokkosSparse_Utils_mkl.hpp | 0 .../src}/KokkosSparse_Utils_rocsparse.hpp | 0 .../src}/KokkosSparse_csc2csr.hpp | 0 .../src}/KokkosSparse_findRelOffset.hpp | 0 .../src}/KokkosSparse_gauss_seidel.hpp | 0 .../src}/KokkosSparse_gauss_seidel_handle.hpp | 0 .../src}/KokkosSparse_getDiagCopy.hpp | 0 .../src}/KokkosSparse_spadd.hpp | 0 .../src}/KokkosSparse_spadd_handle.hpp | 0 .../src}/KokkosSparse_spgemm.hpp | 0 .../src}/KokkosSparse_spgemm_handle.hpp | 0 .../src}/KokkosSparse_spgemm_jacobi.hpp | 0 .../src}/KokkosSparse_spgemm_numeric.hpp | 0 .../src}/KokkosSparse_spgemm_symbolic.hpp | 0 .../src}/KokkosSparse_spiluk.hpp | 0 .../src}/KokkosSparse_spiluk_handle.hpp | 0 .../src}/KokkosSparse_spmv.hpp | 0 .../src}/KokkosSparse_sptrsv.hpp | 0 .../src}/KokkosSparse_sptrsv_cholmod.hpp | 0 .../src}/KokkosSparse_sptrsv_handle.hpp | 0 .../src}/KokkosSparse_sptrsv_superlu.hpp | 0 .../src}/KokkosSparse_sptrsv_supernode.hpp | 0 .../src}/KokkosSparse_trsv.hpp | 0 sparse/unit_test/CMakeLists.txt | 95 +++++++++++++++++++ .../unit_test}/Test_Sparse.hpp | 0 .../unit_test}/Test_Sparse_BsrMatrix.hpp | 0 .../unit_test}/Test_Sparse_Controls.hpp | 0 .../unit_test}/Test_Sparse_CrsMatrix.hpp | 0 .../unit_test}/Test_Sparse_SortCrs.hpp | 0 .../Test_Sparse_TestUtils_RandCscMat.hpp | 0 .../unit_test}/Test_Sparse_Transpose.hpp | 0 .../unit_test}/Test_Sparse_Utils.hpp | 0 .../unit_test}/Test_Sparse_Utils_cusparse.hpp | 0 .../Test_Sparse_block_gauss_seidel.hpp | 0 .../unit_test}/Test_Sparse_bspgemm.hpp | 0 .../unit_test}/Test_Sparse_csc2csr.hpp | 0 .../unit_test}/Test_Sparse_findRelOffset.hpp | 0 .../unit_test}/Test_Sparse_gauss_seidel.hpp | 0 .../unit_test}/Test_Sparse_replaceSumInto.hpp | 0 .../Test_Sparse_replaceSumIntoLonger.hpp | 0 .../unit_test}/Test_Sparse_rocsparse.hpp | 0 .../unit_test}/Test_Sparse_spadd.hpp | 0 .../unit_test}/Test_Sparse_spgemm.hpp | 0 .../unit_test}/Test_Sparse_spgemm_jacobi.hpp | 0 .../unit_test}/Test_Sparse_spiluk.hpp | 0 .../unit_test}/Test_Sparse_spmv.hpp | 0 .../unit_test}/Test_Sparse_spmv_bsr.hpp | 0 .../unit_test}/Test_Sparse_sptrsv.hpp | 0 .../unit_test}/Test_Sparse_trsv.hpp | 0 .../unit_test/backends}/Test_Cuda_Sparse.cpp | 0 .../unit_test/backends}/Test_HIP_Sparse.cpp | 0 .../backends}/Test_OpenMPTarget_Sparse.cpp | 0 .../backends}/Test_OpenMP_Sparse.cpp | 0 .../unit_test/backends}/Test_SYCL_Sparse.cpp | 0 .../backends}/Test_Serial_Sparse.cpp | 0 .../backends}/Test_Threads_Sparse.cpp | 0 .../unit_test}/matrixIssue402.hpp | 0 {unit_test => test_common}/Test_Main.cpp | 0 unit_test/CMakeLists.txt | 6 -- unit_test/README | 5 - 170 files changed, 323 insertions(+), 83 deletions(-) create mode 100644 graph/CMakeLists.txt rename {src/graph => graph}/impl/KokkosGraph_BFS_impl.hpp (100%) rename {src/graph => graph}/impl/KokkosGraph_Distance1Color_impl.hpp (100%) rename {src/graph => graph}/impl/KokkosGraph_Distance2Color_impl.hpp (100%) rename {src/graph => graph}/impl/KokkosGraph_Distance2MIS_impl.hpp (100%) rename {src/graph => graph}/impl/KokkosGraph_ExplicitCoarsening_impl.hpp (100%) rename {src/graph => graph}/impl/KokkosGraph_color_d1_spec.hpp (100%) rename {src/graph => graph/src}/KokkosGraph_CoarsenConstruct.hpp (100%) rename {src/graph => graph/src}/KokkosGraph_CoarsenHeuristics.hpp (100%) rename {src/graph => graph/src}/KokkosGraph_Distance1Color.hpp (100%) rename {src/graph => graph/src}/KokkosGraph_Distance1ColorHandle.hpp (100%) rename {src/graph => graph/src}/KokkosGraph_Distance2Color.hpp (100%) rename {src/graph => graph/src}/KokkosGraph_Distance2ColorHandle.hpp (100%) rename {src/graph => graph/src}/KokkosGraph_ExplicitCoarsening.hpp (100%) rename {src/graph => graph/src}/KokkosGraph_GraphColorHandle.hpp (100%) rename {src/graph => graph/src}/KokkosGraph_MIS2.hpp (100%) rename {src/graph => graph/src}/KokkosGraph_RCM.hpp (100%) rename {src/graph => graph/src}/KokkosGraph_Triangle.hpp (100%) rename {src/graph => graph/src}/KokkosGraph_graph_color.hpp (100%) rename {src/graph => graph/src}/README.txt (100%) create mode 100644 graph/unit_test/CMakeLists.txt rename {unit_test/graph => graph/unit_test}/Test_Graph.hpp (100%) rename {unit_test/graph => graph/unit_test}/Test_Graph_coarsen.hpp (100%) rename {unit_test/graph => graph/unit_test}/Test_Graph_graph_color.hpp (100%) rename {unit_test/graph => graph/unit_test}/Test_Graph_graph_color_deterministic.hpp (100%) rename {unit_test/graph => graph/unit_test}/Test_Graph_graph_color_distance2.hpp (100%) rename {unit_test/graph => graph/unit_test}/Test_Graph_mis2.hpp (100%) rename {unit_test/graph => graph/unit_test}/Test_Graph_rcm.hpp (100%) rename {unit_test/cuda => graph/unit_test/backends}/Test_Cuda_Graph.cpp (100%) rename {unit_test/hip => graph/unit_test/backends}/Test_HIP_Graph.cpp (100%) rename {unit_test/openmptarget => graph/unit_test/backends}/Test_OpenMPTarget_Graph.cpp (100%) rename {unit_test/openmp => graph/unit_test/backends}/Test_OpenMP_Graph.cpp (100%) rename {unit_test/sycl => graph/unit_test/backends}/Test_SYCL_Graph.cpp (100%) rename {unit_test/serial => graph/unit_test/backends}/Test_Serial_Graph.cpp (100%) rename {unit_test/threads => graph/unit_test/backends}/Test_Threads_Graph.cpp (100%) rename {src => sparse}/CMakeLists.txt (79%) rename {src/sparse => sparse}/impl/KokkosSparse_bspgemm_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_bspgemm_impl_def.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_bspgemm_impl_kkmem.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_bspgemm_impl_seq.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_bspgemm_impl_speed.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_bspgemm_numeric_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_gauss_seidel_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_gauss_seidel_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_getDiagCopyWithOffsets_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_partitioning_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_sor_sequential_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spadd_numeric_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spadd_numeric_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spadd_symbolic_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spadd_symbolic_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_CUSP_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_imp_outer.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_impl_color.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_impl_compression.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_impl_def.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_impl_kkmem.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_impl_memaccess.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_impl_seq.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_impl_speed.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_impl_symbolic.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_impl_triangle.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_impl_triangle_no_compression.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_jacobi_denseacc_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_jacobi_seq_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_jacobi_sparseacc_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_jacobi_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_mkl2phase_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_mkl_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_numeric_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_symbolic_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_viennaCL_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spiluk_numeric_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spiluk_numeric_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spiluk_symbolic_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spiluk_symbolic_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spmv_bsrmatrix_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spmv_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spmv_impl_omp.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spmv_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spmv_struct_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_spmv_struct_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_sptrsv_solve_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_sptrsv_solve_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_sptrsv_symbolic_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_sptrsv_symbolic_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_trsv_impl.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_trsv_spec.hpp (100%) rename {src/sparse => sparse}/impl/KokkosSparse_twostage_gauss_seidel_impl.hpp (100%) rename {src/sparse => sparse/src}/KokkosKernels_Controls.hpp (100%) rename {src/sparse => sparse/src}/KokkosKernels_Handle.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_BsrMatrix.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_CrsMatrix.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_IOUtils.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_OrdinalTraits.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_SortCrs.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_Utils.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_Utils_cusparse.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_Utils_mkl.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_Utils_rocsparse.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_csc2csr.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_findRelOffset.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_gauss_seidel.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_gauss_seidel_handle.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_getDiagCopy.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_spadd.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_spadd_handle.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_spgemm.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_spgemm_handle.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_spgemm_jacobi.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_spgemm_numeric.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_spgemm_symbolic.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_spiluk.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_spiluk_handle.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_spmv.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_sptrsv.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_sptrsv_cholmod.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_sptrsv_handle.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_sptrsv_superlu.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_sptrsv_supernode.hpp (100%) rename {src/sparse => sparse/src}/KokkosSparse_trsv.hpp (100%) create mode 100644 sparse/unit_test/CMakeLists.txt rename {unit_test/sparse => sparse/unit_test}/Test_Sparse.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_BsrMatrix.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_Controls.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_CrsMatrix.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_SortCrs.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_TestUtils_RandCscMat.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_Transpose.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_Utils.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_Utils_cusparse.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_block_gauss_seidel.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_bspgemm.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_csc2csr.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_findRelOffset.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_gauss_seidel.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_replaceSumInto.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_replaceSumIntoLonger.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_rocsparse.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_spadd.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_spgemm.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_spgemm_jacobi.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_spiluk.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_spmv.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_spmv_bsr.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_sptrsv.hpp (100%) rename {unit_test/sparse => sparse/unit_test}/Test_Sparse_trsv.hpp (100%) rename {unit_test/cuda => sparse/unit_test/backends}/Test_Cuda_Sparse.cpp (100%) rename {unit_test/hip => sparse/unit_test/backends}/Test_HIP_Sparse.cpp (100%) rename {unit_test/openmptarget => sparse/unit_test/backends}/Test_OpenMPTarget_Sparse.cpp (100%) rename {unit_test/openmp => sparse/unit_test/backends}/Test_OpenMP_Sparse.cpp (100%) rename {unit_test/sycl => sparse/unit_test/backends}/Test_SYCL_Sparse.cpp (100%) rename {unit_test/serial => sparse/unit_test/backends}/Test_Serial_Sparse.cpp (100%) rename {unit_test/threads => sparse/unit_test/backends}/Test_Threads_Sparse.cpp (100%) rename {unit_test/sparse => sparse/unit_test}/matrixIssue402.hpp (100%) rename {unit_test => test_common}/Test_Main.cpp (100%) delete mode 100644 unit_test/README diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a590a52af..d3d3938722 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,8 +121,11 @@ IF (KokkosKernels_INSTALL_TESTING) IF (KokkosKernels_ENABLE_BLAS) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(blas/unit_test) ENDIF() - IF(KokkosKernels_ENABLE_REMAINDER) - KOKKOSKERNELS_ADD_TEST_DIRECTORIES(unit_test) + IF (KokkosKernels_ENABLE_GRAPH) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(graph/unit_test) + ENDIF() + IF (KokkosKernels_ENABLE_SPARSE) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(sparse/unit_test) ENDIF() KOKKOSKERNELS_ADD_EXAMPLE_DIRECTORIES(example) ELSE() @@ -256,13 +259,17 @@ ELSE() include(src/cmake/kokkoskernels_eti.cmake) SET(ETI_HEADERS) + # Add some common files and directories that we always require + # for TPLs, ETI, etc... + LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src) + LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/impl/tpls) + LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/src/impl) + LIST(APPEND HEADERS ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}_config.h) + # Only enable requested components # if nothing requested, build everything # to recover original behavior. INCLUDE(cmake/kokkoskernels_components.cmake) - LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src) - LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/impl/tpls) - LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/src/impl) INCLUDE(common/CMakeLists.txt) IF (KokkosKernels_ENABLE_BATCHED) INCLUDE(batched/CMakeLists.txt) @@ -270,8 +277,11 @@ ELSE() IF (KokkosKernels_ENABLE_BLAS) INCLUDE(blas/CMakeLists.txt) ENDIF() - IF (KokkosKernels_ENABLE_REMAINDER) - INCLUDE(src/CMakeLists.txt) + IF (KokkosKernels_ENABLE_GRAPH) + INCLUDE(graph/CMakeLists.txt) + ENDIF() + IF (KokkosKernels_ENABLE_SPARSE) + INCLUDE(sparse/CMakeLists.txt) ENDIF() FOREACH(DIR ${KK_INCLUDE_DIRS}) @@ -373,9 +383,14 @@ ELSE() IF (KokkosKernels_ENABLE_BLAS) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(blas/unit_test) ENDIF() - IF (KokkosKernels_ENABLE_REMAINDER) + IF (KokkosKernels_ENABLE_GRAPH) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(graph/unit_test) + ENDIF() + IF (KokkosKernels_ENABLE_SPARSE) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(sparse/unit_test) + ENDIF() + IF (KokkosKernels_ENABLE_ALL_COMPONENTS) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(perf_test) - KOKKOSKERNELS_ADD_TEST_DIRECTORIES(unit_test) KOKKOSKERNELS_ADD_EXAMPLE_DIRECTORIES(example) ENDIF() diff --git a/batched/dense/unit_test/CMakeLists.txt b/batched/dense/unit_test/CMakeLists.txt index e8119fd5a1..ca4d559c61 100644 --- a/batched/dense/unit_test/CMakeLists.txt +++ b/batched/dense/unit_test/CMakeLists.txt @@ -41,7 +41,7 @@ IF (KOKKOS_ENABLE_CUDA) KOKKOSKERNELS_ADD_UNIT_TEST( batched_dla_cuda SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_Cuda_Batched_Dense.cpp COMPONENTS batched_dla ) @@ -51,7 +51,7 @@ IF (KOKKOS_ENABLE_HIP) KOKKOSKERNELS_ADD_UNIT_TEST( batched_dla_hip SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_HIP_Batched_Dense.cpp COMPONENTS batched_dla ) @@ -61,7 +61,7 @@ IF (KOKKOS_ENABLE_SYCL) KOKKOSKERNELS_ADD_UNIT_TEST( batched_dla_sycl SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_SYCL_Batched_Dense.cpp COMPONENTS batched_dla ) @@ -71,7 +71,7 @@ IF (KOKKOS_ENABLE_OPENMPTARGET) # KOKKOSKERNELS_ADD_UNIT_TEST( # batched_dla_openmptarget # SOURCES - # ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + # ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp # backends/Test_OpenMPTarget_Batched_Dense.cpp # COMPONENTS batched_dla # ) @@ -88,7 +88,7 @@ IF (KOKKOS_ENABLE_SERIAL) KOKKOSKERNELS_ADD_UNIT_TEST( batched_dla_serial SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_Serial_Batched_Dense.cpp COMPONENTS batched_dla ) @@ -98,7 +98,7 @@ IF (KOKKOS_ENABLE_OPENMP) KOKKOSKERNELS_ADD_UNIT_TEST( batched_dla_openmp SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_OpenMP_Batched_Dense.cpp COMPONENTS batched_dla ) @@ -108,7 +108,7 @@ IF (KOKKOS_ENABLE_THREADS) KOKKOSKERNELS_ADD_UNIT_TEST( batched_dla_threads SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_Threads_Batched_Dense.cpp COMPONENTS batched_dla ) diff --git a/batched/sparse/unit_test/CMakeLists.txt b/batched/sparse/unit_test/CMakeLists.txt index 91c3a39741..1f8aae67ed 100644 --- a/batched/sparse/unit_test/CMakeLists.txt +++ b/batched/sparse/unit_test/CMakeLists.txt @@ -42,7 +42,7 @@ IF (KOKKOS_ENABLE_CUDA) KOKKOSKERNELS_ADD_UNIT_TEST( batched_sla_cuda SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_Cuda_Batched_Sparse.cpp COMPONENTS batched_sla ) @@ -52,7 +52,7 @@ IF (KOKKOS_ENABLE_HIP) KOKKOSKERNELS_ADD_UNIT_TEST( batched_sla_hip SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_HIP_Batched_Sparse.cpp COMPONENTS batched_sla ) @@ -62,7 +62,7 @@ IF (KOKKOS_ENABLE_SYCL) KOKKOSKERNELS_ADD_UNIT_TEST( batched_sla_sycl SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_SYCL_Batched_Sparse.cpp COMPONENTS batched_sla ) @@ -72,7 +72,7 @@ IF (KOKKOS_ENABLE_OPENMPTARGET) # KOKKOSKERNELS_ADD_UNIT_TEST( # batched_sla_openmptarget # SOURCES - # ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + # ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp # backends/Test_OpenMPTarget_Batched_Sparse.cpp # COMPONENTS batched_sla # ) @@ -89,7 +89,7 @@ IF (KOKKOS_ENABLE_SERIAL) KOKKOSKERNELS_ADD_UNIT_TEST( batched_sla_serial SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_Serial_Batched_Sparse.cpp COMPONENTS batched_sla ) @@ -99,7 +99,7 @@ IF (KOKKOS_ENABLE_OPENMP) KOKKOSKERNELS_ADD_UNIT_TEST( batched_sla_openmp SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_OpenMP_Batched_Sparse.cpp COMPONENTS batched_sla ) @@ -109,7 +109,7 @@ IF (KOKKOS_ENABLE_THREADS) KOKKOSKERNELS_ADD_UNIT_TEST( batched_sla_threads SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_Threads_Batched_Sparse.cpp COMPONENTS batched_sla ) diff --git a/blas/unit_test/CMakeLists.txt b/blas/unit_test/CMakeLists.txt index d114e3a82b..b0ccaf8e7e 100644 --- a/blas/unit_test/CMakeLists.txt +++ b/blas/unit_test/CMakeLists.txt @@ -19,7 +19,7 @@ IF (KOKKOS_ENABLE_CUDA) KOKKOSKERNELS_ADD_UNIT_TEST( blas_cuda SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_Cuda_Blas.cpp COMPONENTS blas ) @@ -29,7 +29,7 @@ IF (KOKKOS_ENABLE_HIP) KOKKOSKERNELS_ADD_UNIT_TEST( blas_hip SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_HIP_Blas.cpp COMPONENTS blas ) @@ -39,7 +39,7 @@ IF (KOKKOS_ENABLE_SYCL) KOKKOSKERNELS_ADD_UNIT_TEST( blas_sycl SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_SYCL_Blas.cpp COMPONENTS blas ) @@ -49,7 +49,7 @@ IF (KOKKOS_ENABLE_OPENMPTARGET) # KOKKOSKERNELS_ADD_UNIT_TEST( # blas_openmptarget # SOURCES - # ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + # ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp # backends/Test_OpenMPTarget_Blas.cpp # COMPONENTS blas # ) @@ -66,7 +66,7 @@ IF (KOKKOS_ENABLE_SERIAL) KOKKOSKERNELS_ADD_UNIT_TEST( blas_serial SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_Serial_Blas.cpp COMPONENTS blas ) @@ -76,7 +76,7 @@ IF (KOKKOS_ENABLE_OPENMP) KOKKOSKERNELS_ADD_UNIT_TEST( blas_openmp SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_OpenMP_Blas.cpp COMPONENTS blas ) @@ -86,7 +86,7 @@ IF (KOKKOS_ENABLE_THREADS) KOKKOSKERNELS_ADD_UNIT_TEST( blas_threads SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_Threads_Blas.cpp COMPONENTS blas ) diff --git a/cmake/kokkoskernels_components.cmake b/cmake/kokkoskernels_components.cmake index cbf62457a0..f96c17cf06 100644 --- a/cmake/kokkoskernels_components.cmake +++ b/cmake/kokkoskernels_components.cmake @@ -29,15 +29,42 @@ KOKKOSKERNELS_ADD_OPTION( "Whether to build the blas component. Default: OFF" ) +# SPARSE depends on everything else at the moment. +KOKKOSKERNELS_ADD_OPTION( + "ENABLE_SPARSE" + OFF + BOOL + "Whether to build the sparse component. Default: OFF" +) + +# GRAPH depends on everything else at the moment. +KOKKOSKERNELS_ADD_OPTION( + "ENABLE_GRAPH" + OFF + BOOL + "Whether to build the graph component. Default: OFF" +) # The user requested individual components, # the assumption is that a full build is not # desired and ENABLE_ALL_COMPONENETS is turned # off. -IF (KokkosKernels_ENABLE_BATCHED OR KokkosKernels_ENABLE_BLAS) +IF (KokkosKernels_ENABLE_BATCHED OR KokkosKernels_ENABLE_BLAS + OR KokkosKernels_ENABLE_GRAPH OR KokkosKernels_ENABLE_SPARSE) SET(KokkosKernels_ENABLE_ALL_COMPONENTS OFF) ENDIF() +IF (KokkosKernels_ENABLE_SPARSE) + SET(KokkosKernels_ENABLE_BATCHED ON) + SET(KokkosKernels_ENABLE_BLAS ON) + SET(KokkosKernels_ENABLE_GRAPH ON) +ENDIF() + +IF (KokkosKernels_ENABLE_GRAPH) + SET(KokkosKernels_ENABLE_BATCHED ON) + SET(KokkosKernels_ENABLE_BLAS ON) + SET(KokkosKernels_ENABLE_SPARSE ON) +ENDIF() # At this point, if ENABLE_ALL_COMPONENTS is @@ -47,11 +74,15 @@ ENDIF() IF (KokkosKernels_ENABLE_ALL_COMPONENTS) SET(KokkosKernels_ENABLE_BATCHED ON) SET(KokkosKernels_ENABLE_BLAS ON) - SET(KokkosKernels_ENABLE_REMAINDER ON) + SET(KokkosKernels_ENABLE_SPARSE ON) + SET(KokkosKernels_ENABLE_GRAPH ON) ENDIF() +MESSAGE("") MESSAGE("Kokkos Kernels components") MESSAGE(" COMMON: ON") MESSAGE(" BATCHED: ${KokkosKernels_ENABLE_BATCHED}") MESSAGE(" BLAS: ${KokkosKernels_ENABLE_BLAS}") -MESSAGE(" REMAINDER: ${KokkosKernels_ENABLE_REMAINDER}") +MESSAGE(" GRAPH: ${KokkosKernels_ENABLE_GRAPH}") +MESSAGE(" SPARSE: ${KokkosKernels_ENABLE_SPARSE}") +MESSAGE("") diff --git a/common/unit_test/CMakeLists.txt b/common/unit_test/CMakeLists.txt index f782b1aafd..c0d8fc116f 100644 --- a/common/unit_test/CMakeLists.txt +++ b/common/unit_test/CMakeLists.txt @@ -22,7 +22,7 @@ IF (KOKKOS_ENABLE_CUDA) KOKKOSKERNELS_ADD_UNIT_TEST( common_cuda SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_Cuda_Common.cpp COMPONENTS common ) @@ -32,7 +32,7 @@ IF (KOKKOS_ENABLE_HIP) KOKKOSKERNELS_ADD_UNIT_TEST( common_hip SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_HIP_Common.cpp COMPONENTS common ) @@ -42,7 +42,7 @@ IF (KOKKOS_ENABLE_SYCL) KOKKOSKERNELS_ADD_UNIT_TEST( common_sycl SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_SYCL_Common.cpp COMPONENTS common ) @@ -52,7 +52,7 @@ IF (KOKKOS_ENABLE_OPENMPTARGET) # KOKKOSKERNELS_ADD_UNIT_TEST( # common_openmptarget # SOURCES - # ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + # ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp # backends/Test_OpenMPTarget_Common.cpp # COMPONENTS common # ) @@ -69,7 +69,7 @@ IF (KOKKOS_ENABLE_SERIAL) KOKKOSKERNELS_ADD_UNIT_TEST( common_serial SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_Serial_Common.cpp COMPONENTS common ) @@ -79,7 +79,7 @@ IF (KOKKOS_ENABLE_OPENMP) KOKKOSKERNELS_ADD_UNIT_TEST( common_openmp SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_OpenMP_Common.cpp COMPONENTS common ) @@ -89,7 +89,7 @@ IF (KOKKOS_ENABLE_THREADS) KOKKOSKERNELS_ADD_UNIT_TEST( common_threads SOURCES - ${PACKAGE_SOURCE_DIR}/unit_test/Test_Main.cpp + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp backends/Test_Threads_Common.cpp COMPONENTS common ) diff --git a/graph/CMakeLists.txt b/graph/CMakeLists.txt new file mode 100644 index 0000000000..2116a226fd --- /dev/null +++ b/graph/CMakeLists.txt @@ -0,0 +1,25 @@ +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/graph/src) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/graph/impl) + + +# Adding unit-tests +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/graph) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/graph) + + +################## +# # +# ETI generation # +# # +################## + +#Build up a list of DECL, AVAIL, and INST macros +#that should be instantiated based on input options +#Generate @X@ variables in the template X.hpp.in and X.cpp.in +#files containing the list of all needed macros +KOKKOSKERNELS_GENERATE_ETI(Graph_color_d1 color_d1 + COMPONENTS graph + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES_W_SLOW_SPACE +) diff --git a/src/graph/impl/KokkosGraph_BFS_impl.hpp b/graph/impl/KokkosGraph_BFS_impl.hpp similarity index 100% rename from src/graph/impl/KokkosGraph_BFS_impl.hpp rename to graph/impl/KokkosGraph_BFS_impl.hpp diff --git a/src/graph/impl/KokkosGraph_Distance1Color_impl.hpp b/graph/impl/KokkosGraph_Distance1Color_impl.hpp similarity index 100% rename from src/graph/impl/KokkosGraph_Distance1Color_impl.hpp rename to graph/impl/KokkosGraph_Distance1Color_impl.hpp diff --git a/src/graph/impl/KokkosGraph_Distance2Color_impl.hpp b/graph/impl/KokkosGraph_Distance2Color_impl.hpp similarity index 100% rename from src/graph/impl/KokkosGraph_Distance2Color_impl.hpp rename to graph/impl/KokkosGraph_Distance2Color_impl.hpp diff --git a/src/graph/impl/KokkosGraph_Distance2MIS_impl.hpp b/graph/impl/KokkosGraph_Distance2MIS_impl.hpp similarity index 100% rename from src/graph/impl/KokkosGraph_Distance2MIS_impl.hpp rename to graph/impl/KokkosGraph_Distance2MIS_impl.hpp diff --git a/src/graph/impl/KokkosGraph_ExplicitCoarsening_impl.hpp b/graph/impl/KokkosGraph_ExplicitCoarsening_impl.hpp similarity index 100% rename from src/graph/impl/KokkosGraph_ExplicitCoarsening_impl.hpp rename to graph/impl/KokkosGraph_ExplicitCoarsening_impl.hpp diff --git a/src/graph/impl/KokkosGraph_color_d1_spec.hpp b/graph/impl/KokkosGraph_color_d1_spec.hpp similarity index 100% rename from src/graph/impl/KokkosGraph_color_d1_spec.hpp rename to graph/impl/KokkosGraph_color_d1_spec.hpp diff --git a/src/graph/KokkosGraph_CoarsenConstruct.hpp b/graph/src/KokkosGraph_CoarsenConstruct.hpp similarity index 100% rename from src/graph/KokkosGraph_CoarsenConstruct.hpp rename to graph/src/KokkosGraph_CoarsenConstruct.hpp diff --git a/src/graph/KokkosGraph_CoarsenHeuristics.hpp b/graph/src/KokkosGraph_CoarsenHeuristics.hpp similarity index 100% rename from src/graph/KokkosGraph_CoarsenHeuristics.hpp rename to graph/src/KokkosGraph_CoarsenHeuristics.hpp diff --git a/src/graph/KokkosGraph_Distance1Color.hpp b/graph/src/KokkosGraph_Distance1Color.hpp similarity index 100% rename from src/graph/KokkosGraph_Distance1Color.hpp rename to graph/src/KokkosGraph_Distance1Color.hpp diff --git a/src/graph/KokkosGraph_Distance1ColorHandle.hpp b/graph/src/KokkosGraph_Distance1ColorHandle.hpp similarity index 100% rename from src/graph/KokkosGraph_Distance1ColorHandle.hpp rename to graph/src/KokkosGraph_Distance1ColorHandle.hpp diff --git a/src/graph/KokkosGraph_Distance2Color.hpp b/graph/src/KokkosGraph_Distance2Color.hpp similarity index 100% rename from src/graph/KokkosGraph_Distance2Color.hpp rename to graph/src/KokkosGraph_Distance2Color.hpp diff --git a/src/graph/KokkosGraph_Distance2ColorHandle.hpp b/graph/src/KokkosGraph_Distance2ColorHandle.hpp similarity index 100% rename from src/graph/KokkosGraph_Distance2ColorHandle.hpp rename to graph/src/KokkosGraph_Distance2ColorHandle.hpp diff --git a/src/graph/KokkosGraph_ExplicitCoarsening.hpp b/graph/src/KokkosGraph_ExplicitCoarsening.hpp similarity index 100% rename from src/graph/KokkosGraph_ExplicitCoarsening.hpp rename to graph/src/KokkosGraph_ExplicitCoarsening.hpp diff --git a/src/graph/KokkosGraph_GraphColorHandle.hpp b/graph/src/KokkosGraph_GraphColorHandle.hpp similarity index 100% rename from src/graph/KokkosGraph_GraphColorHandle.hpp rename to graph/src/KokkosGraph_GraphColorHandle.hpp diff --git a/src/graph/KokkosGraph_MIS2.hpp b/graph/src/KokkosGraph_MIS2.hpp similarity index 100% rename from src/graph/KokkosGraph_MIS2.hpp rename to graph/src/KokkosGraph_MIS2.hpp diff --git a/src/graph/KokkosGraph_RCM.hpp b/graph/src/KokkosGraph_RCM.hpp similarity index 100% rename from src/graph/KokkosGraph_RCM.hpp rename to graph/src/KokkosGraph_RCM.hpp diff --git a/src/graph/KokkosGraph_Triangle.hpp b/graph/src/KokkosGraph_Triangle.hpp similarity index 100% rename from src/graph/KokkosGraph_Triangle.hpp rename to graph/src/KokkosGraph_Triangle.hpp diff --git a/src/graph/KokkosGraph_graph_color.hpp b/graph/src/KokkosGraph_graph_color.hpp similarity index 100% rename from src/graph/KokkosGraph_graph_color.hpp rename to graph/src/KokkosGraph_graph_color.hpp diff --git a/src/graph/README.txt b/graph/src/README.txt similarity index 100% rename from src/graph/README.txt rename to graph/src/README.txt diff --git a/graph/unit_test/CMakeLists.txt b/graph/unit_test/CMakeLists.txt new file mode 100644 index 0000000000..63539d9776 --- /dev/null +++ b/graph/unit_test/CMakeLists.txt @@ -0,0 +1,94 @@ +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/test_common) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/test_common) + +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}) + +##################### +# # +# Define unit-tests # +# # +##################### + +##################### +# # +# Add GPU backends # +# # +##################### +IF (KOKKOS_ENABLE_CUDA) + KOKKOSKERNELS_ADD_UNIT_TEST( + graph_cuda + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_Cuda_Graph.cpp + COMPONENTS graph + ) +ENDIF () + +IF (KOKKOS_ENABLE_HIP) + KOKKOSKERNELS_ADD_UNIT_TEST( + graph_hip + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_HIP_Graph.cpp + COMPONENTS graph + ) +ENDIF () + +IF (KOKKOS_ENABLE_SYCL) + KOKKOSKERNELS_ADD_UNIT_TEST( + graph_sycl + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_SYCL_Graph.cpp + COMPONENTS graph + ) +ENDIF () + +IF (KOKKOS_ENABLE_OPENMPTARGET) + # KOKKOSKERNELS_ADD_UNIT_TEST( + # graph_openmptarget + # SOURCES + # ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + # backends/Test_OpenMPTarget_Graph.cpp + # COMPONENTS graph + # ) +ENDIF () + + + +##################### +# # +# Add CPU backends # +# # +##################### +IF (KOKKOS_ENABLE_SERIAL) + KOKKOSKERNELS_ADD_UNIT_TEST( + graph_serial + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_Serial_Graph.cpp + COMPONENTS graph + ) +ENDIF () + +IF (KOKKOS_ENABLE_OPENMP) + KOKKOSKERNELS_ADD_UNIT_TEST( + graph_openmp + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_OpenMP_Graph.cpp + COMPONENTS graph + ) +ENDIF () + +IF (KOKKOS_ENABLE_THREADS) + KOKKOSKERNELS_ADD_UNIT_TEST( + graph_threads + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_Threads_Graph.cpp + COMPONENTS graph + ) +ENDIF () + diff --git a/unit_test/graph/Test_Graph.hpp b/graph/unit_test/Test_Graph.hpp similarity index 100% rename from unit_test/graph/Test_Graph.hpp rename to graph/unit_test/Test_Graph.hpp diff --git a/unit_test/graph/Test_Graph_coarsen.hpp b/graph/unit_test/Test_Graph_coarsen.hpp similarity index 100% rename from unit_test/graph/Test_Graph_coarsen.hpp rename to graph/unit_test/Test_Graph_coarsen.hpp diff --git a/unit_test/graph/Test_Graph_graph_color.hpp b/graph/unit_test/Test_Graph_graph_color.hpp similarity index 100% rename from unit_test/graph/Test_Graph_graph_color.hpp rename to graph/unit_test/Test_Graph_graph_color.hpp diff --git a/unit_test/graph/Test_Graph_graph_color_deterministic.hpp b/graph/unit_test/Test_Graph_graph_color_deterministic.hpp similarity index 100% rename from unit_test/graph/Test_Graph_graph_color_deterministic.hpp rename to graph/unit_test/Test_Graph_graph_color_deterministic.hpp diff --git a/unit_test/graph/Test_Graph_graph_color_distance2.hpp b/graph/unit_test/Test_Graph_graph_color_distance2.hpp similarity index 100% rename from unit_test/graph/Test_Graph_graph_color_distance2.hpp rename to graph/unit_test/Test_Graph_graph_color_distance2.hpp diff --git a/unit_test/graph/Test_Graph_mis2.hpp b/graph/unit_test/Test_Graph_mis2.hpp similarity index 100% rename from unit_test/graph/Test_Graph_mis2.hpp rename to graph/unit_test/Test_Graph_mis2.hpp diff --git a/unit_test/graph/Test_Graph_rcm.hpp b/graph/unit_test/Test_Graph_rcm.hpp similarity index 100% rename from unit_test/graph/Test_Graph_rcm.hpp rename to graph/unit_test/Test_Graph_rcm.hpp diff --git a/unit_test/cuda/Test_Cuda_Graph.cpp b/graph/unit_test/backends/Test_Cuda_Graph.cpp similarity index 100% rename from unit_test/cuda/Test_Cuda_Graph.cpp rename to graph/unit_test/backends/Test_Cuda_Graph.cpp diff --git a/unit_test/hip/Test_HIP_Graph.cpp b/graph/unit_test/backends/Test_HIP_Graph.cpp similarity index 100% rename from unit_test/hip/Test_HIP_Graph.cpp rename to graph/unit_test/backends/Test_HIP_Graph.cpp diff --git a/unit_test/openmptarget/Test_OpenMPTarget_Graph.cpp b/graph/unit_test/backends/Test_OpenMPTarget_Graph.cpp similarity index 100% rename from unit_test/openmptarget/Test_OpenMPTarget_Graph.cpp rename to graph/unit_test/backends/Test_OpenMPTarget_Graph.cpp diff --git a/unit_test/openmp/Test_OpenMP_Graph.cpp b/graph/unit_test/backends/Test_OpenMP_Graph.cpp similarity index 100% rename from unit_test/openmp/Test_OpenMP_Graph.cpp rename to graph/unit_test/backends/Test_OpenMP_Graph.cpp diff --git a/unit_test/sycl/Test_SYCL_Graph.cpp b/graph/unit_test/backends/Test_SYCL_Graph.cpp similarity index 100% rename from unit_test/sycl/Test_SYCL_Graph.cpp rename to graph/unit_test/backends/Test_SYCL_Graph.cpp diff --git a/unit_test/serial/Test_Serial_Graph.cpp b/graph/unit_test/backends/Test_Serial_Graph.cpp similarity index 100% rename from unit_test/serial/Test_Serial_Graph.cpp rename to graph/unit_test/backends/Test_Serial_Graph.cpp diff --git a/unit_test/threads/Test_Threads_Graph.cpp b/graph/unit_test/backends/Test_Threads_Graph.cpp similarity index 100% rename from unit_test/threads/Test_Threads_Graph.cpp rename to graph/unit_test/backends/Test_Threads_Graph.cpp diff --git a/src/CMakeLists.txt b/sparse/CMakeLists.txt similarity index 79% rename from src/CMakeLists.txt rename to sparse/CMakeLists.txt index 46de1bd936..687055ac5f 100644 --- a/src/CMakeLists.txt +++ b/sparse/CMakeLists.txt @@ -1,24 +1,15 @@ +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/sparse/src) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/sparse/impl) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) - -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src) - -#----------------------------------------------------------------------------- - -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/impl) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/src/impl) - -#Include Sparse -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/sparse) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/sparse/impl) - -#Include graph -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/graph) -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/graph/impl) +#Add tpls source file +LIST(APPEND SOURCES src/impl/tpls/KokkosKernels_tpl_handles.cpp) +################## +# # +# ETI generation # +# # +################## #Build up a list of DECL, AVAIL, and INST macros #that should be instantiated based on input options @@ -45,6 +36,20 @@ KOKKOSKERNELS_GENERATE_ETI(Sparse_spmv_mv_struct spmv TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) +KOKKOSKERNELS_GENERATE_ETI(Sparse_spmv_blockcrsmatrix spmv + COMPONENTS sparse + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Sparse_spmv_mv_blockcrsmatrix spmv + COMPONENTS sparse + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES +) + KOKKOSKERNELS_GENERATE_ETI(Sparse_spmv_bsrmatrix spmv COMPONENTS sparse HEADER_LIST ETI_HEADERS @@ -165,17 +170,3 @@ KOKKOSKERNELS_GENERATE_ETI(Sparse_gauss_seidel_apply gauss_seidel_apply SOURCE_LIST SOURCES TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES_W_SLOW_SPACE ) - -KOKKOSKERNELS_GENERATE_ETI(Graph_color_d1 color_d1 - COMPONENTS graph - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES_W_SLOW_SPACE -) - -LIST(APPEND HEADERS ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}_config.h) - -#Add a few other utility files -LIST(APPEND SOURCES - src/impl/tpls/KokkosKernels_tpl_handles.cpp -) diff --git a/src/sparse/impl/KokkosSparse_bspgemm_impl.hpp b/sparse/impl/KokkosSparse_bspgemm_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_bspgemm_impl.hpp rename to sparse/impl/KokkosSparse_bspgemm_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_bspgemm_impl_def.hpp b/sparse/impl/KokkosSparse_bspgemm_impl_def.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_bspgemm_impl_def.hpp rename to sparse/impl/KokkosSparse_bspgemm_impl_def.hpp diff --git a/src/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp b/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp rename to sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp diff --git a/src/sparse/impl/KokkosSparse_bspgemm_impl_seq.hpp b/sparse/impl/KokkosSparse_bspgemm_impl_seq.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_bspgemm_impl_seq.hpp rename to sparse/impl/KokkosSparse_bspgemm_impl_seq.hpp diff --git a/src/sparse/impl/KokkosSparse_bspgemm_impl_speed.hpp b/sparse/impl/KokkosSparse_bspgemm_impl_speed.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_bspgemm_impl_speed.hpp rename to sparse/impl/KokkosSparse_bspgemm_impl_speed.hpp diff --git a/src/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp b/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp rename to sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp b/sparse/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp rename to sparse/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp b/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp rename to sparse/impl/KokkosSparse_gauss_seidel_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp b/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp rename to sparse/impl/KokkosSparse_gauss_seidel_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_getDiagCopyWithOffsets_impl.hpp b/sparse/impl/KokkosSparse_getDiagCopyWithOffsets_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_getDiagCopyWithOffsets_impl.hpp rename to sparse/impl/KokkosSparse_getDiagCopyWithOffsets_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_partitioning_impl.hpp b/sparse/impl/KokkosSparse_partitioning_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_partitioning_impl.hpp rename to sparse/impl/KokkosSparse_partitioning_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_sor_sequential_impl.hpp b/sparse/impl/KokkosSparse_sor_sequential_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_sor_sequential_impl.hpp rename to sparse/impl/KokkosSparse_sor_sequential_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spadd_numeric_impl.hpp b/sparse/impl/KokkosSparse_spadd_numeric_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spadd_numeric_impl.hpp rename to sparse/impl/KokkosSparse_spadd_numeric_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spadd_numeric_spec.hpp b/sparse/impl/KokkosSparse_spadd_numeric_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spadd_numeric_spec.hpp rename to sparse/impl/KokkosSparse_spadd_numeric_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_spadd_symbolic_impl.hpp b/sparse/impl/KokkosSparse_spadd_symbolic_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spadd_symbolic_impl.hpp rename to sparse/impl/KokkosSparse_spadd_symbolic_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spadd_symbolic_spec.hpp b/sparse/impl/KokkosSparse_spadd_symbolic_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spadd_symbolic_spec.hpp rename to sparse/impl/KokkosSparse_spadd_symbolic_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_CUSP_impl.hpp b/sparse/impl/KokkosSparse_spgemm_CUSP_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_CUSP_impl.hpp rename to sparse/impl/KokkosSparse_spgemm_CUSP_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp rename to sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_imp_outer.hpp b/sparse/impl/KokkosSparse_spgemm_imp_outer.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_imp_outer.hpp rename to sparse/impl/KokkosSparse_spgemm_imp_outer.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_impl.hpp b/sparse/impl/KokkosSparse_spgemm_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_impl.hpp rename to sparse/impl/KokkosSparse_spgemm_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_impl_color.hpp b/sparse/impl/KokkosSparse_spgemm_impl_color.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_impl_color.hpp rename to sparse/impl/KokkosSparse_spgemm_impl_color.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_impl_compression.hpp b/sparse/impl/KokkosSparse_spgemm_impl_compression.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_impl_compression.hpp rename to sparse/impl/KokkosSparse_spgemm_impl_compression.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_impl_def.hpp b/sparse/impl/KokkosSparse_spgemm_impl_def.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_impl_def.hpp rename to sparse/impl/KokkosSparse_spgemm_impl_def.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp b/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp rename to sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_impl_memaccess.hpp b/sparse/impl/KokkosSparse_spgemm_impl_memaccess.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_impl_memaccess.hpp rename to sparse/impl/KokkosSparse_spgemm_impl_memaccess.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_impl_seq.hpp b/sparse/impl/KokkosSparse_spgemm_impl_seq.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_impl_seq.hpp rename to sparse/impl/KokkosSparse_spgemm_impl_seq.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_impl_speed.hpp b/sparse/impl/KokkosSparse_spgemm_impl_speed.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_impl_speed.hpp rename to sparse/impl/KokkosSparse_spgemm_impl_speed.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_impl_symbolic.hpp b/sparse/impl/KokkosSparse_spgemm_impl_symbolic.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_impl_symbolic.hpp rename to sparse/impl/KokkosSparse_spgemm_impl_symbolic.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_impl_triangle.hpp b/sparse/impl/KokkosSparse_spgemm_impl_triangle.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_impl_triangle.hpp rename to sparse/impl/KokkosSparse_spgemm_impl_triangle.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_impl_triangle_no_compression.hpp b/sparse/impl/KokkosSparse_spgemm_impl_triangle_no_compression.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_impl_triangle_no_compression.hpp rename to sparse/impl/KokkosSparse_spgemm_impl_triangle_no_compression.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_jacobi_denseacc_impl.hpp b/sparse/impl/KokkosSparse_spgemm_jacobi_denseacc_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_jacobi_denseacc_impl.hpp rename to sparse/impl/KokkosSparse_spgemm_jacobi_denseacc_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_jacobi_seq_impl.hpp b/sparse/impl/KokkosSparse_spgemm_jacobi_seq_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_jacobi_seq_impl.hpp rename to sparse/impl/KokkosSparse_spgemm_jacobi_seq_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_jacobi_sparseacc_impl.hpp b/sparse/impl/KokkosSparse_spgemm_jacobi_sparseacc_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_jacobi_sparseacc_impl.hpp rename to sparse/impl/KokkosSparse_spgemm_jacobi_sparseacc_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp b/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp rename to sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_mkl2phase_impl.hpp b/sparse/impl/KokkosSparse_spgemm_mkl2phase_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_mkl2phase_impl.hpp rename to sparse/impl/KokkosSparse_spgemm_mkl2phase_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_mkl_impl.hpp b/sparse/impl/KokkosSparse_spgemm_mkl_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_mkl_impl.hpp rename to sparse/impl/KokkosSparse_spgemm_mkl_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp b/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp rename to sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp b/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp rename to sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_spgemm_viennaCL_impl.hpp b/sparse/impl/KokkosSparse_spgemm_viennaCL_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_viennaCL_impl.hpp rename to sparse/impl/KokkosSparse_spgemm_viennaCL_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spiluk_numeric_impl.hpp b/sparse/impl/KokkosSparse_spiluk_numeric_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spiluk_numeric_impl.hpp rename to sparse/impl/KokkosSparse_spiluk_numeric_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spiluk_numeric_spec.hpp b/sparse/impl/KokkosSparse_spiluk_numeric_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spiluk_numeric_spec.hpp rename to sparse/impl/KokkosSparse_spiluk_numeric_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp b/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp rename to sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spiluk_symbolic_spec.hpp b/sparse/impl/KokkosSparse_spiluk_symbolic_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spiluk_symbolic_spec.hpp rename to sparse/impl/KokkosSparse_spiluk_symbolic_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp b/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp rename to sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spmv_bsrmatrix_spec.hpp b/sparse/impl/KokkosSparse_spmv_bsrmatrix_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spmv_bsrmatrix_spec.hpp rename to sparse/impl/KokkosSparse_spmv_bsrmatrix_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_spmv_impl.hpp b/sparse/impl/KokkosSparse_spmv_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spmv_impl.hpp rename to sparse/impl/KokkosSparse_spmv_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spmv_impl_omp.hpp b/sparse/impl/KokkosSparse_spmv_impl_omp.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spmv_impl_omp.hpp rename to sparse/impl/KokkosSparse_spmv_impl_omp.hpp diff --git a/src/sparse/impl/KokkosSparse_spmv_spec.hpp b/sparse/impl/KokkosSparse_spmv_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spmv_spec.hpp rename to sparse/impl/KokkosSparse_spmv_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_spmv_struct_impl.hpp b/sparse/impl/KokkosSparse_spmv_struct_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spmv_struct_impl.hpp rename to sparse/impl/KokkosSparse_spmv_struct_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_spmv_struct_spec.hpp b/sparse/impl/KokkosSparse_spmv_struct_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spmv_struct_spec.hpp rename to sparse/impl/KokkosSparse_spmv_struct_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp rename to sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp rename to sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_sptrsv_solve_spec.hpp b/sparse/impl/KokkosSparse_sptrsv_solve_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_sptrsv_solve_spec.hpp rename to sparse/impl/KokkosSparse_sptrsv_solve_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_sptrsv_symbolic_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_symbolic_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_sptrsv_symbolic_impl.hpp rename to sparse/impl/KokkosSparse_sptrsv_symbolic_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_sptrsv_symbolic_spec.hpp b/sparse/impl/KokkosSparse_sptrsv_symbolic_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_sptrsv_symbolic_spec.hpp rename to sparse/impl/KokkosSparse_sptrsv_symbolic_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_trsv_impl.hpp b/sparse/impl/KokkosSparse_trsv_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_trsv_impl.hpp rename to sparse/impl/KokkosSparse_trsv_impl.hpp diff --git a/src/sparse/impl/KokkosSparse_trsv_spec.hpp b/sparse/impl/KokkosSparse_trsv_spec.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_trsv_spec.hpp rename to sparse/impl/KokkosSparse_trsv_spec.hpp diff --git a/src/sparse/impl/KokkosSparse_twostage_gauss_seidel_impl.hpp b/sparse/impl/KokkosSparse_twostage_gauss_seidel_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_twostage_gauss_seidel_impl.hpp rename to sparse/impl/KokkosSparse_twostage_gauss_seidel_impl.hpp diff --git a/src/sparse/KokkosKernels_Controls.hpp b/sparse/src/KokkosKernels_Controls.hpp similarity index 100% rename from src/sparse/KokkosKernels_Controls.hpp rename to sparse/src/KokkosKernels_Controls.hpp diff --git a/src/sparse/KokkosKernels_Handle.hpp b/sparse/src/KokkosKernels_Handle.hpp similarity index 100% rename from src/sparse/KokkosKernels_Handle.hpp rename to sparse/src/KokkosKernels_Handle.hpp diff --git a/src/sparse/KokkosSparse.hpp b/sparse/src/KokkosSparse.hpp similarity index 100% rename from src/sparse/KokkosSparse.hpp rename to sparse/src/KokkosSparse.hpp diff --git a/src/sparse/KokkosSparse_BsrMatrix.hpp b/sparse/src/KokkosSparse_BsrMatrix.hpp similarity index 100% rename from src/sparse/KokkosSparse_BsrMatrix.hpp rename to sparse/src/KokkosSparse_BsrMatrix.hpp diff --git a/src/sparse/KokkosSparse_CrsMatrix.hpp b/sparse/src/KokkosSparse_CrsMatrix.hpp similarity index 100% rename from src/sparse/KokkosSparse_CrsMatrix.hpp rename to sparse/src/KokkosSparse_CrsMatrix.hpp diff --git a/src/sparse/KokkosSparse_IOUtils.hpp b/sparse/src/KokkosSparse_IOUtils.hpp similarity index 100% rename from src/sparse/KokkosSparse_IOUtils.hpp rename to sparse/src/KokkosSparse_IOUtils.hpp diff --git a/src/sparse/KokkosSparse_OrdinalTraits.hpp b/sparse/src/KokkosSparse_OrdinalTraits.hpp similarity index 100% rename from src/sparse/KokkosSparse_OrdinalTraits.hpp rename to sparse/src/KokkosSparse_OrdinalTraits.hpp diff --git a/src/sparse/KokkosSparse_SortCrs.hpp b/sparse/src/KokkosSparse_SortCrs.hpp similarity index 100% rename from src/sparse/KokkosSparse_SortCrs.hpp rename to sparse/src/KokkosSparse_SortCrs.hpp diff --git a/src/sparse/KokkosSparse_Utils.hpp b/sparse/src/KokkosSparse_Utils.hpp similarity index 100% rename from src/sparse/KokkosSparse_Utils.hpp rename to sparse/src/KokkosSparse_Utils.hpp diff --git a/src/sparse/KokkosSparse_Utils_cusparse.hpp b/sparse/src/KokkosSparse_Utils_cusparse.hpp similarity index 100% rename from src/sparse/KokkosSparse_Utils_cusparse.hpp rename to sparse/src/KokkosSparse_Utils_cusparse.hpp diff --git a/src/sparse/KokkosSparse_Utils_mkl.hpp b/sparse/src/KokkosSparse_Utils_mkl.hpp similarity index 100% rename from src/sparse/KokkosSparse_Utils_mkl.hpp rename to sparse/src/KokkosSparse_Utils_mkl.hpp diff --git a/src/sparse/KokkosSparse_Utils_rocsparse.hpp b/sparse/src/KokkosSparse_Utils_rocsparse.hpp similarity index 100% rename from src/sparse/KokkosSparse_Utils_rocsparse.hpp rename to sparse/src/KokkosSparse_Utils_rocsparse.hpp diff --git a/src/sparse/KokkosSparse_csc2csr.hpp b/sparse/src/KokkosSparse_csc2csr.hpp similarity index 100% rename from src/sparse/KokkosSparse_csc2csr.hpp rename to sparse/src/KokkosSparse_csc2csr.hpp diff --git a/src/sparse/KokkosSparse_findRelOffset.hpp b/sparse/src/KokkosSparse_findRelOffset.hpp similarity index 100% rename from src/sparse/KokkosSparse_findRelOffset.hpp rename to sparse/src/KokkosSparse_findRelOffset.hpp diff --git a/src/sparse/KokkosSparse_gauss_seidel.hpp b/sparse/src/KokkosSparse_gauss_seidel.hpp similarity index 100% rename from src/sparse/KokkosSparse_gauss_seidel.hpp rename to sparse/src/KokkosSparse_gauss_seidel.hpp diff --git a/src/sparse/KokkosSparse_gauss_seidel_handle.hpp b/sparse/src/KokkosSparse_gauss_seidel_handle.hpp similarity index 100% rename from src/sparse/KokkosSparse_gauss_seidel_handle.hpp rename to sparse/src/KokkosSparse_gauss_seidel_handle.hpp diff --git a/src/sparse/KokkosSparse_getDiagCopy.hpp b/sparse/src/KokkosSparse_getDiagCopy.hpp similarity index 100% rename from src/sparse/KokkosSparse_getDiagCopy.hpp rename to sparse/src/KokkosSparse_getDiagCopy.hpp diff --git a/src/sparse/KokkosSparse_spadd.hpp b/sparse/src/KokkosSparse_spadd.hpp similarity index 100% rename from src/sparse/KokkosSparse_spadd.hpp rename to sparse/src/KokkosSparse_spadd.hpp diff --git a/src/sparse/KokkosSparse_spadd_handle.hpp b/sparse/src/KokkosSparse_spadd_handle.hpp similarity index 100% rename from src/sparse/KokkosSparse_spadd_handle.hpp rename to sparse/src/KokkosSparse_spadd_handle.hpp diff --git a/src/sparse/KokkosSparse_spgemm.hpp b/sparse/src/KokkosSparse_spgemm.hpp similarity index 100% rename from src/sparse/KokkosSparse_spgemm.hpp rename to sparse/src/KokkosSparse_spgemm.hpp diff --git a/src/sparse/KokkosSparse_spgemm_handle.hpp b/sparse/src/KokkosSparse_spgemm_handle.hpp similarity index 100% rename from src/sparse/KokkosSparse_spgemm_handle.hpp rename to sparse/src/KokkosSparse_spgemm_handle.hpp diff --git a/src/sparse/KokkosSparse_spgemm_jacobi.hpp b/sparse/src/KokkosSparse_spgemm_jacobi.hpp similarity index 100% rename from src/sparse/KokkosSparse_spgemm_jacobi.hpp rename to sparse/src/KokkosSparse_spgemm_jacobi.hpp diff --git a/src/sparse/KokkosSparse_spgemm_numeric.hpp b/sparse/src/KokkosSparse_spgemm_numeric.hpp similarity index 100% rename from src/sparse/KokkosSparse_spgemm_numeric.hpp rename to sparse/src/KokkosSparse_spgemm_numeric.hpp diff --git a/src/sparse/KokkosSparse_spgemm_symbolic.hpp b/sparse/src/KokkosSparse_spgemm_symbolic.hpp similarity index 100% rename from src/sparse/KokkosSparse_spgemm_symbolic.hpp rename to sparse/src/KokkosSparse_spgemm_symbolic.hpp diff --git a/src/sparse/KokkosSparse_spiluk.hpp b/sparse/src/KokkosSparse_spiluk.hpp similarity index 100% rename from src/sparse/KokkosSparse_spiluk.hpp rename to sparse/src/KokkosSparse_spiluk.hpp diff --git a/src/sparse/KokkosSparse_spiluk_handle.hpp b/sparse/src/KokkosSparse_spiluk_handle.hpp similarity index 100% rename from src/sparse/KokkosSparse_spiluk_handle.hpp rename to sparse/src/KokkosSparse_spiluk_handle.hpp diff --git a/src/sparse/KokkosSparse_spmv.hpp b/sparse/src/KokkosSparse_spmv.hpp similarity index 100% rename from src/sparse/KokkosSparse_spmv.hpp rename to sparse/src/KokkosSparse_spmv.hpp diff --git a/src/sparse/KokkosSparse_sptrsv.hpp b/sparse/src/KokkosSparse_sptrsv.hpp similarity index 100% rename from src/sparse/KokkosSparse_sptrsv.hpp rename to sparse/src/KokkosSparse_sptrsv.hpp diff --git a/src/sparse/KokkosSparse_sptrsv_cholmod.hpp b/sparse/src/KokkosSparse_sptrsv_cholmod.hpp similarity index 100% rename from src/sparse/KokkosSparse_sptrsv_cholmod.hpp rename to sparse/src/KokkosSparse_sptrsv_cholmod.hpp diff --git a/src/sparse/KokkosSparse_sptrsv_handle.hpp b/sparse/src/KokkosSparse_sptrsv_handle.hpp similarity index 100% rename from src/sparse/KokkosSparse_sptrsv_handle.hpp rename to sparse/src/KokkosSparse_sptrsv_handle.hpp diff --git a/src/sparse/KokkosSparse_sptrsv_superlu.hpp b/sparse/src/KokkosSparse_sptrsv_superlu.hpp similarity index 100% rename from src/sparse/KokkosSparse_sptrsv_superlu.hpp rename to sparse/src/KokkosSparse_sptrsv_superlu.hpp diff --git a/src/sparse/KokkosSparse_sptrsv_supernode.hpp b/sparse/src/KokkosSparse_sptrsv_supernode.hpp similarity index 100% rename from src/sparse/KokkosSparse_sptrsv_supernode.hpp rename to sparse/src/KokkosSparse_sptrsv_supernode.hpp diff --git a/src/sparse/KokkosSparse_trsv.hpp b/sparse/src/KokkosSparse_trsv.hpp similarity index 100% rename from src/sparse/KokkosSparse_trsv.hpp rename to sparse/src/KokkosSparse_trsv.hpp diff --git a/sparse/unit_test/CMakeLists.txt b/sparse/unit_test/CMakeLists.txt new file mode 100644 index 0000000000..745df8992f --- /dev/null +++ b/sparse/unit_test/CMakeLists.txt @@ -0,0 +1,95 @@ +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/test_common) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/test_common) + +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}) + + +##################### +# # +# Define unit-tests # +# # +##################### + +##################### +# # +# Add GPU backends # +# # +##################### +IF (KOKKOS_ENABLE_CUDA) + KOKKOSKERNELS_ADD_UNIT_TEST( + sparse_cuda + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_Cuda_Sparse.cpp + COMPONENTS sparse + ) +ENDIF () + +IF (KOKKOS_ENABLE_HIP) + KOKKOSKERNELS_ADD_UNIT_TEST( + sparse_hip + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_HIP_Sparse.cpp + COMPONENTS sparse + ) +ENDIF () + +IF (KOKKOS_ENABLE_SYCL) + KOKKOSKERNELS_ADD_UNIT_TEST( + sparse_sycl + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_SYCL_Sparse.cpp + COMPONENTS sparse + ) +ENDIF () + +IF (KOKKOS_ENABLE_OPENMPTARGET) + # KOKKOSKERNELS_ADD_UNIT_TEST( + # sparse_openmptarget + # SOURCES + # ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + # backends/Test_OpenMPTarget_Sparse.cpp + # COMPONENTS sparse + # ) +ENDIF () + + + +##################### +# # +# Add CPU backends # +# # +##################### +IF (KOKKOS_ENABLE_SERIAL) + KOKKOSKERNELS_ADD_UNIT_TEST( + sparse_serial + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_Serial_Sparse.cpp + COMPONENTS sparse + ) +ENDIF () + +IF (KOKKOS_ENABLE_OPENMP) + KOKKOSKERNELS_ADD_UNIT_TEST( + sparse_openmp + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_OpenMP_Sparse.cpp + COMPONENTS sparse + ) +ENDIF () + +IF (KOKKOS_ENABLE_THREADS) + KOKKOSKERNELS_ADD_UNIT_TEST( + sparse_threads + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_Threads_Sparse.cpp + COMPONENTS sparse + ) +ENDIF () + diff --git a/unit_test/sparse/Test_Sparse.hpp b/sparse/unit_test/Test_Sparse.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse.hpp rename to sparse/unit_test/Test_Sparse.hpp diff --git a/unit_test/sparse/Test_Sparse_BsrMatrix.hpp b/sparse/unit_test/Test_Sparse_BsrMatrix.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_BsrMatrix.hpp rename to sparse/unit_test/Test_Sparse_BsrMatrix.hpp diff --git a/unit_test/sparse/Test_Sparse_Controls.hpp b/sparse/unit_test/Test_Sparse_Controls.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_Controls.hpp rename to sparse/unit_test/Test_Sparse_Controls.hpp diff --git a/unit_test/sparse/Test_Sparse_CrsMatrix.hpp b/sparse/unit_test/Test_Sparse_CrsMatrix.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_CrsMatrix.hpp rename to sparse/unit_test/Test_Sparse_CrsMatrix.hpp diff --git a/unit_test/sparse/Test_Sparse_SortCrs.hpp b/sparse/unit_test/Test_Sparse_SortCrs.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_SortCrs.hpp rename to sparse/unit_test/Test_Sparse_SortCrs.hpp diff --git a/unit_test/sparse/Test_Sparse_TestUtils_RandCscMat.hpp b/sparse/unit_test/Test_Sparse_TestUtils_RandCscMat.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_TestUtils_RandCscMat.hpp rename to sparse/unit_test/Test_Sparse_TestUtils_RandCscMat.hpp diff --git a/unit_test/sparse/Test_Sparse_Transpose.hpp b/sparse/unit_test/Test_Sparse_Transpose.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_Transpose.hpp rename to sparse/unit_test/Test_Sparse_Transpose.hpp diff --git a/unit_test/sparse/Test_Sparse_Utils.hpp b/sparse/unit_test/Test_Sparse_Utils.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_Utils.hpp rename to sparse/unit_test/Test_Sparse_Utils.hpp diff --git a/unit_test/sparse/Test_Sparse_Utils_cusparse.hpp b/sparse/unit_test/Test_Sparse_Utils_cusparse.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_Utils_cusparse.hpp rename to sparse/unit_test/Test_Sparse_Utils_cusparse.hpp diff --git a/unit_test/sparse/Test_Sparse_block_gauss_seidel.hpp b/sparse/unit_test/Test_Sparse_block_gauss_seidel.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_block_gauss_seidel.hpp rename to sparse/unit_test/Test_Sparse_block_gauss_seidel.hpp diff --git a/unit_test/sparse/Test_Sparse_bspgemm.hpp b/sparse/unit_test/Test_Sparse_bspgemm.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_bspgemm.hpp rename to sparse/unit_test/Test_Sparse_bspgemm.hpp diff --git a/unit_test/sparse/Test_Sparse_csc2csr.hpp b/sparse/unit_test/Test_Sparse_csc2csr.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_csc2csr.hpp rename to sparse/unit_test/Test_Sparse_csc2csr.hpp diff --git a/unit_test/sparse/Test_Sparse_findRelOffset.hpp b/sparse/unit_test/Test_Sparse_findRelOffset.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_findRelOffset.hpp rename to sparse/unit_test/Test_Sparse_findRelOffset.hpp diff --git a/unit_test/sparse/Test_Sparse_gauss_seidel.hpp b/sparse/unit_test/Test_Sparse_gauss_seidel.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_gauss_seidel.hpp rename to sparse/unit_test/Test_Sparse_gauss_seidel.hpp diff --git a/unit_test/sparse/Test_Sparse_replaceSumInto.hpp b/sparse/unit_test/Test_Sparse_replaceSumInto.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_replaceSumInto.hpp rename to sparse/unit_test/Test_Sparse_replaceSumInto.hpp diff --git a/unit_test/sparse/Test_Sparse_replaceSumIntoLonger.hpp b/sparse/unit_test/Test_Sparse_replaceSumIntoLonger.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_replaceSumIntoLonger.hpp rename to sparse/unit_test/Test_Sparse_replaceSumIntoLonger.hpp diff --git a/unit_test/sparse/Test_Sparse_rocsparse.hpp b/sparse/unit_test/Test_Sparse_rocsparse.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_rocsparse.hpp rename to sparse/unit_test/Test_Sparse_rocsparse.hpp diff --git a/unit_test/sparse/Test_Sparse_spadd.hpp b/sparse/unit_test/Test_Sparse_spadd.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_spadd.hpp rename to sparse/unit_test/Test_Sparse_spadd.hpp diff --git a/unit_test/sparse/Test_Sparse_spgemm.hpp b/sparse/unit_test/Test_Sparse_spgemm.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_spgemm.hpp rename to sparse/unit_test/Test_Sparse_spgemm.hpp diff --git a/unit_test/sparse/Test_Sparse_spgemm_jacobi.hpp b/sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_spgemm_jacobi.hpp rename to sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp diff --git a/unit_test/sparse/Test_Sparse_spiluk.hpp b/sparse/unit_test/Test_Sparse_spiluk.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_spiluk.hpp rename to sparse/unit_test/Test_Sparse_spiluk.hpp diff --git a/unit_test/sparse/Test_Sparse_spmv.hpp b/sparse/unit_test/Test_Sparse_spmv.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_spmv.hpp rename to sparse/unit_test/Test_Sparse_spmv.hpp diff --git a/unit_test/sparse/Test_Sparse_spmv_bsr.hpp b/sparse/unit_test/Test_Sparse_spmv_bsr.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_spmv_bsr.hpp rename to sparse/unit_test/Test_Sparse_spmv_bsr.hpp diff --git a/unit_test/sparse/Test_Sparse_sptrsv.hpp b/sparse/unit_test/Test_Sparse_sptrsv.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_sptrsv.hpp rename to sparse/unit_test/Test_Sparse_sptrsv.hpp diff --git a/unit_test/sparse/Test_Sparse_trsv.hpp b/sparse/unit_test/Test_Sparse_trsv.hpp similarity index 100% rename from unit_test/sparse/Test_Sparse_trsv.hpp rename to sparse/unit_test/Test_Sparse_trsv.hpp diff --git a/unit_test/cuda/Test_Cuda_Sparse.cpp b/sparse/unit_test/backends/Test_Cuda_Sparse.cpp similarity index 100% rename from unit_test/cuda/Test_Cuda_Sparse.cpp rename to sparse/unit_test/backends/Test_Cuda_Sparse.cpp diff --git a/unit_test/hip/Test_HIP_Sparse.cpp b/sparse/unit_test/backends/Test_HIP_Sparse.cpp similarity index 100% rename from unit_test/hip/Test_HIP_Sparse.cpp rename to sparse/unit_test/backends/Test_HIP_Sparse.cpp diff --git a/unit_test/openmptarget/Test_OpenMPTarget_Sparse.cpp b/sparse/unit_test/backends/Test_OpenMPTarget_Sparse.cpp similarity index 100% rename from unit_test/openmptarget/Test_OpenMPTarget_Sparse.cpp rename to sparse/unit_test/backends/Test_OpenMPTarget_Sparse.cpp diff --git a/unit_test/openmp/Test_OpenMP_Sparse.cpp b/sparse/unit_test/backends/Test_OpenMP_Sparse.cpp similarity index 100% rename from unit_test/openmp/Test_OpenMP_Sparse.cpp rename to sparse/unit_test/backends/Test_OpenMP_Sparse.cpp diff --git a/unit_test/sycl/Test_SYCL_Sparse.cpp b/sparse/unit_test/backends/Test_SYCL_Sparse.cpp similarity index 100% rename from unit_test/sycl/Test_SYCL_Sparse.cpp rename to sparse/unit_test/backends/Test_SYCL_Sparse.cpp diff --git a/unit_test/serial/Test_Serial_Sparse.cpp b/sparse/unit_test/backends/Test_Serial_Sparse.cpp similarity index 100% rename from unit_test/serial/Test_Serial_Sparse.cpp rename to sparse/unit_test/backends/Test_Serial_Sparse.cpp diff --git a/unit_test/threads/Test_Threads_Sparse.cpp b/sparse/unit_test/backends/Test_Threads_Sparse.cpp similarity index 100% rename from unit_test/threads/Test_Threads_Sparse.cpp rename to sparse/unit_test/backends/Test_Threads_Sparse.cpp diff --git a/unit_test/sparse/matrixIssue402.hpp b/sparse/unit_test/matrixIssue402.hpp similarity index 100% rename from unit_test/sparse/matrixIssue402.hpp rename to sparse/unit_test/matrixIssue402.hpp diff --git a/unit_test/Test_Main.cpp b/test_common/Test_Main.cpp similarity index 100% rename from unit_test/Test_Main.cpp rename to test_common/Test_Main.cpp diff --git a/unit_test/CMakeLists.txt b/unit_test/CMakeLists.txt index 7871f41426..d8a0ee0890 100644 --- a/unit_test/CMakeLists.txt +++ b/unit_test/CMakeLists.txt @@ -5,15 +5,9 @@ KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_C KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/blas) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/blas) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/sparse) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/sparse) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/graph) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/graph) - IF (KOKKOS_ENABLE_CUDA) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/cuda) diff --git a/unit_test/README b/unit_test/README deleted file mode 100644 index 2fe9dcf4af..0000000000 --- a/unit_test/README +++ /dev/null @@ -1,5 +0,0 @@ -NOTE: It is unlikely that the raw build scripts in this directory -still work. For now, please use the CMake build system to build these -examples. - -Note: Float128 test is disabled for now. I am getting undefined reference errors. From c53048ab4773f3448990d33ab82d12478475953f Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Tue, 30 Aug 2022 17:55:12 -0600 Subject: [PATCH 078/226] Modular build: cleaning up directory structure removing no longer used directories and adding library utilities in the new modular build system (this includes some ETI, tpls...) --- CMakeLists.txt | 46 +- KokkosKernels_dummy.cpp | 44 - batched/CMakeLists.txt | 1 + batched/dense/unit_test/CMakeLists.txt | 1 - blas/CMakeLists.txt | 13 +- .../abs/KokkosBlas1_abs_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_abs_mv_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_axpby_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_axpby_mv_eti_spec_inst.cpp.in | 0 .../dot/KokkosBlas1_dot_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_dot_mv_eti_spec_inst.cpp.in | 0 .../KokkosBlas3_gemm_eti_spec_inst.cpp.in | 0 .../KokkosBlas2_gemv_eti_spec_inst.cpp.in | 0 .../gesv/KokkosBlas_gesv_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_iamax_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_iamax_mv_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_mult_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_mult_mv_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_nrm1_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_nrm1_mv_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_nrm2_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_nrm2_mv_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_nrm2w_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_nrm2w_mv_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_nrminf_eti_spec_inst.cpp.in | 0 ...KokkosBlas1_nrminf_mv_eti_spec_inst.cpp.in | 0 ...okkosBlas1_reciprocal_eti_spec_inst.cpp.in | 0 ...osBlas1_reciprocal_mv_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_scal_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_scal_mv_eti_spec_inst.cpp.in | 0 .../sum/KokkosBlas1_sum_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_sum_mv_eti_spec_inst.cpp.in | 0 .../KokkosBlas3_trmm_eti_spec_inst.cpp.in | 0 .../KokkosBlas3_trsm_eti_spec_inst.cpp.in | 0 .../KokkosBlas_trtri_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_update_eti_spec_inst.cpp.in | 0 ...KokkosBlas1_update_mv_eti_spec_inst.cpp.in | 0 .../KokkosBlas1_abs_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_abs_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_abs_mv_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_abs_mv_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_axpby_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_axpby_eti_spec_decl.hpp.in | 0 ...KokkosBlas1_axpby_mv_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_axpby_mv_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_dot_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_dot_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_dot_mv_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_dot_mv_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_iamax_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_iamax_eti_spec_decl.hpp.in | 0 ...KokkosBlas1_iamax_mv_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_iamax_mv_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_mult_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_mult_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_mult_mv_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_mult_mv_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_nrm1_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_nrm1_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_nrm1_mv_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_nrm1_mv_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_nrm2_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_nrm2_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_nrm2_mv_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_nrm2_mv_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_nrm2w_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_nrm2w_eti_spec_decl.hpp.in | 0 ...KokkosBlas1_nrm2w_mv_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_nrm2w_mv_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_nrminf_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_nrminf_eti_spec_decl.hpp.in | 0 ...okkosBlas1_nrminf_mv_eti_spec_avail.hpp.in | 0 ...KokkosBlas1_nrminf_mv_eti_spec_decl.hpp.in | 0 ...kkosBlas1_reciprocal_eti_spec_avail.hpp.in | 0 ...okkosBlas1_reciprocal_eti_spec_decl.hpp.in | 0 ...sBlas1_reciprocal_mv_eti_spec_avail.hpp.in | 0 ...osBlas1_reciprocal_mv_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_scal_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_scal_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_scal_mv_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_scal_mv_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_sum_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_sum_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_sum_mv_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_sum_mv_eti_spec_decl.hpp.in | 0 .../KokkosBlas1_update_eti_spec_avail.hpp.in | 0 .../KokkosBlas1_update_eti_spec_decl.hpp.in | 0 ...okkosBlas1_update_mv_eti_spec_avail.hpp.in | 0 ...KokkosBlas1_update_mv_eti_spec_decl.hpp.in | 0 .../KokkosBlas2_gemv_eti_spec_avail.hpp.in | 0 .../KokkosBlas2_gemv_eti_spec_decl.hpp.in | 0 .../KokkosBlas3_gemm_eti_spec_avail.hpp.in | 0 .../KokkosBlas3_gemm_eti_spec_decl.hpp.in | 0 .../KokkosBlas3_trmm_eti_spec_avail.hpp.in | 0 .../KokkosBlas3_trmm_eti_spec_decl.hpp.in | 0 .../KokkosBlas3_trsm_eti_spec_avail.hpp.in | 0 .../KokkosBlas3_trsm_eti_spec_decl.hpp.in | 0 .../KokkosBlas_gesv_eti_spec_avail.hpp.in | 0 .../KokkosBlas_gesv_eti_spec_decl.hpp.in | 0 .../KokkosBlas_trtri_eti_spec_avail.hpp.in | 0 .../KokkosBlas_trtri_eti_spec_decl.hpp.in | 0 .../tpls/KokkosBlas1_abs_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas1_abs_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas1_axpby_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas1_axpby_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas1_dot_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas1_dot_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas1_iamax_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas1_iamax_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas1_mult_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas1_mult_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas1_nrm1_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas1_nrm1_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas1_nrm2_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas1_nrm2_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas1_nrm2w_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas1_nrm2w_tpl_spec_decl.hpp | 0 .../KokkosBlas1_nrminf_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas1_nrminf_tpl_spec_decl.hpp | 0 .../KokkosBlas1_reciprocal_tpl_spec_avail.hpp | 0 .../KokkosBlas1_reciprocal_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas1_scal_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas1_scal_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas1_sum_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas1_sum_tpl_spec_decl.hpp | 0 .../KokkosBlas1_update_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas1_update_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas2_gemv_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp | 0 .../KokkosBlas2_serial_gemv_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas3_trmm_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas3_trmm_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas3_trsm_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas3_trsm_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas_Cuda_tpl.cpp | 0 .../tpls/KokkosBlas_Cuda_tpl.hpp | 0 .../tpls/KokkosBlas_Host_tpl.cpp | 0 .../tpls/KokkosBlas_Host_tpl.hpp | 0 .../tpls/KokkosBlas_Rocm_tpl.cpp | 0 .../tpls/KokkosBlas_Rocm_tpl.hpp | 0 .../tpls/KokkosBlas_gesv_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas_gesv_tpl_spec_decl.hpp | 0 .../tpls/KokkosBlas_tpl_spec.hpp | 0 .../tpls/KokkosBlas_trtri_tpl_spec_avail.hpp | 0 .../tpls/KokkosBlas_trtri_tpl_spec_decl.hpp | 0 cmake/kokkoskernels_components.cmake | 24 +- {src/cmake => cmake}/kokkoskernels_eti.cmake | 8 +- {src => common/src}/KokkosKernels_Macros.hpp | 0 common/{ => src}/KokkosKernels_helpers.hpp | 0 {src => common/src}/KokkosLinAlg_config.h | 0 {src => common/src}/dummy.cpp | 0 graph/CMakeLists.txt | 2 + .../KokkosGraph_color_d1_eti_spec_inst.cpp.in | 0 ...KokkosGraph_color_d1_eti_spec_avail.hpp.in | 0 .../KokkosGraph_color_d1_eti_spec_decl.hpp.in | 0 .../impl/KokkosGraph_Distance2Color_impl.hpp | 1 - graph/src/KokkosGraph_Distance2Color.hpp | 1 + .../change => scripts/generate_eti_cpp | 0 .../change => scripts/generate_eti_hpp | 0 sparse/CMakeLists.txt | 5 +- ...parse_bspgemm_numeric_eti_spec_inst.cpp.in | 0 ...se_gauss_seidel_apply_eti_spec_inst.cpp.in | 0 ..._gauss_seidel_numeric_eti_spec_inst.cpp.in | 0 ...gauss_seidel_symbolic_eti_spec_inst.cpp.in | 0 ...sSparse_spadd_numeric_eti_spec_inst.cpp.in | 0 ...Sparse_spadd_symbolic_eti_spec_inst.cpp.in | 0 ...sSparse_spgemm_jacobi_eti_spec_inst.cpp.in | 0 ...Sparse_spgemm_numeric_eti_spec_inst.cpp.in | 0 ...parse_spgemm_symbolic_eti_spec_inst.cpp.in | 0 ...Sparse_spiluk_numeric_eti_spec_inst.cpp.in | 0 ...parse_spiluk_symbolic_eti_spec_inst.cpp.in | 0 ...Sparse_spmv_bsrmatrix_eti_spec_inst.cpp.in | 0 .../KokkosSparse_spmv_eti_spec_inst.cpp.in | 0 ...rse_spmv_mv_bsrmatrix_eti_spec_inst.cpp.in | 0 .../KokkosSparse_spmv_mv_eti_spec_inst.cpp.in | 0 ...Sparse_spmv_mv_struct_eti_spec_inst.cpp.in | 0 ...kosSparse_spmv_struct_eti_spec_inst.cpp.in | 0 ...osSparse_sptrsv_solve_eti_spec_inst.cpp.in | 0 ...parse_sptrsv_symbolic_eti_spec_inst.cpp.in | 0 .../KokkosSparse_trsv_eti_spec_inst.cpp.in | 0 ...arse_bspgemm_numeric_eti_spec_avail.hpp.in | 0 ...parse_bspgemm_numeric_eti_spec_decl.hpp.in | 0 ...e_gauss_seidel_apply_eti_spec_avail.hpp.in | 0 ...se_gauss_seidel_apply_eti_spec_decl.hpp.in | 0 ...gauss_seidel_numeric_eti_spec_avail.hpp.in | 0 ..._gauss_seidel_numeric_eti_spec_decl.hpp.in | 0 ...auss_seidel_symbolic_eti_spec_avail.hpp.in | 0 ...gauss_seidel_symbolic_eti_spec_decl.hpp.in | 0 ...Sparse_spadd_numeric_eti_spec_avail.hpp.in | 0 ...sSparse_spadd_numeric_eti_spec_decl.hpp.in | 0 ...parse_spadd_symbolic_eti_spec_avail.hpp.in | 0 ...Sparse_spadd_symbolic_eti_spec_decl.hpp.in | 0 ...Sparse_spgemm_jacobi_eti_spec_avail.hpp.in | 0 ...sSparse_spgemm_jacobi_eti_spec_decl.hpp.in | 0 ...parse_spgemm_numeric_eti_spec_avail.hpp.in | 0 ...Sparse_spgemm_numeric_eti_spec_decl.hpp.in | 0 ...arse_spgemm_symbolic_eti_spec_avail.hpp.in | 0 ...parse_spgemm_symbolic_eti_spec_decl.hpp.in | 0 ...parse_spiluk_numeric_eti_spec_avail.hpp.in | 0 ...Sparse_spiluk_numeric_eti_spec_decl.hpp.in | 0 ...arse_spiluk_symbolic_eti_spec_avail.hpp.in | 0 ...parse_spiluk_symbolic_eti_spec_decl.hpp.in | 0 ...parse_spmv_bsrmatrix_eti_spec_avail.hpp.in | 0 ...Sparse_spmv_bsrmatrix_eti_spec_decl.hpp.in | 0 .../KokkosSparse_spmv_eti_spec_avail.hpp.in | 0 .../KokkosSparse_spmv_eti_spec_decl.hpp.in | 0 ...se_spmv_mv_bsrmatrix_eti_spec_avail.hpp.in | 0 ...rse_spmv_mv_bsrmatrix_eti_spec_decl.hpp.in | 0 ...KokkosSparse_spmv_mv_eti_spec_avail.hpp.in | 0 .../KokkosSparse_spmv_mv_eti_spec_decl.hpp.in | 0 ...parse_spmv_mv_struct_eti_spec_avail.hpp.in | 0 ...Sparse_spmv_mv_struct_eti_spec_decl.hpp.in | 0 ...osSparse_spmv_struct_eti_spec_avail.hpp.in | 0 ...kosSparse_spmv_struct_eti_spec_decl.hpp.in | 0 ...sSparse_sptrsv_solve_eti_spec_avail.hpp.in | 0 ...osSparse_sptrsv_solve_eti_spec_decl.hpp.in | 0 ...arse_sptrsv_symbolic_eti_spec_avail.hpp.in | 0 ...parse_sptrsv_symbolic_eti_spec_decl.hpp.in | 0 .../KokkosSparse_trsv_eti_spec_avail.hpp.in | 0 .../KokkosSparse_trsv_eti_spec_decl.hpp.in | 0 .../tpls/KokkosKernels_tpl_handles.cpp | 0 .../tpls/KokkosKernels_tpl_handles_decl.hpp | 0 .../tpls/KokkosKernels_tpl_handles_def.hpp | 0 ...kkosSparse_gauss_seidel_tpl_spec_avail.hpp | 0 ...okkosSparse_gauss_seidel_tpl_spec_decl.hpp | 0 .../KokkosSparse_spadd_tpl_spec_avail.hpp | 0 .../tpls/KokkosSparse_spadd_tpl_spec_decl.hpp | 0 .../KokkosSparse_spgemm_tpl_spec_avail.hpp | 0 .../KokkosSparse_spgemm_tpl_spec_decl.hpp | 0 ...osSparse_spiluk_numeric_tpl_spec_avail.hpp | 0 ...kosSparse_spiluk_numeric_tpl_spec_decl.hpp | 0 ...sSparse_spiluk_symbolic_tpl_spec_avail.hpp | 0 ...osSparse_spiluk_symbolic_tpl_spec_decl.hpp | 0 ...osSparse_spmv_bsrmatrix_tpl_spec_avail.hpp | 0 ...kosSparse_spmv_bsrmatrix_tpl_spec_decl.hpp | 0 .../KokkosSparse_spmv_mv_tpl_spec_avail.hpp | 0 .../KokkosSparse_spmv_mv_tpl_spec_decl.hpp | 0 ...okkosSparse_spmv_struct_tpl_spec_avail.hpp | 0 ...KokkosSparse_spmv_struct_tpl_spec_decl.hpp | 0 .../tpls/KokkosSparse_spmv_tpl_spec_avail.hpp | 0 .../tpls/KokkosSparse_spmv_tpl_spec_decl.hpp | 0 ...kkosSparse_sptrsv_solve_tpl_spec_avail.hpp | 0 ...okkosSparse_sptrsv_solve_tpl_spec_decl.hpp | 0 ...sSparse_sptrsv_symbolic_tpl_spec_avail.hpp | 0 ...osSparse_sptrsv_symbolic_tpl_spec_decl.hpp | 0 .../tpls/KokkosSparse_trsv_tpl_spec_avail.hpp | 0 .../tpls/KokkosSparse_trsv_tpl_spec_decl.hpp | 0 src/stage/blas3/Kokkos_Blas3.hpp | 258 --- src/stage/blas3/Kokkos_Blas3_impl.hpp | 1797 ----------------- src/stage/blas3/blas3_UnitTest_01.cpp | 46 - unit_test/CMakeLists.txt | 156 -- unit_test/build.cusparse | 1 - unit_test/build.mkl | 1 - unit_test/standalone/main.cpp | 29 - 256 files changed, 52 insertions(+), 2382 deletions(-) delete mode 100644 KokkosKernels_dummy.cpp rename {src/impl => blas/eti}/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/abs/KokkosBlas1_abs_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/axpby/KokkosBlas1_axpby_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/axpby/KokkosBlas1_axpby_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/dot/KokkosBlas1_dot_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/dot/KokkosBlas1_dot_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/gemm/KokkosBlas3_gemm_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/gemv/KokkosBlas2_gemv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/gesv/KokkosBlas_gesv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/iamax/KokkosBlas1_iamax_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/iamax/KokkosBlas1_iamax_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/mult/KokkosBlas1_mult_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/mult/KokkosBlas1_mult_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/scal/KokkosBlas1_scal_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/scal/KokkosBlas1_scal_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/sum/KokkosBlas1_sum_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/sum/KokkosBlas1_sum_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/trmm/KokkosBlas3_trmm_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/trsm/KokkosBlas3_trsm_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/trtri/KokkosBlas_trtri_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/update/KokkosBlas1_update_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_cpp/update/KokkosBlas1_update_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_update_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_update_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_decl.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_avail.hpp.in (100%) rename {src/impl => blas/eti}/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_decl.hpp.in (100%) rename {src/impl => blas}/tpls/KokkosBlas1_abs_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_abs_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_axpby_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_axpby_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_dot_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_dot_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_iamax_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_iamax_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_mult_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_mult_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_nrm1_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_nrm1_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_nrm2_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_nrm2_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_nrm2w_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_nrm2w_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_nrminf_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_nrminf_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_reciprocal_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_reciprocal_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_scal_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_scal_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_sum_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_sum_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_update_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas1_update_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas2_gemv_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas3_trmm_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas3_trmm_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas3_trsm_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas3_trsm_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas_Cuda_tpl.cpp (100%) rename {src/impl => blas}/tpls/KokkosBlas_Cuda_tpl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas_Host_tpl.cpp (100%) rename {src/impl => blas}/tpls/KokkosBlas_Host_tpl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas_Rocm_tpl.cpp (100%) rename {src/impl => blas}/tpls/KokkosBlas_Rocm_tpl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas_gesv_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas_gesv_tpl_spec_decl.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas_tpl_spec.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas_trtri_tpl_spec_avail.hpp (100%) rename {src/impl => blas}/tpls/KokkosBlas_trtri_tpl_spec_decl.hpp (100%) rename {src/cmake => cmake}/kokkoskernels_eti.cmake (93%) rename {src => common/src}/KokkosKernels_Macros.hpp (100%) rename common/{ => src}/KokkosKernels_helpers.hpp (100%) rename {src => common/src}/KokkosLinAlg_config.h (100%) rename {src => common/src}/dummy.cpp (100%) rename {src/impl => graph/eti}/generated_specializations_cpp/color_d1/KokkosGraph_color_d1_eti_spec_inst.cpp.in (100%) rename {src/impl => graph/eti}/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_avail.hpp.in (100%) rename {src/impl => graph/eti}/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_decl.hpp.in (100%) rename src/impl/generated_specializations_cpp/change => scripts/generate_eti_cpp (100%) rename src/impl/generated_specializations_hpp/change => scripts/generate_eti_hpp (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/bspgemm_numeric/KokkosSparse_bspgemm_numeric_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/gauss_seidel_apply/KokkosSparse_gauss_seidel_apply_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/gauss_seidel_numeric/KokkosSparse_gauss_seidel_numeric_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/gauss_seidel_symbolic/KokkosSparse_gauss_seidel_symbolic_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/spadd_numeric/KokkosSparse_spadd_numeric_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/spadd_symbolic/KokkosSparse_spadd_symbolic_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/spgemm_jacobi/KokkosSparse_spgemm_jacobi_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/spgemm_numeric/KokkosSparse_spgemm_numeric_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/spgemm_symbolic/KokkosSparse_spgemm_symbolic_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/spiluk_numeric/KokkosSparse_spiluk_numeric_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/spiluk_symbolic/KokkosSparse_spiluk_symbolic_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/spmv/KokkosSparse_spmv_bsrmatrix_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/spmv/KokkosSparse_spmv_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_struct_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/spmv/KokkosSparse_spmv_struct_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/sptrsv_solve/KokkosSparse_sptrsv_solve_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/sptrsv_symbolic/KokkosSparse_sptrsv_symbolic_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_cpp/trsv/KokkosSparse_trsv_eti_spec_inst.cpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_avail.hpp.in (100%) rename {src/impl => sparse/eti}/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_decl.hpp.in (100%) rename {src/impl => sparse}/tpls/KokkosKernels_tpl_handles.cpp (100%) rename {src/impl => sparse}/tpls/KokkosKernels_tpl_handles_decl.hpp (100%) rename {src/impl => sparse}/tpls/KokkosKernels_tpl_handles_def.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_gauss_seidel_tpl_spec_avail.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_gauss_seidel_tpl_spec_decl.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spadd_tpl_spec_avail.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spadd_tpl_spec_decl.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spgemm_tpl_spec_avail.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spgemm_tpl_spec_decl.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spiluk_numeric_tpl_spec_avail.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spiluk_numeric_tpl_spec_decl.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_avail.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_decl.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_avail.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_decl.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spmv_mv_tpl_spec_avail.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spmv_struct_tpl_spec_avail.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spmv_struct_tpl_spec_decl.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spmv_tpl_spec_avail.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_sptrsv_solve_tpl_spec_avail.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_sptrsv_solve_tpl_spec_decl.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_avail.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_decl.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_trsv_tpl_spec_avail.hpp (100%) rename {src/impl => sparse}/tpls/KokkosSparse_trsv_tpl_spec_decl.hpp (100%) delete mode 100644 src/stage/blas3/Kokkos_Blas3.hpp delete mode 100644 src/stage/blas3/Kokkos_Blas3_impl.hpp delete mode 100644 src/stage/blas3/blas3_UnitTest_01.cpp delete mode 100644 unit_test/CMakeLists.txt delete mode 100644 unit_test/build.cusparse delete mode 100644 unit_test/build.mkl delete mode 100644 unit_test/standalone/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index d3d3938722..6806ca2c9c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,21 +112,14 @@ IF (KokkosKernels_INSTALL_TESTING) # Still need to figure out which backends INCLUDE(cmake/kokkos_backends.cmake) # Only build the tests - KOKKOSKERNELS_ADD_TEST_DIRECTORIES(perf_test) + # Assume that all components have been enabled KOKKOSKERNELS_ADD_TEST_DIRECTORIES(common/unit_test) - IF (KokkosKernels_ENABLE_BATCHED) - KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/dense/unit_test) - KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/sparse/unit_test) - ENDIF() - IF (KokkosKernels_ENABLE_BLAS) - KOKKOSKERNELS_ADD_TEST_DIRECTORIES(blas/unit_test) - ENDIF() - IF (KokkosKernels_ENABLE_GRAPH) - KOKKOSKERNELS_ADD_TEST_DIRECTORIES(graph/unit_test) - ENDIF() - IF (KokkosKernels_ENABLE_SPARSE) - KOKKOSKERNELS_ADD_TEST_DIRECTORIES(sparse/unit_test) - ENDIF() + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/dense/unit_test) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/sparse/unit_test) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(blas/unit_test) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(graph/unit_test) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(sparse/unit_test) + KOKKOSKERNELS_ADD_TEST_DIRECTORIES(perf_test) KOKKOSKERNELS_ADD_EXAMPLE_DIRECTORIES(example) ELSE() # Regular build, not install testing @@ -224,18 +217,29 @@ ELSE() INCLUDE(cmake/kokkoskernels_features.cmake) INCLUDE(cmake/kokkos_requirements.cmake) # ================================================================== + # Enable Library Components + # ================================================================== + INCLUDE(cmake/kokkoskernels_components.cmake) + # ================================================================== # CMake Summary # ================================================================== MESSAGE("") MESSAGE("=======================") - MESSAGE("KokkosKernels ETI Types") + MESSAGE("Kokkos Kernels ETI Types") MESSAGE(" Devices: ${DEVICE_LIST}") MESSAGE(" Scalars: ${SCALAR_LIST}") MESSAGE(" Ordinals: ${ORDINAL_LIST}") MESSAGE(" Offsets: ${OFFSET_LIST}") MESSAGE(" Layouts: ${LAYOUT_LIST}") MESSAGE("") - MESSAGE("KokkosKernels TPLs") + MESSAGE("Kokkos Kernels components") + MESSAGE(" COMMON: ON") + MESSAGE(" BATCHED: ${KokkosKernels_ENABLE_BATCHED}") + MESSAGE(" BLAS: ${KokkosKernels_ENABLE_BLAS}") + MESSAGE(" GRAPH: ${KokkosKernels_ENABLE_GRAPH}") + MESSAGE(" SPARSE: ${KokkosKernels_ENABLE_SPARSE}") + MESSAGE("") + MESSAGE("Kokkos Kernels TPLs") FOREACH(TPL ${KOKKOSKERNELS_TPL_LIST}) PAD_STRING("${TPL}:" TPL_PADDED 12) MESSAGE(" ${TPL_PADDED} ${${TPL}_FOUND_INFO}") @@ -253,23 +257,17 @@ ELSE() #I don't want the complexity of sometimes interface/sometimes not #Just minimally force an empty dummy file SET(HEADERS) - SET(SOURCES src/dummy.cpp) + SET(SOURCES common/src/dummy.cpp) # ETI infrastructure to be used by components - include(src/cmake/kokkoskernels_eti.cmake) + include(cmake/kokkoskernels_eti.cmake) SET(ETI_HEADERS) - # Add some common files and directories that we always require - # for TPLs, ETI, etc... - LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src) - LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/impl/tpls) - LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/src/impl) LIST(APPEND HEADERS ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}_config.h) # Only enable requested components # if nothing requested, build everything # to recover original behavior. - INCLUDE(cmake/kokkoskernels_components.cmake) INCLUDE(common/CMakeLists.txt) IF (KokkosKernels_ENABLE_BATCHED) INCLUDE(batched/CMakeLists.txt) diff --git a/KokkosKernels_dummy.cpp b/KokkosKernels_dummy.cpp deleted file mode 100644 index 0d3c5eae9b..0000000000 --- a/KokkosKernels_dummy.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ -// Placate CMake for a header-only package diff --git a/batched/CMakeLists.txt b/batched/CMakeLists.txt index a545406fd5..71903ef4cc 100644 --- a/batched/CMakeLists.txt +++ b/batched/CMakeLists.txt @@ -11,6 +11,7 @@ LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/unit_test IF (NOT KokkosKernels_ENABLE_BLAS) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/impl) + LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/tpls) APPEND_GLOB(HEADERS ${PACKAGE_SOURCE_DIR}/blas/impl/KokkosBlas_util.hpp) LIST(APPEND SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/batched/KokkosBatched_Util.cpp) ENDIF() diff --git a/batched/dense/unit_test/CMakeLists.txt b/batched/dense/unit_test/CMakeLists.txt index ca4d559c61..d12db69f94 100644 --- a/batched/dense/unit_test/CMakeLists.txt +++ b/batched/dense/unit_test/CMakeLists.txt @@ -19,7 +19,6 @@ KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched/dense/impl KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/impl) IF (NOT KokkosKernels_ENABLE_BLAS) - MESSAGE("batched enabled and blas not enabled, we need to include some include directories manually!") KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/blas/src) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/blas/src) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/blas/impl) diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt index 9c6253bbca..02be1d20a7 100644 --- a/blas/CMakeLists.txt +++ b/blas/CMakeLists.txt @@ -1,5 +1,8 @@ LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/src) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/impl) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/eti) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/blas/eti) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/tpls) IF (NOT KokkosKernels_ENABLE_BATCHED) MESSAGE("blas enabled and batched not enabled, we need to include some headers manually!") @@ -22,27 +25,27 @@ KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_C #Include BLAS, Blas host wrapper IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL) #Do NOT add this to include path - APPEND_GLOB(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/impl/tpls/KokkosBlas_Host_tpl.cpp) + APPEND_GLOB(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/tpls/KokkosBlas_Host_tpl.cpp) ENDIF() # Include host blas TPL source file -IF (KOKKOSKERNELS_ENABLE_TPL_BLAS) +IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL) LIST(APPEND SOURCES - src/impl/tpls/KokkosBlas_Host_tpl.cpp + blas/tpls/KokkosBlas_Host_tpl.cpp ) ENDIF() # Include cuda blas TPL source file IF (KOKKOSKERNELS_ENABLE_TPL_CUBLAS) LIST(APPEND SOURCES - src/impl/tpls/KokkosBlas_Cuda_tpl.cpp + blas/tpls/KokkosBlas_Cuda_tpl.cpp ) ENDIF() # Include rocm blas TPL source file IF (KOKKOSKERNELS_ENABLE_TPL_ROCBLAS) LIST(APPEND SOURCES - src/impl/tpls/KokkosBlas_Rocm_tpl.cpp + blas/tpls/KokkosBlas_Rocm_tpl.cpp ) ENDIF() diff --git a/src/impl/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/abs/KokkosBlas1_abs_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/abs/KokkosBlas1_abs_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/abs/KokkosBlas1_abs_mv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/abs/KokkosBlas1_abs_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/axpby/KokkosBlas1_axpby_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/axpby/KokkosBlas1_axpby_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/axpby/KokkosBlas1_axpby_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/axpby/KokkosBlas1_axpby_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/axpby/KokkosBlas1_axpby_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/axpby/KokkosBlas1_axpby_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/axpby/KokkosBlas1_axpby_mv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/axpby/KokkosBlas1_axpby_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/dot/KokkosBlas1_dot_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/dot/KokkosBlas1_dot_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/dot/KokkosBlas1_dot_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/dot/KokkosBlas1_dot_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/dot/KokkosBlas1_dot_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/dot/KokkosBlas1_dot_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/dot/KokkosBlas1_dot_mv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/dot/KokkosBlas1_dot_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/gemm/KokkosBlas3_gemm_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/gemm/KokkosBlas3_gemm_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/gemm/KokkosBlas3_gemm_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/gemm/KokkosBlas3_gemm_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/gemv/KokkosBlas2_gemv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/gemv/KokkosBlas2_gemv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/gemv/KokkosBlas2_gemv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/gemv/KokkosBlas2_gemv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/gesv/KokkosBlas_gesv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/gesv/KokkosBlas_gesv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/gesv/KokkosBlas_gesv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/gesv/KokkosBlas_gesv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/iamax/KokkosBlas1_iamax_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/iamax/KokkosBlas1_iamax_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/iamax/KokkosBlas1_iamax_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/iamax/KokkosBlas1_iamax_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/iamax/KokkosBlas1_iamax_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/iamax/KokkosBlas1_iamax_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/iamax/KokkosBlas1_iamax_mv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/iamax/KokkosBlas1_iamax_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/mult/KokkosBlas1_mult_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/mult/KokkosBlas1_mult_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/mult/KokkosBlas1_mult_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/mult/KokkosBlas1_mult_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/mult/KokkosBlas1_mult_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/mult/KokkosBlas1_mult_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/mult/KokkosBlas1_mult_mv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/mult/KokkosBlas1_mult_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_mv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_mv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_mv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_mv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_mv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/scal/KokkosBlas1_scal_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/scal/KokkosBlas1_scal_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/scal/KokkosBlas1_scal_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/scal/KokkosBlas1_scal_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/scal/KokkosBlas1_scal_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/scal/KokkosBlas1_scal_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/scal/KokkosBlas1_scal_mv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/scal/KokkosBlas1_scal_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/sum/KokkosBlas1_sum_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/sum/KokkosBlas1_sum_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/sum/KokkosBlas1_sum_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/sum/KokkosBlas1_sum_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/sum/KokkosBlas1_sum_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/sum/KokkosBlas1_sum_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/sum/KokkosBlas1_sum_mv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/sum/KokkosBlas1_sum_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/trmm/KokkosBlas3_trmm_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/trmm/KokkosBlas3_trmm_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/trmm/KokkosBlas3_trmm_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/trmm/KokkosBlas3_trmm_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/trsm/KokkosBlas3_trsm_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/trsm/KokkosBlas3_trsm_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/trsm/KokkosBlas3_trsm_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/trsm/KokkosBlas3_trsm_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/trtri/KokkosBlas_trtri_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/trtri/KokkosBlas_trtri_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/trtri/KokkosBlas_trtri_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/trtri/KokkosBlas_trtri_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/update/KokkosBlas1_update_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/update/KokkosBlas1_update_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/update/KokkosBlas1_update_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/update/KokkosBlas1_update_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/update/KokkosBlas1_update_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/update/KokkosBlas1_update_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/update/KokkosBlas1_update_mv_eti_spec_inst.cpp.in rename to blas/eti/generated_specializations_cpp/update/KokkosBlas1_update_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_update_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_update_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_update_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_update_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_update_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_update_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_update_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_update_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_avail.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_decl.hpp.in rename to blas/eti/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_decl.hpp.in diff --git a/src/impl/tpls/KokkosBlas1_abs_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_abs_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_abs_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas1_abs_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas1_abs_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_abs_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_abs_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas1_abs_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas1_axpby_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_axpby_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_axpby_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas1_axpby_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas1_axpby_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_axpby_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_axpby_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas1_axpby_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas1_dot_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_dot_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_dot_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas1_dot_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas1_dot_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_dot_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_dot_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas1_dot_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas1_iamax_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_iamax_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_iamax_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas1_iamax_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas1_iamax_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_iamax_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_iamax_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas1_iamax_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas1_mult_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_mult_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_mult_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas1_mult_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas1_mult_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_mult_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_mult_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas1_mult_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas1_nrm1_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_nrm1_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_nrm1_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas1_nrm1_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas1_nrm1_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_nrm1_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_nrm1_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas1_nrm1_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas1_nrm2_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_nrm2_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_nrm2_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas1_nrm2_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas1_nrm2_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_nrm2_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_nrm2_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas1_nrm2_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas1_nrm2w_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_nrm2w_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_nrm2w_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas1_nrm2w_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas1_nrm2w_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_nrm2w_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_nrm2w_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas1_nrm2w_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas1_nrminf_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_nrminf_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_nrminf_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas1_nrminf_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas1_nrminf_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_nrminf_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_nrminf_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas1_nrminf_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas1_reciprocal_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_reciprocal_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_reciprocal_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas1_reciprocal_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas1_reciprocal_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_reciprocal_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_reciprocal_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas1_reciprocal_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas1_scal_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_scal_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_scal_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas1_scal_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas1_scal_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_scal_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_scal_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas1_scal_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas1_sum_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_sum_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_sum_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas1_sum_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas1_sum_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_sum_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_sum_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas1_sum_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas1_update_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_update_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_update_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas1_update_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas1_update_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_update_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas1_update_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas1_update_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas2_gemv_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas2_gemv_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas2_gemv_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas2_gemv_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas3_trmm_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas3_trmm_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas3_trmm_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas3_trmm_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas3_trmm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas3_trmm_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas3_trmm_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas3_trmm_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas3_trsm_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas3_trsm_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas3_trsm_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas3_trsm_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas3_trsm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas3_trsm_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas3_trsm_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas3_trsm_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas_Cuda_tpl.cpp b/blas/tpls/KokkosBlas_Cuda_tpl.cpp similarity index 100% rename from src/impl/tpls/KokkosBlas_Cuda_tpl.cpp rename to blas/tpls/KokkosBlas_Cuda_tpl.cpp diff --git a/src/impl/tpls/KokkosBlas_Cuda_tpl.hpp b/blas/tpls/KokkosBlas_Cuda_tpl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas_Cuda_tpl.hpp rename to blas/tpls/KokkosBlas_Cuda_tpl.hpp diff --git a/src/impl/tpls/KokkosBlas_Host_tpl.cpp b/blas/tpls/KokkosBlas_Host_tpl.cpp similarity index 100% rename from src/impl/tpls/KokkosBlas_Host_tpl.cpp rename to blas/tpls/KokkosBlas_Host_tpl.cpp diff --git a/src/impl/tpls/KokkosBlas_Host_tpl.hpp b/blas/tpls/KokkosBlas_Host_tpl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas_Host_tpl.hpp rename to blas/tpls/KokkosBlas_Host_tpl.hpp diff --git a/src/impl/tpls/KokkosBlas_Rocm_tpl.cpp b/blas/tpls/KokkosBlas_Rocm_tpl.cpp similarity index 100% rename from src/impl/tpls/KokkosBlas_Rocm_tpl.cpp rename to blas/tpls/KokkosBlas_Rocm_tpl.cpp diff --git a/src/impl/tpls/KokkosBlas_Rocm_tpl.hpp b/blas/tpls/KokkosBlas_Rocm_tpl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas_Rocm_tpl.hpp rename to blas/tpls/KokkosBlas_Rocm_tpl.hpp diff --git a/src/impl/tpls/KokkosBlas_gesv_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas_gesv_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas_gesv_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas_gesv_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas_gesv_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas_gesv_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas_gesv_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas_gesv_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosBlas_tpl_spec.hpp b/blas/tpls/KokkosBlas_tpl_spec.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas_tpl_spec.hpp rename to blas/tpls/KokkosBlas_tpl_spec.hpp diff --git a/src/impl/tpls/KokkosBlas_trtri_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas_trtri_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas_trtri_tpl_spec_avail.hpp rename to blas/tpls/KokkosBlas_trtri_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosBlas_trtri_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas_trtri_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosBlas_trtri_tpl_spec_decl.hpp rename to blas/tpls/KokkosBlas_trtri_tpl_spec_decl.hpp diff --git a/cmake/kokkoskernels_components.cmake b/cmake/kokkoskernels_components.cmake index f96c17cf06..14c586e54f 100644 --- a/cmake/kokkoskernels_components.cmake +++ b/cmake/kokkoskernels_components.cmake @@ -54,19 +54,24 @@ IF (KokkosKernels_ENABLE_BATCHED OR KokkosKernels_ENABLE_BLAS SET(KokkosKernels_ENABLE_ALL_COMPONENTS OFF) ENDIF() -IF (KokkosKernels_ENABLE_SPARSE) +# Graph depends on everything else because it depends +# on Sparse at the moment, breaking that dependency will +# allow for Graph to build pretty much as a standalone +# component. +IF (KokkosKernels_ENABLE_GRAPH) SET(KokkosKernels_ENABLE_BATCHED ON) SET(KokkosKernels_ENABLE_BLAS ON) - SET(KokkosKernels_ENABLE_GRAPH ON) + SET(KokkosKernels_ENABLE_SPARSE ON) ENDIF() -IF (KokkosKernels_ENABLE_GRAPH) +# Sparse depends on everything else so no real benefit +# here unfortunately... +IF (KokkosKernels_ENABLE_SPARSE) SET(KokkosKernels_ENABLE_BATCHED ON) SET(KokkosKernels_ENABLE_BLAS ON) - SET(KokkosKernels_ENABLE_SPARSE ON) + SET(KokkosKernels_ENABLE_GRAPH ON) ENDIF() - # At this point, if ENABLE_ALL_COMPONENTS is # still ON we need to enable all individual # components as they are required for this @@ -77,12 +82,3 @@ IF (KokkosKernels_ENABLE_ALL_COMPONENTS) SET(KokkosKernels_ENABLE_SPARSE ON) SET(KokkosKernels_ENABLE_GRAPH ON) ENDIF() - -MESSAGE("") -MESSAGE("Kokkos Kernels components") -MESSAGE(" COMMON: ON") -MESSAGE(" BATCHED: ${KokkosKernels_ENABLE_BATCHED}") -MESSAGE(" BLAS: ${KokkosKernels_ENABLE_BLAS}") -MESSAGE(" GRAPH: ${KokkosKernels_ENABLE_GRAPH}") -MESSAGE(" SPARSE: ${KokkosKernels_ENABLE_SPARSE}") -MESSAGE("") diff --git a/src/cmake/kokkoskernels_eti.cmake b/cmake/kokkoskernels_eti.cmake similarity index 93% rename from src/cmake/kokkoskernels_eti.cmake rename to cmake/kokkoskernels_eti.cmake index 4d6fe64094..1823bf96b6 100644 --- a/src/cmake/kokkoskernels_eti.cmake +++ b/cmake/kokkoskernels_eti.cmake @@ -156,8 +156,8 @@ MACRO(KOKKOSKERNELS_GENERATE_ETI FUNCTION_NAME SUBFOLDER) LIST(APPEND ${UPPER_NAME}_ETI_AVAIL_LIST "${ETI_AVAIL_MACRO}${MACRO_STRING}") SET(${UPPER_NAME}_ETI_DECL_LIST "${ETI_DECL_MACRO}${MACRO_STRING}") #Make a different source file for each instance - SET(INST_SOURCE "src/impl/generated_specializations_cpp/${SUBFOLDER}/${ETI}.cpp") - SET(INST_TEMPLATE "src/impl/generated_specializations_cpp/${SUBFOLDER}/Kokkos${FUNCTION_NAME}_eti_spec_inst.cpp.in") + SET(INST_SOURCE "${ETI_COMPONENTS}/eti/generated_specializations_cpp/${SUBFOLDER}/${ETI}.cpp") + SET(INST_TEMPLATE "${ETI_COMPONENTS}/eti/generated_specializations_cpp/${SUBFOLDER}/Kokkos${FUNCTION_NAME}_eti_spec_inst.cpp.in") SET(${UPPER_NAME}_ETI_INST_BLOCK "${ETI_INST_MACRO}${MACRO_STRING}") CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${INST_TEMPLATE} ${CMAKE_CURRENT_BINARY_DIR}/${INST_SOURCE}) @@ -167,9 +167,9 @@ MACRO(KOKKOSKERNELS_GENERATE_ETI FUNCTION_NAME SUBFOLDER) MESSAGE(STATUS "Skipping ETI files for ${FUNCTION_NAME} because not all components are enabled") ENDIF() - SET(AVAIL_HEADER "src/impl/generated_specializations_hpp/Kokkos${FUNCTION_NAME}_eti_spec_avail.hpp") + SET(AVAIL_HEADER "${ETI_COMPONENTS}/eti/generated_specializations_hpp/Kokkos${FUNCTION_NAME}_eti_spec_avail.hpp") SET(AVAIL_TEMPLATE "${AVAIL_HEADER}.in") - SET(DECL_HEADER "src/impl/generated_specializations_hpp/Kokkos${FUNCTION_NAME}_eti_spec_decl.hpp") + SET(DECL_HEADER "${ETI_COMPONENTS}/eti/generated_specializations_hpp/Kokkos${FUNCTION_NAME}_eti_spec_decl.hpp") SET(DECL_TEMPLATE "${DECL_HEADER}.in") STRING(REPLACE ";" "\n" ${UPPER_NAME}_ETI_INST_BLOCK "${${UPPER_NAME}_ETI_INST_LIST}") diff --git a/src/KokkosKernels_Macros.hpp b/common/src/KokkosKernels_Macros.hpp similarity index 100% rename from src/KokkosKernels_Macros.hpp rename to common/src/KokkosKernels_Macros.hpp diff --git a/common/KokkosKernels_helpers.hpp b/common/src/KokkosKernels_helpers.hpp similarity index 100% rename from common/KokkosKernels_helpers.hpp rename to common/src/KokkosKernels_helpers.hpp diff --git a/src/KokkosLinAlg_config.h b/common/src/KokkosLinAlg_config.h similarity index 100% rename from src/KokkosLinAlg_config.h rename to common/src/KokkosLinAlg_config.h diff --git a/src/dummy.cpp b/common/src/dummy.cpp similarity index 100% rename from src/dummy.cpp rename to common/src/dummy.cpp diff --git a/graph/CMakeLists.txt b/graph/CMakeLists.txt index 2116a226fd..3d0f0751dc 100644 --- a/graph/CMakeLists.txt +++ b/graph/CMakeLists.txt @@ -1,5 +1,7 @@ LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/graph/src) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/graph/impl) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/graph/eti) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/graph/eti) # Adding unit-tests diff --git a/src/impl/generated_specializations_cpp/color_d1/KokkosGraph_color_d1_eti_spec_inst.cpp.in b/graph/eti/generated_specializations_cpp/color_d1/KokkosGraph_color_d1_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/color_d1/KokkosGraph_color_d1_eti_spec_inst.cpp.in rename to graph/eti/generated_specializations_cpp/color_d1/KokkosGraph_color_d1_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_avail.hpp.in b/graph/eti/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_avail.hpp.in rename to graph/eti/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_decl.hpp.in b/graph/eti/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_decl.hpp.in rename to graph/eti/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_decl.hpp.in diff --git a/graph/impl/KokkosGraph_Distance2Color_impl.hpp b/graph/impl/KokkosGraph_Distance2Color_impl.hpp index c8dddcefb8..78251460d9 100644 --- a/graph/impl/KokkosGraph_Distance2Color_impl.hpp +++ b/graph/impl/KokkosGraph_Distance2Color_impl.hpp @@ -54,7 +54,6 @@ #include #include -#include #include #include "KokkosGraph_Distance1Color.hpp" diff --git a/graph/src/KokkosGraph_Distance2Color.hpp b/graph/src/KokkosGraph_Distance2Color.hpp index dbfd1b40e9..22be362a0c 100644 --- a/graph/src/KokkosGraph_Distance2Color.hpp +++ b/graph/src/KokkosGraph_Distance2Color.hpp @@ -48,6 +48,7 @@ #include "KokkosGraph_Distance2ColorHandle.hpp" #include "KokkosGraph_Distance2Color_impl.hpp" #include "KokkosKernels_Utils.hpp" +#include "KokkosSparse_Utils.hpp" namespace KokkosGraph { diff --git a/src/impl/generated_specializations_cpp/change b/scripts/generate_eti_cpp similarity index 100% rename from src/impl/generated_specializations_cpp/change rename to scripts/generate_eti_cpp diff --git a/src/impl/generated_specializations_hpp/change b/scripts/generate_eti_hpp similarity index 100% rename from src/impl/generated_specializations_hpp/change rename to scripts/generate_eti_hpp diff --git a/sparse/CMakeLists.txt b/sparse/CMakeLists.txt index 687055ac5f..3255b8b7c5 100644 --- a/sparse/CMakeLists.txt +++ b/sparse/CMakeLists.txt @@ -1,8 +1,11 @@ LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/sparse/src) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/sparse/impl) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/sparse/eti) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/sparse/eti) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/sparse/tpls) #Add tpls source file -LIST(APPEND SOURCES src/impl/tpls/KokkosKernels_tpl_handles.cpp) +LIST(APPEND SOURCES sparse/tpls/KokkosKernels_tpl_handles.cpp) ################## diff --git a/src/impl/generated_specializations_cpp/bspgemm_numeric/KokkosSparse_bspgemm_numeric_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/bspgemm_numeric/KokkosSparse_bspgemm_numeric_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/bspgemm_numeric/KokkosSparse_bspgemm_numeric_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/bspgemm_numeric/KokkosSparse_bspgemm_numeric_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/gauss_seidel_apply/KokkosSparse_gauss_seidel_apply_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/gauss_seidel_apply/KokkosSparse_gauss_seidel_apply_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/gauss_seidel_apply/KokkosSparse_gauss_seidel_apply_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/gauss_seidel_apply/KokkosSparse_gauss_seidel_apply_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/gauss_seidel_numeric/KokkosSparse_gauss_seidel_numeric_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/gauss_seidel_numeric/KokkosSparse_gauss_seidel_numeric_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/gauss_seidel_numeric/KokkosSparse_gauss_seidel_numeric_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/gauss_seidel_numeric/KokkosSparse_gauss_seidel_numeric_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/gauss_seidel_symbolic/KokkosSparse_gauss_seidel_symbolic_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/gauss_seidel_symbolic/KokkosSparse_gauss_seidel_symbolic_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/gauss_seidel_symbolic/KokkosSparse_gauss_seidel_symbolic_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/gauss_seidel_symbolic/KokkosSparse_gauss_seidel_symbolic_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/spadd_numeric/KokkosSparse_spadd_numeric_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spadd_numeric/KokkosSparse_spadd_numeric_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/spadd_numeric/KokkosSparse_spadd_numeric_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/spadd_numeric/KokkosSparse_spadd_numeric_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/spadd_symbolic/KokkosSparse_spadd_symbolic_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spadd_symbolic/KokkosSparse_spadd_symbolic_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/spadd_symbolic/KokkosSparse_spadd_symbolic_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/spadd_symbolic/KokkosSparse_spadd_symbolic_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/spgemm_jacobi/KokkosSparse_spgemm_jacobi_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spgemm_jacobi/KokkosSparse_spgemm_jacobi_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/spgemm_jacobi/KokkosSparse_spgemm_jacobi_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/spgemm_jacobi/KokkosSparse_spgemm_jacobi_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/spgemm_numeric/KokkosSparse_spgemm_numeric_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spgemm_numeric/KokkosSparse_spgemm_numeric_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/spgemm_numeric/KokkosSparse_spgemm_numeric_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/spgemm_numeric/KokkosSparse_spgemm_numeric_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/spgemm_symbolic/KokkosSparse_spgemm_symbolic_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spgemm_symbolic/KokkosSparse_spgemm_symbolic_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/spgemm_symbolic/KokkosSparse_spgemm_symbolic_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/spgemm_symbolic/KokkosSparse_spgemm_symbolic_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/spiluk_numeric/KokkosSparse_spiluk_numeric_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spiluk_numeric/KokkosSparse_spiluk_numeric_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/spiluk_numeric/KokkosSparse_spiluk_numeric_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/spiluk_numeric/KokkosSparse_spiluk_numeric_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/spiluk_symbolic/KokkosSparse_spiluk_symbolic_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spiluk_symbolic/KokkosSparse_spiluk_symbolic_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/spiluk_symbolic/KokkosSparse_spiluk_symbolic_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/spiluk_symbolic/KokkosSparse_spiluk_symbolic_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_bsrmatrix_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_bsrmatrix_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_bsrmatrix_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_bsrmatrix_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_struct_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_struct_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_struct_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_struct_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_struct_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_struct_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/spmv/KokkosSparse_spmv_struct_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_struct_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/sptrsv_solve/KokkosSparse_sptrsv_solve_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/sptrsv_solve/KokkosSparse_sptrsv_solve_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/sptrsv_solve/KokkosSparse_sptrsv_solve_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/sptrsv_solve/KokkosSparse_sptrsv_solve_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/sptrsv_symbolic/KokkosSparse_sptrsv_symbolic_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/sptrsv_symbolic/KokkosSparse_sptrsv_symbolic_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/sptrsv_symbolic/KokkosSparse_sptrsv_symbolic_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/sptrsv_symbolic/KokkosSparse_sptrsv_symbolic_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_cpp/trsv/KokkosSparse_trsv_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/trsv/KokkosSparse_trsv_eti_spec_inst.cpp.in similarity index 100% rename from src/impl/generated_specializations_cpp/trsv/KokkosSparse_trsv_eti_spec_inst.cpp.in rename to sparse/eti/generated_specializations_cpp/trsv/KokkosSparse_trsv_eti_spec_inst.cpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_decl.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_avail.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_avail.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_avail.hpp.in diff --git a/src/impl/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_decl.hpp.in similarity index 100% rename from src/impl/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_decl.hpp.in rename to sparse/eti/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_decl.hpp.in diff --git a/src/impl/tpls/KokkosKernels_tpl_handles.cpp b/sparse/tpls/KokkosKernels_tpl_handles.cpp similarity index 100% rename from src/impl/tpls/KokkosKernels_tpl_handles.cpp rename to sparse/tpls/KokkosKernels_tpl_handles.cpp diff --git a/src/impl/tpls/KokkosKernels_tpl_handles_decl.hpp b/sparse/tpls/KokkosKernels_tpl_handles_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosKernels_tpl_handles_decl.hpp rename to sparse/tpls/KokkosKernels_tpl_handles_decl.hpp diff --git a/src/impl/tpls/KokkosKernels_tpl_handles_def.hpp b/sparse/tpls/KokkosKernels_tpl_handles_def.hpp similarity index 100% rename from src/impl/tpls/KokkosKernels_tpl_handles_def.hpp rename to sparse/tpls/KokkosKernels_tpl_handles_def.hpp diff --git a/src/impl/tpls/KokkosSparse_gauss_seidel_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_gauss_seidel_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_gauss_seidel_tpl_spec_avail.hpp rename to sparse/tpls/KokkosSparse_gauss_seidel_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosSparse_gauss_seidel_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_gauss_seidel_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_gauss_seidel_tpl_spec_decl.hpp rename to sparse/tpls/KokkosSparse_gauss_seidel_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosSparse_spadd_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spadd_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spadd_tpl_spec_avail.hpp rename to sparse/tpls/KokkosSparse_spadd_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosSparse_spadd_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spadd_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spadd_tpl_spec_decl.hpp rename to sparse/tpls/KokkosSparse_spadd_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosSparse_spgemm_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spgemm_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spgemm_tpl_spec_avail.hpp rename to sparse/tpls/KokkosSparse_spgemm_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosSparse_spgemm_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spgemm_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spgemm_tpl_spec_decl.hpp rename to sparse/tpls/KokkosSparse_spgemm_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosSparse_spiluk_numeric_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spiluk_numeric_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spiluk_numeric_tpl_spec_avail.hpp rename to sparse/tpls/KokkosSparse_spiluk_numeric_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosSparse_spiluk_numeric_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spiluk_numeric_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spiluk_numeric_tpl_spec_decl.hpp rename to sparse/tpls/KokkosSparse_spiluk_numeric_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_avail.hpp rename to sparse/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_decl.hpp rename to sparse/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_avail.hpp rename to sparse/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_decl.hpp rename to sparse/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosSparse_spmv_mv_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spmv_mv_tpl_spec_avail.hpp rename to sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp rename to sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosSparse_spmv_struct_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spmv_struct_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spmv_struct_tpl_spec_avail.hpp rename to sparse/tpls/KokkosSparse_spmv_struct_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosSparse_spmv_struct_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spmv_struct_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spmv_struct_tpl_spec_decl.hpp rename to sparse/tpls/KokkosSparse_spmv_struct_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosSparse_spmv_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spmv_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spmv_tpl_spec_avail.hpp rename to sparse/tpls/KokkosSparse_spmv_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp rename to sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosSparse_sptrsv_solve_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_sptrsv_solve_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_sptrsv_solve_tpl_spec_avail.hpp rename to sparse/tpls/KokkosSparse_sptrsv_solve_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosSparse_sptrsv_solve_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_sptrsv_solve_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_sptrsv_solve_tpl_spec_decl.hpp rename to sparse/tpls/KokkosSparse_sptrsv_solve_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_avail.hpp rename to sparse/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_decl.hpp rename to sparse/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_decl.hpp diff --git a/src/impl/tpls/KokkosSparse_trsv_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_trsv_tpl_spec_avail.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_trsv_tpl_spec_avail.hpp rename to sparse/tpls/KokkosSparse_trsv_tpl_spec_avail.hpp diff --git a/src/impl/tpls/KokkosSparse_trsv_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_trsv_tpl_spec_decl.hpp similarity index 100% rename from src/impl/tpls/KokkosSparse_trsv_tpl_spec_decl.hpp rename to sparse/tpls/KokkosSparse_trsv_tpl_spec_decl.hpp diff --git a/src/stage/blas3/Kokkos_Blas3.hpp b/src/stage/blas3/Kokkos_Blas3.hpp deleted file mode 100644 index cf9dd9a1bf..0000000000 --- a/src/stage/blas3/Kokkos_Blas3.hpp +++ /dev/null @@ -1,258 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -// Do not use this it has not been tested at all! -#ifndef KOKKOS_BLAS3_HPP_ -#define KOKKOS_BLAS3_HPP_ - -#include -#include // requires C++11 -#include "KokkosKernels_Error.hpp" - -namespace KokkosBlas { - -template -void gemm(const char transA, const char transB, AMat::const_value_type alpha, - const AMat& a, const BMat& b, CMat::const_value_type beta, - const CMat& c) { - static_assert(Kokkos::is_view::value, - "KokkosBlas::gemm: AMat must be a Kokkos::View."); - static_assert(Kokkos::is_view::value, - "KokkosBlas::gemm: BMat must be a Kokkos::View."); - static_assert(Kokkos::is_view::value, - "KokkosBlas::gemm: CMat must be a Kokkos::View."); - static_assert(AMat::rank != BMat::rank && CMat::rank != BMat::rank, - "KokkosBlas::gemm: Matrix ranks do not match."); - static_assert(AMat::rank != 2 || AMat::rank != 3, - "KokkosBlas::gemm: Matrix ranks do not match."); - // Check compatibility of dimensions at run time. - if ((transA == 'n' || transA == 'N') && (transB == 'n' || transB == 'N')) { - if (rank == 2) { - if (a.extent(0) != c.extent(0) || a.extent(1) != b.extent(0) || - b.extent(1) != c.extent(1)) { - std::ostringstream os; - os << "KokkosBlas::gemm: Matrix Dimensions Dimensions do not match for " - "A notrans and B notrans: " - << ", A: " - << "(" << a.extent(0) << "," << a.extent(1) << ")" - << ", B: " - << "(" << b.extent(0) << "," << b.extent(1) << ")" - << ", C: " - << "(" << c.extent(0) << "," << c.extent(1) << ")"; - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - } else if (rank == 3) { - if (a.extent(1) != c.extent(1) || a.extent(2) != b.extent(1) || - b.extent(2) != c.extent(2) || a.extent(0) != b.extent(0) || - b.extent(0) != c.extent(0)) { - std::ostringstream os; - os << "KokkosBlas::gemm: Matrix Dimensions Dimensions do not match for " - "A notrans and B notrans: " - << ", A: " - << "(" << a.extent(0) << "," << a.extent(1) << "," << a.extent(2) - << ")" - << ", B: " - << "(" << b.extent(0) << "," << b.extent(1) << "," << b.extent(2) - << ")" - << ", C: " - << "(" << c.extent(0) << "," << c.extent(1) << "," << c.extent(2) - << ")"; - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - } - - } else if ((transA == 'n' || transA == 'N') && - (transB == 't' || transB == 'T')) { - if (rank == 2) { - if (a.extent(0) != c.extent(0) || a.extent(1) != b.extent(1) || - b.extent(0) != c.extent(1)) { - std::ostringstream os; - os << "KokkosBlas::gemm: Matrix Dimensions Dimensions do not match for " - "A notrans and B notrans: " - << ", A: " - << "(" << a.extent(0) << "," << a.extent(1) << ")" - << ", B: " - << "(" << b.extent(0) << "," << b.extent(1) << ")" - << ", C: " - << "(" << c.extent(0) << "," << c.extent(1) << ")"; - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - } else if (rank == 3) { - if (a.extent(1) != c.extent(1) || a.extent(2) != b.extent(2) || - b.extent(1) != c.extent(2) || a.extent(0) != b.extent(0) || - b.extent(0) != c.extent(0)) { - std::ostringstream os; - os << "KokkosBlas::gemm: Matrix Dimensions Dimensions do not match for " - "A notrans and B notrans: " - << ", A: " - << "(" << a.extent(0) << "," << a.extent(1) << "," << a.extent(2) - << ")" - << ", B: " - << "(" << b.extent(0) << "," << b.extent(1) << "," << b.extent(2) - << ")" - << ", C: " - << "(" << c.extent(0) << "," << c.extent(1) << "," << c.extent(2) - << ")"; - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - } - - } else if ((transA == 't' || transA == 'T') && - (transB == 'n' || transB == 'N')) { - if (rank == 2) { - if (a.extent(1) != c.extent(0) || a.extent(0) != b.extent(0) || - b.extent(1) != c.extent(1)) { - std::ostringstream os; - os << "KokkosBlas::gemm: Matrix Dimensions Dimensions do not match for " - "A notrans and B notrans: " - << ", A: " - << "(" << a.extent(0) << "," << a.extent(1) << ")" - << ", B: " - << "(" << b.extent(0) << "," << b.extent(1) << ")" - << ", C: " - << "(" << c.extent(0) << "," << c.extent(1) << ")"; - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - } else if (rank == 3) { - if (a.extent(2) != c.extent(1) || a.extent(1) != b.extent(1) || - b.extent(2) != c.extent(2) || a.extent(0) != b.extent(0) || - b.extent(0) != c.extent(0)) { - std::ostringstream os; - os << "KokkosBlas::gemm: Matrix Dimensions Dimensions do not match for " - "A notrans and B notrans: " - << ", A: " - << "(" << a.extent(0) << "," << a.extent(1) << "," << a.extent(2) - << ")" - << ", B: " - << "(" << b.extent(0) << "," << b.extent(1) << "," << b.extent(2) - << ")" - << ", C: " - << "(" << c.extent(0) << "," << c.extent(1) << "," << c.extent(2) - << ")"; - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - } - - } else if ((transA == 't' || transA == 'T') && - (transB == 't' || transB == 'T')) { - if (rank == 2) { - if (a.extent(1) != c.extent(0) || a.extent(0) != b.extent(1) || - b.extent(0) != c.extent(1)) { - std::ostringstream os; - os << "KokkosBlas::gemm: Matrix Dimensions Dimensions do not match for " - "A notrans and B notrans: " - << ", A: " - << "(" << a.extent(0) << "," << a.extent(1) << ")" - << ", B: " - << "(" << b.extent(0) << "," << b.extent(1) << ")" - << ", C: " - << "(" << c.extent(0) << "," << c.extent(1) << ")"; - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - } else if (rank == 3) { - if (a.extent(2) != c.extent(1) || a.extent(1) != b.extent(2) || - b.extent(1) != c.extent(2) || a.extent(0) != b.extent(0) || - b.extent(0) != c.extent(0)) { - std::ostringstream os; - os << "KokkosBlas::gemm: Matrix Dimensions Dimensions do not match for " - "A notrans and B notrans: " - << ", A: " - << "(" << a.extent(0) << "," << a.extent(1) << "," << a.extent(2) - << ")" - << ", B: " - << "(" << b.extent(0) << "," << b.extent(1) << "," << b.extent(2) - << ")" - << ", C: " - << "(" << c.extent(0) << "," << c.extent(1) << "," << c.extent(2) - << ")"; - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - } - - } else { - std::ostringstream os; - os << "KokkosBlas::gemm: values for transA or transB should be T t or N n " - "you have input: " - << "TransA:" << transA << " TransB:" << transB; - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - - typedef Kokkos::View::type, - typename AMat::array_layout, typename AMat::device_type, - Kokkos::MemoryTraits, - typename AMat::specialize> - AMat_Internal; - - typedef Kokkos::View::type, - typename BMat::array_layout, typename BMat::device_type, - Kokkos::MemoryTraits, - typename BMat::specialize> - BMat_Internal; - - typedef Kokkos::View::type, - typename CMat::array_layout, typename CMat::device_type, - Kokkos::MemoryTraits, - typename CMat::specialize> - CMat_Internal; - - AMat_Internal a_i = a; - BMat_Internal b_i = b; - CMat_Internal c_i = c; - - Impl::MultiGemm::GEMM(transA, transB, alpha, A, - B, beta, C); -} - -} // namespace KokkosBlas - -#endif // KOKKOS_BLAS3_HPP_ diff --git a/src/stage/blas3/Kokkos_Blas3_impl.hpp b/src/stage/blas3/Kokkos_Blas3_impl.hpp deleted file mode 100644 index c33372f695..0000000000 --- a/src/stage/blas3/Kokkos_Blas3_impl.hpp +++ /dev/null @@ -1,1797 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -// Do not use this it has not been tested at all! -#ifndef KOKKOS_BLAS3_IMPL_HPP_ -#define KOKKOS_BLAS3_IMPL_HPP_ - -#include -#include -#include -#ifdef KOKKOS_USE_MKL -#include -#endif -#ifdef KOKKOS_ENABLE_CUDA -#include -#endif -namespace KokkosBlas { -namespace Impl { -// Define block size - -size_t block_size = 32; - -template -struct blas3_right_2_N_N { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()( - const size_type &jjblocknum) const { - size_type jj = jjblocknum * block_size; - - for (size_type i = 0; i < c.extent(0); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < - ((jj + block_size) > c.extent(1) ? c.extent(1) : (jj + block_size)); - j++) { - c(i, j) = beta * c(i, j); - } - } - - for (size_type kk = 0; kk < a.extent(1); kk += block_size) { - for (size_type i = 0; i < c.extent(0); i++) { - for (size_type k = kk; - k < ((kk + block_size) > a.extent(1) ? a.extent(1) - : (kk + block_size)); - k++) { - AMat::const_value_type alpha_a = alpha * a(i, k); -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < ((jj + block_size) > c.extent(1) ? c.extent(1) - : (jj + block_size)); - j++) { - c(i, j) += alpha_a * b(k, j); - } - } - } - } - } -}; - -template -struct blas3_right_2_N_T { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()( - const size_type &jjblocknum) const { - size_type jj = jjblocknum * block_size; - - for (size_type i = 0; i < c.extent(0); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < - ((jj + block_size) > c.extent(1) ? c.extent(1) : (jj + block_size)); - j++) { - c(i, j) = beta * c(i, j); - } - } - - for (size_type kk = 0; kk < a.extent(1); kk += block_size) { - for (size_type i = 0; i < c.extent(0); i++) { - for (size_type j = jj; - j < ((jj + block_size) > c.extent(1) ? c.extent(1) - : (jj + block_size)); - j++) { - CMat::non_const_value_type temp = 0; -#ifdef KOKKOS_ENABLE_PRAGMA_UNROLL -#pragma unroll -#endif - - for (size_type k = kk; - k < ((kk + block_size) > a.extent(1) ? a.extent(1) - : (kk + block_size)); - k++) { - temp += alpha * a(i, k) * b(j, k); - } - c(i, j) += temp; - } - } - } - } -}; - -template -struct blas3_right_2_T_N { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()( - const size_type &jjblocknum) const { - size_type jj = jjblocknum * block_size; - - for (size_type i = 0; i < c.extent(0); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < - ((jj + block_size) > c.extent(1) ? c.extent(1) : (jj + block_size)); - j++) { - c(i, j) = beta * c(i, j); - } - } - - for (size_type kk = 0; kk < a.extent(0); kk += block_size) { - for (size_type k = kk; - k < - ((kk + block_size) > a.extent(0) ? a.extent(0) : (kk + block_size)); - k++) { - for (size_type i = 0; i < c.extent(0); i++) { - AMat::const_value_type alpha_a = alpha * a(k, i); -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < ((jj + block_size) > c.extent(1) ? c.extent(1) - : (jj + block_size)); - j++) { - c(i, j) += alpha_a * b(k, j); - } - } - } - } - } -}; - -template -struct blas3_right_2_T_T { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()( - const size_type &jjblocknum) const { - size_type jj = jjblocknum * block_size; - - for (size_type i = 0; i < c.extent(0); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < - ((jj + block_size) > c.extent(1) ? c.extent(1) : (jj + block_size)); - j++) { - c(i, j) = beta * c(i, j); - } - } - - for (size_type kk = 0; kk < a.extent(0); kk += block_size) { - for (size_type i = 0; i < c.extent(0); i++) { - for (size_type k = kk; - k < ((kk + block_size) > a.extent(0) ? a.extent(0) - : (kk + block_size)); - k++) { - AMat::const_value_type alpha_a = alpha * a(k, i); -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < ((jj + block_size) > c.extent(1) ? c.extent(1) - : (jj + block_size)); - j++) { - c(i, j) += alpha_a * b(j, k); - } - } - } - } - } -}; - -template -struct blas3_left_2_N_N { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()( - const size_type &jjblocknum) const { - size_type jj = jjblocknum * block_size; - - for (size_type j = jj; - j < - ((jj + block_size) > c.extent(1) ? c.extent(1) : (jj + block_size)); - j++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - for (size_type i = 0; i < c.extent(0); i++) { - c(i, j) = beta * c(i, j); - } - } - - for (size_type kk = 0; kk < a.extent(1); kk += block_size) { - for (size_type j = jj; - j < - ((jj + block_size) > c.extent(1) ? c.extent(1) : (jj + block_size)); - j++) { - for (size_type k = kk; - k < ((kk + block_size) > a.extent(1) ? a.extent(1) - : (kk + block_size)); - k++) { - BMat::const_value_type alpha_b = alpha * b(k, j); -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type i = 0; i < c.extent(0); i++) { - c(i, j) += alpha_b * a(i, k); - } - } - } - } - } -}; - -template -struct blas3_left_2_N_T { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()( - const size_type &jjblocknum) const { - size_type jj = jjblocknum * block_size; - - for (size_type j = jj; - j < - ((jj + block_size) > c.extent(1) ? c.extent(1) : (jj + block_size)); - j++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - for (size_type i = 0; i < c.extent(0); i++) { - c(i, j) = beta * c(i, j); - } - } - - for (size_type kk = 0; kk < a.extent(1); kk += block_size) { - for (size_type k = kk; - k < - ((kk + block_size) > a.extent(1) ? a.extent(1) : (kk + block_size)); - k++) { - for (size_type j = jj; - j < ((jj + block_size) > c.extent(1) ? c.extent(1) - : (jj + block_size)); - j++) { - BMat::const_value_type alpha_b = alpha * b(j, k); -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type i = 0; i < c.extent(0); i++) { - c(i, j) += alpha_b * a(i, k); - } - } - } - } - } -}; - -template -struct blas3_left_2_T_N { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()( - const size_type &jjblocknum) const { - size_type jj = jjblocknum * block_size; - - for (size_type j = jj; - j < - ((jj + block_size) > c.extent(1) ? c.extent(1) : (jj + block_size)); - j++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - for (size_type i = 0; i < c.extent(0); i++) { - c(i, j) = beta * c(i, j); - } - } - - for (size_type kk = 0; kk < a.extent(0); kk += block_size) { - for (size_type i = 0; i < c.extent(0); i++) { - for (size_type j = jj; - j < ((jj + block_size) > c.extent(1) ? c.extent(1) - : (jj + block_size)); - j++) { - CMat::non_const_value_type temp = 0; -#ifdef KOKKOS_ENABLE_PRAGMA_UNROLL -#pragma unroll -#endif - - for (size_type k = kk; - k < ((kk + block_size) > a.extent(0) ? a.extent(0) - : (kk + block_size)); - k++) { - temp += alpha * a(k, i) * b(k, j); - } - c(i, j) += temp; - } - } - } - } -}; - -template -struct blas3_left_2_T_T { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()( - const size_type &jjblocknum) const { - size_type jj = jjblocknum * block_size; - - for (size_type j = jj; - j < - ((jj + block_size) > c.extent(1) ? c.extent(1) : (jj + block_size)); - j++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - for (size_type i = 0; i < c.extent(0); i++) { - c(i, j) = beta * c(i, j); - } - } - - for (size_type kk = 0; kk < a.extent(0); kk += block_size) { - for (size_type k = kk; - k < - ((kk + block_size) > a.extent(0) ? a.extent(0) : (kk + block_size)); - k++) { - for (size_type j = jj; - j < ((jj + block_size) > c.extent(1) ? c.extent(1) - : (jj + block_size)); - j++) { - BMat::const_value_type alpha_b = alpha * b(j, k); -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type i = 0; i < c.extent(0); i++) { - c(i, j) += alpha_b * a(k, i); - } - } - } - } - } -}; - -template -struct blas3_right_3_N_N { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()(const size_type &matnum) const { - for (size_type jj = 0; jj < c.extent(2); jj += block_size) { - for (size_type i = 0; i < c.extent(1); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < ((jj + block_size) > c.extent(2) ? c.extent(2) - : (jj + block_size)); - j++) { - c(matnum, i, j) = beta * c(matnum, i, j); - } - } - - for (size_type kk = 0; kk < a.extent(2); kk += block_size) { - for (size_type i = 0; i < c.extent(1); i++) { - for (size_type k = kk; - k < ((kk + block_size) > a.extent(2) ? a.extent(2) - : (kk + block_size)); - k++) { - AMat::const_value_type alpha_a = alpha * a(matnum, i, k); -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < ((jj + block_size) > c.extent(2) ? c.extent(2) - : (jj + block_size)); - j++) { - c(matnum, i, j) += alpha_a * b(matnum, k, j); - } - } - } - } - } - } -}; - -template -struct blas3_right_3_N_T { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()(const size_type &matnum) const { - for (size_type jj = 0; jj < c.extent(2); jj += block_size) { - for (size_type i = 0; i < c.extent(1); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < ((jj + block_size) > c.extent(2) ? c.extent(2) - : (jj + block_size)); - j++) { - c(matnum, i, j) = beta * c(matnum, i, j); - } - } - - for (size_type kk = 0; kk < a.extent(2); kk += block_size) { - for (size_type i = 0; i < c.extent(1); i++) { - for (size_type j = jj; - j < ((jj + block_size) > c.extent(2) ? c.extent(2) - : (jj + block_size)); - j++) { - CMat::non_const_value_type temp = 0; -#ifdef KOKKOS_ENABLE_PRAGMA_UNROLL -#pragma unroll -#endif - - for (size_type k = kk; - k < ((kk + block_size) > a.extent(2) ? a.extent(2) - : (kk + block_size)); - k++) { - temp += alpha * a(matnum, i, k) * b(matnum, j, k); - } - c(matnum, i, j) += temp; - } - } - } - } - } -}; - -template -struct blas3_right_3_T_N { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()(const size_type &matnum) const { - for (size_type jj = 0; jj < c.extent(2); jj += block_size) { - for (size_type i = 0; i < c.extent(1); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < ((jj + block_size) > c.extent(2) ? c.extent(2) - : (jj + block_size)); - j++) { - c(matnum, i, j) = beta * c(matnum, i, j); - } - } - - for (size_type kk = 0; kk < a.extent(1); kk += block_size) { - for (size_type k = kk; - k < ((kk + block_size) > a.extent(1) ? a.extent(1) - : (kk + block_size)); - k++) { - for (size_type i = 0; i < c.extent(1); i++) { - AMat::const_value_type alpha_a = alpha * a(matnum, k, i); -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < ((jj + block_size) > c.extent(2) ? c.extent(2) - : (jj + block_size)); - j++) { - c(matnum, i, j) += alpha_a * b(matnum, k, j); - } - } - } - } - } - } -}; - -template -struct blas3_right_3_T_T { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()(const size_type &matnum) const { - for (size_type jj = 0; jj < c.extent(2); jj += block_size) { - for (size_type i = 0; i < c.extent(1); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < ((jj + block_size) > c.extent(2) ? c.extent(2) - : (jj + block_size)); - j++) { - c(matnum, i, j) = beta * c(matnum, i, j); - } - } - - for (size_type kk = 0; kk < a.extent(1); kk += block_size) { - for (size_type i = 0; i < c.extent(1); i++) { - for (size_type k = kk; - k < ((kk + block_size) > a.extent(1) ? a.extent(1) - : (kk + block_size)); - k++) { - AMat::const_value_type alpha_a = alpha * a(k, i); -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type j = jj; - j < ((jj + block_size) > c.extent(2) ? c.extent(2) - : (jj + block_size)); - j++) { - c(i, j) += alpha_a * b(j, k); - } - } - } - } - } - } -}; - -template -struct blas3_left_3_N_N { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()( - const size_type &jjblocknum) const { - size_type jj = jjblocknum * block_size; - - for (size_type j = jj; - j < - ((jj + block_size) > c.extent(2) ? c.extent(2) : (jj + block_size)); - j++) { - for (size_type i = 0; i < c.extent(1); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - for (size_type matnum = 0; matnum < c.extent(0); matnum++) { - c(matnum, i, j) = beta * c(matnum, i, j); - } - } - } - - for (size_type kk = 0; kk < a.extent(2); kk += block_size) { - for (size_type j = jj; - j < - ((jj + block_size) > c.extent(2) ? c.extent(2) : (jj + block_size)); - j++) { - for (size_type k = kk; - k < ((kk + block_size) > a.extent(2) ? a.extent(2) - : (kk + block_size)); - k++) { - for (size_type i = 0; i < c.extent(1); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - for (size_type matnum = 0; matnum < c.extent(0); matnum++) { - c(matnum, i, j) += alpha * b(matnum, k, j) * a(matnum, i, k); - } - } - } - } - } - } -}; - -template -struct blas3_left_3_N_T { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()( - const size_type &jjblocknum) const { - size_type jj = jjblocknum * block_size; - - for (size_type j = jj; - j < - ((jj + block_size) > c.extent(2) ? c.extent(2) : (jj + block_size)); - j++) { - for (size_type i = 0; i < c.extent(1); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - for (size_type matnum = 0; matnum < c.extent(0); matnum++) { - c(matnum, i, j) = beta * c(matnum, i, j); - } - } - } - - for (size_type kk = 0; kk < a.extent(2); kk += block_size) { - for (size_type k = kk; - k < - ((kk + block_size) > a.extent(2) ? a.extent(2) : (kk + block_size)); - k++) { - for (size_type j = jj; - j < ((jj + block_size) > c.extent(2) ? c.extent(2) - : (jj + block_size)); - j++) { - for (size_type i = 0; i < c.extent(1); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type matnum = 0; matnum < c.extent(0); matnum++) { - c(matnum, i, j) += alpha * b(matnum, j, k) * a(matnum, i, k); - } - } - } - } - } - }; - - template - struct blas3_left_3_T_N { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()( - const size_type &jjblocknum) const { - size_type jj = jjblocknum * block_size; - - for (size_type j = jj; - j < - ((jj + block_size) > c.extent(2) ? c.extent(2) : (jj + block_size)); - j++) { - for (size_type i = 0; i < c.extent(1); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type matnum = 0; matnum < c.extent(0); matnum++) { - c(matnum, i, j) = beta * c(matnum, i, j); - } - } - } - - for (size_type kk = 0; kk < a.extent(1); kk += block_size) { - for (size_type i = 0; i < c.extent(1); i++) { - for (size_type j = jj; - j < ((jj + block_size) > c.extent(2) ? c.extent(2) - : (jj + block_size)); - j++) { - for (size_type k = kk; - k < ((kk + block_size) > a.extent(1) ? a.extent(1) - : (kk + block_size)); - k++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type matnum = 0; matnum < c.extent(0); matnum++) { - c(matnum, i, j) += alpha * a(matnum, k, i) * b(matnum, k, j); - } - } - } - } - } - }; - - template - struct blas3_left_3_T_T { - typedef typename AMat::execution_space execution_space; - typedef AMat::size_type size_type; - - AMat a; - BMat b; - CMat c; - AMat::non_const_value_type alpha; - CMat::non_const_value_type beta; - (AMat::const_value_type alpha_, const AMat &a_, const BMat &b_, - CMat::const_value_type beta, CMat &c_) - : alpha(alpha_), a(a_), b(b_), beta(beta_), c(c_) {} - - // Prefer const size_type& to const size_type or size_type, - // since the compiler has an easier time inlining the former. - KOKKOS_FORCEINLINE_FUNCTION void operator()( - const size_type &jjblocknum) const { - size_type jj = jjblocknum * block_size; - - for (size_type j = jj; - j < ((jj + block_size) > c.extent(2) ? c.extent(2) - : (jj + block_size)); - j++) { - for (size_type i = 0; i < c.extent(1); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type matnum = 0; matnum < c.extent(0); matnum++) { - c(matnum, i, j) = beta * c(matnum, i, j); - } - } - - for (size_type kk = 0; kk < a.extent(1); kk += block_size) { - for (size_type k = kk; - k < ((kk + block_size) > a.extent(1) ? a.extent(1) - : (kk + block_size)); - k++) { - for (size_type j = jj; - j < ((jj + block_size) > c.extent(2) ? c.extent(2) - : (jj + block_size)); - j++) { - for (size_type i = 0; i < c.extent(1); i++) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif -#ifdef KOKKOS_ENABLE_PRAGMA_VECTOR -#pragma vector always -#endif - - for (size_type matnum = 0; matnum < c.extent(0); matnum++) { - c(matnum, i, j) += - alpha * b(matnum, j, k) * a(matnum, k, i); - } - } - } - } - } - }; - - template - struct MultiGemm; - - template - struct MultiGemm { - static void GEMM(const char transA, const char transB, ScalarA alpha, - Kokkos::View A, - Kokkos::View B, - ScalarC beta, - Kokkos::View C) { - if ((transA == 'n' || transA == 'N') && - (transB == 'n' || transB == 'N')) { - sizetype jblocks = 0; - if (C.extent(1) % block_size == 0) { - jblocks = C.extent(1) / block_size; - } else { - jblocks = C.extent(1) / block_size + 1; - } - Kokkos::parallel_for( - jblocks, - blas3_right_2_N_N, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } else if ((transA == 'n' || transA == 'N') && - (transB == 't' || transB == 'T')) { - sizetype jblocks = 0; - if (C.extent(1) % block_size == 0) { - jblocks = C.extent(1) / block_size; - } else { - jblocks = C.extent(1) / block_size + 1; - } - Kokkos::parallel_for( - jblocks, - blas3_right_2_N_T, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } else if ((transA == 't' || transA == 'T') && - (transB == 'n' || transB == 'N')) { - sizetype jblocks = 0; - if (C.extent(1) % block_size == 0) { - jblocks = C.extent(1) / block_size; - } else { - jblocks = C.extent(1) / block_size + 1; - } - Kokkos::parallel_for( - jblocks, - blas3_right_2_T_N, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } else if ((transA == 't' || transA == 'T') && - (transB == 't' || transB == 'T')) { - sizetype jblocks = 0; - if (C.extent(1) % block_size == 0) { - jblocks = C.extent(1) / block_size; - } else { - jblocks = C.extent(1) / block_size + 1; - } - Kokkos::parallel_for( - jblocks, - blas3_right_2_T_T, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } - } - }; - - template - struct MultiGemm { - static void GEMM(const char transA, const char transB, ScalarA alpha, - Kokkos::View A, - Kokkos::View B, - ScalarC beta, - Kokkos::View C) { - if ((transA == 'n' || transA == 'N') && - (transB == 'n' || transB == 'N')) { - Kokkos::parallel_for( - C.extent(0), blas3_right_3_N_N< - Kokkos::View, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - - } else if ((transA == 'n' || transA == 'N') && - (transB == 't' || transB == 'T')) { - Kokkos::parallel_for( - C.extent(0), blas3_right_3_N_T< - Kokkos::View, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - - } else if ((transA == 't' || transA == 'T') && - (transB == 'n' || transB == 'N')) { - Kokkos::parallel_for( - C.extent(0), blas3_right_3_T_N< - Kokkos::View, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - - } else if ((transA == 't' || transA == 'T') && - (transB == 't' || transB == 'T')) { - Kokkos::parallel_for( - C.extent(0), blas3_right_3_T_T< - Kokkos::View, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } - } - }; - template - struct MultiGemm { - static void GEMM( - const char transA, const char transB, ScalarA alpha, - Kokkos::View A, - Kokkos::View B, - ScalarC beta, - Kokkos::View C) { - if ((transA == 'n' || transA == 'N') && - (transB == 'n' || transB == 'N')) { - sizetype jblocks = 0; - if (C.extent(1) % block_size == 0) { - jblocks = C.extent(1) / block_size; - } else { - jblocks = C.extent(1) / block_size + 1; - } - Kokkos::parallel_for( - jblocks, - blas3_right_2_N_N, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } else if ((transA == 'n' || transA == 'N') && - (transB == 't' || transB == 'T')) { - sizetype jblocks = 0; - if (C.extent(1) % block_size == 0) { - jblocks = C.extent(1) / block_size; - } else { - jblocks = C.extent(1) / block_size + 1; - } - Kokkos::parallel_for( - jblocks, - blas3_right_2_N_T, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } else if ((transA == 't' || transA == 'T') && - (transB == 'n' || transB == 'N')) { - sizetype jblocks = 0; - if (C.extent(1) % block_size == 0) { - jblocks = C.extent(1) / block_size; - } else { - jblocks = C.extent(1) / block_size + 1; - } - Kokkos::parallel_for( - jblocks, - blas3_right_2_T_N, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } else if ((transA == 't' || transA == 'T') && - (transB == 't' || transB == 'T')) { - sizetype jblocks = 0; - if (C.extent(1) % block_size == 0) { - jblocks = C.extent(1) / block_size; - } else { - jblocks = C.extent(1) / block_size + 1; - } - Kokkos::parallel_for( - jblocks, - blas3_right_2_T_T, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } - } - }; - - template - struct MultiGemm { - static void GEMM( - const char transA, const char transB, ScalarA alpha, - Kokkos::View A, - Kokkos::View B, - ScalarC beta, - Kokkos::View C) { - if ((transA == 'n' || transA == 'N') && - (transB == 'n' || transB == 'N')) { - Kokkos::parallel_for( - C.extent(0), - blas3_right_3_N_N< - Kokkos::View, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - - } else if ((transA == 'n' || transA == 'N') && - (transB == 't' || transB == 'T')) { - Kokkos::parallel_for( - C.extent(0), - blas3_right_3_N_T< - Kokkos::View, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - - } else if ((transA == 't' || transA == 'T') && - (transB == 'n' || transB == 'N')) { - Kokkos::parallel_for( - C.extent(0), - blas3_right_3_T_N< - Kokkos::View, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - - } else if ((transA == 't' || transA == 'T') && - (transB == 't' || transB == 'T')) { - Kokkos::parallel_for( - C.extent(0), - blas3_right_3_T_T< - Kokkos::View, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } - } - }; - - template - struct MultiGemm { - static void GEMM( - const char transA, const char transB, ScalarA alpha, - Kokkos::View A, - Kokkos::View B, - ScalarC beta, - Kokkos::View C) { - if ((transA == 'n' || transA == 'N') && - (transB == 'n' || transB == 'N')) { - sizetype jblocks = 0; - if (C.extent(1) % block_size == 0) { - jblocks = C.extent(1) / block_size; - } else { - jblocks = C.extent(1) / block_size + 1; - } - Kokkos::parallel_for( - jblocks, - blas3_left_2_N_N, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } else if ((transA == 'n' || transA == 'N') && - (transB == 't' || transB == 'T')) { - sizetype jblocks = 0; - if (C.extent(1) % block_size == 0) { - jblocks = C.extent(1) / block_size; - } else { - jblocks = C.extent(1) / block_size + 1; - } - Kokkos::parallel_for( - jblocks, - blas3_left_2_N_T, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } else if ((transA == 't' || transA == 'T') && - (transB == 'n' || transB == 'N')) { - sizetype jblocks = 0; - if (C.extent(1) % block_size == 0) { - jblocks = C.extent(1) / block_size; - } else { - jblocks = C.extent(1) / block_size + 1; - } - Kokkos::parallel_for( - jblocks, - blas3_left_2_T_N, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } else if ((transA == 't' || transA == 'T') && - (transB == 't' || transB == 'T')) { - sizetype jblocks = 0; - if (C.extent(1) % block_size == 0) { - jblocks = C.extent(1) / block_size; - } else { - jblocks = C.extent(1) / block_size + 1; - } - Kokkos::parallel_for( - jblocks, - blas3_left_2_T_T, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } - } - }; - - template - struct MultiGemm { - static void GEMM( - const char transA, const char transB, ScalarA alpha, - Kokkos::View A, - Kokkos::View B, - ScalarC beta, - Kokkos::View C) { - if ((transA == 'n' || transA == 'N') && - (transB == 'n' || transB == 'N')) { - Kokkos::parallel_for( - C.extent(0), - blas3_left_3_N_N< - Kokkos::View, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - - } else if ((transA == 'n' || transA == 'N') && - (transB == 't' || transB == 'T')) { - Kokkos::parallel_for( - C.extent(0), - blas3_left_3_N_T< - Kokkos::View, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - - } else if ((transA == 't' || transA == 'T') && - (transB == 'n' || transB == 'N')) { - Kokkos::parallel_for( - C.extent(0), - blas3_left_3_T_N< - Kokkos::View, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - - } else if ((transA == 't' || transA == 'T') && - (transB == 't' || transB == 'T')) { - Kokkos::parallel_for( - C.extent(0), - blas3_left_3_T_T< - Kokkos::View, - Kokkos::View, - Kokkos::View >( - alpha, A, B, beta, C)); - } - } - }; - -#ifdef KOKKOS_USE_MKL - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, double alpha, - Kokkos::View A, - Kokkos::View B, - double beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? k : m; - const int ldb = (transA == 'N' || transA == 'n') ? n : k; - const int ldc = n; - cblas_dgemm(CblasRowMajor, transA, transB, m, n, k, alpha, A.data(), - lda, B.data(), ldb, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, double alpha, - Kokkos::View A, - Kokkos::View B, - double beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? k : m; - const int ldb = (transA == 'N' || transA == 'n') ? n : k; - const int ldc = n; - cblas_dgemm(CblasRowMajor, transA, transB, m, n, k, alpha, A.data(), - lda, B.data(), ldb, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, double alpha, - Kokkos::View A, - Kokkos::View B, - double beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? m : k; - const int ldb = (transA == 'N' || transA == 'n') ? k : n; - const int ldc = m; - cblas_dgemm(CblasColMajor, transA, transB, m, n, k, alpha, A.data(), - lda, B.data(), ldb, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, double alpha, - Kokkos::View A, - Kokkos::View B, - double beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? m : k; - const int ldb = (transA == 'N' || transA == 'n') ? k : n; - const int ldc = m; - cblas_dgemm(CblasColMajor, transA, transB, m, n, k, alpha, A.data(), - lda, B.data(), ldb, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, float alpha, - Kokkos::View A, - Kokkos::View B, - float beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? k : m; - const int ldb = (transA == 'N' || transA == 'n') ? n : k; - const int ldc = n; - cblas_sgemm(CblasRowMajor, transA, transB, m, n, k, alpha, A.data(), - lda, B.data(), ldb, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, float alpha, - Kokkos::View A, - Kokkos::View B, - float beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? k : m; - const int ldb = (transA == 'N' || transA == 'n') ? n : k; - const int ldc = n; - cblas_sgemm(CblasRowMajor, transA, transB, m, n, k, alpha, A.data(), - lda, B.data(), ldb, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, float alpha, - Kokkos::View A, - Kokkos::View B, - float beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? m : k; - const int ldb = (transA == 'N' || transA == 'n') ? k : n; - const int ldc = m; - cblas_sgemm(CblasColMajor, transA, transB, m, n, k, alpha, A.data(), - lda, B.data(), ldb, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, float alpha, - Kokkos::View A, - Kokkos::View B, - float beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? m : k; - const int ldb = (transA == 'N' || transA == 'n') ? k : n; - const int ldc = m; - cblas_sgemm(CblasColMajor, transA, transB, m, n, k, alpha, A.data(), - lda, B.data(), ldb, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, int alpha, - Kokkos::View A, - Kokkos::View B, - int beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? k : m; - const int ldb = (transA == 'N' || transA == 'n') ? n : k; - const int ldc = n; - cblas_zgemm(CblasRowMajor, transA, transB, m, n, k, alpha, A.data(), - lda, B.data(), ldb, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, int alpha, - Kokkos::View A, - Kokkos::View B, - int beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? k : m; - const int ldb = (transA == 'N' || transA == 'n') ? n : k; - const int ldc = n; - cblas_zgemm(CblasRowMajor, transA, transB, m, n, k, alpha, A.data(), - lda, B.data(), ldb, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, int alpha, - Kokkos::View A, - Kokkos::View B, - int beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? m : k; - const int ldb = (transA == 'N' || transA == 'n') ? k : n; - const int ldc = m; - cblas_zgemm(CblasColMajor, transA, transB, m, n, k, alpha, A.data(), - lda, B.data(), ldb, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, int alpha, - Kokkos::View A, - Kokkos::View B, - int beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? m : k; - const int ldb = (transA == 'N' || transA == 'n') ? k : n; - const int ldc = m; - cblas_zgemm(CblasColMajor, transA, transB, m, n, k, alpha, A.data(), - lda, B.data(), ldb, beta, C.data(), ldc); - } - }; - -#endif - -#ifdef KOKKOS_ENABLE_CUDA - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, double alpha, - Kokkos::View A, - Kokkos::View B, - double beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? k : m; - const int ldb = (transA == 'N' || transA == 'n') ? n : k; - const int ldc = n; - cublasDgemm(transB, transA, n, m, k, alpha, B.data(), ldb, A.data(), - lda, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, double alpha, - Kokkos::View A, - Kokkos::View B, - double beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? m : k; - const int ldb = (transA == 'N' || transA == 'n') ? k : n; - const int ldc = m; - cublasDgemm(transA, transB, m, n, k, alpha, A.data(), lda, B.data(), - ldb, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, float alpha, - Kokkos::View A, - Kokkos::View B, - float beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? k : m; - const int ldb = (transA == 'N' || transA == 'n') ? n : k; - const int ldc = n; - cublasSgemm(transB, transA, n, m, k, alpha, B.data(), ldb, A.data(), - lda, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, float alpha, - Kokkos::View A, - Kokkos::View B, - float beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? m : k; - const int ldb = (transA == 'N' || transA == 'n') ? k : n; - const int ldc = m; - cublasSgemm(transA, transB, m, n, k, alpha, A.data(), lda, B.data(), - ldb, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, int alpha, - Kokkos::View A, - Kokkos::View B, - int beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? k : m; - const int ldb = (transA == 'N' || transA == 'n') ? n : k; - const int ldc = n; - cublasZgemm(transB, transA, n, m, k, alpha, B.data(), ldb, A.data(), - lda, beta, C.data(), ldc); - } - }; - - struct MultiGemm { - static void GEMM( - const char transA, const char transB, int alpha, - Kokkos::View A, - Kokkos::View B, - int beta, - Kokkos::View C) { - const int m = C.extent(0); - const int n = C.extent(1); - const int k = - (transA == 'N' || transA == 'n') ? A.extent(1) : A.extent(0); - const int lda = (transA == 'N' || transA == 'n') ? m : k; - const int ldb = (transA == 'N' || transA == 'n') ? k : n; - const int ldc = m; - cublasZgemm(transA, transB, m, n, k, alpha, A.data(), lda, B.data(), - ldb, beta, C.data(), ldc); - } - }; - -#endif - } - } diff --git a/src/stage/blas3/blas3_UnitTest_01.cpp b/src/stage/blas3/blas3_UnitTest_01.cpp deleted file mode 100644 index fe727aea69..0000000000 --- a/src/stage/blas3/blas3_UnitTest_01.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ -#include - -int main() { return 0; } diff --git a/unit_test/CMakeLists.txt b/unit_test/CMakeLists.txt deleted file mode 100644 index d8a0ee0890..0000000000 --- a/unit_test/CMakeLists.txt +++ /dev/null @@ -1,156 +0,0 @@ - -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/../test_common) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/../test_common) - -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}) - -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/sparse) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/sparse) - - -IF (KOKKOS_ENABLE_CUDA) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/cuda) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/cuda) - - KOKKOSKERNELS_ADD_UNIT_TEST( - sparse_cuda - SOURCES - Test_Main.cpp - cuda/Test_Cuda_Sparse.cpp - COMPONENTS sparse - ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - graph_cuda - SOURCES - Test_Main.cpp - cuda/Test_Cuda_Graph.cpp - COMPONENTS graph - ) -ENDIF () - -IF (KOKKOS_ENABLE_SYCL) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/sycl) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/sycl) - - KOKKOSKERNELS_ADD_UNIT_TEST( - sparse_sycl - SOURCES - Test_Main.cpp - sycl/Test_SYCL_Sparse.cpp - COMPONENTS sparse - ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - graph_sycl - SOURCES - Test_Main.cpp - sycl/Test_SYCL_Graph.cpp - COMPONENTS graph - ) -ENDIF () - -IF (KOKKOS_ENABLE_HIP) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/hip) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/hip) - - KOKKOSKERNELS_ADD_UNIT_TEST( - sparse_hip - SOURCES - Test_Main.cpp - hip/Test_HIP_Sparse.cpp - COMPONENTS sparse - ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - graph_hip - SOURCES - Test_Main.cpp - hip/Test_HIP_Graph.cpp - COMPONENTS graph - ) -ENDIF () - -IF (KOKKOS_ENABLE_OPENMPTARGET) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/openmp_target) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/openmptarget) - - KOKKOSKERNELS_ADD_UNIT_TEST( - graph_openmptarget - SOURCES - Test_Main.cpp - openmptarget/Test_OpenMPTarget_Graph.cpp - COMPONENTS graph - ) -ENDIF () - -IF (KOKKOS_ENABLE_OPENMP) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/openmp) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/openmp) - - KOKKOSKERNELS_ADD_UNIT_TEST( - sparse_openmp - SOURCES - Test_Main.cpp - openmp/Test_OpenMP_Sparse.cpp - COMPONENTS sparse - ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - graph_openmp - SOURCES - Test_Main.cpp - openmp/Test_OpenMP_Graph.cpp - COMPONENTS graph - ) -ENDIF () - -IF (KOKKOS_ENABLE_SERIAL) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/serial) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/serial) - - # IF (KOKKOS_ENABLE_DEBUG) - # SET(DISABLE_SLOW_DGEMM_DOUBLE_TEST "--gtest_filter=-serial.gemm_double") - # ENDIF() - - KOKKOSKERNELS_ADD_UNIT_TEST( - sparse_serial - SOURCES - Test_Main.cpp - serial/Test_Serial_Sparse.cpp - COMPONENTS sparse - ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - graph_serial - SOURCES - Test_Main.cpp - serial/Test_Serial_Graph.cpp - COMPONENTS graph - ) -ENDIF () - -IF (KOKKOS_ENABLE_THREADS) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/threads) - KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/threads) - - KOKKOSKERNELS_ADD_UNIT_TEST( - sparse_threads - SOURCES - Test_Main.cpp - threads/Test_Threads_Sparse.cpp - COMPONENTS sparse - ) - - KOKKOSKERNELS_ADD_UNIT_TEST( - graph_threads - SOURCES - Test_Main.cpp - threads/Test_Threads_Graph.cpp - COMPONENTS graph - ) -ENDIF () - - - diff --git a/unit_test/build.cusparse b/unit_test/build.cusparse deleted file mode 100644 index 43c9cb368c..0000000000 --- a/unit_test/build.cusparse +++ /dev/null @@ -1 +0,0 @@ -nvcc -x cu test_crsmatrix.cpp -lrt -O3 -I../src -I../../array/src -L../../array/src -DDEVICE=2 -lhwloc -lkokkoscorecuda5 -I../src -arch=sm_35 -DKOKKOS_USE_CUSPARSE -lcusparse diff --git a/unit_test/build.mkl b/unit_test/build.mkl deleted file mode 100644 index 4e149a1c41..0000000000 --- a/unit_test/build.mkl +++ /dev/null @@ -1 +0,0 @@ -icpc test_crsmatrix.cpp -lrt -O3 -I../src -I../../array/src -L../../array/src -DDEVICE=1 -lhwloc -lkokkoscore -I../src -DKOKKOS_USE_MKL -I/opt/intel/mkl/include/ -L/opt/intel/mkl/lib/intel64/ -lmkl_intel_lp64 -lmkl_sequential -lmkl_core diff --git a/unit_test/standalone/main.cpp b/unit_test/standalone/main.cpp deleted file mode 100644 index c02ed22113..0000000000 --- a/unit_test/standalone/main.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include - -#ifdef KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_CUDA -#include -#endif -#ifdef KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HIP -#include -#endif -#ifdef KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL -#include -#endif -#ifdef KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP -#include -#endif -#ifdef KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS -#include -#endif - -// Include your testfile here: -//#include - -int main(int argc, char* argv[]) { - Kokkos::initialize(argc, argv); - { - ::testing::InitGoogleTest(&argc, argv); - int result = RUN_ALL_TESTS(); - } - Kokkos::finalize(); -} From ea1a8e4ec793cd5b8d9f740fc0adb2f524276787 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 7 Sep 2022 10:00:01 -0600 Subject: [PATCH 079/226] Modular build: updating cm_generate_makefile.sh to select components I am not sure if this will be very useful but at least it is making our script consistent with the new capabilities enabled in CMake. --- cm_generate_makefile.bash | 44 ++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/cm_generate_makefile.bash b/cm_generate_makefile.bash index c8d238fc84..d3dc628fb8 100755 --- a/cm_generate_makefile.bash +++ b/cm_generate_makefile.bash @@ -19,7 +19,7 @@ get_kokkos_device_list() { KOKKOS_DEVICE_CMD= PARSE_DEVICES_LST=$(echo $KOKKOS_DEVICES | tr "," "\n") for DEVICE_ in $PARSE_DEVICES_LST - do + do UC_DEVICE=$(echo $DEVICE_ | tr "[:lower:]" "[:upper:]") if [ "${UC_DEVICE}" == "CUDA" ]; then WITH_CUDA_BACKEND=ON @@ -39,7 +39,7 @@ get_kokkos_arch_list() { KOKKOS_ARCH_CMD= PARSE_ARCH_LST=$(echo $KOKKOS_ARCH | tr "," "\n") for ARCH_ in $PARSE_ARCH_LST - do + do UC_ARCH=$(echo $ARCH_ | tr "[:lower:]" "[:upper:]") KOKKOS_ARCH_CMD="-DKokkos_ARCH_${UC_ARCH}=ON ${KOKKOS_ARCH_CMD}" done @@ -50,11 +50,11 @@ get_kokkos_cuda_option_list() { KOKKOS_CUDA_OPTION_CMD= PARSE_CUDA_LST=$(echo $KOKKOS_CUDA_OPTIONS | tr "," "\n") for CUDA_ in $PARSE_CUDA_LST - do + do CUDA_OPT_NAME= if [ "${CUDA_}" == "enable_lambda" ]; then CUDA_OPT_NAME=CUDA_LAMBDA - elif [ "${CUDA_}" == "rdc" ]; then + elif [ "${CUDA_}" == "rdc" ]; then CUDA_OPT_NAME=CUDA_RELOCATABLE_DEVICE_CODE elif [ "${CUDA_}" == "force_uvm" ]; then CUDA_OPT_NAME=CUDA_UVM @@ -92,7 +92,7 @@ get_kokkos_option_list() { KOKKOS_OPTION_CMD= PARSE_OPTIONS_LST=$(echo $KOKKOS_OPTIONS | tr "," "\n") for OPT_ in $PARSE_OPTIONS_LST - do + do UC_OPT_=$(echo $OPT_ | tr "[:lower:]" "[:upper:]") if [[ "$UC_OPT_" == *DISABLE* ]]; then FLIP_OPT_=${UC_OPT_/DISABLE/ENABLE} @@ -160,6 +160,17 @@ get_kernels_spaces_list() { done } +get_kernels_components_list() { + echo "parsing KOKKOSKERNELS_COMPONENTS=$KOKKOSKERNELS_COMPONENTS" + KOKKOSKERNELS_COMPONENTS_CMD= + PARSE_COMPONENTS_LIST=$(echo $KOKKOSKERNELS_COMPONENTS | tr "," "\n") + for COMPONENTS_ in $PARSE_COMPONENTS_LIST + do + UC_COMPONENTS=$(echo $COMPONENTS_ | tr "[:lower:]" "[:upper:]") + KOKKOSKERNELS_COMPONENTS_CMD="${KOKKOSKERNELS_COMPONENTS_CMD} -D KokkosKernels_ENABLE_${UC_COMPONENTS}=ON" + done +} + get_kernels_tpls_list() { echo "parsing KOKKOSKERNELS_TPLS=$KOKKOSKERNELS_TPLS" KOKKOSKERNELS_TPLS_LIST_CMD= @@ -317,6 +328,8 @@ display_help_text() { echo " Options: layoutleft, layoutright" echo "--with-spaces=[SPACES]: Set spaces to be instantiated." echo " Options: hostspace, cudaspace, cudauvmspace" + echo "--with-components=[COMPS]: Set the components to be built, if not specified all components are built." + echo " Options: batched, blas, graph, sparse" echo "--with-tpls=[TPLS]: Set tpls to be instantiated (Proper support requies that appropriate compiler and device must be enabled)." echo " This may require providing paths and the library name if using custom installs not on a default path" echo " that CMake searches" @@ -333,7 +346,7 @@ display_help_text() { # echo "--with-hpx-options=[OPT]: Additional options to HPX:" # echo " enable_async_dispatch" echo "--no-default-eti: Do not include default ETI types for Kokkos Kernels" - echo "--gcc-toolchain=/Path/To/GccRoot: Set the gcc toolchain to use with clang (e.g. /usr)" + echo "--gcc-toolchain=/Path/To/GccRoot: Set the gcc toolchain to use with clang (e.g. /usr)" echo "--kokkos-make-j=[NUM]: Set -j parallel level for kokkos install" echo " Default: j == 4" echo "--enable-tests: build Kokkos Kernels unit tests" @@ -443,7 +456,7 @@ do DEVICES="${key#*=}" PARSE_DEVICES=$(echo $DEVICES | tr "," "\n") for DEVICE_ in $PARSE_DEVICES - do + do update_kokkos_devices $DEVICE_ done ;; @@ -556,7 +569,7 @@ do echo "Invalid compiler by --compiler command: '${COMPILER}'" exit fi - # ... valid compiler, ensure absolute path set + # ... valid compiler, ensure absolute path set WCOMPATH=$(command -v $COMPILER) COMPDIR=$(dirname $WCOMPATH) COMPNAME=$(basename $WCOMPATH) @@ -577,6 +590,9 @@ do --with-spaces*) KOKKOSKERNELS_SPACES="${key#*=}" ;; + --with-components*) + KOKKOSKERNELS_COMPONENTS="${key#*=}" + ;; --with-tpls*) KOKKOSKERNELS_TPLS="${key#*=}" ;; @@ -677,7 +693,7 @@ if [ ! -e ${KOKKOSKERNELS_PATH}/CMakeLists.txt ]; then exit 0 fi else - echo "KOKKOSKERNELS_PATH does not appear to be set properly. please specify in location of CMakeLists.txt" + echo "KOKKOSKERNELS_PATH does not appear to be set properly. please specify in location of CMakeLists.txt" display_help_text exit 0 fi @@ -696,7 +712,7 @@ if [ "${KOKKOS_PATH}" == "" ]; then else # IMPROVE THIS CHECK - not sufficient for old vs new kokkos if [ ! -e ${KOKKOS_PATH}/CMakeLists.txt ]; then - echo "KOKKOS_PATH does not appear to be set properly. Please check and try again." + echo "KOKKOS_PATH does not appear to be set properly. Please check and try again." display_help_text exit 0 fi @@ -713,6 +729,7 @@ get_kernels_ordinals_list get_kernels_offsets_list get_kernels_layouts_list get_kernels_spaces_list +get_kernels_components_list get_kernels_tpls_list get_kernels_extra_linker_flags @@ -730,7 +747,7 @@ if [[ ${COMPILER} == *clang* ]]; then if [ ! "${CUDA_PATH}" == "" ]; then KOKKOS_CXXFLAGS="${KOKKOS_CXXFLAGS} --cuda-path=${CUDA_PATH}" - fi + fi fi @@ -783,7 +800,6 @@ cd $STORE_KOKKOSKERNELS_BUILD_PATH # Configure kokkos-kernels echo "" -echo cmake $COMPILER_CMD -DKokkos_DIR="${KOKKOS_FIND_PATH}" -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS}" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DKokkosKernels_ENABLE_TESTS_AND_PERFSUITE=${KOKKOSKERNELS_DO_PERFSUITE} -DKokkosKernels_ENABLE_TESTS=${KOKKOSKERNELS_DO_TESTS} -DKokkosKernels_ENABLE_PERFTESTS=${KOKKOSKERNELS_DO_PERFTESTS} -DKokkosKernels_ENABLE_EXAMPLES:BOOL=${KOKKOSKERNELS_DO_EXAMPLES} ${KOKKOSKERNELS_SCALARS_CMD} ${KOKKOSKERNELS_ORDINALS_CMD} ${KOKKOSKERNELS_OFFSETS_CMD} ${KOKKOSKERNELS_LAYOUTS_CMD} ${KOKKOSKERNELS_TPLS_CMD} ${KOKKOSKERNELS_USER_TPL_PATH_CMD} ${KOKKOSKERNELS_USER_TPL_LIBNAME_CMD} ${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD} ${KOKKOSKERNELS_BUILDTYPE_CMD} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBRARIES} ${KOKKOSKERNELS_SPACES_CMD} ${KERNELS_DEFAULT_ETI_OPTION} ${KOKKOSKERNELS_PATH} +echo cmake $COMPILER_CMD -DKokkos_DIR="${KOKKOS_FIND_PATH}" -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS}" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DKokkosKernels_ENABLE_TESTS_AND_PERFSUITE=${KOKKOSKERNELS_DO_PERFSUITE} -DKokkosKernels_ENABLE_TESTS=${KOKKOSKERNELS_DO_TESTS} -DKokkosKernels_ENABLE_PERFTESTS=${KOKKOSKERNELS_DO_PERFTESTS} -DKokkosKernels_ENABLE_EXAMPLES:BOOL=${KOKKOSKERNELS_DO_EXAMPLES} ${KOKKOSKERNELS_SCALARS_CMD} ${KOKKOSKERNELS_ORDINALS_CMD} ${KOKKOSKERNELS_OFFSETS_CMD} ${KOKKOSKERNELS_LAYOUTS_CMD} ${KOKKOSKERNELS_TPLS_CMD} ${KOKKOSKERNELS_USER_TPL_PATH_CMD} ${KOKKOSKERNELS_USER_TPL_LIBNAME_CMD} ${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD} ${KOKKOSKERNELS_BUILDTYPE_CMD} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBRARIES} ${KOKKOSKERNELS_SPACES_CMD} ${KOKKOSKERNELS_COMPONENTS_CMD} ${KERNELS_DEFAULT_ETI_OPTION} ${KOKKOSKERNELS_PATH} echo "" -cmake $COMPILER_CMD -DKokkos_DIR="${KOKKOS_FIND_PATH}" -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS//\"}" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DKokkosKernels_ENABLE_TESTS_AND_PERFSUITE=${KOKKOSKERNELS_DO_PERFSUITE} -DKokkosKernels_ENABLE_TESTS=${KOKKOSKERNELS_DO_TESTS} -DKokkosKernels_ENABLE_PERFTESTS=${KOKKOSKERNELS_DO_PERFTESTS} -DKokkosKernels_ENABLE_EXAMPLES:BOOL=${KOKKOSKERNELS_DO_EXAMPLES} ${KOKKOSKERNELS_SCALARS_CMD} ${KOKKOSKERNELS_ORDINALS_CMD} ${KOKKOSKERNELS_OFFSETS_CMD} ${KOKKOSKERNELS_LAYOUTS_CMD} ${KOKKOSKERNELS_TPLS_CMD} ${KOKKOSKERNELS_USER_TPL_PATH_CMD} ${KOKKOSKERNELS_USER_TPL_LIBNAME_CMD} ${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD} ${KOKKOSKERNELS_BUILDTYPE_CMD} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBRARIES} ${KOKKOSKERNELS_SPACES_CMD} ${KERNELS_DEFAULT_ETI_OPTION} ${KOKKOSKERNELS_PATH} - +cmake $COMPILER_CMD -DKokkos_DIR="${KOKKOS_FIND_PATH}" -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS//\"}" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DKokkosKernels_ENABLE_TESTS_AND_PERFSUITE=${KOKKOSKERNELS_DO_PERFSUITE} -DKokkosKernels_ENABLE_TESTS=${KOKKOSKERNELS_DO_TESTS} -DKokkosKernels_ENABLE_PERFTESTS=${KOKKOSKERNELS_DO_PERFTESTS} -DKokkosKernels_ENABLE_EXAMPLES:BOOL=${KOKKOSKERNELS_DO_EXAMPLES} ${KOKKOSKERNELS_SCALARS_CMD} ${KOKKOSKERNELS_ORDINALS_CMD} ${KOKKOSKERNELS_OFFSETS_CMD} ${KOKKOSKERNELS_LAYOUTS_CMD} ${KOKKOSKERNELS_TPLS_CMD} ${KOKKOSKERNELS_USER_TPL_PATH_CMD} ${KOKKOSKERNELS_USER_TPL_LIBNAME_CMD} ${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD} ${KOKKOSKERNELS_BUILDTYPE_CMD} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBRARIES} ${KOKKOSKERNELS_SPACES_CMD} ${KOKKOSKERNELS_COMPONENTS_CMD} ${KERNELS_DEFAULT_ETI_OPTION} ${KOKKOSKERNELS_PATH} From a1f7c17381460b73e0691b95115794a0e709d037 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 12 Sep 2022 16:04:35 -0600 Subject: [PATCH 080/226] Modular build: answering Brian's comments Mostly some clean-ups Include new file for spgemm tpls, remove block_crs_matrix related files and ETI from code. --- CMakeLists.txt | 8 -------- common/unit_test/Test_Common_Sorting.hpp | 1 - perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp | 2 +- sparse/CMakeLists.txt | 14 -------------- .../impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp | 0 5 files changed, 1 insertion(+), 24 deletions(-) rename {src/sparse => sparse}/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6806ca2c9c..deaf876d38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,13 +94,6 @@ KOKKOSKERNELS_ADD_OPTION( "Whether to build docs. Default: OFF" ) -KOKKOSKERNELS_ADD_OPTION( - "ENABLE_REMAINDER" - ON - BOOL - "Whether to build library remainder components. Default: ON" -) - SET(KokkosKernels_INSTALL_TESTING OFF CACHE INTERNAL "Whether to build tests and examples against installation") IF (KokkosKernels_INSTALL_TESTING) @@ -350,7 +343,6 @@ ELSE() KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC METIS) KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC ARMPL) KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC MAGMA) - # Not yet here KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC MAGMA) diff --git a/common/unit_test/Test_Common_Sorting.hpp b/common/unit_test/Test_Common_Sorting.hpp index c4fb13f807..1142ec7bce 100644 --- a/common/unit_test/Test_Common_Sorting.hpp +++ b/common/unit_test/Test_Common_Sorting.hpp @@ -53,7 +53,6 @@ #include #include #include -// #include #include #include #include diff --git a/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp b/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp index 0c1944c754..18dfb5a76d 100644 --- a/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp +++ b/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp @@ -6,7 +6,7 @@ #define KOKKOSKERNELS_KOKKOSBLAS_DOT_TEST_RPS_HPP #include -#include "src/KokkosBlas1_dot.hpp" +#include "KokkosBlas1_dot.hpp" #include // These headers are required for RPS perf test implementation diff --git a/sparse/CMakeLists.txt b/sparse/CMakeLists.txt index 3255b8b7c5..800e93e153 100644 --- a/sparse/CMakeLists.txt +++ b/sparse/CMakeLists.txt @@ -39,20 +39,6 @@ KOKKOSKERNELS_GENERATE_ETI(Sparse_spmv_mv_struct spmv TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) -KOKKOSKERNELS_GENERATE_ETI(Sparse_spmv_blockcrsmatrix spmv - COMPONENTS sparse - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES -) - -KOKKOSKERNELS_GENERATE_ETI(Sparse_spmv_mv_blockcrsmatrix spmv - COMPONENTS sparse - HEADER_LIST ETI_HEADERS - SOURCE_LIST SOURCES - TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES -) - KOKKOSKERNELS_GENERATE_ETI(Sparse_spmv_bsrmatrix spmv COMPONENTS sparse HEADER_LIST ETI_HEADERS diff --git a/src/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp b/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp similarity index 100% rename from src/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp rename to sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp From 3e95471de578e50dcb373fbd13c85e3ddd18fb9d Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Mon, 12 Sep 2022 17:36:11 -0600 Subject: [PATCH 081/226] scripts/cm_test_all_sandia: Add initial clang+cuda build --- cm_generate_makefile.bash | 8 +++----- graph/impl/KokkosGraph_Distance2Color_impl.hpp | 8 ++++---- perf_test/sparse/KokkosSparse_spmv_struct.cpp | 12 ++++++------ perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp | 12 ++++++------ scripts/cm_test_all_sandia | 3 ++- 5 files changed, 21 insertions(+), 22 deletions(-) diff --git a/cm_generate_makefile.bash b/cm_generate_makefile.bash index d3dc628fb8..a41b4488ff 100755 --- a/cm_generate_makefile.bash +++ b/cm_generate_makefile.bash @@ -220,9 +220,7 @@ get_kernels_tpls_list() { get_kernels_extra_linker_flags() { echo "parsing KOKKOSKERNELS_EXTRA_LINKER_FLAGS=$KOKKOSKERNELS_EXTRA_LINKER_FLAGS" - KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD= - PARSE_EXTRA_LINKER_FLAGS_LIST=$(echo $KOKKOSKERNELS_EXTRA_LINKER_FLAGS | tr "," " ") - KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD="-DCMAKE_EXE_LINKER_FLAGS=${PARSE_EXTRA_LINKER_FLAGS_LIST} ${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD}" + KOKKOSKERNELS_EXTRA_LINKER_FLAGS_PARSED=$(echo $KOKKOSKERNELS_EXTRA_LINKER_FLAGS | tr "," " ") } @@ -800,6 +798,6 @@ cd $STORE_KOKKOSKERNELS_BUILD_PATH # Configure kokkos-kernels echo "" -echo cmake $COMPILER_CMD -DKokkos_DIR="${KOKKOS_FIND_PATH}" -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS}" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DKokkosKernels_ENABLE_TESTS_AND_PERFSUITE=${KOKKOSKERNELS_DO_PERFSUITE} -DKokkosKernels_ENABLE_TESTS=${KOKKOSKERNELS_DO_TESTS} -DKokkosKernels_ENABLE_PERFTESTS=${KOKKOSKERNELS_DO_PERFTESTS} -DKokkosKernels_ENABLE_EXAMPLES:BOOL=${KOKKOSKERNELS_DO_EXAMPLES} ${KOKKOSKERNELS_SCALARS_CMD} ${KOKKOSKERNELS_ORDINALS_CMD} ${KOKKOSKERNELS_OFFSETS_CMD} ${KOKKOSKERNELS_LAYOUTS_CMD} ${KOKKOSKERNELS_TPLS_CMD} ${KOKKOSKERNELS_USER_TPL_PATH_CMD} ${KOKKOSKERNELS_USER_TPL_LIBNAME_CMD} ${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD} ${KOKKOSKERNELS_BUILDTYPE_CMD} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBRARIES} ${KOKKOSKERNELS_SPACES_CMD} ${KOKKOSKERNELS_COMPONENTS_CMD} ${KERNELS_DEFAULT_ETI_OPTION} ${KOKKOSKERNELS_PATH} +echo cmake $COMPILER_CMD -DKokkos_DIR="${KOKKOS_FIND_PATH}" -DCMAKE_CXX_FLAGS=\"${KOKKOS_CXXFLAGS}\" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DKokkosKernels_ENABLE_TESTS_AND_PERFSUITE=${KOKKOSKERNELS_DO_PERFSUITE} -DKokkosKernels_ENABLE_TESTS=${KOKKOSKERNELS_DO_TESTS} -DKokkosKernels_ENABLE_PERFTESTS=${KOKKOSKERNELS_DO_PERFTESTS} -DKokkosKernels_ENABLE_EXAMPLES:BOOL=${KOKKOSKERNELS_DO_EXAMPLES} ${KOKKOSKERNELS_SCALARS_CMD} ${KOKKOSKERNELS_ORDINALS_CMD} ${KOKKOSKERNELS_OFFSETS_CMD} ${KOKKOSKERNELS_LAYOUTS_CMD} ${KOKKOSKERNELS_TPLS_CMD} ${KOKKOSKERNELS_USER_TPL_PATH_CMD} ${KOKKOSKERNELS_USER_TPL_LIBNAME_CMD} -DCMAKE_EXE_LINKER_FLAGS=\"${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_PARSED}\" ${KOKKOSKERNELS_BUILDTYPE_CMD} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBRARIES} ${KOKKOSKERNELS_COMPONENTS_CMD} ${KOKKOSKERNELS_SPACES_CMD} ${KERNELS_DEFAULT_ETI_OPTION} ${KOKKOSKERNELS_PATH} echo "" -cmake $COMPILER_CMD -DKokkos_DIR="${KOKKOS_FIND_PATH}" -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS//\"}" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DKokkosKernels_ENABLE_TESTS_AND_PERFSUITE=${KOKKOSKERNELS_DO_PERFSUITE} -DKokkosKernels_ENABLE_TESTS=${KOKKOSKERNELS_DO_TESTS} -DKokkosKernels_ENABLE_PERFTESTS=${KOKKOSKERNELS_DO_PERFTESTS} -DKokkosKernels_ENABLE_EXAMPLES:BOOL=${KOKKOSKERNELS_DO_EXAMPLES} ${KOKKOSKERNELS_SCALARS_CMD} ${KOKKOSKERNELS_ORDINALS_CMD} ${KOKKOSKERNELS_OFFSETS_CMD} ${KOKKOSKERNELS_LAYOUTS_CMD} ${KOKKOSKERNELS_TPLS_CMD} ${KOKKOSKERNELS_USER_TPL_PATH_CMD} ${KOKKOSKERNELS_USER_TPL_LIBNAME_CMD} ${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD} ${KOKKOSKERNELS_BUILDTYPE_CMD} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBRARIES} ${KOKKOSKERNELS_SPACES_CMD} ${KOKKOSKERNELS_COMPONENTS_CMD} ${KERNELS_DEFAULT_ETI_OPTION} ${KOKKOSKERNELS_PATH} +cmake $COMPILER_CMD -DKokkos_DIR="${KOKKOS_FIND_PATH}" -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS//\"}" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DKokkosKernels_ENABLE_TESTS_AND_PERFSUITE=${KOKKOSKERNELS_DO_PERFSUITE} -DKokkosKernels_ENABLE_TESTS=${KOKKOSKERNELS_DO_TESTS} -DKokkosKernels_ENABLE_PERFTESTS=${KOKKOSKERNELS_DO_PERFTESTS} -DKokkosKernels_ENABLE_EXAMPLES:BOOL=${KOKKOSKERNELS_DO_EXAMPLES} ${KOKKOSKERNELS_SCALARS_CMD} ${KOKKOSKERNELS_ORDINALS_CMD} ${KOKKOSKERNELS_OFFSETS_CMD} ${KOKKOSKERNELS_LAYOUTS_CMD} ${KOKKOSKERNELS_TPLS_CMD} ${KOKKOSKERNELS_USER_TPL_PATH_CMD} ${KOKKOSKERNELS_USER_TPL_LIBNAME_CMD} -DCMAKE_EXE_LINKER_FLAGS="${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_PARSED//\"}" ${KOKKOSKERNELS_BUILDTYPE_CMD} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBRARIES} ${KOKKOSKERNELS_COMPONENTS_CMD} ${KOKKOSKERNELS_SPACES_CMD} ${KERNELS_DEFAULT_ETI_OPTION} ${KOKKOSKERNELS_PATH} diff --git a/graph/impl/KokkosGraph_Distance2Color_impl.hpp b/graph/impl/KokkosGraph_Distance2Color_impl.hpp index 78251460d9..634a330e9e 100644 --- a/graph/impl/KokkosGraph_Distance2Color_impl.hpp +++ b/graph/impl/KokkosGraph_Distance2Color_impl.hpp @@ -258,7 +258,7 @@ class GraphColorDistance2 { lno_t numUncoloredPreviousIter = this->nr + 1; double time; - double total_time = 0.0; + // double total_time = 0.0; Kokkos::Timer timer; int iter = 0; @@ -295,7 +295,7 @@ class GraphColorDistance2 { if (this->_ticToc) { time = timer.seconds(); - total_time += time; + // total_time += time; std::cout << "\tIteration: " << iter << std::endl << "\t - Time speculative greedy phase : " << time << std::endl @@ -326,7 +326,7 @@ class GraphColorDistance2 { if (_ticToc) { time = timer.seconds(); - total_time += time; + // total_time += time; std::cout << "\t - Time conflict detection : " << time << std::endl; std::cout << "\t - Num Uncolored (conflicts) : " << numUncolored @@ -368,7 +368,7 @@ class GraphColorDistance2 { if (_ticToc) { time = timer.seconds(); - total_time += time; + // total_time += time; std::cout << "\tTime serial conflict resolution : " << time << std::endl; gc_handle->add_to_overall_coloring_time_phase3(time); diff --git a/perf_test/sparse/KokkosSparse_spmv_struct.cpp b/perf_test/sparse/KokkosSparse_spmv_struct.cpp index 1d9853a7ab..94466a1fb5 100644 --- a/perf_test/sparse/KokkosSparse_spmv_struct.cpp +++ b/perf_test/sparse/KokkosSparse_spmv_struct.cpp @@ -411,21 +411,21 @@ int main(int argc, char **argv) { Kokkos::deep_copy(h_y, y_check); Scalar error = 0; - Scalar sum = 0; + // Scalar sum = 0; for (int rowIdx = 0; rowIdx < A.numRows(); ++rowIdx) { for (int vecIdx = 0; vecIdx < numVecs; ++vecIdx) { error += (h_y_compare(rowIdx, vecIdx) - h_y(rowIdx, vecIdx)) * (h_y_compare(rowIdx, vecIdx) - h_y(rowIdx, vecIdx)); - sum += h_y_compare(rowIdx, vecIdx) * h_y_compare(rowIdx, vecIdx); + // sum += h_y_compare(rowIdx, vecIdx) * h_y_compare(rowIdx, vecIdx); } } - int num_errors = 0; + // int num_errors = 0; double total_error = 0; - double total_sum = 0; - num_errors += (error / (sum == 0 ? 1 : sum)) > 1e-5 ? 1 : 0; + // double total_sum = 0; + // num_errors += (error / (sum == 0 ? 1 : sum)) > 1e-5 ? 1 : 0; total_error += error; - total_sum += sum; + // total_sum += sum; if (total_error == 0) { printf("Kokkos::MultiVector Test: Passed\n"); diff --git a/perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp b/perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp index c578c269f8..c37f3165da 100644 --- a/perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp +++ b/perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp @@ -771,21 +771,21 @@ int main(int argc, char** argv) { Kokkos::deep_copy(h_y, y_check); Scalar error = 0; - Scalar sum = 0; + // Scalar sum = 0; for (int rowIdx = 0; rowIdx < A.numRows(); ++rowIdx) { for (int vecIdx = 0; vecIdx < numVecs; ++vecIdx) { error += (h_y_compare(rowIdx) - h_y(rowIdx)) * (h_y_compare(rowIdx) - h_y(rowIdx)); - sum += h_y_compare(rowIdx) * h_y_compare(rowIdx); + // sum += h_y_compare(rowIdx) * h_y_compare(rowIdx); } } - int num_errors = 0; + // int num_errors = 0; double total_error = 0; - double total_sum = 0; - num_errors += (error / (sum == 0 ? 1 : sum)) > 1e-5 ? 1 : 0; + // double total_sum = 0; + // num_errors += (error / (sum == 0 ? 1 : sum)) > 1e-5 ? 1 : 0; total_error += error; - total_sum += sum; + // total_sum += sum; if (total_error == 0) { printf("Kokkos::MultiVector Test: Passed\n"); diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index 9a5080ac35..d838d89b47 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -753,7 +753,7 @@ elif [ "$MACHINE" = "weaver" ]; then # "Could NOT find TPLCUBLAS (missing: CUDA_CUBLAS_LIBRARIES)" # Once resolved add the compiler + modules below to the SPOT_CHECK_TPLS # "cuda/10.1.243 $CUDA10_MODULE_TPL_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - + CLANG13_MODULE_TPL_LIST="cmake/3.21.2,/,openblas/0.3.16/gcc/7.2.0,cuda/10.1.243" # Don't do Threads on weaver GCC_BUILD_LIST="OpenMP,Serial,OpenMP_Serial" @@ -774,6 +774,7 @@ elif [ "$MACHINE" = "weaver" ]; then "cuda/9.2.88 $CUDA_MODULE_TPL_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/10.1.243 $CUDA10_MODULE_TPL_LIST "Cuda_Serial" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "gcc/9.3.0 $GCC93_MODULE_TPL_LIST "OpenMP,Serial" g++ $GCC_WARNING_FLAGS" + "clang/13.0.0 $CLANG13_MODULE_TPL_LIST "Cuda" clang++ $CUDA_WARNING_FLAGS" ) else # Format: (compiler module-list build-list exe-name warning-flag) From be1f6c9e03ac21644e0c93e983ba3552653a3481 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Thu, 15 Sep 2022 13:13:41 -0600 Subject: [PATCH 082/226] scripts/cm_test_all_sandia: Update openblas for clang/13.0.0 - Fixes #1525. --- scripts/cm_test_all_sandia | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index d838d89b47..3484e66712 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -753,7 +753,7 @@ elif [ "$MACHINE" = "weaver" ]; then # "Could NOT find TPLCUBLAS (missing: CUDA_CUBLAS_LIBRARIES)" # Once resolved add the compiler + modules below to the SPOT_CHECK_TPLS # "cuda/10.1.243 $CUDA10_MODULE_TPL_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - CLANG13_MODULE_TPL_LIST="cmake/3.21.2,/,openblas/0.3.16/gcc/7.2.0,cuda/10.1.243" + CLANG13_MODULE_TPL_LIST="cmake/3.21.2,/,openblas/0.3.20/gcc/9.3.0,cuda/10.1.243" # Don't do Threads on weaver GCC_BUILD_LIST="OpenMP,Serial,OpenMP_Serial" From 69145fd857e39a4abe108bf0ee9a0dbc0f266dfe Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Tue, 13 Sep 2022 16:23:10 -0600 Subject: [PATCH 083/226] ROTG: adding Givens rotation to our BLAS implementation This provides a basic implementation for Givens rotations but does not include TPLs backend or the ability to run on GPUs. These might be added later if required. --- blas/CMakeLists.txt | 7 + .../KokkosBlas1_rotg_eti_spec_inst.cpp.in | 54 +++ .../KokkosBlas1_rotg_eti_spec_avail.hpp.in | 51 +++ .../KokkosBlas1_rotg_eti_spec_decl.hpp.in | 51 +++ blas/impl/KokkosBlas1_rotg_impl.hpp | 117 +++++++ blas/impl/KokkosBlas1_rotg_spec.hpp | 141 ++++++++ blas/src/KokkosBlas1_rotg.hpp | 70 ++++ blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp | 93 ++++++ blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp | 308 ++++++++++++++++++ blas/unit_test/Test_Blas.hpp | 1 + blas/unit_test/Test_Blas1_rotg.hpp | 75 +++++ 11 files changed, 968 insertions(+) create mode 100644 blas/eti/generated_specializations_cpp/rotg/KokkosBlas1_rotg_eti_spec_inst.cpp.in create mode 100644 blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_avail.hpp.in create mode 100644 blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_decl.hpp.in create mode 100644 blas/impl/KokkosBlas1_rotg_impl.hpp create mode 100644 blas/impl/KokkosBlas1_rotg_spec.hpp create mode 100644 blas/src/KokkosBlas1_rotg.hpp create mode 100644 blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp create mode 100644 blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp create mode 100644 blas/unit_test/Test_Blas1_rotg.hpp diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt index 02be1d20a7..6c27145188 100644 --- a/blas/CMakeLists.txt +++ b/blas/CMakeLists.txt @@ -248,6 +248,13 @@ KOKKOSKERNELS_GENERATE_ETI(Blas1_reciprocal_mv reciprocal TYPE_LISTS FLOATS LAYOUTS DEVICES ) +KOKKOSKERNELS_GENERATE_ETI(Blas1_rotg rotg + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS +) + KOKKOSKERNELS_GENERATE_ETI(Blas2_gemv gemv COMPONENTS blas HEADER_LIST ETI_HEADERS diff --git a/blas/eti/generated_specializations_cpp/rotg/KokkosBlas1_rotg_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/rotg/KokkosBlas1_rotg_eti_spec_inst.cpp.in new file mode 100644 index 0000000000..2a6a441a70 --- /dev/null +++ b/blas/eti/generated_specializations_cpp/rotg/KokkosBlas1_rotg_eti_spec_inst.cpp.in @@ -0,0 +1,54 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + + +#define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true +#include "KokkosKernels_config.h" +#include "KokkosBlas1_rotg_spec.hpp" + +namespace KokkosBlas { +namespace Impl { +@BLAS1_ROTG_ETI_INST_BLOCK@ +} //IMPL +} //Kokkos diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_avail.hpp.in new file mode 100644 index 0000000000..6a451d6afe --- /dev/null +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_avail.hpp.in @@ -0,0 +1,51 @@ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROTG_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_ROTG_ETI_SPEC_AVAIL_HPP_ + +namespace KokkosBlas { +namespace Impl { +@BLAS1_ROTG_ETI_AVAIL_BLOCK@ + } //IMPL +} //Kokkos +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_decl.hpp.in new file mode 100644 index 0000000000..cb59ead97e --- /dev/null +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_decl.hpp.in @@ -0,0 +1,51 @@ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROTG_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_ROTG_ETI_SPEC_DECL_HPP_ + +namespace KokkosBlas { +namespace Impl { +@BLAS1_ROTG_ETI_DECL_BLOCK@ + } //IMPL +} //Kokkos +#endif diff --git a/blas/impl/KokkosBlas1_rotg_impl.hpp b/blas/impl/KokkosBlas1_rotg_impl.hpp new file mode 100644 index 0000000000..dad4fdb3ec --- /dev/null +++ b/blas/impl/KokkosBlas1_rotg_impl.hpp @@ -0,0 +1,117 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROTG_IMPL_HPP_ +#define KOKKOSBLAS1_ROTG_IMPL_HPP_ + +#include +#include +#include + +namespace KokkosBlas { +namespace Impl { + +/// \brief Compute Givens rotation coefficients. +template ::is_complex, + bool>::type = true> +void Rotg_Invoke(Scalar& a, Scalar& b, Scalar& c, Scalar& s) { + const Scalar one = Kokkos::ArithTraits::one(); + const Scalar zero = Kokkos::ArithTraits::zero(); + + const Scalar numerical_scaling = Kokkos::abs(a) + Kokkos::abs(b); + if (numerical_scaling == zero) { + c = one; + s = zero; + a = zero; + b = zero; + } else { + const Scalar scaled_a = a / numerical_scaling; + const Scalar scaled_b = b / numerical_scaling; + Scalar norm = Kokkos::sqrt(scaled_a * scaled_a + scaled_b * scaled_b) * + numerical_scaling; + Scalar sign = Kokkos::abs(a) > Kokkos::abs(b) ? a : b; + norm = Kokkos::copysign(norm, sign); + c = a / norm; + s = b / norm; + + Scalar z = one; + if (Kokkos::abs(a) > Kokkos::abs(b)) { + z = s; + } + if ((Kokkos::abs(b) >= Kokkos::abs(a)) && (c != zero)) { + z = one / c; + } + a = norm; + b = z; + } +} + +template ::is_complex, + bool>::type = true> +void Rotg_Invoke(Scalar& a, Scalar& b, Scalar& c, Scalar& s) { + const Scalar one = Kokkos::ArithTraits::one(); + const Scalar zero = Kokkos::ArithTraits::zero(); + + const Scalar numerical_scaling = Kokkos::abs(a) + Kokkos::abs(b); + if (Kokkos::abs(a) == zero) { + c = zero; + s = one; + a = b; + } else { + const Scalar scaled_a = Kokkos::abs(a / numerical_scaling); + const Scalar scaled_b = Kokkos::abs(b / numerical_scaling); + Scalar norm = Kokkos::sqrt(scaled_a * scaled_a + scaled_b * scaled_b) * + numerical_scaling; + Scalar unit_a = a / Kokkos::abs(a); + c = Kokkos::abs(a) / norm; + s = unit_a * Kokkos::conj(b) / norm; + a = unit_a * norm; + } +} + +} // namespace Impl +} // namespace KokkosBlas + +#endif // KOKKOSBLAS1_ROTG_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_rotg_spec.hpp b/blas/impl/KokkosBlas1_rotg_spec.hpp new file mode 100644 index 0000000000..7a41a070dc --- /dev/null +++ b/blas/impl/KokkosBlas1_rotg_spec.hpp @@ -0,0 +1,141 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROTG_SPEC_HPP_ +#define KOKKOSBLAS1_ROTG_SPEC_HPP_ + +#include +#include +#include + +// Include the actual functors +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +#include +#endif + +namespace KokkosBlas { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct rotg_eti_spec_avail { + enum : bool { value = false }; +}; +} // namespace Impl +} // namespace KokkosBlas + +// +// Macro for declaration of full specialization availability +// KokkosBlas::Impl::Rotg. This is NOT for users!!! All +// the declarations of full specializations go in this header file. +// We may spread out definitions (see _INST macro below) across one or +// more .cpp files. +// +#define KOKKOSBLAS1_ROTG_ETI_SPEC_AVAIL(SCALAR) \ + template <> \ + struct rotg_eti_spec_avail { \ + enum : bool { value = true }; \ + }; + +// Include the actual specialization declarations +#include +#include + +namespace KokkosBlas { +namespace Impl { + +// Unification layer +template ::value, + bool eti_spec_avail = rotg_eti_spec_avail::value> +struct Rotg { + static void rotg(Scalar& a, Scalar& b, Scalar& c, Scalar& s); +}; + +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +//! Full specialization of Rotg. +template +struct Rotg { + static void rotg(Scalar& a, Scalar& b, Scalar& c, Scalar& s) { + Kokkos::Profiling::pushRegion(KOKKOSKERNELS_IMPL_COMPILE_LIBRARY + ? "KokkosBlas::rotg[ETI]" + : "KokkosBlas::rotg[noETI]"); +#ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION + if (KOKKOSKERNELS_IMPL_COMPILE_LIBRARY) + printf("KokkosBlas1::rotg<> ETI specialization for < %s >\n", + typeid(Scalar).name()); + else { + printf("KokkosBlas1::rotg<> non-ETI specialization for < %s >\n", + typeid(Scalar).name()); + } +#endif + Rotg_Invoke(a, b, c, s); + Kokkos::Profiling::popRegion(); + } +}; +#endif + +} // namespace Impl +} // namespace KokkosBlas + +// +// Macro for declaration of full specialization of +// KokkosBlas::Impl::Rotg. This is NOT for users!!! All +// the declarations of full specializations go in this header file. +// We may spread out definitions (see _DEF macro below) across one or +// more .cpp files. +// +#define KOKKOSBLAS1_ROTG_ETI_SPEC_DECL(SCALAR) \ + extern template struct Rotg; + +// +// Macro for definition of full specialization of +// KokkosBlas::Impl::Rotg. This is NOT for users!!! We +// use this macro in one or more .cpp files in this directory. +// +#define KOKKOSBLAS1_ROTG_ETI_SPEC_INST(SCALAR) \ + template struct Rotg; + +#include +#include + +#endif // KOKKOSBLAS1_ROTG_SPEC_HPP_ diff --git a/blas/src/KokkosBlas1_rotg.hpp b/blas/src/KokkosBlas1_rotg.hpp new file mode 100644 index 0000000000..783b823247 --- /dev/null +++ b/blas/src/KokkosBlas1_rotg.hpp @@ -0,0 +1,70 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_ROTG_HPP_ +#define KOKKOSBLAS1_ROTG_HPP_ + +#include +#include + +namespace KokkosBlas { + +/// \brief Compute the coefficient to apply a Givens rotation. +/// +/// \tparam Scalar data type of inputs and outputs +/// +/// \param a [in/out] on input one of the values to rotate, on output the +/// rotated value \param b [in/out] on input one of the values to rotate, on +/// output the rotated value \param c [out] cosine value associated with the +/// rotation \param s [out] sine value associated with the rotation +template +void rotg(Scalar& a, Scalar& b, Scalar& c, Scalar& s) { + Kokkos::Profiling::pushRegion("KokkosBlas::rotg"); + Impl::Rotg::rotg(a, b, c, s); + Kokkos::Profiling::popRegion(); +} + +} // namespace KokkosBlas + +#endif // KOKKOSBLAS1_ROTG_HPP_ diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp new file mode 100644 index 0000000000..1b0bb898f3 --- /dev/null +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp @@ -0,0 +1,93 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_HPP_ + +namespace KokkosBlas { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct rotg_tpl_spec_avail { + enum : bool { value = false }; +}; +} // namespace Impl +} // namespace KokkosBlas + +namespace KokkosBlas { +namespace Impl { + +// // Generic Host side BLAS (could be MKL or whatever) +// #ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS +// // double +// #define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(SCALAR) \ +// struct rotg_tpl_spec_avail { \ +// enum : bool { value = true }; \ +// }; + +// KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(double) +// KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(float) +// KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex) +// KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex) + +// #endif + +// // cuBLAS +// #ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS +// // double +// #define KOKKOSBLAS1_NRM1_TPL_SPEC_AVAIL_CUBLAS(SCALAR) \ +// struct nrm1_tpl_spec_avail { \ +// enum : bool { value = true }; \ +// }; + +// KOKKOSBLAS1_NRM1_TPL_SPEC_AVAIL_CUBLAS(double) +// KOKKOSBLAS1_NRM1_TPL_SPEC_AVAIL_CUBLAS(float) +// KOKKOSBLAS1_NRM1_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex) +// KOKKOSBLAS1_NRM1_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex) + +// #endif + +} // namespace Impl +} // namespace KokkosBlas +#endif diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp new file mode 100644 index 0000000000..724ccfd93d --- /dev/null +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp @@ -0,0 +1,308 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_ROTG_TPL_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_ROTG_TPL_SPEC_DECL_HPP_ + +namespace KokkosBlas { +namespace Impl { + +namespace { +template +inline void rotg_print_specialization() { +#ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION + printf("KokkosBlas1::rotg<> TPL Blas specialization for < %s >\n", + typeid(Scalar).name()); +#endif +} +} // namespace +} // namespace Impl +} // namespace KokkosBlas + +// Generic Host side BLAS (could be MKL or whatever) +#ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS +#include "KokkosBlas_Host_tpl.hpp" + +namespace KokkosBlas { +namespace Impl { + +// #define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ +// struct Rotg { \ +// \ +// static void rotg(double& a, double& b, double& c, double& s) { \ +// Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,double]"); \ +// Kokkos::Profiling::popRegion(); \ +// } \ +// }; + +// #define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ +// struct Rotg { \ +// \ +// static void rotg(float& a, float& b, float& c, float& s) { \ +// Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,float]"); \ +// Kokkos::Profiling::popRegion(); \ +// } \ +// }; + +// #define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ +// struct Rotg { \ +// \ +// static void rotg(Kokkos::complex& a, \ +// Kokkos::complex& b, \ +// Kokkos::complex& c, Kokkos::complex& s) { \ +// Kokkos::Profiling::pushRegion( \ +// "KokkosBlas::rotg[TPL_BLAS,complex]"); \ +// Kokkos::Profiling::popRegion(); \ +// } \ +// }; + +// #define KOKKOSBLAS1_CNRM1_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ +// struct Rotg, true, ETI_SPEC_AVAIL> { \ +// \ +// static void rotg(Kokkos::complex& a, \ +// Kokkos::complex& b, \ +// Kokkos::complex& c, \ +// Kokkos::complex& s) { \ +// Kokkos::Profiling::pushRegion( \ +// "KokkosBlas::rotg[TPL_BLAS,complex]"); \ +// Kokkos::Profiling::popRegion(); \ +// } \ +// }; + +// KOKKOSBLAS1_DNRM1_TPL_SPEC_DECL_BLAS(true) +// KOKKOSBLAS1_DNRM1_TPL_SPEC_DECL_BLAS(false) + +// KOKKOSBLAS1_SNRM1_TPL_SPEC_DECL_BLAS(true) +// KOKKOSBLAS1_SNRM1_TPL_SPEC_DECL_BLAS(false) + +// KOKKOSBLAS1_ZNRM1_TPL_SPEC_DECL_BLAS(true) +// KOKKOSBLAS1_ZNRM1_TPL_SPEC_DECL_BLAS(false) + +// KOKKOSBLAS1_CNRM1_TPL_SPEC_DECL_BLAS(true) +// KOKKOSBLAS1_CNRM1_TPL_SPEC_DECL_BLAS(false) + +} // namespace Impl +} // namespace KokkosBlas + +#endif + +// cuBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS +#include + +namespace KokkosBlas { +namespace Impl { + +#define KOKKOSBLAS1_DNRM1_TPL_SPEC_DECL_CUBLAS(LAYOUT, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template \ + struct Nrm1< \ + Kokkos::View >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + 1, true, ETI_SPEC_AVAIL> { \ + typedef Kokkos::View > \ + RV; \ + typedef Kokkos::View, \ + Kokkos::MemoryTraits > \ + XV; \ + typedef typename XV::size_type size_type; \ + \ + static void nrm1(RV& R, const XV& X) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,double]"); \ + const size_type numElems = X.extent(0); \ + if (numElems < static_cast(INT_MAX)) { \ + nrm1_print_specialization(); \ + const int N = static_cast(numElems); \ + constexpr int one = 1; \ + KokkosBlas::Impl::CudaBlasSingleton& s = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + cublasDasum(s.handle, N, X.data(), one, R.data()); \ + } else { \ + Nrm1::nrm1(R, X); \ + } \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_SNRM1_TPL_SPEC_DECL_CUBLAS(LAYOUT, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template \ + struct Nrm1< \ + Kokkos::View >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + 1, true, ETI_SPEC_AVAIL> { \ + typedef Kokkos::View > \ + RV; \ + typedef Kokkos::View, \ + Kokkos::MemoryTraits > \ + XV; \ + typedef typename XV::size_type size_type; \ + \ + static void nrm1(RV& R, const XV& X) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,float]"); \ + const size_type numElems = X.extent(0); \ + if (numElems < static_cast(INT_MAX)) { \ + nrm1_print_specialization(); \ + const int N = static_cast(numElems); \ + constexpr int one = 1; \ + KokkosBlas::Impl::CudaBlasSingleton& s = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + cublasSasum(s.handle, N, X.data(), one, R.data()); \ + } else { \ + Nrm1::nrm1(R, X); \ + } \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_ZNRM1_TPL_SPEC_DECL_CUBLAS(LAYOUT, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template \ + struct Nrm1 >, \ + Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + 1, true, ETI_SPEC_AVAIL> { \ + typedef Kokkos::View > \ + RV; \ + typedef Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits > \ + XV; \ + typedef typename XV::size_type size_type; \ + \ + static void nrm1(RV& R, const XV& X) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ + const size_type numElems = X.extent(0); \ + if (numElems < static_cast(INT_MAX)) { \ + nrm1_print_specialization(); \ + const int N = static_cast(numElems); \ + constexpr int one = 1; \ + KokkosBlas::Impl::CudaBlasSingleton& s = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + cublasDzasum(s.handle, N, \ + reinterpret_cast(X.data()), one, \ + R.data()); \ + } else { \ + Nrm1::nrm1(R, X); \ + } \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_CNRM1_TPL_SPEC_DECL_CUBLAS(LAYOUT, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template \ + struct Nrm1 >, \ + Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + 1, true, ETI_SPEC_AVAIL> { \ + typedef Kokkos::View > \ + RV; \ + typedef Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits > \ + XV; \ + typedef typename XV::size_type size_type; \ + \ + static void nrm1(RV& R, const XV& X) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ + const size_type numElems = X.extent(0); \ + if (numElems < static_cast(INT_MAX)) { \ + nrm1_print_specialization(); \ + const int N = static_cast(numElems); \ + constexpr int one = 1; \ + KokkosBlas::Impl::CudaBlasSingleton& s = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + cublasScasum(s.handle, N, \ + reinterpret_cast(X.data()), one, \ + R.data()); \ + } else { \ + Nrm1::nrm1(R, X); \ + } \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +KOKKOSBLAS1_DNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, + true) +KOKKOSBLAS1_DNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, + false) + +KOKKOSBLAS1_SNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, + true) +KOKKOSBLAS1_SNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, + false) + +KOKKOSBLAS1_ZNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, + true) +KOKKOSBLAS1_ZNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, + false) + +KOKKOSBLAS1_CNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, + true) +KOKKOSBLAS1_CNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, + false) + +} // namespace Impl +} // namespace KokkosBlas + +#endif + +#endif diff --git a/blas/unit_test/Test_Blas.hpp b/blas/unit_test/Test_Blas.hpp index b6d4f88314..b794d74bde 100644 --- a/blas/unit_test/Test_Blas.hpp +++ b/blas/unit_test/Test_Blas.hpp @@ -19,6 +19,7 @@ #include "Test_Blas1_nrm2w.hpp" #include "Test_Blas1_nrminf.hpp" #include "Test_Blas1_reciprocal.hpp" +#include "Test_Blas1_rotg.hpp" #include "Test_Blas1_scal.hpp" #include "Test_Blas1_sum.hpp" #include "Test_Blas1_update.hpp" diff --git a/blas/unit_test/Test_Blas1_rotg.hpp b/blas/unit_test/Test_Blas1_rotg.hpp new file mode 100644 index 0000000000..0be1a96f41 --- /dev/null +++ b/blas/unit_test/Test_Blas1_rotg.hpp @@ -0,0 +1,75 @@ +#include + +namespace Test { +template +void test_rotg_impl(const Scalar a_in, const Scalar b_in) { + using magnitude_type = typename Kokkos::ArithTraits::mag_type; + const magnitude_type eps = Kokkos::ArithTraits::eps(); + const Scalar zero = Kokkos::ArithTraits::zero(); + + // Initialize inputs/outputs + Scalar a = a_in; + Scalar b = b_in; + Scalar c = zero, s = zero; + + KokkosBlas::rotg(a, b, c, s); + + // Check that a*c - b*s == 0 + // and a == sqrt(a*a + b*b) + EXPECT_NEAR_KK(a_in * s - b_in * c, zero, 10 * eps); + EXPECT_NEAR_KK(Kokkos::sqrt(a_in * a_in + b_in * b_in), a, 10 * eps); +} +} // namespace Test + +template +int test_rotg() { + const Scalar zero = Kokkos::ArithTraits::zero(); + const Scalar one = Kokkos::ArithTraits::one(); + const Scalar two = one + one; + + Test::test_rotg_impl(one, zero); + Test::test_rotg_impl(one / two, one / two); + Test::test_rotg_impl(2.1 * one, 1.3 * one); + + return 1; +} + +#if defined(KOKKOSKERNELS_INST_FLOAT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, rotg_float) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::rotg"); + test_rotg(); + Kokkos::Profiling::popRegion(); +} +#endif + +#if defined(KOKKOSKERNELS_INST_DOUBLE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, rotg_double) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::rotg"); + test_rotg(); + Kokkos::Profiling::popRegion(); +} +#endif + +#if defined(KOKKOSKERNELS_INST_COMPLEX_FLOAT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, rotg_complex_float) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::rotg"); + test_rotg, TestExecSpace>(); + Kokkos::Profiling::popRegion(); +} +#endif + +#if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, rotg_complex_double) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::rotg"); + test_rotg, TestExecSpace>(); + Kokkos::Profiling::popRegion(); +} +#endif From c331650caf0a1e76c90fc6c19510d5f6bb64e93f Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 14 Sep 2022 10:07:13 -0600 Subject: [PATCH 084/226] ROTG: adding support for TPLs Adding support for host BLAS, cuBLAS and rocBLAS --- blas/impl/KokkosBlas1_rotg_impl.hpp | 18 +- blas/impl/KokkosBlas1_rotg_spec.hpp | 8 +- blas/src/KokkosBlas1_rotg.hpp | 3 +- blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp | 60 ++- blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp | 423 +++++++++--------- blas/tpls/KokkosBlas_Host_tpl.cpp | 37 ++ blas/tpls/KokkosBlas_Host_tpl.hpp | 2 + 7 files changed, 306 insertions(+), 245 deletions(-) diff --git a/blas/impl/KokkosBlas1_rotg_impl.hpp b/blas/impl/KokkosBlas1_rotg_impl.hpp index dad4fdb3ec..ea93da605e 100644 --- a/blas/impl/KokkosBlas1_rotg_impl.hpp +++ b/blas/impl/KokkosBlas1_rotg_impl.hpp @@ -90,20 +90,24 @@ void Rotg_Invoke(Scalar& a, Scalar& b, Scalar& c, Scalar& s) { template ::is_complex, bool>::type = true> -void Rotg_Invoke(Scalar& a, Scalar& b, Scalar& c, Scalar& s) { - const Scalar one = Kokkos::ArithTraits::one(); - const Scalar zero = Kokkos::ArithTraits::zero(); +void Rotg_Invoke(Scalar& a, Scalar& b, + typename Kokkos::ArithTraits::mag_type& c, Scalar& s) { + using mag_type = typename Kokkos::ArithTraits::mag_type; - const Scalar numerical_scaling = Kokkos::abs(a) + Kokkos::abs(b); + const Scalar one = Kokkos::ArithTraits::one(); + const Scalar zero = Kokkos::ArithTraits::zero(); + const mag_type mag_zero = Kokkos::ArithTraits::zero(); + + const mag_type numerical_scaling = Kokkos::abs(a) + Kokkos::abs(b); if (Kokkos::abs(a) == zero) { - c = zero; + c = mag_zero; s = one; a = b; } else { const Scalar scaled_a = Kokkos::abs(a / numerical_scaling); const Scalar scaled_b = Kokkos::abs(b / numerical_scaling); - Scalar norm = Kokkos::sqrt(scaled_a * scaled_a + scaled_b * scaled_b) * - numerical_scaling; + mag_type norm = Kokkos::sqrt(scaled_a * scaled_a + scaled_b * scaled_b) * + numerical_scaling; Scalar unit_a = a / Kokkos::abs(a); c = Kokkos::abs(a) / norm; s = unit_a * Kokkos::conj(b) / norm; diff --git a/blas/impl/KokkosBlas1_rotg_spec.hpp b/blas/impl/KokkosBlas1_rotg_spec.hpp index 7a41a070dc..1b13095eea 100644 --- a/blas/impl/KokkosBlas1_rotg_spec.hpp +++ b/blas/impl/KokkosBlas1_rotg_spec.hpp @@ -88,14 +88,18 @@ template ::value, bool eti_spec_avail = rotg_eti_spec_avail::value> struct Rotg { - static void rotg(Scalar& a, Scalar& b, Scalar& c, Scalar& s); + static void rotg(Scalar& a, Scalar& b, + typename Kokkos::ArithTraits::mag_type& c, + Scalar& s); }; #if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY //! Full specialization of Rotg. template struct Rotg { - static void rotg(Scalar& a, Scalar& b, Scalar& c, Scalar& s) { + static void rotg(Scalar& a, Scalar& b, + typename Kokkos::ArithTraits::mag_type& c, + Scalar& s) { Kokkos::Profiling::pushRegion(KOKKOSKERNELS_IMPL_COMPILE_LIBRARY ? "KokkosBlas::rotg[ETI]" : "KokkosBlas::rotg[noETI]"); diff --git a/blas/src/KokkosBlas1_rotg.hpp b/blas/src/KokkosBlas1_rotg.hpp index 783b823247..3e030b9e87 100644 --- a/blas/src/KokkosBlas1_rotg.hpp +++ b/blas/src/KokkosBlas1_rotg.hpp @@ -59,7 +59,8 @@ namespace KokkosBlas { /// output the rotated value \param c [out] cosine value associated with the /// rotation \param s [out] sine value associated with the rotation template -void rotg(Scalar& a, Scalar& b, Scalar& c, Scalar& s) { +void rotg(Scalar& a, Scalar& b, + typename Kokkos::ArithTraits::mag_type& c, Scalar& s) { Kokkos::Profiling::pushRegion("KokkosBlas::rotg"); Impl::Rotg::rotg(a, b, c, s); Kokkos::Profiling::popRegion(); diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp index 1b0bb898f3..b3d762887f 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp @@ -58,35 +58,47 @@ struct rotg_tpl_spec_avail { namespace KokkosBlas { namespace Impl { -// // Generic Host side BLAS (could be MKL or whatever) -// #ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS -// // double -// #define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(SCALAR) \ -// struct rotg_tpl_spec_avail { \ -// enum : bool { value = true }; \ -// }; +// Generic Host side BLAS (could be MKL or whatever) +#ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS +#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(SCALAR) \ + template <> \ + struct rotg_tpl_spec_avail { \ + enum : bool { value = true }; \ + }; -// KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(double) -// KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(float) -// KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex) -// KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(double) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(float) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex) +#endif -// #endif +// cuBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS +#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(SCALAR) \ + template <> \ + struct rotg_tpl_spec_avail { \ + enum : bool { value = true }; \ + }; -// // cuBLAS -// #ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS -// // double -// #define KOKKOSBLAS1_NRM1_TPL_SPEC_AVAIL_CUBLAS(SCALAR) \ -// struct nrm1_tpl_spec_avail { \ -// enum : bool { value = true }; \ -// }; +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(double) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex) +#endif -// KOKKOSBLAS1_NRM1_TPL_SPEC_AVAIL_CUBLAS(double) -// KOKKOSBLAS1_NRM1_TPL_SPEC_AVAIL_CUBLAS(float) -// KOKKOSBLAS1_NRM1_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex) -// KOKKOSBLAS1_NRM1_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex) +// rocBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS +#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(SCALAR) \ + template <> \ + struct rotg_tpl_spec_avail { \ + enum : bool { value = true }; \ + }; -// #endif +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(double) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(float) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex) +#endif } // namespace Impl } // namespace KokkosBlas diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp index 724ccfd93d..f1002c42a3 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp @@ -67,60 +67,67 @@ inline void rotg_print_specialization() { namespace KokkosBlas { namespace Impl { -// #define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ -// struct Rotg { \ -// \ -// static void rotg(double& a, double& b, double& c, double& s) { \ -// Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,double]"); \ -// Kokkos::Profiling::popRegion(); \ -// } \ -// }; - -// #define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ -// struct Rotg { \ -// \ -// static void rotg(float& a, float& b, float& c, float& s) { \ -// Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,float]"); \ -// Kokkos::Profiling::popRegion(); \ -// } \ -// }; - -// #define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ -// struct Rotg { \ -// \ -// static void rotg(Kokkos::complex& a, \ -// Kokkos::complex& b, \ -// Kokkos::complex& c, Kokkos::complex& s) { \ -// Kokkos::Profiling::pushRegion( \ -// "KokkosBlas::rotg[TPL_BLAS,complex]"); \ -// Kokkos::Profiling::popRegion(); \ -// } \ -// }; - -// #define KOKKOSBLAS1_CNRM1_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ -// struct Rotg, true, ETI_SPEC_AVAIL> { \ -// \ -// static void rotg(Kokkos::complex& a, \ -// Kokkos::complex& b, \ -// Kokkos::complex& c, \ -// Kokkos::complex& s) { \ -// Kokkos::Profiling::pushRegion( \ -// "KokkosBlas::rotg[TPL_BLAS,complex]"); \ -// Kokkos::Profiling::popRegion(); \ -// } \ -// }; - -// KOKKOSBLAS1_DNRM1_TPL_SPEC_DECL_BLAS(true) -// KOKKOSBLAS1_DNRM1_TPL_SPEC_DECL_BLAS(false) - -// KOKKOSBLAS1_SNRM1_TPL_SPEC_DECL_BLAS(true) -// KOKKOSBLAS1_SNRM1_TPL_SPEC_DECL_BLAS(false) - -// KOKKOSBLAS1_ZNRM1_TPL_SPEC_DECL_BLAS(true) -// KOKKOSBLAS1_ZNRM1_TPL_SPEC_DECL_BLAS(false) - -// KOKKOSBLAS1_CNRM1_TPL_SPEC_DECL_BLAS(true) -// KOKKOSBLAS1_CNRM1_TPL_SPEC_DECL_BLAS(false) +#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg { \ + static void rotg(double& a, double& b, double& c, double& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,double]"); \ + HostBlas::rotg(&a, &b, &c, &s); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg { \ + static void rotg(float& a, float& b, float& c, float& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,float]"); \ + HostBlas::rotg(&a, &b, &c, &s); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg, true, ETI_SPEC_AVAIL> { \ + static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ + double& c, Kokkos::complex& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::rotg[TPL_BLAS,complex]"); \ + HostBlas >::rotg( \ + reinterpret_cast*>(&a), \ + reinterpret_cast*>(&b), &c, \ + reinterpret_cast*>(&s)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg, true, ETI_SPEC_AVAIL> { \ + static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ + float& c, Kokkos::complex& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::rotg[TPL_BLAS,complex]"); \ + HostBlas >::rotg( \ + reinterpret_cast*>(&a), \ + reinterpret_cast*>(&b), &c, \ + reinterpret_cast*>(&s)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(false) + +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(false) + +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(false) + +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(false) } // namespace Impl } // namespace KokkosBlas @@ -134,171 +141,165 @@ namespace Impl { namespace KokkosBlas { namespace Impl { -#define KOKKOSBLAS1_DNRM1_TPL_SPEC_DECL_CUBLAS(LAYOUT, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template \ - struct Nrm1< \ - Kokkos::View >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - 1, true, ETI_SPEC_AVAIL> { \ - typedef Kokkos::View > \ - RV; \ - typedef Kokkos::View, \ - Kokkos::MemoryTraits > \ - XV; \ - typedef typename XV::size_type size_type; \ - \ - static void nrm1(RV& R, const XV& X) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,double]"); \ - const size_type numElems = X.extent(0); \ - if (numElems < static_cast(INT_MAX)) { \ - nrm1_print_specialization(); \ - const int N = static_cast(numElems); \ - constexpr int one = 1; \ - KokkosBlas::Impl::CudaBlasSingleton& s = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - cublasDasum(s.handle, N, X.data(), one, R.data()); \ - } else { \ - Nrm1::nrm1(R, X); \ - } \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg { \ + static void rotg(double& a, double& b, double& c, double& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,double]"); \ + rotg_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + cublasDrotg(singleton.handle, &a, &b, &c, &s); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg { \ + static void rotg(float& a, float& b, float& c, float& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,float]"); \ + rotg_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + cublasSrotg(singleton.handle, &a, &b, &c, &s); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg, true, ETI_SPEC_AVAIL> { \ + static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ + double& c, Kokkos::complex& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ + rotg_print_specialization >(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + cublasZrotg(singleton.handle, reinterpret_cast(&a), \ + reinterpret_cast(&b), &c, \ + reinterpret_cast(&s)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg, true, ETI_SPEC_AVAIL> { \ + static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ + float& c, Kokkos::complex& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ + rotg_print_specialization >(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + cublasCrotg(singleton.handle, reinterpret_cast(&a), \ + reinterpret_cast(&b), &c, \ + reinterpret_cast(&s)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(false) + +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(false) + +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(false) + +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(false) + +} // namespace Impl +} // namespace KokkosBlas + +#endif + +// rocBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS +#include + +namespace KokkosBlas { +namespace Impl { + +#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg { \ + static void rotg(double& a, double& b, double& c, double& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,double]"); \ + rotg_print_specialization(); \ + KokkosBlas::Impl::RocBlasSingleton& singleton = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_drotg(singleton.handle, &a, &b, &c, &s)); \ + Kokkos::Profiling::popRegion(); \ + } \ }; -#define KOKKOSBLAS1_SNRM1_TPL_SPEC_DECL_CUBLAS(LAYOUT, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template \ - struct Nrm1< \ - Kokkos::View >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - 1, true, ETI_SPEC_AVAIL> { \ - typedef Kokkos::View > \ - RV; \ - typedef Kokkos::View, \ - Kokkos::MemoryTraits > \ - XV; \ - typedef typename XV::size_type size_type; \ - \ - static void nrm1(RV& R, const XV& X) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,float]"); \ - const size_type numElems = X.extent(0); \ - if (numElems < static_cast(INT_MAX)) { \ - nrm1_print_specialization(); \ - const int N = static_cast(numElems); \ - constexpr int one = 1; \ - KokkosBlas::Impl::CudaBlasSingleton& s = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - cublasSasum(s.handle, N, X.data(), one, R.data()); \ - } else { \ - Nrm1::nrm1(R, X); \ - } \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg { \ + static void rotg(float& a, float& b, float& c, float& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,float]"); \ + rotg_print_specialization(); \ + KokkosBlas::Impl::RocBlasSingleton& singleton = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_srotg(singleton.handle, &a, &b, &c, &s)); \ + Kokkos::Profiling::popRegion(); \ + } \ }; -#define KOKKOSBLAS1_ZNRM1_TPL_SPEC_DECL_CUBLAS(LAYOUT, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template \ - struct Nrm1 >, \ - Kokkos::View*, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits >, \ - 1, true, ETI_SPEC_AVAIL> { \ - typedef Kokkos::View > \ - RV; \ - typedef Kokkos::View*, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits > \ - XV; \ - typedef typename XV::size_type size_type; \ - \ - static void nrm1(RV& R, const XV& X) { \ - Kokkos::Profiling::pushRegion( \ - "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ - const size_type numElems = X.extent(0); \ - if (numElems < static_cast(INT_MAX)) { \ - nrm1_print_specialization(); \ - const int N = static_cast(numElems); \ - constexpr int one = 1; \ - KokkosBlas::Impl::CudaBlasSingleton& s = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - cublasDzasum(s.handle, N, \ - reinterpret_cast(X.data()), one, \ - R.data()); \ - } else { \ - Nrm1::nrm1(R, X); \ - } \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg, true, ETI_SPEC_AVAIL> { \ + static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ + double& c, Kokkos::complex& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::nrm1[TPL_ROCBLAS,complex]"); \ + rotg_print_specialization >(); \ + KokkosBlas::Impl::RocBlasSingleton& singleton = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_zrotg( \ + singleton.handle, reinterpret_cast(&a), \ + reinterpret_cast(&b), &c, \ + reinterpret_cast(&s))); \ + Kokkos::Profiling::popRegion(); \ + } \ }; -#define KOKKOSBLAS1_CNRM1_TPL_SPEC_DECL_CUBLAS(LAYOUT, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template \ - struct Nrm1 >, \ - Kokkos::View*, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits >, \ - 1, true, ETI_SPEC_AVAIL> { \ - typedef Kokkos::View > \ - RV; \ - typedef Kokkos::View*, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits > \ - XV; \ - typedef typename XV::size_type size_type; \ - \ - static void nrm1(RV& R, const XV& X) { \ - Kokkos::Profiling::pushRegion( \ - "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ - const size_type numElems = X.extent(0); \ - if (numElems < static_cast(INT_MAX)) { \ - nrm1_print_specialization(); \ - const int N = static_cast(numElems); \ - constexpr int one = 1; \ - KokkosBlas::Impl::CudaBlasSingleton& s = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - cublasScasum(s.handle, N, \ - reinterpret_cast(X.data()), one, \ - R.data()); \ - } else { \ - Nrm1::nrm1(R, X); \ - } \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg, true, ETI_SPEC_AVAIL> { \ + static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ + float& c, Kokkos::complex& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::nrm1[TPL_ROCBLAS,complex]"); \ + rotg_print_specialization >(); \ + KokkosBlas::Impl::RocBlasSingleton& singleton = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_crotg( \ + singleton.handle, reinterpret_cast(&a), \ + reinterpret_cast(&b), &c, \ + reinterpret_cast(&s))); \ + Kokkos::Profiling::popRegion(); \ + } \ }; -KOKKOSBLAS1_DNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, - true) -KOKKOSBLAS1_DNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, - false) - -KOKKOSBLAS1_SNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, - true) -KOKKOSBLAS1_SNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, - false) - -KOKKOSBLAS1_ZNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, - true) -KOKKOSBLAS1_ZNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, - false) - -KOKKOSBLAS1_CNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, - true) -KOKKOSBLAS1_CNRM1_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::CudaSpace, - false) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(false) + +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(false) + +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(false) + +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(false) } // namespace Impl } // namespace KokkosBlas diff --git a/blas/tpls/KokkosBlas_Host_tpl.cpp b/blas/tpls/KokkosBlas_Host_tpl.cpp index b834e4fcf0..d2e8435fdf 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.cpp +++ b/blas/tpls/KokkosBlas_Host_tpl.cpp @@ -127,6 +127,18 @@ void F77_BLAS_MANGLE(zaxpy, const std::complex* x, const int* x_inc, /* */ std::complex* y, const int* y_inc); +/// +/// rotg +/// +void F77_BLAS_MANGLE(srotg, SROTG)(float* a, float* b, float* c, float* s); +void F77_BLAS_MANGLE(drotg, DROTG)(double* a, double* b, double* c, double* s); +void F77_BLAS_MANGLE(crotg, CROTG)(std::complex* a, + std::complex* b, float* c, + std::complex* s); +void F77_BLAS_MANGLE(zrotg, ZROTG)(std::complex* a, + std::complex* b, double* c, + std::complex* s); + /// /// Gemv /// @@ -339,6 +351,11 @@ void F77_BLAS_MANGLE(zscal, #define F77_FUNC_CAXPY F77_BLAS_MANGLE(caxpy, CAXPY) #define F77_FUNC_ZAXPY F77_BLAS_MANGLE(zaxpy, ZAXPY) +#define F77_FUNC_SROTG F77_BLAS_MANGLE(srotg, SROTG) +#define F77_FUNC_DROTG F77_BLAS_MANGLE(drotg, DROTG) +#define F77_FUNC_CROTG F77_BLAS_MANGLE(crotg, CROTG) +#define F77_FUNC_ZROTG F77_BLAS_MANGLE(zrotg, ZROTG) + #define F77_FUNC_SGEMV F77_BLAS_MANGLE(sgemv, SGEMV) #define F77_FUNC_DGEMV F77_BLAS_MANGLE(dgemv, DGEMV) #define F77_FUNC_CGEMV F77_BLAS_MANGLE(cgemv, CGEMV) @@ -414,6 +431,10 @@ void HostBlas::axpy(int n, const float alpha, const float* x, int x_inc, F77_FUNC_SAXPY(&n, &alpha, x, &x_inc, y, &y_inc); } template <> +void HostBlas::rotg(float* a, float* b, float* c, float* s) { + F77_FUNC_SROTG(a, b, c, s); +} +template <> void HostBlas::gemv(const char trans, int m, int n, const float alpha, const float* a, int lda, const float* b, int ldb, const float beta, @@ -503,6 +524,10 @@ void HostBlas::axpy(int n, const double alpha, const double* x, F77_FUNC_DAXPY(&n, &alpha, x, &x_inc, y, &y_inc); } template <> +void HostBlas::rotg(double* a, double* b, double* c, double* s) { + F77_FUNC_DROTG(a, b, c, s); +} +template <> void HostBlas::gemv(const char trans, int m, int n, const double alpha, const double* a, int lda, const double* b, int ldb, const double beta, @@ -606,6 +631,12 @@ void HostBlas >::axpy(int n, int y_inc) { F77_FUNC_CAXPY(&n, &alpha, x, &x_inc, y, &y_inc); } +template <> +void HostBlas >::rotg(std::complex* a, + std::complex* b, float* c, + std::complex* s) { + F77_FUNC_CROTG(a, b, c, s); +} template <> void HostBlas >::gemv(const char trans, int m, int n, @@ -740,6 +771,12 @@ void HostBlas >::axpy(int n, int y_inc) { F77_FUNC_ZAXPY(&n, &alpha, x, &x_inc, y, &y_inc); } +template <> +void HostBlas >::rotg(std::complex* a, + std::complex* b, double* c, + std::complex* s) { + F77_FUNC_ZROTG(a, b, c, s); +} template <> void HostBlas >::gemv( diff --git a/blas/tpls/KokkosBlas_Host_tpl.hpp b/blas/tpls/KokkosBlas_Host_tpl.hpp index efde4db81a..b598cd1556 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.hpp +++ b/blas/tpls/KokkosBlas_Host_tpl.hpp @@ -76,6 +76,8 @@ struct HostBlas { static void axpy(int n, const T alpha, const T *x, int x_inc, /* */ T *y, int y_inc); + static void rotg(T *a, T *b, mag_type *c, T *s); + static void gemv(const char trans, int m, int n, const T alpha, const T *a, int lda, const T *b, int ldb, const T beta, /* */ T *c, int ldc); From 0f03ff5ee0f3725b55f7df6c0ac3b7f91eea2749 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 14 Sep 2022 18:12:24 -0600 Subject: [PATCH 085/226] ROTG: fix issue with return type of sqrt Kokkos::sqrt(Kokkos::complex<>) returns a Kokkos::complex<> so in this case we need to take the module of that since we want a magnitude_type. --- blas/impl/KokkosBlas1_rotg_impl.hpp | 5 +++-- blas/unit_test/Test_Blas1_rotg.hpp | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/blas/impl/KokkosBlas1_rotg_impl.hpp b/blas/impl/KokkosBlas1_rotg_impl.hpp index ea93da605e..dcf259f841 100644 --- a/blas/impl/KokkosBlas1_rotg_impl.hpp +++ b/blas/impl/KokkosBlas1_rotg_impl.hpp @@ -106,8 +106,9 @@ void Rotg_Invoke(Scalar& a, Scalar& b, } else { const Scalar scaled_a = Kokkos::abs(a / numerical_scaling); const Scalar scaled_b = Kokkos::abs(b / numerical_scaling); - mag_type norm = Kokkos::sqrt(scaled_a * scaled_a + scaled_b * scaled_b) * - numerical_scaling; + mag_type norm = + Kokkos::abs(Kokkos::sqrt(scaled_a * scaled_a + scaled_b * scaled_b)) * + numerical_scaling; Scalar unit_a = a / Kokkos::abs(a); c = Kokkos::abs(a) / norm; s = unit_a * Kokkos::conj(b) / norm; diff --git a/blas/unit_test/Test_Blas1_rotg.hpp b/blas/unit_test/Test_Blas1_rotg.hpp index 0be1a96f41..bee64ee167 100644 --- a/blas/unit_test/Test_Blas1_rotg.hpp +++ b/blas/unit_test/Test_Blas1_rotg.hpp @@ -10,7 +10,8 @@ void test_rotg_impl(const Scalar a_in, const Scalar b_in) { // Initialize inputs/outputs Scalar a = a_in; Scalar b = b_in; - Scalar c = zero, s = zero; + magnitude_type c = Kokkos::ArithTraits::zero(); + Scalar s = zero; KokkosBlas::rotg(a, b, c, s); From 29a8d821bcad065ec9a61d83b906f082e2f0c32b Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Thu, 15 Sep 2022 09:01:21 -0600 Subject: [PATCH 086/226] ROTG: apply clang-format --- blas/unit_test/Test_Blas1_rotg.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/blas/unit_test/Test_Blas1_rotg.hpp b/blas/unit_test/Test_Blas1_rotg.hpp index bee64ee167..5e54ee671e 100644 --- a/blas/unit_test/Test_Blas1_rotg.hpp +++ b/blas/unit_test/Test_Blas1_rotg.hpp @@ -8,10 +8,10 @@ void test_rotg_impl(const Scalar a_in, const Scalar b_in) { const Scalar zero = Kokkos::ArithTraits::zero(); // Initialize inputs/outputs - Scalar a = a_in; - Scalar b = b_in; + Scalar a = a_in; + Scalar b = b_in; magnitude_type c = Kokkos::ArithTraits::zero(); - Scalar s = zero; + Scalar s = zero; KokkosBlas::rotg(a, b, c, s); From 0b5e4fba27aacb374a3f5e8259702a9f5e030f8a Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Thu, 15 Sep 2022 14:08:43 -0600 Subject: [PATCH 087/226] ROTG: rebase on develop and fix typo in documentation --- blas/src/KokkosBlas1_rotg.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blas/src/KokkosBlas1_rotg.hpp b/blas/src/KokkosBlas1_rotg.hpp index 3e030b9e87..ff349444eb 100644 --- a/blas/src/KokkosBlas1_rotg.hpp +++ b/blas/src/KokkosBlas1_rotg.hpp @@ -50,7 +50,7 @@ namespace KokkosBlas { -/// \brief Compute the coefficient to apply a Givens rotation. +/// \brief Compute the coefficients to apply a Givens rotation. /// /// \tparam Scalar data type of inputs and outputs /// From 44b93444b8a057d8a4191d3c924ee5807891be69 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Thu, 15 Sep 2022 16:57:44 -0600 Subject: [PATCH 088/226] Warning fixes: Apple Clang complains about [-Werror,-Wunused-but-set-variable] Fixing a few spots in performance tests and graph algorithms where the clang compiler on M1 macbook fails with warning as errors. --- graph/impl/KokkosGraph_Distance2Color_impl.hpp | 2 ++ perf_test/sparse/KokkosSparse_spmv_struct.cpp | 6 ------ perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp | 6 ------ 3 files changed, 2 insertions(+), 12 deletions(-) diff --git a/graph/impl/KokkosGraph_Distance2Color_impl.hpp b/graph/impl/KokkosGraph_Distance2Color_impl.hpp index 78251460d9..6580027fba 100644 --- a/graph/impl/KokkosGraph_Distance2Color_impl.hpp +++ b/graph/impl/KokkosGraph_Distance2Color_impl.hpp @@ -371,6 +371,8 @@ class GraphColorDistance2 { total_time += time; std::cout << "\tTime serial conflict resolution : " << time << std::endl; + std::cout << "\tTotal time for coloring : " << total_time + << std::endl; gc_handle->add_to_overall_coloring_time_phase3(time); } diff --git a/perf_test/sparse/KokkosSparse_spmv_struct.cpp b/perf_test/sparse/KokkosSparse_spmv_struct.cpp index 1d9853a7ab..3035356f30 100644 --- a/perf_test/sparse/KokkosSparse_spmv_struct.cpp +++ b/perf_test/sparse/KokkosSparse_spmv_struct.cpp @@ -411,21 +411,15 @@ int main(int argc, char **argv) { Kokkos::deep_copy(h_y, y_check); Scalar error = 0; - Scalar sum = 0; for (int rowIdx = 0; rowIdx < A.numRows(); ++rowIdx) { for (int vecIdx = 0; vecIdx < numVecs; ++vecIdx) { error += (h_y_compare(rowIdx, vecIdx) - h_y(rowIdx, vecIdx)) * (h_y_compare(rowIdx, vecIdx) - h_y(rowIdx, vecIdx)); - sum += h_y_compare(rowIdx, vecIdx) * h_y_compare(rowIdx, vecIdx); } } - int num_errors = 0; double total_error = 0; - double total_sum = 0; - num_errors += (error / (sum == 0 ? 1 : sum)) > 1e-5 ? 1 : 0; total_error += error; - total_sum += sum; if (total_error == 0) { printf("Kokkos::MultiVector Test: Passed\n"); diff --git a/perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp b/perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp index c578c269f8..d689b9afba 100644 --- a/perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp +++ b/perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp @@ -771,21 +771,15 @@ int main(int argc, char** argv) { Kokkos::deep_copy(h_y, y_check); Scalar error = 0; - Scalar sum = 0; for (int rowIdx = 0; rowIdx < A.numRows(); ++rowIdx) { for (int vecIdx = 0; vecIdx < numVecs; ++vecIdx) { error += (h_y_compare(rowIdx) - h_y(rowIdx)) * (h_y_compare(rowIdx) - h_y(rowIdx)); - sum += h_y_compare(rowIdx) * h_y_compare(rowIdx); } } - int num_errors = 0; double total_error = 0; - double total_sum = 0; - num_errors += (error / (sum == 0 ? 1 : sum)) > 1e-5 ? 1 : 0; total_error += error; - total_sum += sum; if (total_error == 0) { printf("Kokkos::MultiVector Test: Passed\n"); From a7bc2a4dfa3e0a05cfb8e3bdf3e3a1ddf8693fa7 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Mon, 19 Sep 2022 09:13:37 -0600 Subject: [PATCH 089/226] Revert unused total_time references --- graph/impl/KokkosGraph_Distance2Color_impl.hpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/graph/impl/KokkosGraph_Distance2Color_impl.hpp b/graph/impl/KokkosGraph_Distance2Color_impl.hpp index f0ad8a6ac8..2c2f83f957 100644 --- a/graph/impl/KokkosGraph_Distance2Color_impl.hpp +++ b/graph/impl/KokkosGraph_Distance2Color_impl.hpp @@ -258,7 +258,7 @@ class GraphColorDistance2 { lno_t numUncoloredPreviousIter = this->nr + 1; double time; - // double total_time = 0.0; + double total_time = 0.0; Kokkos::Timer timer; int iter = 0; @@ -295,7 +295,7 @@ class GraphColorDistance2 { if (this->_ticToc) { time = timer.seconds(); - // total_time += time; + total_time += time; std::cout << "\tIteration: " << iter << std::endl << "\t - Time speculative greedy phase : " << time << std::endl @@ -326,7 +326,7 @@ class GraphColorDistance2 { if (_ticToc) { time = timer.seconds(); - // total_time += time; + total_time += time; std::cout << "\t - Time conflict detection : " << time << std::endl; std::cout << "\t - Num Uncolored (conflicts) : " << numUncolored @@ -368,11 +368,11 @@ class GraphColorDistance2 { if (_ticToc) { time = timer.seconds(); - // total_time += time; + total_time += time; std::cout << "\tTime serial conflict resolution : " << time << std::endl; std::cout << "\tTotal time for coloring : " << total_time - << std::endl; + << std::endl; gc_handle->add_to_overall_coloring_time_phase3(time); } From 198618d72927ec2a5e05a6726e7477fc870fcae7 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 19 Sep 2022 15:38:20 -0400 Subject: [PATCH 090/226] spgemm_cusparse: fixing issue with unused parameters --- sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp index bb34846ef5..bfa42a00d7 100644 --- a/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp @@ -169,6 +169,8 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, } handle->set_c_nnz(C_nnz); h->C_populated = false; // sparsity pattern of C is not set yet + (void)row_mapC; + #elif defined(CUSPARSE_VERSION) && (11000 <= CUSPARSE_VERSION) throw std::runtime_error( @@ -319,6 +321,10 @@ void cuSPARSE_apply( KOKKOS_CUSPARSE_SAFE_CALL( cusparseSetPointerMode(h->cusparseHandle, oldPtrMode)); + (void) m; + (void) n; + (void) k; + #elif (CUSPARSE_VERSION >= 11000) throw std::runtime_error( "SpGEMM cuSPARSE backend is not yet supported for this CUDA version\n"); From c88eedd86904d94864de8d6441de62b39941e92a Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 19 Sep 2022 13:39:26 -0600 Subject: [PATCH 091/226] spgemm_cusparse: apply clang-format --- sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp index bfa42a00d7..932101e42c 100644 --- a/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp @@ -171,7 +171,6 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, h->C_populated = false; // sparsity pattern of C is not set yet (void)row_mapC; - #elif defined(CUSPARSE_VERSION) && (11000 <= CUSPARSE_VERSION) throw std::runtime_error( "SpGEMM cuSPARSE backend is not yet supported for this CUDA version\n"); @@ -321,9 +320,9 @@ void cuSPARSE_apply( KOKKOS_CUSPARSE_SAFE_CALL( cusparseSetPointerMode(h->cusparseHandle, oldPtrMode)); - (void) m; - (void) n; - (void) k; + (void)m; + (void)n; + (void)k; #elif (CUSPARSE_VERSION >= 11000) throw std::runtime_error( From d35e692f7a98b26972b24126959ba73050519365 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 19 Sep 2022 14:55:01 -0400 Subject: [PATCH 092/226] ROTG: fix eti issue when multiple TPL are enabled I have reproduced and fixed, all tests compile and run fine. ROTG: applying clang-format --- blas/CMakeLists.txt | 2 +- blas/impl/KokkosBlas1_rotg_impl.hpp | 4 +- blas/impl/KokkosBlas1_rotg_spec.hpp | 33 ++-- blas/src/KokkosBlas1_rotg.hpp | 5 +- blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp | 59 ++++--- blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp | 164 ++++++++++-------- .../impl/KokkosGraph_Distance2Color_impl.hpp | 2 +- 7 files changed, 152 insertions(+), 117 deletions(-) diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt index 6c27145188..e94a09d008 100644 --- a/blas/CMakeLists.txt +++ b/blas/CMakeLists.txt @@ -252,7 +252,7 @@ KOKKOSKERNELS_GENERATE_ETI(Blas1_rotg rotg COMPONENTS blas HEADER_LIST ETI_HEADERS SOURCE_LIST SOURCES - TYPE_LISTS FLOATS + TYPE_LISTS FLOATS DEVICES ) KOKKOSKERNELS_GENERATE_ETI(Blas2_gemv gemv diff --git a/blas/impl/KokkosBlas1_rotg_impl.hpp b/blas/impl/KokkosBlas1_rotg_impl.hpp index dcf259f841..7b2d8d0e2b 100644 --- a/blas/impl/KokkosBlas1_rotg_impl.hpp +++ b/blas/impl/KokkosBlas1_rotg_impl.hpp @@ -52,7 +52,7 @@ namespace KokkosBlas { namespace Impl { /// \brief Compute Givens rotation coefficients. -template ::is_complex, bool>::type = true> void Rotg_Invoke(Scalar& a, Scalar& b, Scalar& c, Scalar& s) { @@ -87,7 +87,7 @@ void Rotg_Invoke(Scalar& a, Scalar& b, Scalar& c, Scalar& s) { } } -template ::is_complex, bool>::type = true> void Rotg_Invoke(Scalar& a, Scalar& b, diff --git a/blas/impl/KokkosBlas1_rotg_spec.hpp b/blas/impl/KokkosBlas1_rotg_spec.hpp index 1b13095eea..f0b5d25ce6 100644 --- a/blas/impl/KokkosBlas1_rotg_spec.hpp +++ b/blas/impl/KokkosBlas1_rotg_spec.hpp @@ -56,7 +56,7 @@ namespace KokkosBlas { namespace Impl { // Specialization struct which defines whether a specialization exists -template +template struct rotg_eti_spec_avail { enum : bool { value = false }; }; @@ -70,10 +70,10 @@ struct rotg_eti_spec_avail { // We may spread out definitions (see _INST macro below) across one or // more .cpp files. // -#define KOKKOSBLAS1_ROTG_ETI_SPEC_AVAIL(SCALAR) \ - template <> \ - struct rotg_eti_spec_avail { \ - enum : bool { value = true }; \ +#define KOKKOSBLAS1_ROTG_ETI_SPEC_AVAIL(SCALAR, EXECSPACE, MEMSPACE) \ + template <> \ + struct rotg_eti_spec_avail { \ + enum : bool { value = true }; \ }; // Include the actual specialization declarations @@ -84,9 +84,11 @@ namespace KokkosBlas { namespace Impl { // Unification layer -template ::value, - bool eti_spec_avail = rotg_eti_spec_avail::value> +template ::value, + bool eti_spec_avail = + rotg_eti_spec_avail::value> struct Rotg { static void rotg(Scalar& a, Scalar& b, typename Kokkos::ArithTraits::mag_type& c, @@ -95,8 +97,9 @@ struct Rotg { #if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY //! Full specialization of Rotg. -template -struct Rotg { +template +struct Rotg { static void rotg(Scalar& a, Scalar& b, typename Kokkos::ArithTraits::mag_type& c, Scalar& s) { @@ -112,7 +115,7 @@ struct Rotg { typeid(Scalar).name()); } #endif - Rotg_Invoke(a, b, c, s); + Rotg_Invoke(a, b, c, s); Kokkos::Profiling::popRegion(); } }; @@ -128,16 +131,16 @@ struct Rotg { // We may spread out definitions (see _DEF macro below) across one or // more .cpp files. // -#define KOKKOSBLAS1_ROTG_ETI_SPEC_DECL(SCALAR) \ - extern template struct Rotg; +#define KOKKOSBLAS1_ROTG_ETI_SPEC_DECL(SCALAR, EXECSPACE, MEMSPACE) \ + extern template struct Rotg; // // Macro for definition of full specialization of // KokkosBlas::Impl::Rotg. This is NOT for users!!! We // use this macro in one or more .cpp files in this directory. // -#define KOKKOSBLAS1_ROTG_ETI_SPEC_INST(SCALAR) \ - template struct Rotg; +#define KOKKOSBLAS1_ROTG_ETI_SPEC_INST(SCALAR, EXECSPACE, MEMSPACE) \ + template struct Rotg; #include #include diff --git a/blas/src/KokkosBlas1_rotg.hpp b/blas/src/KokkosBlas1_rotg.hpp index ff349444eb..1a2f12a297 100644 --- a/blas/src/KokkosBlas1_rotg.hpp +++ b/blas/src/KokkosBlas1_rotg.hpp @@ -58,11 +58,12 @@ namespace KokkosBlas { /// rotated value \param b [in/out] on input one of the values to rotate, on /// output the rotated value \param c [out] cosine value associated with the /// rotation \param s [out] sine value associated with the rotation -template +template void rotg(Scalar& a, Scalar& b, typename Kokkos::ArithTraits::mag_type& c, Scalar& s) { Kokkos::Profiling::pushRegion("KokkosBlas::rotg"); - Impl::Rotg::rotg(a, b, c, s); + Impl::Rotg::rotg(a, b, c, s); Kokkos::Profiling::popRegion(); } diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp index b3d762887f..6575953a78 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp @@ -48,7 +48,7 @@ namespace KokkosBlas { namespace Impl { // Specialization struct which defines whether a specialization exists -template +template struct rotg_tpl_spec_avail { enum : bool { value = false }; }; @@ -60,44 +60,53 @@ namespace Impl { // Generic Host side BLAS (could be MKL or whatever) #ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS -#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(SCALAR) \ - template <> \ - struct rotg_tpl_spec_avail { \ - enum : bool { value = true }; \ +#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(SCALAR, EXECSPACE) \ + template \ + struct rotg_tpl_spec_avail { \ + enum : bool { value = true }; \ }; -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(double) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(float) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex) +#ifdef KOKKOS_ENABLE_SERIAL +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(double, Kokkos::Serial) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(float, Kokkos::Serial) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::Serial) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::Serial) +#endif + +#ifdef KOKKOS_ENABLE_OPENMP +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(double, Kokkos::OpenMP) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(float, Kokkos::OpenMP) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::OpenMP) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::OpenMP) +#endif #endif // cuBLAS #ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS -#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(SCALAR) \ - template <> \ - struct rotg_tpl_spec_avail { \ - enum : bool { value = true }; \ +#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(SCALAR, EXECSPACE) \ + template \ + struct rotg_tpl_spec_avail { \ + enum : bool { value = true }; \ }; -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(double) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::Cuda) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::Cuda) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, Kokkos::Cuda) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, Kokkos::Cuda) #endif // rocBLAS #ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS -#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(SCALAR) \ - template <> \ - struct rotg_tpl_spec_avail { \ - enum : bool { value = true }; \ +#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(SCALAR, EXECSPACE) \ + template \ + struct rotg_tpl_spec_avail { \ + enum : bool { value = true }; \ }; -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(double) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(float) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::HIP) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::HIP) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, Kokkos::HIP) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, Kokkos::HIP) #endif } // namespace Impl diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp index f1002c42a3..be91b5997b 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp @@ -49,11 +49,11 @@ namespace KokkosBlas { namespace Impl { namespace { -template +template inline void rotg_print_specialization() { #ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION - printf("KokkosBlas1::rotg<> TPL Blas specialization for < %s >\n", - typeid(Scalar).name()); + printf("KokkosBlas1::rotg<> TPL Blas specialization for < %s, %s >\n", + typeid(Scalar).name(), typeid(ExecutionSpace).name); #endif } } // namespace @@ -67,9 +67,9 @@ inline void rotg_print_specialization() { namespace KokkosBlas { namespace Impl { -#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg { \ +#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rotg { \ static void rotg(double& a, double& b, double& c, double& s) { \ Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,double]"); \ HostBlas::rotg(&a, &b, &c, &s); \ @@ -77,9 +77,9 @@ namespace Impl { } \ }; -#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg { \ +#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rotg { \ static void rotg(float& a, float& b, float& c, float& s) { \ Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,float]"); \ HostBlas::rotg(&a, &b, &c, &s); \ @@ -87,9 +87,10 @@ namespace Impl { } \ }; -#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg, true, ETI_SPEC_AVAIL> { \ +#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rotg, EXECSPACE, MEMSPACE, true, \ + ETI_SPEC_AVAIL> { \ static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ double& c, Kokkos::complex& s) { \ Kokkos::Profiling::pushRegion( \ @@ -102,9 +103,10 @@ namespace Impl { } \ }; -#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg, true, ETI_SPEC_AVAIL> { \ +#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rotg, EXECSPACE, MEMSPACE, true, \ + ETI_SPEC_AVAIL> { \ static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ float& c, Kokkos::complex& s) { \ Kokkos::Profiling::pushRegion( \ @@ -117,17 +119,33 @@ namespace Impl { } \ }; -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(true) -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(false) +#ifdef KOKKOS_ENABLE_SERIAL +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, false) -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(true) -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(false) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, false) -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(true) -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(false) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, false) -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(true) -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(false) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, false) +#endif + +#ifdef KOKKOS_ENABLE_OPENMP +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, false) + +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, false) + +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, false) + +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, false) +#endif } // namespace Impl } // namespace KokkosBlas @@ -141,12 +159,12 @@ KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(false) namespace KokkosBlas { namespace Impl { -#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg { \ +#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rotg { \ static void rotg(double& a, double& b, double& c, double& s) { \ Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,double]"); \ - rotg_print_specialization(); \ + rotg_print_specialization(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ cublasDrotg(singleton.handle, &a, &b, &c, &s); \ @@ -154,12 +172,12 @@ namespace Impl { } \ }; -#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg { \ +#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rotg { \ static void rotg(float& a, float& b, float& c, float& s) { \ Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,float]"); \ - rotg_print_specialization(); \ + rotg_print_specialization(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ cublasSrotg(singleton.handle, &a, &b, &c, &s); \ @@ -167,14 +185,15 @@ namespace Impl { } \ }; -#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg, true, ETI_SPEC_AVAIL> { \ +#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rotg, EXECSPACE, MEMSPACE, true, \ + ETI_SPEC_AVAIL> { \ static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ double& c, Kokkos::complex& s) { \ Kokkos::Profiling::pushRegion( \ "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ - rotg_print_specialization >(); \ + rotg_print_specialization, EXECSPACE>(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ cublasZrotg(singleton.handle, reinterpret_cast(&a), \ @@ -184,14 +203,15 @@ namespace Impl { } \ }; -#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg, true, ETI_SPEC_AVAIL> { \ +#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rotg, EXECSPACE, MEMSPACE, true, \ + ETI_SPEC_AVAIL> { \ static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ float& c, Kokkos::complex& s) { \ Kokkos::Profiling::pushRegion( \ "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ - rotg_print_specialization >(); \ + rotg_print_specialization, EXECSPACE>(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ cublasCrotg(singleton.handle, reinterpret_cast(&a), \ @@ -201,17 +221,17 @@ namespace Impl { } \ }; -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(true) -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(false) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, false) -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(true) -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(false) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, false) -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(true) -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(false) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, false) -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(true) -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(false) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, false) } // namespace Impl } // namespace KokkosBlas @@ -225,12 +245,12 @@ KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(false) namespace KokkosBlas { namespace Impl { -#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg { \ +#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rotg { \ static void rotg(double& a, double& b, double& c, double& s) { \ Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,double]"); \ - rotg_print_specialization(); \ + rotg_print_specialization(); \ KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ @@ -239,12 +259,12 @@ namespace Impl { } \ }; -#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg { \ +#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rotg { \ static void rotg(float& a, float& b, float& c, float& s) { \ Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,float]"); \ - rotg_print_specialization(); \ + rotg_print_specialization(); \ KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ @@ -253,14 +273,15 @@ namespace Impl { } \ }; -#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg, true, ETI_SPEC_AVAIL> { \ +#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rotg, EXECSPACE, MEMSPACE, true, \ + ETI_SPEC_AVAIL> { \ static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ double& c, Kokkos::complex& s) { \ Kokkos::Profiling::pushRegion( \ "KokkosBlas::nrm1[TPL_ROCBLAS,complex]"); \ - rotg_print_specialization >(); \ + rotg_print_specialization, EXECSPACE>(); \ KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_zrotg( \ @@ -271,14 +292,15 @@ namespace Impl { } \ }; -#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg, true, ETI_SPEC_AVAIL> { \ +#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rotg, EXECSPACE, MEMSPACE, true, \ + ETI_SPEC_AVAIL> { \ static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ float& c, Kokkos::complex& s) { \ Kokkos::Profiling::pushRegion( \ "KokkosBlas::nrm1[TPL_ROCBLAS,complex]"); \ - rotg_print_specialization >(); \ + rotg_print_specialization, EXECSPACE>(); \ KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_crotg( \ @@ -289,17 +311,17 @@ namespace Impl { } \ }; -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(true) -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(false) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, false) -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(true) -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(false) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, false) -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(true) -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(false) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, false) -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(true) -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(false) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, false) } // namespace Impl } // namespace KokkosBlas diff --git a/graph/impl/KokkosGraph_Distance2Color_impl.hpp b/graph/impl/KokkosGraph_Distance2Color_impl.hpp index 6580027fba..2c2f83f957 100644 --- a/graph/impl/KokkosGraph_Distance2Color_impl.hpp +++ b/graph/impl/KokkosGraph_Distance2Color_impl.hpp @@ -372,7 +372,7 @@ class GraphColorDistance2 { std::cout << "\tTime serial conflict resolution : " << time << std::endl; std::cout << "\tTotal time for coloring : " << total_time - << std::endl; + << std::endl; gc_handle->add_to_overall_coloring_time_phase3(time); } From bda3fdf37ad84b1f52f614124461a5bf58f39884 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 25 Apr 2022 16:59:12 -0600 Subject: [PATCH 093/226] MDF: initial implementation, slow but correct First implementation of the Minimum Discarded Fill (MDF) algorithm. It allocates a lot of extra memory and computes transpose of matrices multiple times... so it is really bad in terms of performance but it does give a correct answer to example 2.5 in D'Azevedo's original paper titled "Ordering methods for preconditioned conjugate gradient methods applied to unstructured grid problems." in SIAM Journal on Matrix Analysis and Applications 1992. --- sparse/impl/KokkosSparse_mdf_impl.hpp | 542 +++++++++++++++++++++++++ sparse/src/KokkosSparse_mdf.hpp | 165 ++++++++ sparse/src/KokkosSparse_mdf_handle.hpp | 135 ++++++ sparse/unit_test/Test_Sparse.hpp | 1 + sparse/unit_test/Test_Sparse_mdf.hpp | 149 +++++++ 5 files changed, 992 insertions(+) create mode 100644 sparse/impl/KokkosSparse_mdf_impl.hpp create mode 100644 sparse/src/KokkosSparse_mdf.hpp create mode 100644 sparse/src/KokkosSparse_mdf_handle.hpp create mode 100644 sparse/unit_test/Test_Sparse_mdf.hpp diff --git a/sparse/impl/KokkosSparse_mdf_impl.hpp b/sparse/impl/KokkosSparse_mdf_impl.hpp new file mode 100644 index 0000000000..16e652d638 --- /dev/null +++ b/sparse/impl/KokkosSparse_mdf_impl.hpp @@ -0,0 +1,542 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSSPARSE_MDF_IMPL_HPP_ +#define KOKKOSSPARSE_MDF_IMPL_HPP_ + +namespace KokkosSparse { +namespace Impl { + +template +struct MDF_count_lower { + using col_ind_type = typename crs_matrix_type::StaticCrsGraphType:: + entries_type::non_const_type; + using size_type = typename crs_matrix_type::ordinal_type; + using value_type = typename crs_matrix_type::size_type; + + crs_matrix_type A; + col_ind_type permutation; + col_ind_type permutation_inv; + + MDF_count_lower(crs_matrix_type A_, col_ind_type permutation_, + col_ind_type permutation_inv_) + : A(A_), permutation(permutation_), permutation_inv(permutation_inv_){}; + + KOKKOS_INLINE_FUNCTION + void operator()(const size_type rowIdx, value_type& update) const { + permutation(rowIdx) = rowIdx; + permutation_inv(rowIdx) = rowIdx; + for (value_type entryIdx = A.graph.row_map(rowIdx); + entryIdx < A.graph.row_map(rowIdx + 1); ++entryIdx) { + if (A.graph.entries(entryIdx) <= rowIdx) { + update += 1; + } + } + } + +}; // MDF_count_lower + +template +struct MDF_discarded_fill_norm { + using static_crs_graph_type = typename crs_matrix_type::StaticCrsGraphType; + using col_ind_type = + typename static_crs_graph_type::entries_type::non_const_type; + using values_type = typename crs_matrix_type::values_type::non_const_type; + using size_type = typename crs_matrix_type::size_type; + using ordinal_type = typename crs_matrix_type::ordinal_type; + using scalar_type = typename crs_matrix_type::value_type; + using KAS = typename Kokkos::ArithTraits; + + const scalar_type zero = KAS::zero(); + + crs_matrix_type A, At; + ordinal_type factorization_step; + col_ind_type permutation; + + values_type discarded_fill; + col_ind_type deficiency; + int verbosity; + + MDF_discarded_fill_norm(crs_matrix_type A_, crs_matrix_type At_, + ordinal_type factorization_step_, + col_ind_type permutation_, + values_type discarded_fill_, col_ind_type deficiency_, + int verbosity_) + : A(A_), + At(At_), + factorization_step(factorization_step_), + permutation(permutation_), + discarded_fill(discarded_fill_), + deficiency(deficiency_), + verbosity(verbosity_){}; + + KOKKOS_INLINE_FUNCTION + void operator()(const ordinal_type i) const { + ordinal_type rowIdx = permutation(i); + scalar_type discard_norm = zero, diag_val = zero; + bool entryIsDiscarded = true; + ordinal_type numFillEntries = 0; + for (size_type alphaIdx = At.graph.row_map(rowIdx); + alphaIdx < At.graph.row_map(rowIdx + 1); ++alphaIdx) { + ordinal_type fillRowIdx = At.graph.entries(alphaIdx); + bool row_not_eliminated = true; + for (ordinal_type stepIdx = 0; stepIdx < factorization_step; ++stepIdx) { + if (fillRowIdx == permutation(stepIdx)) { + row_not_eliminated = false; + } + } + + if (fillRowIdx != rowIdx && row_not_eliminated) { + for (size_type betaIdx = A.graph.row_map(rowIdx); + betaIdx < A.graph.row_map(rowIdx + 1); ++betaIdx) { + ordinal_type fillColIdx = A.graph.entries(betaIdx); + bool col_not_eliminated = true; + for (ordinal_type stepIdx = 0; stepIdx < factorization_step; + ++stepIdx) { + if (fillColIdx == permutation(stepIdx)) { + col_not_eliminated = false; + } + } + + if (fillColIdx != rowIdx && col_not_eliminated) { + entryIsDiscarded = true; + for (size_type entryIdx = A.graph.row_map(fillRowIdx); + entryIdx < A.graph.row_map(fillRowIdx + 1); ++entryIdx) { + if (A.graph.entries(entryIdx) == fillColIdx) { + entryIsDiscarded = false; + } + } + if (entryIsDiscarded) { + numFillEntries += 1; + discard_norm += + KAS::abs(At.values(alphaIdx) * A.values(betaIdx)) * + KAS::abs(At.values(alphaIdx) * A.values(betaIdx)); + if (verbosity > 1) { + printf("Adding value A[%d,%d]=%f to discard norm of row %d\n", + int(At.graph.entries(alphaIdx)), + int(A.graph.entries(betaIdx)), + KAS::abs(At.values(alphaIdx) * A.values(betaIdx)) * + KAS::abs(At.values(alphaIdx) * A.values(betaIdx)), + int(rowIdx)); + } + } + } + } + } else if (fillRowIdx == rowIdx) { + diag_val = At.values(alphaIdx); + if (verbosity > 1) { + printf("Row %d diagonal value dected, values(%d)=%f\n", int(rowIdx), + int(alphaIdx), At.values(alphaIdx)); + } + } + } + + // TODO add a check on `diag_val == zero` + discard_norm = discard_norm / (diag_val * diag_val); + discarded_fill(rowIdx) = discard_norm; + deficiency(rowIdx) = numFillEntries; + if (verbosity > 0) { + const ordinal_type degree = ordinal_type(A.graph.row_map(rowIdx + 1) - + A.graph.row_map(rowIdx) - 1); + printf( + "Row %d has discarded fill of %f, deficiency of %d and degree %d\n", + rowIdx, KAS::sqrt(discard_norm), deficiency(rowIdx), degree); + } + } + +}; // MDF_discarded_fill_norm + +template +struct MDF_select_row { + using values_type = typename crs_matrix_type::values_type::non_const_type; + using col_ind_type = typename crs_matrix_type::StaticCrsGraphType:: + entries_type::non_const_type; + using row_map_type = + typename crs_matrix_type::StaticCrsGraphType::row_map_type; + using size_type = typename crs_matrix_type::size_type; + using ordinal_type = typename crs_matrix_type::ordinal_type; + using scalar_type = typename crs_matrix_type::value_type; + + // type used to perform the reduction + // do not confuse it with scalar_type! + using value_type = typename crs_matrix_type::ordinal_type; + + value_type factorization_step; + values_type discarded_fill; + col_ind_type deficiency; + row_map_type row_map; + col_ind_type permutation; + + MDF_select_row(value_type factorization_step_, values_type discarded_fill_, + col_ind_type deficiency_, row_map_type row_map_, + col_ind_type permutation_) + : factorization_step(factorization_step_), + discarded_fill(discarded_fill_), + deficiency(deficiency_), + row_map(row_map_), + permutation(permutation_){}; + + KOKKOS_INLINE_FUNCTION + void operator()(const ordinal_type src, ordinal_type& dst) const { + const ordinal_type src_perm = permutation(src); + const ordinal_type dst_perm = permutation(dst); + const ordinal_type degree_src = + row_map(src_perm + 1) - row_map(src_perm) - 1; + const ordinal_type degree_dst = + row_map(dst_perm + 1) - row_map(dst_perm) - 1; + + if (discarded_fill(src_perm) < discarded_fill(dst_perm)) { + dst = src; + return; + } + + if ((discarded_fill(src_perm) == discarded_fill(dst_perm)) && + (deficiency(src_perm) < deficiency(dst_perm))) { + dst = src; + return; + } + + if ((discarded_fill(src_perm) == discarded_fill(dst_perm)) && + (deficiency(src_perm) == deficiency(dst_perm)) && + (degree_src < degree_dst)) { + dst = src; + return; + } + + if ((discarded_fill(src_perm) == discarded_fill(dst_perm)) && + (deficiency(src_perm) == deficiency(dst_perm)) && + (degree_src == degree_dst) && (src_perm < dst_perm)) { + dst = src; + return; + } + + return; + } + + KOKKOS_INLINE_FUNCTION + void join(value_type& dst, const value_type& src) const { + const ordinal_type src_perm = permutation(src); + const ordinal_type dst_perm = permutation(dst); + const ordinal_type degree_src = + row_map(src_perm + 1) - row_map(src_perm) - 1; + const ordinal_type degree_dst = + row_map(dst_perm + 1) - row_map(dst_perm) - 1; + + if (discarded_fill(src_perm) < discarded_fill(dst_perm)) { + dst = src; + return; + } + + if ((discarded_fill(src_perm) == discarded_fill(dst_perm)) && + (deficiency(src_perm) < deficiency(dst_perm))) { + dst = src; + return; + } + + if ((discarded_fill(src_perm) == discarded_fill(dst_perm)) && + (deficiency(src_perm) == deficiency(dst_perm)) && + (degree_src < degree_dst)) { + dst = src; + return; + } + + if ((discarded_fill(src_perm) == discarded_fill(dst_perm)) && + (deficiency(src_perm) == deficiency(dst_perm)) && + (degree_src == degree_dst) && (src_perm < dst_perm)) { + dst = src; + return; + } + + return; + } + + KOKKOS_INLINE_FUNCTION + void init(value_type& dst) const { + dst = Kokkos::ArithTraits::zero(); + } + +}; // MDF_select_row + +template +struct MDF_factorize_row { + using row_map_type = typename crs_matrix_type::StaticCrsGraphType:: + row_map_type::non_const_type; + using col_ind_type = typename crs_matrix_type::StaticCrsGraphType:: + entries_type::non_const_type; + using values_type = typename crs_matrix_type::values_type::non_const_type; + using ordinal_type = typename crs_matrix_type::ordinal_type; + using size_type = typename crs_matrix_type::size_type; + using value_type = typename crs_matrix_type::value_type; + + crs_matrix_type A, At; + + row_map_type row_mapL; + col_ind_type entriesL; + values_type valuesL; + + row_map_type row_mapU; + col_ind_type entriesU; + values_type valuesU; + + col_ind_type permutation, permutation_inv; + ordinal_type selected_row_idx, factorization_step; + + int verbosity; + + MDF_factorize_row(crs_matrix_type A_, crs_matrix_type At_, + row_map_type row_mapL_, col_ind_type entriesL_, + values_type valuesL_, row_map_type row_mapU_, + col_ind_type entriesU_, values_type valuesU_, + col_ind_type permutation_, col_ind_type permutation_inv_, + ordinal_type selected_row_idx_, + ordinal_type factorization_step_, int verbosity_) + : A(A_), + At(At_), + row_mapL(row_mapL_), + entriesL(entriesL_), + valuesL(valuesL_), + row_mapU(row_mapU_), + entriesU(entriesU_), + valuesU(valuesU_), + permutation(permutation_), + permutation_inv(permutation_inv_), + selected_row_idx(selected_row_idx_), + factorization_step(factorization_step_), + verbosity(verbosity_){}; + + KOKKOS_INLINE_FUNCTION + void operator()(const ordinal_type /* idx */) const { + const ordinal_type selected_row = permutation(selected_row_idx); + + // Swap entries in permutation vectors + permutation(selected_row_idx) = permutation(factorization_step); + permutation(factorization_step) = selected_row; + permutation_inv(permutation(factorization_step)) = factorization_step; + permutation_inv(permutation(selected_row_idx)) = selected_row_idx; + + if (verbosity > 0) { + printf("Permutation vector: { "); + for (ordinal_type rowIdx = 0; rowIdx < A.numRows(); ++rowIdx) { + printf("%d ", permutation(rowIdx)); + } + printf("}\n"); + } + + // Insert the upper part of the selected row in U + // including the diagonal term. + value_type diag = Kokkos::ArithTraits::zero(); + size_type U_entryIdx = row_mapU(factorization_step); + for (size_type entryIdx = A.graph.row_map(selected_row); + entryIdx < A.graph.row_map(selected_row + 1); ++entryIdx) { + if (permutation_inv(A.graph.entries(entryIdx)) >= factorization_step) { + entriesU(U_entryIdx) = A.graph.entries(entryIdx); + valuesU(U_entryIdx) = A.values(entryIdx); + ++U_entryIdx; + if (A.graph.entries(entryIdx) == selected_row) { + diag = A.values(entryIdx); + } + } + } + row_mapU(factorization_step + 1) = U_entryIdx; + + if (verbosity > 0) { + printf("Diagonal values of row %d is %f\n", selected_row, diag); + } + + if (verbosity > 2) { + printf("U, row_map={ "); + for (ordinal_type rowIdx = 0; rowIdx < factorization_step + 1; ++rowIdx) { + printf("%d ", int(row_mapU(rowIdx))); + } + printf("}, entries={ "); + for (size_type entryIdx = row_mapU(0); + entryIdx < row_mapU(factorization_step + 1); ++entryIdx) { + printf("%d ", int(entriesU(entryIdx))); + } + printf("}, values={ "); + for (size_type entryIdx = row_mapU(0); + entryIdx < row_mapU(factorization_step + 1); ++entryIdx) { + printf("%f ", valuesU(entryIdx)); + } + printf("}\n"); + } + + // Insert the lower part of the selected column of A + // divided by its the diagonal value to obtain a unit + // diagonal value in L. + size_type L_entryIdx = row_mapL(factorization_step); + entriesL(L_entryIdx) = selected_row; + valuesL(L_entryIdx) = Kokkos::ArithTraits::one(); + ++L_entryIdx; + for (size_type entryIdx = At.graph.row_map(selected_row); + entryIdx < At.graph.row_map(selected_row + 1); ++entryIdx) { + if (permutation_inv(At.graph.entries(entryIdx)) > factorization_step) { + entriesL(L_entryIdx) = At.graph.entries(entryIdx); + valuesL(L_entryIdx) = At.values(entryIdx) / diag; + ++L_entryIdx; + } + } + row_mapL(factorization_step + 1) = L_entryIdx; + + if (verbosity > 2) { + printf("L(%d), [row_map(%d), row_map(%d)[ = [%d, %d[, entries={ ", + int(factorization_step), int(factorization_step), + int(factorization_step + 1), int(row_mapL(factorization_step)), + int(row_mapL(factorization_step + 1))); + for (size_type entryIdx = row_mapL(factorization_step); + entryIdx < row_mapL(factorization_step + 1); ++entryIdx) { + printf("%d ", int(entriesL(entryIdx))); + } + printf("}, values={ "); + for (size_type entryIdx = row_mapL(factorization_step); + entryIdx < row_mapL(factorization_step + 1); ++entryIdx) { + printf("%f ", valuesL(entryIdx)); + } + printf("}\n"); + } + + // If this was the last row no need to update A and At! + if (factorization_step == A.numRows() - 1) { + return; + } + + // Finally we want to update A and At with the values + // that where not discarded during factorization. + // Note: this is almost the same operation as computing + // the norm of the discarded fill... + + // First step: find the diagonal entry in selected_row + value_type diag_val = Kokkos::ArithTraits::zero(); + for (size_type entryIdx = A.graph.row_map(selected_row); + entryIdx < A.graph.row_map(selected_row + 1); ++entryIdx) { + ordinal_type colIdx = A.graph.entries(entryIdx); + if (selected_row == colIdx) { + diag_val = A.values(entryIdx); + } + } + + // Extract alpha and beta vectors + // Then insert alpha*beta/diag_val if the corresponding + // entry in A is non-zero. + for (size_type alphaIdx = At.graph.row_map(selected_row); + alphaIdx < At.graph.row_map(selected_row + 1); ++alphaIdx) { + ordinal_type fillRowIdx = At.graph.entries(alphaIdx); + bool row_not_eliminated = true; + for (ordinal_type stepIdx = 0; stepIdx < factorization_step; ++stepIdx) { + if (fillRowIdx == permutation(stepIdx)) { + row_not_eliminated = false; + } + } + + if ((fillRowIdx != selected_row) && row_not_eliminated) { + for (size_type betaIdx = A.graph.row_map(selected_row); + betaIdx < A.graph.row_map(selected_row + 1); ++betaIdx) { + ordinal_type fillColIdx = A.graph.entries(betaIdx); + bool col_not_eliminated = true; + for (ordinal_type stepIdx = 0; stepIdx < factorization_step; + ++stepIdx) { + if (fillColIdx == permutation(stepIdx)) { + col_not_eliminated = false; + } + } + + if ((fillColIdx != selected_row) && col_not_eliminated) { + for (size_type entryIdx = A.graph.row_map(fillRowIdx); + entryIdx < A.graph.row_map(fillRowIdx + 1); ++entryIdx) { + if (A.graph.entries(entryIdx) == fillColIdx) { + A.values(entryIdx) -= + At.values(alphaIdx) * A.values(betaIdx) / diag_val; + + if (verbosity > 1) { + printf("A[%d, %d] -= %f\n", int(fillRowIdx), int(fillColIdx), + At.values(alphaIdx) * A.values(betaIdx) / diag_val); + } + } + } + + for (size_type entryIdx = At.graph.row_map(fillColIdx); + entryIdx < At.graph.row_map(fillColIdx + 1); ++entryIdx) { + if (At.graph.entries(entryIdx) == fillRowIdx) { + At.values(entryIdx) -= + At.values(alphaIdx) * A.values(betaIdx) / diag_val; + } + } + } + } + } + } + + if (verbosity > 0) { + printf("New values in A: { "); + for (size_type entryIdx = 0; entryIdx < A.nnz(); ++entryIdx) { + printf("%f ", A.values(entryIdx)); + } + printf("}\n"); + printf("New values in At: { "); + for (size_type entryIdx = 0; entryIdx < At.nnz(); ++entryIdx) { + printf("%f ", At.values(entryIdx)); + } + printf("}\n"); + } + } // operator() + +}; // MDF_factorize_row + +template +struct MDF_reindex_matrix { + col_ind_type permutation_inv; + col_ind_type entries; + + MDF_reindex_matrix(col_ind_type permutation_inv_, col_ind_type entries_) + : permutation_inv(permutation_inv_), entries(entries_) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const int entryIdx) const { + entries(entryIdx) = permutation_inv(entries(entryIdx)); + } +}; + +} // namespace Impl +} // namespace KokkosSparse +#endif // KOKKOSSPARSE_MDF_IMPL_HPP_ diff --git a/sparse/src/KokkosSparse_mdf.hpp b/sparse/src/KokkosSparse_mdf.hpp new file mode 100644 index 0000000000..eba36d4372 --- /dev/null +++ b/sparse/src/KokkosSparse_mdf.hpp @@ -0,0 +1,165 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +/// \file KokkosSparse_spiluk.hpp +/// \brief Parallel Minimum Discarded Fill method +/// \author Luc Berger-Vergiat +/// \date March 2022 +/// +/// This file provides KokkosSparse::mdf_symbolic, KokkosSparse::mdf_symbolic +/// and KokkosSparse::mdf_ordering. These functions perform a +/// local (no MPI) sparse MDF(0) on matrices stored in +/// compressed row sparse ("Crs") format. + +#ifndef KOKKOSSPARSE_MDF_HPP_ +#define KOKKOSSPARSE_MDF_HPP_ + +#include "KokkosSparse_mdf_handle.hpp" +#include "KokkosSparse_mdf_impl.hpp" + +namespace KokkosSparse { +namespace Experimental { + +template +void mdf_symbolic_phase(crs_matrix_type& A, MDF_handle& handle) { + using size_type = typename crs_matrix_type::size_type; + using ordinal_type = typename crs_matrix_type::ordinal_type; + + using execution_space = typename crs_matrix_type::execution_space; + using range_policy_type = Kokkos::RangePolicy; + + // Symbolic phase: + // compute transpose of A for easy access to columns of A + // allocate temporaries + // allocate L and U + size_type nnzL = 0, nnzU = 0; + range_policy_type setupPolicy(0, A.numRows()); + KokkosSparse::Impl::MDF_count_lower compute_nnzL( + A, handle.permutation, handle.permutation_inv); + Kokkos::parallel_reduce(range_policy_type(0, A.numRows()), compute_nnzL, + nnzL); + nnzU = A.nnz() - nnzL + A.numRows(); + handle.allocate_data(nnzL, nnzU); + + if (handle.verbosity > 0) { + printf("MDF symbolic: nnzL = %d, nnzU = %d\n", static_cast(nnzL), + static_cast(nnzU)); + } + + return; +} // mdf_symbolic_phase + +template +void mdf_numeric_phase(crs_matrix_type& A, MDF_handle& handle) { + using col_ind_type = typename crs_matrix_type::StaticCrsGraphType:: + entries_type::non_const_type; + using values_type = typename crs_matrix_type::values_type::non_const_type; + using ordinal_type = typename crs_matrix_type::ordinal_type; + using value_type = typename crs_matrix_type::value_type; + + using execution_space = typename crs_matrix_type::execution_space; + using range_policy_type = Kokkos::RangePolicy; + + // Numerical phase: + // loop over rows + // compute discarded fill of each row + // selected pivot based on MDF + // factorize pivot row of A + crs_matrix_type Atmp = crs_matrix_type("A fill", A); + crs_matrix_type At = KokkosSparse::Impl::transpose_matrix(A); + KokkosSparse::sort_crs_matrix(At); + values_type discarded_fill("discarded fill", A.numRows()); + col_ind_type deficiency("deficiency", A.numRows()); + + const int verbosity_level = handle.verbosity; + for (ordinal_type factorization_step = 0; factorization_step < A.numRows(); + ++factorization_step) { + if (verbosity_level > 0) { + printf("\n\nFactorization step %d\n\n", + static_cast(factorization_step)); + } + + range_policy_type stepPolicy(factorization_step, Atmp.numRows()); + Kokkos::deep_copy(discarded_fill, Kokkos::ArithTraits::max()); + Kokkos::deep_copy(deficiency, Kokkos::ArithTraits::max()); + KokkosSparse::Impl::MDF_discarded_fill_norm MDF_df_norm( + Atmp, At, factorization_step, handle.permutation, discarded_fill, + deficiency, verbosity_level); + Kokkos::parallel_for(stepPolicy, MDF_df_norm); + + ordinal_type selected_row_idx = 0; + KokkosSparse::Impl::MDF_select_row MDF_row_selector( + factorization_step, discarded_fill, deficiency, Atmp.graph.row_map, + handle.permutation); + Kokkos::parallel_reduce(stepPolicy, MDF_row_selector, selected_row_idx); + + KokkosSparse::Impl::MDF_factorize_row factorize_row( + Atmp, At, handle.row_mapL, handle.entriesL, handle.valuesL, + handle.row_mapU, handle.entriesU, handle.valuesU, handle.permutation, + handle.permutation_inv, selected_row_idx, factorization_step, + verbosity_level); + Kokkos::parallel_for(range_policy_type(0, 1), factorize_row); + + if (verbosity_level > 0) { + printf("\n"); + } + } + + KokkosSparse::Impl::MDF_reindex_matrix reindex_U( + handle.permutation_inv, handle.entriesU); + Kokkos::parallel_for(range_policy_type(0, handle.entriesU.extent(0)), + reindex_U); + + KokkosSparse::Impl::MDF_reindex_matrix reindex_L( + handle.permutation_inv, handle.entriesL); + Kokkos::parallel_for(range_policy_type(0, handle.entriesL.extent(0)), + reindex_L); + + return; +} // mdf_numeric_phase + +} // namespace Experimental +} // namespace KokkosSparse + +#endif // KOKKOSSPARSE_MDF_HPP_ diff --git a/sparse/src/KokkosSparse_mdf_handle.hpp b/sparse/src/KokkosSparse_mdf_handle.hpp new file mode 100644 index 0000000000..236c321e55 --- /dev/null +++ b/sparse/src/KokkosSparse_mdf_handle.hpp @@ -0,0 +1,135 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +/// \file KokkosSparse_spiluk.hpp +/// \brief Parallel Minimum Discarded Fill method +/// \author Luc Berger-Vergiat +/// \date March 2022 +/// +/// This file provides KokkosSparse::mdf_symbolic, KokkosSparse::mdf_symbolic +/// and KokkosSparse::mdf_ordering. These functions perform a +/// local (no MPI) sparse MDF(0) on matrices stored in +/// compressed row sparse ("Crs") format. + +#ifndef KOKKOSSPARSE_MDF_HANDLE_HPP_ +#define KOKKOSSPARSE_MDF_HANDLE_HPP_ + +#include "KokkosSparse_SortCrs.hpp" +#include "KokkosSparse_Utils.hpp" + +namespace KokkosSparse { +namespace Experimental { + +template +struct MDF_handle { + using crs_matrix_type = matrix_type; + using execution_space = typename matrix_type::execution_space; + using row_map_type = typename crs_matrix_type::StaticCrsGraphType:: + row_map_type::non_const_type; + using col_ind_type = typename crs_matrix_type::StaticCrsGraphType:: + entries_type::non_const_type; + using values_type = typename crs_matrix_type::values_type::non_const_type; + using size_type = typename crs_matrix_type::size_type; + using ordinal_type = typename crs_matrix_type::ordinal_type; + + ordinal_type numRows; + + // Views needed to construct L and U + // at the end of the numerical phase. + row_map_type row_mapL, row_mapU; + col_ind_type entriesL, entriesU; + values_type valuesL, valuesU; + + // Row permutation that defines + // the MDF ordering or order of + // elimination during the factorization. + col_ind_type permutation, permutation_inv; + + int verbosity; + + MDF_handle(const crs_matrix_type A) + : numRows(A.numRows()), + permutation(col_ind_type("row permutation", A.numRows())), + permutation_inv(col_ind_type("inverse row permutation", A.numRows())), + verbosity(0){}; + + void set_verbosity(const int verbosity_level) { verbosity = verbosity_level; } + + void allocate_data(const size_type nnzL, const size_type nnzU) { + // Allocate L + row_mapL = row_map_type("row map L", numRows + 1); + entriesL = col_ind_type("entries L", nnzL); + valuesL = values_type("values L", nnzL); + + // Allocate U + row_mapU = row_map_type("row map U", numRows + 1); + entriesU = col_ind_type("entries U", nnzU); + valuesU = values_type("values U", nnzU); + } + + col_ind_type get_permutation() { return permutation; } + + void sort_factors() { + KokkosSparse::sort_crs_matrix(row_mapL, entriesL, valuesL); + KokkosSparse::sort_crs_matrix(row_mapU, entriesU, valuesU); + } + + crs_matrix_type getL() { + return KokkosSparse::Impl::transpose_matrix( + crs_matrix_type("L", numRows, numRows, entriesL.extent(0), valuesL, + row_mapL, entriesL)); + } + + crs_matrix_type getU() { + return crs_matrix_type("U", numRows, numRows, entriesU.extent(0), valuesU, + row_mapU, entriesU); + } +}; + +} // namespace Experimental +} // namespace KokkosSparse + +#endif // KOKKOSSPARSE_MDF_HANDLE_HPP_ diff --git a/sparse/unit_test/Test_Sparse.hpp b/sparse/unit_test/Test_Sparse.hpp index 6df9ab613d..33269b6b0e 100644 --- a/sparse/unit_test/Test_Sparse.hpp +++ b/sparse/unit_test/Test_Sparse.hpp @@ -5,6 +5,7 @@ #include "Test_Sparse_Controls.hpp" #include "Test_Sparse_CrsMatrix.hpp" #include "Test_Sparse_BsrMatrix.hpp" +#include "Test_Sparse_mdf.hpp" #include "Test_Sparse_findRelOffset.hpp" #include "Test_Sparse_gauss_seidel.hpp" #include "Test_Sparse_replaceSumInto.hpp" diff --git a/sparse/unit_test/Test_Sparse_mdf.hpp b/sparse/unit_test/Test_Sparse_mdf.hpp new file mode 100644 index 0000000000..6f9f550f27 --- /dev/null +++ b/sparse/unit_test/Test_Sparse_mdf.hpp @@ -0,0 +1,149 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +#include "KokkosSparse_mdf.hpp" + +namespace Test { + +template +void run_test_mdf() { + using crs_matrix_type = KokkosSparse::CrsMatrix; + using crs_graph_type = typename crs_matrix_type::StaticCrsGraphType; + using row_map_type = typename crs_graph_type::row_map_type::non_const_type; + using col_ind_type = typename crs_graph_type::entries_type::non_const_type; + using values_type = typename crs_matrix_type::values_type::non_const_type; + using value_type = typename crs_matrix_type::value_type; + + constexpr ordinal_type numRows = 16; + constexpr ordinal_type numCols = 16; + constexpr size_type numNonZeros = 64; + row_map_type row_map("row map", numRows + 1); + col_ind_type col_ind("column indices", numNonZeros); + values_type values("values", numNonZeros); + + { // create matrix + const size_type row_mapRaw[] = {0, 3, 7, 11, 14, 18, 23, 28, 32, + 36, 41, 46, 50, 53, 57, 61, 64}; + const ordinal_type col_indRaw[] = { + 0, 1, 4, 0, 1, 2, 5, 1, 2, 3, 6, 2, 3, 7, 0, 4, + 5, 8, 1, 4, 5, 6, 9, 2, 5, 6, 7, 10, 3, 6, 7, 11, + 4, 8, 9, 12, 5, 8, 9, 10, 13, 6, 9, 10, 11, 14, 7, 10, + 11, 15, 8, 12, 13, 9, 12, 13, 14, 10, 13, 14, 15, 11, 14, 15}; + const value_type values_Raw[] = { + 4, -1, -1, -1, 4, -1, -1, -1, 4, -1, -1, -1, 4, -1, -1, 4, + -1, -1, -1, -1, 4, -1, -1, -1, -1, 4, -1, -1, -1, -1, 4, -1, + -1, 4, -1, -1, -1, -1, 4, -1, -1, -1, -1, 4, -1, -1, -1, -1, + 4, -1, -1, 4, -1, -1, -1, 4, -1, -1, -1, 4, -1, -1, -1, 4}; + + typename row_map_type::HostMirror::const_type row_map_host(row_mapRaw, + numRows + 1); + typename col_ind_type::HostMirror::const_type col_ind_host(col_indRaw, + numNonZeros); + typename values_type::HostMirror::const_type values_host(values_Raw, + numNonZeros); + + Kokkos::deep_copy(row_map, row_map_host); + Kokkos::deep_copy(col_ind, col_ind_host); + Kokkos::deep_copy(values, values_host); + } + + crs_matrix_type A = crs_matrix_type("A", numRows, numCols, numNonZeros, + values, row_map, col_ind); + + KokkosSparse::Experimental::MDF_handle handle(A); + handle.set_verbosity(0); + mdf_symbolic_phase(A, handle); + mdf_numeric_phase(A, handle); + + col_ind_type permutation = handle.get_permutation(); + + bool success = true; + typename col_ind_type::HostMirror permutation_h = + Kokkos::create_mirror(permutation); + Kokkos::deep_copy(permutation_h, permutation); + const ordinal_type permutation_ref[] = {0, 3, 12, 15, 1, 2, 4, 8, + 7, 11, 13, 14, 5, 6, 9, 10}; + printf("MDF ordering: { "); + for (ordinal_type idx = 0; idx < A.numRows(); ++idx) { + ; + printf("%d ", static_cast(permutation_h(idx))); + if (permutation_h(idx) != permutation_ref[idx]) { + success = false; + } + } + printf("}\n"); + + EXPECT_TRUE(success) + << "The permutation computed is different from the reference solution!"; + + handle.sort_factors(); + crs_matrix_type U = handle.getU(); + crs_matrix_type L = handle.getL(); +} + +} // namespace Test + +template +void test_mdf() { + Test::run_test_mdf(); +} + +#define KOKKOSKERNELS_EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ + TEST_F(TestCategory, \ + sparse##_##mdf##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ + test_mdf(); \ + } + +#define NO_TEST_COMPLEX + +#include + +#undef KOKKOSKERNELS_EXECUTE_TEST +#undef NO_TEST_COMPLEX From 45a3ec3c781a91e42bdd85122a7991a55cd5ee07 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Mon, 19 Sep 2022 16:28:58 -0600 Subject: [PATCH 094/226] Test_Graph_coarsen: replace HostMirror usage with auto Potential resolution to compilation errors with size_t types in test kokkos/kokkos-kernels#1536 --- graph/unit_test/Test_Graph_coarsen.hpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/graph/unit_test/Test_Graph_coarsen.hpp b/graph/unit_test/Test_Graph_coarsen.hpp index af8ec55a23..77da10e242 100644 --- a/graph/unit_test/Test_Graph_coarsen.hpp +++ b/graph/unit_test/Test_Graph_coarsen.hpp @@ -81,17 +81,17 @@ bool verify_coarsening(typename coarsener_t::coarse_level_triple fine_l, Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.graph.row_map); auto c_rowmap = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), coarse_A.graph.row_map); - typename c_entries_t::HostMirror f_entries = + auto f_entries = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.graph.entries); - typename c_entries_t::HostMirror vcmap = Kokkos::create_mirror_view_and_copy( + auto vcmap = Kokkos::create_mirror_view_and_copy( Kokkos::HostSpace(), coarse_l.interp_mtx.graph.entries); - typename svt::HostMirror few = + auto few = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.values); - typename svt::HostMirror cew = + auto cew = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), coarse_A.values); - typename entries_t::HostMirror fvw = + auto fvw = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), fine_l.vtx_wgts); - typename entries_t::HostMirror cvw = Kokkos::create_mirror_view_and_copy( + auto cvw = Kokkos::create_mirror_view_and_copy( Kokkos::HostSpace(), coarse_l.vtx_wgts); ordinal_t f_size = 0; ordinal_t c_size = 0; @@ -143,7 +143,7 @@ bool verify_is_graph(crsMat A) { using edge_t = typename rowmap_t::value_type; auto rowmap = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.graph.row_map); - typename c_entries_t::HostMirror entries = + auto entries = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.graph.entries); for (ordinal_t i = 0; i < A.numRows(); i++) { @@ -187,7 +187,7 @@ bool verify_aggregator(crsMat A, crsMat agg) { if (A.numRows() < agg.numCols()) { return false; } - typename c_entries_t::HostMirror entries = + auto entries = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), agg.graph.entries); From f24fcd1ce68269549eee1340f73dc490f117fe39 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Mon, 19 Sep 2022 16:35:31 -0600 Subject: [PATCH 095/226] apply clang-format-8 --- graph/unit_test/Test_Graph_coarsen.hpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/graph/unit_test/Test_Graph_coarsen.hpp b/graph/unit_test/Test_Graph_coarsen.hpp index 77da10e242..ae23c1a741 100644 --- a/graph/unit_test/Test_Graph_coarsen.hpp +++ b/graph/unit_test/Test_Graph_coarsen.hpp @@ -85,14 +85,13 @@ bool verify_coarsening(typename coarsener_t::coarse_level_triple fine_l, Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.graph.entries); auto vcmap = Kokkos::create_mirror_view_and_copy( Kokkos::HostSpace(), coarse_l.interp_mtx.graph.entries); - auto few = - Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.values); + auto few = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.values); auto cew = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), coarse_A.values); auto fvw = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), fine_l.vtx_wgts); - auto cvw = Kokkos::create_mirror_view_and_copy( - Kokkos::HostSpace(), coarse_l.vtx_wgts); + auto cvw = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), + coarse_l.vtx_wgts); ordinal_t f_size = 0; ordinal_t c_size = 0; for (ordinal_t i = 0; i < static_cast(fvw.extent(0)); i++) { @@ -187,9 +186,8 @@ bool verify_aggregator(crsMat A, crsMat agg) { if (A.numRows() < agg.numCols()) { return false; } - auto entries = - Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), - agg.graph.entries); + auto entries = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), + agg.graph.entries); std::vector aggregateSizes(agg.numCols(), 0); for (ordinal_t i = 0; i < static_cast(agg.nnz()); i++) { From 8d60f8cb118028a7771a4fb81e7b15d6d30dcf1e Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Thu, 22 Sep 2022 14:52:56 -0600 Subject: [PATCH 096/226] blas: - Include Host_Blas.cpp for ARMPL - Selectivly skip tests --- blas/CMakeLists.txt | 4 ++-- blas/tpls/KokkosBlas_Host_tpl.cpp | 1 + sparse/unit_test/Test_Sparse_bspgemm.hpp | 9 +++++++++ sparse/unit_test/Test_Sparse_spgemm.hpp | 18 ++++++++++++++++++ sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp | 9 +++++++++ sparse/unit_test/Test_Sparse_spmv.hpp | 16 +++++++++------- 6 files changed, 48 insertions(+), 9 deletions(-) diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt index e94a09d008..5f632ce497 100644 --- a/blas/CMakeLists.txt +++ b/blas/CMakeLists.txt @@ -23,13 +23,13 @@ KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_C ####################### #Include BLAS, Blas host wrapper -IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL) +IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL OR KOKKOSKERNELS_ENABLE_TPL_ARMPL) #Do NOT add this to include path APPEND_GLOB(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/tpls/KokkosBlas_Host_tpl.cpp) ENDIF() # Include host blas TPL source file -IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL) +IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL OR KOKKOSKERNELS_ENABLE_TPL_ARMPL) LIST(APPEND SOURCES blas/tpls/KokkosBlas_Host_tpl.cpp ) diff --git a/blas/tpls/KokkosBlas_Host_tpl.cpp b/blas/tpls/KokkosBlas_Host_tpl.cpp index d2e8435fdf..2467bb7215 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.cpp +++ b/blas/tpls/KokkosBlas_Host_tpl.cpp @@ -798,6 +798,7 @@ void HostBlas >::trsv(const char uplo, const char transa, F77_FUNC_ZTRSV(&uplo, &transa, &diag, &m, (const std::complex*)a, &lda, (std::complex*)b, &ldb); } + template <> void HostBlas >::gemm( const char transa, const char transb, int m, int n, int k, diff --git a/sparse/unit_test/Test_Sparse_bspgemm.hpp b/sparse/unit_test/Test_Sparse_bspgemm.hpp index 7374ac6a78..1b9ec84651 100644 --- a/sparse/unit_test/Test_Sparse_bspgemm.hpp +++ b/sparse/unit_test/Test_Sparse_bspgemm.hpp @@ -178,6 +178,15 @@ void test_bspgemm(lno_t blkDim, lno_t m, lno_t k, lno_t n, size_type nnz, lno_t bandwidth, lno_t row_size_variance, const bool use_dynamic_scheduling = true, const size_t shared_memory_size = 0) { +#if defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) + { + std::cerr + << "TEST SKIPPED: See " + "https://github.com/kokkos/kokkos-kernels/issues/1542 for details." + << std::endl; + return; + } +#endif // KOKKOSKERNELS_ENABLE_TPL_ARMPL using namespace Test; // device::execution_space::initialize(); // device::execution_space::print_configuration(std::cout); diff --git a/sparse/unit_test/Test_Sparse_spgemm.hpp b/sparse/unit_test/Test_Sparse_spgemm.hpp index f52306ef74..2f425b07d2 100644 --- a/sparse/unit_test/Test_Sparse_spgemm.hpp +++ b/sparse/unit_test/Test_Sparse_spgemm.hpp @@ -252,6 +252,15 @@ template void test_spgemm(lno_t m, lno_t k, lno_t n, size_type nnz, lno_t bandwidth, lno_t row_size_variance, bool oldInterface = false) { +#if defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) + { + std::cerr + << "TEST SKIPPED: See " + "https://github.com/kokkos/kokkos-kernels/issues/1542 for details." + << std::endl; + return; + } +#endif // KOKKOSKERNELS_ENABLE_TPL_ARMPL using namespace Test; // device::execution_space::initialize(); // device::execution_space::print_configuration(std::cout); @@ -369,6 +378,15 @@ void test_spgemm(lno_t m, lno_t k, lno_t n, size_type nnz, lno_t bandwidth, template void test_issue402() { +#if defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) + { + std::cerr + << "TEST SKIPPED: See " + "https://github.com/kokkos/kokkos-kernels/issues/1542 for details." + << std::endl; + return; + } +#endif // KOKKOSKERNELS_ENABLE_TPL_ARMPL using namespace Test; typedef CrsMatrix crsMat_t; diff --git a/sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp b/sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp index 4ac707c249..12cfd983f1 100644 --- a/sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp +++ b/sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp @@ -220,6 +220,15 @@ template void test_spgemm_jacobi(lno_t numRows, size_type nnz, lno_t bandwidth, lno_t row_size_variance) { +#if defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) + { + std::cerr + << "TEST SKIPPED: See " + "https://github.com/kokkos/kokkos-kernels/issues/1542 for details." + << std::endl; + return; + } +#endif // KOKKOSKERNELS_ENABLE_TPL_ARMPL using namespace Test; typedef CrsMatrix crsMat_t; diff --git a/sparse/unit_test/Test_Sparse_spmv.hpp b/sparse/unit_test/Test_Sparse_spmv.hpp index 113a8d9749..2e440288f4 100644 --- a/sparse/unit_test/Test_Sparse_spmv.hpp +++ b/sparse/unit_test/Test_Sparse_spmv.hpp @@ -486,13 +486,6 @@ template void test_spmv_mv(lno_t numRows, size_type nnz, lno_t bandwidth, lno_t row_size_variance, bool heavy, int numMV) { - // The kokkos-kernels gtest does not have GTEST_SKIP defined. Suggest updating - // or using kokkos/tpls/gtest instead. - // if (std::is_same>::value) - // GTEST_SKIP( - // "Skipped until https://github.com/kokkos/kokkos-kernels/issues/1331 is - // " "resolved"); using mag_t = typename Kokkos::ArithTraits::mag_type; constexpr mag_t max_x = static_cast(1); @@ -572,6 +565,15 @@ template void test_spmv_mv_heavy(lno_t numRows, size_type nnz, lno_t bandwidth, lno_t row_size_variance, int numMV) { +#if defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) + if (std::is_same>::value) { + std::cerr + << "TEST SKIPPED: See " + "https://github.com/kokkos/kokkos-kernels/issues/1331 for details." + << std::endl; + return; + } +#endif // KOKKOSKERNELS_ENABLE_TPL_ARMPL using crsMat_t = typename KokkosSparse::CrsMatrix; using ViewTypeX = Kokkos::View; From 71aec34eac3160acdd066b018f02091d6c653472 Mon Sep 17 00:00:00 2001 From: Damien L-G Date: Fri, 23 Sep 2022 11:19:07 -0400 Subject: [PATCH 097/226] Fix HIP nightly build to satisfy new Kokkos minimum requirements --- .jenkins/nightly.groovy | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.jenkins/nightly.groovy b/.jenkins/nightly.groovy index f30d580edc..6092e75fba 100644 --- a/.jenkins/nightly.groovy +++ b/.jenkins/nightly.groovy @@ -46,12 +46,12 @@ pipeline { } } - stage('HIP-ROCm-4.5-C++14') { + stage('HIP-ROCm-5.2') { agent { dockerfile { filename 'Dockerfile.hip' dir 'scripts/docker' - additionalBuildArgs '--build-arg BASE=rocm/dev-ubuntu-20.04:4.5' + additionalBuildArgs '--build-arg BASE=rocm/dev-ubuntu-20.04:5.2' label 'rocm-docker && vega' args '-v /tmp/ccache.kokkos:/tmp/ccache --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --env HIP_VISIBLE_DEVICES=$HIP_VISIBLE_DEVICES' } @@ -62,6 +62,7 @@ pipeline { mkdir build && cd build && \ cmake \ -DCMAKE_CXX_COMPILER=hipcc \ + -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_CXX_EXTENSIONS=OFF \ -DKokkos_ENABLE_HIP=ON \ .. && \ @@ -71,6 +72,7 @@ pipeline { cmake \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_CXX_COMPILER=hipcc \ + -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_CXX_EXTENSIONS=OFF \ -DKokkosKernels_ENABLE_TESTS=ON \ -DKokkosKernels_ENABLE_EXAMPLES=ON \ From 3eb5c80c58079960a99f18082c009eacd8a600e6 Mon Sep 17 00:00:00 2001 From: Damien L-G Date: Fri, 23 Sep 2022 11:19:52 -0400 Subject: [PATCH 098/226] Update default argument ROCm version 4.5 -> 5.2 in Docker image --- scripts/docker/Dockerfile.hip | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/docker/Dockerfile.hip b/scripts/docker/Dockerfile.hip index f3c9e7f23e..61305b2159 100644 --- a/scripts/docker/Dockerfile.hip +++ b/scripts/docker/Dockerfile.hip @@ -1,4 +1,4 @@ -ARG BASE=rocm/dev-ubuntu-20.04:4.2 +ARG BASE=rocm/dev-ubuntu-20.04:5.2 FROM $BASE RUN apt-get update && apt-get install -y \ From 0b16cb0301262a0305942a00d9000d8877aab3cb Mon Sep 17 00:00:00 2001 From: kliegeois Date: Fri, 23 Sep 2022 15:21:48 -0600 Subject: [PATCH 099/226] Update the batched sparse kernels to add SIMD data types and options for the temporary variable allocations. --- .../impl/KokkosBatched_CG_TeamVector_Impl.hpp | 103 ++++++-- .../impl/KokkosBatched_CG_Team_Impl.hpp | 102 ++++++-- .../KokkosBatched_GMRES_TeamVector_Impl.hpp | 155 ++++++++--- .../impl/KokkosBatched_GMRES_Team_Impl.hpp | 154 ++++++++--- .../KokkosBatched_Spmv_TeamVector_Impl.hpp | 247 ++++++++++++++---- .../sparse/src/KokkosBatched_CrsMatrix.hpp | 27 +- .../src/KokkosBatched_Krylov_Handle.hpp | 10 + .../src/KokkosBatched_Krylov_Solvers.hpp | 30 +++ batched/sparse/src/KokkosBatched_Spmv.hpp | 3 +- .../unit_test/Test_Batched_TeamVectorSpmv.hpp | 26 +- 10 files changed, 665 insertions(+), 192 deletions(-) diff --git a/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp index a106d0ae8f..df02380d0d 100644 --- a/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp @@ -62,10 +62,12 @@ namespace KokkosBatched { template template + typename KrylovHandleType, typename TMPViewType, + typename TMPNormViewType> KOKKOS_INLINE_FUNCTION int TeamVectorCG::invoke( const MemberType& member, const OperatorType& A, const VectorViewType& _B, - const VectorViewType& _X, const KrylovHandleType& handle) { + const VectorViewType& _X, const KrylovHandleType& handle, + const TMPViewType& _TMPView, const TMPNormViewType& _TMPNormView) { typedef int OrdinalType; typedef typename Kokkos::Details::ArithTraits< typename VectorViewType::non_const_value_type>::mag_type MagnitudeType; @@ -85,29 +87,25 @@ KOKKOS_INLINE_FUNCTION int TeamVectorCG::invoke( const OrdinalType numMatrices = _X.extent(0); const OrdinalType numRows = _X.extent(1); - ScratchPadVectorViewType P( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices, - numRows); - ScratchPadVectorViewType Q( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices, - numRows); - ScratchPadVectorViewType R( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices, - numRows); - ScratchPadVectorViewType X( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices, - numRows); - - ScratchPadNormViewType sqr_norm_0( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices); - ScratchPadNormViewType sqr_norm_j( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices); - ScratchPadNormViewType alpha( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices); - ScratchPadNormViewType mask( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices); - ScratchPadNormViewType tmp( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices); + int offset_P = 0; + int offset_Q = offset_P + numRows; + int offset_R = offset_Q + numRows; + int offset_X = offset_R + numRows; + + auto P = Kokkos::subview(_TMPView, Kokkos::ALL, + Kokkos::make_pair(offset_P, offset_P + numRows)); + auto Q = Kokkos::subview(_TMPView, Kokkos::ALL, + Kokkos::make_pair(offset_Q, offset_Q + numRows)); + auto R = Kokkos::subview(_TMPView, Kokkos::ALL, + Kokkos::make_pair(offset_R, offset_R + numRows)); + auto X = Kokkos::subview(_TMPView, Kokkos::ALL, + Kokkos::make_pair(offset_X, offset_X + numRows)); + + auto sqr_norm_0 = Kokkos::subview(_TMPNormView, Kokkos::ALL, 0); + auto sqr_norm_j = Kokkos::subview(_TMPNormView, Kokkos::ALL, 1); + auto alpha = Kokkos::subview(_TMPNormView, Kokkos::ALL, 2); + auto mask = Kokkos::subview(_TMPNormView, Kokkos::ALL, 3); + auto tmp = Kokkos::subview(_TMPNormView, Kokkos::ALL, 4); TeamVectorCopy::invoke(member, _X, X); // Deep copy of b into r_0: @@ -200,6 +198,61 @@ KOKKOS_INLINE_FUNCTION int TeamVectorCG::invoke( TeamVectorCopy::invoke(member, X, _X); return status; } + +template +template +KOKKOS_INLINE_FUNCTION int TeamVectorCG::invoke( + const MemberType& member, const OperatorType& A, const VectorViewType& _B, + const VectorViewType& _X, const KrylovHandleType& handle) { + const int strategy = handle.get_memory_strategy(); + if (strategy == 0) { + using ScratchPadVectorViewType = Kokkos::View< + typename VectorViewType::non_const_value_type**, + typename VectorViewType::array_layout, + typename VectorViewType::execution_space::scratch_memory_space>; + using ScratchPadNormViewType = Kokkos::View< + typename Kokkos::Details::ArithTraits< + typename VectorViewType::non_const_value_type>::mag_type**, + typename VectorViewType::execution_space::scratch_memory_space>; + + const int numMatrices = _X.extent(0); + const int numRows = _X.extent(1); + + ScratchPadVectorViewType _TMPView( + member.team_scratch(handle.get_scratch_pad_level()), numMatrices, + 4 * numRows); + + ScratchPadNormViewType _TMPNormView( + member.team_scratch(handle.get_scratch_pad_level()), numMatrices, 5); + + return invoke( + member, A, _B, _X, handle, _TMPView, _TMPNormView); + } + if (strategy == 1) { + const int first_matrix = handle.first_index(member.league_rank()); + const int last_matrix = handle.last_index(member.league_rank()); + + using ScratchPadNormViewType = Kokkos::View< + typename Kokkos::Details::ArithTraits< + typename VectorViewType::non_const_value_type>::mag_type**, + typename VectorViewType::execution_space::scratch_memory_space>; + + const int numMatrices = _X.extent(0); + + auto _TMPView = Kokkos::subview( + handle.tmp_view, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + + ScratchPadNormViewType _TMPNormView( + member.team_scratch(handle.get_scratch_pad_level()), numMatrices, 5); + + return invoke( + member, A, _B, _X, handle, _TMPView, _TMPNormView); + } + return 0; +} + } // namespace KokkosBatched #endif diff --git a/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp b/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp index cd7a478548..2dbd1649e9 100644 --- a/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp @@ -60,10 +60,12 @@ namespace KokkosBatched { /// template -template +template KOKKOS_INLINE_FUNCTION int TeamCG::invoke( const MemberType& member, const OperatorType& A, const VectorViewType& _B, - const VectorViewType& _X, const KrylovHandle& handle) { + const VectorViewType& _X, const KrylovHandle& handle, + const TMPViewType& _TMPView, const TMPNormViewType& _TMPNormView) { typedef int OrdinalType; typedef typename Kokkos::Details::ArithTraits< typename VectorViewType::non_const_value_type>::mag_type MagnitudeType; @@ -83,29 +85,25 @@ KOKKOS_INLINE_FUNCTION int TeamCG::invoke( const OrdinalType numMatrices = _X.extent(0); const OrdinalType numRows = _X.extent(1); - ScratchPadVectorViewType P( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices, - numRows); - ScratchPadVectorViewType Q( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices, - numRows); - ScratchPadVectorViewType R( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices, - numRows); - ScratchPadVectorViewType X( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices, - numRows); - - ScratchPadNormViewType sqr_norm_0( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices); - ScratchPadNormViewType sqr_norm_j( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices); - ScratchPadNormViewType alpha( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices); - ScratchPadNormViewType mask( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices); - ScratchPadNormViewType tmp( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices); + int offset_P = 0; + int offset_Q = offset_P + numRows; + int offset_R = offset_Q + numRows; + int offset_X = offset_R + numRows; + + auto P = Kokkos::subview(_TMPView, Kokkos::ALL, + Kokkos::make_pair(offset_P, offset_P + numRows)); + auto Q = Kokkos::subview(_TMPView, Kokkos::ALL, + Kokkos::make_pair(offset_Q, offset_Q + numRows)); + auto R = Kokkos::subview(_TMPView, Kokkos::ALL, + Kokkos::make_pair(offset_R, offset_R + numRows)); + auto X = Kokkos::subview(_TMPView, Kokkos::ALL, + Kokkos::make_pair(offset_X, offset_X + numRows)); + + auto sqr_norm_0 = Kokkos::subview(_TMPNormView, Kokkos::ALL, 0); + auto sqr_norm_j = Kokkos::subview(_TMPNormView, Kokkos::ALL, 1); + auto alpha = Kokkos::subview(_TMPNormView, Kokkos::ALL, 2); + auto mask = Kokkos::subview(_TMPNormView, Kokkos::ALL, 3); + auto tmp = Kokkos::subview(_TMPNormView, Kokkos::ALL, 4); TeamCopy::invoke(member, _X, X); // Deep copy of b into r_0: @@ -199,6 +197,60 @@ KOKKOS_INLINE_FUNCTION int TeamCG::invoke( return status; } +template +template +KOKKOS_INLINE_FUNCTION int TeamCG::invoke( + const MemberType& member, const OperatorType& A, const VectorViewType& _B, + const VectorViewType& _X, const KrylovHandleType& handle) { + const int strategy = handle.get_memory_strategy(); + if (strategy == 0) { + using ScratchPadVectorViewType = Kokkos::View< + typename VectorViewType::non_const_value_type**, + typename VectorViewType::array_layout, + typename VectorViewType::execution_space::scratch_memory_space>; + using ScratchPadNormViewType = Kokkos::View< + typename Kokkos::Details::ArithTraits< + typename VectorViewType::non_const_value_type>::mag_type**, + typename VectorViewType::execution_space::scratch_memory_space>; + + const int numMatrices = _X.extent(0); + const int numRows = _X.extent(1); + + ScratchPadVectorViewType _TMPView( + member.team_scratch(handle.get_scratch_pad_level()), numMatrices, + 4 * numRows); + + ScratchPadNormViewType _TMPNormView( + member.team_scratch(handle.get_scratch_pad_level()), numMatrices, 5); + + return invoke( + member, A, _B, _X, handle, _TMPView, _TMPNormView); + } + if (strategy == 1) { + const int first_matrix = handle.first_index(member.league_rank()); + const int last_matrix = handle.last_index(member.league_rank()); + + using ScratchPadNormViewType = Kokkos::View< + typename Kokkos::Details::ArithTraits< + typename VectorViewType::non_const_value_type>::mag_type**, + typename VectorViewType::execution_space::scratch_memory_space>; + + const int numMatrices = _X.extent(0); + + auto _TMPView = Kokkos::subview( + handle.tmp_view, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + + ScratchPadNormViewType _TMPNormView( + member.team_scratch(handle.get_scratch_pad_level()), numMatrices, 5); + + return invoke( + member, A, _B, _X, handle, _TMPView, _TMPNormView); + } + return 0; +} + } // namespace KokkosBatched #endif diff --git a/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp index 7fdf244fa7..ddcb3e4882 100644 --- a/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp @@ -66,11 +66,13 @@ namespace KokkosBatched { template template + typename PrecOperatorType, typename KrylovHandleType, + typename ArnoldiViewType, typename TMPViewType> KOKKOS_INLINE_FUNCTION int TeamVectorGMRES::invoke( const MemberType& member, const OperatorType& A, const VectorViewType& _B, const VectorViewType& _X, const PrecOperatorType& P, - const KrylovHandleType& handle) { + const KrylovHandleType& handle, const ArnoldiViewType& _ArnoldiView, + const TMPViewType& _TMPView) { typedef int OrdinalType; typedef typename Kokkos::Details::ArithTraits< typename VectorViewType::non_const_value_type>::mag_type MagnitudeType; @@ -99,51 +101,36 @@ KOKKOS_INLINE_FUNCTION int TeamVectorGMRES::invoke( int offset_H = offset_V + n_V; int offset_Givens = offset_H + n_H; - const int first_matrix = handle.first_index(member.league_rank()); - const int last_matrix = handle.last_index(member.league_rank()); - - auto V_view = Kokkos::subview( - handle.Arnoldi_view, Kokkos::make_pair(first_matrix, last_matrix), - Kokkos::ALL, Kokkos::make_pair(offset_V, offset_V + n_V)); - auto H_view = Kokkos::subview( - handle.Arnoldi_view, Kokkos::make_pair(first_matrix, last_matrix), - Kokkos::ALL, Kokkos::make_pair(offset_H, offset_H + n_H)); + auto V_view = Kokkos::subview(_ArnoldiView, Kokkos::ALL, Kokkos::ALL, + Kokkos::make_pair(offset_V, offset_V + n_V)); + auto H_view = Kokkos::subview(_ArnoldiView, Kokkos::ALL, Kokkos::ALL, + Kokkos::make_pair(offset_H, offset_H + n_H)); auto Givens_view = Kokkos::subview( - handle.Arnoldi_view, Kokkos::make_pair(first_matrix, last_matrix), - Kokkos::ALL, Kokkos::make_pair(offset_Givens, offset_Givens + n_Givens)); + _ArnoldiView, Kokkos::ALL, Kokkos::ALL, + Kokkos::make_pair(offset_Givens, offset_Givens + n_Givens)); int n_G = maximum_iteration + 1; int n_W = numRows; - int n_X = numRows; int n_mask = 1; - int n_tmp = 1; int offset_G = 0; int offset_W = offset_G + n_G; - int offset_X = offset_W + n_W; - int offset_mask = offset_X + n_X; + int offset_mask = offset_W + n_W; int offset_tmp = offset_mask + n_mask; - ScratchPadVectorViewType tmp_2D( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices, - n_G + n_W + n_X + n_mask + n_tmp); - - auto G = Kokkos::subview(tmp_2D, Kokkos::ALL, + auto G = Kokkos::subview(_TMPView, Kokkos::ALL, Kokkos::make_pair(offset_G, offset_G + n_G)); - auto W = Kokkos::subview(tmp_2D, Kokkos::ALL, + auto W = Kokkos::subview(_TMPView, Kokkos::ALL, Kokkos::make_pair(offset_W, offset_W + n_W)); - auto X = Kokkos::subview(tmp_2D, Kokkos::ALL, - Kokkos::make_pair(offset_X, offset_X + n_X)); - auto mask = Kokkos::subview(tmp_2D, Kokkos::ALL, offset_mask); - auto tmp = Kokkos::subview(tmp_2D, Kokkos::ALL, offset_tmp); + auto mask = Kokkos::subview(_TMPView, Kokkos::ALL, offset_mask); + auto tmp = Kokkos::subview(_TMPView, Kokkos::ALL, offset_tmp); - TeamVectorCopy::invoke(member, _X, X); // Deep copy of b into r_0: TeamVectorCopy::invoke(member, _B, W); // r_0 := b - A x_0 member.team_barrier(); - A.template apply(member, X, W, -1, 1); + A.template apply(member, _X, W, -1, 1); member.team_barrier(); P.template apply(member, W, W); @@ -333,26 +320,23 @@ KOKKOS_INLINE_FUNCTION int TeamVectorGMRES::invoke( TeamVectorGemv::invoke( member, 1, Kokkos::subview(V_view, Kokkos::ALL, first_indices, Kokkos::ALL), - Kokkos::subview(G, Kokkos::ALL, first_indices), 1, X); - member.team_barrier(); // Finish writing to X + Kokkos::subview(G, Kokkos::ALL, first_indices), 1, _X); + member.team_barrier(); // Finish writing to _X } if (handle.get_ortho_strategy() == 1) { for (size_t j = 0; j < maximum_iteration; ++j) { TeamVectorAxpy::invoke( member, Kokkos::subview(G, Kokkos::ALL, j), - Kokkos::subview(V_view, Kokkos::ALL, j, Kokkos::ALL), X); - member.team_barrier(); // Finish writing to X + Kokkos::subview(V_view, Kokkos::ALL, j, Kokkos::ALL), _X); + member.team_barrier(); // Finish writing to _X } } - TeamVectorCopy::invoke(member, X, _X); - - member.team_barrier(); - if (handle.get_compute_last_residual()) { TeamVectorCopy::invoke(member, _B, W); member.team_barrier(); - A.template apply(member, X, W, -1, 1); + A.template apply(member, _X, W, -1, + 1); member.team_barrier(); P.template apply(member, W, W); member.team_barrier(); @@ -369,6 +353,101 @@ KOKKOS_INLINE_FUNCTION int TeamVectorGMRES::invoke( return status; } +template +template +KOKKOS_INLINE_FUNCTION int TeamVectorGMRES::invoke( + const MemberType& member, const OperatorType& A, const VectorViewType& _B, + const VectorViewType& _X, const PrecOperatorType& P, + const KrylovHandleType& handle) { + const int strategy = handle.get_memory_strategy(); + if (strategy == 0) { + const int first_matrix = handle.first_index(member.league_rank()); + const int last_matrix = handle.last_index(member.league_rank()); + + auto _ArnoldiView = Kokkos::subview( + handle.Arnoldi_view, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL, Kokkos::ALL); + + const int numMatrices = _X.extent(0); + const int numRows = _X.extent(1); + + size_t maximum_iteration = handle.get_max_iteration() < numRows + ? handle.get_max_iteration() + : numRows; + + int n_G = maximum_iteration + 1; + int n_W = numRows; + int n_mask = 1; + int n_tmp = 1; + + using ScratchPadVectorViewType = Kokkos::View< + typename VectorViewType::non_const_value_type**, + typename VectorViewType::array_layout, + typename VectorViewType::execution_space::scratch_memory_space>; + + ScratchPadVectorViewType _TMPView( + member.team_scratch(handle.get_scratch_pad_level()), numMatrices, + n_G + n_W + n_mask + n_tmp); + + return invoke(member, A, _B, _X, P, handle, _ArnoldiView, + _TMPView); + } + if (strategy == 1) { + const int first_matrix = handle.first_index(member.league_rank()); + const int last_matrix = handle.last_index(member.league_rank()); + + auto _ArnoldiView = Kokkos::subview( + handle.Arnoldi_view, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL, Kokkos::ALL); + + auto _TMPView = Kokkos::subview( + handle.tmp_view, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + + return invoke(member, A, _B, _X, P, handle, _ArnoldiView, + _TMPView); + } + if (strategy == 2) { + using ScratchPadArnoldiViewType = Kokkos::View< + typename VectorViewType::non_const_value_type***, + typename VectorViewType::array_layout, + typename VectorViewType::execution_space::scratch_memory_space>; + + using ScratchPadVectorViewType = Kokkos::View< + typename VectorViewType::non_const_value_type**, + typename VectorViewType::array_layout, + typename VectorViewType::execution_space::scratch_memory_space>; + + const int numMatrices = _X.extent(0); + const int numRows = _X.extent(1); + + size_t maximum_iteration = handle.get_max_iteration() < numRows + ? handle.get_max_iteration() + : numRows; + + int n_G = maximum_iteration + 1; + int n_W = numRows; + int n_mask = 1; + int n_tmp = 1; + + ScratchPadArnoldiViewType _ArnoldiView( + member.team_scratch(handle.get_scratch_pad_level()), numMatrices, + maximum_iteration, numRows + maximum_iteration + 3); + + ScratchPadVectorViewType _TMPView( + member.team_scratch(handle.get_scratch_pad_level()), numMatrices, + n_G + n_W + n_mask + n_tmp); + + return invoke(member, A, _B, _X, P, handle, _ArnoldiView, + _TMPView); + } + return 0; +} + template template diff --git a/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp b/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp index 41ac90e61d..375de3cd94 100644 --- a/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp @@ -65,11 +65,13 @@ namespace KokkosBatched { template template + typename PrecOperatorType, typename KrylovHandleType, + typename ArnoldiViewType, typename TMPViewType> KOKKOS_INLINE_FUNCTION int TeamGMRES::invoke( const MemberType& member, const OperatorType& A, const VectorViewType& _B, const VectorViewType& _X, const PrecOperatorType& P, - const KrylovHandleType& handle) { + const KrylovHandleType& handle, const ArnoldiViewType& _ArnoldiView, + const TMPViewType& _TMPView) { typedef int OrdinalType; typedef typename Kokkos::Details::ArithTraits< typename VectorViewType::non_const_value_type>::mag_type MagnitudeType; @@ -98,51 +100,36 @@ KOKKOS_INLINE_FUNCTION int TeamGMRES::invoke( int offset_H = offset_V + n_V; int offset_Givens = offset_H + n_H; - const int first_matrix = handle.first_index(member.league_rank()); - const int last_matrix = handle.last_index(member.league_rank()); - - auto V_view = Kokkos::subview( - handle.Arnoldi_view, Kokkos::make_pair(first_matrix, last_matrix), - Kokkos::ALL, Kokkos::make_pair(offset_V, offset_V + n_V)); - auto H_view = Kokkos::subview( - handle.Arnoldi_view, Kokkos::make_pair(first_matrix, last_matrix), - Kokkos::ALL, Kokkos::make_pair(offset_H, offset_H + n_H)); + auto V_view = Kokkos::subview(_ArnoldiView, Kokkos::ALL, Kokkos::ALL, + Kokkos::make_pair(offset_V, offset_V + n_V)); + auto H_view = Kokkos::subview(_ArnoldiView, Kokkos::ALL, Kokkos::ALL, + Kokkos::make_pair(offset_H, offset_H + n_H)); auto Givens_view = Kokkos::subview( - handle.Arnoldi_view, Kokkos::make_pair(first_matrix, last_matrix), - Kokkos::ALL, Kokkos::make_pair(offset_Givens, offset_Givens + n_Givens)); + _ArnoldiView, Kokkos::ALL, Kokkos::ALL, + Kokkos::make_pair(offset_Givens, offset_Givens + n_Givens)); int n_G = maximum_iteration + 1; int n_W = numRows; - int n_X = numRows; int n_mask = 1; - int n_tmp = 1; int offset_G = 0; int offset_W = offset_G + n_G; - int offset_X = offset_W + n_W; - int offset_mask = offset_X + n_X; + int offset_mask = offset_W + n_W; int offset_tmp = offset_mask + n_mask; - ScratchPadVectorViewType tmp_2D( - member.team_scratch(handle.get_scratch_pad_level()), numMatrices, - n_G + n_W + n_X + n_mask + n_tmp); - - auto G = Kokkos::subview(tmp_2D, Kokkos::ALL, + auto G = Kokkos::subview(_TMPView, Kokkos::ALL, Kokkos::make_pair(offset_G, offset_G + n_G)); - auto W = Kokkos::subview(tmp_2D, Kokkos::ALL, + auto W = Kokkos::subview(_TMPView, Kokkos::ALL, Kokkos::make_pair(offset_W, offset_W + n_W)); - auto X = Kokkos::subview(tmp_2D, Kokkos::ALL, - Kokkos::make_pair(offset_X, offset_X + n_X)); - auto mask = Kokkos::subview(tmp_2D, Kokkos::ALL, offset_mask); - auto tmp = Kokkos::subview(tmp_2D, Kokkos::ALL, offset_tmp); + auto mask = Kokkos::subview(_TMPView, Kokkos::ALL, offset_mask); + auto tmp = Kokkos::subview(_TMPView, Kokkos::ALL, offset_tmp); - TeamCopy::invoke(member, _X, X); // Deep copy of b into r_0: TeamCopy::invoke(member, _B, W); // r_0 := b - A x_0 member.team_barrier(); - A.template apply(member, X, W, -1, 1); + A.template apply(member, _X, W, -1, 1); member.team_barrier(); P.template apply(member, W, W); @@ -330,26 +317,22 @@ KOKKOS_INLINE_FUNCTION int TeamGMRES::invoke( TeamGemv::invoke( member, 1, Kokkos::subview(V_view, Kokkos::ALL, first_indices, Kokkos::ALL), - Kokkos::subview(G, Kokkos::ALL, first_indices), 1, X); - member.team_barrier(); // Finish writing to X + Kokkos::subview(G, Kokkos::ALL, first_indices), 1, _X); + member.team_barrier(); // Finish writing to _X } if (handle.get_ortho_strategy() == 1) { for (size_t j = 0; j < maximum_iteration; ++j) { TeamAxpy::invoke( member, Kokkos::subview(G, Kokkos::ALL, j), - Kokkos::subview(V_view, Kokkos::ALL, j, Kokkos::ALL), X); - member.team_barrier(); // Finish writing to X + Kokkos::subview(V_view, Kokkos::ALL, j, Kokkos::ALL), _X); + member.team_barrier(); // Finish writing to _X } } - TeamCopy::invoke(member, X, _X); - - member.team_barrier(); - if (handle.get_compute_last_residual()) { TeamCopy::invoke(member, _B, W); member.team_barrier(); - A.template apply(member, X, W, -1, 1); + A.template apply(member, _X, W, -1, 1); member.team_barrier(); P.template apply(member, W, W); member.team_barrier(); @@ -366,6 +349,101 @@ KOKKOS_INLINE_FUNCTION int TeamGMRES::invoke( return status; } +template +template +KOKKOS_INLINE_FUNCTION int TeamGMRES::invoke( + const MemberType& member, const OperatorType& A, const VectorViewType& _B, + const VectorViewType& _X, const PrecOperatorType& P, + const KrylovHandleType& handle) { + const int strategy = handle.get_memory_strategy(); + if (strategy == 0) { + const int first_matrix = handle.first_index(member.league_rank()); + const int last_matrix = handle.last_index(member.league_rank()); + + auto _ArnoldiView = Kokkos::subview( + handle.Arnoldi_view, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL, Kokkos::ALL); + + const int numMatrices = _X.extent(0); + const int numRows = _X.extent(1); + + size_t maximum_iteration = handle.get_max_iteration() < numRows + ? handle.get_max_iteration() + : numRows; + + int n_G = maximum_iteration + 1; + int n_W = numRows; + int n_mask = 1; + int n_tmp = 1; + + using ScratchPadVectorViewType = Kokkos::View< + typename VectorViewType::non_const_value_type**, + typename VectorViewType::array_layout, + typename VectorViewType::execution_space::scratch_memory_space>; + + ScratchPadVectorViewType _TMPView( + member.team_scratch(handle.get_scratch_pad_level()), numMatrices, + n_G + n_W + n_mask + n_tmp); + + return invoke(member, A, _B, _X, P, handle, _ArnoldiView, + _TMPView); + } + if (strategy == 1) { + const int first_matrix = handle.first_index(member.league_rank()); + const int last_matrix = handle.last_index(member.league_rank()); + + auto _ArnoldiView = Kokkos::subview( + handle.Arnoldi_view, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL, Kokkos::ALL); + + auto _TMPView = Kokkos::subview( + handle.tmp_view, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + + return invoke(member, A, _B, _X, P, handle, _ArnoldiView, + _TMPView); + } + if (strategy == 2) { + using ScratchPadArnoldiViewType = Kokkos::View< + typename VectorViewType::non_const_value_type***, + typename VectorViewType::array_layout, + typename VectorViewType::execution_space::scratch_memory_space>; + + using ScratchPadVectorViewType = Kokkos::View< + typename VectorViewType::non_const_value_type**, + typename VectorViewType::array_layout, + typename VectorViewType::execution_space::scratch_memory_space>; + + const int numMatrices = _X.extent(0); + const int numRows = _X.extent(1); + + size_t maximum_iteration = handle.get_max_iteration() < numRows + ? handle.get_max_iteration() + : numRows; + + int n_G = maximum_iteration + 1; + int n_W = numRows; + int n_mask = 1; + int n_tmp = 1; + + ScratchPadArnoldiViewType _ArnoldiView( + member.team_scratch(handle.get_scratch_pad_level()), numMatrices, + maximum_iteration, numRows + maximum_iteration + 3); + + ScratchPadVectorViewType _TMPView( + member.team_scratch(handle.get_scratch_pad_level()), numMatrices, + n_G + n_W + n_mask + n_tmp); + + return invoke(member, A, _B, _X, P, handle, _ArnoldiView, + _TMPView); + } + return 0; +} + template template diff --git a/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp index 7e812621e7..d07b1d1214 100644 --- a/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp @@ -53,7 +53,7 @@ namespace KokkosBatched { /// ==================== struct TeamVectorSpmvInternal { template + typename OrdinalType, typename layout, int dobeta, unsigned N_team> KOKKOS_INLINE_FUNCTION static int invoke( const MemberType& member, const OrdinalType numMatrices, const OrdinalType numRows, const ScalarType* KOKKOS_RESTRICT alpha, @@ -68,7 +68,7 @@ struct TeamVectorSpmvInternal { const OrdinalType ys1); template + typename OrdinalType, typename layout, int dobeta, unsigned N_team> KOKKOS_INLINE_FUNCTION static int invoke( const MemberType& member, const OrdinalType numMatrices, const OrdinalType numRows, const ScalarType alpha, @@ -83,7 +83,7 @@ struct TeamVectorSpmvInternal { }; template + typename OrdinalType, typename layout, int dobeta, unsigned N_team> KOKKOS_INLINE_FUNCTION int TeamVectorSpmvInternal::invoke( const MemberType& member, const OrdinalType numMatrices, const OrdinalType numRows, const ScalarType* KOKKOS_RESTRICT alpha, @@ -96,43 +96,120 @@ KOKKOS_INLINE_FUNCTION int TeamVectorSpmvInternal::invoke( const ScalarType* KOKKOS_RESTRICT beta, const OrdinalType betas0, /**/ ValueType* KOKKOS_RESTRICT Y, const OrdinalType ys0, const OrdinalType ys1) { - Kokkos::parallel_for( - Kokkos::TeamVectorRange(member, 0, numMatrices * numRows), - [&](const OrdinalType& iTemp) { - OrdinalType iRow, iMatrix; - getIndices(iTemp, numRows, numMatrices, iRow, - iMatrix); +#if !defined(__CUDA_ARCH__) && !defined(__HIP_DEVICE_COMPILE__) + if (member.team_size() == 1) { + if (N_team != 0 && valuess0 == 1) { + /* + Left layout as valuess0 = 1 and non-zero vector length given at + compilation time. Here we use the SIMD data type which is using Intel + Intrinsics under the hood on Intel architectures. + */ + typedef Vector, N_team> VectorType; + VectorType alpha_v, beta_v, values_v, y_v, x_v; + + alpha_v.loadAligned(alpha); + beta_v.loadAligned(beta); + + for (OrdinalType iRow = 0; iRow < numRows; ++iRow) { const OrdinalType rowLength = row_ptr[(iRow + 1) * row_ptrs0] - row_ptr[iRow * row_ptrs0]; - ValueType sum = 0; + + VectorType sum_v(0); + #if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) #pragma unroll #endif for (OrdinalType iEntry = 0; iEntry < rowLength; ++iEntry) { - sum += values[iMatrix * valuess0 + - (row_ptr[iRow * row_ptrs0] + iEntry) * valuess1] * - X[iMatrix * xs0 + - colIndices[(row_ptr[iRow * row_ptrs0] + iEntry) * - colIndicess0] * - xs1]; + values_v.loadAligned( + &values[(row_ptr[iRow * row_ptrs0] + iEntry) * valuess1]); + x_v.loadAligned(&X[colIndices[(row_ptr[iRow * row_ptrs0] + iEntry) * + colIndicess0] * + xs1]); + sum_v += values_v * x_v; } + sum_v *= alpha_v; + if (dobeta != 0) { + y_v.loadAligned(&Y[iRow * ys1]); + sum_v += y_v * beta_v; + } + sum_v.storeAligned(&Y[iRow * ys1]); + } + } else { + Kokkos::Impl::integral_nonzero_constant n_team( + numMatrices); + + for (unsigned iMatrix = 0; iMatrix < unsigned(n_team.value); ++iMatrix) { + for (OrdinalType iRow = 0; iRow < numRows; ++iRow) { + const OrdinalType rowLength = + row_ptr[(iRow + 1) * row_ptrs0] - row_ptr[iRow * row_ptrs0]; - sum *= alpha[iMatrix * alphas0]; + ValueType sum = 0; + Kokkos::parallel_reduce( + Kokkos::ThreadVectorRange(member, rowLength), + [&](const OrdinalType& iEntry, ValueType& lsum) { + lsum += + values[iMatrix * valuess0 + + (row_ptr[iRow * row_ptrs0] + iEntry) * valuess1] * + X[iMatrix * xs0 + + colIndices[(row_ptr[iRow * row_ptrs0] + iEntry) * + colIndicess0] * + xs1]; + }, + sum); - if (dobeta == 0) { - Y[iMatrix * ys0 + iRow * ys1] = sum; - } else { - Y[iMatrix * ys0 + iRow * ys1] = - beta[iMatrix * betas0] * Y[iMatrix * ys0 + iRow * ys1] + sum; + sum *= alpha[iMatrix * alphas0]; + + if (dobeta == 0) { + Y[iMatrix * ys0 + iRow * ys1] = sum; + } else { + Y[iMatrix * ys0 + iRow * ys1] = + beta[iMatrix * betas0] * Y[iMatrix * ys0 + iRow * ys1] + sum; + } } - }); + } + } + } else { +#endif + Kokkos::parallel_for( + Kokkos::TeamVectorRange(member, 0, numMatrices * numRows), + [&](const OrdinalType& iTemp) { + OrdinalType iRow, iMatrix; + getIndices(iTemp, numRows, numMatrices, iRow, + iMatrix); + + const OrdinalType rowLength = + row_ptr[(iRow + 1) * row_ptrs0] - row_ptr[iRow * row_ptrs0]; + ValueType sum = 0; +#if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) +#pragma unroll +#endif + for (OrdinalType iEntry = 0; iEntry < rowLength; ++iEntry) { + sum += values[iMatrix * valuess0 + + (row_ptr[iRow * row_ptrs0] + iEntry) * valuess1] * + X[iMatrix * xs0 + + colIndices[(row_ptr[iRow * row_ptrs0] + iEntry) * + colIndicess0] * + xs1]; + } + + sum *= alpha[iMatrix * alphas0]; + if (dobeta == 0) { + Y[iMatrix * ys0 + iRow * ys1] = sum; + } else { + Y[iMatrix * ys0 + iRow * ys1] = + beta[iMatrix * betas0] * Y[iMatrix * ys0 + iRow * ys1] + sum; + } + }); +#if !defined(__CUDA_ARCH__) && !defined(__HIP_DEVICE_COMPILE__) + } +#endif return 0; } template + typename OrdinalType, typename layout, int dobeta, unsigned N_team> KOKKOS_INLINE_FUNCTION int TeamVectorSpmvInternal::invoke( const MemberType& member, const OrdinalType numMatrices, const OrdinalType numRows, const ScalarType alpha, @@ -143,43 +220,117 @@ KOKKOS_INLINE_FUNCTION int TeamVectorSpmvInternal::invoke( const OrdinalType xs0, const OrdinalType xs1, const ScalarType beta, /**/ ValueType* KOKKOS_RESTRICT Y, const OrdinalType ys0, const OrdinalType ys1) { - Kokkos::parallel_for( - Kokkos::TeamVectorRange(member, 0, numMatrices * numRows), - [&](const OrdinalType& iTemp) { - OrdinalType iRow, iMatrix; - getIndices(iTemp, numRows, numMatrices, iRow, - iMatrix); +#if !defined(__CUDA_ARCH__) && !defined(__HIP_DEVICE_COMPILE__) + if (member.team_size() == 1) { + if (N_team != 0 && valuess0 == 1) { + /* + Left layout as valuess0 = 1 and non-zero vector length given at + compilation time Here we use the SIMD data type which is using Intel + Intrinsics under the hood on Intel architectures. + */ + typedef Vector, N_team> VectorType; + VectorType alpha_v(alpha), beta_v(beta), values_v, y_v, x_v; + + for (OrdinalType iRow = 0; iRow < numRows; ++iRow) { const OrdinalType rowLength = row_ptr[(iRow + 1) * row_ptrs0] - row_ptr[iRow * row_ptrs0]; - ValueType sum = 0; + + VectorType sum_v(0); + #if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) #pragma unroll #endif for (OrdinalType iEntry = 0; iEntry < rowLength; ++iEntry) { - sum += values[iMatrix * valuess0 + - (row_ptr[iRow * row_ptrs0] + iEntry) * valuess1] * - X[iMatrix * xs0 + - colIndices[(row_ptr[iRow * row_ptrs0] + iEntry) * - colIndicess0] * - xs1]; + values_v.loadAligned( + &values[(row_ptr[iRow * row_ptrs0] + iEntry) * valuess1]); + x_v.loadAligned(&X[colIndices[(row_ptr[iRow * row_ptrs0] + iEntry) * + colIndicess0] * + xs1]); + sum_v += values_v * x_v; + } + sum_v *= alpha_v; + if (dobeta != 0) { + y_v.loadAligned(&Y[iRow * ys1]); + sum_v += y_v * beta_v; } + sum_v.storeAligned(&Y[iRow * ys1]); + } + } else { + Kokkos::Impl::integral_nonzero_constant n_team( + numMatrices); - sum *= alpha; + for (unsigned iMatrix = 0; iMatrix < unsigned(n_team.value); ++iMatrix) { + for (OrdinalType iRow = 0; iRow < numRows; ++iRow) { + const OrdinalType rowLength = + row_ptr[(iRow + 1) * row_ptrs0] - row_ptr[iRow * row_ptrs0]; - if (dobeta == 0) { - Y[iMatrix * ys0 + iRow * ys1] = sum; - } else { - Y[iMatrix * ys0 + iRow * ys1] = - beta * Y[iMatrix * ys0 + iRow * ys1] + sum; + ValueType sum = 0; + Kokkos::parallel_reduce( + Kokkos::ThreadVectorRange(member, rowLength), + [&](const OrdinalType& iEntry, ValueType& lsum) { + lsum += + values[iMatrix * valuess0 + + (row_ptr[iRow * row_ptrs0] + iEntry) * valuess1] * + X[iMatrix * xs0 + + colIndices[(row_ptr[iRow * row_ptrs0] + iEntry) * + colIndicess0] * + xs1]; + }, + sum); + + sum *= alpha; + + if (dobeta == 0) { + Y[iMatrix * ys0 + iRow * ys1] = sum; + } else { + Y[iMatrix * ys0 + iRow * ys1] = + beta * Y[iMatrix * ys0 + iRow * ys1] + sum; + } } - }); + } + } + } else { +#endif + Kokkos::parallel_for( + Kokkos::TeamVectorRange(member, 0, numMatrices * numRows), + [&](const OrdinalType& iTemp) { + OrdinalType iRow, iMatrix; + getIndices(iTemp, numRows, numMatrices, iRow, + iMatrix); + const OrdinalType rowLength = + row_ptr[(iRow + 1) * row_ptrs0] - row_ptr[iRow * row_ptrs0]; + ValueType sum = 0; +#if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) +#pragma unroll +#endif + for (OrdinalType iEntry = 0; iEntry < rowLength; ++iEntry) { + sum += values[iMatrix * valuess0 + + (row_ptr[iRow * row_ptrs0] + iEntry) * valuess1] * + X[iMatrix * xs0 + + colIndices[(row_ptr[iRow * row_ptrs0] + iEntry) * + colIndicess0] * + xs1]; + } + + sum *= alpha; + + if (dobeta == 0) { + Y[iMatrix * ys0 + iRow * ys1] = sum; + } else { + Y[iMatrix * ys0 + iRow * ys1] = + beta * Y[iMatrix * ys0 + iRow * ys1] + sum; + } + }); +#if !defined(__CUDA_ARCH__) && !defined(__HIP_DEVICE_COMPILE__) + } +#endif return 0; } -template -struct TeamVectorSpmv { +template +struct TeamVectorSpmv { template @@ -272,7 +423,7 @@ struct TeamVectorSpmv { MemberType, typename alphaViewType::non_const_value_type, typename ValuesViewType::non_const_value_type, typename IntView::non_const_value_type, - typename ValuesViewType::array_layout, dobeta>( + typename ValuesViewType::array_layout, dobeta, N_team>( member, X.extent(0), X.extent(1), alpha.data(), alpha.stride_0(), values.data(), values.stride_0(), values.stride_1(), row_ptr.data(), row_ptr.stride_0(), colIndices.data(), colIndices.stride_0(), X.data(), @@ -351,7 +502,7 @@ struct TeamVectorSpmv { typename ValuesViewType::non_const_value_type>::mag_type, typename ValuesViewType::non_const_value_type, typename IntView::non_const_value_type, - typename ValuesViewType::array_layout, dobeta>( + typename ValuesViewType::array_layout, dobeta, N_team>( member, X.extent(0), X.extent(1), alpha, values.data(), values.stride_0(), values.stride_1(), row_ptr.data(), row_ptr.stride_0(), colIndices.data(), colIndices.stride_0(), X.data(), diff --git a/batched/sparse/src/KokkosBatched_CrsMatrix.hpp b/batched/sparse/src/KokkosBatched_CrsMatrix.hpp index d7fd94744f..a3400db839 100644 --- a/batched/sparse/src/KokkosBatched_CrsMatrix.hpp +++ b/batched/sparse/src/KokkosBatched_CrsMatrix.hpp @@ -111,14 +111,25 @@ class CrsMatrix { MagnitudeType alpha = Kokkos::Details::ArithTraits::one(), MagnitudeType beta = Kokkos::Details::ArithTraits::zero()) const { - if (beta == Kokkos::Details::ArithTraits::zero()) - KokkosBatched::TeamVectorSpmv::template invoke< - ValuesViewType, IntViewType, XViewType, YViewType, 0>( - member, alpha, values, row_ptr, colIndices, X, beta, Y); - else - KokkosBatched::TeamVectorSpmv::template invoke< - ValuesViewType, IntViewType, XViewType, YViewType, 1>( - member, alpha, values, row_ptr, colIndices, X, beta, Y); + if (beta == Kokkos::Details::ArithTraits::zero()) { + if (member.team_size() == 1 && n_operators == 8) + KokkosBatched::TeamVectorSpmv::template invoke< + ValuesViewType, IntViewType, XViewType, YViewType, 0>( + member, alpha, values, row_ptr, colIndices, X, beta, Y); + else + KokkosBatched::TeamVectorSpmv::template invoke< + ValuesViewType, IntViewType, XViewType, YViewType, 0>( + member, alpha, values, row_ptr, colIndices, X, beta, Y); + } else { + if (member.team_size() == 1 && n_operators == 8) + KokkosBatched::TeamVectorSpmv::template invoke< + ValuesViewType, IntViewType, XViewType, YViewType, 1>( + member, alpha, values, row_ptr, colIndices, X, beta, Y); + else + KokkosBatched::TeamVectorSpmv::template invoke< + ValuesViewType, IntViewType, XViewType, YViewType, 1>( + member, alpha, values, row_ptr, colIndices, X, beta, Y); + } } template diff --git a/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp b/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp index 3467a6f910..b01eab4cfa 100644 --- a/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp +++ b/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp @@ -103,6 +103,7 @@ class KrylovHandle { int n_teams; int ortho_strategy; int scratch_pad_level; + int memory_strategy; bool compute_last_residual; bool monitor_residual; bool host_synchronised; @@ -146,6 +147,7 @@ class KrylovHandle { scratch_pad_level = 0; compute_last_residual = true; host_synchronised = false; + memory_strategy = 0; } /// \brief get_number_of_systems_per_team @@ -411,6 +413,14 @@ class KrylovHandle { return false; } + KOKKOS_INLINE_FUNCTION + void set_memory_strategy(int _memory_strategy) { + memory_strategy = _memory_strategy; + } + + KOKKOS_INLINE_FUNCTION + int get_memory_strategy() const { return memory_strategy; } + private: /// \brief set_norm /// Store the norm of one of the system at one of the iteration diff --git a/batched/sparse/src/KokkosBatched_Krylov_Solvers.hpp b/batched/sparse/src/KokkosBatched_Krylov_Solvers.hpp index 413c72678f..240bd56c74 100644 --- a/batched/sparse/src/KokkosBatched_Krylov_Solvers.hpp +++ b/batched/sparse/src/KokkosBatched_Krylov_Solvers.hpp @@ -66,6 +66,14 @@ struct SerialGMRES { template struct TeamGMRES { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const OperatorType& A, const VectorViewType& _B, + const VectorViewType& _X, const PrecOperatorType& P, + const KrylovHandleType& handle, const ArnoldiViewType& _ArnoldiView, + const TMPViewType& _TMPView); template KOKKOS_INLINE_FUNCTION static int invoke(const MemberType& member, @@ -85,6 +93,14 @@ struct TeamGMRES { template struct TeamVectorGMRES { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const OperatorType& A, const VectorViewType& _B, + const VectorViewType& _X, const PrecOperatorType& P, + const KrylovHandleType& handle, const ArnoldiViewType& _ArnoldiView, + const TMPViewType& _TMPView); template KOKKOS_INLINE_FUNCTION static int invoke(const MemberType& member, @@ -104,6 +120,13 @@ struct TeamVectorGMRES { template struct TeamCG { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const OperatorType& A, const VectorViewType& _B, + const VectorViewType& _X, const KrylovHandleType& handle, + const TMPViewType& _TMPView, const TMPNormViewType& _TMPNormView); template KOKKOS_INLINE_FUNCTION static int invoke(const MemberType& member, @@ -115,6 +138,13 @@ struct TeamCG { template struct TeamVectorCG { + template + KOKKOS_INLINE_FUNCTION static int invoke( + const MemberType& member, const OperatorType& A, const VectorViewType& _B, + const VectorViewType& _X, const KrylovHandleType& handle, + const TMPViewType& _TMPView, const TMPNormViewType& _TMPNormView); template KOKKOS_INLINE_FUNCTION static int invoke(const MemberType& member, diff --git a/batched/sparse/src/KokkosBatched_Spmv.hpp b/batched/sparse/src/KokkosBatched_Spmv.hpp index 14ce074e41..c76cdbf6e1 100644 --- a/batched/sparse/src/KokkosBatched_Spmv.hpp +++ b/batched/sparse/src/KokkosBatched_Spmv.hpp @@ -215,7 +215,8 @@ struct TeamSpmv { /// (or one with TeamVectorRange) are used inside. /// -template +template struct TeamVectorSpmv { template :: - template invoke( - member, alpha, d, _r, _c, x, beta, y); + if (last_matrix != N) + KokkosBatched::TeamVectorSpmv< + MemberType, typename ParamTagType::trans, + 2>::template invoke( + member, alpha, d, _r, _c, x, beta, y); + else + KokkosBatched::TeamVectorSpmv< + MemberType, typename ParamTagType::trans, + 0>::template invoke( + member, alpha, d, _r, _c, x, beta, y); } inline void run() { @@ -85,7 +93,7 @@ struct Functor_TestBatchedTeamVectorSpmv { std::string name = name_region + name_value_type; Kokkos::Profiling::pushRegion(name.c_str()); Kokkos::TeamPolicy policy( - _D.extent(0) / _N_team, Kokkos::AUTO(), Kokkos::AUTO()); + ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); Kokkos::parallel_for(name.c_str(), policy, *this); Kokkos::Profiling::popRegion(); } @@ -187,12 +195,12 @@ int test_batched_teamvector_spmv() { for (int i = 3; i < 10; ++i) { Test::TeamVectorSpmv::impl_test_batched_spmv< DeviceType, ParamTagType, ViewType, IntView, ViewType, ViewType, - alphaViewType, alphaViewType, 0>(1024, i, 2); + alphaViewType, alphaViewType, 0>(1025, i, 2); } for (int i = 3; i < 10; ++i) { Test::TeamVectorSpmv::impl_test_batched_spmv< DeviceType, ParamTagType, ViewType, IntView, ViewType, ViewType, - alphaViewType, alphaViewType, 1>(1024, i, 2); + alphaViewType, alphaViewType, 1>(1025, i, 2); } } #endif @@ -207,12 +215,12 @@ int test_batched_teamvector_spmv() { for (int i = 3; i < 10; ++i) { Test::TeamVectorSpmv::impl_test_batched_spmv< DeviceType, ParamTagType, ViewType, IntView, ViewType, ViewType, - alphaViewType, alphaViewType, 0>(1024, i, 2); + alphaViewType, alphaViewType, 0>(1025, i, 2); } for (int i = 3; i < 10; ++i) { Test::TeamVectorSpmv::impl_test_batched_spmv< DeviceType, ParamTagType, ViewType, IntView, ViewType, ViewType, - alphaViewType, alphaViewType, 1>(1024, i, 2); + alphaViewType, alphaViewType, 1>(1025, i, 2); } } #endif From 81c8e14e400fa66f823ea820ef458548389d1508 Mon Sep 17 00:00:00 2001 From: kliegeois Date: Mon, 26 Sep 2022 10:47:34 -0600 Subject: [PATCH 100/226] Use static_cast instead of 1. * --- batched/sparse/src/KokkosBatched_Krylov_Handle.hpp | 2 +- batched/sparse/unit_test/Test_Batched_TeamVectorSpmv.hpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp b/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp index b01eab4cfa..4fe3edaf3e 100644 --- a/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp +++ b/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp @@ -124,7 +124,7 @@ class KrylovHandle { iteration_numbers = IntViewType("", batched_size); Kokkos::deep_copy(iteration_numbers, -1); - n_teams = ceil(1. * batched_size / N_team); + n_teams = ceil(static_cast(batched_size) / N_team); first_index = IntViewType("", n_teams); last_index = IntViewType("", n_teams); diff --git a/batched/sparse/unit_test/Test_Batched_TeamVectorSpmv.hpp b/batched/sparse/unit_test/Test_Batched_TeamVectorSpmv.hpp index 2c58fb25e4..55f9e0ecc2 100644 --- a/batched/sparse/unit_test/Test_Batched_TeamVectorSpmv.hpp +++ b/batched/sparse/unit_test/Test_Batched_TeamVectorSpmv.hpp @@ -93,7 +93,8 @@ struct Functor_TestBatchedTeamVectorSpmv { std::string name = name_region + name_value_type; Kokkos::Profiling::pushRegion(name.c_str()); Kokkos::TeamPolicy policy( - ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); + ceil(static_cast(_D.extent(0)) / _N_team), Kokkos::AUTO(), + Kokkos::AUTO()); Kokkos::parallel_for(name.c_str(), policy, *this); Kokkos::Profiling::popRegion(); } From 7bd94200b74b888a6e9c2f4bcb141501dbf9a049 Mon Sep 17 00:00:00 2001 From: kliegeois Date: Mon, 26 Sep 2022 11:35:42 -0600 Subject: [PATCH 101/226] Fix warnings --- batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp | 7 ------- batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp | 7 ------- .../sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp | 4 ---- batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp | 4 ---- .../sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp | 2 +- batched/sparse/src/KokkosBatched_Spmv.hpp | 2 +- batched/sparse/unit_test/Test_Batched_TeamVectorSpmv.hpp | 9 ++++----- 7 files changed, 6 insertions(+), 29 deletions(-) diff --git a/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp index df02380d0d..d7d84ea253 100644 --- a/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp @@ -75,13 +75,6 @@ KOKKOS_INLINE_FUNCTION int TeamVectorCG::invoke( const size_t maximum_iteration = handle.get_max_iteration(); const MagnitudeType tolerance = handle.get_tolerance(); - using ScratchPadNormViewType = Kokkos::View< - MagnitudeType*, - typename VectorViewType::execution_space::scratch_memory_space>; - using ScratchPadVectorViewType = Kokkos::View< - typename VectorViewType::non_const_value_type**, - typename VectorViewType::array_layout, - typename VectorViewType::execution_space::scratch_memory_space>; using TeamVectorCopy1D = TeamVectorCopy; const OrdinalType numMatrices = _X.extent(0); diff --git a/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp b/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp index 2dbd1649e9..adb5b19121 100644 --- a/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp @@ -73,13 +73,6 @@ KOKKOS_INLINE_FUNCTION int TeamCG::invoke( size_t maximum_iteration = handle.get_max_iteration(); const MagnitudeType tolerance = handle.get_tolerance(); - using ScratchPadNormViewType = Kokkos::View< - MagnitudeType*, - typename VectorViewType::execution_space::scratch_memory_space>; - using ScratchPadVectorViewType = Kokkos::View< - typename VectorViewType::non_const_value_type**, - typename VectorViewType::array_layout, - typename VectorViewType::execution_space::scratch_memory_space>; using TeamCopy1D = TeamCopy; const OrdinalType numMatrices = _X.extent(0); diff --git a/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp index ddcb3e4882..c858d36c6f 100644 --- a/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp @@ -78,10 +78,6 @@ KOKKOS_INLINE_FUNCTION int TeamVectorGMRES::invoke( typename VectorViewType::non_const_value_type>::mag_type MagnitudeType; typedef Kokkos::Details::ArithTraits ATM; - using ScratchPadVectorViewType = Kokkos::View< - typename VectorViewType::non_const_value_type**, - typename VectorViewType::array_layout, - typename VectorViewType::execution_space::scratch_memory_space>; using TeamVectorCopy1D = TeamVectorCopy; const OrdinalType numMatrices = _X.extent(0); diff --git a/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp b/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp index 375de3cd94..933ef97adf 100644 --- a/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp @@ -77,10 +77,6 @@ KOKKOS_INLINE_FUNCTION int TeamGMRES::invoke( typename VectorViewType::non_const_value_type>::mag_type MagnitudeType; typedef Kokkos::Details::ArithTraits ATM; - using ScratchPadVectorViewType = Kokkos::View< - typename VectorViewType::non_const_value_type**, - typename VectorViewType::array_layout, - typename VectorViewType::execution_space::scratch_memory_space>; using TeamCopy1D = TeamCopy; const OrdinalType numMatrices = _X.extent(0); diff --git a/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp index d07b1d1214..aa72e27069 100644 --- a/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp @@ -98,7 +98,7 @@ KOKKOS_INLINE_FUNCTION int TeamVectorSpmvInternal::invoke( const OrdinalType ys1) { #if !defined(__CUDA_ARCH__) && !defined(__HIP_DEVICE_COMPILE__) if (member.team_size() == 1) { - if (N_team != 0 && valuess0 == 1) { + if (N_team > 1 && valuess0 == 1) { /* Left layout as valuess0 = 1 and non-zero vector length given at compilation time. Here we use the SIMD data type which is using Intel diff --git a/batched/sparse/src/KokkosBatched_Spmv.hpp b/batched/sparse/src/KokkosBatched_Spmv.hpp index c76cdbf6e1..06aa92062c 100644 --- a/batched/sparse/src/KokkosBatched_Spmv.hpp +++ b/batched/sparse/src/KokkosBatched_Spmv.hpp @@ -216,7 +216,7 @@ struct TeamSpmv { /// template + unsigned N_team = 1> struct TeamVectorSpmv { template ( member, alpha, d, _r, _c, x, beta, y); else - KokkosBatched::TeamVectorSpmv< - MemberType, typename ParamTagType::trans, - 0>::template invoke( - member, alpha, d, _r, _c, x, beta, y); + KokkosBatched::TeamVectorSpmv:: + template invoke( + member, alpha, d, _r, _c, x, beta, y); } inline void run() { From cc915b19fcb6fa3b2767fa8d50ac80653d1ba3eb Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Mon, 26 Sep 2022 13:17:04 -0600 Subject: [PATCH 102/226] cm_test_all_sandia: testing updates - Update Caraway rocm compiler to version 5.2.0 - Add option to set build parallelism level --- scripts/cm_test_all_sandia | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index 3484e66712..cfb37bece5 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -84,6 +84,8 @@ print_help() { echo "" echo "--enable-perftests: build perftests for Kokkos Kernels (default)" echo "" + echo "--make-par-level=N: Set parallelism level for builds (default: N=12)" + echo "" echo "ARGS: list of expressions matching compilers to test" echo " supported compilers sems" @@ -280,6 +282,8 @@ CTESTTIMEOUT=2500 KOKKOS_DEPRECATED_CODE="" +MAKE_PAR_LEVEL=12 + # # Handle arguments. # @@ -362,6 +366,9 @@ do CXX_STANDARD="${FULL_CXX_STANDARD}" fi ;; + --make-par-level*) + MAKE_PAR_LEVEL="${key#*=}" + ;; --ldflags-extra*) LD_FLAGS_EXTRA="${key#*=}" ;; @@ -846,10 +853,8 @@ elif [ "$MACHINE" = "caraway" ]; then HIPCLANG_WARNING_FLAGS="" # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("rocm/4.3.0 $BASE_MODULE_LIST $HIPCLANG_BUILD_LIST hipcc $HIPCLANG_WARNING_FLAGS" - "rocm/4.5.0 $BASE_MODULE_LIST $HIPCLANG_BUILD_LIST hipcc $HIPCLANG_WARNING_FLAGS" + COMPILERS=("rocm/5.2.0 $BASE_MODULE_LIST $HIPCLANG_BUILD_LIST hipcc $HIPCLANG_WARNING_FLAGS" "cuda/11.4 $CUDA11_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" "gcc/8.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" "gcc/9.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" "gcc/10.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" @@ -857,7 +862,7 @@ elif [ "$MACHINE" = "caraway" ]; then ) if [ -z "$ARCH_FLAG" ]; then - ARCH_FLAG="--arch=VEGA906" + ARCH_FLAG="--arch=VEGA908" fi elif [ "$MACHINE" = "blake" ]; then MODULE_ENVIRONMENT="source /etc/profile.d/modules.sh" @@ -1427,12 +1432,8 @@ single_build_and_test() { run_cmd ${KOKKOSKERNELS_PATH}/cm_generate_makefile.bash --with-devices=$LOCAL_KOKKOS_DEVICES $ARCH_FLAG --compiler=$(which $compiler_exe) --cxxflags=\"$cxxflags\" --cxxstandard=\"$cxx_standard\" --ldflags=\"$ldflags\" $CUDA_ENABLE_CMD $HIP_ENABLE_CMD --kokkos-path=${KOKKOS_PATH} --kokkoskernels-path=${KOKKOSKERNELS_PATH} --with-scalars=$kk_scalars --with-ordinals=${KOKKOSKERNELS_ORDINALS} --with-offsets=${KOKKOSKERNELS_OFFSETS} --with-layouts=${KOKKOSKERNELS_LAYOUTS} ${KOKKOSKERNELS_ENABLE_TPL_CMD} ${KOKKOSKERNELS_TPL_PATH_CMD} ${KOKKOSKERNELS_TPL_LIBS_CMD} ${KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD} ${KOKKOS_BOUNDS_CHECK} ${KOKKOSKERNELS_SPACES} --no-examples ${KOKKOS_DEPRECATED_CODE} $extra_args &>> ${desc}.configure.log || { report_and_log_test_result 1 ${desc} configure && return 0; } - local make_par_lvl=12 - if [[ "$MACHINE" = white* ]]; then - make_par_lvl=48 - fi local -i build_start_time=$(date +%s) - run_cmd make -j $make_par_lvl all >& ${desc}.build.log || { report_and_log_test_result 1 ${desc} build && return 0; } + run_cmd make -j $MAKE_PAR_LEVEL all >& ${desc}.build.log || { report_and_log_test_result 1 ${desc} build && return 0; } local -i build_end_time=$(date +%s) comment="build_time=$(($build_end_time-$build_start_time))" From b7e7bf39222601a46999deff79aa24a7aa40e02d Mon Sep 17 00:00:00 2001 From: kliegeois Date: Mon, 26 Sep 2022 13:22:17 -0600 Subject: [PATCH 103/226] fix the failing tests --- .../impl/KokkosBatched_Spmv_TeamVector_Impl.hpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp index aa72e27069..45f7aa5819 100644 --- a/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp @@ -136,10 +136,7 @@ KOKKOS_INLINE_FUNCTION int TeamVectorSpmvInternal::invoke( sum_v.storeAligned(&Y[iRow * ys1]); } } else { - Kokkos::Impl::integral_nonzero_constant n_team( - numMatrices); - - for (unsigned iMatrix = 0; iMatrix < unsigned(n_team.value); ++iMatrix) { + for (unsigned iMatrix = 0; iMatrix < unsigned(numMatrices); ++iMatrix) { for (OrdinalType iRow = 0; iRow < numRows; ++iRow) { const OrdinalType rowLength = row_ptr[(iRow + 1) * row_ptrs0] - row_ptr[iRow * row_ptrs0]; @@ -222,7 +219,7 @@ KOKKOS_INLINE_FUNCTION int TeamVectorSpmvInternal::invoke( const OrdinalType ys1) { #if !defined(__CUDA_ARCH__) && !defined(__HIP_DEVICE_COMPILE__) if (member.team_size() == 1) { - if (N_team != 0 && valuess0 == 1) { + if (N_team > 1 && valuess0 == 1) { /* Left layout as valuess0 = 1 and non-zero vector length given at compilation time Here we use the SIMD data type which is using Intel @@ -257,10 +254,7 @@ KOKKOS_INLINE_FUNCTION int TeamVectorSpmvInternal::invoke( sum_v.storeAligned(&Y[iRow * ys1]); } } else { - Kokkos::Impl::integral_nonzero_constant n_team( - numMatrices); - - for (unsigned iMatrix = 0; iMatrix < unsigned(n_team.value); ++iMatrix) { + for (unsigned iMatrix = 0; iMatrix < unsigned(numMatrices); ++iMatrix) { for (OrdinalType iRow = 0; iRow < numRows; ++iRow) { const OrdinalType rowLength = row_ptr[(iRow + 1) * row_ptrs0] - row_ptr[iRow * row_ptrs0]; From 832a900acdba52478f3c3d6f2989e52aff100082 Mon Sep 17 00:00:00 2001 From: Daniel Arndt Date: Tue, 27 Sep 2022 14:12:38 +0000 Subject: [PATCH 104/226] SYCL: Fix linking with ze_loader in Trilinos --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index deaf876d38..518340aa9f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -314,11 +314,13 @@ ELSE() $) ENDIF() + # FIXME_SYCL waiting for compiler support IF (KOKKOS_ENABLE_SYCL) SET(KOKKOSKERNELS_INTEL_ARCHS ${Kokkos_ARCH}) LIST(FILTER KOKKOSKERNELS_INTEL_ARCHS INCLUDE REGEX ".*INTEL.*") LIST(LENGTH KOKKOSKERNELS_INTEL_ARCHS KOKKOSKERNELS_INTEL_ARCHS_NUM) - IF(KOKKOSKERNELS_INTEL_ARCHS_NUM GREATER_EQUAL 1) + # Trilinos doesn't see Kokkos_ARCH but sees Kokkos CMake configuration. + IF(KOKKOSKERNELS_INTEL_ARCHS_NUM GREATER_EQUAL 1 OR Kokkos_ARCH_INTEL_XEHP OR Kokkos_ARCH_INTEL_PVC) IF (NOT BUILD_SHARED_LIBS) MESSAGE(SEND_ERROR "At the moment, we require KokkosKernels (and Kokkos) to be built as " From 3562c2386618925ee942feeaaedb14b696b50a0e Mon Sep 17 00:00:00 2001 From: kliegeois Date: Tue, 27 Sep 2022 15:24:41 -0600 Subject: [PATCH 105/226] Avoid the SIMD code branch if the batched size is not a multiple of the vector length --- batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp index 45f7aa5819..b6f614a252 100644 --- a/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp @@ -219,7 +219,7 @@ KOKKOS_INLINE_FUNCTION int TeamVectorSpmvInternal::invoke( const OrdinalType ys1) { #if !defined(__CUDA_ARCH__) && !defined(__HIP_DEVICE_COMPILE__) if (member.team_size() == 1) { - if (N_team > 1 && valuess0 == 1) { + if (N_team > 1 && valuess0 == 1 && valuess1 % N_team == 0) { /* Left layout as valuess0 = 1 and non-zero vector length given at compilation time Here we use the SIMD data type which is using Intel From d4c2168e3ea53f1904c06d925f3619daea57140a Mon Sep 17 00:00:00 2001 From: kliegeois Date: Mon, 26 Sep 2022 09:43:15 -0600 Subject: [PATCH 106/226] Add main functions for batched sparse solver performance tests --- perf_test/batched/CMakeLists.txt | 11 +- perf_test/batched/dense/CMakeLists.txt | 9 + ...okkosBatched_Test_BlockJacobi_Tutorial.cpp | 0 .../KokkosBatched_Test_BlockTridiagDirect.cpp | 0 .../KokkosBatched_Test_BlockTridiagJacobi.cpp | 0 .../KokkosBatched_Test_Gemm_Cuda.cpp | 0 .../KokkosBatched_Test_Gemm_Host.hpp | 0 .../KokkosBatched_Test_Gemm_Host_Complex.cpp | 0 .../KokkosBatched_Test_Gemm_Host_Real.cpp | 0 .../KokkosBatched_Test_Gemv_Host.hpp | 0 .../KokkosBatched_Test_Gemv_Host_Real.cpp | 0 .../do-not-use/KokkosBatched_Test_LU_Cuda.cpp | 0 .../do-not-use/KokkosBatched_Test_LU_Host.hpp | 0 .../KokkosBatched_Test_LU_Host_Real.cpp | 0 .../KokkosBatched_Test_Trsm_Cuda.cpp | 0 .../KokkosBatched_Test_Trsm_Host.hpp | 0 .../KokkosBatched_Test_Trsm_Host_Real.cpp | 0 .../batched/{ => dense}/scripts/profile.sh | 0 .../{ => dense}/scripts/test-thread.sh | 0 .../{ => dense}/scripts/test-workset-hot.sh | 0 .../{ => dense}/scripts/test-workset.sh | 0 perf_test/batched/sparse/.gitignore | 2 + perf_test/batched/sparse/CG/CMakeLists.txt | 7 + .../CG/Functor_TestBatchedTeamVectorCG_1.hpp | 124 ++ .../CG/Functor_TestBatchedTeamVectorCG_2.hpp | 149 ++ .../CG/Functor_TestBatchedTeamVectorCG_3.hpp | 147 ++ .../sparse/CG/KokkosBatched_Test_CG.cpp | 385 ++++ perf_test/batched/sparse/CMakeLists.txt | 8 + perf_test/batched/sparse/GMRES/CMakeLists.txt | 7 + .../Functor_TestBatchedTeamVectorGMRES_1.hpp | 170 ++ .../Functor_TestBatchedTeamVectorGMRES_2.hpp | 214 +++ .../Functor_TestBatchedTeamVectorGMRES_3.hpp | 215 +++ .../sparse/GMRES/KokkosBatched_Test_GMRES.cpp | 484 +++++ .../KokkosBatched_Test_Sparse_Helper.hpp | 294 +++ perf_test/batched/sparse/SPMV/CMakeLists.txt | 7 + .../sparse/SPMV/KokkosBatched_SPMV_View.hpp | 245 +++ .../sparse/SPMV/KokkosBatched_Test_SPMV.cpp | 487 +++++ .../batched/sparse/cusolver/CMakeLists.txt | 11 + .../KokkosBatched_Test_cusolverDn.cpp | 360 ++++ .../KokkosBatched_Test_cusolverSp.cpp | 608 ++++++ perf_test/batched/sparse/data/A.mm | 1627 +++++++++++++++++ perf_test/batched/sparse/data/B.mm | 99 + perf_test/batched/sparse/scripts/.gitignore | 1 + perf_test/batched/sparse/scripts/run_CG.sh | 3 + perf_test/batched/sparse/scripts/run_GMRES.sh | 3 + perf_test/batched/sparse/scripts/run_SPMV.sh | 3 + 46 files changed, 5671 insertions(+), 9 deletions(-) create mode 100644 perf_test/batched/dense/CMakeLists.txt rename perf_test/batched/{ => dense}/KokkosBatched_Test_BlockJacobi_Tutorial.cpp (100%) rename perf_test/batched/{ => dense}/KokkosBatched_Test_BlockTridiagDirect.cpp (100%) rename perf_test/batched/{ => dense}/KokkosBatched_Test_BlockTridiagJacobi.cpp (100%) rename perf_test/batched/{ => dense}/do-not-use/KokkosBatched_Test_Gemm_Cuda.cpp (100%) rename perf_test/batched/{ => dense}/do-not-use/KokkosBatched_Test_Gemm_Host.hpp (100%) rename perf_test/batched/{ => dense}/do-not-use/KokkosBatched_Test_Gemm_Host_Complex.cpp (100%) rename perf_test/batched/{ => dense}/do-not-use/KokkosBatched_Test_Gemm_Host_Real.cpp (100%) rename perf_test/batched/{ => dense}/do-not-use/KokkosBatched_Test_Gemv_Host.hpp (100%) rename perf_test/batched/{ => dense}/do-not-use/KokkosBatched_Test_Gemv_Host_Real.cpp (100%) rename perf_test/batched/{ => dense}/do-not-use/KokkosBatched_Test_LU_Cuda.cpp (100%) rename perf_test/batched/{ => dense}/do-not-use/KokkosBatched_Test_LU_Host.hpp (100%) rename perf_test/batched/{ => dense}/do-not-use/KokkosBatched_Test_LU_Host_Real.cpp (100%) rename perf_test/batched/{ => dense}/do-not-use/KokkosBatched_Test_Trsm_Cuda.cpp (100%) rename perf_test/batched/{ => dense}/do-not-use/KokkosBatched_Test_Trsm_Host.hpp (100%) rename perf_test/batched/{ => dense}/do-not-use/KokkosBatched_Test_Trsm_Host_Real.cpp (100%) rename perf_test/batched/{ => dense}/scripts/profile.sh (100%) rename perf_test/batched/{ => dense}/scripts/test-thread.sh (100%) rename perf_test/batched/{ => dense}/scripts/test-workset-hot.sh (100%) rename perf_test/batched/{ => dense}/scripts/test-workset.sh (100%) create mode 100644 perf_test/batched/sparse/.gitignore create mode 100644 perf_test/batched/sparse/CG/CMakeLists.txt create mode 100644 perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_1.hpp create mode 100644 perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_2.hpp create mode 100644 perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_3.hpp create mode 100644 perf_test/batched/sparse/CG/KokkosBatched_Test_CG.cpp create mode 100644 perf_test/batched/sparse/CMakeLists.txt create mode 100644 perf_test/batched/sparse/GMRES/CMakeLists.txt create mode 100644 perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_1.hpp create mode 100644 perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_2.hpp create mode 100644 perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_3.hpp create mode 100644 perf_test/batched/sparse/GMRES/KokkosBatched_Test_GMRES.cpp create mode 100644 perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp create mode 100644 perf_test/batched/sparse/SPMV/CMakeLists.txt create mode 100644 perf_test/batched/sparse/SPMV/KokkosBatched_SPMV_View.hpp create mode 100644 perf_test/batched/sparse/SPMV/KokkosBatched_Test_SPMV.cpp create mode 100644 perf_test/batched/sparse/cusolver/CMakeLists.txt create mode 100644 perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverDn.cpp create mode 100644 perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverSp.cpp create mode 100644 perf_test/batched/sparse/data/A.mm create mode 100644 perf_test/batched/sparse/data/B.mm create mode 100644 perf_test/batched/sparse/scripts/.gitignore create mode 100755 perf_test/batched/sparse/scripts/run_CG.sh create mode 100755 perf_test/batched/sparse/scripts/run_GMRES.sh create mode 100755 perf_test/batched/sparse/scripts/run_SPMV.sh diff --git a/perf_test/batched/CMakeLists.txt b/perf_test/batched/CMakeLists.txt index d044cf021f..7e1dc3ba02 100644 --- a/perf_test/batched/CMakeLists.txt +++ b/perf_test/batched/CMakeLists.txt @@ -1,9 +1,2 @@ -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) -KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) - -#KOKKOSKERNELS_ADD_EXECUTABLE(KokkosBatched_Test_BlockTridiag -# SOURCES KokkosBatched_Test_BlockTridiagDirect.cpp -#) -#KOKKOSKERNELS_ADD_EXECUTABLE(KokkosBatched_Test_BlockJacobi -# SOURCES KokkosBatched_Test_BlockJacobi_Tutorial.cpp -#) +ADD_SUBDIRECTORY(dense) +ADD_SUBDIRECTORY(sparse) diff --git a/perf_test/batched/dense/CMakeLists.txt b/perf_test/batched/dense/CMakeLists.txt new file mode 100644 index 0000000000..d044cf021f --- /dev/null +++ b/perf_test/batched/dense/CMakeLists.txt @@ -0,0 +1,9 @@ +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) + +#KOKKOSKERNELS_ADD_EXECUTABLE(KokkosBatched_Test_BlockTridiag +# SOURCES KokkosBatched_Test_BlockTridiagDirect.cpp +#) +#KOKKOSKERNELS_ADD_EXECUTABLE(KokkosBatched_Test_BlockJacobi +# SOURCES KokkosBatched_Test_BlockJacobi_Tutorial.cpp +#) diff --git a/perf_test/batched/KokkosBatched_Test_BlockJacobi_Tutorial.cpp b/perf_test/batched/dense/KokkosBatched_Test_BlockJacobi_Tutorial.cpp similarity index 100% rename from perf_test/batched/KokkosBatched_Test_BlockJacobi_Tutorial.cpp rename to perf_test/batched/dense/KokkosBatched_Test_BlockJacobi_Tutorial.cpp diff --git a/perf_test/batched/KokkosBatched_Test_BlockTridiagDirect.cpp b/perf_test/batched/dense/KokkosBatched_Test_BlockTridiagDirect.cpp similarity index 100% rename from perf_test/batched/KokkosBatched_Test_BlockTridiagDirect.cpp rename to perf_test/batched/dense/KokkosBatched_Test_BlockTridiagDirect.cpp diff --git a/perf_test/batched/KokkosBatched_Test_BlockTridiagJacobi.cpp b/perf_test/batched/dense/KokkosBatched_Test_BlockTridiagJacobi.cpp similarity index 100% rename from perf_test/batched/KokkosBatched_Test_BlockTridiagJacobi.cpp rename to perf_test/batched/dense/KokkosBatched_Test_BlockTridiagJacobi.cpp diff --git a/perf_test/batched/do-not-use/KokkosBatched_Test_Gemm_Cuda.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Cuda.cpp similarity index 100% rename from perf_test/batched/do-not-use/KokkosBatched_Test_Gemm_Cuda.cpp rename to perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Cuda.cpp diff --git a/perf_test/batched/do-not-use/KokkosBatched_Test_Gemm_Host.hpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host.hpp similarity index 100% rename from perf_test/batched/do-not-use/KokkosBatched_Test_Gemm_Host.hpp rename to perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host.hpp diff --git a/perf_test/batched/do-not-use/KokkosBatched_Test_Gemm_Host_Complex.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host_Complex.cpp similarity index 100% rename from perf_test/batched/do-not-use/KokkosBatched_Test_Gemm_Host_Complex.cpp rename to perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host_Complex.cpp diff --git a/perf_test/batched/do-not-use/KokkosBatched_Test_Gemm_Host_Real.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host_Real.cpp similarity index 100% rename from perf_test/batched/do-not-use/KokkosBatched_Test_Gemm_Host_Real.cpp rename to perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host_Real.cpp diff --git a/perf_test/batched/do-not-use/KokkosBatched_Test_Gemv_Host.hpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemv_Host.hpp similarity index 100% rename from perf_test/batched/do-not-use/KokkosBatched_Test_Gemv_Host.hpp rename to perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemv_Host.hpp diff --git a/perf_test/batched/do-not-use/KokkosBatched_Test_Gemv_Host_Real.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemv_Host_Real.cpp similarity index 100% rename from perf_test/batched/do-not-use/KokkosBatched_Test_Gemv_Host_Real.cpp rename to perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemv_Host_Real.cpp diff --git a/perf_test/batched/do-not-use/KokkosBatched_Test_LU_Cuda.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Cuda.cpp similarity index 100% rename from perf_test/batched/do-not-use/KokkosBatched_Test_LU_Cuda.cpp rename to perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Cuda.cpp diff --git a/perf_test/batched/do-not-use/KokkosBatched_Test_LU_Host.hpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Host.hpp similarity index 100% rename from perf_test/batched/do-not-use/KokkosBatched_Test_LU_Host.hpp rename to perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Host.hpp diff --git a/perf_test/batched/do-not-use/KokkosBatched_Test_LU_Host_Real.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Host_Real.cpp similarity index 100% rename from perf_test/batched/do-not-use/KokkosBatched_Test_LU_Host_Real.cpp rename to perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Host_Real.cpp diff --git a/perf_test/batched/do-not-use/KokkosBatched_Test_Trsm_Cuda.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Cuda.cpp similarity index 100% rename from perf_test/batched/do-not-use/KokkosBatched_Test_Trsm_Cuda.cpp rename to perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Cuda.cpp diff --git a/perf_test/batched/do-not-use/KokkosBatched_Test_Trsm_Host.hpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Host.hpp similarity index 100% rename from perf_test/batched/do-not-use/KokkosBatched_Test_Trsm_Host.hpp rename to perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Host.hpp diff --git a/perf_test/batched/do-not-use/KokkosBatched_Test_Trsm_Host_Real.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Host_Real.cpp similarity index 100% rename from perf_test/batched/do-not-use/KokkosBatched_Test_Trsm_Host_Real.cpp rename to perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Host_Real.cpp diff --git a/perf_test/batched/scripts/profile.sh b/perf_test/batched/dense/scripts/profile.sh similarity index 100% rename from perf_test/batched/scripts/profile.sh rename to perf_test/batched/dense/scripts/profile.sh diff --git a/perf_test/batched/scripts/test-thread.sh b/perf_test/batched/dense/scripts/test-thread.sh similarity index 100% rename from perf_test/batched/scripts/test-thread.sh rename to perf_test/batched/dense/scripts/test-thread.sh diff --git a/perf_test/batched/scripts/test-workset-hot.sh b/perf_test/batched/dense/scripts/test-workset-hot.sh similarity index 100% rename from perf_test/batched/scripts/test-workset-hot.sh rename to perf_test/batched/dense/scripts/test-workset-hot.sh diff --git a/perf_test/batched/scripts/test-workset.sh b/perf_test/batched/dense/scripts/test-workset.sh similarity index 100% rename from perf_test/batched/scripts/test-workset.sh rename to perf_test/batched/dense/scripts/test-workset.sh diff --git a/perf_test/batched/sparse/.gitignore b/perf_test/batched/sparse/.gitignore new file mode 100644 index 0000000000..84634f77c1 --- /dev/null +++ b/perf_test/batched/sparse/.gitignore @@ -0,0 +1,2 @@ +python +output diff --git a/perf_test/batched/sparse/CG/CMakeLists.txt b/perf_test/batched/sparse/CG/CMakeLists.txt new file mode 100644 index 0000000000..ff0140ee79 --- /dev/null +++ b/perf_test/batched/sparse/CG/CMakeLists.txt @@ -0,0 +1,7 @@ +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/..) + +KOKKOSKERNELS_ADD_EXECUTABLE(KokkosBatched_Test_CG + SOURCES KokkosBatched_Test_CG.cpp +) diff --git a/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_1.hpp b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_1.hpp new file mode 100644 index 0000000000..4d39d9191c --- /dev/null +++ b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_1.hpp @@ -0,0 +1,124 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.4 +// Copyright (2021) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER + +template +struct Functor_TestBatchedTeamVectorCG_1 { + const ValuesViewType _D; + const IntView _r; + const IntView _c; + const VectorViewType _X; + const VectorViewType _B; + const int _N_team, _team_size, _vector_length; + KrylovHandleType _handle; + + KOKKOS_INLINE_FUNCTION + Functor_TestBatchedTeamVectorCG_1(const ValuesViewType &D, const IntView &r, + const IntView &c, const VectorViewType &X, + const VectorViewType &B, const int N_team, + const int team_size, + const int vector_length, + KrylovHandleType &handle) + : _D(D), + _r(r), + _c(c), + _X(X), + _B(B), + _N_team(N_team), + _team_size(team_size), + _vector_length(vector_length), + _handle(handle) {} + + template + KOKKOS_INLINE_FUNCTION void operator()(const MemberType &member) const { + const int first_matrix = _handle.first_index(member.league_rank()); + const int last_matrix = _handle.last_index(member.league_rank()); + + auto d = Kokkos::subview(_D, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + auto x = Kokkos::subview(_X, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + auto b = Kokkos::subview(_B, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + + using Operator = KokkosBatched::CrsMatrix; + + Operator A(d, _r, _c); + + KokkosBatched::TeamVectorCG::template invoke( + member, A, b, x, _handle); + } + + inline double run() { + std::string name("KokkosBatched::Test::TeamCG"); + Kokkos::Timer timer; + Kokkos::Profiling::pushRegion(name.c_str()); + + _handle.set_memory_strategy(1); + + _handle.tmp_view = typename KrylovHandleType::TemporaryViewType( + "", _X.extent(0), 4 * _X.extent(1)); + + Kokkos::TeamPolicy auto_policy( + ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); + Kokkos::TeamPolicy tuned_policy( + ceil(1. * _D.extent(0) / _N_team), _team_size, _vector_length); + Kokkos::TeamPolicy policy; + + if (_team_size < 1) + policy = auto_policy; + else + policy = tuned_policy; + + size_t bytes_0 = ValuesViewType::shmem_size(_N_team, 5); + policy.set_scratch_size(0, Kokkos::PerTeam(bytes_0)); + + timer.reset(); + Kokkos::parallel_for(name.c_str(), policy, *this); + exec_space().fence(); + double sec = timer.seconds(); + Kokkos::Profiling::popRegion(); + + return sec; + } +}; \ No newline at end of file diff --git a/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_2.hpp b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_2.hpp new file mode 100644 index 0000000000..8814d79e23 --- /dev/null +++ b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_2.hpp @@ -0,0 +1,149 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.4 +// Copyright (2021) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER + +template +struct Functor_TestBatchedTeamVectorCG_2 { + const ValuesViewType _D; + const IntView _r; + const IntView _c; + const VectorViewType _X; + const VectorViewType _B; + const int _N_team, _team_size, _vector_length; + KrylovHandleType _handle; + + KOKKOS_INLINE_FUNCTION + Functor_TestBatchedTeamVectorCG_2(const ValuesViewType &D, const IntView &r, + const IntView &c, const VectorViewType &X, + const VectorViewType &B, const int N_team, + const int team_size, + const int vector_length, + KrylovHandleType &handle) + : _D(D), + _r(r), + _c(c), + _X(X), + _B(B), + _N_team(N_team), + _team_size(team_size), + _vector_length(vector_length), + _handle(handle) {} + + template + KOKKOS_INLINE_FUNCTION void operator()(const MemberType &member) const { + const int first_matrix = _handle.first_index(member.league_rank()); + const int last_matrix = _handle.last_index(member.league_rank()); + + using TeamVectorCopy1D = + KokkosBatched::TeamVectorCopy; + + auto d = Kokkos::subview(_D, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + auto x = Kokkos::subview(_X, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + auto b = Kokkos::subview(_B, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + + using ScratchPadIntViewType = + Kokkos::View; + + using Operator = + KokkosBatched::CrsMatrix; + + ScratchPadIntViewType tmp_1D_int(member.team_scratch(0), + _r.extent(0) + _c.extent(0)); + + auto r = + Kokkos::subview(tmp_1D_int, Kokkos::make_pair(0, (int)_r.extent(0))); + auto c = Kokkos::subview( + tmp_1D_int, + Kokkos::make_pair((int)_r.extent(0), (int)tmp_1D_int.extent(0))); + + TeamVectorCopy1D::invoke(member, _r, r); + TeamVectorCopy1D::invoke(member, _c, c); + Operator A(d, r, c); + + KokkosBatched::TeamVectorCG::template invoke( + member, A, b, x, _handle); + } + + inline double run() { + std::string name("KokkosBatched::Test::TeamCG"); + Kokkos::Timer timer; + Kokkos::Profiling::pushRegion(name.c_str()); + + _handle.set_memory_strategy(1); + + _handle.tmp_view = typename KrylovHandleType::TemporaryViewType( + "", _X.extent(0), 4 * _X.extent(1)); + + Kokkos::TeamPolicy auto_policy( + ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); + Kokkos::TeamPolicy tuned_policy( + ceil(1. * _D.extent(0) / _N_team), _team_size, _vector_length); + Kokkos::TeamPolicy policy; + + if (_team_size < 1) + policy = auto_policy; + else + policy = tuned_policy; + + size_t bytes_row_ptr = IntView::shmem_size(_r.extent(0)); + size_t bytes_col_idc = IntView::shmem_size(_c.extent(0)); + size_t bytes_int = bytes_row_ptr + bytes_col_idc; + size_t bytes_0 = ValuesViewType::shmem_size(_N_team, 5); + + policy.set_scratch_size(0, Kokkos::PerTeam(bytes_int + bytes_0)); + + timer.reset(); + Kokkos::parallel_for(name.c_str(), policy, *this); + exec_space().fence(); + double sec = timer.seconds(); + Kokkos::Profiling::popRegion(); + + return sec; + } +}; \ No newline at end of file diff --git a/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_3.hpp b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_3.hpp new file mode 100644 index 0000000000..f753be0e5e --- /dev/null +++ b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_3.hpp @@ -0,0 +1,147 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.4 +// Copyright (2021) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER + +template +struct Functor_TestBatchedTeamVectorCG_3 { + const ValuesViewType _D; + const IntView _r; + const IntView _c; + const VectorViewType _X; + const VectorViewType _B; + const int _N_team, _team_size, _vector_length; + KrylovHandleType _handle; + + KOKKOS_INLINE_FUNCTION + Functor_TestBatchedTeamVectorCG_3(const ValuesViewType &D, const IntView &r, + const IntView &c, const VectorViewType &X, + const VectorViewType &B, const int N_team, + const int team_size, + const int vector_length, + KrylovHandleType &handle) + : _D(D), + _r(r), + _c(c), + _X(X), + _B(B), + _N_team(N_team), + _team_size(team_size), + _vector_length(vector_length), + _handle(handle) {} + + template + KOKKOS_INLINE_FUNCTION void operator()(const MemberType &member) const { + const int first_matrix = _handle.first_index(member.league_rank()); + const int last_matrix = _handle.last_index(member.league_rank()); + + using TeamVectorCopy1D = + KokkosBatched::TeamVectorCopy; + + auto d = Kokkos::subview(_D, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + auto x = Kokkos::subview(_X, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + auto b = Kokkos::subview(_B, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + + using ScratchPadIntViewType = + Kokkos::View; + + using Operator = + KokkosBatched::CrsMatrix; + + ScratchPadIntViewType tmp_1D_int(member.team_scratch(0), + _r.extent(0) + _c.extent(0)); + + auto r = + Kokkos::subview(tmp_1D_int, Kokkos::make_pair(0, (int)_r.extent(0))); + auto c = Kokkos::subview( + tmp_1D_int, + Kokkos::make_pair((int)_r.extent(0), (int)tmp_1D_int.extent(0))); + + TeamVectorCopy1D::invoke(member, _r, r); + TeamVectorCopy1D::invoke(member, _c, c); + Operator A(d, r, c); + + KokkosBatched::TeamVectorCG::template invoke( + member, A, b, x, _handle); + } + + inline double run() { + std::string name("KokkosBatched::Test::TeamCG"); + Kokkos::Timer timer; + Kokkos::Profiling::pushRegion(name.c_str()); + + _handle.set_memory_strategy(0); + + Kokkos::TeamPolicy auto_policy( + ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); + Kokkos::TeamPolicy tuned_policy( + ceil(1. * _D.extent(0) / _N_team), _team_size, _vector_length); + Kokkos::TeamPolicy policy; + + if (_team_size < 1) + policy = auto_policy; + else + policy = tuned_policy; + + size_t bytes_row_ptr = IntView::shmem_size(_r.extent(0)); + size_t bytes_col_idc = IntView::shmem_size(_c.extent(0)); + size_t bytes_int = bytes_row_ptr + bytes_col_idc; + size_t bytes_0 = ValuesViewType::shmem_size(_N_team, 5); + size_t bytes_1 = ValuesViewType::shmem_size(_N_team, 4 * _X.extent(1)); + + policy.set_scratch_size(0, Kokkos::PerTeam(bytes_int + bytes_0 + bytes_1)); + + timer.reset(); + Kokkos::parallel_for(name.c_str(), policy, *this); + exec_space().fence(); + double sec = timer.seconds(); + Kokkos::Profiling::popRegion(); + + return sec; + } +}; \ No newline at end of file diff --git a/perf_test/batched/sparse/CG/KokkosBatched_Test_CG.cpp b/perf_test/batched/sparse/CG/KokkosBatched_Test_CG.cpp new file mode 100644 index 0000000000..fd114272f3 --- /dev/null +++ b/perf_test/batched/sparse/CG/KokkosBatched_Test_CG.cpp @@ -0,0 +1,385 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.4 +// Copyright (2021) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +#include + +/// Kokkos headers +#include "Kokkos_Core.hpp" +#include "Kokkos_Timer.hpp" +#include "Kokkos_Random.hpp" +#include "Kokkos_UnorderedMap.hpp" +#include "Kokkos_Sort.hpp" + +/// KokkosKernels headers +#include "KokkosBatched_Util.hpp" +#include "KokkosBatched_Vector.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "KokkosBatched_Test_Sparse_Helper.hpp" + +#include "KokkosBatched_Spmv.hpp" +#include "KokkosBatched_CrsMatrix.hpp" +#include "KokkosBatched_Krylov_Handle.hpp" +#include "KokkosBatched_CG.hpp" + +typedef Kokkos::DefaultExecutionSpace exec_space; +typedef typename exec_space::memory_space memory_space; +typedef Kokkos::DefaultHostExecutionSpace host_space; +typedef typename Kokkos::Device device; + +#include "Functor_TestBatchedTeamVectorCG_1.hpp" +#include "Functor_TestBatchedTeamVectorCG_2.hpp" +#include "Functor_TestBatchedTeamVectorCG_3.hpp" + +int main(int argc, char *argv[]) { + Kokkos::initialize(argc, argv); + { +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStop(); +#endif + Kokkos::print_configuration(std::cout); + + // typedef Kokkos::Details::ArithTraits ats; + Kokkos::Timer timer; + + /// + /// input arguments parsing + /// + int n_rep_1 = 10; // # of repetitions + int n_rep_2 = 1000; // # of repetitions + int team_size = 8; + int N_team_potential = 8; + int n_impl = 1; + bool layout_left = true; + bool layout_right = false; + bool monitor_convergence = false; + int vector_length = 8; + + std::string name_A = "A.mm"; + std::string name_B = "B.mm"; + + std::string name_timer = "timers"; + std::string name_X = "X"; + std::string name_conv = "res"; + + std::vector impls; + for (int i = 1; i < argc; ++i) { + const std::string &token = argv[i]; + if (token == std::string("--help") || token == std::string("-h")) { + std::cout + << "Kokkos Batched CG performance test options:" << std::endl + << "-A : Filename of the input batched matrix." + << std::endl + << "-B : Filename of the input batched right-hand " + "side." + << std::endl + << "-X : Filename of the output batched solution." + << std::endl + << "-res : Filename of the output residual history." + << std::endl + << "-timers : Filename of the output timers." + << std::endl + << "-n1 : Number of repetitions 1." << std::endl + << "-n2 : Number of repetitions 2." << std::endl + << "-team_size : Used team size." << std::endl + << "-n_implementations: Number of implementations to use: test " + "all " + "implementations [0, specified number -1]." + << std::endl + << "-implementation : Specify only one implementation at a time." + << std::endl + << "-l : Specify left layout." << std::endl + << "-r : Specify right layout." << std::endl + << "-C : Specify if the convergence is monitored." + << std::endl + << "-N_team : Specify the number of systems per team." + << std::endl + << "-vector_length : Specify the vector length." << std::endl + << std::endl; + return 0; + } + if (token == std::string("-A")) name_A = argv[++i]; + if (token == std::string("-B")) name_B = argv[++i]; + + if (token == std::string("-X")) name_X = argv[++i]; + + if (token == std::string("-res")) name_conv = argv[++i]; + + if (token == std::string("-timers")) name_timer = argv[++i]; + + if (token == std::string("-n1")) n_rep_1 = std::atoi(argv[++i]); + if (token == std::string("-n2")) n_rep_2 = std::atoi(argv[++i]); + if (token == std::string("-team_size")) team_size = std::atoi(argv[++i]); + if (token == std::string("-n_implementations")) + n_impl = std::atoi(argv[++i]); + if (token == std::string("-implementation")) + impls.push_back(std::atoi(argv[++i])); + if (token == std::string("-l")) { + layout_left = true; + layout_right = false; + } + if (token == std::string("-r")) { + layout_left = false; + layout_right = true; + } + if (token == std::string("-C")) monitor_convergence = true; + if (token == std::string("-N_team")) + N_team_potential = std::atoi(argv[++i]); + if (token == std::string("-vector_length")) + vector_length = std::atoi(argv[++i]); + } + + int N, Blk, nnz, ncols; + + readSizesFromMM(name_A, Blk, ncols, nnz, N); + + if (impls.size() == 0) + for (int i = 0; i < n_impl; ++i) impls.push_back(i); + + std::cout << "N_team_potential = " << N_team_potential << ", n = " << Blk + << ", N = " << N << ", team_size = " << team_size + << ", vector_length = " << vector_length << std::endl; + + // V100 L2 cache 6MB per core + constexpr size_t LLC_CAPACITY = 80 * 6 * 1024 * 1024; + KokkosBatched::Flush flush; + + printf(" :::: CG Testing (N = %d, Blk = %d, nnz = %d, vl = %d, n = %d)\n", + N, Blk, nnz, vector_length, n_rep_1); + + typedef Kokkos::LayoutRight LR; + typedef Kokkos::LayoutLeft LL; + + using IntView = Kokkos::View; + using AMatrixValueViewLR = Kokkos::View; + using AMatrixValueViewLL = Kokkos::View; + using XYTypeLR = Kokkos::View; + using XYTypeLL = Kokkos::View; + + using alphaViewType = Kokkos::View; + alphaViewType alphaV("alpha", N); + alphaViewType betaV("alpha", N); + + IntView rowOffsets("values", Blk + 1); + IntView colIndices("values", nnz); + AMatrixValueViewLR valuesLR("values", N, nnz); + AMatrixValueViewLL valuesLL("values", N, nnz); + + XYTypeLR xLR("values", N, Blk); + XYTypeLR yLR("values", N, Blk); + + XYTypeLL xLL("values", N, Blk); + XYTypeLL yLL("values", N, Blk); + + if (layout_left) + printf(" :::: Testing left layout (team_size = %d, vector_length = %d)\n", + team_size, vector_length); + if (layout_right) + printf( + " :::: Testing right layout (team_size = %d, vector_length = %d)\n", + team_size, vector_length); + + if (layout_left) { + readCRSFromMM(name_A, valuesLL, rowOffsets, colIndices); + readArrayFromMM(name_B, yLL); + } + if (layout_right) { + readCRSFromMM(name_A, valuesLR, rowOffsets, colIndices); + readArrayFromMM(name_B, yLR); + } + + for (auto i_impl : impls) { + std::vector timers; + + int n_skip = 2; + + int N_team = N_team_potential; + + using ScalarType = typename AMatrixValueViewLL::non_const_value_type; + using Layout = typename AMatrixValueViewLL::array_layout; + using EXSP = typename AMatrixValueViewLL::execution_space; + + using MagnitudeType = + typename Kokkos::Details::ArithTraits::mag_type; + + using Norm2DViewType = Kokkos::View; + using Scalar3DViewType = Kokkos::View; + using IntViewType = Kokkos::View; + + using KrylovHandleType = + KokkosBatched::KrylovHandle; + KrylovHandleType handle(N, N_team); + handle.set_scratch_pad_level(0); + + for (int i_rep = 0; i_rep < n_rep_1 + n_skip; ++i_rep) { + double t_spmv = 0; + for (int j_rep = 0; j_rep < n_rep_2; ++j_rep) { +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStart(); +#endif + exec_space().fence(); + Kokkos::deep_copy(xLL, 0.0); + Kokkos::deep_copy(xLR, 0.0); + flush.run(); + exec_space().fence(); + + exec_space().fence(); + + if (i_impl == 0 && layout_left) { + t_spmv += + Functor_TestBatchedTeamVectorCG_1( + valuesLL, rowOffsets, colIndices, xLL, yLL, N_team, + team_size, vector_length, handle) + .run(); + } + if (i_impl == 1 && layout_left) { + t_spmv += + Functor_TestBatchedTeamVectorCG_2( + valuesLL, rowOffsets, colIndices, xLL, yLL, N_team, + team_size, vector_length, handle) + .run(); + } + if (i_impl == 2 && layout_left) { + t_spmv += + Functor_TestBatchedTeamVectorCG_3( + valuesLL, rowOffsets, colIndices, xLL, yLL, N_team, + team_size, vector_length, handle) + .run(); + } + if (i_impl == 0 && layout_right) { + t_spmv += + Functor_TestBatchedTeamVectorCG_1( + valuesLR, rowOffsets, colIndices, xLR, yLR, N_team, + team_size, vector_length, handle) + .run(); + } + if (i_impl == 1 && layout_right) { + t_spmv += + Functor_TestBatchedTeamVectorCG_2( + valuesLR, rowOffsets, colIndices, xLR, yLR, N_team, + team_size, vector_length, handle) + .run(); + } + if (i_impl == 2 && layout_right) { + t_spmv += + Functor_TestBatchedTeamVectorCG_3( + valuesLR, rowOffsets, colIndices, xLR, yLR, N_team, + team_size, vector_length, handle) + .run(); + } + exec_space().fence(); + +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStop(); +#endif + } + if (i_rep > n_skip) timers.push_back(t_spmv / n_rep_2); + } + + { + std::ofstream myfile; + std::string name; + if (layout_left) + name = name_timer + "_" + std::to_string(i_impl) + "_left.txt"; + if (layout_right) + name = name_timer + "_" + std::to_string(i_impl) + "_right.txt"; + + myfile.open(name); + + for (size_t i = 0; i < timers.size(); ++i) myfile << timers[i] << " "; + + myfile << std::endl; + + myfile.close(); + } + + double average_time = 0.; + + for (size_t i = 0; i < timers.size(); ++i) + average_time += timers[i] / timers.size(); + + if (layout_left) + printf("Left layout: Implementation %d: solve time = %f\n", i_impl, + average_time); + if (layout_right) + printf("Right layout: Implementation %d: solve time = %f\n", i_impl, + average_time); + + if (layout_left) { + writeArrayToMM(name_X + std::to_string(i_impl) + "_l.mm", xLL); + } + if (layout_right) { + writeArrayToMM(name_X + std::to_string(i_impl) + "_r.mm", xLR); + } + if (monitor_convergence) { + writeArrayToMM(name_conv + std::to_string(i_impl) + ".mm", + handle.residual_norms); + } + } + } + Kokkos::finalize(); + + return 0; +} diff --git a/perf_test/batched/sparse/CMakeLists.txt b/perf_test/batched/sparse/CMakeLists.txt new file mode 100644 index 0000000000..76a25d9938 --- /dev/null +++ b/perf_test/batched/sparse/CMakeLists.txt @@ -0,0 +1,8 @@ +ADD_SUBDIRECTORY(CG) +ADD_SUBDIRECTORY(cusolver) +ADD_SUBDIRECTORY(GMRES) +ADD_SUBDIRECTORY(SPMV) + +FILE(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/scripts/binary_dir.txt +"${CMAKE_CURRENT_BINARY_DIR}" +) \ No newline at end of file diff --git a/perf_test/batched/sparse/GMRES/CMakeLists.txt b/perf_test/batched/sparse/GMRES/CMakeLists.txt new file mode 100644 index 0000000000..8874bf4e16 --- /dev/null +++ b/perf_test/batched/sparse/GMRES/CMakeLists.txt @@ -0,0 +1,7 @@ +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/..) + +KOKKOSKERNELS_ADD_EXECUTABLE(KokkosBatched_Test_GMRES + SOURCES KokkosBatched_Test_GMRES.cpp +) diff --git a/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_1.hpp b/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_1.hpp new file mode 100644 index 0000000000..7b5837be31 --- /dev/null +++ b/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_1.hpp @@ -0,0 +1,170 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.4 +// Copyright (2021) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER + +template +struct Functor_TestBatchedTeamVectorGMRES_1 { + const ValuesViewType _D; + const ValuesViewType _diag; + const IntView _r; + const IntView _c; + const VectorViewType _X; + const VectorViewType _B; + const int _N_team, _team_size, _vector_length; + const int _N_iteration; + const double _tol; + const int _ortho_strategy; + const int _arnoldi_level; + const int _other_level; + KrylovHandleType _handle; + + KOKKOS_INLINE_FUNCTION + Functor_TestBatchedTeamVectorGMRES_1( + const ValuesViewType &D, const IntView &r, const IntView &c, + const VectorViewType &X, const VectorViewType &B, const int N_team, + const int team_size, const int vector_length, const int N_iteration, + const double tol, const int ortho_strategy, const int arnoldi_level, + const int other_level, KrylovHandleType &handle) + : _D(D), + _r(r), + _c(c), + _X(X), + _B(B), + _N_team(N_team), + _team_size(team_size), + _vector_length(vector_length), + _N_iteration(N_iteration), + _tol(tol), + _ortho_strategy(ortho_strategy), + _arnoldi_level(arnoldi_level), + _other_level(other_level), + _handle(handle) {} + + KOKKOS_INLINE_FUNCTION + Functor_TestBatchedTeamVectorGMRES_1( + const ValuesViewType &D, const ValuesViewType &diag, const IntView &r, + const IntView &c, const VectorViewType &X, const VectorViewType &B, + const int N_team, const int team_size, const int vector_length, + const int N_iteration, const double tol, int ortho_strategy, + const int arnoldi_level, const int other_level, KrylovHandleType &handle) + : _D(D), + _diag(diag), + _r(r), + _c(c), + _X(X), + _B(B), + _N_team(N_team), + _team_size(team_size), + _vector_length(vector_length), + _N_iteration(N_iteration), + _tol(tol), + _ortho_strategy(ortho_strategy), + _arnoldi_level(arnoldi_level), + _other_level(other_level), + _handle(handle) {} + + template + KOKKOS_INLINE_FUNCTION void operator()(const MemberType &member) const { + const int first_matrix = _handle.first_index(member.league_rank()); + const int last_matrix = _handle.last_index(member.league_rank()); + + auto d = Kokkos::subview(_D, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + auto x = Kokkos::subview(_X, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + auto b = Kokkos::subview(_B, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + + using Operator = KokkosBatched::CrsMatrix; + + Operator A(d, _r, _c); + + if (UsePrec) { + auto diag = Kokkos::subview( + _diag, Kokkos::make_pair(first_matrix, last_matrix), Kokkos::ALL); + using PrecOperator = KokkosBatched::JacobiPrec; + + PrecOperator P(diag); + P.setComputedInverse(); + + KokkosBatched::TeamVectorGMRES::template invoke< + Operator, VectorViewType, PrecOperator, KrylovHandleType>( + member, A, b, x, P, _handle); + } else { + KokkosBatched::TeamVectorGMRES::template invoke< + Operator, VectorViewType>(member, A, b, x, _handle); + } + } + + inline double run() { + std::string name("KokkosBatched::Test::TeamVectorGMRES"); + Kokkos::Timer timer; + Kokkos::Profiling::pushRegion(name.c_str()); + + int maximum_iteration = _handle.get_max_iteration(); + + _handle.set_memory_strategy(1); + + _handle.tmp_view = typename KrylovHandleType::TemporaryViewType( + "", _X.extent(0), _X.extent(1) + maximum_iteration + 3); + + Kokkos::TeamPolicy auto_policy( + ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); + Kokkos::TeamPolicy tuned_policy( + ceil(1. * _D.extent(0) / _N_team), _team_size, _vector_length); + Kokkos::TeamPolicy policy; + + if (_team_size < 1) + policy = auto_policy; + else + policy = tuned_policy; + + exec_space().fence(); + timer.reset(); + Kokkos::parallel_for(name.c_str(), policy, *this); + exec_space().fence(); + double sec = timer.seconds(); + Kokkos::Profiling::popRegion(); + + return sec; + } +}; \ No newline at end of file diff --git a/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_2.hpp b/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_2.hpp new file mode 100644 index 0000000000..e21ab808c7 --- /dev/null +++ b/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_2.hpp @@ -0,0 +1,214 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.4 +// Copyright (2021) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER + +template +struct Functor_TestBatchedTeamVectorGMRES_2 { + const ValuesViewType _D; + const ValuesViewType _diag; + const IntView _r; + const IntView _c; + const VectorViewType _X; + const VectorViewType _B; + const int _N_team, _team_size, _vector_length; + const int _N_iteration; + const double _tol; + const int _ortho_strategy; + const int _arnoldi_level; + const int _other_level; + KrylovHandleType _handle; + + KOKKOS_INLINE_FUNCTION + Functor_TestBatchedTeamVectorGMRES_2( + const ValuesViewType &D, const IntView &r, const IntView &c, + const VectorViewType &X, const VectorViewType &B, const int N_team, + const int team_size, const int vector_length, const int N_iteration, + const double tol, const int ortho_strategy, const int arnoldi_level, + const int other_level, KrylovHandleType &handle) + : _D(D), + _r(r), + _c(c), + _X(X), + _B(B), + _N_team(N_team), + _team_size(team_size), + _vector_length(vector_length), + _N_iteration(N_iteration), + _tol(tol), + _ortho_strategy(ortho_strategy), + _arnoldi_level(arnoldi_level), + _other_level(other_level), + _handle(handle) {} + + KOKKOS_INLINE_FUNCTION + Functor_TestBatchedTeamVectorGMRES_2( + const ValuesViewType &D, const ValuesViewType &diag, const IntView &r, + const IntView &c, const VectorViewType &X, const VectorViewType &B, + const int N_team, const int team_size, const int vector_length, + const int N_iteration, const double tol, int ortho_strategy, + const int arnoldi_level, const int other_level, KrylovHandleType &handle) + : _D(D), + _diag(diag), + _r(r), + _c(c), + _X(X), + _B(B), + _N_team(N_team), + _team_size(team_size), + _vector_length(vector_length), + _N_iteration(N_iteration), + _tol(tol), + _ortho_strategy(ortho_strategy), + _arnoldi_level(arnoldi_level), + _other_level(other_level), + _handle(handle) {} + + template + KOKKOS_INLINE_FUNCTION void operator()(const MemberType &member) const { + const int first_matrix = _handle.first_index(member.league_rank()); + const int last_matrix = _handle.last_index(member.league_rank()); + + using TeamVectorCopy1D = + KokkosBatched::TeamVectorCopy; + + auto d = Kokkos::subview(_D, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + auto x = Kokkos::subview(_X, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + auto b = Kokkos::subview(_B, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + + using ScratchPadIntViewType = + Kokkos::View; + using ScratchPadValuesViewType = Kokkos::View< + typename ValuesViewType::non_const_value_type **, + typename ValuesViewType::array_layout, + typename ValuesViewType::execution_space::scratch_memory_space>; + using Operator = + KokkosBatched::CrsMatrix; + + ScratchPadIntViewType tmp_1D_int(member.team_scratch(0), + _r.extent(0) + _c.extent(0)); + + auto r = + Kokkos::subview(tmp_1D_int, Kokkos::make_pair(0, (int)_r.extent(0))); + auto c = Kokkos::subview( + tmp_1D_int, + Kokkos::make_pair((int)_r.extent(0), (int)tmp_1D_int.extent(0))); + + TeamVectorCopy1D::invoke(member, _r, r); + TeamVectorCopy1D::invoke(member, _c, c); + Operator A(d, r, c); + + if (UsePrec) { + ScratchPadValuesViewType diag( + member.team_scratch(0), last_matrix - first_matrix, _diag.extent(1)); + using PrecOperator = KokkosBatched::JacobiPrec; + + KokkosBatched::TeamVectorCopy::invoke( + member, + Kokkos::subview(_diag, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL), + diag); + PrecOperator P(diag); + P.setComputedInverse(); + + KokkosBatched::TeamVectorGMRES::template invoke< + Operator, VectorViewType, PrecOperator, KrylovHandleType>( + member, A, b, x, P, _handle); + } else { + KokkosBatched::TeamVectorGMRES::template invoke< + Operator, VectorViewType>(member, A, b, x, _handle); + } + } + + inline double run() { + std::string name("KokkosBatched::Test::TeamVectorGMRES"); + Kokkos::Timer timer; + Kokkos::Profiling::pushRegion(name.c_str()); + + Kokkos::TeamPolicy auto_policy( + ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); + Kokkos::TeamPolicy tuned_policy( + ceil(1. * _D.extent(0) / _N_team), _team_size, _vector_length); + Kokkos::TeamPolicy policy; + + if (_team_size < 1) + policy = auto_policy; + else + policy = tuned_policy; + + int maximum_iteration = _handle.get_max_iteration(); + + _handle.set_memory_strategy(1); + + _handle.tmp_view = typename KrylovHandleType::TemporaryViewType( + "", _X.extent(0), _X.extent(1) + maximum_iteration + 3); + + using ScalarType = typename ValuesViewType::non_const_value_type; + using Layout = typename ValuesViewType::array_layout; + using EXSP = typename ValuesViewType::execution_space; + + using ViewType2D = Kokkos::View; + + size_t bytes_row_ptr = IntView::shmem_size(_r.extent(0)); + size_t bytes_col_idc = IntView::shmem_size(_c.extent(0)); + size_t bytes_2D = ViewType2D::shmem_size(_N_team, _X.extent(1)); + + size_t bytes_int = bytes_row_ptr + bytes_col_idc; + size_t bytes_diag = bytes_2D; + + policy.set_scratch_size(0, Kokkos::PerTeam(bytes_diag + bytes_int)); + + exec_space().fence(); + timer.reset(); + Kokkos::parallel_for(name.c_str(), policy, *this); + exec_space().fence(); + double sec = timer.seconds(); + Kokkos::Profiling::popRegion(); + + return sec; + } +}; \ No newline at end of file diff --git a/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_3.hpp b/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_3.hpp new file mode 100644 index 0000000000..4f833b92e8 --- /dev/null +++ b/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_3.hpp @@ -0,0 +1,215 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.4 +// Copyright (2021) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER + +template +struct Functor_TestBatchedTeamVectorGMRES_3 { + const ValuesViewType _D; + const ValuesViewType _diag; + const IntView _r; + const IntView _c; + const VectorViewType _X; + const VectorViewType _B; + const int _N_team, _team_size, _vector_length; + const int _N_iteration; + const double _tol; + const int _ortho_strategy; + const int _arnoldi_level; + const int _other_level; + KrylovHandleType _handle; + + KOKKOS_INLINE_FUNCTION + Functor_TestBatchedTeamVectorGMRES_3( + const ValuesViewType &D, const IntView &r, const IntView &c, + const VectorViewType &X, const VectorViewType &B, const int N_team, + const int team_size, const int vector_length, const int N_iteration, + const double tol, const int ortho_strategy, const int arnoldi_level, + const int other_level, KrylovHandleType &handle) + : _D(D), + _r(r), + _c(c), + _X(X), + _B(B), + _N_team(N_team), + _team_size(team_size), + _vector_length(vector_length), + _N_iteration(N_iteration), + _tol(tol), + _ortho_strategy(ortho_strategy), + _arnoldi_level(arnoldi_level), + _other_level(other_level), + _handle(handle) {} + + KOKKOS_INLINE_FUNCTION + Functor_TestBatchedTeamVectorGMRES_3( + const ValuesViewType &D, const ValuesViewType &diag, const IntView &r, + const IntView &c, const VectorViewType &X, const VectorViewType &B, + const int N_team, const int team_size, const int vector_length, + const int N_iteration, const double tol, int ortho_strategy, + const int arnoldi_level, const int other_level, KrylovHandleType &handle) + : _D(D), + _diag(diag), + _r(r), + _c(c), + _X(X), + _B(B), + _N_team(N_team), + _team_size(team_size), + _vector_length(vector_length), + _N_iteration(N_iteration), + _tol(tol), + _ortho_strategy(ortho_strategy), + _arnoldi_level(arnoldi_level), + _other_level(other_level), + _handle(handle) {} + + template + KOKKOS_INLINE_FUNCTION void operator()(const MemberType &member) const { + const int first_matrix = _handle.first_index(member.league_rank()); + const int last_matrix = _handle.last_index(member.league_rank()); + + using TeamVectorCopy1D = + KokkosBatched::TeamVectorCopy; + + auto d = Kokkos::subview(_D, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + auto x = Kokkos::subview(_X, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + auto b = Kokkos::subview(_B, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL); + + using ScratchPadIntViewType = + Kokkos::View; + using ScratchPadValuesViewType = Kokkos::View< + typename ValuesViewType::non_const_value_type **, + typename ValuesViewType::array_layout, + typename ValuesViewType::execution_space::scratch_memory_space>; + using Operator = + KokkosBatched::CrsMatrix; + + ScratchPadIntViewType tmp_1D_int(member.team_scratch(0), + _r.extent(0) + _c.extent(0)); + + auto r = + Kokkos::subview(tmp_1D_int, Kokkos::make_pair(0, (int)_r.extent(0))); + auto c = Kokkos::subview( + tmp_1D_int, + Kokkos::make_pair((int)_r.extent(0), (int)tmp_1D_int.extent(0))); + + TeamVectorCopy1D::invoke(member, _r, r); + TeamVectorCopy1D::invoke(member, _c, c); + Operator A(d, r, c); + + if (UsePrec) { + ScratchPadValuesViewType diag( + member.team_scratch(0), last_matrix - first_matrix, _diag.extent(1)); + using PrecOperator = KokkosBatched::JacobiPrec; + + KokkosBatched::TeamVectorCopy::invoke( + member, + Kokkos::subview(_diag, Kokkos::make_pair(first_matrix, last_matrix), + Kokkos::ALL), + diag); + PrecOperator P(diag); + P.setComputedInverse(); + + KokkosBatched::TeamVectorGMRES::template invoke< + Operator, VectorViewType, PrecOperator, KrylovHandleType>( + member, A, b, x, P, _handle); + } else { + KokkosBatched::TeamVectorGMRES::template invoke< + Operator, VectorViewType>(member, A, b, x, _handle); + } + } + + inline double run() { + std::string name("KokkosBatched::Test::TeamVectorGMRES"); + Kokkos::Timer timer; + Kokkos::Profiling::pushRegion(name.c_str()); + + Kokkos::TeamPolicy auto_policy( + ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); + Kokkos::TeamPolicy tuned_policy( + ceil(1. * _D.extent(0) / _N_team), _team_size, _vector_length); + Kokkos::TeamPolicy policy; + + if (_team_size < 1) + policy = auto_policy; + else + policy = tuned_policy; + + _handle.set_memory_strategy(0); + + int maximum_iteration = _handle.get_max_iteration(); + + using ScalarType = typename ValuesViewType::non_const_value_type; + using Layout = typename ValuesViewType::array_layout; + using EXSP = typename ValuesViewType::execution_space; + + using ViewType2D = Kokkos::View; + + size_t bytes_1D = ViewType2D::shmem_size(_N_team, 1); + size_t bytes_row_ptr = IntView::shmem_size(_r.extent(0)); + size_t bytes_col_idc = IntView::shmem_size(_c.extent(0)); + size_t bytes_2D_1 = ViewType2D::shmem_size(_N_team, _X.extent(1)); + size_t bytes_2D_2 = ViewType2D::shmem_size(_N_team, maximum_iteration + 1); + + size_t bytes_int = bytes_row_ptr + bytes_col_idc; + size_t bytes_diag = bytes_2D_1; + size_t bytes_tmp = 2 * bytes_2D_1 + 2 * bytes_1D + bytes_2D_2; + + policy.set_scratch_size( + 0, Kokkos::PerTeam(bytes_tmp + bytes_diag + bytes_int)); + + exec_space().fence(); + timer.reset(); + Kokkos::parallel_for(name.c_str(), policy, *this); + exec_space().fence(); + double sec = timer.seconds(); + Kokkos::Profiling::popRegion(); + + return sec; + } +}; \ No newline at end of file diff --git a/perf_test/batched/sparse/GMRES/KokkosBatched_Test_GMRES.cpp b/perf_test/batched/sparse/GMRES/KokkosBatched_Test_GMRES.cpp new file mode 100644 index 0000000000..81576caeb6 --- /dev/null +++ b/perf_test/batched/sparse/GMRES/KokkosBatched_Test_GMRES.cpp @@ -0,0 +1,484 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.4 +// Copyright (2021) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#include + +#define KOKKOSKERNELS_DEBUG_LEVEL 0 + +/// Kokkos headers +#include "Kokkos_Core.hpp" +#include "Kokkos_Timer.hpp" +#include "Kokkos_Random.hpp" +#include "Kokkos_UnorderedMap.hpp" +#include "Kokkos_Sort.hpp" + +/// KokkosKernels headers +#include "KokkosBatched_Util.hpp" +#include "KokkosBatched_Vector.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "KokkosBatched_Test_Sparse_Helper.hpp" + +#include "KokkosBatched_Spmv.hpp" +#include "KokkosBatched_CrsMatrix.hpp" +#include "KokkosBatched_Krylov_Handle.hpp" +#include "KokkosBatched_GMRES.hpp" +#include "KokkosBatched_JacobiPrec.hpp" +#include "KokkosBatched_Dot.hpp" +#include "KokkosBatched_Util.hpp" +#include "KokkosBatched_Dot_Internal.hpp" +#include "KokkosBatched_Spmv_Serial_Impl.hpp" +#include "KokkosBatched_Copy_Decl.hpp" + +typedef Kokkos::DefaultExecutionSpace exec_space; +typedef typename exec_space::memory_space memory_space; +typedef Kokkos::DefaultHostExecutionSpace host_space; +typedef typename Kokkos::Device device; + +#include "Functor_TestBatchedTeamVectorGMRES_1.hpp" +#include "Functor_TestBatchedTeamVectorGMRES_2.hpp" +#include "Functor_TestBatchedTeamVectorGMRES_3.hpp" + +int main(int argc, char *argv[]) { + Kokkos::initialize(argc, argv); + { +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStop(); +#endif + Kokkos::print_configuration(std::cout); + + // typedef Kokkos::Details::ArithTraits ats; + + /// + /// input arguments parsing + /// + int n_rep_1 = 10; // # of repetitions + int n_rep_2 = 1000; // # of repetitions + int team_size = 8; + int n_impl = 1; + int n_iterations = 10; + double tol = 1e-8; + bool layout_left = true; + bool layout_right = false; + bool use_preconditioner = false; + bool monitor_convergence = false; + int vector_length = 8; + int N_team_potential = 1; + int ortho_strategy = 0; + int other_level = 0; + int arnoldi_level = 0; + + std::string name_A = "A.mm"; + std::string name_B = "B.mm"; + + std::string name_timer = "timers"; + std::string name_X = "X"; + std::string name_conv = "res"; + + std::vector impls; + for (int i = 1; i < argc; ++i) { + const std::string &token = argv[i]; + if (token == std::string("--help") || token == std::string("-h")) { + std::cout + << "Kokkos Batched GMRES performance test options:" << std::endl + << "-A : Filename of the input batched matrix." + << std::endl + << "-B : Filename of the input batched right-hand " + "side." + << std::endl + << "-X : Filename of the output batched solution." + << std::endl + << "-res : Filename of the output residual history." + << std::endl + << "-timers : Filename of the output timers." + << std::endl + << "-ortho_strategy : Select the orthogonalization strategy." + << std::endl + << "-arnoldi_level : Select the scratch pad level (if used) " + "where Arnoldi vectors are stored." + << std::endl + << "-other_level : Select the scratch pad level (if used) " + "where everything except the Arnoldi vectors are stored." + << std::endl + << "-n1 : Number of repetitions 1." << std::endl + << "-n2 : Number of repetitions 2." << std::endl + << "-team_size : Used team size." << std::endl + << "-n_implementations: Number of implementations to use: test " + "all " + "implementations [0, specified number -1]." + << std::endl + << "-implementation : Specify only one implementation at a time." + << std::endl + << "-l : Specify left layout." << std::endl + << "-r : Specify right layout." << std::endl + << "-P : Specify if a Jacobi preconditioner is " + "used." + << std::endl + << "-C : Specify if the convergence is monitored." + << std::endl + << "-N_team : Specify the number of systems per team." + << std::endl + << "-vector_length : Specify the vector length." << std::endl + << std::endl; + return 0; + } + if (token == std::string("-A")) name_A = argv[++i]; + if (token == std::string("-B")) name_B = argv[++i]; + if (token == std::string("-X")) name_X = argv[++i]; + if (token == std::string("-res")) name_conv = argv[++i]; + if (token == std::string("-timers")) name_timer = argv[++i]; + if (token == std::string("-ortho_strategy")) + ortho_strategy = std::atoi(argv[++i]); + if (token == std::string("-arnoldi_level")) + arnoldi_level = std::atoi(argv[++i]); + if (token == std::string("-other_level")) + other_level = std::atoi(argv[++i]); + if (token == std::string("-n1")) n_rep_1 = std::atoi(argv[++i]); + if (token == std::string("-n2")) n_rep_2 = std::atoi(argv[++i]); + if (token == std::string("-n_iterations")) + n_iterations = std::atoi(argv[++i]); + if (token == std::string("-tol")) tol = std::stod(argv[++i]); + if (token == std::string("-team_size")) team_size = std::atoi(argv[++i]); + if (token == std::string("-N_team")) + N_team_potential = std::atoi(argv[++i]); + if (token == std::string("-vector_length")) + vector_length = std::atoi(argv[++i]); + if (token == std::string("-n_implementations")) + n_impl = std::atoi(argv[++i]); + if (token == std::string("-implementation")) + impls.push_back(std::atoi(argv[++i])); + if (token == std::string("-l")) { + layout_left = true; + layout_right = false; + } + if (token == std::string("-r")) { + layout_left = false; + layout_right = true; + } + if (token == std::string("-P")) use_preconditioner = true; + if (token == std::string("-C")) monitor_convergence = true; + } + + int N, Blk, nnz, ncols; + + readSizesFromMM(name_A, Blk, ncols, nnz, N); + + std::cout << "N_team_potential = " << N_team_potential << ", n = " << Blk + << ", N = " << N << ", team_size = " << team_size + << ", vector_length = " << vector_length << std::endl; + + if (impls.size() == 0) + for (int i = 0; i < n_impl; ++i) impls.push_back(i); + + // V100 L2 cache 6MB per core + constexpr size_t LLC_CAPACITY = 80 * 6 * 1024 * 1024; + KokkosBatched::Flush flush; + + printf( + " :::: GMRES Testing (N = %d, Blk = %d, nnz = %d, vl = %d, n = %d)\n", + N, Blk, nnz, vector_length, n_rep_1); + + typedef Kokkos::LayoutRight LR; + typedef Kokkos::LayoutLeft LL; + + using IntView = Kokkos::View; + using AMatrixValueViewLR = Kokkos::View; + using AMatrixValueViewLL = Kokkos::View; + using XYTypeLR = Kokkos::View; + using XYTypeLL = Kokkos::View; + + using alphaViewType = Kokkos::View; + alphaViewType alphaV("alpha", N); + alphaViewType betaV("alpha", N); + + IntView rowOffsets("values", Blk + 1); + IntView colIndices("values", nnz); + AMatrixValueViewLR valuesLR("values", N, nnz); + AMatrixValueViewLL valuesLL("values", N, nnz); + + AMatrixValueViewLR diagLR("values", N, Blk); + AMatrixValueViewLL diagLL("values", N, Blk); + + XYTypeLR xLR("values", N, Blk); + XYTypeLR yLR("values", N, Blk); + + XYTypeLL xLL("values", N, Blk); + XYTypeLL yLL("values", N, Blk); + + if (layout_left) + printf(" :::: Testing left layout (team_size = %d)\n", team_size); + if (layout_right) + printf(" :::: Testing right layout (team_size = %d)\n", team_size); + + if (layout_left) { + readCRSFromMM(name_A, valuesLL, rowOffsets, colIndices); + readArrayFromMM(name_B, yLL); + if (use_preconditioner) + getInvDiagFromCRS(valuesLL, rowOffsets, colIndices, diagLL); + } + if (layout_right) { + readCRSFromMM(name_A, valuesLR, rowOffsets, colIndices); + readArrayFromMM(name_B, yLR); + if (use_preconditioner) + getInvDiagFromCRS(valuesLR, rowOffsets, colIndices, diagLR); + } + + for (auto i_impl : impls) { + std::vector timers; + + int n_skip = 2; + + int N_team = N_team_potential; + + using ScalarType = typename AMatrixValueViewLL::non_const_value_type; + using Layout = typename AMatrixValueViewLL::array_layout; + using EXSP = typename AMatrixValueViewLL::execution_space; + + using MagnitudeType = + typename Kokkos::Details::ArithTraits::mag_type; + + using Norm2DViewType = Kokkos::View; + using Scalar3DViewType = Kokkos::View; + using IntViewType = Kokkos::View; + + using KrylovHandleType = + KokkosBatched::KrylovHandle; + KrylovHandleType handle(N, N_team, n_iterations, true); + handle.Arnoldi_view = + Scalar3DViewType("", N, n_iterations, Blk + n_iterations + 3); + // handle.tmp_view = typename KrylovHandleType::TemporaryViewType( + // "", N, Blk + n_iterations + 3); + + handle.set_max_iteration(n_iterations); + handle.set_tolerance(tol); + handle.set_ortho_strategy(ortho_strategy); + handle.set_scratch_pad_level(0); + handle.set_compute_last_residual(false); + + for (int i_rep = 0; i_rep < n_rep_1 + n_skip; ++i_rep) { + double t_spmv = 0; + for (int j_rep = 0; j_rep < n_rep_2; ++j_rep) { +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStart(); +#endif + exec_space().fence(); + Kokkos::deep_copy(xLL, 0.0); + Kokkos::deep_copy(xLR, 0.0); + flush.run(); + exec_space().fence(); + + exec_space().fence(); + + if (i_impl == 0 && layout_left) { + if (use_preconditioner) + t_spmv += Functor_TestBatchedTeamVectorGMRES_1< + exec_space, AMatrixValueViewLL, IntView, XYTypeLL, + KrylovHandleType, true>( + valuesLL, diagLL, rowOffsets, colIndices, xLL, yLL, + N_team, team_size, vector_length, n_iterations, tol, + ortho_strategy, arnoldi_level, other_level, handle) + .run(); + else + t_spmv += Functor_TestBatchedTeamVectorGMRES_1< + exec_space, AMatrixValueViewLL, IntView, XYTypeLL, + KrylovHandleType, false>( + valuesLL, rowOffsets, colIndices, xLL, yLL, N_team, + team_size, vector_length, n_iterations, tol, + ortho_strategy, arnoldi_level, other_level, handle) + .run(); + } + if (i_impl == 1 && layout_left) { + if (use_preconditioner) + t_spmv += Functor_TestBatchedTeamVectorGMRES_2< + exec_space, AMatrixValueViewLL, IntView, XYTypeLL, + KrylovHandleType, true>( + valuesLL, diagLL, rowOffsets, colIndices, xLL, yLL, + N_team, team_size, vector_length, n_iterations, tol, + ortho_strategy, arnoldi_level, other_level, handle) + .run(); + else + t_spmv += Functor_TestBatchedTeamVectorGMRES_2< + exec_space, AMatrixValueViewLL, IntView, XYTypeLL, + KrylovHandleType, false>( + valuesLL, rowOffsets, colIndices, xLL, yLL, N_team, + team_size, vector_length, n_iterations, tol, + ortho_strategy, arnoldi_level, other_level, handle) + .run(); + } + if (i_impl == 2 && layout_left) { + if (use_preconditioner) + t_spmv += Functor_TestBatchedTeamVectorGMRES_3< + exec_space, AMatrixValueViewLL, IntView, XYTypeLL, + KrylovHandleType, true>( + valuesLL, diagLL, rowOffsets, colIndices, xLL, yLL, + N_team, team_size, vector_length, n_iterations, tol, + ortho_strategy, arnoldi_level, other_level, handle) + .run(); + else + t_spmv += Functor_TestBatchedTeamVectorGMRES_3< + exec_space, AMatrixValueViewLL, IntView, XYTypeLL, + KrylovHandleType, false>( + valuesLL, rowOffsets, colIndices, xLL, yLL, N_team, + team_size, vector_length, n_iterations, tol, + ortho_strategy, arnoldi_level, other_level, handle) + .run(); + } + if (i_impl == 0 && layout_right) { + if (use_preconditioner) + t_spmv += Functor_TestBatchedTeamVectorGMRES_1< + exec_space, AMatrixValueViewLR, IntView, XYTypeLR, + KrylovHandleType, true>( + valuesLR, diagLR, rowOffsets, colIndices, xLR, yLR, + N_team, team_size, vector_length, n_iterations, tol, + ortho_strategy, arnoldi_level, other_level, handle) + .run(); + else + t_spmv += Functor_TestBatchedTeamVectorGMRES_1< + exec_space, AMatrixValueViewLR, IntView, XYTypeLR, + KrylovHandleType, false>( + valuesLR, rowOffsets, colIndices, xLR, yLR, N_team, + team_size, vector_length, n_iterations, tol, + ortho_strategy, arnoldi_level, other_level, handle) + .run(); + } + if (i_impl == 1 && layout_right) { + if (use_preconditioner) + t_spmv += Functor_TestBatchedTeamVectorGMRES_2< + exec_space, AMatrixValueViewLR, IntView, XYTypeLR, + KrylovHandleType, true>( + valuesLR, diagLR, rowOffsets, colIndices, xLR, yLR, + N_team, team_size, vector_length, n_iterations, tol, + ortho_strategy, arnoldi_level, other_level, handle) + .run(); + else + t_spmv += Functor_TestBatchedTeamVectorGMRES_2< + exec_space, AMatrixValueViewLR, IntView, XYTypeLR, + KrylovHandleType, false>( + valuesLR, rowOffsets, colIndices, xLR, yLR, N_team, + team_size, vector_length, n_iterations, tol, + ortho_strategy, arnoldi_level, other_level, handle) + .run(); + } + if (i_impl == 2 && layout_right) { + if (use_preconditioner) + t_spmv += Functor_TestBatchedTeamVectorGMRES_3< + exec_space, AMatrixValueViewLR, IntView, XYTypeLR, + KrylovHandleType, true>( + valuesLR, diagLR, rowOffsets, colIndices, xLR, yLR, + N_team, team_size, vector_length, n_iterations, tol, + ortho_strategy, arnoldi_level, other_level, handle) + .run(); + else + t_spmv += Functor_TestBatchedTeamVectorGMRES_3< + exec_space, AMatrixValueViewLR, IntView, XYTypeLR, + KrylovHandleType, false>( + valuesLR, rowOffsets, colIndices, xLR, yLR, N_team, + team_size, vector_length, n_iterations, tol, + ortho_strategy, arnoldi_level, other_level, handle) + .run(); + } + exec_space().fence(); + +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStop(); +#endif + } + if (i_rep > n_skip) timers.push_back(t_spmv / n_rep_2); + } + + { + std::ofstream myfile; + std::string name; + if (layout_left) + name = name_timer + "_" + std::to_string(i_impl) + "_left.txt"; + if (layout_right) + name = name_timer + "_" + std::to_string(i_impl) + "_right.txt"; + + myfile.open(name); + + for (size_t i = 0; i < timers.size(); ++i) myfile << timers[i] << " "; + + myfile << std::endl; + + myfile.close(); + } + + double average_time = 0.; + + for (size_t i = 0; i < timers.size(); ++i) + average_time += timers[i] / timers.size(); + + if (layout_left) + printf("Left layout: Implementation %d: solve time = %f\n", i_impl, + average_time); + if (layout_right) + printf("Right layout: Implementation %d: solve time = %f\n", i_impl, + average_time); + + if (layout_left) { + writeArrayToMM(name_X + std::to_string(i_impl) + "_l.mm", xLL); + } + if (layout_right) { + writeArrayToMM(name_X + std::to_string(i_impl) + "_r.mm", xLR); + } + if (monitor_convergence) { + writeArrayToMM(name_conv + std::to_string(i_impl) + ".mm", + handle.residual_norms); + } + } + } + Kokkos::finalize(); + + return 0; +} diff --git a/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp b/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp new file mode 100644 index 0000000000..47a73ca2c2 --- /dev/null +++ b/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp @@ -0,0 +1,294 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.4 +// Copyright (2021) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER + +template +void writeArrayToMM(std::string name, const XType x) { + std::ofstream myfile; + myfile.open(name); + + typename XType::HostMirror x_h = Kokkos::create_mirror_view(x); + + Kokkos::deep_copy(x_h, x); + + myfile << "%% MatrixMarket 2D Array\n%" << std::endl; + myfile << x_h.extent(0) << " " << x_h.extent(1) << std::endl; + + for (size_t i = 0; i < x_h.extent(0); ++i) { + for (size_t j = 0; j < x_h.extent(1); ++j) { + myfile << std::setprecision(15) << x_h(i, j) << " "; + } + myfile << std::endl; + } + + myfile.close(); +} + +void readSizesFromMM(std::string name, int &nrows, int &ncols, int &nnz, + int &N) { + std::ifstream input(name); + while (input.peek() == '%') + input.ignore(std::numeric_limits::max(), '\n'); + + std::string line_sizes; + + getline(input, line_sizes); + + std::stringstream iss(line_sizes); + + int number; + std::vector sizes; + while (iss >> number) sizes.push_back(number); + + nrows = sizes[0]; + ncols = sizes[1]; + + nnz = 0; + N = 0; + + if (sizes.size() >= 3) nnz = sizes[2]; + + if (sizes.size() == 4) N = sizes[3]; +} + +template +void readArrayFromMM(std::string name, const XType &x) { + std::ifstream input(name); + + while (input.peek() == '%') + input.ignore(std::numeric_limits::max(), '\n'); + input.ignore(std::numeric_limits::max(), '\n'); + + typename XType::HostMirror x_h = Kokkos::create_mirror_view(x); + + for (size_t i = 0; i < x_h.extent(0); ++i) + for (size_t j = 0; j < x_h.extent(1); ++j) input >> x_h(i, j); + + input.close(); + + Kokkos::deep_copy(x, x_h); + + /* + std::ofstream myfile; + myfile.open("x-data.txt"); + + + for (size_t i = 0; i < x_h.extent(0); ++i) { + for (size_t j = 0; j < x_h.extent(1); ++j) { + myfile << std::setprecision (15) << x_h(i, j) << " "; + } + myfile << std::endl; + } + + myfile.close(); + */ +} + +template +void readDenseFromMM(std::string name, const AType &A) { + std::ifstream input(name); + + while (input.peek() == '%') + input.ignore(std::numeric_limits::max(), '\n'); + input.ignore(std::numeric_limits::max(), '\n'); + + typename AType::HostMirror A_h = Kokkos::create_mirror_view(A); + + Kokkos::deep_copy(A_h, 0.); + + int read_row; + int read_col; + + int N, Blk, nnz, nrows; + readSizesFromMM(name, Blk, nrows, nnz, N); + + for (int i = 0; i < nnz; ++i) { + input >> read_row >> read_col; + --read_row; + --read_col; + + for (int j = 0; j < N; ++j) input >> A_h(j, read_row, read_col); + } + + input.close(); + + Kokkos::deep_copy(A, A_h); +} + +template +void readCRSFromMM(std::string name, const VType &V, const IntType &r, + const IntType &c) { + std::ifstream input(name); + + while (input.peek() == '%') + input.ignore(std::numeric_limits::max(), '\n'); + input.ignore(std::numeric_limits::max(), '\n'); + + typename VType::HostMirror V_h = Kokkos::create_mirror_view(V); + typename IntType::HostMirror r_h = Kokkos::create_mirror_view(r); + typename IntType::HostMirror c_h = Kokkos::create_mirror_view(c); + + int current_row = 0; + int read_row; + + size_t nnz = c_h.extent(0); + int nrows = r_h.extent(0) - 1; + + r_h(0) = 0; + + for (size_t i = 0; i < nnz; ++i) { + input >> read_row >> c_h(i); + --read_row; + --c_h(i); + for (int tmp_row = current_row + 1; tmp_row <= read_row; ++tmp_row) + r_h(tmp_row) = i; + current_row = read_row; + + // if (VType::Rank == 1) + // input >> V_h(i); + if (VType::Rank == 2) + for (size_t j = 0; j < V_h.extent(0); ++j) input >> V_h(j, i); + } + + r_h(nrows) = nnz; + + input.close(); + + Kokkos::deep_copy(V, V_h); + Kokkos::deep_copy(r, r_h); + Kokkos::deep_copy(c, c_h); + + /* + std::ofstream myfile; + myfile.open("a-data.txt"); + + + for (size_t i = 0; i < nrows; ++i) { + for (size_t j = r_h(i); j < r_h(i+1); ++j) { + myfile << std::setprecision (15) << i+1 << " " << c_h(j)+1 << " " << + V_h(0, j) << std::endl; + } + } + + myfile.close(); + */ +} + +template +void getInvDiagFromCRS(const VType &V, const IntType &r, const IntType &c, + const VType &diag) { + auto diag_values_host = Kokkos::create_mirror_view(diag); + auto values_host = Kokkos::create_mirror_view(V); + auto row_ptr_host = Kokkos::create_mirror_view(r); + auto colIndices_host = Kokkos::create_mirror_view(c); + + Kokkos::deep_copy(values_host, V); + Kokkos::deep_copy(row_ptr_host, r); + Kokkos::deep_copy(colIndices_host, c); + + int current_index; + int N = diag.extent(0); + int BlkSize = diag.extent(1); + + for (int i = 0; i < BlkSize; ++i) { + for (current_index = row_ptr_host(i); current_index < row_ptr_host(i + 1); + ++current_index) { + if (colIndices_host(current_index) == i) break; + } + for (int j = 0; j < N; ++j) + diag_values_host(j, i) = 1. / values_host(j, current_index); + } + + Kokkos::deep_copy(diag, diag_values_host); + + /* + std::ofstream myfile; + myfile.open("a-diag.txt"); + + + for (size_t i = 0; i < BlkSize; ++i) { + myfile << std::setprecision (15) << i+1 << " " << diag_values_host(0, i) + << std::endl; + } + + myfile.close(); + */ +} + +template +int launch_parameters(int numRows, int nnz, int rows_per_thread, int &team_size, + int vector_length) { + int rows_per_team; + int nnz_per_row = nnz / numRows; + if (nnz_per_row < 1) nnz_per_row = 1; + + // Determine rows per thread + if (rows_per_thread < 1) { +#ifdef KOKKOS_ENABLE_CUDA + if (std::is_same::value) + rows_per_thread = 1; + else +#endif + { + if (nnz_per_row < 20 && nnz > 5000000) { + rows_per_thread = 256; + } else + rows_per_thread = 64; + } + } + +#ifdef KOKKOS_ENABLE_CUDA + if (team_size < 1) team_size = 256 / vector_length; +#endif + + rows_per_team = rows_per_thread * team_size; + + if (rows_per_team < 0) { + int nnz_per_team = 4096; + int conc = execution_space::concurrency(); + while ((conc * nnz_per_team * 4 > nnz) && (nnz_per_team > 256)) + nnz_per_team /= 2; + int tmp_nnz_per_row = nnz / numRows; + rows_per_team = (nnz_per_team + tmp_nnz_per_row - 1) / tmp_nnz_per_row; + } + + return rows_per_team; +} diff --git a/perf_test/batched/sparse/SPMV/CMakeLists.txt b/perf_test/batched/sparse/SPMV/CMakeLists.txt new file mode 100644 index 0000000000..877a25aa5f --- /dev/null +++ b/perf_test/batched/sparse/SPMV/CMakeLists.txt @@ -0,0 +1,7 @@ +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/..) + +KOKKOSKERNELS_ADD_EXECUTABLE(KokkosBatched_Test_SPMV + SOURCES KokkosBatched_Test_SPMV.cpp +) diff --git a/perf_test/batched/sparse/SPMV/KokkosBatched_SPMV_View.hpp b/perf_test/batched/sparse/SPMV/KokkosBatched_SPMV_View.hpp new file mode 100644 index 0000000000..fb693cb206 --- /dev/null +++ b/perf_test/batched/sparse/SPMV/KokkosBatched_SPMV_View.hpp @@ -0,0 +1,245 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.4 +// Copyright (2021) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER + +template +struct BSPMV_Functor_View { + typedef typename AMatrix::execution_space exec_space; + typedef typename AMatrix::non_const_value_type value_type; + typedef typename IntView::non_const_value_type ordinal_type; + typedef typename Kokkos::TeamPolicy team_policy; + typedef typename team_policy::member_type team_member; + typedef typename AMatrix::non_const_value_type entries_type; + typedef Kokkos::Details::ArithTraits ATV; + + const value_type* alpha; + const AMatrix m_A_values; + const IntView m_A_row_ptr; + const IntView m_A_col_indices; + XVector m_x; + const value_type* beta; + YVector m_y; + const ordinal_type matrices_per_team; + const int N; + int implementation; + + BSPMV_Functor_View(const value_type* alpha_, const AMatrix m_A_values_, + const IntView m_A_row_ptr_, const IntView m_A_col_indices_, + const XVector m_x_, const value_type* beta_, + const YVector m_y_, const int matrices_per_team_, + const int N_, const int implementation_ = 0) + : alpha(alpha_), + m_A_values(m_A_values_), + m_A_row_ptr(m_A_row_ptr_), + m_A_col_indices(m_A_col_indices_), + m_x(m_x_), + beta(beta_), + m_y(m_y_), + matrices_per_team(matrices_per_team_), + N(N_), + implementation(implementation_) { + static_assert(static_cast(AMatrix::rank) == 2, + "AMatrix must be a rank 2 View."); + static_assert(static_cast(IntView::rank) == 1, + "IntView must be a rank 1 View."); + static_assert(static_cast(XVector::rank) == 2, + "XVector must be a rank 2 View."); + static_assert(static_cast(YVector::rank) == 2, + "YVector must be a rank 2 View."); + } + + KOKKOS_INLINE_FUNCTION void getIndices(const ordinal_type iTemp, + const ordinal_type n_rows, + const ordinal_type n_matrices, + ordinal_type& iRow, + ordinal_type& iMatrix) const { + if (std::is_same::value) { + iRow = iTemp / n_matrices; + iMatrix = iTemp % n_matrices; + } else { + iRow = iTemp % n_rows; + iMatrix = iTemp / n_rows; + } + } + + KOKKOS_INLINE_FUNCTION void operator()(const team_member& dev) const { + if (implementation == 0) { + const int first_matrix = + static_cast(dev.league_rank()) * matrices_per_team; + const int last_matrix = + static_cast(dev.league_rank() + 1) * matrices_per_team < N + ? static_cast(dev.league_rank() + 1) * matrices_per_team + : N; + const ordinal_type n_rows = m_A_row_ptr.extent(0) - 1; + + for (int i_matrix = first_matrix; i_matrix < last_matrix; ++i_matrix) { + Kokkos::parallel_for( + Kokkos::TeamThreadRange(dev, 0, n_rows), + [&](const ordinal_type& iRow) { + const ordinal_type row_length = + m_A_row_ptr(iRow + 1) - m_A_row_ptr(iRow); + value_type sum = 0; + + Kokkos::parallel_reduce( + Kokkos::ThreadVectorRange(dev, row_length), + [&](const ordinal_type& iEntry, value_type& lsum) { + const value_type val = + m_A_values(i_matrix, m_A_row_ptr(iRow) + iEntry); + lsum += + val * m_x(i_matrix, + m_A_col_indices(m_A_row_ptr(iRow) + iEntry)); + }, + sum); + + Kokkos::single(Kokkos::PerThread(dev), [&]() { + sum *= alpha[i_matrix]; + + if (dobeta == 0) { + m_y(i_matrix, iRow) = sum; + } else { + m_y(i_matrix, iRow) = + beta[i_matrix] * m_y(i_matrix, iRow) + sum; + } + }); + }); + } + } + if (implementation == 1) { + const int first_matrix = + static_cast(dev.league_rank()) * matrices_per_team; + const int last_matrix = + static_cast(dev.league_rank() + 1) * matrices_per_team < N + ? static_cast(dev.league_rank() + 1) * matrices_per_team + : N; + const int n_matrices = last_matrix - first_matrix; + const ordinal_type n_rows = m_A_row_ptr.extent(0) - 1; + + Kokkos::parallel_for( + Kokkos::TeamVectorRange(dev, 0, n_rows * n_matrices), + [&](const ordinal_type& iTemp) { + ordinal_type iRow, iMatrix; + this->getIndices(iTemp, n_rows, n_matrices, iRow, iMatrix); + const int iGlobalMatrix = first_matrix + iMatrix; + + const ordinal_type row_length = + m_A_row_ptr(iRow + 1) - m_A_row_ptr(iRow); + value_type sum = 0; + +#if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) +#pragma unroll +#endif + for (int iEntry = 0; iEntry < row_length; ++iEntry) { + sum += m_A_values(iGlobalMatrix, m_A_row_ptr(iRow) + iEntry) * + m_x(iGlobalMatrix, + m_A_col_indices(m_A_row_ptr(iRow) + iEntry)); + } + + sum *= alpha[iGlobalMatrix]; + + if (dobeta == 0) { + m_y(iGlobalMatrix, iRow) = sum; + } else { + m_y(iGlobalMatrix, iRow) = + beta[iGlobalMatrix] * m_y(iGlobalMatrix, iRow) + sum; + } + }); + } + if (implementation == 2) { + using ScratchPadIntView = + Kokkos::View; + + const ordinal_type n_rows = m_A_row_ptr.extent(0) - 1; + const ordinal_type nnz = m_A_col_indices.extent(0); + + ScratchPadIntView cols(dev.team_scratch(0), nnz); + ScratchPadIntView row_map(dev.team_scratch(0), n_rows + 1); + + Kokkos::parallel_for( + Kokkos::TeamVectorRange(dev, 0, n_rows + 1), + [&](const ordinal_type& i) { row_map(i) = m_A_row_ptr(i); }); + + Kokkos::parallel_for( + Kokkos::TeamVectorRange(dev, 0, nnz), + [&](const ordinal_type& i) { cols(i) = m_A_col_indices(i); }); + + dev.team_barrier(); + + const int first_matrix = + static_cast(dev.league_rank()) * matrices_per_team; + const int last_matrix = + static_cast(dev.league_rank() + 1) * matrices_per_team < N + ? static_cast(dev.league_rank() + 1) * matrices_per_team + : N; + const int n_matrices = last_matrix - first_matrix; + + Kokkos::parallel_for( + Kokkos::TeamVectorRange(dev, 0, n_rows * n_matrices), + [&](const ordinal_type& iTemp) { + ordinal_type iRow, iMatrix; + this->getIndices(iTemp, n_rows, n_matrices, iRow, iMatrix); + const int iGlobalMatrix = first_matrix + iMatrix; + + const ordinal_type row_length = row_map(iRow + 1) - row_map(iRow); + value_type sum = 0; + +#if defined(KOKKOS_ENABLE_PRAGMA_UNROLL) +#pragma unroll +#endif + for (int iEntry = 0; iEntry < row_length; ++iEntry) { + sum += m_A_values(iGlobalMatrix, row_map(iRow) + iEntry) * + m_x(iGlobalMatrix, cols(row_map(iRow) + iEntry)); + } + + sum *= alpha[iGlobalMatrix]; + + if (dobeta == 0) { + m_y(iGlobalMatrix, iRow) = sum; + } else { + m_y(iGlobalMatrix, iRow) = + beta[iGlobalMatrix] * m_y(iGlobalMatrix, iRow) + sum; + } + }); + } + } +}; \ No newline at end of file diff --git a/perf_test/batched/sparse/SPMV/KokkosBatched_Test_SPMV.cpp b/perf_test/batched/sparse/SPMV/KokkosBatched_Test_SPMV.cpp new file mode 100644 index 0000000000..a04464829b --- /dev/null +++ b/perf_test/batched/sparse/SPMV/KokkosBatched_Test_SPMV.cpp @@ -0,0 +1,487 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.4 +// Copyright (2021) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#include + +/// Kokkos headers +#include "Kokkos_Core.hpp" +#include "Kokkos_Timer.hpp" +#include "Kokkos_Random.hpp" +#include "Kokkos_UnorderedMap.hpp" +#include "Kokkos_Sort.hpp" + +/// KokkosKernels headers +#include "KokkosBatched_Util.hpp" +#include "KokkosBatched_Vector.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "KokkosBatched_Test_Sparse_Helper.hpp" + +#include "KokkosBatched_Spmv.hpp" + +typedef Kokkos::DefaultExecutionSpace exec_space; +typedef typename exec_space::memory_space memory_space; +typedef Kokkos::DefaultHostExecutionSpace host_space; +typedef typename Kokkos::Device device; + +template +struct Functor_TestBatchedTeamVectorSpmv { + PolicyType _policy; + const alphaViewType _alpha; + const DViewType _D; + const IntView _r; + const IntView _c; + const xViewType _X; + const betaViewType _beta; + const yViewType _Y; + int _matrices_per_team; + + KOKKOS_INLINE_FUNCTION + Functor_TestBatchedTeamVectorSpmv( + PolicyType policy, const alphaViewType &alpha, const DViewType &D, + const IntView &r, const IntView &c, const xViewType &X, + const betaViewType &beta, const yViewType &Y, const int matrices_per_team) + : _policy(policy), + _alpha(alpha), + _D(D), + _r(r), + _c(c), + _X(X), + _beta(beta), + _Y(Y), + _matrices_per_team(matrices_per_team) {} + + template + KOKKOS_INLINE_FUNCTION void operator()(const MemberType &member) const { + // int team_size = member.team_size(); + // printf("team_size %d\n", team_size); + // std::cout << "member.team_size() = " << member.team_size() << std::endl; + const int first_matrix = + static_cast(member.league_rank()) * _matrices_per_team; + const int N = _D.extent(0); + const int last_matrix = + (static_cast(member.league_rank() + 1) * _matrices_per_team < N + ? static_cast(member.league_rank() + 1) * _matrices_per_team + : N); + + auto alpha_team = + Kokkos::subview(_alpha, Kokkos::make_pair(first_matrix, last_matrix)); + auto D_team = Kokkos::subview( + _D, Kokkos::make_pair(first_matrix, last_matrix), Kokkos::ALL); + auto X_team = Kokkos::subview( + _X, Kokkos::make_pair(first_matrix, last_matrix), Kokkos::ALL); + auto beta_team = + Kokkos::subview(_beta, Kokkos::make_pair(first_matrix, last_matrix)); + auto Y_team = Kokkos::subview( + _Y, Kokkos::make_pair(first_matrix, last_matrix), Kokkos::ALL); + + using ScratchPadIntView = + Kokkos::View; + + const int n_rows = _r.extent(0) - 1; + const int nnz = _c.extent(0); + + ScratchPadIntView cols(member.team_scratch(0), nnz); + ScratchPadIntView row_map(member.team_scratch(0), n_rows + 1); + + Kokkos::parallel_for(Kokkos::TeamVectorRange(member, 0, n_rows + 1), + [&](const int &i) { row_map(i) = _r(i); }); + + Kokkos::parallel_for(Kokkos::TeamVectorRange(member, 0, nnz), + [&](const int &i) { cols(i) = _c(i); }); + + member.team_barrier(); + + if (last_matrix != N && _matrices_per_team == 8) + KokkosBatched::TeamVectorSpmv< + MemberType, KokkosBatched::Trans::NoTranspose, + 8>::template invoke( + member, alpha_team, D_team, row_map, cols, X_team, beta_team, Y_team); + else + KokkosBatched::TeamVectorSpmv< + MemberType, KokkosBatched::Trans::NoTranspose, + 1>::template invoke( + member, alpha_team, D_team, row_map, cols, X_team, beta_team, Y_team); + } + + inline void run() { + Kokkos::parallel_for("KokkosSparse::PerfTest::BSpMV", _policy, *this); + } +}; + +int main(int argc, char *argv[]) { + Kokkos::initialize(argc, argv); + { +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStop(); +#endif + Kokkos::print_configuration(std::cout); + + // typedef Kokkos::Details::ArithTraits ats; + Kokkos::Timer timer; + + /// + /// input arguments parsing + /// + int n_rep_1 = 10; // # of repetitions + int n_rep_2 = 1000; // # of repetitions + int team_size = 8; + int vector_length = 8; + int N_team_potential = 8; + int n_impl = 1; + bool layout_left = true; + bool layout_right = false; + + std::string name_A = "A.mm"; + std::string name_B = "B.mm"; + + std::string name_timer = "timers"; + std::string name_X = "X"; + + std::vector impls; + for (int i = 1; i < argc; ++i) { + const std::string &token = argv[i]; + if (token == std::string("--help") || token == std::string("-h")) { + std::cout + << "Kokkos Batched SPMV performance test options:" << std::endl + << "-A : Filename of the input batched matrix." + << std::endl + << "-B : Filename of the input batched right-hand " + "side." + << std::endl + << "-X : Filename of the output batched solution." + << std::endl + << "-timers : Filename of the output timers." + << std::endl + << "-n1 : Number of repetitions 1." << std::endl + << "-n2 : Number of repetitions 2." << std::endl + << "-team_size : Used team size." << std::endl + << "-n_implementations: Number of implementations to use: test " + "all " + "implementations [0, specified number -1]." + << std::endl + << "-implementation : Specify only one implementation at a time." + << std::endl + << "-l : Specify left layout." << std::endl + << "-r : Specify right layout." << std::endl + << "-N_team : Specify the number of systems per team." + << std::endl + << "-vector_length : Specify the vector length." << std::endl + << std::endl; + return 0; + } + if (token == std::string("-A")) name_A = argv[++i]; + if (token == std::string("-B")) name_B = argv[++i]; + + if (token == std::string("-X")) name_X = argv[++i]; + + if (token == std::string("-timers")) name_timer = argv[++i]; + + if (token == std::string("-n1")) n_rep_1 = std::atoi(argv[++i]); + if (token == std::string("-n2")) n_rep_2 = std::atoi(argv[++i]); + if (token == std::string("-vector_length")) + vector_length = std::atoi(argv[++i]); + if (token == std::string("-N_team")) + N_team_potential = std::atoi(argv[++i]); + if (token == std::string("-team_size")) team_size = std::atoi(argv[++i]); + if (token == std::string("-n_implementations")) + n_impl = std::atoi(argv[++i]); + if (token == std::string("-implementation")) + impls.push_back(std::atoi(argv[++i])); + if (token == std::string("-l")) { + layout_left = true; + layout_right = false; + } + if (token == std::string("-r")) { + layout_left = false; + layout_right = true; + } + } + + int N, Blk, nnz, ncols; + + int internal_vector_length = 2; + + readSizesFromMM(name_A, Blk, ncols, nnz, N); + + if (impls.size() == 0) + for (int i = 0; i < n_impl; ++i) impls.push_back(i); + + // V100 L2 cache 6MB per core + constexpr size_t LLC_CAPACITY = 80 * 6 * 1024 * 1024; + KokkosBatched::Flush flush; + + printf( + " :::: Testing (N = %d, Blk = %d, nnz = %d, vl = %d, vi = %d, n = " + "%d, N_team_potential = %d)\n", + N, Blk, nnz, vector_length, internal_vector_length, n_rep_1, + N_team_potential); + + typedef Kokkos::LayoutRight LR; + typedef Kokkos::LayoutLeft LL; + + using IntView = Kokkos::View; + using AMatrixValueViewLR = Kokkos::View; + using AMatrixValueViewLL = Kokkos::View; + using XYTypeLR = Kokkos::View; + using XYTypeLL = Kokkos::View; + + using alphaViewType = Kokkos::View; + alphaViewType alphaV("alpha", N); + alphaViewType betaV("alpha", N); + + IntView rowOffsets("values", Blk + 1); + IntView colIndices("values", nnz); + AMatrixValueViewLR valuesLR("values", N, nnz); + AMatrixValueViewLL valuesLL("values", N, nnz); + + XYTypeLR xLR("values", N, Blk); + XYTypeLR yLR("values", N, Blk); + + XYTypeLL xLL("values", N, Blk); + XYTypeLL yLL("values", N, Blk); + + double *s_a = new double[N]; + double *s_b = new double[N]; + + if (layout_left) + printf(" :::: Testing left layout (team_size = %d)\n", team_size); + if (layout_right) + printf(" :::: Testing right layout (team_size = %d)\n", team_size); + + if (layout_left) { + readCRSFromMM(name_A, valuesLL, rowOffsets, colIndices); + readArrayFromMM(name_B, xLL); + } + if (layout_right) { + readCRSFromMM(name_A, valuesLR, rowOffsets, colIndices); + readArrayFromMM(name_B, xLR); + } + + auto alphaV_h = Kokkos::create_mirror_view(alphaV); + auto betaV_h = Kokkos::create_mirror_view(betaV); + + for (int i = 0; i < N; ++i) { + s_a[i] = 1.; + s_b[i] = 0.; + alphaV_h(i) = s_a[i]; + betaV_h(i) = s_b[i]; + } + + Kokkos::deep_copy(alphaV, alphaV_h); + Kokkos::deep_copy(betaV, betaV_h); + + using ScratchPadIntView = + Kokkos::View; + + for (auto i_impl : impls) { + std::vector timers; + + int n_skip = 2; + + for (int i_rep = 0; i_rep < n_rep_1 + n_skip; ++i_rep) { + double t_spmv = 0; + for (int j_rep = 0; j_rep < n_rep_2; ++j_rep) { +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStart(); +#endif + exec_space().fence(); + if (n_rep_2 != 1) flush.run(); + exec_space().fence(); + + timer.reset(); + exec_space().fence(); + + int N_team = i_impl == 0 ? 1 : N_team_potential; + N_team = N_team_potential; + int number_of_teams = i_impl == 0 ? N : ceil(1. * N / N_team); + + if (layout_left) { + using policy_type = Kokkos::TeamPolicy; + policy_type auto_policy(number_of_teams, Kokkos::AUTO(), + Kokkos::AUTO()); + policy_type tuned_policy(number_of_teams, team_size, + Kokkos::AUTO()); + policy_type tuned_policy_2(number_of_teams, team_size, + vector_length); + policy_type policy; + + if (team_size < 1) + policy = auto_policy; + else if (vector_length < 1) + policy = tuned_policy; + else + policy = tuned_policy_2; + + // std::cout << "auto_policy.team_size() = " << + // auto_policy.team_size() << std::endl; + + size_t bytes_0 = ScratchPadIntView::shmem_size(Blk + 1); + size_t bytes_1 = ScratchPadIntView::shmem_size(nnz); + if (i_impl > 1) + policy.set_scratch_size(0, Kokkos::PerTeam(bytes_0 + bytes_1)); + // policy.set_scratch_size(1, Kokkos::PerTeam(bytes_1)); + if (i_impl == 3) { + Functor_TestBatchedTeamVectorSpmv< + policy_type, AMatrixValueViewLL, IntView, XYTypeLL, XYTypeLL, + alphaViewType, alphaViewType, 0>(policy, alphaV, valuesLL, + rowOffsets, colIndices, xLL, + betaV, yLL, N_team) + .run(); + } else { + Kokkos::parallel_for( + "KokkosSparse::PerfTest::BSpMV", policy, + BSPMV_Functor_View(s_a, valuesLL, rowOffsets, + colIndices, xLL, s_b, yLL, + N_team, N, i_impl)); + } + } + if (layout_right) { + using policy_type = Kokkos::TeamPolicy; + policy_type auto_policy(number_of_teams, Kokkos::AUTO(), + Kokkos::AUTO()); + policy_type tuned_policy(number_of_teams, team_size, + Kokkos::AUTO()); + policy_type tuned_policy_2(number_of_teams, team_size, + vector_length); + policy_type policy; + + if (team_size < 1) + policy = auto_policy; + else if (vector_length < 1) + policy = tuned_policy; + else + policy = tuned_policy_2; + + size_t bytes_0 = ScratchPadIntView::shmem_size(Blk + 1); + size_t bytes_1 = ScratchPadIntView::shmem_size(nnz); + if (i_impl > 1) + policy.set_scratch_size(0, Kokkos::PerTeam(bytes_0 + bytes_1)); + // policy.set_scratch_size(1, Kokkos::PerTeam(bytes_1)); + if (i_impl == 3) { + Functor_TestBatchedTeamVectorSpmv< + policy_type, AMatrixValueViewLR, IntView, XYTypeLR, XYTypeLR, + alphaViewType, alphaViewType, 0>(policy, alphaV, valuesLR, + rowOffsets, colIndices, xLR, + betaV, yLR, N_team) + .run(); + } else { + Kokkos::parallel_for( + "KokkosSparse::PerfTest::BSpMV", policy, + BSPMV_Functor_View(s_a, valuesLR, rowOffsets, + colIndices, xLR, s_b, yLR, + N_team, N, i_impl)); + } + } + exec_space().fence(); + t_spmv += timer.seconds(); +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStop(); +#endif + } + if (i_rep > n_skip) timers.push_back(t_spmv / n_rep_2); + } + + { + std::ofstream myfile; + std::string name; + if (layout_left) + name = name_timer + "_" + std::to_string(i_impl) + "_left.txt"; + if (layout_right) + name = name_timer + "_" + std::to_string(i_impl) + "_right.txt"; + + myfile.open(name); + + for (size_t i = 0; i < timers.size(); ++i) myfile << timers[i] << " "; + + myfile << std::endl; + + myfile.close(); + } + + double average_time = 0.; + + for (size_t i = 0; i < timers.size(); ++i) + average_time += timers[i] / timers.size(); + + if (layout_left) + printf( + "Left layout: Implementation %d: solve time = %f , # of SPMV per " + "min = %f\n", + i_impl, average_time, 1.0 / average_time * 60 * N); + if (layout_right) + printf( + "Right layout: Implementation %d: solve time = %f , # of SPMV per " + "min = %f\n", + i_impl, average_time, 1.0 / average_time * 60 * N); + + if (layout_left) { + writeArrayToMM(name_X + std::to_string(i_impl) + "_l.mm", xLL); + } + if (layout_right) { + writeArrayToMM(name_X + std::to_string(i_impl) + "_r.mm", xLR); + } + } + } + Kokkos::finalize(); + + return 0; +} diff --git a/perf_test/batched/sparse/cusolver/CMakeLists.txt b/perf_test/batched/sparse/cusolver/CMakeLists.txt new file mode 100644 index 0000000000..9a883873b0 --- /dev/null +++ b/perf_test/batched/sparse/cusolver/CMakeLists.txt @@ -0,0 +1,11 @@ +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) +KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/..) + +KOKKOSKERNELS_ADD_EXECUTABLE(KokkosBatched_Test_cusolverDn + SOURCES KokkosBatched_Test_cusolverDn.cpp +) + +KOKKOSKERNELS_ADD_EXECUTABLE(KokkosBatched_Test_cusolverSp + SOURCES KokkosBatched_Test_cusolverSp.cpp +) diff --git a/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverDn.cpp b/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverDn.cpp new file mode 100644 index 0000000000..f386ace952 --- /dev/null +++ b/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverDn.cpp @@ -0,0 +1,360 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.4 +// Copyright (2021) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#include + +#define KOKKOSKERNELS_DEBUG_LEVEL 0 + +/// Kokkos headers +#include "Kokkos_Core.hpp" +#include "Kokkos_Timer.hpp" +#include "Kokkos_Random.hpp" +#include "Kokkos_UnorderedMap.hpp" +#include "Kokkos_Sort.hpp" + +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE + +#include +#include "cusolverSp.h" +#include "cusolverDn.h" + +#include "KokkosKernels_config.h" +#include "KokkosKernels_SparseUtils_cusparse.hpp" + +/// KokkosKernels headers +#include "KokkosBatched_Util.hpp" +#include "KokkosBatched_Vector.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "KokkosBatched_Test_Sparse_Helper.hpp" + +#include "KokkosBatched_Spmv.hpp" +#include "KokkosBatched_CrsMatrix.hpp" +#include "KokkosBatched_Krylov_Handle.hpp" +#include "KokkosBatched_Gesv.hpp" +#include "KokkosBatched_JacobiPrec.hpp" +#include "KokkosBatched_Dot.hpp" +#include "KokkosBatched_Util.hpp" +#include "KokkosBatched_Dot_Internal.hpp" +#include "KokkosBatched_Spmv_Serial_Impl.hpp" +#include "KokkosBatched_Copy_Decl.hpp" + +typedef Kokkos::DefaultExecutionSpace exec_space; +typedef typename exec_space::memory_space memory_space; +typedef Kokkos::DefaultHostExecutionSpace host_space; +typedef typename Kokkos::Device device; + +template +struct Functor_Test_BatchedDenseCuSolve { + const MatrixViewType _A; + const VectorViewType _X; + const VectorViewType _B; + + KOKKOS_INLINE_FUNCTION + Functor_Test_BatchedDenseCuSolve(const MatrixViewType &A, + const VectorViewType &X, + const VectorViewType &B) + : _A(A), _X(X), _B(B) {} + + inline double run() { + std::string name("KokkosBatched::Test::TeamGESV"); + Kokkos::Timer timer; + Kokkos::Profiling::pushRegion(name.c_str()); + cusolverDnHandle_t handle = NULL; + cusolverDnCreate(&handle); + + const cublasFillMode_t uplo = CUBLAS_FILL_MODE_LOWER; + + const int batchSize = _A.extent(0); + const int m = _A.extent(1); + const int lda = m; + const int ldb = m; + + MatrixViewType A(" ", batchSize, m, m); + Kokkos::deep_copy(A, _A); + Kokkos::deep_copy(_X, _B); + + int *d_infoArray = NULL; + int *info = NULL; + + double **d_Aarray = nullptr; + double **d_Barray = nullptr; + + cudaMalloc(reinterpret_cast(&d_Aarray), + sizeof(double *) * batchSize); + cudaMalloc(reinterpret_cast(&d_Barray), + sizeof(double *) * batchSize); + + std::vector Aarray(batchSize, nullptr); + std::vector Barray(batchSize, nullptr); + for (int i = 0; i < batchSize; ++i) { + Aarray[i] = Kokkos::subview(A, i, Kokkos::ALL, Kokkos::ALL).data(); + Barray[i] = Kokkos::subview(_X, i, Kokkos::ALL).data(); + } + + cudaMemcpyAsync(d_Aarray, Aarray.data(), sizeof(double *) * batchSize, + cudaMemcpyHostToDevice); + cudaMemcpyAsync(d_Barray, Barray.data(), sizeof(double *) * batchSize, + cudaMemcpyHostToDevice); + + cudaDeviceSynchronize(); + exec_space().fence(); + timer.reset(); + auto status1 = cusolverDnDpotrfBatched(handle, uplo, m, d_Aarray, lda, + d_infoArray, batchSize); + if (status1 != CUSOLVER_STATUS_SUCCESS) + std::cout << "Error in cusolverDnDpotrfBatched with batchSize = " + << batchSize << " and m = " << m << std::endl; + cudaDeviceSynchronize(); + auto status2 = cusolverDnDpotrsBatched(handle, uplo, m, 1, d_Aarray, lda, + d_Barray, ldb, info, batchSize); + if (status2 != CUSOLVER_STATUS_SUCCESS) { + if (status2 == CUSOLVER_STATUS_NOT_INITIALIZED) + std::cout << "Error in cusolverDnDpotrsBatched with batchSize = " + << batchSize << " and m = " << m + << " CUSOLVER_STATUS_NOT_INITIALIZED " << std::endl; + if (status2 == CUSOLVER_STATUS_INVALID_VALUE) + std::cout << "Error in cusolverDnDpotrsBatched with batchSize = " + << batchSize << " and m = " << m + << " CUSOLVER_STATUS_INVALID_VALUE " << std::endl; + if (status2 == CUSOLVER_STATUS_INTERNAL_ERROR) + std::cout << "Error in cusolverDnDpotrsBatched with batchSize = " + << batchSize << " and m = " << m + << " CUSOLVER_STATUS_INTERNAL_ERROR " << std::endl; + cudaDeviceSynchronize(); + exec_space().fence(); + Kokkos::Profiling::popRegion(); + return 1e8; + } + cudaDeviceSynchronize(); + exec_space().fence(); + double sec = timer.seconds(); + Kokkos::Profiling::popRegion(); + + return sec; + } +}; + +int main(int argc, char *argv[]) { + Kokkos::initialize(argc, argv); + { +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStop(); +#endif + Kokkos::print_configuration(std::cout); + + // typedef Kokkos::Details::ArithTraits ats; + + /// + /// input arguments parsing + /// + int n_rep_1 = 10; // # of repetitions + int team_size = 8; + int n_impl = 1; + bool layout_left = true; + bool layout_right = false; + int vector_length = 8; + + std::string name_A = "A.mm"; + std::string name_B = "B.mm"; + + std::string name_timer = "timers"; + std::string name_X = "X"; + + std::vector impls; + for (int i = 1; i < argc; ++i) { + const std::string &token = argv[i]; + if (token == std::string("-A")) name_A = argv[++i]; + if (token == std::string("-B")) name_B = argv[++i]; + if (token == std::string("-X")) name_X = argv[++i]; + if (token == std::string("-timers")) name_timer = argv[++i]; + if (token == std::string("-team_size")) team_size = std::atoi(argv[++i]); + if (token == std::string("-vector_length")) + vector_length = std::atoi(argv[++i]); + if (token == std::string("-n_implementations")) + n_impl = std::atoi(argv[++i]); + if (token == std::string("-implementation")) + impls.push_back(std::atoi(argv[++i])); + if (token == std::string("-l")) { + layout_left = true; + layout_right = false; + } + if (token == std::string("-r")) { + layout_left = false; + layout_right = true; + } + } + + int N, Blk, nnz, ncols; + + readSizesFromMM(name_A, Blk, ncols, nnz, N); + + std::cout << "n = " << Blk << ", N = " << N << ", team_size = " << team_size + << ", vector_length = " << vector_length << std::endl; + + if (impls.size() == 0) + for (int i = 0; i < n_impl; ++i) impls.push_back(i); + + // V100 L2 cache 6MB per core + constexpr size_t LLC_CAPACITY = 80 * 6 * 1024 * 1024; + KokkosBatched::Flush flush; + + printf(" :::: CusolverDn Testing (N = %d, Blk = %d, vl = %d, n = %d)\n", N, + Blk, vector_length, n_rep_1); + + typedef Kokkos::LayoutRight LR; + typedef Kokkos::LayoutLeft LL; + + using IntView = Kokkos::View; + using AMatrixViewLR = Kokkos::View; + using AMatrixViewLL = Kokkos::View; + using XYTypeLR = Kokkos::View; + using XYTypeLL = Kokkos::View; + + AMatrixViewLR aLR("values", N, Blk, Blk); + AMatrixViewLL aLL("values", N, Blk, Blk); + + XYTypeLR xLR("values", N, Blk); + XYTypeLR yLR("values", N, Blk); + + XYTypeLL xLL("values", N, Blk); + XYTypeLL yLL("values", N, Blk); + + if (layout_left) + printf(" :::: Testing left layout (team_size = %d)\n", team_size); + if (layout_right) + printf(" :::: Testing right layout (team_size = %d)\n", team_size); + + if (layout_left) { + readDenseFromMM(name_A, aLL); + readArrayFromMM(name_B, yLL); + } + if (layout_right) { + readDenseFromMM(name_A, aLR); + readArrayFromMM(name_B, yLR); + } + + for (auto i_impl : impls) { + std::vector timers; + + double t_spmv = 0; +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStart(); +#endif + exec_space().fence(); + Kokkos::deep_copy(xLL, 0.0); + Kokkos::deep_copy(xLR, 0.0); + + exec_space().fence(); + + if (i_impl == 0) { + if (layout_right) { + t_spmv = Functor_Test_BatchedDenseCuSolve(aLR, xLR, yLR) + .run(); + } + } + exec_space().fence(); + +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStop(); +#endif + + timers.push_back(t_spmv); + + { + std::ofstream myfile; + std::string name; + if (layout_left) + name = name_timer + "_" + std::to_string(i_impl) + "_left.txt"; + if (layout_right) + name = name_timer + "_" + std::to_string(i_impl) + "_right.txt"; + + myfile.open(name); + + for (size_t i = 0; i < timers.size(); ++i) myfile << timers[i] << " "; + + myfile << std::endl; + + myfile.close(); + } + + double average_time = 0.; + + for (size_t i = 0; i < timers.size(); ++i) + average_time += timers[i] / timers.size(); + + if (layout_left) + printf("Left layout: Implementation %d: solve time = %f\n", i_impl, + average_time); + if (layout_right) + printf("Right layout: Implementation %d: solve time = %f\n", i_impl, + average_time); + + if (layout_left) { + writeArrayToMM(name_X + std::to_string(i_impl) + "_l.mm", xLL); + } + if (layout_right) { + writeArrayToMM(name_X + std::to_string(i_impl) + "_r.mm", xLR); + } + } + } + Kokkos::finalize(); + + return 0; +} + +#else +int main() { return 0; } +#endif diff --git a/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverSp.cpp b/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverSp.cpp new file mode 100644 index 0000000000..dfa346094d --- /dev/null +++ b/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverSp.cpp @@ -0,0 +1,608 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.4 +// Copyright (2021) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#include + +#define KOKKOSKERNELS_DEBUG_LEVEL 0 + +/// Kokkos headers +#include "Kokkos_Core.hpp" +#include "Kokkos_Timer.hpp" +#include "Kokkos_Random.hpp" +#include "Kokkos_UnorderedMap.hpp" +#include "Kokkos_Sort.hpp" + +// +//#define KOKKOSKERNELS_ENABLE_TPL_CUSPARSE + +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE + +#include +#include "cusolverSp.h" +#include "cusolverDn.h" + +#include "KokkosKernels_config.h" +#include "KokkosKernels_SparseUtils_cusparse.hpp" + +/// KokkosKernels headers +#include "KokkosBatched_Util.hpp" +#include "KokkosBatched_Vector.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "KokkosBatched_Test_Sparse_Helper.hpp" + +#include "KokkosBatched_Spmv.hpp" +#include "KokkosBatched_CrsMatrix.hpp" +#include "KokkosBatched_Krylov_Handle.hpp" +#include "KokkosBatched_Gesv.hpp" +#include "KokkosBatched_JacobiPrec.hpp" +#include "KokkosBatched_Dot.hpp" +#include "KokkosBatched_Util.hpp" +#include "KokkosBatched_Dot_Internal.hpp" +#include "KokkosBatched_Spmv_Serial_Impl.hpp" +#include "KokkosBatched_Copy_Decl.hpp" + +typedef Kokkos::DefaultExecutionSpace exec_space; +typedef typename exec_space::memory_space memory_space; +typedef Kokkos::DefaultHostExecutionSpace host_space; +typedef typename Kokkos::Device device; + +template +struct Functor_Test_SparseCuSolveQR { + const MatrixViewType _A; + const IntView _r; + const IntView _c; + const VectorViewType _X; + const VectorViewType _B; + + KOKKOS_INLINE_FUNCTION + Functor_Test_SparseCuSolveQR(const MatrixViewType &A, const IntView &r, + const IntView &c, const VectorViewType &X, + const VectorViewType &B) + : _A(A), _r(r), _c(c), _X(X), _B(B) {} + + inline double run() { + std::string name("KokkosBatched::Test::TeamGESV"); + Kokkos::Timer timer; + Kokkos::Profiling::pushRegion(name.c_str()); + cusolverSpHandle_t handle = NULL; + cusolverSpCreate(&handle); + + const size_t N = _A.extent(0); + const size_t nnz = _c.extent(0); + const size_t m = _r.extent(0) - 1; + + cusparseMatDescr_t descrA = 0; + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateMatDescr(&descrA)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetMatType(descrA, CUSPARSE_MATRIX_TYPE_GENERAL)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetMatIndexBase(descrA, CUSPARSE_INDEX_BASE_ZERO)); + + double tol = 1e-18; + int reorder = 0; + int singularity[1]; + exec_space().fence(); + timer.reset(); + + for (size_t i = 0; i < N; ++i) { + auto csrValA = Kokkos::subview(_A, i, Kokkos::ALL).data(); + auto b = Kokkos::subview(_B, i, Kokkos::ALL).data(); + auto x = Kokkos::subview(_X, i, Kokkos::ALL).data(); + + cusolverSpDcsrlsvqr(handle, m, nnz, descrA, csrValA, _r.data(), _c.data(), + b, tol, reorder, x, singularity); + if (singularity[0] != -1) + std::cout << " Error ! " << singularity[0] << " " << m << std::endl; + } + + exec_space().fence(); + double sec = timer.seconds(); + Kokkos::Profiling::popRegion(); + + return sec; + } +}; + +template +struct Functor_Test_Block_SparseCuSolveQR { + const MatrixViewType _A; + const IntView _r; + const IntView _c; + const VectorViewType _X; + const VectorViewType _B; + + KOKKOS_INLINE_FUNCTION + Functor_Test_Block_SparseCuSolveQR(const MatrixViewType &A, const IntView &r, + const IntView &c, const VectorViewType &X, + const VectorViewType &B) + : _A(A), _r(r), _c(c), _X(X), _B(B) {} + + inline double run() { + std::string name("KokkosBatched::Test::TeamGESV"); + Kokkos::Timer timer; + Kokkos::Profiling::pushRegion(name.c_str()); + cusolverSpHandle_t handle = NULL; + cusolverSpCreate(&handle); + + const size_t N = _A.extent(0); + const size_t nnz = _c.extent(0); + const size_t m = _r.extent(0) - 1; + + const size_t block_nnz = N * nnz; + const size_t block_m = N * m; + + cusparseMatDescr_t descrA = 0; + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateMatDescr(&descrA)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetMatType(descrA, CUSPARSE_MATRIX_TYPE_GENERAL)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetMatIndexBase(descrA, CUSPARSE_INDEX_BASE_ZERO)); + + double tol = 1e-18; + int reorder = 0; + int singularity[1]; + + IntView rowOffsets("values", block_m + 1); + IntView colIndices("values", block_nnz); + + auto rowOffsets_host = Kokkos::create_mirror_view(rowOffsets); + auto colIndices_host = Kokkos::create_mirror_view(colIndices); + auto _c_host = Kokkos::create_mirror_view(_c); + auto _r_host = Kokkos::create_mirror_view(_r); + + Kokkos::deep_copy(_c_host, _c); + Kokkos::deep_copy(_r_host, _r); + + exec_space().fence(); + + rowOffsets_host(0) = 0; + for (size_t i = 0; i < N; ++i) { + for (size_t row = 0; row < m; ++row) { + const size_t current_row_index = i * m + row; + const size_t row_length = _r_host(row + 1) - _r_host(row); + rowOffsets_host(current_row_index + 1) = + rowOffsets_host(current_row_index) + row_length; + for (size_t nnz_row = 0; nnz_row < row_length; ++nnz_row) { + const size_t current_block_nnz_index = + rowOffsets_host(current_row_index) + nnz_row; + const size_t current_block_col_index = + _c_host(_r_host(row) + nnz_row) + i * m; + colIndices_host(current_block_nnz_index) = current_block_col_index; + } + } + } + + Kokkos::deep_copy(rowOffsets, rowOffsets_host); + Kokkos::deep_copy(colIndices, colIndices_host); + + exec_space().fence(); + timer.reset(); + + auto csrValA = _A.data(); + auto b = _B.data(); + auto x = _X.data(); + + cusolverSpDcsrlsvqr(handle, block_m, block_nnz, descrA, csrValA, + rowOffsets.data(), colIndices.data(), b, tol, reorder, + x, singularity); + + if (singularity[0] != -1) + std::cout << " Error ! " << singularity[0] << " " << m << std::endl; + + exec_space().fence(); + double sec = timer.seconds(); + Kokkos::Profiling::popRegion(); + + return sec; + } +}; + +template +struct Functor_Test_SparseCuSolveChol { + const MatrixViewType _A; + const IntView _r; + const IntView _c; + const VectorViewType _X; + const VectorViewType _B; + + KOKKOS_INLINE_FUNCTION + Functor_Test_SparseCuSolveChol(const MatrixViewType &A, const IntView &r, + const IntView &c, const VectorViewType &X, + const VectorViewType &B) + : _A(A), _r(r), _c(c), _X(X), _B(B) {} + + inline double run() { + std::string name("KokkosBatched::Test::TeamGESV"); + Kokkos::Timer timer; + Kokkos::Profiling::pushRegion(name.c_str()); + cusolverSpHandle_t handle = NULL; + cusolverSpCreate(&handle); + + const size_t N = _A.extent(0); + const size_t nnz = _c.extent(0); + const size_t m = _r.extent(0) - 1; + + cusparseMatDescr_t descrA = 0; + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateMatDescr(&descrA)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetMatType(descrA, CUSPARSE_MATRIX_TYPE_GENERAL)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetMatIndexBase(descrA, CUSPARSE_INDEX_BASE_ZERO)); + + double tol = 1e-18; + int reorder = 0; + int singularity[1]; + exec_space().fence(); + timer.reset(); + + for (size_t i = 0; i < N; ++i) { + auto csrValA = Kokkos::subview(_A, i, Kokkos::ALL).data(); + auto b = Kokkos::subview(_B, i, Kokkos::ALL).data(); + auto x = Kokkos::subview(_X, i, Kokkos::ALL).data(); + + cusolverSpDcsrlsvchol(handle, m, nnz, descrA, csrValA, _r.data(), + _c.data(), b, tol, reorder, x, singularity); + if (singularity[0] != -1) + std::cout << " Error ! " << singularity[0] << " " << m << std::endl; + } + + exec_space().fence(); + double sec = timer.seconds(); + Kokkos::Profiling::popRegion(); + + return sec; + } +}; + +template +struct Functor_Test_Block_SparseCuSolveChol { + const MatrixViewType _A; + const IntView _r; + const IntView _c; + const VectorViewType _X; + const VectorViewType _B; + + KOKKOS_INLINE_FUNCTION + Functor_Test_Block_SparseCuSolveChol(const MatrixViewType &A, + const IntView &r, const IntView &c, + const VectorViewType &X, + const VectorViewType &B) + : _A(A), _r(r), _c(c), _X(X), _B(B) {} + + inline double run() { + std::string name("KokkosBatched::Test::TeamGESV"); + Kokkos::Timer timer; + Kokkos::Profiling::pushRegion(name.c_str()); + cusolverSpHandle_t handle = NULL; + cusolverSpCreate(&handle); + + const size_t N = _A.extent(0); + const size_t nnz = _c.extent(0); + const size_t m = _r.extent(0) - 1; + + const size_t block_nnz = N * nnz; + const size_t block_m = N * m; + + cusparseMatDescr_t descrA = 0; + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateMatDescr(&descrA)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetMatType(descrA, CUSPARSE_MATRIX_TYPE_GENERAL)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetMatIndexBase(descrA, CUSPARSE_INDEX_BASE_ZERO)); + + double tol = 1e-18; + int reorder = 0; + int singularity[1]; + + IntView rowOffsets("values", block_m + 1); + IntView colIndices("values", block_nnz); + + auto rowOffsets_host = Kokkos::create_mirror_view(rowOffsets); + auto colIndices_host = Kokkos::create_mirror_view(colIndices); + auto _c_host = Kokkos::create_mirror_view(_r); + auto _r_host = Kokkos::create_mirror_view(_c); + + Kokkos::deep_copy(_c_host, _c); + Kokkos::deep_copy(_r_host, _r); + + exec_space().fence(); + + rowOffsets_host(0) = 0; + for (size_t i = 0; i < N; ++i) { + for (size_t row = 0; row < m; ++row) { + const size_t current_row_index = i * m + row; + const size_t row_length = _r_host(row + 1) - _r_host(row); + rowOffsets_host(current_row_index + 1) = + rowOffsets_host(current_row_index) + row_length; + for (size_t nnz_row = 0; nnz_row < row_length; ++nnz_row) { + const size_t current_block_nnz_index = + rowOffsets_host(current_row_index) + nnz_row; + const size_t current_block_col_index = + _c_host(_r_host(row) + nnz_row) + i * m; + colIndices_host(current_block_nnz_index) = current_block_col_index; + } + } + } + + Kokkos::deep_copy(rowOffsets, rowOffsets_host); + Kokkos::deep_copy(colIndices, colIndices_host); + + exec_space().fence(); + timer.reset(); + + auto csrValA = _A.data(); + auto b = _B.data(); + auto x = _X.data(); + + cusolverSpDcsrlsvchol(handle, block_m, block_nnz, descrA, csrValA, + rowOffsets.data(), colIndices.data(), b, tol, reorder, + x, singularity); + if (singularity[0] != -1) + std::cout << " Error ! " << singularity[0] << " " << m << std::endl; + + exec_space().fence(); + double sec = timer.seconds(); + Kokkos::Profiling::popRegion(); + + return sec; + } +}; + +int main(int argc, char *argv[]) { + std::cout << " start " << std::endl; + Kokkos::initialize(argc, argv); + { +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStop(); +#endif + Kokkos::print_configuration(std::cout); + + // typedef Kokkos::Details::ArithTraits ats; + + /// + /// input arguments parsing + /// + int n_rep_1 = 10; // # of repetitions + int team_size = 8; + int n_impl = 1; + bool layout_left = true; + bool layout_right = false; + int vector_length = 8; + + std::string name_A = "A.mm"; + std::string name_B = "B.mm"; + + std::string name_timer = "timers"; + std::string name_X = "X"; + + std::vector impls; + for (int i = 1; i < argc; ++i) { + const std::string &token = argv[i]; + if (token == std::string("-A")) name_A = argv[++i]; + if (token == std::string("-B")) name_B = argv[++i]; + if (token == std::string("-X")) name_X = argv[++i]; + if (token == std::string("-timers")) name_timer = argv[++i]; + if (token == std::string("-team_size")) team_size = std::atoi(argv[++i]); + if (token == std::string("-vector_length")) + vector_length = std::atoi(argv[++i]); + if (token == std::string("-n_implementations")) + n_impl = std::atoi(argv[++i]); + if (token == std::string("-implementation")) + impls.push_back(std::atoi(argv[++i])); + if (token == std::string("-l")) { + layout_left = true; + layout_right = false; + } + if (token == std::string("-r")) { + layout_left = false; + layout_right = true; + } + } + + int N, Blk, nnz, ncols; + + readSizesFromMM(name_A, Blk, ncols, nnz, N); + + std::cout << "n = " << Blk << ", N = " << N << ", team_size = " << team_size + << ", vector_length = " << vector_length << std::endl; + + if (impls.size() == 0) + for (int i = 0; i < n_impl; ++i) impls.push_back(i); + + // V100 L2 cache 6MB per core + constexpr size_t LLC_CAPACITY = 80 * 6 * 1024 * 1024; + KokkosBatched::Flush flush; + + printf(" :::: CusolverSp Testing (N = %d, Blk = %d, vl = %d, n = %d)\n", N, + Blk, vector_length, n_rep_1); + + typedef Kokkos::LayoutRight LR; + typedef Kokkos::LayoutLeft LL; + + using IntView = Kokkos::View; + using AMatrixValueViewLR = Kokkos::View; + using AMatrixValueViewLL = Kokkos::View; + using XYTypeLR = Kokkos::View; + using XYTypeLL = Kokkos::View; + + IntView rowOffsets("values", Blk + 1); + IntView colIndices("values", nnz); + AMatrixValueViewLR valuesLR("values", N, nnz); + AMatrixValueViewLL valuesLL("values", N, nnz); + + XYTypeLR xLR("values", N, Blk); + XYTypeLR yLR("values", N, Blk); + + XYTypeLL xLL("values", N, Blk); + XYTypeLL yLL("values", N, Blk); + + if (layout_left) + printf(" :::: Testing left layout (team_size = %d)\n", team_size); + if (layout_right) + printf(" :::: Testing right layout (team_size = %d)\n", team_size); + + if (layout_left) { + readCRSFromMM(name_A, valuesLL, rowOffsets, colIndices); + readArrayFromMM(name_B, yLL); + } + if (layout_right) { + readCRSFromMM(name_A, valuesLR, rowOffsets, colIndices); + readArrayFromMM(name_B, yLR); + } + + printf(" :::: GO\n"); + for (auto i_impl : impls) { + std::vector timers; + + double t_spmv = 0; +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStart(); +#endif + exec_space().fence(); + Kokkos::deep_copy(xLL, 0.0); + Kokkos::deep_copy(xLR, 0.0); + + exec_space().fence(); + + if (i_impl == 0) { + if (layout_right) { + t_spmv = Functor_Test_SparseCuSolveQR( + valuesLR, rowOffsets, colIndices, xLR, yLR) + .run(); + } + } + if (i_impl == 1) { + if (layout_right) { + t_spmv = + Functor_Test_SparseCuSolveChol( + valuesLR, rowOffsets, colIndices, xLR, yLR) + .run(); + } + } + if (i_impl == 2) { + if (layout_right) { + t_spmv = + Functor_Test_Block_SparseCuSolveQR( + valuesLR, rowOffsets, colIndices, xLR, yLR) + .run(); + } + } + if (i_impl == 3) { + if (layout_right) { + t_spmv = Functor_Test_Block_SparseCuSolveChol< + exec_space, AMatrixValueViewLR, IntView, XYTypeLR>( + valuesLR, rowOffsets, colIndices, xLR, yLR) + .run(); + } + } + exec_space().fence(); + +#if defined(KOKKOS_ENABLE_CUDA) && defined(KOKKOSBATCHED_PROFILE) + cudaProfilerStop(); +#endif + + timers.push_back(t_spmv); + + { + std::ofstream myfile; + std::string name; + if (layout_left) + name = name_timer + "_" + std::to_string(i_impl) + "_left.txt"; + if (layout_right) + name = name_timer + "_" + std::to_string(i_impl) + "_right.txt"; + + myfile.open(name); + + for (size_t i = 0; i < timers.size(); ++i) myfile << timers[i] << " "; + + myfile << std::endl; + + myfile.close(); + } + + double average_time = 0.; + + for (size_t i = 0; i < timers.size(); ++i) + average_time += timers[i] / timers.size(); + + if (layout_left) + printf("Left layout: Implementation %d: solve time = %f\n", i_impl, + average_time); + if (layout_right) + printf("Right layout: Implementation %d: solve time = %f\n", i_impl, + average_time); + + if (layout_left) { + writeArrayToMM(name_X + std::to_string(i_impl) + "_l.mm", xLL); + } + if (layout_right) { + writeArrayToMM(name_X + std::to_string(i_impl) + "_r.mm", xLR); + } + } + } + Kokkos::finalize(); + + return 0; +} + +#else +int main() { return 0; } +#endif diff --git a/perf_test/batched/sparse/data/A.mm b/perf_test/batched/sparse/data/A.mm new file mode 100644 index 0000000000..69e085989c --- /dev/null +++ b/perf_test/batched/sparse/data/A.mm @@ -0,0 +1,1627 @@ +%%MatrixMarket batched CRS matrix +% +200 200 1624 96 +1 1 2.14513915723297 1.8141890647117656 1.9251199583407956 2.7589314420707907 1.7892416120053183 2.779642669887006 2.147079122267243 1.902734894237586 2.186293548082045 2.744260982407585 2.1163036011433523 2.9489058369832106 2.17472263863018 2.212059339121476 1.6474785542028583 3.132451108523491 1.1911673538164451 2.891279887874615 2.435940146382384 2.971764611315008 3.0266609104727777 1.763796242909929 1.3392998111617687 2.3560528057289973 2.369281135726359 1.249112974699039 2.7986787708126863 1.9073088546100605 2.135585780020522 1.9181949131383031 1.5701918706671618 2.735820153883151 1.5477410840788428 2.2886303927365566 2.5000020963757184 2.6917693195827495 2.213184848012845 2.3535612741100174 2.0954377351366023 2.8211248340658206 2.6641893703319104 2.0666297545980203 1.4080972043786766 2.407465888009096 1.9691330469801538 2.803664325214047 2.069322564507435 1.4846892996955579 2.133335366015795 2.3839050070008527 1.6714081237162894 2.166469672003368 2.3440885545941725 1.4856586020604665 2.3792823324189643 0.9155125773330628 1.1734051870389441 0.9466294365292154 3.1535010325034887 1.889091047889552 1.5231561050035476 1.1862047350153622 1.997474827924429 1.6334096819204151 1.6009571464484205 1.266920153897263 2.517923052299058 2.2065532874987452 1.9204632667065904 2.310773047682482 1.5564943022362383 1.5556755986148927 1.796962687758391 2.756439211287468 1.042904460194466 2.5808892696811805 1.1785735337317633 1.9466040410175778 1.8012440194028305 1.1876935426058322 2.71770292966929 1.8401678930979084 1.380525936687114 2.104563921741984 1.7940989545222936 1.6785693841442344 2.309034446613061 1.7867149855238176 0.5587532553263048 1.5473974017361067 1.3694721827203447 2.6514703564480406 2.577385624022762 2.0270237125604744 2.3722427104566264 2.695258847184688 +1 2 -0.3894117089200724 0.03282027108955532 0.5591275488552438 0.9842626505572956 0.20821952838838675 -0.5339436770830139 0.8835936897038137 0.3052641200495938 0.4908629042121837 -0.5950035676308032 0.5635696794202343 0.7586602737030972 0.08886919584596464 -0.5201285431050671 0.088915660621943 -0.6734192872142408 0.0014475555042101629 0.8073418769802816 -0.8318660672717311 0.7468799121589937 -0.44957646999789125 0.821959862986793 0.2050987766857535 0.6428239467919998 -0.6996032788159319 0.1596850517060795 -0.9935834392441225 -0.44958695697234297 0.5153385494564504 -0.02624160561763289 -0.0012273308941523897 0.5809007084656173 0.7544110943141624 0.36199164088571956 -0.37195586989375506 0.7061911334083326 -0.8616992451679526 -0.6429938740292491 0.47377509451879396 -0.8533607838482125 0.9283909067037486 0.9529709679571177 0.2441590677112051 -0.9788794332376074 0.792409853716276 0.5183330406461402 0.6827939031724446 0.7005718570470558 0.8499542653587446 -0.5265294721964995 -0.6713660150136571 0.13148361012030185 -0.42132144113620673 0.12384473892439751 0.7002721198587676 0.01742977830491843 -0.44371943462791763 -0.04410064599478414 0.8912605643658502 0.7321632057322951 -0.1573358949413659 0.23593926706704949 -0.32581607145868996 0.3873239111566469 0.5725443142366253 0.2082813532663088 0.9436508318521768 -0.8932753324720084 0.5983649170397112 -0.8985458611197048 -0.2893020081458695 0.2583924081575504 0.2480782443603462 0.7589890646697011 -0.34826737288249054 0.4097695110759705 0.30510132119720534 -0.10340489661351415 -0.9511723831872072 0.026782731586743047 0.44405497299790686 0.949647483451449 0.3160728458291213 0.7092317321865198 -0.5707868078709122 -0.3351280215256125 0.21764839841085903 0.6102162335523165 -0.08769342590906892 -0.42285892098208877 -0.39515045630594914 0.5834874673618493 -0.5857546030362939 0.785167794522946 0.8973832823074339 0.18193484625251477 +1 21 -0.49805534292287246 -0.7078724866966548 0.822768652407821 0.6167445176353723 0.21627640355141042 -0.6222562995394709 -0.842263075375631 -0.4475312293336491 0.05958374351483342 0.850307859260742 0.053609081577116635 0.9985553776389928 -0.8593215801514216 -0.8993572967653023 0.46636437223141014 0.7346808755356316 0.6126403668770868 0.8163730718436739 0.4584820519317683 -0.7008856164627173 0.9934836871864294 -0.7989401549595665 -0.10538024375030242 -0.9377061521214465 -0.00976036778976086 0.2402849135689109 0.46342854345695006 0.3999110749126866 -0.46773337013709515 -0.13289337685025027 0.8798570404844841 0.4031677789423007 -0.39257469989584526 -0.9158403395877805 -0.8861480965638333 0.9628314127756268 0.41989584537958113 0.4730338657728783 -0.156846003481244 0.6556527105517649 -0.9368703785946946 0.306139632766085 -0.5128950117144546 0.1284991696921134 -0.007469897224957611 0.5547812982720912 -0.5664780403739769 -0.6764328246364337 -0.3787596315346826 -0.08432572090923851 -0.8445113026215638 -0.8780479857745183 -0.8999006391889788 0.40631221434942244 -0.3486296034757872 0.34285252115292963 0.26941399334877936 -0.5888926746746732 -0.7253500464934968 0.15544389012863524 -0.4942298957129252 -0.07813939672953185 0.5918092276205742 0.20865251619708913 -0.3254745648885229 -0.11162839286739268 -0.7228992686060551 0.15850527257492697 0.5527453149644246 -0.6387838989754657 0.26227598546292574 0.7074139240233706 0.507100955941034 0.8636595376450202 0.22977036631823156 -0.612402085771776 0.40358999687920405 -0.6094693619445541 0.5297417990156479 0.2901295477667707 0.5245780687965289 0.2676900319447828 -0.06345696603009854 -0.08895950231442895 0.3016878421639777 -0.24728980847001925 0.7818651814169313 0.3442700935046765 0.11561227247979255 0.023141849269639803 0.3292586045891692 0.810450377880233 0.8518424275623373 -0.25886222342161735 -0.20463288014533831 -0.7904852598496752 +1 22 -0.7563253067631999 0.7854125487637205 0.47406651122826027 -0.28109243028981146 -0.8156009149692054 -0.9183355368481909 -0.3741918477143604 0.29154769758599564 0.6726773892052631 0.39809904783455496 0.9861015017299399 -0.23798341435496084 0.8949537939600885 -0.36374612942321916 -0.9257512238922134 -0.7663356939782688 0.5182020977005581 0.7624569459660706 -0.31119992389372797 -0.7502125970942879 -0.738644405355241 -0.06886825154878107 0.23538539712010897 -0.758271542025184 0.8533543905444569 -0.09261834787994316 0.8982995278142445 0.3868564385318931 -0.8569707212921438 -0.9659972447440988 -0.6439979807269156 -0.762578046242059 -0.017678976974528915 0.9638287219227357 -0.6874356243341293 0.2205158638572453 0.22920804873988176 0.7417054089635478 -0.5624450686203617 0.3370064812267781 -0.3416524547319948 0.7481072435841825 0.4753299563405933 0.46174693114503174 0.2123018555955396 -0.8075252419338248 -0.5961995535430809 -0.021388233450040817 0.6413314162299824 -0.9837669825481952 0.02811427222433549 -0.9008035424115082 0.025031667656866485 -0.8758931195587962 -0.565690217379889 0.3995490390854344 -0.14022784536501276 0.12448349479614995 0.7813809237038059 0.33462807063897704 0.13833936617449671 0.7488544360170934 0.6326897911099776 0.5316031080145975 -0.5897102781271428 -0.5050581090652086 0.7204849484784295 0.16316543967587815 -0.5067359635430486 -0.46697410874629197 -0.5553744564538443 0.38696080579981085 -0.7655444987106463 -0.8307527389969556 0.31243737229152035 -0.7857792759754176 0.34388705598428415 -0.7230359185817694 -0.14022122450210306 -0.8689117712351224 -0.7726303668539707 -0.4549320858496828 -0.34321566749007815 -0.4949152776692487 -0.01591277492192056 -0.6420087894772204 -0.6632003202790071 0.7511049197582931 -0.1791848510181786 0.7851634647349515 0.4406148334233779 0.6627594044196559 0.8435317623151299 0.5660565064287839 -0.543132192303047 -0.8406464925512473 +2 1 -0.3894117089200724 0.03282027108955532 0.5591275488552438 0.9842626505572956 0.20821952838838675 -0.5339436770830139 0.8835936897038137 0.3052641200495938 0.4908629042121837 -0.5950035676308032 0.5635696794202343 0.7586602737030972 0.08886919584596464 -0.5201285431050671 0.088915660621943 -0.6734192872142408 0.0014475555042101629 0.8073418769802816 -0.8318660672717311 0.7468799121589937 -0.44957646999789125 0.821959862986793 0.2050987766857535 0.6428239467919998 -0.6996032788159319 0.1596850517060795 -0.9935834392441225 -0.44958695697234297 0.5153385494564504 -0.02624160561763289 -0.0012273308941523897 0.5809007084656173 0.7544110943141624 0.36199164088571956 -0.37195586989375506 0.7061911334083326 -0.8616992451679526 -0.6429938740292491 0.47377509451879396 -0.8533607838482125 0.9283909067037486 0.9529709679571177 0.2441590677112051 -0.9788794332376074 0.792409853716276 0.5183330406461402 0.6827939031724446 0.7005718570470558 0.8499542653587446 -0.5265294721964995 -0.6713660150136571 0.13148361012030185 -0.42132144113620673 0.12384473892439751 0.7002721198587676 0.01742977830491843 -0.44371943462791763 -0.04410064599478414 0.8912605643658502 0.7321632057322951 -0.1573358949413659 0.23593926706704949 -0.32581607145868996 0.3873239111566469 0.5725443142366253 0.2082813532663088 0.9436508318521768 -0.8932753324720084 0.5983649170397112 -0.8985458611197048 -0.2893020081458695 0.2583924081575504 0.2480782443603462 0.7589890646697011 -0.34826737288249054 0.4097695110759705 0.30510132119720534 -0.10340489661351415 -0.9511723831872072 0.026782731586743047 0.44405497299790686 0.949647483451449 0.3160728458291213 0.7092317321865198 -0.5707868078709122 -0.3351280215256125 0.21764839841085903 0.6102162335523165 -0.08769342590906892 -0.42285892098208877 -0.39515045630594914 0.5834874673618493 -0.5857546030362939 0.785167794522946 0.8973832823074339 0.18193484625251477 +2 2 2.081308674736439 1.7346335892334248 4.830783730718551 4.708090254575683 3.067622183192683 2.934034422179076 3.589219056316201 3.1118538097724344 2.4951632395039622 2.537187976356093 1.6367844493233084 3.2114788137335983 2.871261560375898 3.2724029927736416 2.8135134036434666 3.555676678860641 2.0695192791713204 2.848558158148997 3.4210736178354173 3.5068322769521307 2.5909393981653825 2.9140856798923473 3.1857349472856953 2.6732201836713587 3.6523821438640196 0.9943122564662024 4.150605440347967 3.191076202961663 2.029314996349211 2.0240889985821235 1.6525063009915824 2.7082392045058308 3.174348504503896 2.365526572121408 1.5507299396958258 3.709619549824878 3.43190748738233 3.655886958946587 3.5086088424635546 3.4181500628091603 4.113093093076087 3.9731245469812917 1.842600133540416 2.539992642292124 4.442373135878679 2.39668333003039 4.232053879512917 4.735234519765096 3.9340812265742486 2.9225018887078145 3.3149085445869693 3.338802484642936 2.7022561289720795 1.8622778924422578 2.6451839798329013 2.9534047272259896 3.313729185630458 1.9388104532877555 1.9099296263213987 3.7399633790351494 2.646410765497168 2.755066159464394 3.1684242665720506 3.1920658451863186 3.934020430794205 2.4575758076240426 2.5212911220480354 2.6178127760760277 3.3606652372294405 2.2411327678688906 3.371435436724936 2.44017276200647 3.5309788173311083 3.3394418694039008 1.94914594386765 1.5764191430634658 3.1966331530339964 2.2355664962205553 2.8864808185087982 1.8400494810698738 3.444552338469098 3.109304349210427 3.132129599617061 1.742915008393228 3.0814207649690615 2.7101655696585905 2.4902667233432645 2.955432283715865 2.9204654919274153 3.36922287049911 3.0200257395631125 3.2957389662344756 1.737722668977686 3.7762239868701983 3.0979755972989893 2.5972050531009296 +2 3 -0.1952445937008933 -0.34298293682729475 -0.881442310038131 -0.6064360965776305 -0.6810980523705517 -0.13026267669219926 -0.5246049587371591 0.5939328101510615 0.18309577878663674 0.5043230987569456 -0.31894362179611635 -0.618808588751605 0.4199699825805845 0.4423815496067578 0.9423663342611888 0.5645164121641799 0.07399924473634178 -0.279585691125255 0.7911547824272713 0.37016987797166956 0.8212994041502468 0.38711009396790974 0.27631096860117 -0.35054319137406686 0.2288595987074855 0.21045159558973237 -0.5752701767456743 -0.4537031194302117 -0.18164298689686476 0.11277673021895174 0.5239057078877252 -0.32537354454267975 -0.09853358100949006 -0.26551692714490405 0.09439296149320597 0.32794683526751567 0.13259850923069805 -0.6669765449570639 0.8994209025294635 -0.029564858527768578 0.4874714867324281 -0.4782768837903253 0.14738723761604544 0.16518422273095656 0.5403732975723936 0.252233611448504 -0.9140526200572325 0.8691027145292907 0.1555560868742325 0.5151565308784853 0.14213267398242113 0.8745512554062296 -0.9323636948423124 -0.2806413173617188 0.5640130955539482 -0.27108820497999586 -0.3820835917954377 -0.16526301054276038 -0.30498044010694025 -0.9251153016154214 0.27841907384014686 -0.9864959447335535 -0.7481113265302184 0.699835447072209 0.3014166059047634 -0.14396199997528214 -0.3774334575749396 0.031560073695985125 -0.7046741739538473 -0.2531499398515913 -0.633059274082066 -0.43100246765373074 -0.6571817032076797 0.8812138831418657 -0.3720631745808409 0.26334650723243036 0.718351640737027 0.47957141643372037 -0.33863932702483157 0.3932400590731071 -0.1228480884453309 0.8239611785994301 -0.531887106320053 0.13515346792364658 0.3399378082838216 -0.21674931870178327 -0.03256830677680678 -0.7875374757857319 -0.9132419957991249 -0.03186876783774584 -0.874581899248396 0.8255350077515169 0.09831668009810701 -0.3367833951359158 0.10637471078322469 0.3917790253820741 +2 21 0.4958384305088668 0.32756031270949704 0.9878555817601014 -0.6714321370073832 -0.20550344152779232 -0.9254391986976251 -0.25267459860223007 0.6432049832872999 0.6244547569979422 0.024154484232340456 -0.1287235660224968 -0.4037657033726223 -0.6700963533878213 -0.31211231713219645 0.06762691877275073 -0.9309088722195986 0.271047558718295 0.7020376138590871 -0.7314879865338386 0.968885541263119 -0.3945964704863525 -0.590884933365118 0.987907914250485 -0.6764824803502545 -0.38768224280434693 -0.03280054537377941 0.9803990066082162 0.24805332697501936 -0.18719525383843227 -0.04219950906147374 0.3623349741277755 0.40579439235772585 -0.7909636495139614 -0.6437891484077352 0.3756985067582388 -0.7160033593060009 -0.11623398418069741 -0.23320909480530627 0.49338166492590085 0.7407592943400858 -0.40769850066374236 -0.3385877489096214 0.21055239306000084 -0.36299419841533687 -0.8005395915414706 -0.5250527248380372 -0.9127299857503228 0.878852846215896 0.7108140418536595 -0.8613672170262585 0.4275429175135963 -0.8740927849159408 -0.0868239552714749 0.45548497103552066 -0.17226684143220128 0.5474946423851719 -0.949687824375977 -0.8995110120757124 0.3644728930356851 -0.7949789666008489 0.3618336620081799 -0.479825136730176 0.9768367686047548 0.461837260856208 0.5176598520043507 -0.49261383710176854 0.2335596227010377 -0.08176106917404491 -0.6745590931465597 0.005937682460301241 -0.9365860118401228 0.8871462999256654 0.6836915898993015 0.49309058491742497 0.3784295070920016 -0.2904671962458023 -0.2758145321979337 -0.14862488088977743 -0.4048407996072485 0.4824477752976588 0.9036048248268751 -0.024519389186292484 -0.7816540851385845 0.02663471148255092 0.7616440823214468 0.06940273059955815 -0.9848919831899297 0.26821345838584265 -0.5279677194902466 -0.9761354857969402 -0.7503088306282022 0.2508690936444409 0.2037148310865795 -0.7475392489140189 0.41611287625079085 0.9277690061048964 +2 22 -0.22081677036737646 0.4604460160406807 -0.9772656688371726 -0.8058407437871837 0.6891854520292251 -0.49531335810956345 0.5109404587885467 0.9065009245754687 0.93980736396084 0.21483882091502893 -0.03262697149820548 -0.07183621772886317 -0.4043737063222985 0.5946533263495342 -0.8403307658395975 0.885014880411185 0.6946195570797877 0.5875277494015501 0.2094448179273114 -0.530727371979886 -0.03858521254804592 0.6999258839524798 0.5433709202491397 0.23131006993207048 -0.7508760398797565 -0.16821507426479898 -0.6167248188691776 -0.8889955513177314 -0.5356563079635808 0.11257688121396447 -0.13936835100336586 0.22391785448230683 -0.9406369723985355 0.06128043605687483 -0.2297382636841767 -0.18626434312490936 -0.9022546079949212 -0.830555966065651 -0.6730627275104974 0.5460523266208812 0.8206216796193067 0.6277057215378801 0.1970821104067837 0.5356814672902193 0.722633737729192 0.082257877113457 -0.3492437903758061 0.5732042748765049 -0.9321753204543122 -0.45520034021975175 -0.953335129929793 0.6029743532811696 0.07267340777525422 -0.148013578650658 -0.94036963310532 -0.552337404450826 -0.9802392290723394 0.12259391160851663 -0.09944777448000242 -0.6307064259950943 -0.7136351190771169 0.4064182143588482 -0.1095543262701617 -0.29656924296361153 -0.7957787346469665 0.36429943353919403 -0.5019054532962086 -0.805498237214709 -0.2138128620919466 -0.311588557407932 0.23276240575163465 0.0878035588602133 -0.7397129416981758 0.09662896585811809 -0.10222713608669753 0.23564799294439576 -0.802614745042473 -0.11191533056346747 0.2460667651677031 0.4323548122106773 0.40221743580514313 -0.381798869165624 0.46184079726862537 0.2650887597185574 -0.8937540204558752 -0.8756901985857204 -0.44243960617388267 -0.5245876823645703 0.9075902606415251 -0.766334035100545 -0.024819066666995848 -0.6059251861665547 0.06823221387596545 0.41375124270196517 0.8814102835861852 -0.025256633627124936 +2 23 -0.1963668219687027 -0.26639253925340944 0.8970303247288629 -0.8737857914561893 -0.9270841754683627 -0.18979774916301762 0.7463060704572624 0.514701395219717 0.17127841745115058 -0.39931330216024374 -0.5526800252260469 -0.5705209619873666 0.5537972669677818 -0.973243262203294 0.5031684794482674 0.23631094832032717 0.28259793813017775 -0.3307026808049378 0.8073298150836588 0.565226710400365 0.851591667583649 -0.33350947863560565 0.2876867585613623 -0.6585603491461614 0.9130847651849512 -0.16384179849115754 0.174995478526756 -0.1936260566727075 -0.3495048107402048 0.9300856824923533 -0.3466134412865307 -0.6679646517377353 0.16210988889419298 0.2249831153617572 -0.27417498175816135 -0.7914077201598024 -0.9009929771946226 -0.5048521784527855 -0.4155535269276023 0.2952896073806537 -0.6247245340657699 0.9493808751523523 -0.21782111439429097 -0.160197584608188 0.8163302020883316 -0.45603498895842365 -0.9299137771861388 -0.8922749227276425 -0.7677136885102338 -0.14235002819972475 0.9637343852735547 -0.7861900565373803 0.9089507128546579 -0.8356361206242748 -0.206724705710281 0.8570630228785283 0.13233991415453317 -0.36284423540504607 0.00819246763487036 0.5966411404215408 0.23241595552375038 0.64454226195763 0.4985335581916126 0.5095502158287106 0.8367053651052103 0.7703361441817731 -0.28000607444528725 0.6106080356942365 0.33280647118776874 -0.5350417985829483 0.7355104143400932 -0.304597866076163 0.9902623432159321 0.8351118211345883 -0.6592229889999714 -0.18325606625944713 0.40725652347003294 -0.7537813223085883 0.5104029088353605 -0.24917014093953282 0.7662175054579359 0.11981408423096651 0.9520150042228759 0.06599604841664553 -0.23392213742977708 0.681978503194127 0.03622554676663636 0.021019178583386422 -0.4538016059088521 0.45312605647182824 0.06613249715958114 0.8471711597645029 -0.3634576919657002 -0.6752636433603421 0.42791391988857574 -0.23660483267265264 +3 2 -0.1952445937008933 -0.34298293682729475 -0.881442310038131 -0.6064360965776305 -0.6810980523705517 -0.13026267669219926 -0.5246049587371591 0.5939328101510615 0.18309577878663674 0.5043230987569456 -0.31894362179611635 -0.618808588751605 0.4199699825805845 0.4423815496067578 0.9423663342611888 0.5645164121641799 0.07399924473634178 -0.279585691125255 0.7911547824272713 0.37016987797166956 0.8212994041502468 0.38711009396790974 0.27631096860117 -0.35054319137406686 0.2288595987074855 0.21045159558973237 -0.5752701767456743 -0.4537031194302117 -0.18164298689686476 0.11277673021895174 0.5239057078877252 -0.32537354454267975 -0.09853358100949006 -0.26551692714490405 0.09439296149320597 0.32794683526751567 0.13259850923069805 -0.6669765449570639 0.8994209025294635 -0.029564858527768578 0.4874714867324281 -0.4782768837903253 0.14738723761604544 0.16518422273095656 0.5403732975723936 0.252233611448504 -0.9140526200572325 0.8691027145292907 0.1555560868742325 0.5151565308784853 0.14213267398242113 0.8745512554062296 -0.9323636948423124 -0.2806413173617188 0.5640130955539482 -0.27108820497999586 -0.3820835917954377 -0.16526301054276038 -0.30498044010694025 -0.9251153016154214 0.27841907384014686 -0.9864959447335535 -0.7481113265302184 0.699835447072209 0.3014166059047634 -0.14396199997528214 -0.3774334575749396 0.031560073695985125 -0.7046741739538473 -0.2531499398515913 -0.633059274082066 -0.43100246765373074 -0.6571817032076797 0.8812138831418657 -0.3720631745808409 0.26334650723243036 0.718351640737027 0.47957141643372037 -0.33863932702483157 0.3932400590731071 -0.1228480884453309 0.8239611785994301 -0.531887106320053 0.13515346792364658 0.3399378082838216 -0.21674931870178327 -0.03256830677680678 -0.7875374757857319 -0.9132419957991249 -0.03186876783774584 -0.874581899248396 0.8255350077515169 0.09831668009810701 -0.3367833951359158 0.10637471078322469 0.3917790253820741 +3 3 2.768169499839033 2.6161414017941143 3.875327917946473 2.397685248585643 3.15327443904387 3.2816221837998425 2.870543396981468 2.720330637692049 1.9790954990773486 3.9984935206507934 2.169238342350118 3.75449547108317 3.095277321387389 2.807654583173967 3.533877027161651 3.8835195920236427 1.5946389638196174 2.4107773190228237 3.962717337195067 2.5741100522822835 3.7972309871691925 3.3432055035587718 3.71831496846469 3.079224189206596 1.7956795818713407 3.2985939017212162 1.7645429388899128 2.927574795722347 3.3012805147245388 2.1894731604469335 2.475525363344083 3.204481221178896 2.7320383048014794 2.8435270761790394 2.3841945791679056 2.309075406512952 2.0607875625024166 2.6127495026624556 2.677744735626337 2.467139886291048 1.6261206383278215 3.683399011268432 3.0035591815117724 2.781082034503483 3.2804720180632243 3.2029909972890613 2.168847492573133 2.9249404668066052 1.8087077179457896 3.7595341980753982 1.7141305708258463 4.486745561506267 2.3968471828360185 2.3674524679318254 4.1040569095864186 2.921766192693986 2.818430104182436 1.883376884055847 2.8096322587415603 4.512012709896986 3.410735816900626 3.4430140959062423 3.913343153519036 2.659800315215932 2.9845352210653715 1.8884625149870626 2.811706076684509 2.8903614824873722 2.7436504719238943 2.8891823775730376 4.077260969539443 3.087179668262648 4.316961167884406 3.01181144847413 2.6004546537533884 2.6431513340439934 2.0423453147844715 4.12192738477845 1.3108034389318741 3.7663442082908603 2.147086934703996 2.4364382923399157 3.0280760402909532 4.52080076877977 2.91253765697087 3.640213146336321 3.1567042725330854 3.6132093388370894 3.569197621383271 3.8863881865809495 3.2681281887594427 4.181166107691799 2.914862206007064 2.545492026012395 1.6668913953547568 2.787166891357028 +3 4 -0.7888823624167964 0.8833973927268426 0.560523306827952 0.8203694499230811 -0.5700623764004649 -0.9988161732949759 -0.5457330818140758 0.4191644972357933 0.6485159124649 0.9262393653083081 -0.5071261853999509 0.9918489046852055 -0.6418364277196296 0.9160552533474782 -0.3202075998166056 0.863597788825992 0.04700812922668418 0.10371422847307543 -0.8374698608058389 0.42016641190518267 -0.7555046920823922 0.9340889175904621 0.42480262200484664 0.30357985686366384 -0.5932203369562532 -0.9293786545501557 0.010303451044018086 0.5425878565755278 0.7020461477667772 0.18683917754615664 -0.42842454298961763 0.8043791700834106 -0.2554367757394893 0.684906183148571 -0.4531250938447413 0.6728362437799218 -0.2655999511546996 -0.7428436983811748 -0.4608611138900953 0.3861811529216068 -0.06190525263246216 0.020102762747416403 0.5416915320620099 0.7337669904790236 -0.6034768537576811 0.46474282245669385 -0.12290296694152825 -0.46862933789911554 0.4380641786836985 -0.5102268294158576 0.5359178529602131 0.4640444520361211 -0.12258054358619508 -0.6671227391700612 0.9390973644585787 -0.6629871172809243 -0.48586894332489106 0.5143814508112077 0.6237586034810598 -0.6311597294688573 -0.6627872846002021 -0.7030592133617706 0.271463833412529 -0.6850367120329546 0.8114648075633126 -0.060273376296971604 -0.722040804237144 0.628528329841423 0.021468871621685537 0.08695775176596299 0.2520980444563705 0.40928550521550777 -0.5417980517993324 -0.49005795511600736 0.6960151906815959 0.10115870406177407 0.11442386813865868 0.7834118864385173 0.12454145103440606 -0.7934982951690588 0.2685532511255404 -0.6866293114228028 0.5418857973984916 -0.90817243676856 -0.8565830051060783 -0.8880050206194483 -0.47063606871367614 0.8432192327872519 0.5434784039790859 0.9080158778096186 0.6337332921927443 0.6977955889135219 -0.8902131069480508 -0.910340475574422 0.9530377286720815 -0.5531252278461676 +3 22 -0.4026236065955391 -0.8944549834664011 0.2226011130894323 -0.12596453271313757 -0.9502552155501267 0.1531917617774501 -0.16464980434698706 -0.926103935704192 0.552278807272478 0.4318330211774164 -0.25738923543747805 -0.936497955791515 0.5495467116359589 -0.05093199037241436 0.4974661373432747 0.9476906771721492 -0.29571989436196255 0.32178730262430566 -0.960197972715223 -0.6097916094369329 0.4117138088060297 0.21619043161232177 0.7920957250042759 -0.5063229267750256 0.6222803087820887 -0.6335286552803938 -0.20258149241701062 -0.4818679853300565 -0.43441627758713985 0.6487997596621893 -0.2976630850490074 0.2974277345924192 0.8478322771515892 0.18666501395945478 0.9046486532430036 0.6272730453902735 0.46573929187866736 0.6269515136401769 0.639513566578354 0.032228681250968894 0.5099087398368545 0.5882041843166668 0.3118257005303189 0.85225899663926 -0.08093926522588735 -0.48214193671657424 0.42824401112148647 -0.04338757384223291 -0.85972378149736 0.9502195652125676 0.1187232197463961 0.6402190876514626 0.3324467375759299 0.15426246493537787 0.9302119572461913 -0.3002723272541954 0.6526952547454696 0.22276135248871154 0.02676467791328574 0.7459147575047156 0.1911137436882091 0.7749149191424944 -0.80777623250689 0.19259249726020244 -0.79438616989541 -0.4508789557109303 0.09326626242940605 -0.4073610535184595 -0.15184743046030214 -0.45589151352445634 0.8698156970025648 -0.1634261581382539 0.8605668524157108 -0.3916858809918291 -0.16496392250879444 0.43383967724105044 -0.19880084907857398 -0.9316323639200108 -0.0165895530990261 0.14407716301371454 0.8583404053854675 0.013894584487510464 0.9866745070506717 -0.8540222561043347 -0.30320745277814276 -0.7877747222250502 -0.8307273367089751 0.9549825945668122 -0.5190925720535291 -0.7114437840045604 -0.5499711954099165 -0.16745863240122394 0.7391635968749901 0.432190708035161 0.4103843827132341 -0.08137310497693195 +3 23 -0.7035519100210263 -0.12162681531068875 0.5568853962213591 0.3374772797075689 -0.15323925949734551 0.944239889979122 0.8283077576880693 -0.6337481756011945 -0.2876822842271687 -0.8783979951935899 0.19618127337322422 -0.25877968942629526 -0.27646010697520795 0.7228794324400121 -0.9268189516352674 0.4830618787024423 0.986995356045369 0.5652738055392228 0.3128145350601548 -0.5764440712836962 0.8455817305588345 0.9649017384207559 0.9939061886516443 0.5693007775070467 -0.058993499357610446 0.9128841510786119 -0.3557741311444562 0.4568389852795631 0.48177989696912094 0.5112807762527667 -0.2915271983413714 -0.01980795142431835 0.3940458635052009 0.40330276447260327 0.1928094543451031 -0.09273727092701622 -0.6430440810581983 -0.2834249723767408 0.2824388166018952 -0.15934514500357588 0.2660266679660248 -0.7654723572673885 0.1253376492769278 -0.5361682678470259 -0.6772764401041895 0.4950137817547424 0.48463580170042486 0.14441722996702344 -0.005663847568817992 -0.2267424941011742 0.10285805763674505 0.8187549227393036 0.0120258624060956 0.6020711988307377 0.7862292827991892 -0.8987651993768162 -0.6185188953262126 0.8731245896651276 0.7747824076480503 0.664378367995766 -0.7558821194367225 0.685481010712508 0.4402884777793037 -0.41687694331809566 0.8829931098190786 0.12074539467782586 -0.7758470424825903 0.6954342116222239 -0.3396475593625434 -0.9038610537548586 -0.8840638334998012 0.7375322148449841 -0.986299176141598 -0.8550556144061268 -0.4442616418033607 -0.8987344932175121 0.33921992983502625 -0.8862588410539025 0.10312501124929008 0.914074091951447 0.012114101930547294 -0.08852133366462489 0.22856291901369352 0.9229424302492473 0.2553379877059252 -0.5990263473521962 -0.505645376683248 -0.05058645094435121 0.04943164318062476 0.8726891794484841 0.13344702909006112 -0.5944773768071487 0.23438653232131812 -0.06875135337312144 0.07347119232691934 0.787300587708591 +3 24 -0.5677596290644993 -0.18574755777970142 -0.7003562237817873 0.23217257238782918 0.3728881095906851 -0.6852267780023427 0.20571295531536604 -0.05589360364527063 -0.26908734445663596 0.8511674939857234 -0.8253229448607042 0.8722531947214789 -0.8947743485345823 0.22273961032430978 -0.44124063113653267 0.31228097524377363 -0.16732610628832711 -0.917036319687554 -0.06552629920055542 0.17042505754010406 0.2713036863885343 -0.6729013809249567 0.764239410801163 -0.5736512808266014 0.11177492700880487 -0.06584430763684579 -0.301168215185978 0.09080725139069701 -0.8733877672530161 -0.3868703275595806 0.013363749893527066 0.8781701875306889 0.8889539012237622 -0.42648496549397974 0.6064698328208269 -0.48814472724094715 -0.06363189794420854 -0.03122488316001948 -0.3000614984804062 0.9740992425479678 0.27017980545912845 0.9784705990526548 -0.9950281349088947 0.19586463576528956 -0.4050903466548992 -0.8639552605795404 0.2035798573815948 -0.42686479069279937 0.21171470756365007 0.6207416394897074 -0.22517294024716739 0.9766011460592585 -0.49958112764495577 0.056451866458716804 -0.048836406776426644 -0.767727509106727 -0.41557426502871975 -0.06900959825772102 -0.09689935668984417 0.7544452384797529 0.6622973527567473 -0.19562714569629502 0.9066424690346035 0.5695436035243633 -0.1067392935837781 -0.5861962317901206 0.3270743537059464 0.13433405088124228 0.6410958463443377 0.8242373833930918 0.9243957969183021 0.3872103080629212 -0.8027400229284622 -0.3763581606280044 -0.8231041891434767 -0.7868461429874258 0.0010458991764170644 0.35960115003558135 0.47243379757943815 -0.8273173820632467 0.20471363310704116 0.01123523045134589 -0.45810828008313353 -0.8541211024712132 -0.57136718722104 -0.769018934372425 -0.4062528508206704 -0.13126064446188934 -0.9148027952216484 -0.5753674686421264 -0.616224289101929 -0.9559791235177835 0.4778833997656349 -0.5155006543880465 -0.02272764974034458 0.8421159028882694 +4 3 -0.7888823624167964 0.8833973927268426 0.560523306827952 0.8203694499230811 -0.5700623764004649 -0.9988161732949759 -0.5457330818140758 0.4191644972357933 0.6485159124649 0.9262393653083081 -0.5071261853999509 0.9918489046852055 -0.6418364277196296 0.9160552533474782 -0.3202075998166056 0.863597788825992 0.04700812922668418 0.10371422847307543 -0.8374698608058389 0.42016641190518267 -0.7555046920823922 0.9340889175904621 0.42480262200484664 0.30357985686366384 -0.5932203369562532 -0.9293786545501557 0.010303451044018086 0.5425878565755278 0.7020461477667772 0.18683917754615664 -0.42842454298961763 0.8043791700834106 -0.2554367757394893 0.684906183148571 -0.4531250938447413 0.6728362437799218 -0.2655999511546996 -0.7428436983811748 -0.4608611138900953 0.3861811529216068 -0.06190525263246216 0.020102762747416403 0.5416915320620099 0.7337669904790236 -0.6034768537576811 0.46474282245669385 -0.12290296694152825 -0.46862933789911554 0.4380641786836985 -0.5102268294158576 0.5359178529602131 0.4640444520361211 -0.12258054358619508 -0.6671227391700612 0.9390973644585787 -0.6629871172809243 -0.48586894332489106 0.5143814508112077 0.6237586034810598 -0.6311597294688573 -0.6627872846002021 -0.7030592133617706 0.271463833412529 -0.6850367120329546 0.8114648075633126 -0.060273376296971604 -0.722040804237144 0.628528329841423 0.021468871621685537 0.08695775176596299 0.2520980444563705 0.40928550521550777 -0.5417980517993324 -0.49005795511600736 0.6960151906815959 0.10115870406177407 0.11442386813865868 0.7834118864385173 0.12454145103440606 -0.7934982951690588 0.2685532511255404 -0.6866293114228028 0.5418857973984916 -0.90817243676856 -0.8565830051060783 -0.8880050206194483 -0.47063606871367614 0.8432192327872519 0.5434784039790859 0.9080158778096186 0.6337332921927443 0.6977955889135219 -0.8902131069480508 -0.910340475574422 0.9530377286720815 -0.5531252278461676 +4 4 3.5657251948700157 2.7534523960151347 2.9883948117278667 2.3254268996359198 3.1343794311605806 3.0654058302635185 3.473705733990133 2.912007906183282 3.5324802218885765 3.300831152759314 3.1775964151256377 4.340461027852829 2.4726675417350927 3.469896278575699 2.7950813123102125 4.041259457328916 3.22870948553389 3.3882658754178747 3.01290625593022 2.834484722634609 2.3386348383366666 3.3884059131132283 3.6294547376809234 3.066832974484746 2.8705419454798715 2.605757393468565 2.074742604844138 3.6426856688117706 2.693072916965722 2.9183992228580733 3.5511123381170107 4.354547670035186 3.09466208251465 2.9510722127609297 2.276019936214565 2.627849155553231 2.353119392104987 2.900617745930587 3.3337573782118466 2.1950679852849837 2.689452298952421 2.5145736239643277 2.7434330054065406 2.608484990500397 3.4390645518653935 3.061992254881247 2.231943721351241 3.6348824488998455 2.075125758333129 3.4431472527372478 3.2202939536246378 1.9462492041315704 2.6912727330407478 2.9076363250044106 4.569743659351557 2.7912961207586555 3.3072932345010537 3.0420754141478237 3.216014373651894 2.9880722897602903 3.500949233037262 2.494713148394932 3.5614175448841525 2.5331914998767298 2.9095694573876396 2.1582506503315226 3.8751925340523066 3.5314556483831274 2.653502319483759 1.075833259268471 2.137474782332199 3.714765189862361 2.5409057372384356 3.358727482315725 4.515286266246228 2.828716693187702 3.0863192735450404 3.013392838817002 1.570171634778142 2.695469828905135 2.771332752231192 4.1595628809028815 2.6445454516717932 3.6923276208305085 3.158042665750333 3.6263605110521815 2.3003030747175313 2.99143728029546 3.7423266361764593 2.021933245222887 2.84947768388955 3.117072202748185 4.04638153259337 4.240981667823824 4.222912645046062 2.655667111121337 +4 5 0.3510312032401848 0.18844613703004498 0.8903601025155883 0.26652444532367126 0.6447456265082594 0.40137105039044485 0.7775391513728143 -0.4186198628651505 -0.8093384665600021 0.4047682932719403 -0.46061049312707003 -0.45106766940279464 -0.11254885280578253 -0.3135141068252072 0.5472116979127208 -0.7587838278025942 -0.6064250091589327 0.573402575344004 0.9226654313380953 -0.21126086846335768 -0.09721519177733828 0.535929323139356 -0.7440435439537918 -0.40939527322353264 -0.19030143795000187 0.6063243697342655 0.15977648135542055 -0.8227723968797185 -0.04616389543678556 0.4841198297978546 -0.06053681979409409 -0.948890919720409 -0.6654152072085375 0.3452754065338428 0.6977225086628391 -0.6662411657894669 0.22197845845818143 0.9365004284392346 -0.2948698430921075 0.4827496900721775 -0.7978319556474183 -0.3067378639614098 -0.0781894261100804 0.3665418659270874 0.8360005779195361 0.788698973227292 0.4492390533518795 0.7202550046233311 0.6478937900923036 0.47708394756627226 -0.25267442371249027 0.7308045641416521 -0.6614006811410047 0.4320636306162302 -0.8653551753452788 -0.4054488336231892 0.8527817399067728 0.5770739580726505 -0.6366963050968526 0.7846078912548908 -0.5214129385642956 -0.14417701574172348 0.7227018671067826 0.5542825348217617 0.42155121985182764 -0.2259852316891824 0.25514516038702406 -0.37418429744742987 0.2628437252889748 -0.15674050257529992 0.15588763994299826 -0.5949634236223058 -0.14435130584627687 0.7467947423351702 0.8248153316427498 -0.19929925364082934 -0.7768291037153492 0.2351675327526923 -0.18859132396153 -0.4478369684968211 -0.7328737705595385 0.5972935558741395 -0.09329788613227419 -0.37906540091397467 -0.3657093650671177 -0.12709756046136178 0.3610688460349938 0.555988062213677 -0.7770081176763897 0.014117511437645947 -0.3372840890889206 0.6048204377563511 0.6948454571857858 -0.29507944113202633 -0.9975889930137369 -0.09911274144306947 +4 23 0.756338225982683 0.012474519920359972 0.2739640703066486 0.014122011577784033 0.8702592131917324 0.34385477441256085 0.7138343028730685 0.5684922888688417 0.5950538270459995 0.7926508168796094 -0.8986033135410991 0.9990084899222256 -0.32563524038921 0.5201118513105918 -0.6115280722262326 -0.8656493456625649 0.8188322112887687 -0.9483457287041879 0.7855196927421115 0.4597882507953528 -0.05628471346467423 0.14101973022322922 0.9800616417067833 0.3765920240322449 0.7836681779726768 -0.004940744113753226 0.821002168558614 0.46000126716789835 -0.46345079875309714 0.7150697689888594 0.9786279454123548 -0.379687992850263 0.9549940439133258 -0.330114929170471 -0.5151465339825854 -0.591946998979836 -0.9462624506094879 -0.6543373015176832 0.577160206753039 0.11632365666977362 0.44603913525247685 0.8017739695674422 -0.5860065533826764 -0.8128542640795597 0.980813281393967 -0.4609741203891209 0.1520617830074471 -0.26196189823833405 -0.059483563838266695 -0.5959524054818617 0.5316139657590473 -0.09226435719377468 0.8955845887009404 0.0918507609780701 0.4348045995820451 -0.3061504473157928 0.7887916051289521 -0.9962976713809399 -0.4659533696535274 0.4420604684066396 0.36789619698458975 -0.8249428481272854 0.9781859216492332 -0.19070753468987856 -0.5594286705480342 0.5048501584601746 -0.8677684478147412 0.45597512104558047 -0.17895271565657955 -0.06528236845040292 -0.29744112435006054 -0.525046265444651 0.19893039191366668 0.4611201158631357 -0.9008187466756978 -0.08688049225004457 0.44857652652942326 -0.30253682828699757 -0.5424496569672814 0.15122849018851547 -0.4377525070630799 0.9911357068066655 -0.37561869551254845 -0.8253582727900042 -0.2641405995404462 0.915019779202755 0.0032150354269417925 0.38026415830754123 -0.49397255412809193 0.0921338744209812 -0.9496458678366733 -0.5324899247400396 0.04469912193181358 -0.7095615578095804 0.8714325509489895 0.43257458908674185 +4 24 -0.857063418167848 -0.6148508378079667 0.2827327386629799 0.8704790729193423 -0.12511852679495594 -0.1979796807021037 -0.9198637433517669 0.43000173757199933 -0.9255056067074181 0.9587365230512532 0.18188452210363182 0.48457759049533133 -0.27177950599347533 0.26330421344364496 -0.011700292121219702 0.9512540976333532 0.028909069917438357 0.6695896529008407 -0.21927117147142927 -0.4740449540042049 0.5102136489862945 0.7942574155272384 0.7057965694072923 0.9779964188429027 0.597033145544954 -0.1444087424537568 -0.21367962705332677 0.22699633459160307 -0.9247614272390068 -0.8630263174304122 -0.4697366256109401 -0.8146005871899691 0.3853701842605146 -0.8650838252720743 -0.5311346026309229 -0.18816729407301414 -0.5971759487848105 -0.40656297433025324 0.5931911136478101 -0.48566916510121416 0.44175085634079125 0.8418778947825432 0.6614499350156995 -0.3072394762756938 -0.20721612583928417 0.6317986703866512 0.6687630314946877 0.5889070749369749 -0.5865676034126956 0.6008609412934172 0.8533607634514464 0.07186034341710079 -0.18565166785931742 -0.7383700626566976 -0.9898980519287228 -0.019065580583316644 0.6265892883938322 -0.13709603067863285 -0.7294529577870419 -0.6259057381291562 -0.5084396223321583 -0.5561600938427733 0.6200497774409224 0.2466148668845407 0.059700081624407764 -0.6326143250258931 0.8881281024024228 0.2071430609539675 -0.8254880912549094 -0.33365863654017347 -0.29803824089276754 -0.8647587872135156 -0.6894941185821268 -0.6891193580967114 0.41230640967444754 -0.9683234080375545 -0.9671610847413041 0.8396579384979785 -0.5753932806305218 0.001543525190662809 -0.6341993785168529 0.7497563793012438 0.2514134419862457 -0.5031781131414352 0.24996977567127177 -0.93878378489315 -0.020882459558046795 0.2049208896402852 -0.8269753015202745 -0.41189643430462053 -0.020769331230122257 -0.36725078987215065 0.9062789041640378 0.5067251502734855 -0.7061923260914684 0.042616180798774383 +4 25 0.44703468624812515 -0.26531647315662976 -0.2088332407698894 -0.19302365121680154 0.626453070084525 -0.626806068751999 0.19974857462874285 -0.7113385094201259 -0.5097998798936076 0.21125063497137542 -0.8906778236656225 -0.940458770990827 -0.47469464560008734 -0.4909222201660006 -0.36385566068176844 0.4770156450521119 0.8547715046499167 0.6570953774587824 -0.04873599265107953 -0.6074616962106649 -0.5695697244724276 0.7732713358988414 0.023868475083342888 -0.708841890146416 -0.5808502026488138 0.06297182955885816 0.5676379342482507 -0.7503945717321046 -0.0477498565802712 -0.03136978425894421 0.7414936700744788 0.6732141384273447 -0.5935748723894487 -0.19169107763034732 0.010503409285665954 -0.17679807738586573 -0.027792479619577204 -0.14779047350814767 0.5249052657447355 0.3269765433709153 -0.4742163690780743 -0.45067238236108476 0.6245045846666197 0.3190949628670632 0.3847299234832937 -0.2978639843951212 0.7814734103558443 0.762068012753323 -0.14737184451036867 -0.4496109524045735 -0.923602728305057 0.2577878397028941 0.518902459605 0.1644707456428498 0.7647765518603316 0.5218133392884825 0.2865065419107242 0.7016009904223943 -0.17762105293359753 0.5035069522074782 -0.975563582232511 0.04621142171399639 -0.18987633084347766 -0.5449285911405248 0.757948132481634 0.1618976947456321 -0.16807005995981883 0.9573966599625154 0.7306419556222403 0.4102493408127865 0.40931954818132876 -0.8833578186254853 -0.04263284606633855 0.890662780886722 0.8259306597721838 0.7938534334593796 0.6705249326221869 -0.5309819682504588 0.06438510559220689 -0.7285457305367127 0.1613558103160193 -0.7281845131166109 0.8336163915516883 0.2417385961000902 -0.557792973350441 0.23257464424412255 -0.7925281753903888 0.08646030553329886 0.8113827405076119 -0.47749078676390777 -0.3716232121363112 -0.8964699979649899 0.9860495324302248 0.9156509661734202 0.3244070012709064 0.6548017439622114 +5 4 0.3510312032401848 0.18844613703004498 0.8903601025155883 0.26652444532367126 0.6447456265082594 0.40137105039044485 0.7775391513728143 -0.4186198628651505 -0.8093384665600021 0.4047682932719403 -0.46061049312707003 -0.45106766940279464 -0.11254885280578253 -0.3135141068252072 0.5472116979127208 -0.7587838278025942 -0.6064250091589327 0.573402575344004 0.9226654313380953 -0.21126086846335768 -0.09721519177733828 0.535929323139356 -0.7440435439537918 -0.40939527322353264 -0.19030143795000187 0.6063243697342655 0.15977648135542055 -0.8227723968797185 -0.04616389543678556 0.4841198297978546 -0.06053681979409409 -0.948890919720409 -0.6654152072085375 0.3452754065338428 0.6977225086628391 -0.6662411657894669 0.22197845845818143 0.9365004284392346 -0.2948698430921075 0.4827496900721775 -0.7978319556474183 -0.3067378639614098 -0.0781894261100804 0.3665418659270874 0.8360005779195361 0.788698973227292 0.4492390533518795 0.7202550046233311 0.6478937900923036 0.47708394756627226 -0.25267442371249027 0.7308045641416521 -0.6614006811410047 0.4320636306162302 -0.8653551753452788 -0.4054488336231892 0.8527817399067728 0.5770739580726505 -0.6366963050968526 0.7846078912548908 -0.5214129385642956 -0.14417701574172348 0.7227018671067826 0.5542825348217617 0.42155121985182764 -0.2259852316891824 0.25514516038702406 -0.37418429744742987 0.2628437252889748 -0.15674050257529992 0.15588763994299826 -0.5949634236223058 -0.14435130584627687 0.7467947423351702 0.8248153316427498 -0.19929925364082934 -0.7768291037153492 0.2351675327526923 -0.18859132396153 -0.4478369684968211 -0.7328737705595385 0.5972935558741395 -0.09329788613227419 -0.37906540091397467 -0.3657093650671177 -0.12709756046136178 0.3610688460349938 0.555988062213677 -0.7770081176763897 0.014117511437645947 -0.3372840890889206 0.6048204377563511 0.6948454571857858 -0.29507944113202633 -0.9975889930137369 -0.09911274144306947 +5 5 2.376546410503695 2.305259474061346 2.9544113786700072 3.235519420292079 3.095232907622723 2.8529656334289277 2.4017079374202903 3.188598764915935 3.37118510860988 2.9522359686246515 3.2671929154028136 4.001240814353276 2.6187283064124514 2.6319082311495503 1.9642646048421761 3.8595264124344215 1.8253097812396633 3.079527622388558 3.9920582047974373 2.515324983686197 1.0211349263183032 2.888607102299514 2.829423624516232 2.390518845907633 1.6129103614061866 3.8532570719104857 2.184706344679906 4.261519103137145 3.329074385578811 3.597660210262274 2.783924594027928 3.3988378562673405 3.546469192548692 3.3077575237389594 3.900233787669322 3.20190886387908 3.6868861797965797 2.2578110776130385 3.469519523146363 3.3558344619571496 3.0465088321376115 3.4263543328894643 1.8687211815193074 3.0665492181987655 2.810415311031486 5.04569895363453 2.6738266043238843 3.9392313362809954 3.451319927299637 2.8145640066331366 3.5833724900507367 3.118044539770581 3.2661259107359824 2.282212898306107 2.8977832558968855 1.9038413572331343 3.844934203696888 3.270170021421548 2.418220328066728 4.853544833427027 2.917579177823402 2.6144435167606472 2.704928261931051 2.9855914778873567 2.917809537011022 3.968632868634467 2.0861964700826947 1.790212363842452 3.907260023112883 2.417256022801473 3.356601094021781 3.3086532114756215 2.6523846346123263 3.7724615037029023 3.3259340307550396 1.6192922800086913 2.72561256932385 2.4865270144001212 1.9637613435490646 3.422359347501164 4.309940304932281 2.990278366406157 2.802558812882403 3.1742895393817308 1.9541006303521813 1.8973552678551475 2.4704616733503277 2.9071310951429057 3.7990088022167923 1.9385016630257743 2.8399423266087256 3.2890219822356626 3.7907368773679733 3.22959620411946 3.8319060584542424 2.388701776583359 +5 6 -0.5984966897427952 -0.7928329996258103 -0.5123545385881567 -0.7516486432135185 0.7509056791933364 -0.429743325551593 0.11352072054802709 0.7509299268628513 -0.33431854787046467 -0.6763061212230892 0.7418428861235689 -0.9658363062971027 0.3649929368825262 0.736265673260712 -0.09826223251260835 0.5964506692248452 0.44583837864951303 -0.1858470438464419 0.5331327907134094 -0.08225596282538783 -0.11586751708241927 -0.48095952655753704 0.18764421194792869 -0.11543619738056954 -0.07172822644049925 -0.9316269442227456 0.8110069400647855 -0.6939798901765575 -0.9526203681746184 -0.93867830637664 -0.42930658123700227 0.6248133163003873 -0.9243776863506523 -0.823222387756676 -0.027109315339725493 0.012022614164256096 0.8840474893190664 -0.14492159671487337 0.10252824053624177 0.4602595564583425 0.9571076086646664 0.9311984065316536 0.020011999517894452 0.6893690964019976 -0.2530417820718889 -0.8548899748482488 -0.6041328359106815 0.9553480267311543 -0.7819147428016568 -0.7421888431511003 -0.9721230087790302 -0.2509795558453638 -0.5515497101868589 -0.26353905761286245 -0.7008013950900875 -0.6120962936844385 0.7799555367482602 0.8116542407094545 -0.38216716397441486 0.7561547204531007 -0.5140684770392774 0.3398982439058953 0.3842193723944829 -0.32408856681441467 -0.8845988939673308 -0.2343169032145651 -0.2997331957964753 -0.6007487731222163 0.7132732417977583 0.4682049316704573 -0.5586489417078278 -0.7066830061416642 0.7394595248076266 -0.7527632346745199 -0.10392102359074751 -0.09487464206913887 0.5316997640309675 0.45061861227436606 0.5080699764733905 0.6365293939127512 0.4449710307953998 0.5493845705045093 0.4536402049388679 0.6620370704714607 0.3100762360836893 -0.7439658646893887 0.286069651019508 0.9708077684635641 -0.6191793304405782 -0.31263791801671914 0.6935446188407968 0.757665085508261 -0.5864967109265415 0.7845347365250472 -0.1504760857246119 0.18756527666768474 +5 24 -0.05166257422677445 -0.16494125990375785 0.34389076239668337 -0.3438307660150717 0.0889787119388532 -0.6734017590901922 -0.6725514729229409 0.6932854408492652 0.640327569597863 0.1458342022000223 -0.6701640259326758 -0.514809909699316 -0.1052937654977375 -0.4160365776274737 -0.33438412018666064 -0.8859773914272702 -0.17749329176911477 -0.2982825442000774 0.8766903763272638 0.07512547676981729 -0.047037404480915646 -0.32984621828621297 0.4758327385974903 -0.5398356585775346 0.8190045148645324 0.46630512596660245 0.17982852353277523 -0.911343748336841 -0.65933780436113 0.48102022361592556 0.3968402015489245 -0.2801607150486394 -0.6430757835540948 0.6863247812889208 0.9006570878134794 -0.7867711751410136 0.9826858689991962 0.005172204872968544 -0.8817980724437546 -0.3273988390157243 -0.04574181536824451 -0.7496666682704618 -0.8651180092344148 0.495072751172984 -0.7244994411086616 -0.9270195397578032 0.8247596245016608 0.05135102486027776 -0.3390029143336204 -0.012893874798217686 0.6142542558211321 -0.818889598024674 -0.8854180405587988 -0.4244579075000736 -0.9951124805804108 -0.11601059562732097 -0.8993880087512971 -0.18714901736437262 0.3643483245324157 0.8299662112566228 -0.5303007439773171 0.9108906681594902 -0.2603167058731908 -0.31740552252044174 0.49582172330018315 0.8421664122838284 0.3742043107459576 -0.10052891491634797 0.3889697967774717 -0.09279230893427637 -0.8559864713244556 0.6897904194821451 0.8692078049937593 -0.47567043253907637 0.787867834102411 0.05447741380151849 -0.16919818684294374 0.05511724103637072 0.5849271912516829 0.9660655316038844 -0.8048487134902274 -0.5978346659400231 -0.3651968747635419 -0.24749217726114048 0.315409235443062 -0.10642446575749442 0.7143674198026968 0.54531286273426 -0.5427411371027413 -0.5173068762290933 0.2556323337558919 0.8033512197928583 -0.8231605095191215 -0.40043673285763903 -0.7785082467274025 0.3482724793577259 +5 25 0.40225225432478795 -0.04139801157120093 -0.30057359272558415 0.8417195241078728 -0.45551607297626995 0.04152849379206347 0.5011074313484059 0.4239063168802646 0.47873411316870995 -0.7671240125311589 -0.7200695080490183 0.7482383057489119 0.9758035938879424 0.014539108954446212 0.1772717615269046 -0.3577695834686816 -0.12120547275906945 -0.9576680960671053 -0.7967362729110725 0.8576358623379194 -0.12757590058244572 0.4502956560911211 -0.40632809003867054 0.14646210036757767 -0.5045306387434394 0.8350084321140183 -0.7789091176235483 0.8007149421309125 -0.33340983170306027 -0.7465776997953217 -0.2641648253546469 0.281888130039341 -0.48325365017613353 -0.18200622520611454 0.6161104197593286 0.22431554680782817 0.4629796714206502 0.13916869788562303 -0.5239328140085251 -0.7318025147915157 0.45942208834995957 0.6439377342007631 0.6997527114112445 -0.1701131132733973 -0.5177337776379669 0.5424471917596789 0.24471754015738978 0.6962760662196081 0.14596331360666137 0.36312985628624883 -0.5539972919082685 -0.7301760958815426 0.7324643204878194 0.3141846118301228 -0.0903238066775347 -0.5579585035504251 0.588946515373302 0.6006177729515145 -0.25941453788031654 0.8110266688400638 0.8984541731150713 -0.6849251884920009 0.5219552807424073 0.5833472985617261 -0.022131240596239055 -0.9175172433077758 0.30454092807612687 0.6302878263375289 0.8474043050146238 -0.844094149756986 -0.7159840877649473 -0.6418188564603295 0.10349761080378861 0.571856658878642 -0.5421603657839822 -0.28539771653258295 0.548269997636958 0.30776852819973866 0.08621401584022359 -0.36124974921925324 -0.6772168702997481 -0.0530250660532916 -0.4076025878742917 0.34196431396415106 0.012927387212295471 -0.07872807428545814 -0.39859053211958706 -0.01234062515523271 0.8240303493510115 -0.2522356875637617 -0.17605054986467938 0.23112631123714777 0.8543033765263184 0.7582793777862122 0.5707744152075491 -0.5206151118900839 +5 26 0.021136936814857066 -0.8220471092467103 -0.31352131812360007 0.795203411155029 -0.50547362018289 -0.4694943917688357 -0.06174309571655945 0.33015792661434706 0.5041420544210575 0.8480931376687975 0.0781304905644058 0.43914231448220464 -0.20745881128752197 -0.4698972429591137 -0.1674400919786192 0.5378421542950227 0.26249013426453116 -0.26140596899292423 0.2908907115312611 -0.9673962305887311 0.6302162243801264 0.18173911962373945 -0.8513580072644187 0.607186778231616 0.0104620888924849 -0.22154901097520496 0.05132763664171747 0.720997665423913 -0.8681046147525506 0.5313638466719914 -0.9011466955752379 -0.5473778573478043 -0.5409739292637936 -0.39555091966172284 0.9139495656740058 0.8544554179189088 0.8420492397361787 0.4513269138369769 0.8871446000145409 -0.8524304537266132 -0.5339329703753 -0.02164960101073876 0.150207839409346 -0.6984111574838425 0.4042266599185804 0.9445313455546274 -0.12409499990180017 0.6686874102776963 -0.8711662291074216 0.615321302530607 0.3677587560308855 0.18743688322906626 -0.12618936377457746 -0.19026533228667453 0.23012976797954443 0.16797534733417385 0.2071974129661287 0.6746047519113447 -0.3092774062447208 -0.7785678954370827 0.4063015931183187 0.4613747062509945 0.42593883153808165 -0.8806871083041656 0.16747798460596774 0.871645508655704 0.6612241623121569 0.002942446795573428 0.9261815875274946 -0.6746656152820627 -0.10594401673994835 -0.2297670907116094 -0.4194728403402066 0.7441379474208933 -0.8168972993945405 -0.37968387984638774 -0.40621018359420025 -0.7302384672464841 0.5685129633534161 -0.6151891998727537 -0.8938111720764952 -0.985558185708918 -0.9670185582625099 0.8144024175371403 -0.6152509776758988 -0.8171609042913515 0.6473155135052397 -0.6532576989015366 -0.6084099454145868 -0.7943522353948906 -0.4760769218824379 -0.4575448197341667 -0.6902646616493562 0.9770564319569912 -0.40566586321362696 0.9399320439852588 +6 5 -0.5984966897427952 -0.7928329996258103 -0.5123545385881567 -0.7516486432135185 0.7509056791933364 -0.429743325551593 0.11352072054802709 0.7509299268628513 -0.33431854787046467 -0.6763061212230892 0.7418428861235689 -0.9658363062971027 0.3649929368825262 0.736265673260712 -0.09826223251260835 0.5964506692248452 0.44583837864951303 -0.1858470438464419 0.5331327907134094 -0.08225596282538783 -0.11586751708241927 -0.48095952655753704 0.18764421194792869 -0.11543619738056954 -0.07172822644049925 -0.9316269442227456 0.8110069400647855 -0.6939798901765575 -0.9526203681746184 -0.93867830637664 -0.42930658123700227 0.6248133163003873 -0.9243776863506523 -0.823222387756676 -0.027109315339725493 0.012022614164256096 0.8840474893190664 -0.14492159671487337 0.10252824053624177 0.4602595564583425 0.9571076086646664 0.9311984065316536 0.020011999517894452 0.6893690964019976 -0.2530417820718889 -0.8548899748482488 -0.6041328359106815 0.9553480267311543 -0.7819147428016568 -0.7421888431511003 -0.9721230087790302 -0.2509795558453638 -0.5515497101868589 -0.26353905761286245 -0.7008013950900875 -0.6120962936844385 0.7799555367482602 0.8116542407094545 -0.38216716397441486 0.7561547204531007 -0.5140684770392774 0.3398982439058953 0.3842193723944829 -0.32408856681441467 -0.8845988939673308 -0.2343169032145651 -0.2997331957964753 -0.6007487731222163 0.7132732417977583 0.4682049316704573 -0.5586489417078278 -0.7066830061416642 0.7394595248076266 -0.7527632346745199 -0.10392102359074751 -0.09487464206913887 0.5316997640309675 0.45061861227436606 0.5080699764733905 0.6365293939127512 0.4449710307953998 0.5493845705045093 0.4536402049388679 0.6620370704714607 0.3100762360836893 -0.7439658646893887 0.286069651019508 0.9708077684635641 -0.6191793304405782 -0.31263791801671914 0.6935446188407968 0.757665085508261 -0.5864967109265415 0.7845347365250472 -0.1504760857246119 0.18756527666768474 +6 6 3.323779482825121 2.329765267108735 2.8455840574841713 2.6270542755749604 2.5868891602704167 3.766582424047816 1.7293123625581954 2.928567828857668 2.5805975830085677 2.378309659286227 2.5289809187469476 4.4645004051237 2.8110239279342437 3.69314915287819 2.876171715980677 2.2888345561876635 2.7856261810277503 2.9689303609022075 2.1335742134012317 3.123254004936448 2.479559224279281 2.7129088927616354 3.1256484745480106 3.106372027135352 2.0793763055511545 3.248356659029075 3.8485347253107784 3.8102918296114026 4.048100585862624 2.915996198533607 2.2811101453236953 2.888464514966088 3.6005361389782804 3.6256026207394223 2.699264424035632 3.136359030853562 2.961479895005537 2.7123367709303103 3.596551779133396 4.470203313730903 3.0106925333246526 3.8813993618914227 3.3844015670878385 2.9558068455866944 2.1820941126845566 3.1550811559220513 3.7358158631241802 2.9498563208584985 3.208706698750222 3.020050072512892 2.6402545353605005 3.1243251366068123 3.2064693825484554 2.294996049986217 3.8721301344922825 3.2841189060034095 2.53226468589453 3.6913982589320646 3.605557266648 2.866102064609458 3.136979627648026 2.119051797112072 2.4359856908488218 3.1444775613041562 3.696025087108935 3.4980561201013103 2.3750148290840585 3.903273893618947 4.356809569289286 2.2512580100685025 3.703140956538113 3.421696983232032 3.9258080386782237 3.143533546083245 3.478658941633112 1.7174159838625802 2.3738891617417055 3.5462887394410774 3.7300780663887325 3.670439447049028 3.6181383524889568 2.9297104900534174 3.4426428548968167 2.426627243312547 3.0552017148808215 3.0281500888543125 2.2345439619142824 3.2199039228591504 3.569242816314675 3.0716758122903904 2.524205985866026 2.909844303168983 1.9730976880610755 3.334889339351358 2.544349616140787 2.84357723091779 +6 7 0.22652313816474878 -0.2072658775651075 0.3920601426543988 0.08909373243606078 0.10951587110310568 0.6328140266858537 -0.07464479112222877 -0.14093310248523694 0.01351510328760308 0.03549950452949324 0.9957313540422061 -0.8505189251776328 0.7686429080392254 -0.166483352563771 -0.6754252658217155 -0.5768014901019594 0.42642037641520925 0.9453768594420526 0.05258246604109873 -0.11251723934682434 -0.2560836990359934 0.44177239595458806 0.4776806380612708 0.8811663071480098 0.1197662850459249 0.6065414937954183 0.46893152470160393 -0.7410634057256813 -0.4690854381023697 0.20237492696460113 0.6242474980748387 -0.5504416506834577 -0.2970657547772131 0.5147869832432348 0.46972833954550675 -0.79878678532105 0.6990290637003775 -0.14593893121906598 0.9225951669744863 -0.6790474483446758 0.5573304102205376 -0.3782782216725551 0.7787245814560453 -0.36926306146841226 -0.1025267645205088 0.7554211299664517 0.65457107083568 -0.7058148271320208 0.33099392055613874 0.5666882317588096 -0.396745712578948 0.359719578278737 0.5059018444585224 0.39946663186379205 -0.8878110273417741 -0.9065687505998303 0.46623718647956647 0.49097712577135333 -0.7915570233304334 -0.9452918178422818 -0.46268789634665985 0.1559897223470763 0.1401764484916741 -0.7255935449369386 0.8711849069367428 -0.9076241547691442 0.3422377420329723 0.3464197296699367 0.7913139413605415 -0.5251318987987057 -0.8012796692998019 -0.9502716985998325 -0.6473658692164923 0.5720489393142951 -0.22492677043881004 -0.9427099911269161 0.4871319242418668 -0.9279709204621072 -0.9238425283124814 0.5133713650746468 0.5925321633585103 0.024207142311027274 -0.8629102522222529 0.31338631536507533 -0.19390436712901482 -0.6858075269915527 0.5001764928455206 0.38600997804027903 0.35847781978002313 0.4128259307239708 -0.0024770517077672416 0.22902593035714824 -0.45335964499494463 0.6598148364146597 -0.5912460768473822 0.759133220087586 +6 25 0.3164240357554331 -0.06817096951472301 -0.5414955143344893 -0.1195355151899049 0.1306686211923329 0.8703032670074995 0.41210520347324753 -0.2990116152415061 0.6562078455015108 0.056510305864173604 0.39966438744869515 -0.3667542322593875 -0.2778919740131145 -0.6460145868554796 -0.15979998623114589 -0.269323217755987 -0.6933331809214232 0.35031765134842785 0.0999597627145774 0.5818444806748815 0.3224340266151555 -0.36144135172442127 -0.8916500066386981 0.21107591541795512 0.8489226858735321 -0.9002922222079643 0.530336439763134 -0.8106356983399692 0.12901114742185538 0.4163239448617164 -0.18232026832996984 -0.852278613230983 0.7016280187145869 0.9103456552721683 -0.6199684621553399 -0.40043649034615103 0.7525530766775552 0.6701954229502427 0.8684370775636276 0.9197003923718088 -0.7448698054569518 -0.8312355584857307 0.28415984111081616 -0.3385214957969256 -0.22667796332441892 0.30421989492002477 -0.17214607932603343 -0.33465460598385 -0.9128133851617706 0.25071313362725145 0.5642021690339634 0.577554795040687 -0.49473559914575227 0.8150459284159515 -0.5934862607559435 -0.830796879640076 0.12157723086997829 -0.626956874235753 0.17743274546265897 -0.3083763199565204 -0.6518253846646516 -0.6488991263511545 -0.5819048110283216 0.6540720676439231 -0.628420635344076 0.6298589661415499 0.6642979593428016 -0.9433064439273176 -0.5978768769645921 -0.015355463951853165 0.01664909119778235 -0.5949745696682476 0.6489995553598218 0.46001537873827636 0.6348582921254851 -0.289230734913843 -0.5861985084430585 -0.8560477208856179 0.2054178790372283 0.9925033497522509 -0.15666759773753025 -0.9086412607247114 -0.7762433152983201 -0.6519485939936531 0.6778402562939958 -0.021679144859546362 0.6921598258641828 0.6679661362421685 0.9285466878672222 -0.3661724742331387 -0.3525682637951473 0.3188867756770144 0.32778494320938933 -0.6350715728176168 -0.9528527173020416 0.12015439787135418 +6 26 -0.7268009944796208 -0.947655308179352 -0.6083019886233598 -0.5049463240046501 0.6274579923487509 0.4137660003873267 -0.12971449239627164 0.4228797694491073 0.6739352547603534 -0.1320236113690041 0.19692504022272428 0.6017172099176085 -0.4250245942442423 -0.6236769820099755 0.6787159439003423 0.27682912932722714 0.1524333041939787 0.9102343600970713 0.6170322968311381 0.7719304988458977 -0.4711819249189466 0.29837711703600545 0.2776231794366726 -0.36552240301873873 -0.03575651173720473 0.12441484643681511 -0.7221194566765916 -0.6394246999340809 0.9601493540537482 -0.5085167457299686 0.1957153567845773 0.1359613336584382 0.6786456195646808 -0.12935939569808697 0.7637764779810499 0.7835624190878425 -0.23465822059314734 -0.4993845021208143 -0.5263903456755998 -0.9908059492611274 0.33088393449312825 0.8029616343459096 -0.8742223249199457 -0.7366148371554135 0.6467367712725538 -0.8018634618984413 -0.917330503553935 0.0788447212033907 0.27430873670383926 0.04128194988511091 -0.44231953590124595 -0.7317769779401853 0.536394854329264 0.3537234629542343 -0.857683391929114 -0.7405973276572699 -0.9281746852739159 -0.7515864188471366 -0.9395891723146559 0.12980903408225863 0.7616080790841631 0.08570284579048648 -0.37089828433858085 -0.32770788942957774 -0.1339910857107942 0.18684643930288813 0.5536198845692641 0.4284708686065113 0.6176609635743515 -0.48727482313379467 0.78513061032864 -0.07615064764269364 -0.45571309468439813 0.49304621963786954 0.8780248502053725 -0.1192333052918002 0.2745084001551661 -0.8557894278454758 0.6304386231203947 0.7808630852494765 -0.9759039112020991 0.14849160633882152 0.1651223285354646 0.02865859136845139 0.8529587979817004 0.45551646310786054 0.21149583914832015 -0.23792640548920452 0.952600622372318 -0.9151008408002359 0.9263044702926382 -0.16965601349864134 0.061992535895808665 0.3296482328314576 -0.12130010000650371 0.24714102995698695 +6 27 0.8794190292509003 0.23431997919767955 -0.5748720436238348 -0.5781870544160328 -0.3643929705102946 0.8209289646099591 -0.6624550335221637 0.3225835629162097 -0.5129249469510215 -0.5969653313254406 0.12664658886775837 0.939868426327281 -0.7337572916437269 -0.9253445393769344 -0.5423872495879369 0.27889689203317736 -0.13014276543006664 0.23064247094792378 0.11158530977266823 0.6369984849848123 -0.5477486448607078 -0.9021898369458161 -0.6412943707281036 -0.9647332905008381 0.9550911304612679 0.18446171106543563 0.4905418443004741 -0.9163107198237395 0.9597389194405772 0.45824217336079687 0.3752453362394388 0.6987132541865333 0.38699703238689653 0.7712648634815509 -0.30296477250037035 0.2851612960041485 -0.02353386226574683 -0.5282557159527279 0.868139304565035 -0.5326592180952512 -0.03727576952325662 -0.725045517842057 0.7956713078680242 -0.2294359727029298 -0.24107555307439776 0.20702139945103215 -0.9114236499404229 -0.7842542598251179 0.8198074134213149 -0.5317159032397931 -0.1639302520604411 0.6943659435986 0.7315645624913334 0.3876422037140641 0.3870861785872839 0.09674483095979935 -0.16783028380477671 -0.9823815026458538 -0.38555870266578673 0.589650424533249 0.5299837706424066 0.7422244027395781 0.29282484027698885 -0.6683586861979427 0.3819381286799104 0.8915037870120928 0.06680002268753582 -0.8459468088916782 -0.9083094401852221 0.10681357355870236 -0.7842429769383312 -0.6102741045313658 -0.6867789701893687 0.7073974069170585 0.6997996699311653 0.08903723731440571 -0.253267452554254 -0.03321949247196043 -0.8939001231885613 -0.31162838014141747 -0.4964787777391835 0.9732640309011102 -0.7877883621923891 -0.10334061409878381 -0.7187835078008604 0.7166888598801056 -0.12760221879395894 -0.4084208901823594 -0.0433313993718798 -0.20853418495563125 -0.2628741214646708 -0.7566945944562582 0.11648294794724046 -0.1462958406107806 0.360830158266195 0.716864139560434 +7 6 0.22652313816474878 -0.2072658775651075 0.3920601426543988 0.08909373243606078 0.10951587110310568 0.6328140266858537 -0.07464479112222877 -0.14093310248523694 0.01351510328760308 0.03549950452949324 0.9957313540422061 -0.8505189251776328 0.7686429080392254 -0.166483352563771 -0.6754252658217155 -0.5768014901019594 0.42642037641520925 0.9453768594420526 0.05258246604109873 -0.11251723934682434 -0.2560836990359934 0.44177239595458806 0.4776806380612708 0.8811663071480098 0.1197662850459249 0.6065414937954183 0.46893152470160393 -0.7410634057256813 -0.4690854381023697 0.20237492696460113 0.6242474980748387 -0.5504416506834577 -0.2970657547772131 0.5147869832432348 0.46972833954550675 -0.79878678532105 0.6990290637003775 -0.14593893121906598 0.9225951669744863 -0.6790474483446758 0.5573304102205376 -0.3782782216725551 0.7787245814560453 -0.36926306146841226 -0.1025267645205088 0.7554211299664517 0.65457107083568 -0.7058148271320208 0.33099392055613874 0.5666882317588096 -0.396745712578948 0.359719578278737 0.5059018444585224 0.39946663186379205 -0.8878110273417741 -0.9065687505998303 0.46623718647956647 0.49097712577135333 -0.7915570233304334 -0.9452918178422818 -0.46268789634665985 0.1559897223470763 0.1401764484916741 -0.7255935449369386 0.8711849069367428 -0.9076241547691442 0.3422377420329723 0.3464197296699367 0.7913139413605415 -0.5251318987987057 -0.8012796692998019 -0.9502716985998325 -0.6473658692164923 0.5720489393142951 -0.22492677043881004 -0.9427099911269161 0.4871319242418668 -0.9279709204621072 -0.9238425283124814 0.5133713650746468 0.5925321633585103 0.024207142311027274 -0.8629102522222529 0.31338631536507533 -0.19390436712901482 -0.6858075269915527 0.5001764928455206 0.38600997804027903 0.35847781978002313 0.4128259307239708 -0.0024770517077672416 0.22902593035714824 -0.45335964499494463 0.6598148364146597 -0.5912460768473822 0.759133220087586 +7 7 2.648359555935027 2.9811993439754634 3.6943954305226705 2.1588235249294776 3.94037702915906 2.451971769218609 3.258009462411942 1.8241580931327264 3.1536216831432053 2.4945753203118155 3.512294455051391 3.454220161893644 3.2978386438841367 1.8437984736982183 3.2598724652129407 2.258436660084162 3.0068787263256693 3.2021797752815706 1.3097895543412221 3.746485874693716 2.5994153327644325 3.8178704779492474 3.5695544789013565 3.0769804893281156 3.1936878382926803 3.2332426689510054 3.5078343386697854 2.7511696615779946 4.049917411173054 3.7628567227877987 3.6127691323062905 3.7747424786469868 3.015589995958175 2.7723697935289815 3.0566275432661527 3.097976239418003 1.6830618467656613 3.6323290626754643 2.773953973866532 4.1830901369640925 4.202966889235916 2.649454693623847 2.7155737568227796 2.173785702151825 2.755426313905593 2.3909079531309745 3.169213701936011 3.2410331795866663 4.258295677057815 2.543608239577941 2.2148754666439565 2.6157738244308226 2.6469988681038386 3.3342879475570033 2.9545776040814973 4.518788373766028 2.4447946367197266 2.390684968820877 3.431995808950144 3.8695221404084785 2.8812505440633815 2.827345899053199 1.8313611784649797 3.8180493235368527 3.176192080737831 3.756775827681686 3.891467396475492 2.579161980829785 3.2934824135030905 2.994118655824969 3.1013751819126805 2.4086227509151508 3.4455061656287853 3.7254798415886436 2.5990624230332275 3.061443536228884 2.5817884620091647 3.751405197766707 4.495081034247156 2.5519046194696093 3.9011606727988686 2.531574770422094 3.3756665236385826 3.363631115414961 3.609127870453962 3.884438594247346 1.444282773786918 1.7360531017397731 2.727123599103627 2.221348081953934 2.347740890864546 2.8706957941000835 2.6606152543802413 1.7857005128807806 2.6271169240319407 2.3390221130236677 +7 8 -0.4242346404459616 -0.7448662238502837 -0.3728522240529004 -0.10274639003771813 -0.9695726645719296 0.07047860544590145 -0.7788797840122177 0.08891591359949302 0.7081895373296656 -0.33995282899700485 -0.5621198320785223 -0.22697288618656009 -0.13772811703150256 -0.14858243001286842 0.0216109438418286 -0.5117099247078685 -0.9968348477732625 -0.18121026002524987 -0.27337145047669886 -0.8322903118949077 0.34048922890483757 0.7940531467937426 0.6703331345695229 0.024796817597936505 -0.5381334668958822 0.3530085472188744 0.6148221836469483 0.26512537928739 0.45077696458128824 0.14484607542644667 -0.9014809759427058 0.9314679642839687 -0.41411155886527107 -0.5023534612944398 0.21617966770611274 -0.8133031370858679 0.0033737443735539774 0.9190496332608138 -0.0900118622385655 0.060215341246963705 0.7731643855358166 -0.14846337967453693 0.6144816096980676 -0.8201820211452782 -0.6639607016803346 0.45862807344854284 0.6856988902244647 0.6415113638235224 -0.9686118737289018 0.5501066701623418 -0.20904229483136816 0.6097407726798127 -0.9189759279850853 -0.8147625449721951 0.3638401714375705 -0.564699862077034 -0.6332759845687055 -0.3076759274743077 -0.4097667756242467 -0.4143789937088431 -0.797638898859431 0.49845947539947444 0.5162771296394539 -0.7244452949208053 -0.12501627789545333 0.814148888200261 0.8975338354959197 -0.3919494481517345 -0.8559475768744378 -0.10964729168412513 -0.6800418667063599 0.23738721007771502 0.8821951009072371 0.7325197305677658 -0.6087937783672366 -0.30054380624772503 0.21172617288798934 -0.82893418800256 -0.841266944791542 0.0721775749336897 0.17171684125152065 0.5307403031299687 -0.8391032018742479 0.5955513049035823 -0.9763269121973601 0.5298106681623185 0.06040843162907872 -0.18852367168958528 -0.09389723415453788 -0.12672450445946737 -0.1424119300451987 0.8337549109713507 -0.5711604266376213 -0.04638374797202838 -0.9067823019263741 0.09716954309079084 +7 26 -0.4434800489955486 -0.07745414818134444 0.8771155401033481 -0.2648946361423614 -0.763975604314832 0.5651119250530043 0.7640758899239875 0.2108568865138052 0.6654113283926277 0.019645029489510746 -0.4123212446966191 0.9875288030219893 -0.7287013260073363 0.985774395233018 0.377271116721144 -0.4782153365022346 -0.25069570975890865 0.9100885686532911 0.011158178215905368 -0.9716965935136141 0.8878108555432394 0.7031455677216263 0.9211387782850673 0.5174050258359506 -0.46229792972430195 0.9690083898082826 0.8444187682239699 0.46777181025106374 0.9533207956793863 -0.8184764935910886 0.7675238004701643 0.28784099194143264 -0.5294653311173083 -0.26080499593995987 -0.8185863714594004 -0.0639543962753839 0.2886735784550143 -0.8568910147148809 -0.04018099636675698 0.6625593733316892 -0.9149291248647979 0.6136434010120988 -0.8592662866291974 0.5067675277110437 0.9388805560959155 -0.25788671836081756 0.9371278949299704 0.577507107954617 0.9343658927284382 0.4630697668542689 0.34034008576173136 0.14364517696447754 0.11263666234316294 -0.5561063451732853 -0.4539040110335264 -0.6953648540603534 0.06646449565815771 -0.541479700958557 0.22816242077180027 -0.8008366684049153 0.029986689645340903 -0.5899576691160238 -0.3969697413752822 0.7340415816226527 0.3478787935751204 -0.65801714365995 0.9695554667346777 0.501362124990514 0.4952773033405806 0.7685309765124364 0.1961261764903095 0.24574552532029226 -0.3451576909521441 0.36954993313906814 -0.5837937607166375 0.18928994610111527 -0.4720498544074547 0.2525723743857651 -0.8852558717118888 -0.7598510258034454 0.6562049717631737 0.07307096084700837 0.050305934362226745 0.6907798748418144 -0.7980267806910326 0.4152159529216157 -0.3427995068572469 0.1455636640730038 -0.9225401149956607 -0.21624069950746883 -0.09175975654149116 0.4257339395707507 0.5644344605304472 -0.39297738058837695 0.011653133662454795 0.3178794656205943 +7 27 0.47298823963038905 0.4124580273059921 -0.5839648530569992 0.094094576827362 -0.9045381513817934 0.3109319409175333 -0.3157886182412124 -0.9584819220889496 0.9789521329834059 0.9177439128516782 0.14700035300084258 -0.46821896428610654 0.5219278338520328 -0.3483303922267318 0.4268597958075959 0.05264699120639116 -0.7705103102333548 -0.43935591039861266 -0.931195332921835 -0.726610969008217 -0.725342819127035 0.06054433419876304 0.14442308896992317 -0.7975634736143198 0.4306406744983524 0.799498221315637 -0.5300264833146737 -0.3090834135202081 0.7555386909425541 0.8994509140447398 -0.7956078763733441 -0.6143611690176001 -0.8092033458777306 0.5718381208704855 -0.35602223776784725 -0.4280792793007564 -0.1489436061746625 -0.276060351346225 -0.6618279820348296 -0.8692093118696085 0.9755472188167451 0.42412851460574696 0.22093120978665448 0.12965361527672625 -0.5268423133290117 -0.8445236149314528 0.3308663187009586 -0.615372418951575 -0.6708986112438229 -0.21309421626174685 0.579944820975768 0.8539847033156458 0.4712805593272542 -0.6324503408531212 -0.40256244043178224 0.5119688868965588 0.9443750276624272 0.37986373497492076 0.6564840731874493 0.6541329552379962 -0.3964260094788574 0.5236492775470041 0.3808760058570666 0.6902648028828033 -0.5709868851511091 0.5122040293827863 0.7757120064270411 0.4214918123815363 -0.14548717919349552 -0.47572914238626796 -0.5829758443212014 -0.15956578365737695 0.3511213711245966 -0.9684159947699376 0.6406728945660767 -0.9402061548083445 -0.9137671208236435 -0.5929781217037204 0.01360257771063833 -0.8645570070598889 -0.7249543220373995 -0.384314748551702 0.6294061993185165 0.47564240909777045 0.9265183831251167 0.7404853305074766 0.041368642484608475 -0.06421079487580661 -0.40662692984421867 0.8847463222122958 0.9546015891349138 -0.5581978909388894 0.0756587836596323 0.2815773491449023 0.4959410940665594 -0.0838007332805657 +7 28 0.5439315077961722 0.8836885551447524 0.6872322135630813 0.9876550143569394 -0.5473786723829619 0.7832216964803316 -0.676586411556306 0.40600712271659467 -0.5337622382374105 0.24174237985492408 -0.43137359975011447 -0.8153442987257224 0.6089495761160162 -0.04728362901072258 0.9707355129978839 0.09319985681888432 -0.05062112545856401 0.4853961316795905 0.016570370889346098 -0.38388994599136295 0.2725538348119958 -0.8820229441916017 0.7326404802388167 -0.17528433094356566 0.6876646887677029 0.09136944986949724 0.3937759821526141 0.8921895641214637 0.5659767735483805 -0.9028199450545802 -0.2249749973081343 0.5508465894464656 -0.6445610903387342 0.09315317744930596 -0.828066994325164 -0.46988908954344955 0.017154262587612212 -0.802808582485772 0.8497711124633112 0.9188287181034931 -0.9390339013685589 0.17351462188387257 -0.22598885887123776 -0.19665339149449967 0.4315197238877817 -0.009873852852360976 -0.40091683443842685 -0.3956646462634712 0.6994822983383604 -0.07750281913945001 -0.6773450081554664 0.335347677117134 -0.38635286150619574 -0.60899830193917 0.06081737675469445 0.8974258421131449 -0.23369693407690373 -0.27225782947649146 -0.827143494235911 -0.10397832691748565 -0.3275390826041187 -0.08854772263912025 0.266507597900429 0.02055803778382903 0.4181460110558832 -0.1530794214635518 -0.25320733538916307 0.8410118893524039 0.990031632919383 0.8606822732027639 0.6425821687526716 0.02743052013893421 0.9996049174064396 -0.48527240771352487 -0.4707025300054113 0.015020345449839878 -0.29153684265547164 0.9079218565128313 0.9905324087846521 0.28749177953767635 -0.9281173476694122 -0.5588168479299169 0.4803915434147439 -0.6227201142277619 0.1454483745558648 -0.7615587538936359 0.2678227820895962 -0.7118240094275756 0.32925078643327144 -0.5775323424026544 -0.5243685771283841 0.359340480796543 0.533547574252661 0.32707508046023026 -0.3927279257494487 -0.4258588942925188 +8 7 -0.4242346404459616 -0.7448662238502837 -0.3728522240529004 -0.10274639003771813 -0.9695726645719296 0.07047860544590145 -0.7788797840122177 0.08891591359949302 0.7081895373296656 -0.33995282899700485 -0.5621198320785223 -0.22697288618656009 -0.13772811703150256 -0.14858243001286842 0.0216109438418286 -0.5117099247078685 -0.9968348477732625 -0.18121026002524987 -0.27337145047669886 -0.8322903118949077 0.34048922890483757 0.7940531467937426 0.6703331345695229 0.024796817597936505 -0.5381334668958822 0.3530085472188744 0.6148221836469483 0.26512537928739 0.45077696458128824 0.14484607542644667 -0.9014809759427058 0.9314679642839687 -0.41411155886527107 -0.5023534612944398 0.21617966770611274 -0.8133031370858679 0.0033737443735539774 0.9190496332608138 -0.0900118622385655 0.060215341246963705 0.7731643855358166 -0.14846337967453693 0.6144816096980676 -0.8201820211452782 -0.6639607016803346 0.45862807344854284 0.6856988902244647 0.6415113638235224 -0.9686118737289018 0.5501066701623418 -0.20904229483136816 0.6097407726798127 -0.9189759279850853 -0.8147625449721951 0.3638401714375705 -0.564699862077034 -0.6332759845687055 -0.3076759274743077 -0.4097667756242467 -0.4143789937088431 -0.797638898859431 0.49845947539947444 0.5162771296394539 -0.7244452949208053 -0.12501627789545333 0.814148888200261 0.8975338354959197 -0.3919494481517345 -0.8559475768744378 -0.10964729168412513 -0.6800418667063599 0.23738721007771502 0.8821951009072371 0.7325197305677658 -0.6087937783672366 -0.30054380624772503 0.21172617288798934 -0.82893418800256 -0.841266944791542 0.0721775749336897 0.17171684125152065 0.5307403031299687 -0.8391032018742479 0.5955513049035823 -0.9763269121973601 0.5298106681623185 0.06040843162907872 -0.18852367168958528 -0.09389723415453788 -0.12672450445946737 -0.1424119300451987 0.8337549109713507 -0.5711604266376213 -0.04638374797202838 -0.9067823019263741 0.09716954309079084 +8 8 2.5136478840289245 3.048640685525437 1.9439076858700726 1.7971303388822553 3.312281907122844 1.157022919999719 2.967539503793688 2.368100051086701 3.3033266021487213 3.2917171150788134 2.398936855190998 3.6902596165890422 2.744466310313035 3.202314946554391 2.054511784758968 3.3499173050869815 3.9685465542542833 4.117862745253748 2.622787055626835 2.98478555083398 1.2186234890682957 2.3940361787626263 4.140182012749018 2.7946793005531108 2.46260125836904 2.5164360787498623 3.586684190284938 2.2957268586563697 3.9151038106692564 2.221326683903005 3.100288621860768 3.566358361423594 2.13785459605071 3.171705307358752 3.4394952272667174 2.6735757777175575 2.0494709446039505 4.776719660032464 3.44042004401895 1.9344187099479624 4.183325392298412 3.2050235887111675 2.7967859856278823 3.467485050688758 2.2083195430157962 1.968442952133146 3.847969231857663 2.8176847488719456 2.711767695831508 2.6108918691473892 2.360562555655335 2.8660249700329583 2.392994353622089 2.514202315966282 3.1230877662357326 4.126474497620285 3.1676096036772616 2.982319447391362 3.896848871394746 3.115472069563452 2.6329260021532015 4.254052611664526 2.6634872244193897 4.83632612426327 2.4329867456267547 3.811610819054788 3.459871461003578 3.141889396985098 3.437416037231957 1.1607278198515854 3.6756140392935435 3.6876046881650453 2.8697972804825698 2.4008852116715054 2.6930354105988794 2.841211613490007 2.854657968478275 3.4895936668151175 2.5638860369964656 1.761358922540261 2.416557893857317 2.727477196434211 2.553890814847371 4.216667326624025 3.042343271360493 4.045979108154367 1.778657811049442 1.0778593980734317 2.7805494080814093 1.3972894022325855 2.8373872886033853 2.6451082658309346 2.9882754148655124 2.3076222435698655 3.0966855800330437 2.6942104323963143 +8 9 -0.2126613798923629 -0.5051736311893742 -0.12021422003329718 -0.21230548459683796 -0.8901457930380972 -0.49537076221275766 -0.18295933158267297 0.17436011769117954 0.6544749076217338 0.012663673895515482 -0.4399390065422262 -0.4723719078022208 -0.9759291880096796 -0.46055877083953156 -0.14345233094461562 0.37976289787080053 -0.02205332854344677 0.9990429777069338 0.11247432318256578 0.292560106626351 -0.009207665447547475 -0.006588191558015932 0.8077525577403242 0.24398715591430342 0.3813755026240768 0.28358673561485026 0.8260930143002732 -0.7492225925810088 0.8745697590337282 0.07369821239151952 0.6436519881369285 -0.557752344342564 0.19086340098742127 0.16955811666275133 0.9995922827206214 -0.007733747306046368 0.029034313462211747 0.9892675218824372 -0.7831694614603819 -0.059594367955124516 0.46685654875252003 -0.5759367409489686 -0.23694885478980332 -0.4938213589288136 -0.21852586377539907 -0.0812556649001317 -0.8330860725228322 0.017031248440129154 0.4448494185820693 0.054267448805250584 0.09211154046121717 -0.5243049958548487 0.253550325007301 -0.5380011773289657 0.511586042082177 0.5178416204723462 -0.10673465948317973 -0.2505267088487606 0.6834998413406899 0.8661104914618887 0.06300294791723071 -0.8456547920970685 -0.6803636783255314 -0.6496205420953154 0.5496360801238773 -0.6297627174708325 0.20021834203310052 0.2118470813251221 -0.02287208922439543 0.16370470885177135 0.5024565654998623 -0.7948117883725634 -0.23922291094603443 0.3751421081550037 0.5481544411345032 0.13283363263083214 0.7896870344079114 -0.19552868649708222 0.5847889346255988 0.28870029075524806 0.03420529056694699 0.3849822097637572 0.8980572047062625 -0.9627757157230123 -0.26862375983727915 0.5304429139450271 0.31398115819438077 0.3050180370077784 0.9170471771682855 0.17463496055346162 -0.10140148022285644 0.0369670546496057 -0.10879705499982628 -0.20394369168660909 -0.3976113390618121 -0.627213118833025 +8 27 -0.38555914852955775 0.05971135754031964 -0.00877929096163621 0.28936916410224844 -0.0714474853031366 -0.33878461605941945 0.5858745830608869 -0.3450797727189625 0.28311428125487814 0.2503299282878315 -0.4571919274181049 0.8062233213863459 -0.46935215332943026 -0.8568295983268219 0.015052810605937328 0.04107133223946913 -0.982338210965702 0.8745418853501195 0.9778699729637068 0.6180333915267362 0.445822101417388 0.5659775835336274 0.5020207866141415 -0.931695582993785 0.5083273125002927 -0.5467562344231252 -0.07718211932489227 0.028752715944941887 0.6075745086273203 0.3922803026558017 0.3999367484515719 -0.342071208350466 0.10646604264982673 -0.40243638568185425 -0.45241679087851105 0.8058436026071238 0.4797803460117289 -0.9258991330890669 -0.5646396356569208 0.21112610252586617 -0.7737999642997748 0.8996996808271529 -0.4778058970319903 -0.6373174789950864 0.2431589160145453 -0.3262693483805672 -0.895768767494034 -0.6769860213619641 0.03586226949488602 -0.5110240085875939 0.07075331154762687 -0.07431129711125561 0.18707875621625236 0.2789679639331162 -0.33994981730958895 0.9008241980942284 -0.9176437024054902 -0.06468412213272123 -0.8582809010311607 -0.42687018146111244 -0.4137678295584206 0.9824120131945431 0.25946097531054324 0.8287393196298305 0.9430365422015421 -0.3876877365583917 -0.7725070853587044 -0.7417706488983904 0.8612331851144523 -0.07003220603864913 0.6960838970138967 0.17537162664190342 -0.9362774690411895 -0.26736623474580323 0.5316057519634294 -0.8054124030626293 -0.7667911330086052 0.06947568194991072 -0.3337095544726876 -0.2841484066977258 0.7082347582676067 0.47138328651899686 0.08984289595535855 -0.5745803096429902 -0.46347655092520146 0.6299294509060334 0.1024296250054586 -0.1664707069268221 0.4862524423459629 -0.6707359094927114 -0.687403586042034 -0.6488353843672077 -0.3551299822831975 0.3552258224288094 0.6720870845535265 -0.7761912236604174 +8 28 -0.37038466031897466 0.6927247330072266 0.1739529744553443 -0.22514538536203954 0.8414053154025356 -0.09116288101086134 0.8793595518272681 0.5192662773189756 -0.6893672845557677 0.8676802083242052 0.1045855598481007 0.6843781892685785 -0.8401892266290794 -0.622146779414501 0.3193560041829895 0.9024478872038306 0.9257629224596267 -0.7984873115374811 -0.18103469779132997 -0.6747289796877771 -0.002484241301941692 0.6514707568824576 -0.45547081992790694 0.39089031537807073 0.3543893075867921 0.2073315488241687 0.5658956123780303 0.13606223164751796 0.5667300232729404 -0.757277736666861 -0.6068377746985583 0.5237513438229404 -0.9947448264719765 0.8634262105973607 0.8674687303142994 0.1450712045628948 -0.3917296386576834 0.489850596205075 0.862043626745453 0.7256553498889884 -0.7144275452014877 -0.5037938297279894 -0.1794566252371217 -0.5146409458780599 -0.3546807541930601 -0.18447076235777726 -0.13780952309385586 0.1219024538862592 -0.24973019357239457 0.8694513531539396 -0.28998556633418415 0.9141839656632209 -0.27823484699961765 0.09686603015788875 -0.8169480496553825 0.754645732912872 0.16874186213178044 -0.7074888304676166 -0.8129951728154929 0.6160320643782482 -0.751363443363366 0.7583243253417624 -0.365642744977575 0.6859017904889586 -0.08786333521363998 0.9628833554711873 0.30610514063475547 0.534223147738101 0.3305062250455899 -0.3634628522301486 0.7243856047091322 0.9984991613830352 -0.0747319191979956 0.11231629446666158 0.26573359429421006 -0.15836628901406535 0.40753323868380176 -0.8273320871820249 -0.5559574426395644 -0.8903641174125643 0.4522790810994426 -0.2655214679368125 0.17099015150832542 -0.9157911891113184 -0.3360023170377504 -0.6092198178440862 0.7387087196950874 -0.11308532312332176 0.29920759846714273 -0.049076098106480615 -0.4277988233876515 -0.2744566063314444 0.5135051637900705 0.851858315952482 0.5709217694061337 -0.1601403348760928 +8 29 0.32826624531155946 -0.06669850337261574 0.5070314499108761 -0.6827061768788594 -0.03301797763603642 0.05091021700154652 0.23236301522220315 -0.39931035698587847 0.4681742459066487 -0.9650295325479428 0.02256568431964623 -0.7734801711623962 0.09864503007452607 -0.3959723699814153 0.6822134133708433 0.5772190271510005 0.7039634773713674 -0.8810153671003615 0.40117765968286667 0.0017818598259455865 -0.19136274441435863 0.01604576472102881 -0.9676264568980901 0.3089207723755685 -0.6180116097741721 0.5228775860062798 -0.9694261889348776 -0.24114671159743528 -0.8702189358814314 -0.6600916372968326 0.1883487289903727 -0.4340836846013105 -0.3756982207036028 -0.6453912529691017 -0.1511127960599039 0.010559903941030901 -0.294056138027849 0.639690990026804 -0.1790612097134925 -0.7698667120314802 -0.8559484048831836 0.14175036340526947 0.6279199870987895 -0.9081996369916283 0.2763848222002414 -0.3609969293783353 0.39616455668842465 -0.37277935225251535 0.5140155335963248 -0.6078078171510741 0.9033262864086833 0.09561157342385673 0.18371012047561486 0.7181980761050133 0.7043274615298236 -0.8136702531646776 0.5838512528094195 0.9433514296265684 0.27874391551169064 0.709881225764859 0.3953013277985644 0.25719144876004574 -0.6927313762637048 -0.9581561616960039 0.5445648441017379 -0.41479547292560737 -0.3173869261376081 0.3581588846970023 0.3965524150379178 -0.03940386661425377 0.8435730008964 -0.7583852062238965 0.5485065307324037 -0.7547060856035279 0.17284937868754469 0.8637116754232106 -0.4841816501806451 -0.8189641990954164 0.05651101276286208 0.0780702178284638 0.2733761298393256 -0.18961256335607102 0.5210905789790277 0.5326364346393344 0.6771427107648229 0.9778504348148509 0.4101351489210021 -0.2580360248572251 -0.8129618635299964 -0.1766212351258003 -0.6330526131618026 0.414173790293519 -0.5644981727308032 0.6868133208936094 -0.42022218114819676 0.5101808144542084 +9 8 -0.2126613798923629 -0.5051736311893742 -0.12021422003329718 -0.21230548459683796 -0.8901457930380972 -0.49537076221275766 -0.18295933158267297 0.17436011769117954 0.6544749076217338 0.012663673895515482 -0.4399390065422262 -0.4723719078022208 -0.9759291880096796 -0.46055877083953156 -0.14345233094461562 0.37976289787080053 -0.02205332854344677 0.9990429777069338 0.11247432318256578 0.292560106626351 -0.009207665447547475 -0.006588191558015932 0.8077525577403242 0.24398715591430342 0.3813755026240768 0.28358673561485026 0.8260930143002732 -0.7492225925810088 0.8745697590337282 0.07369821239151952 0.6436519881369285 -0.557752344342564 0.19086340098742127 0.16955811666275133 0.9995922827206214 -0.007733747306046368 0.029034313462211747 0.9892675218824372 -0.7831694614603819 -0.059594367955124516 0.46685654875252003 -0.5759367409489686 -0.23694885478980332 -0.4938213589288136 -0.21852586377539907 -0.0812556649001317 -0.8330860725228322 0.017031248440129154 0.4448494185820693 0.054267448805250584 0.09211154046121717 -0.5243049958548487 0.253550325007301 -0.5380011773289657 0.511586042082177 0.5178416204723462 -0.10673465948317973 -0.2505267088487606 0.6834998413406899 0.8661104914618887 0.06300294791723071 -0.8456547920970685 -0.6803636783255314 -0.6496205420953154 0.5496360801238773 -0.6297627174708325 0.20021834203310052 0.2118470813251221 -0.02287208922439543 0.16370470885177135 0.5024565654998623 -0.7948117883725634 -0.23922291094603443 0.3751421081550037 0.5481544411345032 0.13283363263083214 0.7896870344079114 -0.19552868649708222 0.5847889346255988 0.28870029075524806 0.03420529056694699 0.3849822097637572 0.8980572047062625 -0.9627757157230123 -0.26862375983727915 0.5304429139450271 0.31398115819438077 0.3050180370077784 0.9170471771682855 0.17463496055346162 -0.10140148022285644 0.0369670546496057 -0.10879705499982628 -0.20394369168660909 -0.3976113390618121 -0.627213118833025 +9 9 2.6476081476616686 3.3211957064695508 1.559242569801752 2.418693346490976 3.9429337870538914 2.387391618184753 2.2173830526362917 2.347706133821188 2.8962387014288598 2.5812091233861025 2.5313121401713223 1.841332307959149 4.237687415558192 3.096854579439455 3.594976330902739 3.3552788208866793 2.9055370176550404 3.6209395730344562 2.2594450300284907 3.702136889777787 2.1209181074945676 2.0510139719861855 2.8475979348362737 2.7441396410068055 2.4291305647991077 2.8458317768970858 3.2296120859171458 3.095476983181393 3.452494884081762 2.247039962056647 3.182203471553645 3.3581253072149577 3.7161695376459427 2.4328738108897077 4.628949325914991 1.0480014160394748 1.9160340857328704 3.895755779391016 3.489007594814563 2.7676567178182183 3.2555980992666074 3.159307206112253 1.7522154060999475 2.6984327677911972 2.261110550421384 3.47399926837444 3.2025739298196427 2.210771509762644 1.9696667010571822 3.15352789983137 2.747902978797101 4.614022051681469 2.7683909195933736 2.3814213842462033 3.813746383309683 4.358697031459171 2.924287885091636 2.2894406272939327 3.8829774988880192 3.19370050163732 4.139868863938303 3.420499972396575 2.5633811310380104 3.070424757609783 3.096127434056962 2.810865321762714 2.5507201807036637 2.5290490209637646 1.7391544495581248 3.212583155125849 3.579858909529478 3.1934002446401326 3.6944287809621783 2.3469087514093134 2.6417303362133517 3.218601900233617 2.576295991379972 3.388535065427881 2.9306853951860603 2.766064315557326 2.021999274074976 2.66000798448847 3.6229050315843008 3.015249125189049 1.525353841665556 3.8123601336341553 3.5063085819012647 3.2718050012419115 2.424114147021461 3.231362742233884 2.4367750542437907 3.0255397110396336 2.7296402322884274 3.881876884278422 2.8638842371566446 3.154844876988462 +9 10 -0.8955145878155357 -0.9178493838936801 0.039450485868137264 -0.949658121982051 -0.665983526726331 -0.09400877253820283 0.01204922329984015 -0.09322822517715434 -0.041620205516964104 -0.5583874937291979 0.47040267994177687 -0.5594257019557696 -0.2709343904616319 0.5544163197482119 0.900336665740868 -0.11417767946150437 0.6017402144015582 0.8023868226285609 -0.0907246378628579 0.8336752564354495 -0.15567329552202813 0.9053995668007881 -0.4902319027080404 0.7221401869437045 -0.22385133653249123 -0.7218136792579197 0.19279705709073713 0.1164311710145518 0.2742613072094504 0.7519931181366155 -0.818422372869033 0.6573385029843006 -0.8894172978831945 0.8117163903494575 -0.9777002384049869 0.15815666143926266 0.5924281762401988 -0.9905531923722315 0.22312430796379834 -0.027241839441055626 -0.6706642968791707 -0.6008094087165001 -0.3716273405150179 0.5096363875665875 0.7961197840546663 -0.23533248172214893 0.4285676907728382 -0.8924034801385898 0.16667009776198327 -0.6384082813752603 -0.7991585487662198 0.7627504552843252 0.7568190928006291 0.19885904657383513 -0.6296476856883437 0.9941632608696216 -0.8584158483096931 -0.35843640902039575 -0.921714750453603 0.7897514202086247 -0.8303004937475662 0.901953790881868 0.23881079604672473 -0.8046296843805414 -0.4703776760343614 -0.3099476343839318 0.09068424951857357 0.12497972653252254 0.3479553104658446 -0.8238324281070519 0.5213313847226531 0.9876239146374104 0.7727155582251752 -0.5665616790955765 0.6149018066412426 -0.662708291669724 0.4628754342370498 0.32173351155857444 -0.7362988197553799 0.3704805007361709 0.4655524541162206 -0.9312528184858186 -0.30793752299955135 0.20486604928286556 -0.08706008966711232 -0.6922826576526022 -0.9313922563872019 -0.7936284887877922 0.17130084834965742 0.5989013622263215 -0.9074543642676614 0.9771286861960868 -0.527591989349216 -0.5766536707636583 -0.320582250165075 -0.7556752325463318 +9 28 -0.20239599990904988 0.5671437821694398 -0.6151618761438271 -0.04618220776768056 -0.8231067418732585 -0.4475602980615969 0.42570267684873087 -0.4642374766081647 -0.09396688923002605 -0.15936830033890148 -0.0793023328864868 -0.3619870809451884 0.7185311917547048 0.2764456221683147 -0.9728169766144901 -0.9655276813654743 0.03775013385730408 -0.35994437727003126 0.6920945927914177 0.40190139578717177 0.3404736186707127 0.11774361194067184 -0.7875022018118025 -0.8849500656916045 0.44937605685395043 0.22764489859656778 0.571117507787593 -0.36657326487118125 -0.23054917597708546 -0.0730660061032049 -0.39558282561866354 0.826689275341431 0.7911877053117122 -0.6731240638212588 0.4726566535594212 -0.0912794710134035 0.054596838168656125 0.05058411220813319 0.5755527956299404 -0.6945607382936212 -0.2939767720302551 -0.19355395852612545 0.27764647896561634 0.6438835717430786 -0.1271216223579945 0.9137087778044839 -0.1599125275159956 -0.29532901849392124 -0.051204737996466854 0.9815607796932813 0.24157509513060949 0.6071639089352734 0.4059406079425061 -0.0535770694811637 0.8280071671789309 -0.7722461863623855 0.32604629385516515 -0.6062453341156366 -0.09197896673427142 0.7226028740617672 0.7036698611671133 -0.2107399704948958 -0.6043408772618963 0.5837387758418147 0.5231788623707787 0.9818767620886091 0.17517527501501684 -0.3520333670651221 -0.7931843242742529 0.3443369286908877 -0.7317139061298228 0.12652278701957997 -0.6935303846500096 -0.003994558025914197 -0.6699435799186915 0.965175395152609 -0.3092302114056307 0.3860773752437745 -0.4966437831451611 -0.6158137252187386 0.5291774890182035 0.6618488573102774 0.314099553619245 0.585091026542415 -0.2885315941391773 -0.3463305014431457 0.7242882972264715 -0.6622758157469268 -0.3723225821655487 0.7772923859820848 0.7500635354699505 -0.628973273615806 -0.4979382564502952 0.6956693844819084 0.6741925709925394 -0.6918521625362686 +9 29 0.6782938284807194 -0.8398477041013126 0.012242646632979248 -0.7090015415956603 0.31809140244823264 -0.2339139461375277 0.5136449864658454 0.950463960091084 0.8299677333239481 0.49115746254639925 -0.8270562837724895 -0.08651736844029645 0.7452016427681918 0.8774631941721582 0.629651728595608 0.7852129498851588 -0.9327402099733915 -0.31271073563236373 -0.38430029220413897 -0.47353139750896744 -0.4103027052941477 -0.06774368551583443 -0.5056070880600665 -0.19881979262654959 -0.04261720887959353 0.8393884816800865 0.8883905589998846 0.47761982017800086 -0.6965486795382148 0.3615773883343396 0.34949123121519055 0.5466755483279064 0.3760942014208535 -0.20642215112595874 0.7397106678853136 -0.08437807680332177 -0.20037523159414783 0.13640521994188837 0.7164989019057217 -0.46049757243358025 -0.6920857369415814 0.8620982200618963 0.6498414718299428 -0.08570925754778225 0.2945268103751779 -0.569949555936905 -0.5093387877036617 0.7302986066437451 -0.12280811957040605 0.4035535645798507 -0.6499843299731367 0.904309079881187 -0.6216824775000775 -0.4115877036924642 0.0781792770198404 -0.5932931487530855 -0.7665438496733024 -0.4675044442073786 -0.9715030411432195 0.6082390984362946 0.8414078024622631 -0.5463560088336281 0.14275750316385305 0.2883843998644744 -0.8515958529225565 -0.137278269134951 0.8619466233265947 0.6674436958764387 0.4027676173379433 0.7888910500977357 0.8792821065951657 0.10498258621019141 -0.9532644536458794 0.2525385209438158 -0.11305981291957123 0.597418282400213 -0.3773874997752942 0.9972504162953775 -0.036473775959597665 -0.6530161334354743 0.2822788941667267 -0.19733164755682742 0.7251616663618086 -0.12689302254752577 -0.028329947170775194 0.7801364561765836 0.6002483009003141 0.278414872287559 0.7861141122236637 0.552870073062661 0.11990155135970104 0.6456102703971018 0.9296166434757267 -0.8637628929355936 -0.4152272558642274 -0.25342754934256884 +9 30 -0.6434675725793186 0.03666219059888376 -0.6121221785476307 -0.4832468920929658 -0.8919022546350435 -0.8072812073436886 -0.6976815436691663 -0.5903380512930312 0.3815038824087442 0.7411661351820293 0.1686055615474953 -0.185625624712761 -0.5725921978053037 -0.7892006080890528 -0.8024800861439443 -0.7375929569796233 0.4119408305818162 -0.8855994571846437 0.1647024418841574 -0.7252372929615516 0.2306994807584657 0.48630865635129794 0.08449769252319062 -0.06564363216453994 -0.8793544263124957 0.5872466315227334 -0.6168572714855403 -0.9982329254340983 -0.6250821091866898 -0.27550363328344285 0.4008149234878968 -0.467281292881806 0.7099132515362714 0.44329983447899934 0.9354555849260513 -0.04925252400283475 0.7457247084237122 0.8668637373860095 0.2363798747338859 0.5943821254033419 -0.3959962146862195 -0.2160119580425799 0.1052887890425338 0.521782107852381 -0.2190543047566842 0.731234432797639 0.5557988017413356 0.15157934100602577 0.2203955762850358 0.9556689789123738 -0.8305861834004216 -0.8598922721696611 0.31957986072749867 0.35850423651534435 -0.7842119395487095 -0.8671342049644586 -0.270111495077787 -0.2575707461617607 -0.41595981362112755 0.05238551101352562 -0.8399307533853659 0.9021147115115549 -0.4466992795092166 0.3539712101347876 0.4065650131773222 -0.4752320509468253 0.7161372160569752 -0.8242058873090468 0.0853053314975385 -0.5531266254988618 0.4722226422327196 0.2203711290518784 -0.9788041020832083 -0.3533784043498134 -0.2988141473627608 -0.06295658892745326 -0.5560865883855226 -0.6354246899642673 0.48054995376303045 0.776491671661707 -0.41721780562640176 -0.43395633426595204 0.7982419458919272 -0.34800258715196963 0.1568012475144993 -0.8169916522766425 0.03474759222389712 0.4950338251341635 -0.07290711845096975 -0.9338050389604595 0.1257417587159806 0.06912185302689622 -0.5657886570109316 -0.8674407196358185 0.4047921106648542 0.03313226670771585 +10 9 -0.8955145878155357 -0.9178493838936801 0.039450485868137264 -0.949658121982051 -0.665983526726331 -0.09400877253820283 0.01204922329984015 -0.09322822517715434 -0.041620205516964104 -0.5583874937291979 0.47040267994177687 -0.5594257019557696 -0.2709343904616319 0.5544163197482119 0.900336665740868 -0.11417767946150437 0.6017402144015582 0.8023868226285609 -0.0907246378628579 0.8336752564354495 -0.15567329552202813 0.9053995668007881 -0.4902319027080404 0.7221401869437045 -0.22385133653249123 -0.7218136792579197 0.19279705709073713 0.1164311710145518 0.2742613072094504 0.7519931181366155 -0.818422372869033 0.6573385029843006 -0.8894172978831945 0.8117163903494575 -0.9777002384049869 0.15815666143926266 0.5924281762401988 -0.9905531923722315 0.22312430796379834 -0.027241839441055626 -0.6706642968791707 -0.6008094087165001 -0.3716273405150179 0.5096363875665875 0.7961197840546663 -0.23533248172214893 0.4285676907728382 -0.8924034801385898 0.16667009776198327 -0.6384082813752603 -0.7991585487662198 0.7627504552843252 0.7568190928006291 0.19885904657383513 -0.6296476856883437 0.9941632608696216 -0.8584158483096931 -0.35843640902039575 -0.921714750453603 0.7897514202086247 -0.8303004937475662 0.901953790881868 0.23881079604672473 -0.8046296843805414 -0.4703776760343614 -0.3099476343839318 0.09068424951857357 0.12497972653252254 0.3479553104658446 -0.8238324281070519 0.5213313847226531 0.9876239146374104 0.7727155582251752 -0.5665616790955765 0.6149018066412426 -0.662708291669724 0.4628754342370498 0.32173351155857444 -0.7362988197553799 0.3704805007361709 0.4655524541162206 -0.9312528184858186 -0.30793752299955135 0.20486604928286556 -0.08706008966711232 -0.6922826576526022 -0.9313922563872019 -0.7936284887877922 0.17130084834965742 0.5989013622263215 -0.9074543642676614 0.9771286861960868 -0.527591989349216 -0.5766536707636583 -0.320582250165075 -0.7556752325463318 +10 10 3.380860796516192 3.302222372104834 2.574775667764383 2.874748485790162 2.0194384283306457 1.9744105503228457 2.3445260603897204 3.1196642472633065 2.1130915269832125 2.764540978841665 3.4442726647263857 1.3998409296038585 2.737175927718151 2.9574245937268397 4.35542991565861 3.0279949346314052 3.8937004521395 2.408308041462794 2.576073700013847 3.6189055563060393 1.7839918959165437 3.336186248984004 3.23140469181818 4.016057900405545 2.316394371080115 3.8740941422481194 3.539916221885793 1.6081352739702321 1.9425641195661947 2.3933619455433917 3.0235486113130063 4.04441307398225 3.5376970509012677 1.8866882326226952 4.083852556234795 2.3288336252768436 1.5413347498066874 2.8745551064163637 2.63636996909079 2.614473127076736 3.6122904774137075 2.9963362512147187 2.8793568953947832 3.5151880031062444 2.7746342536140602 1.7437358835740235 2.9881442844562267 2.5092244044234735 3.1607078857595763 2.9178159995273125 3.4521717102629035 3.237023096617916 3.924703670965261 2.493776193702441 3.1864593879208853 3.835451084525642 3.8738580707707655 2.162037030168566 3.8639693224354676 3.6389875733931856 2.844658772913135 2.8165441777036433 2.197879662678945 3.348561911255704 2.5794494042722156 2.5114713857642563 3.347207340050989 2.0031194056932304 3.4492680113689858 3.7305083386461733 1.996241527497477 3.5560273835433502 2.775484452239906 2.1932846311053207 3.4712087516273042 4.286934809231101 2.032133635748975 2.268481964262394 3.0334328085575457 3.774255125458522 3.056721295442843 4.229579368395584 3.0746454013124502 3.7559388344214995 2.0243462744244107 3.3700615501923563 2.9127660547633143 3.440975413613132 2.9319309925492405 4.254096829800727 2.4373802775171325 3.2781411014499287 3.7192331345885203 1.9520165946330155 0.8422554942614517 3.063855716666966 +10 11 0.4094585709739591 -0.19953780929374343 -0.08204407626411259 -0.06928829379431889 -0.4287233475692007 -0.107527391634622 -0.6558466071790445 0.5106247126963046 -0.37353168642671686 0.6122637717065988 -0.17045455194054626 -0.07609233856862252 0.46868807774650834 0.8323234347696513 0.8754142239500018 -0.5553354866975082 -0.33767308712876987 0.20952855232598733 0.3293798426759691 -0.6488929085445092 -0.38071766584827205 -0.398548356615557 -0.40517496421424504 -0.9127581986335609 -0.5080343512926873 0.9687717858082803 -0.8090544117596796 -0.549998811981045 -0.5598299183143278 -0.021626551548698414 -0.3290325410284769 -0.93079157138323 0.007271067392344843 0.1323689505512795 -0.5526296997228946 0.009456032114179447 0.08373623723351753 -0.6386429533396185 0.030900906623239965 -0.42339496074467675 0.570901179752769 0.12518989408768055 -0.3499004860559931 -0.7033661111123755 -0.45894618465638937 -0.1619039176652075 0.009244877646888527 -0.5251864347097868 0.6520502875165757 0.2832591177218333 -0.6957708950610293 -0.6461003658592661 0.8930807205667721 -0.23377129005303043 0.8848586387181026 0.8020946943546163 -0.997400013949125 -0.3934199821599744 -0.6754716983729003 0.8097894982747742 -0.3629388831985212 -0.634198450031678 0.2159870946720226 -0.16166899804670898 0.5827157630344391 -0.2569750165742879 -0.682787387031436 0.10714212951690372 -0.7122863327383935 0.8212028816320991 -0.01487982796847609 0.5391430937574855 -0.3797498289044672 0.20099236481065508 0.8650552397581834 0.7871397723773004 -0.7731744952937247 0.31189709590449777 -0.1945566183417875 0.5578012303011453 0.6224618490055407 0.6925833195006899 -0.48725004540297556 -0.5514264569676348 -0.006084186363812583 0.09086687281459005 -0.37950783100667196 0.9975044342761605 -0.7829159522454627 0.4032123520513695 0.6705663199723146 0.1688838396308754 0.6313244805450873 0.028737164969565798 -0.1771170979726453 -0.9786071160703815 +10 29 0.3375342078584045 -0.3501803307806328 0.800129952024214 -0.20416925133110286 0.2425315140642692 0.5422715961829014 0.6621242079066019 0.832373913948117 -0.11345362508962387 0.14799871634346218 -0.9293272447244818 -0.13083438884073417 -0.06681321666006723 0.4000639523475722 0.5669376005206608 -0.9503459277550688 -0.9736045650542233 -0.09225783885320227 -0.5921604376040677 -0.5789127032646131 -0.2595968967540032 -0.5242778610068974 0.14374454881961318 -0.5784081717769212 -0.6156714232386344 0.9869377002160797 -0.47531280335163917 -0.028202399432060377 -0.35437684411853887 -0.7212533387085924 -0.009798450206483178 -0.9930306026916651 0.599827797595277 -0.20033512096044515 -0.769890481648587 0.16850286810104764 -0.0302519848906746 -0.499041478251556 0.228138012987112 -0.8481111337655021 -0.7844433586405242 0.9312929003829225 -0.41547279631740497 0.5061551409205947 -0.5649420600655581 0.014657241991628878 0.9688544250842537 0.19887821590921795 -0.4366241103985504 -0.8316203271536204 0.21752278348102805 0.25612159916222343 -0.03866387682843864 0.9144289582664038 0.3999132497395026 -0.6881710339620419 0.4490882897194717 -0.6357917112386824 -0.9894333397355359 -0.957184348681188 -0.19363356738880078 -0.09470061644709493 -0.423062042755999 0.661266103697818 -0.19490509512173593 -0.08617023037787463 0.7551004281091478 -0.2142714744520362 0.8709941270552106 0.02257545518742976 -0.5061553505735163 0.5845368398398183 0.26257017218977285 -0.06253960436622608 -0.46519378180017235 -0.6794767644326132 0.19893458119790375 -0.2581028926599005 0.4063991856867102 0.8796064180481358 -0.30278156714547877 -0.8227607009725759 0.37835705506031303 -0.5489545975030132 -0.018757076595718125 -0.7759774815850766 0.051724544949325546 0.6751082584278947 -0.03551450018509361 0.7608280909192648 -0.2712955807327684 -0.5594341199684039 0.7022002007683956 0.14704972132144878 0.11554717523184932 0.49759298082051573 +10 30 0.7931030723073209 0.8397193095149333 0.9212587862755606 0.43377790426575147 0.19724205263293548 0.44174882449577746 -0.7846632463173131 -0.7529157149447605 -0.9142479063153706 0.02749174735955151 0.5795027488324453 0.18558192672141405 0.9936297308550903 0.4214525402700282 0.7374062396438703 -0.42394457301568345 0.26502058135414397 0.6658265388938818 0.02241401782195851 -0.9568861402821405 -0.008308931262047015 -0.43189277910911517 -0.7224723934935187 0.6510107572296338 -0.3500995010127266 -0.34041911194081687 0.9820246142839213 0.1817545755665202 -0.2110603562200417 -0.6094705545437569 0.8336164802001824 -0.9851751473831123 -0.831177596581613 0.3360837278181492 0.42102203750768497 0.972553040516897 -0.09175310755764232 0.5746684523974146 -0.6793711069458797 0.09030205135100244 0.9507478322129894 -0.06273045927654497 -0.575924312370097 0.41988310461745537 0.8498791969160375 -0.9603177817987996 -0.591785717742864 -0.39825155493802544 -0.7668556950977343 -0.28090175063360845 -0.40596122562365866 0.4970494571026407 -0.8222464452027418 -0.9389707162359835 -0.03418757364711311 0.09466932138231843 -0.3371307368705949 -0.5923803687963975 0.4901161808015142 0.16539955518306027 -0.2150625893393734 0.6672162296724671 0.6634103754642777 -0.9922842276140227 0.4417618618977859 0.8565926181933399 0.6284235036804113 -0.3231884008870016 -0.9985879892530174 -0.8153483817130516 -0.03505399669454867 0.46301290736363865 0.3436842844171142 0.8152614495277777 0.883123631552061 0.819107811798089 -0.05786642045398649 -0.9573336227015921 -0.4665912772295193 -0.9413631075527251 0.7526429776593442 -0.20156155620205185 0.6067622157213437 -0.9356798484866597 -0.5025680736934517 -0.784947723021286 -0.3950653459589024 0.028286521253741093 0.4543280419020588 -0.8497912743365632 -0.03473145084714213 0.5908376259635615 -0.8233877869314727 -0.03915890033516223 -0.06950680886325555 0.5938108598369423 +10 31 0.005511422548410305 0.962029142975581 -0.502888306399025 0.36610463536093185 -0.1891949316106185 -0.6098129400205083 0.06156971166660474 -0.813990346099231 0.11739669303012668 -0.8591981140063365 0.8463195873809932 -0.4245623957822726 0.2790632086515765 0.3381873463333871 0.7187065869255209 0.7317702964874022 -0.7173438158266159 -0.014652421888716738 -0.5569927976069913 -0.026686981362325612 0.7055998473333265 -0.6903639714120229 0.951571144499749 0.1619671054141012 -0.19994328523521676 -0.7876288679126862 0.15267654558691013 0.5513066316978117 -0.20390072884911814 -0.07034981747256075 -0.3917600706021729 0.08660220907013971 -0.3888510383116577 0.1019319067345823 -0.4173192050665704 0.45746033707557787 -0.6834405984964247 -0.13325487127220192 -0.6229861967442176 -0.2341351782154455 -0.16951363841758993 0.9910478699547856 -0.3827778754893725 -0.693524759558513 0.07159689335789632 -0.27851566942509165 0.9070350125212938 0.42275620686288695 -0.9382329452861498 -0.49306931203243565 0.7052764499815911 -0.177470295312937 -0.64449776083075 0.18820848003637258 0.2381222191878236 0.8924655609851047 -0.9427049490152244 -0.010231256593344895 -0.5268237845727468 -0.2488082933167075 -0.6138137576015963 0.04133264947689219 -0.22329477933661934 0.24273375638273742 0.39132819276800523 -0.4536891463252015 -0.46918853725980036 -0.901819893780837 -0.055360340994151214 -0.693482756434491 0.6883272117361472 -0.9665358494505212 0.5766758046537857 -0.5432788325202151 -0.016057347389516474 0.669425630994511 -0.3931199563753671 0.2365335649778777 0.6891013233153076 -0.9792415344514052 -0.7704287996873702 -0.7155182688112003 0.655170801284916 0.522006757350719 -0.777291205872831 -0.6161624986646996 -0.31987577346169416 -0.7673402276316206 0.5636707043831188 -0.8020553433709008 -0.43234871564404775 0.2686842211691709 -0.42698005588277743 0.2516415871179738 -0.13678958795971186 -0.04186219329554963 +11 10 0.4094585709739591 -0.19953780929374343 -0.08204407626411259 -0.06928829379431889 -0.4287233475692007 -0.107527391634622 -0.6558466071790445 0.5106247126963046 -0.37353168642671686 0.6122637717065988 -0.17045455194054626 -0.07609233856862252 0.46868807774650834 0.8323234347696513 0.8754142239500018 -0.5553354866975082 -0.33767308712876987 0.20952855232598733 0.3293798426759691 -0.6488929085445092 -0.38071766584827205 -0.398548356615557 -0.40517496421424504 -0.9127581986335609 -0.5080343512926873 0.9687717858082803 -0.8090544117596796 -0.549998811981045 -0.5598299183143278 -0.021626551548698414 -0.3290325410284769 -0.93079157138323 0.007271067392344843 0.1323689505512795 -0.5526296997228946 0.009456032114179447 0.08373623723351753 -0.6386429533396185 0.030900906623239965 -0.42339496074467675 0.570901179752769 0.12518989408768055 -0.3499004860559931 -0.7033661111123755 -0.45894618465638937 -0.1619039176652075 0.009244877646888527 -0.5251864347097868 0.6520502875165757 0.2832591177218333 -0.6957708950610293 -0.6461003658592661 0.8930807205667721 -0.23377129005303043 0.8848586387181026 0.8020946943546163 -0.997400013949125 -0.3934199821599744 -0.6754716983729003 0.8097894982747742 -0.3629388831985212 -0.634198450031678 0.2159870946720226 -0.16166899804670898 0.5827157630344391 -0.2569750165742879 -0.682787387031436 0.10714212951690372 -0.7122863327383935 0.8212028816320991 -0.01487982796847609 0.5391430937574855 -0.3797498289044672 0.20099236481065508 0.8650552397581834 0.7871397723773004 -0.7731744952937247 0.31189709590449777 -0.1945566183417875 0.5578012303011453 0.6224618490055407 0.6925833195006899 -0.48725004540297556 -0.5514264569676348 -0.006084186363812583 0.09086687281459005 -0.37950783100667196 0.9975044342761605 -0.7829159522454627 0.4032123520513695 0.6705663199723146 0.1688838396308754 0.6313244805450873 0.028737164969565798 -0.1771170979726453 -0.9786071160703815 +11 11 4.055657301525753 1.928059820204531 3.484480526001645 1.1597188351068022 3.3130459955227285 2.857176527881024 2.3291934272109205 4.783208370730969 3.001645499465144 1.9015766269309438 1.798623724232197 2.1554728375414234 3.272048889341957 2.919847018985072 3.6922402308235305 1.9967252083019513 2.3098978407215576 2.6241400578251852 2.4533163199033234 2.8651827923846698 3.24395542188635 3.5955589900484743 3.533320295802412 3.6333092244380314 2.332336236156454 2.5678543826081492 2.441185216067107 3.960196803643674 2.9998192976498324 2.309861309094577 3.860174584207596 2.6016862930351143 2.824353898687967 3.359108220463619 4.080871201164995 1.437851223760107 3.0608786668643284 2.0629945799745197 3.6042881308508363 4.228798416291653 3.438846015039565 3.163350314217131 3.192318735415224 2.407157614682909 1.8167690733774644 2.725669940755319 3.3669679327955073 1.976138260387108 3.5361206087613093 2.0255850090217633 2.3737610089827346 3.1896361261275112 4.98769885567152 2.1134307720455605 3.4599822512045177 3.423559524032386 4.132917746894334 3.467745344059087 2.143851869612287 4.045665845707729 1.8372933983133852 4.2351649149565525 2.2832316404047344 2.0923776117799537 3.73509183156532 1.8642439096839485 3.7067842063773524 2.6541499312908208 3.2057888245058104 3.470615507791912 1.70863840421654 2.5806581174952647 2.3492201349583937 3.1880747932343154 3.2569434858037494 2.3685917340755944 3.0557848412688204 3.866931032903864 1.647594181595968 2.877360312282388 4.514206731592199 3.456290595601945 2.7178565074708843 4.0694998429353655 1.8947523057180213 3.039712956062477 3.5648906783896543 4.258396051370855 3.3278989751030204 2.451629071145678 3.4148783093385076 2.3805512106489677 2.9485595784778327 3.0219974855123017 2.4717444910227786 4.296780778828275 +11 12 0.8347395858553972 0.16843320671235484 0.9108914270337296 0.06659978431955138 -0.8248558795904843 0.9014789601036264 -0.8880465625374059 0.8846536331440116 0.4398637062679065 -0.3237338713160758 -0.8174434733706781 0.08219353281622555 -0.7900242022191 0.39980295523791387 -0.9074484190747236 -0.23865686207025716 -0.3694558484383823 -0.37144821868005806 0.776356089634002 -0.4531702062793337 -0.5279166591453615 -0.7930709970287819 0.9619137956745625 -0.4306835312554782 0.21628070018569923 -0.1629119182437686 -0.01473140356814584 -0.5482420601702362 0.15113016304480653 -0.2690960831701794 0.7639780903407432 0.30298719281704445 0.831655882452663 0.1892235861589442 0.9307710336292208 0.1403261340347579 0.7319347528087896 0.45018912113808685 0.7834274619798212 -0.6778585151455145 -0.8731391815639467 -0.2819386040919454 0.7867755095551492 -0.5192245204325103 0.11341666199665323 -0.5056326053373861 0.8567120156449193 -0.9621850617015952 -0.5693711408756765 -0.18164740815727387 -0.6817076341966417 0.3021053280554138 -0.882922394323312 0.5482405661888474 0.5619279263017432 0.9354043493814221 0.12567805683115485 0.947816315569564 0.2786231489124915 0.032326584442656126 0.27124886844568974 0.9155360573104692 0.39108538337153975 0.09922929886485576 0.9142886225025035 0.1573065903244153 0.5420626835274611 0.4003186892691275 -0.24803113163526436 0.15514825165341595 -0.33779992679232507 -0.45743241856305317 0.2755825553973812 -0.9887817641400349 0.3356174215574297 0.1340918611734434 0.5198598676225314 0.37082856433961053 -0.5849961120631437 0.786899886828826 0.9997785182309504 0.7686759995772063 0.35856961589998204 -0.3771281737758183 -0.08771427787917374 0.47085137630125273 0.7701039315122498 -0.6845534127262172 0.17984366853023226 -0.24917306621482616 0.5963121451099678 -0.19380487896140797 -0.9459170020297432 0.9944525421994483 -0.371045820925362 -0.6679671863923244 +11 30 0.04228563882895586 -0.07173996026786567 -0.37132003867577046 0.17695820807891982 0.8955204030152153 -0.7915500155101374 -0.3505439115345952 0.5145062622500023 -0.6655999714971284 0.15781434439208608 -0.3193525174314107 -0.8829360893798246 0.661321084439535 -0.40286582827675366 -0.4017740072655025 0.12168148822810698 -0.09521002503268083 -0.5133292877065962 -0.1652583232125704 -0.7143487136967908 0.8542683751349271 0.7227423273968043 0.6558817423762191 0.749515109689556 0.706385376837521 -0.4048494059524148 -0.1849768537644647 -0.881708065278221 0.5259945104407147 0.5358183157716492 0.9325127638268602 -0.08123411606207287 -0.4846884703322616 -0.8433805545944388 -0.8733024119970856 -0.6967430988646448 -0.44049880603238467 0.137950545054089 0.8413342215175985 -0.6459491672036799 0.2506328138849372 -0.9205476063247326 -0.721398306138533 0.03463959761120794 -0.20766730806007128 -0.9747468854943286 -0.7404091771811856 0.051527414477850364 -0.9096207793772595 -0.009970665837966353 0.17275217599229786 -0.7330408223585163 -0.6480987880602171 0.18557146874101815 -0.6125282722530716 0.616030624447327 -0.84197138069478 -0.14362060111720876 0.10038743311197518 0.8047106561312947 0.9042908285225639 0.4315178569705489 0.18799697130054693 0.16242035158453683 0.8321978407789656 0.4226397067234564 0.8367461091722088 0.2069041116719914 -0.4740558221774498 0.9123571238748702 0.3345304803112914 -0.3967259158346119 0.2625134276194867 0.4095493567534856 -0.23665729715128658 0.7175954746125284 0.5594797862795102 0.9046096388176634 0.19798806985278938 -0.3413352615260761 -0.7558302362518161 -0.02406597081117856 0.32362888960108793 -0.7057044927095786 0.6363717708463681 0.5628138520806707 -0.75333547348641 -0.8595721040444702 -0.6808168376707193 0.17448851686349465 0.2976738411216755 0.827208845521725 -0.4904657940600483 0.4376695075880159 0.3169457532659463 -0.3961334419193754 +11 31 -0.8969711284324418 0.03682750968346049 -0.9065868768691039 -0.024298119915972638 0.6741974525788459 0.010501102810042795 0.012024466038614845 0.9640307695358958 0.5193145904381136 0.6296355603643213 -0.057956336428440114 -0.29422352852336986 -3.222536935898468e-05 -0.1112857414740902 0.23021664858534008 -0.020174433636370948 0.10615612799945384 0.8367973411313261 0.7118419045074167 -0.08724420096299812 0.3660047621372604 0.3038363122131005 -0.8965932101462675 0.4749490493031996 -0.47309256101905506 0.48790071766527787 -0.2518134655526054 0.6329044312909826 -0.9027690075086858 -0.5874806680784288 -0.6609363653098661 0.39800437145408196 0.04289618090323377 -0.4296038746704265 -0.505195010557864 -0.1781076915867672 -0.16166227080167905 -0.40824569650099063 -0.6705237257757972 -0.8901260152030297 0.666539715748518 -0.603386570344534 -0.2506791826454795 0.05377879175132105 -0.21445032495134875 -0.1340265490288246 0.974607451222385 0.43127271822518276 0.2976223362203809 0.7257507769796407 -0.27806513529581056 0.47987337696081656 -0.6360670427163837 0.43921029255891786 0.5945423296187278 0.2765194687884873 0.9243363621166092 0.9067956545895635 -0.05535130086241069 0.9717898420720099 0.01992104560380037 -0.9505810424709218 -0.8105260296780332 -0.6377312887166033 0.07002486663147023 -0.2035571438738475 -0.6327605388702697 -0.9875377685274869 0.6378119000050715 0.6235777509576976 -0.897953742381516 -0.7093870911108002 0.14509505149032553 -0.027440872234985036 -0.9192699817165542 0.2277709065992679 -0.41260666002113133 -0.6207268572936662 -0.03708362913218877 -0.5526302053094823 0.8206129532909832 0.857822117329101 0.4265830751394788 -0.8684930438156473 0.02637693860604351 0.07922358003545282 -0.9475698644978143 0.9469603279458383 0.6806081840599869 0.9334734593125542 -0.4699532738409109 -0.9766295099371312 0.01892038090319592 0.8213192425138951 0.742000645442463 -0.8606684210081477 +11 32 -0.9184236495018436 0.5723394851802686 -0.2730467189214689 -0.46950372101811966 -0.43495265203244005 0.7002209497104246 -0.2502181865188411 -0.9139145046714159 -0.23534360074905103 -0.11226770047479206 -0.4134585661039436 -0.3508431597712678 -0.7515084298177359 0.8625183412127961 -0.5081349632274246 0.8227112031403538 -0.9352938795981902 0.576151004804798 -0.4548204098730142 -0.40960303026160094 0.6332524514904443 -0.6285766001876616 0.34638819102245355 0.7879037069647585 -0.08102282167006414 -0.22498386383976476 0.3368724753820662 0.5720912997094405 0.6612804028388306 -0.5457745035564039 0.25512403199906974 -0.5692704505645902 -0.6608357457180121 0.8915525104252764 0.8549737823963526 0.1754569009940179 -0.9705183569120068 0.13207739429702725 0.5450710356793318 -0.8837513743638596 -0.4903653883417096 -0.8842400751763257 -0.43565331593558 -0.15592835108015746 0.7753281512820132 -0.22961338275886933 -0.33290400994755 0.004918135070734575 0.12838102259726325 0.711212558602693 -0.21453311484450155 0.08541091313431592 0.9464216413949311 0.05122411708928931 0.30357309329428905 -0.20473073265408592 0.6589736349705002 -0.23021779180977564 -0.8687837799505134 0.7364632437880503 0.18601676064844597 -0.5682948398083711 -0.07180933954800706 -0.774693513048192 -0.657488176725991 0.5023915560503032 -0.16249797990028347 0.785151752139772 0.2004967201527299 -0.11126735434632273 0.09911802723568397 0.3446995481241941 0.3737497071271425 -0.6171428266383372 -0.8826834944832376 0.3485134640619858 -0.4741248558603437 0.7597636964825774 0.10285390257680693 -0.05439061823373259 -0.680842873193273 -0.7129704569669522 -0.14234228526529846 0.8270947905276735 -0.3360631255143183 0.8800761603574256 -0.09132682088154143 -0.6384379218787297 0.18286705161893968 0.34818317256759146 -0.7228276211433684 -0.01809477648349267 -0.5673431040646251 -0.7073815252878211 -0.049157987238805934 0.5477211256601806 +12 11 0.8347395858553972 0.16843320671235484 0.9108914270337296 0.06659978431955138 -0.8248558795904843 0.9014789601036264 -0.8880465625374059 0.8846536331440116 0.4398637062679065 -0.3237338713160758 -0.8174434733706781 0.08219353281622555 -0.7900242022191 0.39980295523791387 -0.9074484190747236 -0.23865686207025716 -0.3694558484383823 -0.37144821868005806 0.776356089634002 -0.4531702062793337 -0.5279166591453615 -0.7930709970287819 0.9619137956745625 -0.4306835312554782 0.21628070018569923 -0.1629119182437686 -0.01473140356814584 -0.5482420601702362 0.15113016304480653 -0.2690960831701794 0.7639780903407432 0.30298719281704445 0.831655882452663 0.1892235861589442 0.9307710336292208 0.1403261340347579 0.7319347528087896 0.45018912113808685 0.7834274619798212 -0.6778585151455145 -0.8731391815639467 -0.2819386040919454 0.7867755095551492 -0.5192245204325103 0.11341666199665323 -0.5056326053373861 0.8567120156449193 -0.9621850617015952 -0.5693711408756765 -0.18164740815727387 -0.6817076341966417 0.3021053280554138 -0.882922394323312 0.5482405661888474 0.5619279263017432 0.9354043493814221 0.12567805683115485 0.947816315569564 0.2786231489124915 0.032326584442656126 0.27124886844568974 0.9155360573104692 0.39108538337153975 0.09922929886485576 0.9142886225025035 0.1573065903244153 0.5420626835274611 0.4003186892691275 -0.24803113163526436 0.15514825165341595 -0.33779992679232507 -0.45743241856305317 0.2755825553973812 -0.9887817641400349 0.3356174215574297 0.1340918611734434 0.5198598676225314 0.37082856433961053 -0.5849961120631437 0.786899886828826 0.9997785182309504 0.7686759995772063 0.35856961589998204 -0.3771281737758183 -0.08771427787917374 0.47085137630125273 0.7701039315122498 -0.6845534127262172 0.17984366853023226 -0.24917306621482616 0.5963121451099678 -0.19380487896140797 -0.9459170020297432 0.9944525421994483 -0.371045820925362 -0.6679671863923244 +12 12 3.5246027430446656 1.8663915320440931 3.471895461645996 2.886907723831002 3.3633636747048268 3.9716052438097647 3.4338652374791607 2.318947952370132 3.1791226075130883 3.4211036691916212 2.948685822050588 3.040086753267553 4.080580774916064 3.1268889740536494 4.852090834984061 3.7105284283980846 1.4660095060414682 2.2193959772496616 2.1750357925099975 3.6068675522601596 2.187587892635469 2.7320942380874755 1.9493526440576894 2.804088776526768 3.3518094036036628 2.939845348843665 1.9953189598519245 1.9870254969996177 3.5159568433465123 2.3886978046139635 2.5184214779080536 3.329048771007427 4.585012886134108 1.2743275830528376 3.6315522286720663 2.5951339817076526 3.106724096783712 3.787560177624016 3.240114293320941 3.4148659712603613 3.545437984790752 2.5954179079255066 3.575327328636002 3.7241714134375385 1.3786275577792233 2.677256576422027 4.309143292947853 3.5001307794992416 2.858692663801554 3.977364936460805 3.648418045198601 2.564092100902717 2.3204257450291257 2.6284772008677675 3.5778752689549456 3.3059063550162 3.161679982847118 2.182877604637982 2.509845114297553 1.5981235636055555 3.131361805239762 4.1254079280031295 3.084061288925442 2.4666337220709513 4.017999816988908 3.871947163219549 3.191892782606678 2.6002262566657004 2.5214624593237636 1.1665513378719485 2.663521804261724 2.851140276722984 3.745895040646483 3.1158985452250363 2.676094919706636 2.766341100161929 2.810848764716124 2.668213529272222 3.4052535739940426 4.1038722590923005 3.311667905332012 2.6711378754457265 3.195825945557739 2.8338899649214504 3.684275901998526 2.55273473745953 3.2926887436505816 2.697563993649759 3.1813566301982696 2.933277565156761 2.722698866656425 2.4362604660221807 2.3519937989505713 2.4440058975683527 3.2013140992292777 3.921926813932337 +12 13 -0.18560675597541088 -0.10627487412533454 -0.5144120715538831 0.5276182491062016 -0.9897327543195369 0.6146155006285294 -0.1711586664580611 -0.04064801530253592 -0.6575156841067582 -0.7079505215234296 -0.4936500563423396 -0.9362231753657142 -0.5095301791100415 0.9087816219413265 -0.9992992188942997 -0.7801731365438245 0.12221763595406343 0.2053543515288161 0.6426147062653988 0.21502605259970298 -0.7058004667189104 -0.47141462575550386 0.01418185511702097 0.7022135268639755 -0.3609818664939852 -0.15708317687241546 -0.5605173307738007 -0.20406267979234194 0.5253766901924772 0.0626216464356717 -0.805281389006115 0.6136235610349821 0.5049421171915647 -0.21043837562615275 0.5248587925742831 0.5579521116522626 0.9810681177898601 -0.6435663087818109 0.13302927709698498 0.060381512417253314 0.012068497784933019 0.5207769851062947 0.06090958023432824 0.8902529679104059 -0.8124364155981343 0.8951731350537311 -0.9635472781025327 -0.5826825464403436 0.45435214362818677 -0.6293547618286255 0.9440719006388536 -0.8842242217407916 -0.5956453343860788 -0.5941438849833445 -0.9044438689503633 0.6358696108094604 -0.5625112097504719 0.052639910666007816 -0.9689783544337971 0.16070400849880362 0.18300438773716166 0.7605063294267991 0.6116699665919554 0.8320735510505111 0.8771949524803824 -0.5481190743128721 -0.3731818000788856 0.5445801565978585 0.1536717834866812 0.02807093910440006 -0.8721437981910392 0.674969976963351 0.7207971775842217 -0.36227083597089815 0.9617685914576761 0.028494988249746278 0.08859141612963883 -0.5403583081601908 -0.0825538884567385 -0.5974771438775794 -0.03117971257590435 0.14907665152091853 0.29522424481687914 0.4984922232864071 -0.040539552887004726 0.07522470576052775 0.3738044726433374 0.7774476081172308 -0.944661515991964 -0.2584917328252634 -0.8243913334252442 0.6037999329707433 -0.09241096949395966 0.2580647878028193 0.5760056647558915 -0.6830861549892102 +12 31 0.3357527758067045 -0.2175687274531184 0.3123223875225061 0.5009464624245663 0.05499320563598231 -0.4029247708607109 -0.9533312024826304 0.2238637438624047 -0.4580172367847781 -0.3531226371740075 0.014102289990167494 -0.3288436231130487 0.9964653924536819 -0.43476015556949976 -0.8544627669513052 -0.19718248030498775 0.08297851026936098 -0.5232655530466179 -0.529399078473312 0.3546982751201373 -0.15880220872521744 0.24212531623791933 -0.2810914301451952 0.5912449115751077 -0.733301850437309 -0.7176162350251645 -0.0055698324358424145 0.5620381299289468 -0.7145036317558942 0.4768895190033582 0.14047076806270198 0.6047398278470288 0.8252572360746755 -0.06395564644829754 -0.61378544732801 -0.03424414192618541 0.35363179638352316 0.6997748699208242 -0.8976834800761926 0.6532806655903709 -0.947249401471087 0.42924291312261587 0.1689880555060852 0.7938944728742379 -0.14971361679472572 0.16549655052372558 -0.6926428151458219 0.3095819498927306 -0.19803999405921746 0.8846339670967467 -0.932745768273773 -0.28887283066821046 0.5436439663128365 0.030552453722409112 0.2324081486956755 -0.2959373905107754 0.7383679989951812 0.2887684950515148 0.325080706606796 0.04190479329177066 0.4351654314869118 -0.6342702301758785 0.07512273372891509 -0.2689875093703229 0.8792465294898788 0.5633543845574551 -0.40957620072828127 -0.22679410285967205 -0.1333417198166662 -0.27913011929923126 0.06673400365365212 0.11763709249412924 -0.8544181935346233 -0.7054898934859488 -0.29364535865505825 0.9079162509053293 0.2832355212324338 0.5474099180364913 -0.8318550930486619 0.48765884371692336 0.5912694961398488 0.4490921919951516 0.5315847354208119 -0.22908573747743377 -0.9951532377677044 -0.05050389117995002 -0.3228676527785792 -0.5766521616775935 0.8018401633704368 -0.8895628152217194 0.5185925966848546 -0.38869893787834164 -0.8944159800581128 -0.496671846498256 -0.3397177998803145 0.8455537696877837 +12 32 0.7321414790863878 -0.14866391557055803 -0.7845549090993431 -0.7043940481242763 0.11226442060956776 0.37108443917961775 0.49159384566414177 -0.1116210526245216 0.39909609155772396 0.6822067308108684 -0.1499836193111106 -0.8208832452087298 -0.8255626498261595 -0.193631700586693 0.8098991572342793 0.8417690466540984 -0.09741920062737397 -0.31356196231990574 0.03367014236725674 0.8504820644016169 -0.22577286900863025 -0.5827865039002833 -0.2315116799922119 -0.24407306198559797 0.9619510230197519 0.9171724662539582 -0.01969065628744282 -0.6169351090237154 -0.8733787384178668 0.7181805790204938 0.6630359021884182 0.6795664570034439 0.9839437920439131 -0.3238954724481773 -0.619082119894097 0.5435621713580814 0.12570258035975024 0.48763110217498173 0.6223257650326846 0.989938989870331 -0.9588239755488628 -0.10055329096088994 -0.6769960272384126 -0.7572995494072392 0.10547831859645052 0.14174253285240535 0.9325724997603526 0.8258260859272097 -0.7128111513416453 -0.5825812035644202 -0.4092458732287181 0.35745454390560094 -0.11351910169380641 -0.7204570166823288 -0.7699883786935271 0.41708426996273884 -0.827817977624387 0.16833474136119575 -0.5894466614230436 -0.36024493100570165 0.9590230804493998 0.2779940518706925 0.884305465504011 -0.5357995136791585 0.38205358358169117 0.8305344627507751 0.3238587676357434 0.28708540172965136 0.07242497468584808 0.3384588297731892 -0.7935601571166049 -0.43814342821178553 -0.9246302991195843 0.1674055780781165 -0.35695602563354756 0.565669175503341 0.5925698478601549 0.9358487028680957 0.8563998021219363 0.9902788199933013 -0.36874634037619214 -0.458759759016524 0.9742510501377237 0.7524365584940587 0.9139477340482403 0.616256414790685 0.9644534222281258 -0.1804650813718185 0.006068869801559851 -0.01590421400117359 -0.15428281776562036 0.147355118732432 -0.012187464041046647 -0.06233248053348128 0.749122777003921 -0.9923060812089337 +12 33 -0.8301455134425506 0.43779480064893694 0.35912493666726 -0.1996612537597091 -0.8262095632028557 -0.8232398494256774 0.41758677874735417 -0.7340760006674383 -0.9338835179445248 0.7205116616087568 0.9070468901835806 -0.20931461316104372 -0.7638131274907642 0.44955135530274637 0.6265360561650346 -0.7082428450205556 -0.4520396327124221 -0.41973305257259086 -0.07012266824516367 0.8046375842380165 -0.4158754946444694 -0.2887783605352121 0.19372859418794874 0.8169659853661297 0.45041867531978763 0.31113469272036776 0.6742223019683091 -0.029677102308861114 0.8755192805191379 -0.7664980716182848 -0.14337398981829375 0.2303531435999504 0.453106347562392 -0.12324211248304318 0.06259737607284865 -0.43527117514226266 0.6167503551535982 -0.8726295864311668 -0.17929749305403875 -0.17557938771011328 -0.09101983510216916 -0.3636067549755042 -0.9916672276239038 -0.059967184124923856 0.0334838353631719 -0.20514942719501894 -0.49565168333281595 -0.6585383063039636 0.6030059144172886 0.7009385379998307 0.3211107166385374 -0.08059846770754997 0.1348514126031537 -0.22098170827900665 0.9841036756732362 -0.964141166510162 0.6288670274133217 0.5041649785696538 -0.09870350311218057 -0.9870258132135521 -0.41872070827860086 -0.895193777701393 0.2945293079018043 0.7291956917048219 -0.8682696009708502 0.8376866943294599 -0.8847218249704416 -0.33115335084949304 0.9686077897461913 -0.17643178964954398 -0.1755443501159093 -0.5642255724020959 0.13868549816807718 0.07457888729715534 0.7180961447092804 -0.6392998335201077 -0.3922448823611522 -0.06666071549988062 0.8732709661436371 -0.316260997774487 0.7652083320824712 -0.07830674146157035 0.22896862176230903 -0.4912375897672183 -0.8128101768199214 0.7680635082642722 0.4321426170468352 -0.25951524508518986 -0.6621476353837965 -0.8119624848356952 0.017789609946586626 -0.6133867738392282 0.3253406489164399 -0.4719109731871294 0.6365047648227855 -0.27969101512892225 +13 12 -0.18560675597541088 -0.10627487412533454 -0.5144120715538831 0.5276182491062016 -0.9897327543195369 0.6146155006285294 -0.1711586664580611 -0.04064801530253592 -0.6575156841067582 -0.7079505215234296 -0.4936500563423396 -0.9362231753657142 -0.5095301791100415 0.9087816219413265 -0.9992992188942997 -0.7801731365438245 0.12221763595406343 0.2053543515288161 0.6426147062653988 0.21502605259970298 -0.7058004667189104 -0.47141462575550386 0.01418185511702097 0.7022135268639755 -0.3609818664939852 -0.15708317687241546 -0.5605173307738007 -0.20406267979234194 0.5253766901924772 0.0626216464356717 -0.805281389006115 0.6136235610349821 0.5049421171915647 -0.21043837562615275 0.5248587925742831 0.5579521116522626 0.9810681177898601 -0.6435663087818109 0.13302927709698498 0.060381512417253314 0.012068497784933019 0.5207769851062947 0.06090958023432824 0.8902529679104059 -0.8124364155981343 0.8951731350537311 -0.9635472781025327 -0.5826825464403436 0.45435214362818677 -0.6293547618286255 0.9440719006388536 -0.8842242217407916 -0.5956453343860788 -0.5941438849833445 -0.9044438689503633 0.6358696108094604 -0.5625112097504719 0.052639910666007816 -0.9689783544337971 0.16070400849880362 0.18300438773716166 0.7605063294267991 0.6116699665919554 0.8320735510505111 0.8771949524803824 -0.5481190743128721 -0.3731818000788856 0.5445801565978585 0.1536717834866812 0.02807093910440006 -0.8721437981910392 0.674969976963351 0.7207971775842217 -0.36227083597089815 0.9617685914576761 0.028494988249746278 0.08859141612963883 -0.5403583081601908 -0.0825538884567385 -0.5974771438775794 -0.03117971257590435 0.14907665152091853 0.29522424481687914 0.4984922232864071 -0.040539552887004726 0.07522470576052775 0.3738044726433374 0.7774476081172308 -0.944661515991964 -0.2584917328252634 -0.8243913334252442 0.6037999329707433 -0.09241096949395966 0.2580647878028193 0.5760056647558915 -0.6830861549892102 +13 13 2.9034421490969775 1.7777431392149174 2.520312033481485 2.344817602781011 3.8558031930402263 2.918639126894054 2.8604211836953195 3.12012959443725 4.62894710248589 3.1109279886077155 2.7788238302014534 3.468914192941107 3.687342714471871 3.2524475148139382 3.21931216640573 3.1052101258851508 2.976990523904087 1.80983678677703 2.759806955610051 3.397333181065707 2.7058641727697075 4.01862531037169 1.7041873261787392 3.5754243937071464 3.281848062689 2.393774650688926 3.103540953391901 2.308754472285337 3.200961596575402 2.450282665347325 2.687584613606825 2.8238718762454287 4.132126837581977 3.5013506352081776 4.321101348741473 1.9828222199964722 2.904997585415286 3.023617401388244 3.0289491198789653 2.44241921933544 1.6847909915016936 2.261372048161239 1.813883979563082 3.334384655929063 4.038226700775467 3.2836312814973057 4.100526415392917 2.414748391956824 2.291052490962863 3.037788054381336 3.072629158714128 3.5202530303330173 1.3006985145949876 2.8894040894806268 2.849314462424182 1.512725990209974 4.064518410177406 2.4503918741939916 3.8179828170602876 3.9390357884071947 2.4547114269005776 3.2025406273800407 3.0744367261695604 4.0699760298377035 3.211505881878887 3.0254775009273374 2.479322354210977 2.132884102403441 2.664088482107163 2.507442286609856 3.9457446816816963 3.4375876425287384 3.693232600593804 3.3434842509818306 4.453398137908538 3.664310274199203 3.5733742446978956 3.0779028098385344 3.795060766910077 3.5949480585733835 2.7604064543138453 2.902863751505175 3.113427204779658 3.246406115211554 2.564487699668103 2.2610088179484906 2.5782481387449785 4.183323323669761 3.163769951280432 2.8315607724591016 4.0715659375380655 2.5294342888007577 2.86567123197696 2.843580174359151 2.655994760981663 2.3592219321162107 +13 14 -0.7339944753613024 0.4474746167427428 0.4180229604163135 0.042904134232296 -0.3071540329719231 -0.9923811242474894 0.4842552556861299 0.9267986307138769 0.989119016264346 -0.41702732682533417 0.12422927290561558 0.07942019078940055 -0.9857786755406677 0.16327430904922924 -0.04558333171245654 -0.1429814083932761 -0.3676290157639641 -0.03800173287528508 0.009821077430348213 0.7591738017270238 -0.10323779980940362 -0.9132359693102496 -0.08102490203574386 0.5847751936867456 0.5809849942559633 0.36397721587086806 0.4055934056114585 -0.2851589316904679 -0.062451849238344126 0.2426616600617506 -0.18626643307616741 -0.9190864868477511 0.6456791304899188 -0.49780911559371654 -0.7930711386581986 -0.02064627749744319 -0.5576602957096943 -0.4240578973106792 -0.9042833548621605 -0.8839565496251074 0.043074902294144124 -0.11783191380899849 0.114234867460145 -0.6727821057204055 -0.7776623416705535 -0.14572395264151172 -0.2241203694483047 0.7253743146235219 0.431802036913677 0.0022669069089098492 -0.10095092335138212 -0.34808528487164825 -0.2787145278446377 0.5934781849370843 0.25055022093805857 0.24442342683526253 -0.6532517626104679 -0.5301297254850539 -0.6963762633101325 -0.910106794814594 0.6152174964456623 -0.42656724333166873 0.7036035968875802 0.2643187556201412 -0.6216852642684965 -0.022111354217244195 0.07015182024928546 -0.21379346758969597 -0.7509677100755487 -0.7945524144334521 0.6835343314386366 0.806495912612041 0.3463214733323412 0.3007170558408314 0.8157655898806833 0.6078818575956779 -0.8528650189140738 -0.26575097213600896 0.5757325998507956 0.7067538006820306 -0.09099092633738137 0.4431331651453665 -0.5403993989373386 0.7032401207472108 -0.006871238745210118 0.4975518438887414 -0.1370276814671787 -0.9146486236445235 -0.8705283972225846 0.8828214600820492 0.3420798093179871 -0.48344445504129663 -0.9369137574191568 -0.27747329742345084 -0.038865409017141195 0.7031718430142504 +13 32 0.8483748774336386 0.23771536017795292 -0.2642224937980431 -0.6460066671022464 -0.5749976699716448 -0.31932117040810315 -0.8554293973859124 0.18906897392911515 -0.8326475442155972 -0.4276967888783567 -0.654784535683322 0.8342437118629986 0.2606924913106521 0.9649546446699491 -0.8958001689695712 -0.5434678318655817 -0.9335101840388353 -0.014228575758405526 -0.8943258021603055 -0.9596884473460241 -0.43269229565501766 -0.8793848666799682 0.1921821239910284 -0.6442417314393634 0.40589551300365656 -0.314602673724411 0.8962639572140998 -0.7415948112923199 -0.4562153277027503 0.5565700896197339 0.23399100301304276 0.3575802642326311 0.8187975296267658 -0.5406012126041826 -0.761409811459997 0.734237659828944 -0.4685917503503092 -0.1613805941615163 0.9012255698470777 -0.8822331213041623 0.011068482986271055 0.02246245623848586 -0.41619282966149496 0.2175068229968744 0.5671783615358921 0.21107393038343258 -0.879946108414613 0.46869050213414587 -0.7595094767429806 -0.48292955543061744 -0.1976168139685459 -0.36623028464773255 0.2527701986289812 0.8328002892013111 0.007207571810045277 -0.13305221899175446 0.3801048090301411 -0.27463975849648326 0.4590998985841166 -0.6789042482960159 0.11369791690670161 -0.3251183242528828 0.11136114392112195 -0.4984470533837475 -0.1356541567451779 -0.8427420773837837 0.03349782441421212 0.6576974836607927 -0.749656036396227 0.250667469490534 0.9324674869908629 0.20940130894577558 -0.7812689442554748 0.4826382896312018 -0.8793901011549692 -0.5215102043928128 0.02332403964260843 0.23161540331885155 -0.9667926411052559 -0.8320472735565814 -0.5136818097227238 0.5840117593572056 -0.7373982448639609 -0.10776556200931897 0.168203010273964 0.44345255063120526 -0.3962119636635937 0.6123899014699843 0.01746575093139735 -0.27295968553584316 0.8309116841192818 -0.6028784162630254 -0.8318855955005344 -0.8933102854026156 0.7992799530030144 0.17082205311687715 +13 33 -0.5215250270658283 0.7067309468897742 0.46596542072763736 0.04126694624478233 0.6603846033075578 0.21474704400293998 -0.20433734327238162 0.8381216988911344 -0.45543149545595485 0.7416009045358629 0.5491919276647801 -0.49082268007195884 0.6468405924040621 0.12249416288058801 0.4547251227996181 0.9143379268114638 0.7444914948264452 -0.36222932518402606 0.11855928207656574 0.10315701285954182 0.3754966960505741 0.7576706258760286 0.7691440601908817 0.429823826244528 -0.5881102872021011 0.19800691119949643 0.018741664665376634 -0.7223258556935797 0.692553743457379 -0.5035733257744537 0.2809679417781943 -0.33133875887997144 0.8704241820316514 -0.6871330489849261 -0.6616942424650538 -0.22280694827572045 -0.2998969520534327 -0.7798175797307969 -0.3014837340691998 -0.46209436911699786 -0.029139993037720524 -0.1002695280116499 -0.928871813066503 -0.263982485349076 0.921065603074154 -0.9862629073052134 -0.8193545752327358 0.5631352729948709 0.1678976913338377 0.446234397583676 0.06640056157680196 -0.6094939771078085 0.04866231924012654 0.00193390154350781 -0.4583440905789966 -0.09700690425134839 0.8239965724872025 -0.1493928182697195 -0.7787711247429132 -0.8231302412424917 0.8140414981271304 0.5184594082708394 0.43779857553051515 -0.9695149735207114 0.8667867760644634 0.4263022539715855 -0.8491504433576644 0.024985276452236027 0.33707754026066605 0.3658251100427139 0.4097102900657523 0.43820143955551094 0.8413044297346168 -0.97081419527356 -0.7842963751626737 0.6642766626868184 0.9458138718646405 -0.8196535194957593 0.7904877588180186 -0.44044156356124686 -0.6708080005841854 0.76120049291666 0.23630800792895568 -0.5316910430748842 0.6971270340107154 -0.4209079461538945 -0.30645594755342853 0.8287172310156989 -0.06165790438133034 0.7141509295587187 0.9045033926444783 -0.18783578219451424 0.37370628345042434 -0.6439301717492705 0.5465258526662253 -0.20941341679597603 +13 34 -0.05784970883316709 0.15364447120453084 -0.3466205827830533 -0.4121391588803842 -0.900378759049375 0.6796906726343808 -0.9998697847087008 0.2644000924733729 -0.8848564890565338 -0.6546886303504307 -0.6040972063007206 0.9760552771233515 0.6716447453875976 0.09316554701525726 0.6849784877652225 -0.3700473220641549 0.06012088132223403 -0.45470695143998796 0.9593131004644229 -0.9379974645476274 0.9135212152819041 -0.597525196294072 0.549228284507753 -0.30763922480720174 0.8666309850692222 -0.7346856045686923 -0.7326082469169428 0.2834911800269917 0.7267196225558141 -0.7597137196361763 0.9976920417475759 0.362948754276591 0.9108441335839728 0.6851313040720086 0.7840099650415067 -0.07403475502150236 -0.25890390788137974 0.0698555336781943 -0.3607828051947106 -0.03004936776044742 0.7043930821226958 0.7033317592553581 0.07819712445717242 0.5032947038519666 -0.07076353365603238 0.722043591705154 0.7104827421277919 -0.03700001990271584 0.06699480899724697 -0.7244616052283772 -0.7649105100688127 -0.6979607793054481 -0.12428397805737168 -0.7060064156160295 0.7929620669465107 -0.32037927120779597 -0.8213590863111977 0.799863115587162 0.5850176650933225 0.37317241252102606 -0.7044698105311038 0.9632544350462893 0.6716212919141962 -0.5249248259030077 0.557272383560903 -0.9131631612760429 0.9190855584816611 0.6763512972290058 0.45234038894798134 -0.951114300745532 -0.6520227031263355 -0.5570365303438132 0.36054241209301896 -0.45062625457725414 0.2541903665048224 0.9535190220533161 0.7014593603373185 -0.41848310658941346 -0.925228806918031 -0.8835678090511312 0.4816505110999145 -0.5179279715890277 0.4198301341940729 0.5483877476337908 0.8806058915739858 0.0009379906754911627 -0.656247788973237 -0.5467478599884512 0.5062011203721544 0.690446083775325 -0.34807118208337573 -0.5352398052773613 0.38866975585738284 0.03352970335775396 0.2411831899835628 -0.2515490186301783 +14 13 -0.7339944753613024 0.4474746167427428 0.4180229604163135 0.042904134232296 -0.3071540329719231 -0.9923811242474894 0.4842552556861299 0.9267986307138769 0.989119016264346 -0.41702732682533417 0.12422927290561558 0.07942019078940055 -0.9857786755406677 0.16327430904922924 -0.04558333171245654 -0.1429814083932761 -0.3676290157639641 -0.03800173287528508 0.009821077430348213 0.7591738017270238 -0.10323779980940362 -0.9132359693102496 -0.08102490203574386 0.5847751936867456 0.5809849942559633 0.36397721587086806 0.4055934056114585 -0.2851589316904679 -0.062451849238344126 0.2426616600617506 -0.18626643307616741 -0.9190864868477511 0.6456791304899188 -0.49780911559371654 -0.7930711386581986 -0.02064627749744319 -0.5576602957096943 -0.4240578973106792 -0.9042833548621605 -0.8839565496251074 0.043074902294144124 -0.11783191380899849 0.114234867460145 -0.6727821057204055 -0.7776623416705535 -0.14572395264151172 -0.2241203694483047 0.7253743146235219 0.431802036913677 0.0022669069089098492 -0.10095092335138212 -0.34808528487164825 -0.2787145278446377 0.5934781849370843 0.25055022093805857 0.24442342683526253 -0.6532517626104679 -0.5301297254850539 -0.6963762633101325 -0.910106794814594 0.6152174964456623 -0.42656724333166873 0.7036035968875802 0.2643187556201412 -0.6216852642684965 -0.022111354217244195 0.07015182024928546 -0.21379346758969597 -0.7509677100755487 -0.7945524144334521 0.6835343314386366 0.806495912612041 0.3463214733323412 0.3007170558408314 0.8157655898806833 0.6078818575956779 -0.8528650189140738 -0.26575097213600896 0.5757325998507956 0.7067538006820306 -0.09099092633738137 0.4431331651453665 -0.5403993989373386 0.7032401207472108 -0.006871238745210118 0.4975518438887414 -0.1370276814671787 -0.9146486236445235 -0.8705283972225846 0.8828214600820492 0.3420798093179871 -0.48344445504129663 -0.9369137574191568 -0.27747329742345084 -0.038865409017141195 0.7031718430142504 +14 14 3.904625318657681 2.810530445963502 3.370101312694643 2.613556298702706 1.8606748966376736 3.4551887684015643 3.3789698872499594 3.606051874207755 2.5114223423921294 2.6975482701503406 2.246694616093813 1.8527830038007074 3.083512316110553 2.0747116522193605 2.8757282367596195 3.3807292941143077 1.9710497722481748 2.8536812126527114 1.2973698779281937 3.445940094685951 2.092114547944189 4.109696273191551 2.3312962602805927 2.1709744626663428 1.7822133973086567 3.814652470624519 3.880589456944458 4.337907831840347 1.475117796997794 3.013168274802654 2.540883490069181 4.003175276986869 3.723053483409859 3.8527346848951467 3.2805583964087255 2.5058869597027007 2.4700368354794566 3.008647054524303 2.675674846203174 2.919792454749514 3.3647519872444636 3.8918493047137184 2.5947004214169604 4.115819189335218 2.3135010521640225 2.4967097459658474 3.663128125379121 3.0607548570163856 2.7023620318527533 1.6066445218116598 2.772580329599881 3.5712542644381324 3.903045261835432 3.2013004248158956 2.321658204430393 3.116919849089152 4.7557655469271705 3.111479480326557 3.0876551615997627 2.5087519568130694 4.023321670964489 2.235599038800994 2.342928995111997 1.9482328648635545 2.5974883301660876 2.3479005495747733 2.2962491211079286 2.333587549638515 2.941011920945014 3.1644397687577346 3.5036291212864388 4.47020183478846 3.2450980819145148 2.8902704694291685 3.0738617924105975 3.0972168570670053 3.368011429175562 2.190458415574076 3.8850387820764944 2.945164314903866 2.4180003695521624 3.265997835012481 4.117227562410777 1.7508986810540301 2.9487229990996475 2.9168417329407417 2.4478151127189562 3.9824788220417044 4.535895093440885 3.0843265629450043 2.850321142208345 4.007391688413348 3.4997424379329205 3.3606505666430353 2.754796410924784 2.635725265092999 +14 15 0.3053655238607913 -0.9414407496968755 -0.002514866052598652 0.9567680429941263 0.2029377248626083 -0.16411925906389735 0.9545084646018678 0.5942458819753322 -0.20646673241439162 0.8257176947898277 0.23255808586955373 -0.08541016151147729 0.8100808104902777 0.4023968973896963 -0.1240703500533844 -0.7399948519330133 0.49507178210525127 -0.05374105292026732 0.12993066898494643 -0.93497201703171 -0.10777746298469393 -0.9314909258385109 0.5446377272519742 -0.09273920611333941 -0.18239312972219812 0.9959525298056657 -0.24063990194367135 0.7273017918272056 0.1476512508746921 -0.13442721778811073 0.7536854025291471 0.846220232760807 0.9642786080547274 -0.866878469771829 -0.2551438638776211 0.7515455583460473 -0.20875862656793642 -0.4609811863318398 0.6088930124430547 -0.31243961771032236 0.1915382884567982 0.9408970874437055 -0.9885532880316288 0.7213960186203805 -0.015430460269398427 0.20483351322172982 -0.6155345763429341 -0.10097471389361679 -0.5651140575160489 0.04611606871847984 -0.8026107377877489 -0.4575317977130535 0.961166402734754 -0.23056531830551452 -0.5727270561224673 -0.5071788004745732 -0.9110833225349182 0.7486751753707004 0.17407787694792698 0.5452114397505927 0.8941306867335308 -0.4565789605623678 0.009913701946073994 0.33793237071774906 -0.5007927717518499 0.23474794773774077 0.798948889964932 -0.22962709118071012 -0.24282797941517353 -0.49999573041459966 -0.7700715489178522 -0.7396467045249517 -0.41991009088270026 -0.5831864052775553 0.7649678929393198 -0.16666154946786782 -0.6853996763031844 -0.10563397447568845 0.346368214857534 -0.8359859518657768 0.006011861455444967 0.6623695712501152 0.9837795530232774 -0.253786035104828 0.5389262320451189 -0.09375452048411681 -0.3349477078574592 -0.35142194268160964 -0.947548919709954 -0.18279921909368646 -0.7110070267061086 0.32086551976669586 0.04992804346411006 -0.7488259412243923 -0.549273564683771 -0.5796473850998207 +14 33 -0.875298734061535 -0.7268645169439896 -0.3909013254970184 -0.303558828715631 -0.037194025472140346 0.02035959152756117 -0.5370135749894154 -0.25298479583152234 0.5377632858375962 -0.5406334012201464 0.8717535691458695 -0.19993062089546276 0.0056955868852368585 0.6483032677744363 0.2982787913039564 0.19397806502277515 -0.48840640424459236 0.5078452447518951 0.35804288028283504 -0.11220028643266455 0.4200959031645357 0.731429071418209 0.24162182920886677 -0.6295430892152105 0.23583257627052423 0.1457563415265124 0.8581570491087684 -0.9940381026317708 -0.320318482489784 -0.8755058281081398 -0.36765482187222953 -0.8990952786629942 -0.438120673903341 0.176712357470183 0.19761835271835104 0.2558830291894898 0.17835884751579267 -0.30385306199007633 -0.9235518770869557 0.10466685308867274 -0.8004408748817302 -0.7159529227995718 0.30022016837043464 -0.4796232840305914 0.14874264682289629 0.3018635573847044 -0.8618086161173562 0.25337013670035513 0.843785199890636 0.6308459812162683 -0.3287224324738445 0.17353339662605505 0.41726469939806443 0.5086254936052603 -0.7010556926746325 -0.8774714747933434 0.9189142289584067 -0.9900295540805213 -0.6834113633232859 0.42387981721204504 0.159257116915273 0.05385897682575336 -0.23383711946626606 0.4115005824441651 -0.03281727597837358 0.04061188121563242 -0.20069598269506006 -0.34315580663266276 -0.9524340447219619 -0.3621569654169383 0.45942124243205673 -0.7759273207012081 -0.39586743466018737 0.3323155174799184 -0.5397444680646484 -0.4790132952962016 -0.670746799574967 0.8505957709931256 -0.8701599360021683 0.6172468515073077 0.3347531830932544 -0.4108842762682099 0.8372316903572075 -0.6270948600815607 -0.7702779185699413 -0.5090496012282082 -0.1823469914438185 0.8749713159187751 0.7228537441680765 -0.18802325597530523 -0.587846807104415 0.6954859021111262 0.9381995674461447 -0.8377254159670868 0.8483421737394585 0.3671856570929042 +14 34 0.8882586548376534 0.26432319663983694 -0.9351881919015148 -0.32817046618677703 -0.3368010981894871 0.8858173679393657 0.9603544303825728 -0.6240176398595867 -0.3336477419937005 0.48634553635749533 -0.4846894910995545 -0.32701597148952977 -0.3344306806701267 0.0697148674023893 0.8550353753319604 -0.9794869483176112 -0.04294193146328329 0.7503684468478116 -0.14671366072588432 -0.9444287056543892 0.7226332359613727 0.2220678840690673 0.6311046127566944 0.5270499027330888 -0.13187956871135342 0.9593155939943891 0.9868523671915443 -0.9428694997245581 0.31470002168846545 -0.63078673561873 -0.6498937842983992 -0.2922246152537329 0.6203483460941055 -0.9928117708040272 0.7821617653816892 0.17950187965291642 -0.36138603742985986 -0.9098770130920291 0.02036454058512005 -0.9852935199992692 -0.9300097856141896 -0.7545436857833339 0.5277410067157788 -0.482088035226486 -0.37945846676772765 0.23820385369539965 -0.765292504579695 0.4324089376398672 -0.3751330190909341 0.3044582172496484 0.443938443713207 0.7979342410235435 0.8320927636928752 0.7790318319406428 0.4822021612003833 0.47901062517894477 0.5909181394389427 -0.43971125267998645 -0.07655340939207123 0.18101836358625567 0.8264335673597571 -0.6003159150130415 0.20781537496902058 0.3518432614728866 -0.9053826559132256 -0.6178079017925564 0.17282323143752554 0.2636179451973619 -0.2566927326568773 -0.6175367393970221 0.17369089138553062 -0.7848184814463499 0.8075398415950503 0.5409473781589389 -0.709137706941787 -0.6550349355001266 -0.5374919049587097 0.08445963910976495 -0.7217218312333453 -0.09907037310621725 -0.7074896447619861 -0.6228418840917604 0.4557085129587406 0.016808761895299673 -0.4402195119304968 0.9054696762518843 0.6780988709887772 -0.7931141053996462 -0.4982053069493442 -0.6118255543683326 0.17816998158162867 0.7603301528200173 0.6862712800860908 0.3956889506175949 -0.9675474910529551 -0.6584924572337207 +14 35 -0.557797110468019 0.3383552048781344 0.9682702232189828 0.536761440758067 -0.9115345976270939 0.4362747083719942 -0.33929065956588667 -0.7459382312037324 0.3892538287206906 0.1324466401662754 0.05870820327085435 0.5205694474865326 -0.5499639809220018 0.2718044240893991 -0.6332410690181274 -0.6206889002640321 0.43299634451361757 -0.9134498824724624 0.6033783661514729 0.1471964059691413 0.6034227388965585 0.38702835365461263 -0.8177089234700607 0.00627143984655909 0.3298683577909338 0.9862190199931997 -0.6667071421933837 0.7883140323447615 0.3745792155518781 -0.5166938344916507 -0.5449545829267828 0.25352076035381566 -0.309978052428989 -0.9889250456585452 -0.48276231150962445 -0.6773197119666527 0.3003496384053115 -0.6823105521905777 0.17263631891521913 0.586740374068691 -0.7032032337855245 0.6223949354595919 -0.48851129511729274 -0.9367205638567848 -0.7131401645669277 -0.9574582828794878 0.9522022995529789 -0.9614099483538463 -0.01879787261393262 0.4025974766787428 -0.7577762989132948 -0.8003320359848145 -0.6772566831729527 -0.7645542093458508 0.21803097656825976 0.400105162667481 0.9020188941146645 -0.2506335939308033 -0.8613404398393996 -0.35929533605999975 0.638000245281882 -0.14281419941727336 -0.4766486587146117 -0.5567693436285168 0.385873788492616 0.8741052559679943 0.2825678803430245 -0.5793808011907926 0.08004068274527865 -0.858544453889122 0.8488139664209362 -0.9488114738145019 0.951788952819415 0.2501798203552539 0.14779309145771413 -0.5497447054422022 0.2284674906339459 0.4110683545357148 -0.7287041626525506 -0.4303899506947997 -0.47633093106738156 0.5134258829222063 0.6103034226441177 -0.045814884748889284 -0.6613701662533347 -0.5491210627625931 0.6979407608648602 -0.4435057518912353 0.5446063853259462 0.8362732927689398 -0.7123115573950138 -0.8953754947965786 0.7683395513453322 0.727069014143563 0.32253057600957935 0.21181640502608956 +15 14 0.3053655238607913 -0.9414407496968755 -0.002514866052598652 0.9567680429941263 0.2029377248626083 -0.16411925906389735 0.9545084646018678 0.5942458819753322 -0.20646673241439162 0.8257176947898277 0.23255808586955373 -0.08541016151147729 0.8100808104902777 0.4023968973896963 -0.1240703500533844 -0.7399948519330133 0.49507178210525127 -0.05374105292026732 0.12993066898494643 -0.93497201703171 -0.10777746298469393 -0.9314909258385109 0.5446377272519742 -0.09273920611333941 -0.18239312972219812 0.9959525298056657 -0.24063990194367135 0.7273017918272056 0.1476512508746921 -0.13442721778811073 0.7536854025291471 0.846220232760807 0.9642786080547274 -0.866878469771829 -0.2551438638776211 0.7515455583460473 -0.20875862656793642 -0.4609811863318398 0.6088930124430547 -0.31243961771032236 0.1915382884567982 0.9408970874437055 -0.9885532880316288 0.7213960186203805 -0.015430460269398427 0.20483351322172982 -0.6155345763429341 -0.10097471389361679 -0.5651140575160489 0.04611606871847984 -0.8026107377877489 -0.4575317977130535 0.961166402734754 -0.23056531830551452 -0.5727270561224673 -0.5071788004745732 -0.9110833225349182 0.7486751753707004 0.17407787694792698 0.5452114397505927 0.8941306867335308 -0.4565789605623678 0.009913701946073994 0.33793237071774906 -0.5007927717518499 0.23474794773774077 0.798948889964932 -0.22962709118071012 -0.24282797941517353 -0.49999573041459966 -0.7700715489178522 -0.7396467045249517 -0.41991009088270026 -0.5831864052775553 0.7649678929393198 -0.16666154946786782 -0.6853996763031844 -0.10563397447568845 0.346368214857534 -0.8359859518657768 0.006011861455444967 0.6623695712501152 0.9837795530232774 -0.253786035104828 0.5389262320451189 -0.09375452048411681 -0.3349477078574592 -0.35142194268160964 -0.947548919709954 -0.18279921909368646 -0.7110070267061086 0.32086551976669586 0.04992804346411006 -0.7488259412243923 -0.549273564683771 -0.5796473850998207 +15 15 2.546580064943646 3.2800226717207006 1.790563636617227 3.2779458855033656 2.6168421739003307 2.2172582608500617 3.825303212665789 2.26600505491145 2.4339948528036928 3.1966748151981923 3.0828625776735796 1.8348723807504765 2.5189048092725166 2.0028467760396604 3.2139762966955967 2.844649245803386 3.1914791091146446 2.850324781314967 3.1501387299246346 4.047499176709985 1.89065107875004 3.1582071481142466 3.5219180395253833 0.8547213593793412 2.930145709133879 3.636986153346923 2.076980982581019 2.537476062605678 3.2329564357560034 2.823864488881785 2.615332318443167 2.86769634992607 3.700853725675187 3.966814113099211 2.9894721331045133 3.8744589161895613 1.595677711853635 2.7733721327488308 2.1589370129111702 3.288022781608011 2.3142063342242647 3.6917573895080267 4.2959278196861135 4.106389944666255 3.0725072886640126 3.2400527439330107 3.18778748622017 2.8820865687014625 3.370627744046942 1.6767592690189743 2.7021764030424222 3.0018048948875977 4.1745793888617015 3.683585767970319 3.1814552062199644 2.0097612016900133 3.798278837033967 2.465379015886259 2.4690067284542367 3.1158911720273483 3.0009423633205303 4.213522694515147 2.7720309120398685 4.087245545443354 4.424896711163488 2.7568415282028447 3.9413059954217813 2.4826654236467656 2.910669662535778 2.9902478903112657 3.9663800248261794 3.5639426888781136 3.0488541745902054 1.8841254337241047 2.9547373238163237 3.883249512915662 2.5158496256803593 3.0237476500429072 1.6389860592124814 3.3821612560907535 3.4827791564546136 5.009890905168301 4.218695742404005 3.082594560732105 3.9401610502583835 3.1613160192727543 3.106813781783443 3.4472304137617895 3.614798681808427 2.5026760482969874 2.926466180212344 2.5755214144915253 2.2991255030125086 2.6100019201001334 2.8014980375892025 3.512460023599539 +15 16 -0.36299749579090634 0.33266218651921875 0.25529563975315184 -0.8314004656181115 -0.8222446691253722 -0.26434692914502955 -0.8975409955968399 0.009304938909839855 0.7330056808787477 -0.09208254880039468 0.2036822281454802 -0.03408850274156139 -0.37900070511031925 -0.3356571374764932 -0.38773331199092187 -0.44376931872588354 0.6635577429541586 0.7595825032557004 0.319174976645642 0.2143436547902675 -0.3906582293777485 0.9043833592232942 -0.435640095880939 -0.04035969220490587 -0.7872192982662953 0.7260412799474205 0.7486765285606594 0.41466835343704056 0.7028452109451453 0.9273122178084681 -0.48915664028210215 -0.9106208529204114 0.7859743817000289 -0.6566802221317074 -0.7053353343734172 0.3796946707699238 -0.3210954836938251 -0.42903889522239 -0.6400784440643787 0.4005630475627826 -0.012062468080668465 -0.9886742253812038 0.9292766052135994 0.9736532001396796 0.8650813771650365 0.9185632129221182 0.19317693329850338 0.6629694574738914 0.32302865092385646 -0.5052495939650326 0.4833225481328838 -0.27742750914507863 -0.7206237107337703 0.9096138850963951 0.03202976134733304 0.09884323199286049 -0.9112449136279535 -0.5249417864210753 -0.40156115073954823 -0.6185598838905642 0.4582216613331247 0.8744460336843844 0.26769158516776015 -0.606910944825086 0.8287130297327867 -0.971065076015162 -0.5465492769602427 -0.9701362480415006 -0.4557519290064618 -0.9529485101190729 0.5252385397994546 0.8194340897340762 -0.9870397328315419 0.0020329920924413436 -0.009011255712655375 -0.8836291180192799 0.17876843427175948 0.9445694826336959 -0.5546576118661406 0.7230658687003346 -0.5701142887376776 -0.6498379682288136 0.030487309624287917 -0.3060946603490746 -0.9035906971243719 -0.32294877051683124 0.07887351897055028 -0.288478192373566 -0.5239333079981727 0.4784381490448908 -0.2804377601048902 -0.514835573238869 0.503297181689893 0.8433634111052035 -0.9770768074830065 0.8734376133245705 +15 34 0.13830463903656942 -0.5983353868011914 0.21737448205079501 0.4573876252452709 -0.02167934513395431 0.3582869322182023 -0.5558818229929059 -0.18469482527742098 0.058125559666495796 -0.9742873157137353 -0.8414912462205901 0.24340438072205073 0.5918820226574231 -0.47655388091481043 -0.9959794175516621 0.7389508081199143 -0.3461492054401083 -0.7958862745851181 -0.7228761419029333 0.9226643061852444 -0.6396407049830188 -0.03459251283247866 0.6196005532075137 0.057648220190628985 0.3161880344122834 0.012336490603793493 -0.7117002493286206 0.025305912307593603 0.5856887435829985 0.45415993533297194 -0.043446856747167306 0.00910091756605591 -0.7302556358687906 -0.735902002354875 0.13460718817906692 0.7461012541205114 0.40299308389422883 -0.34169485213346484 -0.082704035848576 0.4815476564246819 0.44515825332247205 0.03127481024013545 -0.03615347974487282 -0.6389524808757803 -0.4539940083607126 -0.1722743522499759 -0.9075371641584056 0.24055162035636313 -0.7053889413578007 0.23589546818416296 0.4893267334692133 0.6939110162299873 0.27529447871138735 -0.2279537963725249 -0.030115640396741528 0.3363512433840996 0.6016141358781086 0.2337087104615574 -0.7126397878649497 -0.43731653291879136 -0.16223189414723604 0.8256857034199352 -0.8205759979275731 -0.949916361734604 0.878900801387785 0.18260517451556546 -0.48505046197296986 0.03782165920666314 -0.7820882553964237 0.5135146536087098 -0.3911361064845782 0.34627908706451027 -0.8582867668504814 -0.10860339392509077 -0.5749240437921059 -0.7639176549423532 -0.04696600278329566 -0.324554842494599 -0.14713397780873416 -0.46807381934583425 0.6748119133600876 0.9638110984806347 -0.38142664029325735 0.9525399761341888 0.8709826858539591 0.8192204343597749 -0.2748701452591751 0.8263932324251921 0.7850270489294224 -0.4882320079111375 0.024803199955241606 -0.345568799690126 -0.6029734613358086 0.2870047105938134 -0.33802827673914804 0.7548671191776317 +15 35 0.7005158312428739 -0.34182456080271706 -0.7568844682238569 0.34941390922935733 0.8632891434355261 0.2963856761637713 0.018792759538161175 0.45079791857105245 -0.48557185781895584 0.24355217907009719 -0.6450297720208622 -0.3601456990554821 -0.014312325272530346 -0.12232594446861111 0.8092485861804848 0.0060572598237940145 0.9282602532050555 0.5924764283925441 0.9314155978670988 0.7954298753633899 -0.3794720217635754 -0.43537634114996693 0.732953983901879 0.0960471353681156 -0.026075601931957904 0.8411517785652238 0.16590096033663415 0.21143878769772995 -0.621620761169454 0.7708269694319627 -0.5838338470799529 0.0928906862054526 -0.4143384591980295 0.7423393727849494 0.5889742455617972 -0.17225295325486645 -0.17123767695007563 0.7304188515038219 0.25687812262092513 -0.1599159593311601 -0.8731905194877712 -0.5308779444100056 -0.8525283973437456 0.5634107369061923 0.5233647227657181 -0.730581042220571 0.6923994412413539 0.8416357125189151 0.5524080412258945 -0.7823208073546939 -0.05882457711595701 -0.7364673337011032 -0.8835483524429408 -0.8597412664272057 0.921007724644276 -0.316812938976873 -0.6033019185053603 -0.1519666998139122 0.09020173030071654 -0.08190819977651653 0.5669968397058402 -0.7066321217439613 -0.3497371185656428 0.45142298470877384 -0.716327463036935 -0.012842416960389125 -0.948423362978656 0.07238944695332039 -0.29384071136889234 0.9642387410821867 -0.7577219100404111 0.7061770133289629 0.07036612168719492 0.13271712843438843 -0.7083648329742942 0.5896997624677534 0.7880911960685755 -0.71378723554628 -0.23372663082736467 -0.13987572422734673 -0.6516553444699531 0.9398069383162224 0.8924568254384078 0.46696540606137926 -0.11205503734433764 0.9980236117011889 -0.9514595736683644 -0.9787654932129564 0.4328403661170743 -0.706350712882762 -0.5160255403805205 -0.9881890553578228 0.41605372911065697 0.13160397678220526 -0.1758277333110847 -0.3590718509023929 +15 36 -0.8189989108385796 0.5768809288628849 -0.5382676534001258 -0.27896904563516745 -0.45863689685728404 0.8351829907786397 0.40284782862038093 -0.8344470327746616 0.14971634772423248 0.5285748635325107 0.4264729756760126 0.4755136885403035 -0.39552881504562976 0.10137234832130404 -0.5983915647726528 -0.5450224435393893 -0.46409867431469576 0.3359429310348141 0.30587371591645707 -0.2862286395474527 -0.16768102344539448 0.13849903748964065 0.7565621748258471 0.12824421830151578 -0.7993511828106099 -0.5020174295848152 0.15676364951109556 -0.17449351526789436 0.3815603247495434 -0.3112793293737195 -0.31396453001056424 0.0838160237933534 -0.4221033159635168 -0.16900148962788886 0.8925604304807875 0.9553411073174092 0.27356545292570345 -0.14188809644806555 0.4157774322696113 0.9730021231190717 0.7436932799588223 0.698089774883635 -0.9066231358074226 -0.9203492523459296 -0.2598642153887001 -0.7343154453638499 -0.5504194381105258 0.3392216416858944 -0.6315859659420007 0.08890900854037298 0.6731724819009361 -0.33704954700019885 -0.8263160471233049 -0.9157071018605429 0.93529499129906 -0.3081760302559968 0.11550368127329858 -0.2345617665098283 -0.9913504904440402 0.9612430878219982 -0.7600037498559178 0.39886004201962355 0.7233316359332842 -0.8287162436103492 0.6818613024410931 0.6815888451907162 -0.6407116826058816 -0.6727631990779199 0.3164427600800992 -0.03382621159540444 -0.5571311926155598 0.19390567870092124 0.1829651688270344 -0.9698180340204978 -0.7526803362321715 -0.5075879796381901 0.5709052280124809 -0.9004600306715749 0.24829644720786703 0.5186025672724424 0.5927617061607764 0.8951446588850809 0.9959494073215971 0.9525665352945083 0.8052171828555874 -0.5607180488343912 0.5330365447855332 -0.07777281524056412 0.5412057155480552 0.08002561081888304 0.6263011394374398 0.39334145242323126 -0.5808914656725599 -0.044971474562422786 -0.5273101685259844 -0.6662746314438881 +16 15 -0.36299749579090634 0.33266218651921875 0.25529563975315184 -0.8314004656181115 -0.8222446691253722 -0.26434692914502955 -0.8975409955968399 0.009304938909839855 0.7330056808787477 -0.09208254880039468 0.2036822281454802 -0.03408850274156139 -0.37900070511031925 -0.3356571374764932 -0.38773331199092187 -0.44376931872588354 0.6635577429541586 0.7595825032557004 0.319174976645642 0.2143436547902675 -0.3906582293777485 0.9043833592232942 -0.435640095880939 -0.04035969220490587 -0.7872192982662953 0.7260412799474205 0.7486765285606594 0.41466835343704056 0.7028452109451453 0.9273122178084681 -0.48915664028210215 -0.9106208529204114 0.7859743817000289 -0.6566802221317074 -0.7053353343734172 0.3796946707699238 -0.3210954836938251 -0.42903889522239 -0.6400784440643787 0.4005630475627826 -0.012062468080668465 -0.9886742253812038 0.9292766052135994 0.9736532001396796 0.8650813771650365 0.9185632129221182 0.19317693329850338 0.6629694574738914 0.32302865092385646 -0.5052495939650326 0.4833225481328838 -0.27742750914507863 -0.7206237107337703 0.9096138850963951 0.03202976134733304 0.09884323199286049 -0.9112449136279535 -0.5249417864210753 -0.40156115073954823 -0.6185598838905642 0.4582216613331247 0.8744460336843844 0.26769158516776015 -0.606910944825086 0.8287130297327867 -0.971065076015162 -0.5465492769602427 -0.9701362480415006 -0.4557519290064618 -0.9529485101190729 0.5252385397994546 0.8194340897340762 -0.9870397328315419 0.0020329920924413436 -0.009011255712655375 -0.8836291180192799 0.17876843427175948 0.9445694826336959 -0.5546576118661406 0.7230658687003346 -0.5701142887376776 -0.6498379682288136 0.030487309624287917 -0.3060946603490746 -0.9035906971243719 -0.32294877051683124 0.07887351897055028 -0.288478192373566 -0.5239333079981727 0.4784381490448908 -0.2804377601048902 -0.514835573238869 0.503297181689893 0.8433634111052035 -0.9770768074830065 0.8734376133245705 +16 16 2.8973676233995294 3.3530195506543325 2.7976408528576107 3.750089285613012 3.9639720449712614 1.5592892049415703 2.5535641310837764 1.6113214907898994 3.408874587253058 2.1831942264050577 4.152613805232928 2.5243363214048107 2.7693765498291247 4.274010086800599 3.5680934733117144 1.8603123893177207 3.4037417295434214 2.8029371542978145 3.3833716937467457 2.1611557873797302 2.967120734344126 3.6746677091098627 2.4871456876584728 2.0157135003181965 2.710131547939575 3.3523195444673664 4.2841701951432185 2.6490632053238037 3.873922555946681 2.1614353612357 3.0734313336661825 3.069566112606018 2.6608857163558244 3.5256696077871554 1.9716080657901596 2.599814574939335 2.4890654276376063 3.313573038225375 2.7333848296747325 2.574548055027066 1.3752547212082453 3.173718329870547 3.0358769914675223 3.473585359103109 3.5553700541643805 3.309437890511357 2.0814386059206162 2.9146771945689673 1.904251838845949 3.79324452987965 2.557918447458681 2.7637086775757904 2.9293607560010533 4.409296870098193 2.639598525508301 2.688434553368411 2.704883560607133 2.667145241757139 3.3864238150717814 3.8847090720705078 3.0958331550616816 3.1927284305373 2.6912905645011094 2.5249330258727287 2.3325885684871155 3.4483046704931932 3.6725403961628604 3.7833788092720675 3.0332342821937957 3.5233702346425337 3.076141861432326 3.3663819857480366 2.95440057174795 2.952181032491273 1.4753949047313626 4.085179554740085 2.895075213483039 4.347151061773554 2.6890578760854784 2.432226101253776 3.728735958368554 4.863863596094725 3.787369149319686 2.582062512439073 3.316473510136879 3.0811184106896663 3.253242850386753 2.1836972679587126 2.4044608621379493 2.6754070191688806 2.0791099598077514 2.7326164295061 2.2887076148951744 4.213689873817785 3.2267602950805423 3.5190633992645663 +16 17 -0.9891043076194412 0.6695052062267302 -0.8178662588952446 0.9417348502754317 -0.9617234368854224 0.08026271440675647 -0.12152765433179513 -0.10701732770196548 -0.4327748804928917 -0.12763285185087425 0.9626358973681097 0.7238885117081832 -0.1307859283634536 0.7407645677792232 -0.8150190611878265 -0.06521950673820198 -0.3031021575442552 -0.3524527841143128 0.5643341968788096 -0.08079896276399068 0.07767379440840161 0.8801786678618124 -0.9956501107631035 0.5380144286917292 0.6485561287011836 0.027451281784116155 0.5892970863652087 0.4368611371009179 -0.5286109255191103 0.605547988501274 0.7907596902283376 0.19010187897323516 0.08273916699673056 0.8334777554270985 -0.7096621383971748 -0.30276259581857445 0.6613076782571414 -0.7344623653457543 -0.7962633920351991 0.42217497796113235 0.8530197379939806 0.3861884872315553 0.27781719680666406 0.5661354512078312 0.20344493724665003 -0.5667070236660179 -0.7464055679508732 -0.11420349691161058 0.25580697286347975 0.8532083580181318 -0.42432213751916437 0.24644579220890406 0.2014076963292799 0.8723036133968631 0.9529004938294847 -0.6903523305733037 -0.0895348686316777 0.5407474702485509 0.3847733892567242 -0.6753080563187768 -0.650973885512834 0.3896633032862755 -0.404930825454908 0.18282408133641503 -0.2453532712164197 -0.9228866207626616 -0.6113651185520537 0.7245829686802421 0.2590654512179802 0.2899265535142044 0.5480497227453083 0.6217942402874004 -0.576175029054409 0.8121105329872531 0.2997420693736388 -0.5533733999565147 -0.616429642849093 -0.7646004737350727 0.5814051458137788 0.11763519123598742 -0.5923823979114617 -0.8213515123392987 -0.9914945012492089 0.7899771989627329 0.2895912431890171 0.2219786725325381 -0.13753700447119033 -0.5859042750874832 0.0008961668063847128 0.41953985800916094 -0.1303431110652642 -0.43576795525442225 0.17993427919987082 -0.6597646091962917 -0.45091000997554964 0.5849985906824875 +16 35 -0.6063009746115968 -0.9782994064327653 0.02914504563527842 -0.17384675404158978 -0.754590562390093 -0.29389764522806816 -0.6994605014313002 -0.5319894081779195 -0.5856031332076932 -0.28584470208280033 0.8711815504133784 -0.8473818795690773 -0.6304703880972171 -0.7161463527540814 -0.7188205814149342 -0.04647003224797763 0.7709490903325289 -0.05260324298154706 0.7047184029794646 0.6252705881623264 -0.40942511632046874 0.2926630965568313 0.3191332908163409 -0.8018800379071755 0.18029950231078784 -0.95425677710343 0.17930016881248045 0.4576895402889709 0.1835395146198855 0.12035227799505277 0.10699646979588051 -0.8516076952126443 0.30312637776845164 0.03717726237254415 -0.06027833728042675 -0.13427786664241048 0.08996104479063005 0.7802538973352597 -0.20908313082434038 0.09214548881581175 -0.16128140632412924 -0.43479725965256333 0.5367540759532585 -0.9507992908633878 -0.31463670700488655 0.11590832592580202 0.3535563089586289 -0.45257463666739306 0.5614752950917707 0.7546503960352775 -0.36471038662214394 -0.8140112155117243 0.7278957783547861 0.6197050407580262 -0.2649343271018614 -0.038474267725955524 0.22036902778466816 0.2794661274230168 0.2830397079581055 -0.7488154349806626 0.29060200670376024 -0.09956309065729196 0.8006012648673335 0.05922947096677067 0.24595228400098978 -0.24201657619179806 0.5283804528965022 0.08007079101026782 -0.8949133295669454 -0.691058501583897 0.4195086343979748 0.5450607879398668 -0.5052711939078529 0.21624861458914246 -0.21384587634463004 0.8083174109803011 0.38381556257803684 -0.6148867757069116 0.29604078032654857 -0.22635082232034276 0.728321382476971 0.6878150602684463 0.7779528307950658 -0.21501775550614877 -0.6991796542395337 0.3229234755744006 0.2656719324976342 0.34992975524783376 0.00037652540586385896 0.7108018784703143 0.43933487015987494 0.47502717730107236 0.10340643352355139 -0.3264571523365085 0.08498182295948076 -0.2641895439222939 +16 36 -0.6318701699246831 -0.80882250475131 -0.5789253082571988 0.12782180080678684 -0.5351108140291054 -0.2589658539090578 -0.40325871926827217 -0.03439380983859319 -0.5223845681652317 0.14280376321901445 -0.8769726215078326 0.25789179288986075 0.8990649942159143 -0.7079014880748755 0.6222450505178467 -0.19611054764906166 -0.35875206740977217 -0.8036089079145565 -0.485563946686725 -0.29008284215223945 0.22514084303662663 0.2492899212758033 -0.6608588917483273 -0.08246178479413513 0.3684360087152674 0.9176988756296276 -0.9563732974810586 -0.40314380051497545 0.8289151282699372 0.3268931785697662 -0.41027896927550933 0.6366880257506442 0.7894769894582054 -0.9819485309449498 -0.1178484920525642 0.22390078335201768 -0.4961679807278754 -0.6934813441016043 0.06655120959821259 -0.5633309605391867 -0.0619835788811165 -0.537307399500198 -0.20901443125669772 0.723222497132191 0.6161653251876233 0.6465881575176049 -0.4231899599635909 0.9259509797412395 0.33310521627286893 0.7904373166365264 -0.2831467548217277 -0.7420681925133858 -0.9067259656571967 -0.606503530144302 0.5315615142816599 -0.7147463918958956 -0.5613493489633179 -0.19912683658981822 -0.560547329920217 0.8188027700605285 0.853213134351823 -0.8263555688083273 -0.02240861944876582 0.7998081641675359 -0.2627558327757331 0.35690661907765486 -0.7944392357227563 0.8026190536673388 -0.03473386542970225 -0.2559989750833167 0.19850857945166922 -0.052482814796149135 0.42511710545729753 0.38328828874267895 -0.08162570821431459 -0.3225573889647726 0.9305226068922536 -0.7367864133829083 -0.5297768403209957 -0.15299001208863272 -0.8818884913787681 0.9035652740271904 -0.5467470889144148 -0.30568537395088957 0.7754269693988964 0.565909198853743 0.8785012558577694 -0.17236561293282704 0.4402527427149572 -0.28392544657062424 -0.30412742239810653 0.17447634965804082 0.5223768546618095 0.916782007458216 -0.8633656562328331 0.9634754486063222 +16 37 -0.2730694238848417 -0.441759866792496 0.2801340593855075 0.8338548156792229 0.47533831898778556 -0.09883747726760062 -0.084492297541501 0.8235467542134345 -0.7394720066620617 0.5468965901121021 0.6132302506878637 0.491138046543099 0.25341876450962975 0.9567656608700512 0.6546050341739706 0.7542373474204405 -0.5223968929410319 -0.4900540702145173 -0.3987416006429012 -0.6203889123392932 0.926362875122861 0.8433358022166251 -0.05133596734618884 0.08229885316767893 0.46837872498724087 0.500218938570848 -0.823012301244108 -0.07955592143938839 -0.6976224987033903 -0.04843823769745259 0.5898482682910022 0.1737797393538878 0.5944817561858851 -0.36816980969588764 0.263043473655834 -0.6800887205307875 -0.7147860784821278 -0.3229828444460927 0.24677325229131442 -0.2451637016460162 0.04699070576962705 -0.5374241370767441 0.41954758703283446 -0.030550873228935904 -0.9021971539327243 -0.5238185066806098 -0.11317669219153359 -0.20580282590270116 0.2231838344341528 -0.12170174825618041 -0.5708552573780452 -0.523480588382389 0.25269573227810005 0.5968997836804191 0.7095185206170047 -0.9200016156528859 0.23551982999936194 -0.5287701200286841 -0.9385464889093829 0.23477784050469186 -0.283784396475399 0.04648291158324391 0.6901524533331733 -0.5878492730108342 0.6348865451295338 0.6592104875480631 0.9210082233738814 0.3787667494296989 -0.8652326256229781 0.9035535885563415 -0.6148722515208715 0.6258138095078474 -0.13440755378602698 -0.9863262989220123 0.0008038795017362155 0.8849614423884946 0.4966335207903274 -0.5329878707907525 -0.3592525015719734 0.8944162000922471 -0.9514377120526611 -0.8195610351569476 -0.5268609095797534 -0.3543348995706026 0.3493086626855919 -0.8788566787657108 -0.9370132214467166 0.37679848791106285 -0.5259317668601418 0.6488303231759565 0.8277081952201291 0.8488853556301068 -0.14668346361006024 -0.5460541093546658 0.010784830382190247 0.28212451964763363 +17 16 -0.9891043076194412 0.6695052062267302 -0.8178662588952446 0.9417348502754317 -0.9617234368854224 0.08026271440675647 -0.12152765433179513 -0.10701732770196548 -0.4327748804928917 -0.12763285185087425 0.9626358973681097 0.7238885117081832 -0.1307859283634536 0.7407645677792232 -0.8150190611878265 -0.06521950673820198 -0.3031021575442552 -0.3524527841143128 0.5643341968788096 -0.08079896276399068 0.07767379440840161 0.8801786678618124 -0.9956501107631035 0.5380144286917292 0.6485561287011836 0.027451281784116155 0.5892970863652087 0.4368611371009179 -0.5286109255191103 0.605547988501274 0.7907596902283376 0.19010187897323516 0.08273916699673056 0.8334777554270985 -0.7096621383971748 -0.30276259581857445 0.6613076782571414 -0.7344623653457543 -0.7962633920351991 0.42217497796113235 0.8530197379939806 0.3861884872315553 0.27781719680666406 0.5661354512078312 0.20344493724665003 -0.5667070236660179 -0.7464055679508732 -0.11420349691161058 0.25580697286347975 0.8532083580181318 -0.42432213751916437 0.24644579220890406 0.2014076963292799 0.8723036133968631 0.9529004938294847 -0.6903523305733037 -0.0895348686316777 0.5407474702485509 0.3847733892567242 -0.6753080563187768 -0.650973885512834 0.3896633032862755 -0.404930825454908 0.18282408133641503 -0.2453532712164197 -0.9228866207626616 -0.6113651185520537 0.7245829686802421 0.2590654512179802 0.2899265535142044 0.5480497227453083 0.6217942402874004 -0.576175029054409 0.8121105329872531 0.2997420693736388 -0.5533733999565147 -0.616429642849093 -0.7646004737350727 0.5814051458137788 0.11763519123598742 -0.5923823979114617 -0.8213515123392987 -0.9914945012492089 0.7899771989627329 0.2895912431890171 0.2219786725325381 -0.13753700447119033 -0.5859042750874832 0.0008961668063847128 0.41953985800916094 -0.1303431110652642 -0.43576795525442225 0.17993427919987082 -0.6597646091962917 -0.45091000997554964 0.5849985906824875 +17 17 3.0123736453790677 2.9779073317512523 2.999773332910639 4.417310633872109 3.119983308822418 3.970579215624342 3.549820510484258 1.4434032813502513 2.403380930432378 1.8592646858923303 2.623781075651891 3.530065938451714 2.2059115462807606 1.99014616748845 3.58204583443295 2.6904938088729953 2.0734759571500754 2.579542878099267 3.646737012586593 2.075404777514281 2.1517534119475332 3.68991372871594 3.4436888470054816 2.916976730712963 3.1199809397682694 3.3039818976793547 3.3635527623559662 3.804205925892211 4.249792651981375 2.5007803293359396 2.964514367592147 2.4959149317171696 3.502584233560019 2.6318640845783694 2.4551041240068527 2.4240979963103677 3.150131754953726 4.380840600328987 4.032689095112043 1.3660904212774174 3.4085331759879667 2.588777276504479 3.1752830493131556 2.0844584557572254 2.352379107720818 1.4905183736277237 3.9438690275905843 3.970169281534143 2.946103381378451 2.3953325054296295 2.4028768665364755 3.3346569898236584 2.346782389333121 2.6801126802633837 3.284828368835349 2.7905720279029254 3.2216923049816537 2.7706310135654455 3.2135051732620608 3.076903655785669 3.2159641499850733 3.463979045778278 1.6984588643815046 2.4084794268308745 1.9023090994450407 3.9872210561702306 2.494712948805068 2.9565219212286977 2.3081509550879025 3.7478659373039527 2.536707945700031 3.47657446751363 1.63053566826694 3.8551138098084845 1.9623526999940644 3.156519001179773 3.4252147206278805 4.450518603417152 3.0893875800054436 2.0235477558940835 3.982151040346812 2.720189801921925 3.8161855786485237 3.6236086430499634 2.7676418957345152 2.93700491445733 3.5693942295192183 3.9703225422404453 2.7861693977841346 2.4428939993518384 3.6191892543364768 4.012810079715017 2.2544424420378957 2.594881494390417 2.733508717317655 4.388385577488375 +17 18 -0.321164775800479 0.00449827881829945 0.1417946314390457 -0.8890069933157101 0.05989281132307167 -0.959520780860345 0.747225377649716 -0.12067990321203359 0.1052265170143154 -0.13030172743795143 -0.923559829032053 -0.5182279452693923 -0.25051273650047734 -0.08059556522027123 -0.5210315899602098 0.8056881369952293 0.579557646220938 0.7261529040264201 0.9155927007099536 0.7701394014345233 0.8418662238577557 0.44426328856581465 -0.19214897343967907 -0.1580482842775346 -0.9838490601299936 -0.6836574132899398 0.6715031945576364 0.5028796562697337 0.9503350363654106 0.3763004791412059 -0.5933923303819961 -0.8650947916283183 -0.08085809752303397 -0.6726574105074314 0.5227761442591241 0.6288489517816702 0.05394056932058433 -0.21699090295237267 0.44636352224533904 -0.12569060756764716 -0.08931898529298099 0.28271737700538724 -0.644423091344515 0.37910856894145284 -0.27201396516367193 0.1481422370767842 -0.34195162905539345 0.6628939783274526 -0.8987231316883015 0.19358780021167088 -0.1756269960350767 0.0010468853727036986 -0.4935338579179849 0.076831672509311 0.8037481989864461 -0.2664307509833044 0.5868574555602264 0.12878435992601456 0.000523816030606028 0.5709849392052351 0.19445583066146255 -0.00028659348411319563 0.07919947700553598 0.47479530041336493 0.11101970436270236 0.999778565141368 -0.584152624596505 -0.16006203505119698 -0.2876556034773279 -0.4533340125336751 -0.6326700753802161 -0.7668276423787972 0.2156945430675008 0.8573559630571228 -0.12257298920291815 0.7544953084882937 -0.24154586449666904 -0.945148521584501 0.14464175193914253 -0.6253088660116957 -0.8578140865217547 -0.46823450043421877 -0.5044224456928521 0.7448012478630084 -0.9004402656433834 -0.09251054010455828 0.8349799164295366 -0.9571626854338817 0.3268268427910712 0.10950892056000261 0.3987996579376203 -0.8810078698751227 -0.023386485161083437 0.7913498507300052 0.00841773184536887 -0.9328607324412783 +17 36 0.46177741868425537 0.3329615319214807 0.5650620556099253 -0.5336519758604295 0.3151814329011211 0.8886356526684622 0.6084876093345868 0.46746238728554435 -0.5201149419059661 -0.5905059273999083 0.03783271625867446 0.4414205130003812 -0.2488919790286992 0.48521965318360705 -0.27018310909482013 0.12979089880578765 -0.23695155159035886 0.4332026173256396 0.17472738712554858 -0.005784773698540802 -0.5299524013870767 0.12858222731279811 0.9940996058487894 0.870644652398157 0.701850873404233 -0.8385663923062647 0.36321007577263553 0.5443055851226137 -0.9613089086811166 0.3509160015601407 -0.07692358450509085 -0.477350178821349 0.9804983096226052 -0.4637599650063562 0.11159568057970914 -0.46587932428658574 0.5949010128182688 -0.727808604426905 0.3695365013438563 0.1671074335042131 0.8128824811061488 0.7483087715931569 0.7883835589071895 -0.14181600045027576 0.4819501803121975 -0.10713952793713055 -0.6459390261202327 0.8909564529456615 0.12777761355771267 0.43342388139985566 0.3195838821560415 0.8530152150400221 -0.6744820585170417 0.9770609135704431 -0.8121263068274218 0.30980565064311505 -0.2541437242265092 0.7753904040631614 -0.8078803767413363 0.49834832843876975 0.7372682872473832 -0.7351674267384576 0.0807230632190079 0.28004726813238534 -0.34601297773524076 -0.8992567212959903 0.013314094508528385 0.7780294911076897 0.07477060999710683 -0.4484522061620728 0.02442166431379933 -0.6924371458257723 0.11550817528740587 0.5389607783464951 -0.22320866719006904 0.7559894694922877 0.4946287435612817 0.7367067602546611 -0.42905455557685057 0.9365463758594368 -0.8026346538634359 0.4225250857466092 -0.6430518085207273 -0.11491650297156286 -0.46808197524308603 0.3205709034622839 0.8077639913492991 0.5180063156049761 -0.6875372467716254 0.9560547035005766 0.9301858814257367 -0.9905952332061605 0.3621613883137078 0.030835712009577243 0.0949811159548839 0.9908842247989753 +17 37 -0.443614030729125 0.7418232038946604 -0.41323786451061073 -0.11927473283807943 0.780005877989771 -0.7037867163569971 -0.9093455524064822 0.13318185174920383 -0.8424342231880055 -0.004931699110295895 -0.18835058548447337 0.9846521043952796 0.6282669389503082 0.2848821219450688 -0.4806782561823255 -0.20152805976671084 -0.08691326753497175 -0.5846988367807002 0.17588273026392387 -0.3928573480256372 -0.0832011100754857 0.5671712146376393 -0.6851288797598252 0.529225558920619 0.5298334403101845 0.7844120470673646 0.6246142059583475 0.9494680242370559 -0.6697943082092848 0.1768365081026153 0.2533705580843857 0.6640762420756159 0.8529313822396651 0.02440265401047359 0.49675468823499247 -0.7239633397290142 0.6780406010265718 0.8662369019675256 0.606810396927453 -0.07394651966902632 -0.22125891908940432 -0.25649600543573237 0.9410556153386327 -0.6751397300249877 0.5004823535261447 0.12775082493741996 0.7239461348806977 0.567967752348044 0.8466895435252129 -0.03846078354464444 -0.38382697642580843 -0.7396228554966033 0.34722623988622603 0.2266416591383349 0.1959143734836304 -0.7144566990344594 -0.43522593368702633 -0.6628600256719046 0.16983367143375605 -0.7203854592269243 -0.9800712768595894 0.6761066127989068 -0.5181649010803484 -0.9107287509684567 0.04237196002481047 0.6201254254459558 0.43266311865404083 0.729406834667431 0.6000016486894177 0.7780047246766133 0.4409046402595638 -0.4813447965320976 0.0020448655362379498 -0.5409497223083224 0.5379891624819515 0.36637588656678166 -0.2250974204035474 -0.6091473008086836 0.48476456778890364 -0.022022814755076947 0.4254232302748251 -0.5639953785084739 0.5421407880161637 0.7559908602864238 0.09558976319919754 -0.9529566870498696 0.7277754200787074 0.7075437614669335 -0.5660613875593097 -0.08199995619767697 0.8864534766115735 0.8860513016120142 0.6340118743828844 0.5228115578743435 -0.6136506670976689 0.27946517673691806 +17 38 -0.10222793689712595 0.7855296151877906 -0.3452374134606633 0.9416901421058261 0.5423923026847326 0.751878836167259 -0.966322136641925 0.3460290593164699 -0.371272503303993 -0.571072402360568 -0.23125029875762948 0.5113217297974124 -0.18133527408632255 -0.021722136210092335 -0.7642150741623013 0.677567104279466 -0.5265486477443808 -0.4019706498727389 0.8590055697983976 -0.4969794439506583 -0.39684074653780255 -0.9740885596324096 0.04732679387655536 0.2916854693680675 0.10074094950892665 0.29076990823927096 -0.2978736577900254 -0.7465708292050772 -0.1754301164418326 -0.7243134930827975 0.3481294876155485 -0.19059455919026513 -0.8782415873998235 0.3377075252583557 0.36158981702735415 0.09103760676219119 -0.47172064321336626 -0.9261137895625391 -0.9094703296629867 0.2764302607954008 0.5019305973495494 0.7613461482923858 0.4696159019090833 0.270290904687271 -0.18579763742929423 0.25003257588835726 -0.8747946034008434 0.7525859571741738 0.3000166547569978 -0.0914023461082536 0.8088950966258743 -0.9619438143420582 -0.5892882999479034 -0.16968139817683414 -0.02809819064880248 -0.804983563508374 -0.909026755419791 -0.1857859275090077 -0.8528486311608243 0.09390624628917732 0.39189975549619094 0.7472208218785246 -0.5178715653953576 -0.1558805381447439 0.2031414796671025 0.3446517972597323 -0.7489567670816306 -0.3089507828430418 -0.7720021740827951 0.9992048752624518 -0.8779754683378753 0.2945935003854856 0.1980942357260056 -0.4626245555528006 -0.6491307301498757 0.18998724193375716 -0.9719074787560356 0.7349301230074976 0.8598608314620377 0.01313316067256265 -0.40368611710258473 -0.15557309164871191 -0.8307438411190631 -0.29548711423717666 -0.5823453974357351 -0.8832413838300801 0.994042741750286 0.8091438928594932 -0.5139866826015342 0.1422019297946111 0.6511978448920732 0.012993632559730184 -0.34599409168128625 -0.32392665818816146 -0.8225239894053822 -0.8516097709733954 +18 17 -0.321164775800479 0.00449827881829945 0.1417946314390457 -0.8890069933157101 0.05989281132307167 -0.959520780860345 0.747225377649716 -0.12067990321203359 0.1052265170143154 -0.13030172743795143 -0.923559829032053 -0.5182279452693923 -0.25051273650047734 -0.08059556522027123 -0.5210315899602098 0.8056881369952293 0.579557646220938 0.7261529040264201 0.9155927007099536 0.7701394014345233 0.8418662238577557 0.44426328856581465 -0.19214897343967907 -0.1580482842775346 -0.9838490601299936 -0.6836574132899398 0.6715031945576364 0.5028796562697337 0.9503350363654106 0.3763004791412059 -0.5933923303819961 -0.8650947916283183 -0.08085809752303397 -0.6726574105074314 0.5227761442591241 0.6288489517816702 0.05394056932058433 -0.21699090295237267 0.44636352224533904 -0.12569060756764716 -0.08931898529298099 0.28271737700538724 -0.644423091344515 0.37910856894145284 -0.27201396516367193 0.1481422370767842 -0.34195162905539345 0.6628939783274526 -0.8987231316883015 0.19358780021167088 -0.1756269960350767 0.0010468853727036986 -0.4935338579179849 0.076831672509311 0.8037481989864461 -0.2664307509833044 0.5868574555602264 0.12878435992601456 0.000523816030606028 0.5709849392052351 0.19445583066146255 -0.00028659348411319563 0.07919947700553598 0.47479530041336493 0.11101970436270236 0.999778565141368 -0.584152624596505 -0.16006203505119698 -0.2876556034773279 -0.4533340125336751 -0.6326700753802161 -0.7668276423787972 0.2156945430675008 0.8573559630571228 -0.12257298920291815 0.7544953084882937 -0.24154586449666904 -0.945148521584501 0.14464175193914253 -0.6253088660116957 -0.8578140865217547 -0.46823450043421877 -0.5044224456928521 0.7448012478630084 -0.9004402656433834 -0.09251054010455828 0.8349799164295366 -0.9571626854338817 0.3268268427910712 0.10950892056000261 0.3987996579376203 -0.8810078698751227 -0.023386485161083437 0.7913498507300052 0.00841773184536887 -0.9328607324412783 +18 18 2.282271835357962 2.134611169132387 2.9870778336224895 3.2283419183589634 2.1871034592798644 3.200923065081044 3.4093558699772046 2.467560246178967 3.5957716686829917 1.8798590378532614 3.5030059794917237 2.8641387321557685 3.554963567100876 2.2951273250810447 3.912702760443942 3.7331289720055656 2.8932476884262983 3.0195353376194918 3.4939876797060743 3.681685279828871 2.7128319379726515 2.8366983227968134 3.1647059168937344 1.8803023314168643 2.920568737558481 3.4256436440040745 4.74095645772194 3.1464288647441627 3.108008662483779 2.341715890456556 3.33483517033845 3.5891646073791748 2.2873599655515973 1.869395103398571 2.862180684707882 3.053598112747395 1.656729883853305 2.5933253853068745 3.0205069950682693 2.7106159906771143 2.5861041577230415 3.3460122112290787 2.551794370214231 3.5131587070277126 2.451453458422339 1.7972300991564547 2.8066944087226364 4.132862066974295 4.075227159994135 3.543838325031388 1.81261241672967 3.6223911548812904 3.0512113385602175 2.3838604084247486 3.6664306854087867 2.4588117537566574 2.6745537435238513 2.8198426044232185 3.07628366629399 3.2697550821061228 2.582348640684904 2.9100734251955953 3.833842974684451 2.37193210154034 2.1040468881076277 2.99484760949853 3.5949178516030456 2.579939242791804 1.9334514292553557 1.8163321234952143 3.310848329280753 2.9063008327855107 2.927413579764618 3.226543800421701 2.219767281365301 2.3570253480519785 3.709946868381226 4.060760548474957 3.791882864954113 2.603791709071441 3.8643950950953605 2.1661423576222707 2.609391093876597 3.7883129580922374 2.8711072685250167 2.3841190725234727 3.658809723499191 4.871703068563244 2.8235984860281045 3.079509359499929 2.5145474327471122 2.4919829597108176 3.151972345937505 3.445337421193618 1.9519746244588143 2.931610943249958 +18 19 -0.5610177507044296 -0.06818477432707803 -0.9213682755258081 -0.5766295063586819 -0.38867161140197704 0.6585956760058631 0.777249821761085 0.4034199495033979 -0.730365176398539 0.3127945925705966 -0.1334076982830108 -0.48326864152641846 0.6087897025247535 -0.29885311409319293 0.8539799633057426 0.9534575965019352 -0.14380089783101258 -0.28680685789970783 0.8299036544158038 0.8014736544994379 -0.317479145103138 -0.9305325975921279 0.6421923090726114 0.12698187649030102 -0.41132180181619127 0.8056554320080263 -0.6531194239908937 0.6264365571011954 0.6064945253625114 0.08315833685022556 -0.8266541648176156 0.7232422335982993 -0.5927256082168568 -0.25749529688703743 0.8298423697245372 0.6037511592920413 -0.3078012552017406 0.8448487353291132 -0.24401528415208973 0.027806489998526862 -0.06953054850346829 0.731881859658926 0.5498621075122998 0.9227692202406654 0.11228542560883681 -0.09188358511413264 0.6064798209994378 -0.7983537995178094 -0.6406509096005581 -0.17084700206776549 0.22795718331663806 -0.7291918778495883 0.4985553308889683 0.8876581226840634 0.4425649163373466 -0.7433381118458358 -0.5929655711002206 -0.06400557256635775 0.08105395880653443 -0.3523241341872996 -0.02719338578307795 0.816887842172501 -0.6213615929208005 -0.12493497381544927 0.13486732661882184 -0.06264375720173909 -0.8969326978126604 0.04744628341822854 0.5174492563136874 0.3283960443104734 0.7040547925645493 -0.45435323320268406 -0.708729175906053 0.4376746732765502 -0.44204952969491473 0.5785007888123541 0.7128979631374937 0.7276262226532189 0.6632835086198121 -0.48658991602313395 0.5870788296288723 -0.0816718065700861 -0.9666116913817608 -0.4909986353988789 0.16288683667990522 0.5956694381971568 0.38165229939659806 -0.690911258863361 -0.5069543956129572 -0.6672729530941302 -0.2107941960328068 -0.1950570152863751 0.5830313196967987 0.9722337176448961 -0.38922431103673816 -0.9242775939241956 +18 37 0.9381264638296964 -0.7756100347996344 0.5441066347128742 -0.229590478298487 0.33195164855882187 0.30027285430425743 -0.34796897307956476 -0.18930829685310657 0.18799703755412955 0.59175352541874 0.4107571503663374 0.4456482096327099 -0.23737046403943496 -0.2959068129334206 0.41858104321952805 0.7240467493056291 -0.10111333471637018 -0.8730208745003261 0.5950431647602623 -0.33983647171719844 -0.2349344506102411 -0.44933697106182247 -0.37951673352400195 0.3352275651904708 -0.1094235504598362 -0.28196974450786927 -0.8450191039337094 0.4532833904252316 -0.24476339848237028 -0.31104568506739616 0.7106938864757033 -0.13274915035278223 0.22402889879202248 -0.2534117094955708 -0.021892730814955907 -0.5154917858692347 0.35361094345624355 0.5573458329851597 -0.8230355515564587 -0.9126361230772828 0.4673423153855829 0.3845589240758953 0.38068584551774687 0.2829465839658445 0.5098560112895689 0.5741773010442861 -0.1644144556268341 0.6371652765587765 0.8197432172926316 -0.7747894849605028 0.46942252354413583 -0.868683053923966 0.33483843382379574 -0.9319762182231406 0.5068595650825951 0.29729091797331697 0.2962111081827288 -0.516653006129512 -0.8716839889134553 -0.06608147177022938 -0.42100983885602417 -0.413853117545683 -0.9602086332135147 -0.30920200358010774 0.21112232691402477 0.5431472237704944 0.7149930932239765 -0.9603632881050839 0.19774839308032144 -0.3004086358983904 -0.676040913473483 -0.15683771157783766 -0.15909041128199597 0.10989873206100298 0.43670248525144806 0.18750966750771192 0.873309724939568 0.41269021176432474 0.8032701968316907 0.7094265185591471 0.9640002845525419 0.3691104642562524 0.5477374343781383 -0.8913906207677085 0.00905379107099491 -0.1682588717469844 -0.5331719657302603 0.9688171396749905 -0.11520908605453672 0.3995714075645156 -0.11692858883060153 0.37087851806387984 0.9392898213590337 -0.7825267724426983 -0.16811389664196996 0.2760412535849197 +18 38 0.01970358894461821 -0.02112703847395614 -0.2648462713145603 0.41425814023211927 -0.7305762926251964 0.5575793441571155 0.3955340321371703 0.6550591780382309 0.9080046054022761 -0.29585392987058756 0.8326526642972316 -0.8168204076070238 -0.9984730735299163 -0.5161701446715619 -0.6716733170374447 0.9628533578709526 0.5751326839043587 -0.6002225460022892 0.6495741123035486 0.13755877817615358 -0.4423286659485015 0.6373462247989663 0.2826243325597131 -0.39173464147729953 -0.22614718075024043 0.6895091341959529 0.8672482138917235 -0.45496384610524254 -0.6987514207041419 -0.6636560938150837 0.0669650216255877 -0.532252057015943 0.1568968972747995 -0.007977673230837867 -0.5249551141071094 -0.16286567615001601 -0.24856149807649164 0.5584297854188425 0.1669552139567254 -0.8873409875915139 0.06796183810084777 -0.558930762058985 0.21387690180104912 -0.46036028178954247 0.8192725722665442 0.17314013387536265 0.15912677254252738 0.8934658506023654 -0.8891364092313352 0.6741880266609279 -0.43886287650999 0.48224070701565247 -0.6205155295750839 -0.43897380555387056 -0.8549757248955236 0.937406376252107 0.46452680038898664 0.5272298606595964 0.5760292725992546 -0.6173099404756195 0.5259676401621844 -0.6370683838516558 0.7586109407646939 0.36914671604504123 0.5780294950268676 -0.2088464433838133 0.30939791700754893 0.6152818541181106 0.004868592199953392 0.4049616305846364 0.4490310686385419 -0.9099993244870164 0.16995729725748276 0.9751107715899288 0.2917459538920726 0.27650833475065695 -0.9512382058496578 0.9413524792755767 -0.6996793955945464 -0.2788184898968711 -0.4099943281863321 0.2331347617123618 -0.07357837358824648 -0.7861074580581235 0.8483015875921496 0.8234208320084884 -0.3343610736279605 0.8694079140335249 0.5545439964498584 0.49739274890555696 0.5867733982681531 -0.22132563269823868 0.5684768150132773 0.5943038297346526 -0.12239646040686036 -0.03958935206580305 +18 39 -0.3590286851033764 0.6179936128695185 -0.14999228165577083 0.6293532506020165 -0.17474861982408618 -0.4863818588138482 -0.1891643021082483 0.6860884152493036 -0.9507327736752285 -0.4060299547910098 -0.25401738163983234 0.40143013689117346 -0.8649877720071895 -0.6719890566260311 0.948200930846335 -0.1748124467639578 -0.6363794420488174 -0.1849748166699512 -0.005556840959594522 0.8095272997805296 -0.28105203089119124 0.09140941757221177 -0.754510005294335 0.4111418158831055 0.7181216516198012 0.4045285980629747 0.7311029867476464 -0.3751334910958455 -0.517772432144185 -0.09144898880924979 0.511770329656352 0.8482563984644409 -0.6139557744381885 -0.397296168587828 -0.8900268648626699 0.7055164226941706 0.36104162543729146 -0.30059485188164925 0.8405247316133337 -0.5121579528266764 0.987993778379153 -0.7031258791100081 0.5601515233029517 -0.4806345319073182 0.35013423156888535 -0.30660523927219074 -0.9153338737525343 -0.5589927389271709 0.1339258958594387 0.8106876270419234 0.37133021322618065 -0.9445041369720382 0.1448745680454382 0.0140964735180511 -0.08099627834671796 0.057153722005178764 0.32871211075311235 0.907068071249451 0.9492392063560646 -0.7461289661325512 0.6959436933696443 -0.09177230439470607 0.789858523960216 0.6063107447608658 -0.6277101896018162 -0.80208840454978 -0.7409877345268201 -0.45927683886757187 0.7728554159204466 0.09296171918307627 -0.6938422732435079 0.3691030934777586 -0.8588168405999903 -0.35548536062021374 0.8776780967914879 -0.046319464177511094 0.5085954960508539 -0.6380746122033076 -0.5100516622139377 -0.4402430528104213 0.31843132452160416 0.234020704626553 0.37879321689604684 -0.4420324323543219 -0.15960531537298617 -0.3973139831313379 -0.6268636258474347 -0.6507311897245842 -0.6688176866325275 -0.7345560889926872 0.7415237471110954 -0.555183596967608 -0.21373439886241408 0.2776260735649758 0.3529999974485607 0.7218164171036381 +19 18 -0.5610177507044296 -0.06818477432707803 -0.9213682755258081 -0.5766295063586819 -0.38867161140197704 0.6585956760058631 0.777249821761085 0.4034199495033979 -0.730365176398539 0.3127945925705966 -0.1334076982830108 -0.48326864152641846 0.6087897025247535 -0.29885311409319293 0.8539799633057426 0.9534575965019352 -0.14380089783101258 -0.28680685789970783 0.8299036544158038 0.8014736544994379 -0.317479145103138 -0.9305325975921279 0.6421923090726114 0.12698187649030102 -0.41132180181619127 0.8056554320080263 -0.6531194239908937 0.6264365571011954 0.6064945253625114 0.08315833685022556 -0.8266541648176156 0.7232422335982993 -0.5927256082168568 -0.25749529688703743 0.8298423697245372 0.6037511592920413 -0.3078012552017406 0.8448487353291132 -0.24401528415208973 0.027806489998526862 -0.06953054850346829 0.731881859658926 0.5498621075122998 0.9227692202406654 0.11228542560883681 -0.09188358511413264 0.6064798209994378 -0.7983537995178094 -0.6406509096005581 -0.17084700206776549 0.22795718331663806 -0.7291918778495883 0.4985553308889683 0.8876581226840634 0.4425649163373466 -0.7433381118458358 -0.5929655711002206 -0.06400557256635775 0.08105395880653443 -0.3523241341872996 -0.02719338578307795 0.816887842172501 -0.6213615929208005 -0.12493497381544927 0.13486732661882184 -0.06264375720173909 -0.8969326978126604 0.04744628341822854 0.5174492563136874 0.3283960443104734 0.7040547925645493 -0.45435323320268406 -0.708729175906053 0.4376746732765502 -0.44204952969491473 0.5785007888123541 0.7128979631374937 0.7276262226532189 0.6632835086198121 -0.48658991602313395 0.5870788296288723 -0.0816718065700861 -0.9666116913817608 -0.4909986353988789 0.16288683667990522 0.5956694381971568 0.38165229939659806 -0.690911258863361 -0.5069543956129572 -0.6672729530941302 -0.2107941960328068 -0.1950570152863751 0.5830313196967987 0.9722337176448961 -0.38922431103673816 -0.9242775939241956 +19 19 2.8159418919943358 2.3760035212751847 2.6558567771656967 3.5247958122952827 3.321038444686308 3.105726844277135 3.8135135075122113 2.978482735778165 3.105925076926225 2.300905370740379 2.5783896971795666 2.3541860172533653 3.30171207852919 3.6483069642726678 2.5511127737554737 3.9409337521724925 2.5332356894607937 3.342618636893835 2.8363734910988856 2.6990906806607358 2.1703576595414438 3.4863915364415243 3.705458774049049 2.1666509591849294 3.0217602452964902 2.483668739741365 3.600286582551897 3.299909928555315 2.7377841168653374 2.30199342288104 2.769296829054469 3.442299760806712 3.5291130002305975 3.506467742898959 2.296294025331175 3.6299129218832036 3.5121756371947708 3.189668001031811 2.8067400913475335 3.053946373094326 3.8369166114998037 3.4963036724385246 2.5029062422042503 2.747738705599752 3.670555880763115 2.1686136781925063 2.806847697997304 3.1534769771090607 3.714019003756275 3.1112794175646625 2.17771778033083 2.4517718632857397 2.2981892994738575 3.4779700626178 2.7520545409934103 2.570654949948149 3.711859049198315 2.9431772308107975 2.084114129805794 3.0448147014160636 1.7101637918297867 3.0296315453182214 1.9931210725323276 3.005000355149895 3.4157127652370782 2.3366935488034333 3.8270014515528477 1.9592497091574532 2.9716721332019014 3.5111462238049413 3.994102601644051 2.8279574519326074 3.307435509569134 1.4453680783711793 2.6332986857862313 1.8795964755807537 2.530123881728741 2.9290438337749656 2.499364269621152 3.411218813154754 2.2425409183340035 2.351243932541311 3.5143489594366866 3.0915422269370203 1.3161040464963525 2.3524640817793707 3.3590111947371133 2.7002396433184748 2.761165049449957 3.407242050618715 3.2686378115179764 3.0217833057362435 3.537446043099467 4.004196563953249 3.6219145690774086 2.881811768833166 +19 20 -0.5723929197626385 -0.3049698790209123 -0.23135782123988013 0.7911119793812951 -0.9233969831688085 0.8838568816890691 0.6082412913006399 -0.1539772464874043 -0.40671560727653144 0.05484075746551187 -0.6274471267620563 -0.15511257970858394 -0.9595233574554323 -0.38358959549274463 -0.2674560510619599 0.8017577436848198 0.9647022531780516 0.8554818378207858 -0.452080955069877 -0.107451145382371 0.21427748311977624 0.025754121132569585 -0.34925366681548486 -0.3292610856594187 0.5480078738367464 0.14574024849026546 0.12924810671448816 0.8458695423042037 0.24087016141297757 0.008483462791083252 -0.460643667921238 0.3341804677433564 -0.7392020267035515 0.9047588272473397 -0.019418871346002176 0.9868142664171118 0.36386746787720403 0.7229068898405449 -0.8314589051188099 0.985921315200587 0.5797042070058644 0.6920442432269303 0.41070712355732186 -0.32409447678222447 -0.8279162329135428 -0.36559608213033457 0.7337593355477363 -0.3531100508612812 -0.939115150267265 0.6605853832626964 -0.8263755944881319 0.1912932398874272 -0.7515807235736522 -0.207422671137391 -0.12556898610141554 -0.3589829925800243 0.7720684073575752 0.7024131578863846 0.5243561334899116 0.5696896891050516 0.04603677495222769 0.1972737973549339 -0.09534524898168018 -0.7942800930835556 0.6240666336394178 0.5271944697019526 -0.6361957351095959 -0.47411911614970026 -0.27534844843558837 0.7641857387130977 -0.27523242854155994 0.1234257149282143 -0.21401382511860478 0.23139022499128759 -0.11832021108823376 -0.22517002486062387 0.16846084909660397 -0.48811338375829494 -0.348397252942948 0.17034674985670462 -0.31908711299670545 -0.5070721253187853 0.48855467591519 -0.583202043907397 -0.4720311917355997 -0.14197984052930712 0.10601832991752502 0.22818002874898835 -0.47156402653348484 -0.5749462109591119 0.9179661938227086 0.9710997140989723 -0.3032599949967938 0.9059119930661792 -0.7340154897502913 0.13345360084391533 +19 38 0.10520228908860774 0.8478919941484924 -0.1286055895359306 -0.6613767597098512 -0.573866272870281 -0.46628708171694666 -0.5553629651876433 -0.0859796218603579 -0.22820890366541313 0.14404716567183606 -0.23397106397587275 0.4879379785234401 -0.7292047250239133 -0.772925040792708 -0.24201754169215262 -0.5205602464471917 0.015051470472458472 -0.7594498348356324 -0.1654202512485028 -0.14579871578880477 -0.20097423040560924 0.393170835856794 0.9951385136834245 0.6377867945490305 -0.8844886061115942 0.5115852687168461 -0.6593504814991469 0.7899515089710021 -0.48768590086133745 -0.5803319914925482 0.13368183066699224 -0.747175065494633 0.9812335000225756 0.25139495886866103 -0.9974936706041737 -0.11820459304710518 -0.801076157009426 -0.14844235892563828 -0.7226840471831304 0.6439041847679221 0.6813859722760964 0.4961505867699727 -0.5344767736279397 0.5263470885984423 -0.72378719813572 0.4649991251735608 0.24262652143314756 0.5906039787191455 -0.20353171031577233 0.42046313630553755 0.08142185413302894 -0.27408212317753233 -0.03519628697770161 -0.7283987754398935 -0.8922637290948248 0.004521472014715755 -0.8936624107645761 0.6113553025578522 -0.034564954299397765 0.13485781544293185 0.1441571363868972 0.3096370668334667 -0.40978791536951653 -0.7367932880824066 -0.9906779170419888 0.19349605294991234 0.9788268588777382 0.38607140702860043 0.5086359176025943 0.5659589158286769 0.36623746038750804 0.9081174221571695 -0.3480938914299394 -0.05422296486855349 0.79708434420079 -0.5488228572265827 -0.7153911026591799 0.6586846594179638 -0.44490052575394246 -0.363570811844647 -0.2448098742037219 0.16907613150826917 0.4157663290873126 0.22672657728849188 0.3552815781168652 0.6074326142881636 0.8818655010239069 0.4917850182665462 0.5685680039047847 0.870427392360799 0.02423352944992163 -0.3055573935640228 -0.34351024599884483 0.7918531534307236 -0.528268417639228 -0.25846402939053137 +19 39 0.5378944322632888 -0.763520762918563 -0.22311063627075778 -0.38282716060899435 -0.4332017128841452 0.5983028471131697 0.7771524642427725 0.7513166074188085 0.6373232665146364 0.6938120319881782 -0.34598758395425944 -0.4903282602479846 -0.5372112922751628 -0.3474908768926188 -0.09914392277224793 -0.8447620200522676 0.05013494112980266 -0.37514783531775775 0.9300068976619991 -0.42848558556859406 -0.20021617807972913 -0.8551661781440223 0.7450412374901976 -0.4116350192877427 -0.02502780737265131 -0.12005344653210193 0.9231265642078625 0.08791268587991041 0.16404830718428065 -0.20004660339403468 -0.5456395820369895 -0.6365153292458987 -0.9906470138256074 -0.9229702940376143 -0.1875118515608898 0.816547234411348 0.5561934773932311 0.18334359759293406 0.4403070071159967 0.7251162472919417 -0.863099525442447 -0.45892856836427653 0.15678288202528656 -0.45192661084830577 -0.5921847610032678 -0.8918539761992252 -0.7014507630805491 0.2852955378350477 0.973413641033658 -0.7074772770593596 0.2068794862548231 0.2335691549592993 0.007863685363418194 0.1327521753489369 0.31044492219862363 0.7357064846528605 -0.31567248212231513 -0.45947776251724326 0.7987242463957236 -0.7163482552342175 -0.8927266079715404 0.42563067492170426 0.1106452618537912 -0.09998371549594798 -0.46347185523957557 -0.5128949552979643 0.16570869346246475 0.39165608276988984 -0.8975557802547147 0.9927075610609448 0.9484399853977488 0.6272858814019573 -0.3927602382840727 0.0985482814398917 -0.3763504692675139 -0.12378062125480294 0.2411186820266371 0.5269882670605675 0.400968100249961 -0.9928152871152149 -0.17937011644991263 0.9923293321859281 0.8794753130573976 0.9763372143608962 -0.12435662757750165 -0.4391739897731952 -0.2488158742210722 -0.46583699555475677 -0.22314734165395977 -0.7997680013977524 -0.5179389498339202 0.9584358853812616 0.8764582980139266 -0.8838118566534525 0.6228143894615661 -0.5062432829131887 +19 40 0.10453501078868332 -0.19298775277917257 -0.20615695496324582 -0.7242292693170127 -0.4700727382230685 -0.1891486581349906 -0.2536163487376195 0.8250364506585246 -0.7565424437635477 0.8820890009687814 0.5761743190656303 0.7010695556971029 0.08058151881573306 -0.9642123920366668 0.9855305128070133 0.23537421641278722 -0.547408438528739 0.21499381145354501 0.348378591020023 0.8300855432152638 0.8186096880130751 -0.7933032610345598 0.5977260247568446 -0.2610650622779227 -0.23275770840662702 -0.33245313918230956 0.7495433716735516 -0.1066128555686594 0.5297273382027783 -0.9573981437284389 0.04878192964541883 -0.27978959625729893 -0.1656769846934989 0.3091949283346054 -0.16054244478682045 0.6847714465441517 -0.654001200447923 0.8140784423735079 0.1768188189904789 0.48457998022817783 -0.6958492436320252 -0.8267237130665286 -0.4439478742825602 -0.4502731538011533 -0.8232239217054262 -0.2464688647745492 -0.15960454992821416 0.8042573000929494 -0.3483077221493749 0.19416901373527806 -0.2576670371789218 0.6102783360874102 0.09629275934632675 0.532258398358967 -0.040458843887276386 0.06759468541486657 0.959317387480678 -0.2305949912319163 -0.04134694639723402 0.5025104040416186 0.379572493670568 -0.993657129392675 -0.08527784238998537 -0.40472845872525176 0.500353211801978 0.8773031394828363 -0.839046600896409 0.10975296127869805 -0.5611404027328266 -0.4810376984561908 0.7206870886299974 0.7133886042932005 0.7935718651055157 -0.15160309328236643 -0.1522282576143763 0.2784181672018946 -0.11339303855814231 0.07978221743600145 -0.006541038264001431 -0.7108460671254264 0.8883335988872987 -0.5832690494836017 0.7323568342771358 -0.1595073886765479 -0.08787567353224057 -0.26931929172821123 0.8250868657743888 0.1370525998429577 0.44658783217365783 0.43025371375280885 0.8967724292016721 0.5693212729601387 -0.6059894023437826 -0.2373821114079231 -0.9771867904337774 0.5561652564159749 +20 19 -0.5723929197626385 -0.3049698790209123 -0.23135782123988013 0.7911119793812951 -0.9233969831688085 0.8838568816890691 0.6082412913006399 -0.1539772464874043 -0.40671560727653144 0.05484075746551187 -0.6274471267620563 -0.15511257970858394 -0.9595233574554323 -0.38358959549274463 -0.2674560510619599 0.8017577436848198 0.9647022531780516 0.8554818378207858 -0.452080955069877 -0.107451145382371 0.21427748311977624 0.025754121132569585 -0.34925366681548486 -0.3292610856594187 0.5480078738367464 0.14574024849026546 0.12924810671448816 0.8458695423042037 0.24087016141297757 0.008483462791083252 -0.460643667921238 0.3341804677433564 -0.7392020267035515 0.9047588272473397 -0.019418871346002176 0.9868142664171118 0.36386746787720403 0.7229068898405449 -0.8314589051188099 0.985921315200587 0.5797042070058644 0.6920442432269303 0.41070712355732186 -0.32409447678222447 -0.8279162329135428 -0.36559608213033457 0.7337593355477363 -0.3531100508612812 -0.939115150267265 0.6605853832626964 -0.8263755944881319 0.1912932398874272 -0.7515807235736522 -0.207422671137391 -0.12556898610141554 -0.3589829925800243 0.7720684073575752 0.7024131578863846 0.5243561334899116 0.5696896891050516 0.04603677495222769 0.1972737973549339 -0.09534524898168018 -0.7942800930835556 0.6240666336394178 0.5271944697019526 -0.6361957351095959 -0.47411911614970026 -0.27534844843558837 0.7641857387130977 -0.27523242854155994 0.1234257149282143 -0.21401382511860478 0.23139022499128759 -0.11832021108823376 -0.22517002486062387 0.16846084909660397 -0.48811338375829494 -0.348397252942948 0.17034674985670462 -0.31908711299670545 -0.5070721253187853 0.48855467591519 -0.583202043907397 -0.4720311917355997 -0.14197984052930712 0.10601832991752502 0.22818002874898835 -0.47156402653348484 -0.5749462109591119 0.9179661938227086 0.9710997140989723 -0.3032599949967938 0.9059119930661792 -0.7340154897502913 0.13345360084391533 +20 20 1.5342770604460028 1.3241832537695113 1.3772644574618467 1.6466708424975678 2.5434461114703466 1.9433613376378738 3.0701586724228083 1.4649516643118918 2.029846873859911 1.7781303874796126 1.6906246403070113 1.9627285187016246 2.178596411540022 1.6224438399469732 1.4134907265883787 2.791872359052999 2.3217117463062094 2.0170784109633972 1.114809186916915 1.3875652488510595 1.6751138176069664 1.012998941947666 1.2428446853372055 2.1330168603151964 1.4971606128773691 1.5857549959226325 1.7159005111167005 2.1797730018718946 1.3977624642009299 1.019242081208713 2.2775088741277534 2.1293725764983176 2.3231415041011516 1.9153462033501596 1.636961998215453 2.6169238959203067 2.0129463461651924 2.737133044037911 2.703018575821884 2.3854367787024913 1.7027200061292203 3.4308660209447632 1.7687693078455116 2.075257597398944 1.7658401312841883 2.2196960402048074 2.8665535331300056 0.8182865689768946 1.8225846617198356 1.8357112163450597 2.2038912686077423 1.8004570220313123 1.751208058811297 2.7909421855682206 0.9608114003710309 2.443868184937963 2.5187052956600198 1.5173329060840868 2.4562486475825036 2.0540448491065844 0.5591522769916273 2.137502741747663 1.5316215861037104 3.2836202612309466 2.008632179744348 3.019654360551465 2.3625031492336097 1.7992701005524097 1.1310672799323365 2.7144984994421666 2.6762071165495467 2.2674509028670125 1.4835959529152924 0.5914693927671355 0.5123420168167743 1.2941639685540447 1.4768532138234067 2.1339484600465117 2.2808762669972493 1.96822066489651 1.1399284724381813 2.0224159175702017 1.8853756869390592 2.530771904156231 0.6643411101703414 2.4552791701382377 0.7441976976707796 1.7077705950192867 2.0823651966819656 1.506274626179014 1.8715168345014566 2.0698883019969716 1.444945537624276 2.0429962547679175 1.9214116766956286 1.4254778046796197 +20 39 -0.2564647493410226 -0.2334272553307848 -0.33415920377646624 0.554160352790749 -0.10912702878630265 0.3486240379837986 -0.7247295937470224 0.31388280168913707 0.26168430652330676 0.9193454921594979 0.17913274543386115 0.9923143837312829 0.745597033091536 0.2967967203608932 -0.32627077978079444 -0.28444114806427434 -0.8641657514295837 -0.42439555483478775 0.05437130637295384 0.3155518455577835 -0.5511210274087499 0.340016379840663 -0.1793489621950195 0.786846648953323 0.15529348976422308 -0.0245494207113357 -0.5173394295372098 -0.014086285650731334 -0.07744953160545687 0.20321731232125706 0.8897023147362422 0.8141721171542595 0.8177849521140128 0.4575754020239906 -0.14247522767864762 0.7820710838618568 -0.5302929118396278 -0.40477890888974133 0.1899910809557923 -0.5028357944196018 -0.10066610019786881 -0.960691319423143 -0.7545674051883471 -0.16181728846312038 -0.18531178096805334 -0.8032831192384862 -0.9100584513242944 0.07316490220110472 -0.2989926077419882 -0.3725178993955234 0.5838344208350845 0.32264014310355793 -0.16733705874560578 -0.8298685477541594 0.4389779735550434 0.9417310222391924 -0.5778945090939496 0.3269689141915675 0.5088726543411868 -0.28309819610439213 -0.0957901655608544 0.1345940345641985 -0.5523618027289852 0.7352842165911959 -0.9810019588770675 0.9029624349504708 -0.5813253986978195 -0.16272230889510775 0.042396293074869584 0.7381065193094769 -0.8478703022389174 -0.8694510678882712 0.2884029359216913 0.24725631194112818 -0.14380157140240057 0.837252280806962 -0.4107569209129136 -0.6088905364321526 -0.8292580937707261 0.8576252202927195 -0.15068748870668158 0.1969579547903313 0.28277957921340313 0.2674487591581878 -0.08113822606552668 -0.9189765848204747 0.22826627112910702 -0.4435228544367804 0.07625757410086176 0.6415396060750445 0.32975613746471644 0.751381791397157 0.4114525944405276 -0.39527159191494876 -0.4118466486501162 0.2752016428861932 +20 40 0.19182175558284364 -0.24906255441324054 0.10429130909473017 0.05365543608258405 -0.6485728243890707 0.2225674832481519 -0.7542066941126047 -0.6473849031286025 -0.8673948438501087 -0.07945434827146958 0.772589481047177 -0.07749723750935833 0.3817510484219868 -0.6584982402593014 0.5219944870643143 -0.9472867306309853 0.005547188612470277 0.5170125687242395 0.5215324075703394 0.4565931835194852 -0.18159661890463452 0.19213520673065032 0.1950281932672202 0.28761741447571776 -0.6949240187321626 -0.4296794153422434 0.8313791849272454 -0.42771082464881105 0.7671646448712668 0.33643755511805695 0.21779199869470478 -0.07313530409717894 -0.058932618615556986 0.06031681567741898 0.5773709098789326 -0.586496785373005 0.17374808391894137 -0.8178790529886288 -0.820253215732853 -0.18489198630421821 -0.12965977783448834 0.806479949536242 -0.21295138598707708 0.6417265618066508 0.4259619358899327 0.16984792846434327 -0.7584886384202538 0.21421077930272925 0.5834970583183303 -0.1323995381268137 -0.5629467807086006 0.38284318867768374 -0.05519948365430993 0.8811399623760157 -0.16772598715627907 0.549629580859557 -0.3921751863513423 -0.451141808660934 0.8822896544008221 0.7521157884306728 0.12850934770782962 -0.8920306325581495 -0.4544691235411542 0.9406104067673868 -0.29508539275853574 -0.8047203102083182 0.7690417918087684 0.8776832966215087 0.3407218684530602 -0.23634655300304241 0.9007698814455194 0.9997102554276249 -0.6136917411175267 -0.018477243721534364 -0.06127036499182292 -0.2106672968868546 -0.6421366553045207 0.4480740866313728 0.49120301420338697 -0.697435641121807 0.6180463622295254 -0.6077209547830393 -0.2443954351851072 -0.8742683779709652 -0.0626802282850083 0.9266645384201044 -0.11645607660635293 -0.5347634705886986 0.9815839185831827 0.16040660621781067 -0.02536396378656236 -0.27060158193143513 0.5120939500119912 0.17733703614663532 -0.34137124606623215 -0.836310191669426 +21 1 -0.49805534292287246 -0.7078724866966548 0.822768652407821 0.6167445176353723 0.21627640355141042 -0.6222562995394709 -0.842263075375631 -0.4475312293336491 0.05958374351483342 0.850307859260742 0.053609081577116635 0.9985553776389928 -0.8593215801514216 -0.8993572967653023 0.46636437223141014 0.7346808755356316 0.6126403668770868 0.8163730718436739 0.4584820519317683 -0.7008856164627173 0.9934836871864294 -0.7989401549595665 -0.10538024375030242 -0.9377061521214465 -0.00976036778976086 0.2402849135689109 0.46342854345695006 0.3999110749126866 -0.46773337013709515 -0.13289337685025027 0.8798570404844841 0.4031677789423007 -0.39257469989584526 -0.9158403395877805 -0.8861480965638333 0.9628314127756268 0.41989584537958113 0.4730338657728783 -0.156846003481244 0.6556527105517649 -0.9368703785946946 0.306139632766085 -0.5128950117144546 0.1284991696921134 -0.007469897224957611 0.5547812982720912 -0.5664780403739769 -0.6764328246364337 -0.3787596315346826 -0.08432572090923851 -0.8445113026215638 -0.8780479857745183 -0.8999006391889788 0.40631221434942244 -0.3486296034757872 0.34285252115292963 0.26941399334877936 -0.5888926746746732 -0.7253500464934968 0.15544389012863524 -0.4942298957129252 -0.07813939672953185 0.5918092276205742 0.20865251619708913 -0.3254745648885229 -0.11162839286739268 -0.7228992686060551 0.15850527257492697 0.5527453149644246 -0.6387838989754657 0.26227598546292574 0.7074139240233706 0.507100955941034 0.8636595376450202 0.22977036631823156 -0.612402085771776 0.40358999687920405 -0.6094693619445541 0.5297417990156479 0.2901295477667707 0.5245780687965289 0.2676900319447828 -0.06345696603009854 -0.08895950231442895 0.3016878421639777 -0.24728980847001925 0.7818651814169313 0.3442700935046765 0.11561227247979255 0.023141849269639803 0.3292586045891692 0.810450377880233 0.8518424275623373 -0.25886222342161735 -0.20463288014533831 -0.7904852598496752 +21 2 0.4958384305088668 0.32756031270949704 0.9878555817601014 -0.6714321370073832 -0.20550344152779232 -0.9254391986976251 -0.25267459860223007 0.6432049832872999 0.6244547569979422 0.024154484232340456 -0.1287235660224968 -0.4037657033726223 -0.6700963533878213 -0.31211231713219645 0.06762691877275073 -0.9309088722195986 0.271047558718295 0.7020376138590871 -0.7314879865338386 0.968885541263119 -0.3945964704863525 -0.590884933365118 0.987907914250485 -0.6764824803502545 -0.38768224280434693 -0.03280054537377941 0.9803990066082162 0.24805332697501936 -0.18719525383843227 -0.04219950906147374 0.3623349741277755 0.40579439235772585 -0.7909636495139614 -0.6437891484077352 0.3756985067582388 -0.7160033593060009 -0.11623398418069741 -0.23320909480530627 0.49338166492590085 0.7407592943400858 -0.40769850066374236 -0.3385877489096214 0.21055239306000084 -0.36299419841533687 -0.8005395915414706 -0.5250527248380372 -0.9127299857503228 0.878852846215896 0.7108140418536595 -0.8613672170262585 0.4275429175135963 -0.8740927849159408 -0.0868239552714749 0.45548497103552066 -0.17226684143220128 0.5474946423851719 -0.949687824375977 -0.8995110120757124 0.3644728930356851 -0.7949789666008489 0.3618336620081799 -0.479825136730176 0.9768367686047548 0.461837260856208 0.5176598520043507 -0.49261383710176854 0.2335596227010377 -0.08176106917404491 -0.6745590931465597 0.005937682460301241 -0.9365860118401228 0.8871462999256654 0.6836915898993015 0.49309058491742497 0.3784295070920016 -0.2904671962458023 -0.2758145321979337 -0.14862488088977743 -0.4048407996072485 0.4824477752976588 0.9036048248268751 -0.024519389186292484 -0.7816540851385845 0.02663471148255092 0.7616440823214468 0.06940273059955815 -0.9848919831899297 0.26821345838584265 -0.5279677194902466 -0.9761354857969402 -0.7503088306282022 0.2508690936444409 0.2037148310865795 -0.7475392489140189 0.41611287625079085 0.9277690061048964 +21 21 2.058289383493222 3.9939319295378373 3.46979918927254 3.419051583754894 2.481252258088198 4.502733245375307 3.469605708068051 3.0357126654698012 1.8990722587175826 2.2253894205404636 2.2497935241743305 2.1185200508021413 4.555061099431676 3.731668322246831 2.3488909807853258 3.6084440559856734 3.6003214315749927 4.14590205461365 3.184870972810676 3.790084151931938 2.709032835691485 2.7091004157469025 3.357116427438701 3.8420782654476273 2.289295782436693 2.5148089746386324 3.4850146108195674 2.2217064241737616 3.4451904874592483 3.1229890365496313 4.086764299214783 1.902803591073036 3.326237577985587 4.515109983116946 3.823657925679515 4.108832346019619 1.866439575362305 2.5591495393185753 1.9957432352422209 3.2112203006927666 3.4953757377065253 3.151301317365265 4.222256090892017 1.9838076806732248 3.2654783849968285 3.199176691138753 3.1958356701590067 2.813746783071613 2.9548389635315835 3.4160625125431245 4.040881755860588 4.356786535781394 3.4977879037859934 2.9309403486841434 1.965558963044026 2.66804244595697 2.4920032955744444 3.3521943475539784 4.662085134248201 3.6683794990101424 3.696721069049281 2.1143172152172003 3.418480391582447 3.8260397803246002 3.2979965465841596 1.9302376442312568 2.5452228966227364 2.2672240737111125 3.2690981144954923 2.3021540197918986 3.095638875625494 3.9013944845618482 2.756463074829461 4.1957550708587386 2.3509215518193978 2.646174617505258 3.160488978649891 2.688390734367376 2.4613723622614043 2.782198109984602 3.1115409199734447 3.075541406593599 3.3183374818056843 2.4504727690310446 3.6584575518384286 3.6405712755474307 4.241354072248473 2.074170543684053 1.948882317435236 2.003144379475934 3.018737639813435 3.7597631272553915 2.5050391530000318 3.253773238765768 2.820511254494261 4.661211525705283 +21 22 0.6419994413021228 -0.9344151053248653 -0.9306229349112871 0.9199173670062779 0.09106242377799134 0.8001932878209959 0.7365796876974988 -0.09979245182124052 0.06088174273359259 -0.1830334135210765 0.4518899253003408 0.5274821189856638 -0.68032926969897 0.3821992733251749 0.39668739867203917 -0.8842125685764599 -0.93265725001925 0.7171782541561049 0.43525789970245987 0.5154350307499378 0.18737266926852714 0.15448106081146173 0.5138706267820052 0.3546977387261929 0.8237545317406036 -0.25976454406561045 -0.5000626829414692 0.3630310551790532 -0.9360591418050583 0.7817284488642049 0.6544187788878342 0.37440550355022206 -0.6289125572690437 -0.2554608668071754 0.6713606729378576 -0.23133659259363748 -0.4992675384792047 0.7429247775342682 0.078108218266979 -0.49808654055039536 0.6027157049984366 0.8530233958671223 -0.8793627998134117 0.02847726162187647 0.21754693591496488 0.6121813873762079 0.3141656519011542 0.6804267636426853 0.8217797743987527 0.4310417495627621 0.7447089202803245 0.4635892307637375 0.6306605759580566 0.3413151112421735 0.4338565632936826 0.8755239314569805 0.3618505904638962 -0.008204372124837489 -0.9381692254742666 -0.7223297180851835 0.7938048866088141 -0.3541731573252018 0.8427923318519663 -0.9754419481560663 -0.9751216398012643 -0.5959283946517129 0.27164000910364616 -0.08967130206145058 0.06974063150381271 0.10493163311426135 -0.0046086838108798656 0.9031306104123367 0.018820308313065137 -0.7380387125672538 0.024119691238074115 -0.29760758814085997 0.7590289666289343 -0.8839225072645953 0.9015921778813027 0.7097796071705691 -0.9436004694208104 0.3379541311851606 0.5417476906086454 -0.8690393668277969 0.9224876255845249 0.8005740578034659 0.9263308211112544 -0.21364948816862506 -0.513592763808465 0.03487802997135625 -0.5939509529125044 0.9373374320323946 -0.4913257112930536 -0.096236544180061 0.9656562517907146 -0.4509780638439802 +21 41 -0.05492318941028129 0.9165185207085145 0.10788229954769202 0.30669521821765944 -0.9015914571707784 0.4694569697240343 0.2176098297415081 -0.3618869572329746 0.6518554670927539 -0.6288687310020031 0.6455826115661707 -0.05390511450501467 -0.9575190881446438 -0.8821389377084614 -0.16060569976510775 0.4087302952017491 0.24095809249117783 0.6787320533304755 0.36015022492920523 0.6357415292032567 -0.4138524904449987 0.19961342696566953 -0.9473461971449941 0.8837205647996083 -0.5320633437812359 -0.47245753913400734 -0.21588807373692664 0.045528901057950044 0.2549850517862955 0.7103956963637186 0.7618221417522502 -0.026397848587971007 -0.4427887671779589 -0.7112422921364829 -0.4012565981629159 0.9937433182990763 0.27964915148905 -0.04440343775561839 -0.4744623217358723 -0.32753117482938277 -0.5863922943408764 -0.7166876904164825 0.9537852100132542 -0.8688588800246748 0.8786628350486934 -0.35624737055239053 -0.5293047409242526 0.11384171683140254 0.6472963119601949 0.5578909981583322 0.7007832059207297 0.6343047918873734 -0.8518124015385873 0.12147908526619844 -0.4243500740741324 0.6962764882754549 0.20221073707711734 -0.6318402516733967 0.789472098965684 -0.6533979857344858 0.7885551979326904 0.9193222832610974 -0.15808808409848885 -0.6559894333230827 0.2009764768055866 0.2947195840665766 0.6785865354594656 0.7946881960754393 0.5622811965034946 0.9945417018046219 0.7277493904821166 -0.21694551165310227 -0.6800163898530658 -0.7645529539678788 0.615464985607612 0.43979026174984326 -0.852471411217872 -0.6484324541877091 0.0728031925499879 -0.891143362648865 -0.013543130738908449 0.6936329965016408 0.7260168971731353 -0.15938056507018228 0.03966175131731409 0.8486038694404663 -0.25160367180441856 0.20976224787518039 -0.34867624751728177 0.2781847636421353 0.19591718127430968 -0.026107916004540765 0.5946121833226712 0.7802811282823601 0.10814660989235914 0.9705181306134734 +21 42 0.32114334159780555 0.22337219187720736 -0.6062227823796924 -0.8388868501911801 -0.7138205285628403 -0.7337739495694442 0.6180190563297021 -0.9494303574840277 0.28268734584036537 0.07338869634777478 0.5520012591515027 0.07269432747113758 0.5021854527395939 -0.2649671470944053 -0.9722631424881465 0.45526504619291663 0.771260685530136 -0.32571070784877443 0.9412357934459847 0.19836080699181258 0.2901227272065974 0.3205411844227366 -0.6179557677007701 -0.4040821579735623 0.03675533497246031 -0.9263370643974307 0.39158569542967614 -0.3460632741849401 -0.8294835303333272 0.674756843840095 -0.737144064620169 0.1173708669639062 0.7003519298370526 -0.9917940896738844 -0.595218165885929 0.3367230519087905 -0.04099963337662027 0.5613320062489378 0.6292393023118292 0.23009566624495936 0.4283588443469013 0.31434201707187426 0.7078335186290619 0.20132192791935188 -0.7936956144989953 -0.2771285189920796 0.3116739766728016 0.07283801542623025 -0.25382650108601057 -0.8609336122711309 0.8396991146041553 0.9954430861572068 0.05499711514987893 0.9871932573192477 0.23097579618473718 -0.015457952387711194 -0.5103034210815804 -0.6615639599006948 -0.943346903806737 -0.5110116803174742 0.36760453485527944 0.05945664604588097 0.49062505880117935 -0.8906089060609956 -0.959476500572576 -0.107851386548248 0.636500582206494 0.3357064673446073 0.7460708151531521 0.2572571588622141 0.7444447747968976 0.44528436701086016 0.6418455033686608 -0.6867670276638698 -0.16819323894190963 -0.979329593996763 -0.7834608094128954 -0.30603582552913533 -0.393304160757038 0.03026356435754196 0.6148760245955593 -0.7548639450902985 0.9542839960204232 0.3310683555129097 0.8452955851071244 0.8383415513690833 0.473836944808536 0.1987355662789283 0.41913895575386784 0.38988525773419513 0.29136200297402515 0.741525620135153 0.23562446301477724 0.600322318747398 0.6397549010391963 0.5252863236906962 +22 1 -0.7563253067631999 0.7854125487637205 0.47406651122826027 -0.28109243028981146 -0.8156009149692054 -0.9183355368481909 -0.3741918477143604 0.29154769758599564 0.6726773892052631 0.39809904783455496 0.9861015017299399 -0.23798341435496084 0.8949537939600885 -0.36374612942321916 -0.9257512238922134 -0.7663356939782688 0.5182020977005581 0.7624569459660706 -0.31119992389372797 -0.7502125970942879 -0.738644405355241 -0.06886825154878107 0.23538539712010897 -0.758271542025184 0.8533543905444569 -0.09261834787994316 0.8982995278142445 0.3868564385318931 -0.8569707212921438 -0.9659972447440988 -0.6439979807269156 -0.762578046242059 -0.017678976974528915 0.9638287219227357 -0.6874356243341293 0.2205158638572453 0.22920804873988176 0.7417054089635478 -0.5624450686203617 0.3370064812267781 -0.3416524547319948 0.7481072435841825 0.4753299563405933 0.46174693114503174 0.2123018555955396 -0.8075252419338248 -0.5961995535430809 -0.021388233450040817 0.6413314162299824 -0.9837669825481952 0.02811427222433549 -0.9008035424115082 0.025031667656866485 -0.8758931195587962 -0.565690217379889 0.3995490390854344 -0.14022784536501276 0.12448349479614995 0.7813809237038059 0.33462807063897704 0.13833936617449671 0.7488544360170934 0.6326897911099776 0.5316031080145975 -0.5897102781271428 -0.5050581090652086 0.7204849484784295 0.16316543967587815 -0.5067359635430486 -0.46697410874629197 -0.5553744564538443 0.38696080579981085 -0.7655444987106463 -0.8307527389969556 0.31243737229152035 -0.7857792759754176 0.34388705598428415 -0.7230359185817694 -0.14022122450210306 -0.8689117712351224 -0.7726303668539707 -0.4549320858496828 -0.34321566749007815 -0.4949152776692487 -0.01591277492192056 -0.6420087894772204 -0.6632003202790071 0.7511049197582931 -0.1791848510181786 0.7851634647349515 0.4406148334233779 0.6627594044196559 0.8435317623151299 0.5660565064287839 -0.543132192303047 -0.8406464925512473 +22 2 -0.22081677036737646 0.4604460160406807 -0.9772656688371726 -0.8058407437871837 0.6891854520292251 -0.49531335810956345 0.5109404587885467 0.9065009245754687 0.93980736396084 0.21483882091502893 -0.03262697149820548 -0.07183621772886317 -0.4043737063222985 0.5946533263495342 -0.8403307658395975 0.885014880411185 0.6946195570797877 0.5875277494015501 0.2094448179273114 -0.530727371979886 -0.03858521254804592 0.6999258839524798 0.5433709202491397 0.23131006993207048 -0.7508760398797565 -0.16821507426479898 -0.6167248188691776 -0.8889955513177314 -0.5356563079635808 0.11257688121396447 -0.13936835100336586 0.22391785448230683 -0.9406369723985355 0.06128043605687483 -0.2297382636841767 -0.18626434312490936 -0.9022546079949212 -0.830555966065651 -0.6730627275104974 0.5460523266208812 0.8206216796193067 0.6277057215378801 0.1970821104067837 0.5356814672902193 0.722633737729192 0.082257877113457 -0.3492437903758061 0.5732042748765049 -0.9321753204543122 -0.45520034021975175 -0.953335129929793 0.6029743532811696 0.07267340777525422 -0.148013578650658 -0.94036963310532 -0.552337404450826 -0.9802392290723394 0.12259391160851663 -0.09944777448000242 -0.6307064259950943 -0.7136351190771169 0.4064182143588482 -0.1095543262701617 -0.29656924296361153 -0.7957787346469665 0.36429943353919403 -0.5019054532962086 -0.805498237214709 -0.2138128620919466 -0.311588557407932 0.23276240575163465 0.0878035588602133 -0.7397129416981758 0.09662896585811809 -0.10222713608669753 0.23564799294439576 -0.802614745042473 -0.11191533056346747 0.2460667651677031 0.4323548122106773 0.40221743580514313 -0.381798869165624 0.46184079726862537 0.2650887597185574 -0.8937540204558752 -0.8756901985857204 -0.44243960617388267 -0.5245876823645703 0.9075902606415251 -0.766334035100545 -0.024819066666995848 -0.6059251861665547 0.06823221387596545 0.41375124270196517 0.8814102835861852 -0.025256633627124936 +22 3 -0.4026236065955391 -0.8944549834664011 0.2226011130894323 -0.12596453271313757 -0.9502552155501267 0.1531917617774501 -0.16464980434698706 -0.926103935704192 0.552278807272478 0.4318330211774164 -0.25738923543747805 -0.936497955791515 0.5495467116359589 -0.05093199037241436 0.4974661373432747 0.9476906771721492 -0.29571989436196255 0.32178730262430566 -0.960197972715223 -0.6097916094369329 0.4117138088060297 0.21619043161232177 0.7920957250042759 -0.5063229267750256 0.6222803087820887 -0.6335286552803938 -0.20258149241701062 -0.4818679853300565 -0.43441627758713985 0.6487997596621893 -0.2976630850490074 0.2974277345924192 0.8478322771515892 0.18666501395945478 0.9046486532430036 0.6272730453902735 0.46573929187866736 0.6269515136401769 0.639513566578354 0.032228681250968894 0.5099087398368545 0.5882041843166668 0.3118257005303189 0.85225899663926 -0.08093926522588735 -0.48214193671657424 0.42824401112148647 -0.04338757384223291 -0.85972378149736 0.9502195652125676 0.1187232197463961 0.6402190876514626 0.3324467375759299 0.15426246493537787 0.9302119572461913 -0.3002723272541954 0.6526952547454696 0.22276135248871154 0.02676467791328574 0.7459147575047156 0.1911137436882091 0.7749149191424944 -0.80777623250689 0.19259249726020244 -0.79438616989541 -0.4508789557109303 0.09326626242940605 -0.4073610535184595 -0.15184743046030214 -0.45589151352445634 0.8698156970025648 -0.1634261581382539 0.8605668524157108 -0.3916858809918291 -0.16496392250879444 0.43383967724105044 -0.19880084907857398 -0.9316323639200108 -0.0165895530990261 0.14407716301371454 0.8583404053854675 0.013894584487510464 0.9866745070506717 -0.8540222561043347 -0.30320745277814276 -0.7877747222250502 -0.8307273367089751 0.9549825945668122 -0.5190925720535291 -0.7114437840045604 -0.5499711954099165 -0.16745863240122394 0.7391635968749901 0.432190708035161 0.4103843827132341 -0.08137310497693195 +22 21 0.6419994413021228 -0.9344151053248653 -0.9306229349112871 0.9199173670062779 0.09106242377799134 0.8001932878209959 0.7365796876974988 -0.09979245182124052 0.06088174273359259 -0.1830334135210765 0.4518899253003408 0.5274821189856638 -0.68032926969897 0.3821992733251749 0.39668739867203917 -0.8842125685764599 -0.93265725001925 0.7171782541561049 0.43525789970245987 0.5154350307499378 0.18737266926852714 0.15448106081146173 0.5138706267820052 0.3546977387261929 0.8237545317406036 -0.25976454406561045 -0.5000626829414692 0.3630310551790532 -0.9360591418050583 0.7817284488642049 0.6544187788878342 0.37440550355022206 -0.6289125572690437 -0.2554608668071754 0.6713606729378576 -0.23133659259363748 -0.4992675384792047 0.7429247775342682 0.078108218266979 -0.49808654055039536 0.6027157049984366 0.8530233958671223 -0.8793627998134117 0.02847726162187647 0.21754693591496488 0.6121813873762079 0.3141656519011542 0.6804267636426853 0.8217797743987527 0.4310417495627621 0.7447089202803245 0.4635892307637375 0.6306605759580566 0.3413151112421735 0.4338565632936826 0.8755239314569805 0.3618505904638962 -0.008204372124837489 -0.9381692254742666 -0.7223297180851835 0.7938048866088141 -0.3541731573252018 0.8427923318519663 -0.9754419481560663 -0.9751216398012643 -0.5959283946517129 0.27164000910364616 -0.08967130206145058 0.06974063150381271 0.10493163311426135 -0.0046086838108798656 0.9031306104123367 0.018820308313065137 -0.7380387125672538 0.024119691238074115 -0.29760758814085997 0.7590289666289343 -0.8839225072645953 0.9015921778813027 0.7097796071705691 -0.9436004694208104 0.3379541311851606 0.5417476906086454 -0.8690393668277969 0.9224876255845249 0.8005740578034659 0.9263308211112544 -0.21364948816862506 -0.513592763808465 0.03487802997135625 -0.5939509529125044 0.9373374320323946 -0.4913257112930536 -0.096236544180061 0.9656562517907146 -0.4509780638439802 +22 22 4.320445716985738 5.464579239118327 5.008089436170573 5.028772965455701 5.284935230955192 4.490232641921013 4.490108606143447 4.693217119973274 4.9866469516735865 3.517677994530911 5.112673373075342 4.2105927433639145 4.442187572575701 4.516630691503636 4.158775305885934 5.563023362865177 4.314042589682462 4.783771570174137 4.9236106448882015 5.876005523128089 2.5632910822871544 3.5537854784946425 4.388115309451072 4.553748808686037 5.635679188568078 4.667044746442992 5.016954443529671 5.650095225473674 4.8427879503328155 4.434916061182628 5.311337040742357 3.348671539145447 4.852966586528818 4.69776526089893 5.076924336563776 4.113281718799802 5.140038457840676 5.4688997665918055 4.120659842625528 3.3305802753648948 4.691529238752992 3.8833271608943054 4.2571675501879644 3.8386551008446634 4.469112454258732 3.9265472766480363 3.894424190078497 3.5825404519997983 4.7467808298071965 4.9328920220382155 4.503088466416706 5.5579279299663575 5.068116010790496 4.104738713416211 6.366222420155228 4.555027405507328 5.194377176957136 2.441408870222025 3.0816928610623093 5.739946678634553 5.302410946264239 4.343219202342302 5.502621386925882 4.128974008220467 5.880989869889889 3.170936337330611 4.649877769858129 3.3595026758511044 3.958033376568927 3.8397659829159485 5.008191766520195 3.9402678811682748 4.578238401754629 4.532593516748638 2.769422816278842 4.002639739521641 4.335023579224783 5.1157717024319975 3.60040302593858 4.5939860107298 6.466087758968622 3.5903328541037896 4.933700478668399 4.965105519950389 4.492849081684067 5.154457466291946 4.1931035560938135 4.9881151944383415 4.724821344977242 4.062157537862168 4.135570249721424 5.113591448340853 5.49342160838969 4.213935309537022 5.6433384761295216 4.340534426661025 +22 23 0.17827019897281615 0.4514465742735927 -0.3830192473033789 -0.9383101787036532 0.20118988798616844 -0.40315490602023796 -0.4792293787641544 -0.5993731575659398 -0.9024820876992341 -0.0031094980795269844 -0.6544300239179024 0.3386893894690657 0.2312107198424962 0.7330559868187321 -0.06327382552241323 -0.4529884004794891 -0.6321658520846656 0.5304859996336915 0.6288850592789503 -0.45246574296442543 0.018199419148933194 -0.4924517421011212 0.9696327015876312 0.05740435857395032 0.8112971128410371 0.9467023566456374 -0.16789615522790347 0.92796250153081 -0.31950184725093234 0.16462905612794976 -0.665451305339219 0.9402374563628568 0.09549691359690815 0.16917629093595798 0.9341824305994555 -0.7389078502403827 0.9923487484630387 0.7838939101778049 0.5883592402900073 0.32340834717581335 -0.6947765189725135 0.458153804732667 -0.865088588077676 0.27005136298223964 0.33498954819374394 -0.9415662815900125 0.021324734197957662 -0.575271533988754 -0.16755241797832054 0.1571728061669344 -0.5142153342689091 0.7797764711947055 0.7959397680961013 0.8669800907493297 -0.4692687569889271 -0.4912519853377262 -0.4647737077023055 0.045332158164073766 -0.26398328373738633 0.7889721184267295 0.7650624839653777 -0.03348659082430716 -0.6897064406738291 -0.9747504506164608 0.8755421136432773 0.31995914773348 -0.13166440714895966 -0.08555694472744335 -0.3392374307689785 0.32978567679738235 -0.3457162793064943 0.3354885976046398 0.5432532499195215 0.43316410496567204 -0.08764106110438896 -0.3912151202115921 0.7554478990247284 0.058547253474996674 0.7241484705476533 0.8322599446622669 0.8957828367257201 0.4058511650009491 0.6279236704728037 0.7527631487821707 -0.2869721409674413 -0.4436804450268066 0.40768667116232504 -0.05052884433881788 0.0030920302365367025 0.016468443937568633 0.16557583144799048 0.752787310267367 0.18426306750194654 0.6889356460812284 0.18707823747164998 0.19429823727791584 +22 41 -0.05302263453976974 -0.22565562660295102 -0.643376929716289 -0.7817640330469287 -0.326343135897317 0.5843945196062863 0.5913790091816546 -0.43334215225927775 0.58320325130263 0.6204301522726945 0.9887992327551345 -0.5461985373324654 0.5960329283708325 -0.40224942708909595 -0.3024964865521236 0.7793222450198374 -0.01290386399806831 0.10455457226390052 0.012410063510190472 0.8195244863171358 0.17253476635845355 0.16623471390383893 0.10013291705265237 0.29359047951322337 0.49567993187281845 0.4628245161826343 -0.47849599392570097 0.896228772545419 -0.6364600059666965 0.085318761147402 0.8861522338119661 0.00457358681961284 0.9340408322014391 -0.9439497898948148 -0.8599081380837481 -0.6215128106726344 0.27224685037867546 -0.1200314757077956 0.207535670616948 0.1556129501206207 -0.03522706194717884 -0.27263784335247676 0.5119094228932979 0.24326928424668548 0.8973861794113729 0.3489240844303345 0.8678682014500456 -0.36633675636986385 -0.18551101534399184 -0.7051961191308698 -0.35589115735594845 0.8962983950328343 -0.5904415875014366 -0.1556949234118472 0.915742331713115 -0.26717380254151357 -0.8136640383811287 0.3547850425000776 0.4511247149480817 -0.8080950474355053 0.4993723355332278 -0.6542635717664802 -0.5431827766233508 -0.3634239604858678 0.9757134350553289 0.1071603591525705 -0.6328043241827468 -0.11319394134315286 0.24763760262693912 0.8569286250066295 0.9649874112532515 0.12030246418832413 -0.12149322920875494 0.33606449173058905 0.6149399417155434 -0.08641413142191534 0.2628119144227561 0.9117875263815545 -0.015229770620051708 0.8322094421502546 -0.3721982511051982 0.760551510839236 -0.7889787231072392 -0.21194529331660772 -0.6637589862633617 0.7007285654238862 0.20592134514082572 0.5186176568899581 0.5971825156306421 0.6184743246572042 -0.8545432354902733 -0.9576386135914183 0.8295500009045742 0.6558860319292015 -0.41839553853926903 0.5116023541051637 +22 42 -0.9466366299608011 -0.7658599237362222 0.5697106351443351 -0.16042576257113894 0.7928328471555002 0.221489531186851 -0.22807508905932106 -0.3160471978355659 0.1039359752625093 0.5436873774028665 0.8719571597344524 -0.5166585551737386 0.17725726133019482 0.7642704058968035 0.16033067104439924 0.47414951917313686 -0.6032836327453204 -0.14090827025124897 0.9387241972314806 -0.9221951207974237 -0.5601374801150425 -0.5205349239145651 -0.06539580194959616 -0.6662693251219418 0.3760842650465035 -0.3816626560435217 0.8506162475722583 0.290343182713358 0.7584412086086829 -0.383619605195028 0.8908468155087579 0.44713727785176594 -0.8508760703474783 -0.8065261675699891 0.32411967967255495 -0.6699771525239169 0.9068862506889714 0.8162684714380999 -0.6614979937557981 -0.49668790175160815 -0.8382677936735152 0.07494983970028457 0.7460203371747236 0.44702961476854863 0.24755677154804268 -0.27734351279985003 -0.22134592625541583 0.23912782843736657 -0.3097965955087467 -0.7263525530072779 -0.881903272475941 0.6110872995960084 0.9002301732298057 -0.10133273972367762 0.9715292535990001 -0.8388602391879514 0.6650073169316717 -0.4876712725800716 -0.03754801655345075 0.48627052979357765 -0.7355668465381018 -0.8136363946564935 0.5568023267923468 0.21957082519893412 -0.19698760591491538 -0.7793917756937652 0.9930095528336538 0.8366221180025772 0.8851610948282862 0.5312668306866557 0.7292448754671288 -0.3432935817812237 0.6600453113409097 0.3802545718628374 0.8763563485861143 -0.742686324547029 -0.11981812734678599 -0.42394658246940464 -0.024256942292233408 0.21919254509435615 -0.42834112110584055 -0.18531018072315875 -0.26111234870494315 -0.894878014644443 -0.8967652493575304 0.017669599532150082 -0.10439277933683933 0.9481289407544014 0.3613618896935753 -0.16656666868804004 -0.13637851925366706 0.11033206663789019 -0.9652268287503356 -0.3575527370988918 -0.6109055864431707 -0.5208148383295539 +22 43 -0.38142234548810006 0.2659218986388636 0.4706261019865723 0.4660897498714527 0.9124489010606951 0.5917840730008699 0.6015567963450206 0.4966148564874311 -0.993885709264579 0.3095201512211625 0.3397128792303634 0.7552875823125427 0.142306876070597 -0.6378476662058437 -0.14088669012590427 -0.3062419656607387 0.3997988522451319 -0.6863379260040199 -0.6891469484663095 0.6496506514204063 0.24156818202395236 0.6817012425864435 0.38613858502627707 -0.9186751284107872 0.23443791811184123 0.7845951336166173 0.6698389218626817 0.588390608089242 0.14619293923823573 -0.4080047050597104 -0.6343279495658025 0.17876836463462786 -0.4681735497959367 -0.5252585229583853 -0.35534320503738637 0.5449638193879711 0.3845882097766109 -0.15900683069839183 -0.379325653898247 0.5500195476138252 0.5769018959416548 0.12581753256354222 0.21511699941506213 0.09196026865807272 0.7593862651456267 0.037085680738790705 -0.9057011838960387 0.37749154698064746 -0.8037277666743272 -0.4713438531756773 0.2014504425239072 0.005878917844236886 0.9006604963383813 -0.8508144060387226 -0.5324791975485432 0.7761274800036357 -0.2711419254930174 -0.6244805543595184 0.3727281313475137 0.6689083179331896 -0.9846363078659426 0.1874239838047329 0.5696904709767354 0.33925283133761086 0.44582149790147363 0.04428155211479279 -0.8841688758569353 -0.19616500956100502 0.9960554355472664 -0.2861357844220993 0.7533488323659239 -0.8463008110475321 -0.06693405171570332 -0.700523488823992 -0.339432504390881 0.4982927441432312 0.21831851657759893 0.5796935011535973 -0.8939736582915923 -0.3615581473932101 0.8014876578894166 -0.4505574526856557 0.8911365303606162 0.5908804344524385 -0.4920901308386103 -0.4974081076843717 -0.3314030765054703 -0.5294273929863746 -0.6905105834811882 -0.8873631754836138 0.9563215521736297 0.46530231460974725 0.4193151532777324 0.9259112603676141 0.8102258175938872 -0.9927969149207978 +23 2 -0.1963668219687027 -0.26639253925340944 0.8970303247288629 -0.8737857914561893 -0.9270841754683627 -0.18979774916301762 0.7463060704572624 0.514701395219717 0.17127841745115058 -0.39931330216024374 -0.5526800252260469 -0.5705209619873666 0.5537972669677818 -0.973243262203294 0.5031684794482674 0.23631094832032717 0.28259793813017775 -0.3307026808049378 0.8073298150836588 0.565226710400365 0.851591667583649 -0.33350947863560565 0.2876867585613623 -0.6585603491461614 0.9130847651849512 -0.16384179849115754 0.174995478526756 -0.1936260566727075 -0.3495048107402048 0.9300856824923533 -0.3466134412865307 -0.6679646517377353 0.16210988889419298 0.2249831153617572 -0.27417498175816135 -0.7914077201598024 -0.9009929771946226 -0.5048521784527855 -0.4155535269276023 0.2952896073806537 -0.6247245340657699 0.9493808751523523 -0.21782111439429097 -0.160197584608188 0.8163302020883316 -0.45603498895842365 -0.9299137771861388 -0.8922749227276425 -0.7677136885102338 -0.14235002819972475 0.9637343852735547 -0.7861900565373803 0.9089507128546579 -0.8356361206242748 -0.206724705710281 0.8570630228785283 0.13233991415453317 -0.36284423540504607 0.00819246763487036 0.5966411404215408 0.23241595552375038 0.64454226195763 0.4985335581916126 0.5095502158287106 0.8367053651052103 0.7703361441817731 -0.28000607444528725 0.6106080356942365 0.33280647118776874 -0.5350417985829483 0.7355104143400932 -0.304597866076163 0.9902623432159321 0.8351118211345883 -0.6592229889999714 -0.18325606625944713 0.40725652347003294 -0.7537813223085883 0.5104029088353605 -0.24917014093953282 0.7662175054579359 0.11981408423096651 0.9520150042228759 0.06599604841664553 -0.23392213742977708 0.681978503194127 0.03622554676663636 0.021019178583386422 -0.4538016059088521 0.45312605647182824 0.06613249715958114 0.8471711597645029 -0.3634576919657002 -0.6752636433603421 0.42791391988857574 -0.23660483267265264 +23 3 -0.7035519100210263 -0.12162681531068875 0.5568853962213591 0.3374772797075689 -0.15323925949734551 0.944239889979122 0.8283077576880693 -0.6337481756011945 -0.2876822842271687 -0.8783979951935899 0.19618127337322422 -0.25877968942629526 -0.27646010697520795 0.7228794324400121 -0.9268189516352674 0.4830618787024423 0.986995356045369 0.5652738055392228 0.3128145350601548 -0.5764440712836962 0.8455817305588345 0.9649017384207559 0.9939061886516443 0.5693007775070467 -0.058993499357610446 0.9128841510786119 -0.3557741311444562 0.4568389852795631 0.48177989696912094 0.5112807762527667 -0.2915271983413714 -0.01980795142431835 0.3940458635052009 0.40330276447260327 0.1928094543451031 -0.09273727092701622 -0.6430440810581983 -0.2834249723767408 0.2824388166018952 -0.15934514500357588 0.2660266679660248 -0.7654723572673885 0.1253376492769278 -0.5361682678470259 -0.6772764401041895 0.4950137817547424 0.48463580170042486 0.14441722996702344 -0.005663847568817992 -0.2267424941011742 0.10285805763674505 0.8187549227393036 0.0120258624060956 0.6020711988307377 0.7862292827991892 -0.8987651993768162 -0.6185188953262126 0.8731245896651276 0.7747824076480503 0.664378367995766 -0.7558821194367225 0.685481010712508 0.4402884777793037 -0.41687694331809566 0.8829931098190786 0.12074539467782586 -0.7758470424825903 0.6954342116222239 -0.3396475593625434 -0.9038610537548586 -0.8840638334998012 0.7375322148449841 -0.986299176141598 -0.8550556144061268 -0.4442616418033607 -0.8987344932175121 0.33921992983502625 -0.8862588410539025 0.10312501124929008 0.914074091951447 0.012114101930547294 -0.08852133366462489 0.22856291901369352 0.9229424302492473 0.2553379877059252 -0.5990263473521962 -0.505645376683248 -0.05058645094435121 0.04943164318062476 0.8726891794484841 0.13344702909006112 -0.5944773768071487 0.23438653232131812 -0.06875135337312144 0.07347119232691934 0.787300587708591 +23 4 0.756338225982683 0.012474519920359972 0.2739640703066486 0.014122011577784033 0.8702592131917324 0.34385477441256085 0.7138343028730685 0.5684922888688417 0.5950538270459995 0.7926508168796094 -0.8986033135410991 0.9990084899222256 -0.32563524038921 0.5201118513105918 -0.6115280722262326 -0.8656493456625649 0.8188322112887687 -0.9483457287041879 0.7855196927421115 0.4597882507953528 -0.05628471346467423 0.14101973022322922 0.9800616417067833 0.3765920240322449 0.7836681779726768 -0.004940744113753226 0.821002168558614 0.46000126716789835 -0.46345079875309714 0.7150697689888594 0.9786279454123548 -0.379687992850263 0.9549940439133258 -0.330114929170471 -0.5151465339825854 -0.591946998979836 -0.9462624506094879 -0.6543373015176832 0.577160206753039 0.11632365666977362 0.44603913525247685 0.8017739695674422 -0.5860065533826764 -0.8128542640795597 0.980813281393967 -0.4609741203891209 0.1520617830074471 -0.26196189823833405 -0.059483563838266695 -0.5959524054818617 0.5316139657590473 -0.09226435719377468 0.8955845887009404 0.0918507609780701 0.4348045995820451 -0.3061504473157928 0.7887916051289521 -0.9962976713809399 -0.4659533696535274 0.4420604684066396 0.36789619698458975 -0.8249428481272854 0.9781859216492332 -0.19070753468987856 -0.5594286705480342 0.5048501584601746 -0.8677684478147412 0.45597512104558047 -0.17895271565657955 -0.06528236845040292 -0.29744112435006054 -0.525046265444651 0.19893039191366668 0.4611201158631357 -0.9008187466756978 -0.08688049225004457 0.44857652652942326 -0.30253682828699757 -0.5424496569672814 0.15122849018851547 -0.4377525070630799 0.9911357068066655 -0.37561869551254845 -0.8253582727900042 -0.2641405995404462 0.915019779202755 0.0032150354269417925 0.38026415830754123 -0.49397255412809193 0.0921338744209812 -0.9496458678366733 -0.5324899247400396 0.04469912193181358 -0.7095615578095804 0.8714325509489895 0.43257458908674185 +23 22 0.17827019897281615 0.4514465742735927 -0.3830192473033789 -0.9383101787036532 0.20118988798616844 -0.40315490602023796 -0.4792293787641544 -0.5993731575659398 -0.9024820876992341 -0.0031094980795269844 -0.6544300239179024 0.3386893894690657 0.2312107198424962 0.7330559868187321 -0.06327382552241323 -0.4529884004794891 -0.6321658520846656 0.5304859996336915 0.6288850592789503 -0.45246574296442543 0.018199419148933194 -0.4924517421011212 0.9696327015876312 0.05740435857395032 0.8112971128410371 0.9467023566456374 -0.16789615522790347 0.92796250153081 -0.31950184725093234 0.16462905612794976 -0.665451305339219 0.9402374563628568 0.09549691359690815 0.16917629093595798 0.9341824305994555 -0.7389078502403827 0.9923487484630387 0.7838939101778049 0.5883592402900073 0.32340834717581335 -0.6947765189725135 0.458153804732667 -0.865088588077676 0.27005136298223964 0.33498954819374394 -0.9415662815900125 0.021324734197957662 -0.575271533988754 -0.16755241797832054 0.1571728061669344 -0.5142153342689091 0.7797764711947055 0.7959397680961013 0.8669800907493297 -0.4692687569889271 -0.4912519853377262 -0.4647737077023055 0.045332158164073766 -0.26398328373738633 0.7889721184267295 0.7650624839653777 -0.03348659082430716 -0.6897064406738291 -0.9747504506164608 0.8755421136432773 0.31995914773348 -0.13166440714895966 -0.08555694472744335 -0.3392374307689785 0.32978567679738235 -0.3457162793064943 0.3354885976046398 0.5432532499195215 0.43316410496567204 -0.08764106110438896 -0.3912151202115921 0.7554478990247284 0.058547253474996674 0.7241484705476533 0.8322599446622669 0.8957828367257201 0.4058511650009491 0.6279236704728037 0.7527631487821707 -0.2869721409674413 -0.4436804450268066 0.40768667116232504 -0.05052884433881788 0.0030920302365367025 0.016468443937568633 0.16557583144799048 0.752787310267367 0.18426306750194654 0.6889356460812284 0.18707823747164998 0.19429823727791584 +23 23 5.397021177941684 3.002066472628733 5.075220925972592 4.0877620411861395 4.088207854590495 3.6335842431082126 5.562418804830641 3.7270075759373036 4.713781892726511 3.7189082051298232 4.213357711159218 5.795630034661516 4.066048251423867 6.194223645977113 4.717301640434753 4.957305211870727 6.230905983980264 4.1101264597626805 5.323695269124003 4.366892498374719 4.180034823401654 4.88893873846339 6.7650142272495195 3.7854971156346373 4.979558814166334 4.093689995594385 4.2718970923687865 3.7800307532188 5.104977927347396 5.767645177168926 5.404684499158446 5.035189443002591 3.2429750181720185 5.094537024294083 4.80351213638901 4.813807263997466 6.836984756002929 4.906650609094245 3.6396398063541646 3.11053468729256 3.6632281436791585 5.056382451946017 5.111301041083249 4.505214518685921 6.688385552877062 5.1675382252444795 4.4011644977136335 4.758454275112035 3.6168683955962417 3.633405481468306 4.646814711542165 5.966331775427024 4.1633129487652125 4.739425564638387 3.480608524932533 4.8736062047380395 3.7790192494157777 4.863078330695204 4.915099066170862 4.807193057935379 5.155861502680601 4.670194824561883 5.379420200202174 4.891244997674589 5.33025761074646 4.087706416277236 4.735116014444045 3.3625829572040127 3.322413896183949 5.797760105408716 5.480565784771364 3.9652988099516175 5.043276684434298 5.867256222453197 3.286041846874209 4.645132782066835 4.641535846350751 4.1507342149028865 4.2888965941694615 5.021710635584418 5.325170881986435 4.424861156855257 4.417122049886199 3.6229741952512957 3.919441777277518 5.207398867110917 4.010295623065073 2.716057408360531 3.5237094055651177 4.003912644282719 3.94727029158111 5.457062734628082 3.7519563998147714 3.971350810095017 4.518460680055144 4.692093483712062 +23 24 0.32494577804719404 -0.25299300705548555 -0.4781014724573278 -0.488711500384611 0.16362296705554447 -0.08733394441419162 0.4813546490052405 -0.7865259179160429 -0.5511726221255275 0.03615386170821777 0.2699846773652632 -0.8128555567101527 0.6768150098636916 0.6761823816625734 0.3175255730205848 0.9536365763350156 -0.9283219089086792 -0.045298355955128544 0.6901783492223528 -0.4333873291793686 0.8485273918176675 0.8026713512747456 0.9153427091908448 -0.5790180006773689 0.8804571226406357 -0.4753207062980014 0.3954913818935182 -0.014819305414613959 -0.06408681606394229 0.7998606809538529 0.4020502603194156 -0.9334991966726762 0.6438742321919573 -0.9640597871891639 -0.10635621678076657 0.5128845133132065 -0.8981890692189021 -0.4523294789714205 0.27549920307123155 -0.26188520865980625 -0.21916826551962054 -0.09927679183521909 0.46694299572623277 0.8458110159059331 -0.9986262519632076 -0.909799430265668 0.5039065473313988 0.8522448847187756 -0.2460678921483721 0.8961537320376145 -0.69166341576486 -0.7133620688205597 0.19539759022978664 -0.010976979215764349 0.24933623014733475 0.29499760004576947 -0.6621056100159428 -0.8234653899563942 0.680429467765252 0.8531162362709532 0.8621510379926562 0.4168299660904591 0.7870664498697242 0.20827267196957244 -0.38910240199093327 -0.7841355598883282 0.11693767811286149 -0.11114581167755389 -0.5050122503913788 -0.8925267403139132 -0.9891991663634727 0.8977219040058968 -0.8288272842526618 0.509229622139477 0.10525881334882259 0.9063202744804317 -0.4084624877526455 0.5383691643087585 -0.7212645551990551 0.6659325657090867 0.9448700749161489 0.6623728516584682 -0.48506474977648084 -0.014232526219815522 -0.5366092451487572 -0.7434733182510109 0.5764965575285388 0.018569406620783546 -0.32823880329851085 0.2549250485701906 -0.7567025733066886 -0.15980886004951422 -0.6908781609989845 0.1106452349524869 0.22254357087588184 0.9593102807325449 +23 42 0.7432363957346972 -0.7512085595176561 0.026619172756377374 -0.14528224209336016 0.2350729194695036 -0.06926733021191622 -0.1370715133569369 -0.05332843034223944 0.1688073200111755 -0.8483649851678858 0.035182795906833375 0.36051641322758776 -0.5036984940507943 0.22757928340703204 0.36396809542849984 0.11872358649214232 0.7246714519409343 0.021082975356325306 0.23317568442769643 0.05851556514607581 -0.305521138912191 -0.5131175155468446 0.9396519321175247 0.09948243847780769 0.46302180627604206 -0.5074095411189388 0.9146093872139069 -0.08081597792502637 0.9253050027143637 -0.7929526186340428 0.31244444171155816 0.236355763394555 0.1927788196875142 0.9933488053911468 0.8251441156110875 0.030839657708333412 0.5716184978954035 0.1782856339254344 0.4981546972962978 0.2861959526314919 -0.2642104890831136 0.777196077316668 -0.9695915940295778 -0.5907309966498373 -0.9353028767104634 0.21819984035802453 0.4082127464677465 0.5976447355299486 -0.505449380329587 0.6123775425051694 0.2812768133621515 -0.8167502500845414 -0.439975088895034 0.8067224149747192 -0.03206958629383405 0.5215058203892253 0.46946664374933755 0.5030970837648077 0.7814930140702498 -0.06941712070385075 0.8826232441371515 -0.0169686607687487 -0.8058337397454345 -0.6527669620843646 0.34986776784478124 -0.06500685347775015 -0.9848481223018002 -0.4402635692886572 -0.6921994949497676 0.8959189552703881 -0.9832207834306352 0.33166008787070456 -0.036114143809925725 -0.8661221918622732 0.036324600043852184 0.6660723409620766 0.9739117866078759 0.20812080828734314 0.6647635901213724 0.8708814694783129 -0.49856081428120524 -0.9556039771467946 -0.700853728737405 -0.33503152890865695 0.5865415829552971 -0.19300214212267508 0.894589118408609 0.9426826726525968 0.8547591276507223 0.743965560220625 0.495012547926438 0.6839448072679077 -0.6679621316932722 0.541913465759051 0.7160294210567419 0.1256308982200749 +23 43 0.8668130509742296 -0.9177457304762193 -0.7702796564075389 -0.3188731784312204 0.32027166242109284 0.5250780955775862 -0.9978486035688161 0.36271459662672 0.463588883281554 -0.2542409769174363 0.6929270159067149 0.9248010984913662 0.8142804049271326 0.7920808564702397 0.5181194064695966 -0.5037856115159756 0.49900365061422614 0.5248237291882718 0.7472934538456883 -0.9084677771931062 0.9922052855240608 -0.42343558529607406 0.7049794916756689 -0.4354984954313226 0.2239396318614899 -0.40317858521257377 0.7935138299896907 -0.6949720516486892 -0.6807957907296887 -0.837230076565628 -0.5011123526404957 -0.789456657515168 0.031471221806630645 -0.8774376271729325 0.2732410891892485 -0.841754529005194 -0.1809476942794519 0.8865245872320033 0.3197820300629619 0.4494725897842662 -0.4357368044631744 0.2350475498280966 0.9055981299859013 -0.6897464197923353 0.154354534596699 0.62841098210096 -0.8789133183497011 0.38544118275211336 -0.8471599498443692 -0.32537792216847805 -0.5695845246395985 -0.590261995864356 0.18655476739966304 -0.693625958708709 0.5967665177916757 0.363760102108857 0.052783165221871764 -0.3447849114444539 0.8487811583147791 -0.058141237149112124 0.5837043389313497 0.8793484606517243 0.1108749025972362 0.9787137549045617 0.9170074295763424 -0.8268187867743801 0.1536886576503449 -0.06420927706661939 -0.06097798749762151 -0.9653184970105362 0.6522657660007984 -0.6221856651813671 -0.6858689371658413 -0.846678882817999 0.13271340687331734 -0.33116546932242064 -0.2284066341602986 0.1406077680579172 -0.15675039843468452 -0.23449522837497971 0.7594316965813415 -0.14449354160884886 -0.5649806806101778 0.25378816039739793 -0.23191341401666787 -0.6714793611366496 0.8071792982791781 0.4090773081833845 0.5607330972926317 0.03507986607237146 0.2820010284753749 -0.1015345082387169 0.5971493686821392 0.7865584867464788 -0.9568834457461852 0.5983719459239463 +23 44 0.9538661133820578 0.13349244370163982 0.883841299964357 -0.9424840404953632 0.8142882380852448 0.2641271018670617 -0.4696854711812162 0.1702322657817925 0.7805559847832406 -0.26062270089178274 0.6293885990273338 0.6534761420254265 0.33424096985091123 0.5567999155350727 0.7406520456133234 -0.7775862787525738 0.8266791565059779 -0.2623407619908895 -0.5508904483972632 -0.5154275923908309 -0.2081495761391876 0.7912000865110775 0.0379506487846637 -0.04724195301060785 -0.5695771245484871 0.2529067134380505 0.27330470641012616 0.587363399011547 -0.9966767288682261 0.5047023228491454 0.9930287707178995 0.34841082901764064 -0.020614951448129748 -0.9130527067139413 0.8654580871234372 -0.46383394916524656 -0.844745486533304 -0.5184040520698732 -0.07107491881100447 0.5375804771534334 0.21222104090743898 0.5669138012976971 -0.6711385482377166 0.25385307736822393 0.9085817185956631 -0.3929548820063886 -0.23803969824553817 -0.5486796742013103 0.9077630673279349 -0.07214559247014041 0.04781403694532882 0.3974857289431597 0.4123446801898554 0.7330657339857456 -0.5925555954375075 -0.9251943014111799 -0.06500107051617943 -0.8026979257135722 -0.19664224994372836 0.9880637813001603 -0.47535892600604357 0.5330600229770255 0.7643144182112653 -0.001097584550220132 0.3466676848869461 0.3628660006915685 -0.5218223870666192 -0.6477429444857037 -0.3215421143853683 0.22564932640510738 0.03683051708452445 0.1471165195132722 0.7438846148600797 -0.9113735078501815 -0.6687362311499561 0.7791862372903824 0.8677805496717106 0.4528951737245426 0.5741214982596969 -0.3545341555251158 -0.1158417631667128 -0.3407870203066736 0.26530662113545267 0.35244484617834315 0.9949004477418129 -0.09999062167128403 0.517445498406889 -0.6719483721958359 -0.4122437658227953 0.8428704486552345 -0.21312216442140008 -0.7992971115826069 -0.3463487990909966 0.2329319347767893 0.6941467931759773 0.4964458516490402 +24 3 -0.5677596290644993 -0.18574755777970142 -0.7003562237817873 0.23217257238782918 0.3728881095906851 -0.6852267780023427 0.20571295531536604 -0.05589360364527063 -0.26908734445663596 0.8511674939857234 -0.8253229448607042 0.8722531947214789 -0.8947743485345823 0.22273961032430978 -0.44124063113653267 0.31228097524377363 -0.16732610628832711 -0.917036319687554 -0.06552629920055542 0.17042505754010406 0.2713036863885343 -0.6729013809249567 0.764239410801163 -0.5736512808266014 0.11177492700880487 -0.06584430763684579 -0.301168215185978 0.09080725139069701 -0.8733877672530161 -0.3868703275595806 0.013363749893527066 0.8781701875306889 0.8889539012237622 -0.42648496549397974 0.6064698328208269 -0.48814472724094715 -0.06363189794420854 -0.03122488316001948 -0.3000614984804062 0.9740992425479678 0.27017980545912845 0.9784705990526548 -0.9950281349088947 0.19586463576528956 -0.4050903466548992 -0.8639552605795404 0.2035798573815948 -0.42686479069279937 0.21171470756365007 0.6207416394897074 -0.22517294024716739 0.9766011460592585 -0.49958112764495577 0.056451866458716804 -0.048836406776426644 -0.767727509106727 -0.41557426502871975 -0.06900959825772102 -0.09689935668984417 0.7544452384797529 0.6622973527567473 -0.19562714569629502 0.9066424690346035 0.5695436035243633 -0.1067392935837781 -0.5861962317901206 0.3270743537059464 0.13433405088124228 0.6410958463443377 0.8242373833930918 0.9243957969183021 0.3872103080629212 -0.8027400229284622 -0.3763581606280044 -0.8231041891434767 -0.7868461429874258 0.0010458991764170644 0.35960115003558135 0.47243379757943815 -0.8273173820632467 0.20471363310704116 0.01123523045134589 -0.45810828008313353 -0.8541211024712132 -0.57136718722104 -0.769018934372425 -0.4062528508206704 -0.13126064446188934 -0.9148027952216484 -0.5753674686421264 -0.616224289101929 -0.9559791235177835 0.4778833997656349 -0.5155006543880465 -0.02272764974034458 0.8421159028882694 +24 4 -0.857063418167848 -0.6148508378079667 0.2827327386629799 0.8704790729193423 -0.12511852679495594 -0.1979796807021037 -0.9198637433517669 0.43000173757199933 -0.9255056067074181 0.9587365230512532 0.18188452210363182 0.48457759049533133 -0.27177950599347533 0.26330421344364496 -0.011700292121219702 0.9512540976333532 0.028909069917438357 0.6695896529008407 -0.21927117147142927 -0.4740449540042049 0.5102136489862945 0.7942574155272384 0.7057965694072923 0.9779964188429027 0.597033145544954 -0.1444087424537568 -0.21367962705332677 0.22699633459160307 -0.9247614272390068 -0.8630263174304122 -0.4697366256109401 -0.8146005871899691 0.3853701842605146 -0.8650838252720743 -0.5311346026309229 -0.18816729407301414 -0.5971759487848105 -0.40656297433025324 0.5931911136478101 -0.48566916510121416 0.44175085634079125 0.8418778947825432 0.6614499350156995 -0.3072394762756938 -0.20721612583928417 0.6317986703866512 0.6687630314946877 0.5889070749369749 -0.5865676034126956 0.6008609412934172 0.8533607634514464 0.07186034341710079 -0.18565166785931742 -0.7383700626566976 -0.9898980519287228 -0.019065580583316644 0.6265892883938322 -0.13709603067863285 -0.7294529577870419 -0.6259057381291562 -0.5084396223321583 -0.5561600938427733 0.6200497774409224 0.2466148668845407 0.059700081624407764 -0.6326143250258931 0.8881281024024228 0.2071430609539675 -0.8254880912549094 -0.33365863654017347 -0.29803824089276754 -0.8647587872135156 -0.6894941185821268 -0.6891193580967114 0.41230640967444754 -0.9683234080375545 -0.9671610847413041 0.8396579384979785 -0.5753932806305218 0.001543525190662809 -0.6341993785168529 0.7497563793012438 0.2514134419862457 -0.5031781131414352 0.24996977567127177 -0.93878378489315 -0.020882459558046795 0.2049208896402852 -0.8269753015202745 -0.41189643430462053 -0.020769331230122257 -0.36725078987215065 0.9062789041640378 0.5067251502734855 -0.7061923260914684 0.042616180798774383 +24 5 -0.05166257422677445 -0.16494125990375785 0.34389076239668337 -0.3438307660150717 0.0889787119388532 -0.6734017590901922 -0.6725514729229409 0.6932854408492652 0.640327569597863 0.1458342022000223 -0.6701640259326758 -0.514809909699316 -0.1052937654977375 -0.4160365776274737 -0.33438412018666064 -0.8859773914272702 -0.17749329176911477 -0.2982825442000774 0.8766903763272638 0.07512547676981729 -0.047037404480915646 -0.32984621828621297 0.4758327385974903 -0.5398356585775346 0.8190045148645324 0.46630512596660245 0.17982852353277523 -0.911343748336841 -0.65933780436113 0.48102022361592556 0.3968402015489245 -0.2801607150486394 -0.6430757835540948 0.6863247812889208 0.9006570878134794 -0.7867711751410136 0.9826858689991962 0.005172204872968544 -0.8817980724437546 -0.3273988390157243 -0.04574181536824451 -0.7496666682704618 -0.8651180092344148 0.495072751172984 -0.7244994411086616 -0.9270195397578032 0.8247596245016608 0.05135102486027776 -0.3390029143336204 -0.012893874798217686 0.6142542558211321 -0.818889598024674 -0.8854180405587988 -0.4244579075000736 -0.9951124805804108 -0.11601059562732097 -0.8993880087512971 -0.18714901736437262 0.3643483245324157 0.8299662112566228 -0.5303007439773171 0.9108906681594902 -0.2603167058731908 -0.31740552252044174 0.49582172330018315 0.8421664122838284 0.3742043107459576 -0.10052891491634797 0.3889697967774717 -0.09279230893427637 -0.8559864713244556 0.6897904194821451 0.8692078049937593 -0.47567043253907637 0.787867834102411 0.05447741380151849 -0.16919818684294374 0.05511724103637072 0.5849271912516829 0.9660655316038844 -0.8048487134902274 -0.5978346659400231 -0.3651968747635419 -0.24749217726114048 0.315409235443062 -0.10642446575749442 0.7143674198026968 0.54531286273426 -0.5427411371027413 -0.5173068762290933 0.2556323337558919 0.8033512197928583 -0.8231605095191215 -0.40043673285763903 -0.7785082467274025 0.3482724793577259 +24 23 0.32494577804719404 -0.25299300705548555 -0.4781014724573278 -0.488711500384611 0.16362296705554447 -0.08733394441419162 0.4813546490052405 -0.7865259179160429 -0.5511726221255275 0.03615386170821777 0.2699846773652632 -0.8128555567101527 0.6768150098636916 0.6761823816625734 0.3175255730205848 0.9536365763350156 -0.9283219089086792 -0.045298355955128544 0.6901783492223528 -0.4333873291793686 0.8485273918176675 0.8026713512747456 0.9153427091908448 -0.5790180006773689 0.8804571226406357 -0.4753207062980014 0.3954913818935182 -0.014819305414613959 -0.06408681606394229 0.7998606809538529 0.4020502603194156 -0.9334991966726762 0.6438742321919573 -0.9640597871891639 -0.10635621678076657 0.5128845133132065 -0.8981890692189021 -0.4523294789714205 0.27549920307123155 -0.26188520865980625 -0.21916826551962054 -0.09927679183521909 0.46694299572623277 0.8458110159059331 -0.9986262519632076 -0.909799430265668 0.5039065473313988 0.8522448847187756 -0.2460678921483721 0.8961537320376145 -0.69166341576486 -0.7133620688205597 0.19539759022978664 -0.010976979215764349 0.24933623014733475 0.29499760004576947 -0.6621056100159428 -0.8234653899563942 0.680429467765252 0.8531162362709532 0.8621510379926562 0.4168299660904591 0.7870664498697242 0.20827267196957244 -0.38910240199093327 -0.7841355598883282 0.11693767811286149 -0.11114581167755389 -0.5050122503913788 -0.8925267403139132 -0.9891991663634727 0.8977219040058968 -0.8288272842526618 0.509229622139477 0.10525881334882259 0.9063202744804317 -0.4084624877526455 0.5383691643087585 -0.7212645551990551 0.6659325657090867 0.9448700749161489 0.6623728516584682 -0.48506474977648084 -0.014232526219815522 -0.5366092451487572 -0.7434733182510109 0.5764965575285388 0.018569406620783546 -0.32823880329851085 0.2549250485701906 -0.7567025733066886 -0.15980886004951422 -0.6908781609989845 0.1106452349524869 0.22254357087588184 0.9593102807325449 +24 24 4.104677269555686 3.386843977678861 5.348802113485048 5.0357670924700875 3.213650246787469 5.061307650965313 5.335389957318679 4.569133321133814 4.441633146912466 5.576345037030539 4.7366990953312005 4.4205055067585866 4.783525999259675 4.468221651791456 3.062443199627812 5.8033396701868885 2.4035775869685834 4.680467600328776 4.545795890064562 3.3699864357532467 3.059834638219275 5.498869159730952 5.190113612785634 5.4153580058465245 5.475649504848381 3.8272217201317784 4.086609337765835 3.2762798723046553 5.609742814672784 5.690930694694595 4.398218811588308 5.4593610134901125 5.651978162891405 5.911947793449194 5.449142682407746 3.2377708414503554 4.565244666373858 3.5026795465946643 3.9273001867509842 4.576869305842033 3.6137481662545214 5.203219692543803 6.752703257879447 4.25846836579818 4.595230231492117 5.535985694415491 4.621305416907573 5.757749076740793 2.8571343142935364 3.914734084816594 4.480769674620161 4.6073078876040245 3.4795104474141594 3.6178858921355874 5.836339102853252 3.697426267010579 5.373742471056162 3.433359217564008 4.613814301177266 5.345329299608206 5.346457185000078 5.633243334330489 5.778852212259287 4.520653809509781 2.8180070915661606 6.151239522180764 4.863783891713885 3.7147289989638144 3.7766653589552988 5.117499957576867 4.578658163666921 6.212378469529852 5.375164048160571 4.8904115800558765 4.332727838983081 7.108083928268457 4.668811314491027 3.9980232394553252 5.231829214968876 5.46490090930771 5.320701949627397 4.99116380735739 4.217335248728751 3.6052596711931484 3.9747800868245946 5.057046226916865 4.583860449431125 3.7198107943217322 5.428140144862075 3.359087648419086 4.02935624485357 4.485451856284115 5.932884716682343 4.317367842896108 4.806741648042276 4.288130691619397 +24 25 0.535200696864714 -0.027932885056044077 -0.9644490065826676 -0.5920708776622121 0.8160503769258964 -0.788377150685114 -0.30117205753134924 -0.8859705719908986 0.5367528205884395 -0.8565693851254166 -0.5418075445273167 -0.19658487542025216 0.48035606495207395 -0.0572881407614505 -0.34494475525543455 -0.9080966489170532 -0.8391245301891224 -0.7097469275346122 0.8928539349756395 0.2540182722651996 -0.12026281228283953 -0.5543874750470397 0.31873446520579685 -0.5240240827872336 -0.33028589663955077 0.6782996536227281 0.06731718293032785 0.5902570360298127 -0.7305719098975128 -0.9027427601013815 0.9450061256497966 0.552009269679 -0.423201155215712 -0.6822593470563605 -0.54099571742606 -0.000522451873550045 0.8535722796562089 0.9022938501904307 0.20214204178951323 0.2437016874650053 -0.10212497376412966 -0.40776616416052236 -0.8819946546292259 0.4807689829331756 0.36400488765936956 -0.4677507863385717 0.46921947107405626 0.8726317414608145 -0.1459255677046145 -0.08542295055046067 -0.8459073424793004 -0.16444479157720981 -0.31282398036763204 0.7414048591181754 0.7432523487633214 -0.7646559066046912 0.3253220870455025 0.4998640396392966 -0.5938693726989632 0.6316917316881596 0.8248920397592738 -0.7350186327980155 0.04012654063657628 0.5858149858877235 -0.17727551552388232 -0.4903946491398963 -0.6632192635865792 -0.7126082313830961 0.2303234596977446 -0.7741612055270057 0.0666043837561241 0.7242105696664722 -0.042230376977607786 0.28294644421493187 -0.742315396641426 -0.9531562153540909 -0.4721590351464726 0.05524526157512688 -0.3761416971007987 0.43772957853181516 0.27210543075990734 -0.5083388414257839 0.32791457875093055 -0.6426307407756655 0.6595782250015276 -0.7168595264830888 -0.4816964238209973 -0.6118259623363709 0.75753842961148 -0.3707639839898158 -0.4719800759934454 0.6561526405718774 0.4338339482819067 0.781307122124314 -0.1652534604718039 -0.5535364524636976 +24 43 -0.7997172177958183 -0.2599966323042213 -0.3606365840533403 -0.7818307027790372 -0.3914516369322729 -0.5193093245402061 0.8194896394461042 -0.578385693060208 -0.1400844425871417 -0.5678891271195494 0.243601310547106 0.17414006382284097 -0.3007385220276133 -0.4200023446490855 0.4376444511897979 -0.8860974784959281 0.03752141239649287 -0.0026105063982768684 0.04529336415037544 0.37787150035832595 0.4796257540713029 -0.3487208017850618 -0.9368301599136843 0.7351404269934798 0.6563802392001081 -0.42394409216199613 -0.937027830511524 0.29717318950489346 0.5232865483256839 -0.31346120447773296 0.39597548101244406 -0.4320167538520334 -0.5515979955743924 -0.7624169868112747 0.5309087771771781 0.27369706700068974 0.023342409570655143 0.2090655724510435 0.38526615665667263 -0.7879362051967675 -0.8122044801665305 0.9623325384302304 0.3825444598385592 -0.29527916314920843 -0.4709662024026424 -0.8694589532308032 0.26353707840861706 0.7919168484246268 0.11520323887874051 0.3856570034681792 -0.14245317752223996 -0.1620412555320958 -0.31159670861861066 0.54119034748912 -0.8141638530932189 0.6282631689561082 0.36479138966137703 0.27761923120031007 0.3066113228434699 -0.07161509425832668 0.45685684329519605 -0.813648173612491 -0.8751853119367281 -0.056714725668513655 0.17346586733699332 0.9533645146176832 -0.9985048482264822 -0.31091126583936135 -0.7280876661396245 0.9546145261458987 0.2716058856565102 -0.8514415172154928 0.8715747119472201 0.38562874801144353 0.26547483941506234 -0.9232224093875783 0.8354354289390373 -0.6972361573012384 -0.712019707043867 -0.9084420259731205 0.4086699971988932 -0.42245182853304075 -0.7471964353159248 -0.4862228159313178 -0.5463807265098173 0.38138823739476946 -0.06103581637330291 0.8218555881376255 -0.9425530873796586 -0.25409687810983117 0.5112521171319246 -0.6926365353621804 0.930630709783377 -0.06794896720174326 0.6802192965890668 0.02312450663370824 +24 44 -0.4347110263627536 0.518993076663659 -0.9284028672442599 -0.9080052747765066 -0.6091043147302739 0.687630727894571 0.8880149065980867 -0.5775867287878458 -0.3163462551718046 -0.8742472433052488 0.7370148537796315 -0.033115592182999753 0.443226209285871 -0.98030300774213 -0.42144330604653324 -0.01878698594371997 0.021851346998591037 -0.8206157360719699 0.5051215216513723 0.3888842261975538 -0.15105462663917657 -0.5975369423921193 0.22247992316982979 -0.6565938496719927 0.5375099249861401 -0.13513233893219967 -0.9371477770403867 -0.4698319752709481 0.8629284337744703 0.5057888708038463 0.6893097398586798 -0.7165438328231541 0.8173571275864744 0.8680052231130635 0.8125870854814599 -0.4575919353452014 0.2771181049893574 0.1508095418250357 0.2699681786713972 -0.47776265932436046 -0.5814613030659868 -0.6191708924260206 -0.8881544112528093 -0.5438747464871527 -0.5515689210284551 0.23370587222587313 -0.35850710731306346 -0.9593012638481269 0.6534246563227972 0.04071980070619263 0.3010569122880926 0.8644143390829151 0.08605992415529684 -0.42410983599637553 -0.8056434918970594 0.6051658612745607 0.7154883184873864 -0.009799567201832504 0.7260570882672515 0.21639156459946807 0.8275871481713906 -0.9640241275064614 -0.9378911162709527 -0.7437350551546962 0.15640183158775023 0.8551545334400257 0.05572483227527947 0.9547296922308806 0.31102921904853864 -0.6140179660595417 0.023069102032688527 0.9870609689889194 0.1708473392912664 -0.794875025760063 0.2657095212109235 -0.9804355902796087 0.34197060688348513 -0.7414221383003476 0.11583644566460571 0.7244345327330988 0.8587237876905625 -0.8754134649737983 -0.3500627957711362 0.7256983188590498 0.05246684501194743 -0.12673149240589665 -0.7878789619491944 0.6358571240878836 0.024195007664182144 -0.3850794084304574 0.35228067609978764 -0.29482395198656164 -0.4253904359491547 0.953565931499883 -0.9206230296787805 0.21912772119361046 +24 45 -0.046157470835269665 -0.8572934642143806 0.8691523774712469 -0.23385136983384025 0.21149786804235227 0.8908911681651699 0.26737909834573026 -0.019388605839868234 -0.7583023787588175 0.7153465029066599 0.8570953973777258 0.5136496633786936 0.6676205076493746 0.5377236846061908 0.4117827111632686 0.5542260060549791 -0.08287465826911933 0.3580350728075554 0.4776920841338772 0.5404719356715149 0.3065884668106271 0.9125293319742152 -0.6261648141091034 0.31328503950490494 -0.9962728669800618 -0.9943125616024506 0.9692834916104183 0.5259569642988478 -0.8448320981000679 -0.8605889140209533 -0.32977539798228106 0.7534968548752268 -0.8524946778582012 -0.013138767250294281 0.6610400041303046 -0.07191666176155342 -0.006302593379775567 0.3960439483904079 0.6024330524272561 -0.5327410382383926 0.5082083596761946 0.16258318710698694 0.9333998979557758 -0.6996336132894678 0.22964122357356964 0.5533887175022667 -0.41297108921218806 0.6223585468322195 0.20538877666355493 0.8503683678370875 0.511997012347361 0.6911684800490141 -0.6356669923651295 0.48183353993153366 0.9418389676926644 0.03691470374209693 0.6495025569373378 -0.8722378986619841 0.912097459967427 0.40656044198891284 0.3624387902096582 0.8769526367887919 -0.6563035117884208 -0.8530384908266186 0.4866097595834862 0.166873180370543 -0.7873347805133706 -0.4163308168101265 0.13816674485253766 -0.296015984786151 -0.48799744276930523 -0.8067541789295882 0.2811724160748581 0.908901573144046 0.5042181322590489 0.6480688175358285 -0.5484349720722699 0.05838878291384075 0.8433512669800227 -0.09566655997669016 0.22564794793446596 -0.44639765990650115 0.2775578708930724 -0.0006149948819571538 -0.29832061199799687 -0.8714218587995424 0.6632942903175787 -0.4854960479780588 0.8454045857781365 0.08963998475046342 -0.7782466853698751 -0.44426921792886853 0.652452848392675 -0.8288005007016415 -0.6963754489868714 0.6958306409300679 +25 4 0.44703468624812515 -0.26531647315662976 -0.2088332407698894 -0.19302365121680154 0.626453070084525 -0.626806068751999 0.19974857462874285 -0.7113385094201259 -0.5097998798936076 0.21125063497137542 -0.8906778236656225 -0.940458770990827 -0.47469464560008734 -0.4909222201660006 -0.36385566068176844 0.4770156450521119 0.8547715046499167 0.6570953774587824 -0.04873599265107953 -0.6074616962106649 -0.5695697244724276 0.7732713358988414 0.023868475083342888 -0.708841890146416 -0.5808502026488138 0.06297182955885816 0.5676379342482507 -0.7503945717321046 -0.0477498565802712 -0.03136978425894421 0.7414936700744788 0.6732141384273447 -0.5935748723894487 -0.19169107763034732 0.010503409285665954 -0.17679807738586573 -0.027792479619577204 -0.14779047350814767 0.5249052657447355 0.3269765433709153 -0.4742163690780743 -0.45067238236108476 0.6245045846666197 0.3190949628670632 0.3847299234832937 -0.2978639843951212 0.7814734103558443 0.762068012753323 -0.14737184451036867 -0.4496109524045735 -0.923602728305057 0.2577878397028941 0.518902459605 0.1644707456428498 0.7647765518603316 0.5218133392884825 0.2865065419107242 0.7016009904223943 -0.17762105293359753 0.5035069522074782 -0.975563582232511 0.04621142171399639 -0.18987633084347766 -0.5449285911405248 0.757948132481634 0.1618976947456321 -0.16807005995981883 0.9573966599625154 0.7306419556222403 0.4102493408127865 0.40931954818132876 -0.8833578186254853 -0.04263284606633855 0.890662780886722 0.8259306597721838 0.7938534334593796 0.6705249326221869 -0.5309819682504588 0.06438510559220689 -0.7285457305367127 0.1613558103160193 -0.7281845131166109 0.8336163915516883 0.2417385961000902 -0.557792973350441 0.23257464424412255 -0.7925281753903888 0.08646030553329886 0.8113827405076119 -0.47749078676390777 -0.3716232121363112 -0.8964699979649899 0.9860495324302248 0.9156509661734202 0.3244070012709064 0.6548017439622114 +25 5 0.40225225432478795 -0.04139801157120093 -0.30057359272558415 0.8417195241078728 -0.45551607297626995 0.04152849379206347 0.5011074313484059 0.4239063168802646 0.47873411316870995 -0.7671240125311589 -0.7200695080490183 0.7482383057489119 0.9758035938879424 0.014539108954446212 0.1772717615269046 -0.3577695834686816 -0.12120547275906945 -0.9576680960671053 -0.7967362729110725 0.8576358623379194 -0.12757590058244572 0.4502956560911211 -0.40632809003867054 0.14646210036757767 -0.5045306387434394 0.8350084321140183 -0.7789091176235483 0.8007149421309125 -0.33340983170306027 -0.7465776997953217 -0.2641648253546469 0.281888130039341 -0.48325365017613353 -0.18200622520611454 0.6161104197593286 0.22431554680782817 0.4629796714206502 0.13916869788562303 -0.5239328140085251 -0.7318025147915157 0.45942208834995957 0.6439377342007631 0.6997527114112445 -0.1701131132733973 -0.5177337776379669 0.5424471917596789 0.24471754015738978 0.6962760662196081 0.14596331360666137 0.36312985628624883 -0.5539972919082685 -0.7301760958815426 0.7324643204878194 0.3141846118301228 -0.0903238066775347 -0.5579585035504251 0.588946515373302 0.6006177729515145 -0.25941453788031654 0.8110266688400638 0.8984541731150713 -0.6849251884920009 0.5219552807424073 0.5833472985617261 -0.022131240596239055 -0.9175172433077758 0.30454092807612687 0.6302878263375289 0.8474043050146238 -0.844094149756986 -0.7159840877649473 -0.6418188564603295 0.10349761080378861 0.571856658878642 -0.5421603657839822 -0.28539771653258295 0.548269997636958 0.30776852819973866 0.08621401584022359 -0.36124974921925324 -0.6772168702997481 -0.0530250660532916 -0.4076025878742917 0.34196431396415106 0.012927387212295471 -0.07872807428545814 -0.39859053211958706 -0.01234062515523271 0.8240303493510115 -0.2522356875637617 -0.17605054986467938 0.23112631123714777 0.8543033765263184 0.7582793777862122 0.5707744152075491 -0.5206151118900839 +25 6 0.3164240357554331 -0.06817096951472301 -0.5414955143344893 -0.1195355151899049 0.1306686211923329 0.8703032670074995 0.41210520347324753 -0.2990116152415061 0.6562078455015108 0.056510305864173604 0.39966438744869515 -0.3667542322593875 -0.2778919740131145 -0.6460145868554796 -0.15979998623114589 -0.269323217755987 -0.6933331809214232 0.35031765134842785 0.0999597627145774 0.5818444806748815 0.3224340266151555 -0.36144135172442127 -0.8916500066386981 0.21107591541795512 0.8489226858735321 -0.9002922222079643 0.530336439763134 -0.8106356983399692 0.12901114742185538 0.4163239448617164 -0.18232026832996984 -0.852278613230983 0.7016280187145869 0.9103456552721683 -0.6199684621553399 -0.40043649034615103 0.7525530766775552 0.6701954229502427 0.8684370775636276 0.9197003923718088 -0.7448698054569518 -0.8312355584857307 0.28415984111081616 -0.3385214957969256 -0.22667796332441892 0.30421989492002477 -0.17214607932603343 -0.33465460598385 -0.9128133851617706 0.25071313362725145 0.5642021690339634 0.577554795040687 -0.49473559914575227 0.8150459284159515 -0.5934862607559435 -0.830796879640076 0.12157723086997829 -0.626956874235753 0.17743274546265897 -0.3083763199565204 -0.6518253846646516 -0.6488991263511545 -0.5819048110283216 0.6540720676439231 -0.628420635344076 0.6298589661415499 0.6642979593428016 -0.9433064439273176 -0.5978768769645921 -0.015355463951853165 0.01664909119778235 -0.5949745696682476 0.6489995553598218 0.46001537873827636 0.6348582921254851 -0.289230734913843 -0.5861985084430585 -0.8560477208856179 0.2054178790372283 0.9925033497522509 -0.15666759773753025 -0.9086412607247114 -0.7762433152983201 -0.6519485939936531 0.6778402562939958 -0.021679144859546362 0.6921598258641828 0.6679661362421685 0.9285466878672222 -0.3661724742331387 -0.3525682637951473 0.3188867756770144 0.32778494320938933 -0.6350715728176168 -0.9528527173020416 0.12015439787135418 +25 24 0.535200696864714 -0.027932885056044077 -0.9644490065826676 -0.5920708776622121 0.8160503769258964 -0.788377150685114 -0.30117205753134924 -0.8859705719908986 0.5367528205884395 -0.8565693851254166 -0.5418075445273167 -0.19658487542025216 0.48035606495207395 -0.0572881407614505 -0.34494475525543455 -0.9080966489170532 -0.8391245301891224 -0.7097469275346122 0.8928539349756395 0.2540182722651996 -0.12026281228283953 -0.5543874750470397 0.31873446520579685 -0.5240240827872336 -0.33028589663955077 0.6782996536227281 0.06731718293032785 0.5902570360298127 -0.7305719098975128 -0.9027427601013815 0.9450061256497966 0.552009269679 -0.423201155215712 -0.6822593470563605 -0.54099571742606 -0.000522451873550045 0.8535722796562089 0.9022938501904307 0.20214204178951323 0.2437016874650053 -0.10212497376412966 -0.40776616416052236 -0.8819946546292259 0.4807689829331756 0.36400488765936956 -0.4677507863385717 0.46921947107405626 0.8726317414608145 -0.1459255677046145 -0.08542295055046067 -0.8459073424793004 -0.16444479157720981 -0.31282398036763204 0.7414048591181754 0.7432523487633214 -0.7646559066046912 0.3253220870455025 0.4998640396392966 -0.5938693726989632 0.6316917316881596 0.8248920397592738 -0.7350186327980155 0.04012654063657628 0.5858149858877235 -0.17727551552388232 -0.4903946491398963 -0.6632192635865792 -0.7126082313830961 0.2303234596977446 -0.7741612055270057 0.0666043837561241 0.7242105696664722 -0.042230376977607786 0.28294644421493187 -0.742315396641426 -0.9531562153540909 -0.4721590351464726 0.05524526157512688 -0.3761416971007987 0.43772957853181516 0.27210543075990734 -0.5083388414257839 0.32791457875093055 -0.6426307407756655 0.6595782250015276 -0.7168595264830888 -0.4816964238209973 -0.6118259623363709 0.75753842961148 -0.3707639839898158 -0.4719800759934454 0.6561526405718774 0.4338339482819067 0.781307122124314 -0.1652534604718039 -0.5535364524636976 +25 25 3.7049924191071733 3.3274675720083335 3.8737336296324774 4.079193731036534 4.620203660541239 4.557584997038341 5.088741472973652 4.979638428190082 3.9566037837257206 4.540709539237513 4.372476913855918 5.176199434011397 4.959811194147717 4.364654277153406 4.158458071897318 3.4402807515441394 5.486084738848799 5.330150850746054 4.041340980958397 5.0502823899894 4.115601298155473 3.3377467975094737 3.809845190685997 4.257027749017555 5.059472217384908 5.196892882584127 5.1082327749318335 6.082685610975981 3.8264430263640423 4.4165934739370805 4.045711040052757 3.9600749942526168 5.09866504011289 4.2808395464185764 4.264493892434865 1.9196905581713286 4.827956369016204 5.4960367190343895 4.794623838629648 4.9313259889054395 4.36006990240748 5.306521880320793 5.388093678043248 3.456299009378403 3.0308300461499256 3.8123810246703087 3.1479729858897256 4.780516416627964 4.392472269674864 4.103034573443212 4.664866874487299 5.12493325834053 5.008893440836075 5.496951162303924 4.705246758706542 5.15065771355715 3.9164620310984164 4.607965459599093 2.720691862103146 4.19804861525594 5.908829860746088 4.837124910321371 3.3121462265034634 5.574670415275333 3.7563704767009067 5.046573728733734 4.637900575835086 5.666851821164769 4.07537653838017 3.869888150768235 3.770697210568718 5.218034859072214 3.6148894271860286 4.4774686653243005 5.574454035801134 4.891149738451952 4.339099124173431 3.077978948095158 2.768877167902075 5.141583718304658 3.890234530281165 4.849750019303949 5.0225923652110716 5.177095900537058 3.9800685974260315 3.833093184902899 4.36141544156795 4.03381756564982 6.630471767533164 4.088172791056042 4.680093395259937 4.142768054000669 4.7324633479822005 6.51706905576545 4.46268592883261 4.412168396470024 +25 26 0.4544056951056712 0.8355899577391399 -0.6815541759774206 0.32075761446707607 0.49186151470693806 0.724911654388972 -0.8856671656685255 0.6847238168182173 -0.3205207116943469 0.497063535882033 -0.007985941283260134 -0.2672754595838518 0.9141120154361988 0.6331637655636484 -0.43098276354337184 -0.08577974324605342 0.8526490251714611 0.5092566585927945 0.9603511625912002 -0.19801718418446557 -0.5697306785212679 -0.19195783592689097 -0.39824168437732 0.9607329298322247 -0.2977867080843788 -0.1807087942284722 -0.4084346797465632 0.716371307969411 -0.7656552079124881 -0.1417807445884287 -0.7400353502880237 0.2169602360111469 -0.24661086886781192 0.5098148191079983 0.22568378490615237 0.029052724967500332 0.5213848573939894 -0.9641817534442685 -0.895947309193412 0.761503296480297 -0.34840013752940324 0.7730919289384603 0.12139341802249493 0.5353706199317481 0.033649827141218 0.24489719305281454 0.5862181864554243 0.7486476916378433 0.5353687125042916 0.8598995286549711 -0.6653883135525576 -0.9876211699044501 -0.7381326004419415 0.7918858308096155 -0.46675132953956755 0.34443817361202766 -0.8630152568548137 0.532364592495808 0.4093903331803308 0.4578081034948771 -0.4965552018485062 -0.7346850060385983 -0.035572848440381 -0.9402503528259145 -0.2764666636083062 -0.848970058527516 0.9321147129748502 -0.8702262667894507 0.8137412262181898 0.393492026477406 -0.3243012154087932 -0.532374415141027 0.1470498780251257 0.5899217118284801 -0.14729365679130701 0.17738535390030763 -0.20945809035393537 -0.34848517853301786 0.9056727092596712 0.28306672190941295 0.9734138095146403 -0.3424119768812557 -0.6497572990188338 0.9400192945151282 -0.2011790160049216 -0.43048584251337374 -0.506535396482755 0.8835077365692581 0.6438350365297438 -0.10177078881152357 0.7644040470960749 -0.45444215018298806 0.15156623522253443 -0.7638945440559703 -0.13186993676702485 -0.436867109442477 +25 44 0.2203004894807994 0.6096837156434851 -0.0851306945670709 0.5666239247438256 -0.5776231673450201 0.4688809372547491 0.7897613856374988 -0.263999128685072 0.23814959811958425 -0.2327754286265158 0.2979050927152185 -0.7665946818536413 -0.34379246342385916 0.12431067866328682 -0.8841766943784726 0.33277066460836324 -0.726227754507109 -0.819476630412828 -0.0255208319851441 -0.7525384882571249 0.9497066153476006 0.22379008523695765 0.4549279654753038 0.5920498995656645 0.9321739884217068 0.6451256539957053 -0.6020701000596189 0.26809320442244555 -0.5741467448058464 -0.29165106805050156 -0.05450338973174973 -0.788842969785541 0.9403890545249736 0.204702954217429 -0.9000363457396445 0.46856613010978476 -0.5710753954556407 -0.951133304626474 -0.12677465454369785 0.5959381707356814 0.619908838884595 -0.5025919770741001 0.34604984862653465 -0.6479491958705859 0.39349631003035923 0.08459878915717334 -0.03177013865410894 -0.6833017102813417 0.5312673406605297 0.5380223739827779 0.0018498470845822457 0.28444609413907274 -0.8247514466734047 -0.5145160440542631 0.5419715278861268 -0.7037311520105316 -0.7667449179276273 0.13015695710583342 -0.008598329892476775 -0.1631574546706136 0.7746306457855114 0.11425777117434244 -0.9277135338088671 0.9209902278405933 0.21286963738800502 0.7299756039688148 -0.632070234716936 -0.14870331704815865 0.19465865724061815 -0.9747528988784255 0.42213020513304533 -0.08447044623822197 -0.7122724062857515 0.6600851966730361 0.9027497053230888 0.09931107215362589 -0.5890716710288755 0.3443185719082118 -0.11751472663181706 -0.9595558520035461 -0.5401444349337228 0.31274122708763374 0.7039657175972407 -0.713654572050155 -0.11075327580580319 0.34648231558573883 -0.03294007665353904 0.45806327254641954 -0.49324161567179114 -0.2484756191321833 -0.6502627014084637 0.7288118967420361 0.2206475331388913 0.4074595633266136 -0.2938254141134258 0.601740382848188 +25 45 0.22099765891594925 0.2623994733057362 -0.3662874727900476 0.7369123577492873 0.09154003095262242 -0.21758468816334875 -0.7659532990476561 -0.4415828982698502 0.2287354642941728 0.36232362120496564 0.817509595981704 0.8037210676181998 -0.635842929841427 -0.9026658868615074 0.6441937996611884 -0.1081802787197621 0.2688972132836527 -0.15408932986857082 0.8788992989603861 -0.6191029580919971 0.9243531344882197 0.46920096733358996 -0.3253052151235287 0.10928525633663688 0.19867223804882195 -0.6209536694557996 0.4955899484458175 0.3449304709361962 -0.5171451577744948 -0.3795469612540374 0.07692386113322569 0.4741261588623884 0.5632080495757614 0.665018919849347 0.29119632748899726 -0.4320546016319786 -0.7528326529636964 0.9472382969292594 -0.3054852836106736 -0.834805897774147 -0.702363004947604 0.8543239035211128 -0.7381371902607512 0.7982378008739921 0.3559245355090237 0.8148852001732707 -0.010322144332124195 0.37557187935378655 0.7382010650403972 -0.478462540326819 0.020662661370094648 0.5930177472280578 -0.685091590647962 -0.9268846056136075 0.059272895624172595 0.07358055115174356 0.3720183137661284 -0.32737170716818165 0.39832478960108086 -0.016389059621624735 -0.4597931946111291 -0.9463784381550795 -0.4244520845966444 -0.9633886384967356 -0.2863088602478421 -0.7711403280996951 0.7601384866754246 -0.5780317604564993 -0.032701111071164135 -0.040798260019892174 0.04846877257041804 -0.6361937008280552 0.9828223620610472 0.6071781455000733 0.21998696687892805 0.6304903219322942 -0.18784366367546013 -0.40196736013089973 0.7785465214020215 0.4430091536932854 -0.2640597429144389 -0.2829914572166805 0.581172412873219 -0.2521801510866941 0.19755460146664472 0.9254296728038514 0.043986494757301875 -0.7878890588648697 -0.366624885263066 -0.6303106407664922 -0.22517619823608737 0.4035396156718343 0.5164048411348761 0.9272524945022191 0.8577442662459294 -0.4189247203597606 +25 46 -0.8396453007043632 -0.36020793790459393 0.21116538053487033 0.02634334206682465 0.9598551344219219 0.19745659204182986 -0.5459729500365982 0.737520998449916 0.3855512339781564 0.7202508395478053 0.19930961712853046 -0.49004676760109445 0.3702031802188739 -0.6474501949790077 0.5614774160163365 -0.4691771498613557 0.5703707418926425 0.47489432850358515 -0.12474717891592357 -0.46749512769847135 -0.050997736409144734 0.14374787536870626 0.5152875779496631 0.18138089499453502 -0.4180332607534465 -0.7733250701031626 0.8748910243021915 -0.9420526035667931 -0.44223224622083057 0.6305150983253771 -0.7749173556148861 -0.042662930444321345 0.41654102667015347 0.6855350900009274 -0.30375329494141035 0.03373442822156614 0.5945826680906581 -0.6123069575697664 -0.48071485733489117 0.021173148592846802 -0.7765312855002187 -0.5092786120266783 -0.9377266807994213 -0.05883284117448495 0.5531161230391326 -0.16858243590192568 -0.21202361099779465 -0.16248524317941193 0.3688603285569292 0.5137075607770136 0.1570063584682988 0.6255521957675239 -0.13774164717567405 -0.6134153339272879 -0.83213093343633 0.8150158353060071 0.08399427942827464 0.7064366282780306 0.5646577844899339 0.44587612797775833 -0.5035305539035104 0.7909315480232697 -0.2906521647517242 -0.21315382504383007 -0.7905566551649061 0.3589611112350919 0.19434212982838184 -0.7797495651191877 -0.4368172236172132 0.052258112705279025 0.9932512304904719 -0.40307075736570774 -0.2487586029585287 0.2903602732997457 -0.8362558601428289 -0.9085322866116441 0.35472999147991735 -0.2069647299192865 0.2136063732705904 -0.6971533040248534 0.5151609056467106 -0.7598752393392538 -0.5081355246724857 0.83330070499014 0.9485776288750787 -0.9050346918032675 -0.6586074184076016 -0.38507421883669357 0.8232086730098864 -0.9139650859587489 0.9049256817363347 0.028839675843585155 -0.8566349048209512 0.3425746728862089 -0.3369087570524043 0.8878009371466964 +26 5 0.021136936814857066 -0.8220471092467103 -0.31352131812360007 0.795203411155029 -0.50547362018289 -0.4694943917688357 -0.06174309571655945 0.33015792661434706 0.5041420544210575 0.8480931376687975 0.0781304905644058 0.43914231448220464 -0.20745881128752197 -0.4698972429591137 -0.1674400919786192 0.5378421542950227 0.26249013426453116 -0.26140596899292423 0.2908907115312611 -0.9673962305887311 0.6302162243801264 0.18173911962373945 -0.8513580072644187 0.607186778231616 0.0104620888924849 -0.22154901097520496 0.05132763664171747 0.720997665423913 -0.8681046147525506 0.5313638466719914 -0.9011466955752379 -0.5473778573478043 -0.5409739292637936 -0.39555091966172284 0.9139495656740058 0.8544554179189088 0.8420492397361787 0.4513269138369769 0.8871446000145409 -0.8524304537266132 -0.5339329703753 -0.02164960101073876 0.150207839409346 -0.6984111574838425 0.4042266599185804 0.9445313455546274 -0.12409499990180017 0.6686874102776963 -0.8711662291074216 0.615321302530607 0.3677587560308855 0.18743688322906626 -0.12618936377457746 -0.19026533228667453 0.23012976797954443 0.16797534733417385 0.2071974129661287 0.6746047519113447 -0.3092774062447208 -0.7785678954370827 0.4063015931183187 0.4613747062509945 0.42593883153808165 -0.8806871083041656 0.16747798460596774 0.871645508655704 0.6612241623121569 0.002942446795573428 0.9261815875274946 -0.6746656152820627 -0.10594401673994835 -0.2297670907116094 -0.4194728403402066 0.7441379474208933 -0.8168972993945405 -0.37968387984638774 -0.40621018359420025 -0.7302384672464841 0.5685129633534161 -0.6151891998727537 -0.8938111720764952 -0.985558185708918 -0.9670185582625099 0.8144024175371403 -0.6152509776758988 -0.8171609042913515 0.6473155135052397 -0.6532576989015366 -0.6084099454145868 -0.7943522353948906 -0.4760769218824379 -0.4575448197341667 -0.6902646616493562 0.9770564319569912 -0.40566586321362696 0.9399320439852588 +26 6 -0.7268009944796208 -0.947655308179352 -0.6083019886233598 -0.5049463240046501 0.6274579923487509 0.4137660003873267 -0.12971449239627164 0.4228797694491073 0.6739352547603534 -0.1320236113690041 0.19692504022272428 0.6017172099176085 -0.4250245942442423 -0.6236769820099755 0.6787159439003423 0.27682912932722714 0.1524333041939787 0.9102343600970713 0.6170322968311381 0.7719304988458977 -0.4711819249189466 0.29837711703600545 0.2776231794366726 -0.36552240301873873 -0.03575651173720473 0.12441484643681511 -0.7221194566765916 -0.6394246999340809 0.9601493540537482 -0.5085167457299686 0.1957153567845773 0.1359613336584382 0.6786456195646808 -0.12935939569808697 0.7637764779810499 0.7835624190878425 -0.23465822059314734 -0.4993845021208143 -0.5263903456755998 -0.9908059492611274 0.33088393449312825 0.8029616343459096 -0.8742223249199457 -0.7366148371554135 0.6467367712725538 -0.8018634618984413 -0.917330503553935 0.0788447212033907 0.27430873670383926 0.04128194988511091 -0.44231953590124595 -0.7317769779401853 0.536394854329264 0.3537234629542343 -0.857683391929114 -0.7405973276572699 -0.9281746852739159 -0.7515864188471366 -0.9395891723146559 0.12980903408225863 0.7616080790841631 0.08570284579048648 -0.37089828433858085 -0.32770788942957774 -0.1339910857107942 0.18684643930288813 0.5536198845692641 0.4284708686065113 0.6176609635743515 -0.48727482313379467 0.78513061032864 -0.07615064764269364 -0.45571309468439813 0.49304621963786954 0.8780248502053725 -0.1192333052918002 0.2745084001551661 -0.8557894278454758 0.6304386231203947 0.7808630852494765 -0.9759039112020991 0.14849160633882152 0.1651223285354646 0.02865859136845139 0.8529587979817004 0.45551646310786054 0.21149583914832015 -0.23792640548920452 0.952600622372318 -0.9151008408002359 0.9263044702926382 -0.16965601349864134 0.061992535895808665 0.3296482328314576 -0.12130010000650371 0.24714102995698695 +26 7 -0.4434800489955486 -0.07745414818134444 0.8771155401033481 -0.2648946361423614 -0.763975604314832 0.5651119250530043 0.7640758899239875 0.2108568865138052 0.6654113283926277 0.019645029489510746 -0.4123212446966191 0.9875288030219893 -0.7287013260073363 0.985774395233018 0.377271116721144 -0.4782153365022346 -0.25069570975890865 0.9100885686532911 0.011158178215905368 -0.9716965935136141 0.8878108555432394 0.7031455677216263 0.9211387782850673 0.5174050258359506 -0.46229792972430195 0.9690083898082826 0.8444187682239699 0.46777181025106374 0.9533207956793863 -0.8184764935910886 0.7675238004701643 0.28784099194143264 -0.5294653311173083 -0.26080499593995987 -0.8185863714594004 -0.0639543962753839 0.2886735784550143 -0.8568910147148809 -0.04018099636675698 0.6625593733316892 -0.9149291248647979 0.6136434010120988 -0.8592662866291974 0.5067675277110437 0.9388805560959155 -0.25788671836081756 0.9371278949299704 0.577507107954617 0.9343658927284382 0.4630697668542689 0.34034008576173136 0.14364517696447754 0.11263666234316294 -0.5561063451732853 -0.4539040110335264 -0.6953648540603534 0.06646449565815771 -0.541479700958557 0.22816242077180027 -0.8008366684049153 0.029986689645340903 -0.5899576691160238 -0.3969697413752822 0.7340415816226527 0.3478787935751204 -0.65801714365995 0.9695554667346777 0.501362124990514 0.4952773033405806 0.7685309765124364 0.1961261764903095 0.24574552532029226 -0.3451576909521441 0.36954993313906814 -0.5837937607166375 0.18928994610111527 -0.4720498544074547 0.2525723743857651 -0.8852558717118888 -0.7598510258034454 0.6562049717631737 0.07307096084700837 0.050305934362226745 0.6907798748418144 -0.7980267806910326 0.4152159529216157 -0.3427995068572469 0.1455636640730038 -0.9225401149956607 -0.21624069950746883 -0.09175975654149116 0.4257339395707507 0.5644344605304472 -0.39297738058837695 0.011653133662454795 0.3178794656205943 +26 25 0.4544056951056712 0.8355899577391399 -0.6815541759774206 0.32075761446707607 0.49186151470693806 0.724911654388972 -0.8856671656685255 0.6847238168182173 -0.3205207116943469 0.497063535882033 -0.007985941283260134 -0.2672754595838518 0.9141120154361988 0.6331637655636484 -0.43098276354337184 -0.08577974324605342 0.8526490251714611 0.5092566585927945 0.9603511625912002 -0.19801718418446557 -0.5697306785212679 -0.19195783592689097 -0.39824168437732 0.9607329298322247 -0.2977867080843788 -0.1807087942284722 -0.4084346797465632 0.716371307969411 -0.7656552079124881 -0.1417807445884287 -0.7400353502880237 0.2169602360111469 -0.24661086886781192 0.5098148191079983 0.22568378490615237 0.029052724967500332 0.5213848573939894 -0.9641817534442685 -0.895947309193412 0.761503296480297 -0.34840013752940324 0.7730919289384603 0.12139341802249493 0.5353706199317481 0.033649827141218 0.24489719305281454 0.5862181864554243 0.7486476916378433 0.5353687125042916 0.8598995286549711 -0.6653883135525576 -0.9876211699044501 -0.7381326004419415 0.7918858308096155 -0.46675132953956755 0.34443817361202766 -0.8630152568548137 0.532364592495808 0.4093903331803308 0.4578081034948771 -0.4965552018485062 -0.7346850060385983 -0.035572848440381 -0.9402503528259145 -0.2764666636083062 -0.848970058527516 0.9321147129748502 -0.8702262667894507 0.8137412262181898 0.393492026477406 -0.3243012154087932 -0.532374415141027 0.1470498780251257 0.5899217118284801 -0.14729365679130701 0.17738535390030763 -0.20945809035393537 -0.34848517853301786 0.9056727092596712 0.28306672190941295 0.9734138095146403 -0.3424119768812557 -0.6497572990188338 0.9400192945151282 -0.2011790160049216 -0.43048584251337374 -0.506535396482755 0.8835077365692581 0.6438350365297438 -0.10177078881152357 0.7644040470960749 -0.45444215018298806 0.15156623522253443 -0.7638945440559703 -0.13186993676702485 -0.436867109442477 +26 26 4.812622586578521 5.95656582662881 3.9232947713459785 4.00033342777912 4.518529799817539 4.767287488180676 4.082476795506734 4.175697059737919 5.6524831135192795 3.7481913279666026 3.024406929991444 4.688166751390365 4.733807448497272 5.85514299759345 3.179888117697839 3.6562367675206424 3.338332841402469 5.2910905697237745 4.473540197521717 5.195073742674101 4.471796297675171 3.2015745429618683 5.091145611231932 4.147594844678411 4.041143755107403 3.1955386255295632 4.928123317949272 5.308238036647979 7.040892099740528 4.765840435207417 5.708932657609267 4.874661139217964 5.398657956745206 3.9432093482006296 5.526073560998356 4.500137952590746 3.5237068922603347 5.458316618380712 3.802521010202331 5.112076748508901 2.918720627330752 4.628920601025154 5.232832308249958 3.8524382730317805 4.32667415591622 4.631192334788932 4.364398003005181 3.742998786563211 5.635294427995501 4.175211488079933 4.820097723810617 4.540273501023995 3.365970556368541 5.213853310522793 4.994851153211843 4.896970722697955 3.02024736641984 4.227060240507512 4.709781744809666 4.614168074253725 4.614310321938992 4.7898556911578964 4.552711330655675 4.496385349341423 3.7785339463262995 5.60068572978923 6.018272222305482 4.24386547748821 5.745728438354092 4.686112781296332 4.403720591077109 2.9136499733564554 3.358815567253175 3.330921321796669 5.9369968979798475 4.069907354581821 3.2589301382682567 6.001421684971342 5.710955381556819 5.033622266153584 6.862664109773211 3.9971629582819683 4.271651610850757 5.848918990584644 5.47138599054413 4.555670495811456 4.937039156732921 4.066295785179992 6.618399730857905 5.811355852332517 3.7457467216689295 3.478230824249338 4.152299066197635 4.763697579302116 4.5513502684483385 5.655727296030258 +26 27 -0.06641904723676317 0.9494909672231095 -0.1679654812117637 -0.16372230762854545 -0.6926762638609738 -0.5447509473581384 -0.5040717449305372 0.18054507517864504 -0.6549241933232988 -0.7180757449122035 -0.4878373422813873 0.718488028723415 -0.1956721994077426 -0.5383041453308366 0.20862850344206163 0.937510218734207 0.2829075179882796 -0.44656643387314654 0.20091334296549213 0.10477726314125335 -0.05203321066543953 -0.36468661761429777 -0.5775533397066692 0.2884176778186154 0.7203741947366327 -0.11131550715612715 -0.9003150979697401 -0.26195647657735255 -0.3824865026379036 -0.2607303667413672 -0.10755196108576603 0.40477423415534686 0.7973270433446702 -0.971380656203668 0.04998729382095046 -0.2662221102391702 -0.6697269404256483 0.5354062930073904 0.4757182656600589 -0.5693813832747483 0.10796724489200171 0.8420067904395443 0.2699783194325245 0.2302899906177447 -0.6280277833873351 -0.7324639049970985 -0.20117397294835038 0.20642411736539445 -0.9782694342361056 -0.7529219727225533 -0.9257351951847261 0.383204302498098 0.0847962520002461 -0.7871243241028703 0.8039019429971679 0.9510247644397409 -0.000638076815867139 0.26651875066697195 -0.030342027509120628 0.7693705713403038 -0.5805817281011105 0.629960182089661 -0.7889194938074937 0.41947163150945577 -0.6850530800623047 0.9499342718922006 0.7206074324327121 -0.6187318905862345 0.8729163780279929 -0.2318689889686989 0.4301285928716969 0.4751674687451073 0.23354878938101242 0.36453007957508143 -0.6114581376845196 -0.6226984038085619 -0.43229918423333946 0.9722430317539343 -0.18886423281843934 0.022052422061651367 -0.16570501582977548 0.1849118344916001 -0.44988007726881296 -0.8940121074686214 0.7601183646232079 0.8350847916235216 -0.6421235967442711 0.39087149985067393 -0.5443275184484355 0.7338196254441782 0.6994174726783875 0.20254405349457372 0.45490684936015535 0.4887692226747806 -0.5428144321415982 0.7839743584097563 +26 45 0.7229344924445609 -0.10429022808949706 0.258523496195489 -0.2500276009771636 0.12071279871453044 -0.9656147224473508 -0.5136588149322201 0.8136807898639762 0.5058314521964613 0.21608442261420824 -0.23890725395517154 -0.3182235871757051 0.6480456125925789 0.5831909106477764 0.8424679114256513 0.9660854861480754 0.48453604552362584 0.30491772953178176 -0.4734543167366019 -0.8845376250306738 -0.8129558367502137 -0.42859197923642345 0.7123696516675591 0.5882339552402183 -0.12572303843298038 0.577815634080735 -0.945127497033009 -0.7101261483641361 -0.5249816908994343 -0.20351011928622031 -0.9934072433402827 -0.7910114228423684 0.9067795788998927 0.5356553023624173 -0.3763514965970367 0.6066085088777946 -0.6629709478772567 -0.5998671489794647 -0.09538563859380145 0.7603109062045283 -0.3444274608354132 0.16592672842643807 -0.6096473782719172 0.38012515684413106 0.252007964883769 0.8616664148658557 0.8697661429605614 -0.5051046071122232 0.8333363074138491 -0.19438432716198562 0.4139980485257484 -0.8568858277097411 0.7279374785983823 -0.42226796114877385 -0.5483364920772111 0.6406531382781437 0.07974912412004342 -0.3183301439127484 0.9262102297180339 -0.4111280811753626 -0.29437690514246273 -0.23637556207730714 -0.6618140050446473 -0.08799945305526213 -0.406890421866807 0.43125427425838847 0.5888390575839302 -0.6448347759222384 -0.4637308128297204 -0.9749382130367577 -0.958400953740115 -0.15533754819242862 0.3005766695452279 0.4013230288149414 -0.33556293104192836 0.7316091301060315 0.28836498472623795 -0.6647933629117491 -0.7398824856131907 0.6593377585640792 0.5112817639201821 -0.3121993849640434 -0.35926466179324046 0.7036424351620363 -0.8446668858203967 0.21066137107786442 0.45947124872760203 0.5437025967867564 0.7866464868181613 -0.7122918840473509 -0.369579275225979 0.5941732702600264 -0.4308730548278956 -0.29213875210468854 0.8760329554221113 -0.9566639723166876 +26 46 0.49585773725166415 0.8643101867360035 -0.4593150238287429 0.5589267855774944 0.18699737602951383 -0.18120248840016018 -0.8610557868741602 0.9223847483021725 0.979315895055086 0.7084421415669484 0.005335213487674739 0.4576235189651092 0.7236332368852132 0.6428401572116236 -0.1755942821847738 0.17772773744596115 -0.021371335032301042 -0.6587520163461082 -0.7302682773588487 0.08105892616728472 0.08012746072243226 -0.140037372120557 -0.04549122980319109 0.689081783835783 -0.7704550184343153 -0.3294264161046807 0.4209266727575214 0.8434061430440518 0.910006244340696 0.7486030109045974 0.5599941466850851 -0.8790028278752753 -0.25936428015827295 0.26810203929557974 0.5188730104843646 0.4250131268770727 -0.16892691141702887 -0.4336979243984427 -0.26992028438020843 0.24188145652015547 0.08241364446719213 -0.5226433851852288 0.6719941878104203 -0.00010520923146351002 0.9627189579249851 -0.2233529847829996 -0.675924601018097 0.03575635983726566 0.6329072659411072 0.31201204746212685 -0.8499982919229956 -0.18683057623670396 -0.03177744282981343 0.9786877684537032 0.8569272238494205 0.6231305406086818 0.40347681675214386 -0.29622526466660837 0.9194052241259929 -0.5118394376177129 -0.4891159805111762 -0.9808823972970326 0.7565532870020453 -0.5235904664795443 -0.30981617667297545 -0.49117787969547666 -0.9144056824838636 -0.24341499395013422 0.4314250928159835 -0.46640237065857115 0.990483917123909 0.024371510141941277 -0.4245781544882974 0.22817549937453818 -0.5855619175813982 0.6979416975204371 -0.8053140494836233 -0.8718248241878546 -0.30300082618947766 0.7389073959401928 -0.9463077842945518 -0.8697516738904423 0.5568547705553029 0.7564989403508471 -0.986880240244961 0.35636954386372577 -0.5107474434788228 0.7842574053758062 0.2325301812342857 -0.7178262877906634 -0.14456791067610242 -0.30174943083024863 0.3440018279953321 0.8965231389848476 0.7442717528592306 -0.43248952692529996 +26 47 -0.9157163503879417 0.8424483743725346 0.1181160084974191 -0.2841339078377847 -0.8794877078957535 0.47808420151500486 -0.15527907346612912 -0.5108277650361512 -0.8036556403304285 -0.5295305822379912 0.8369584884040961 0.8760196469463934 -0.17217678109686996 0.5320242576842606 0.26050226520482944 0.13036434710753309 -0.41956677592486114 -0.4608784912632109 0.9082626615025502 0.9101947040247542 -0.6184397334984977 -0.6241598751554929 0.8514820253540172 -0.09736455313870684 -0.6668342608130287 -0.07097201970649958 0.2268464376053907 -0.8219896816876935 -0.8909500532119883 0.7721495785105941 -0.928709273968501 -0.7545393505803206 -0.5503654144324788 -0.25698811974965885 0.9899305421166158 -0.7681582231000434 0.11018620808973933 0.9311229387572508 -0.6114267937339994 0.25355505758581076 -0.14729896645214313 0.254448296601161 -0.920175510174005 -0.33097015210842073 0.305808585516149 -0.016420352137813454 -0.0049508872682042515 -0.634765699553389 -0.07479582218645642 0.2721925653116348 -0.4636165971413848 0.799414096345157 -0.7577356313141483 -0.3286265093325327 0.03153313100485722 0.674631978084796 0.2316553876137566 0.3002593286546391 0.7367691300482766 0.6027198228828148 -0.799671732366563 -0.5043404459829504 -0.6524470574040082 -0.46539143464454513 -0.9258432776898959 -0.3517276991297069 0.33406557680393334 -0.03469949551100138 0.6344023692542338 -0.39019327267783765 -0.2932371337959885 0.7703431131083673 -0.6094097267279881 0.07051671749658928 0.9982537643553866 -0.8042645525975154 -0.2219225212949869 -0.44919201035652856 0.8042279662717322 0.6789894834090233 -0.7497734156160556 -0.24268325005644842 0.7180568437410402 0.18451283063638013 -0.3464592088345064 0.4703028817231998 -0.6302692073119711 0.041369329422000556 -0.9778238765140255 -0.7834076244871906 -0.06916802987356507 -0.7059645231548899 0.5239909432667631 0.36982164540567286 -0.9949390255620925 -0.9139955125991845 +27 6 0.8794190292509003 0.23431997919767955 -0.5748720436238348 -0.5781870544160328 -0.3643929705102946 0.8209289646099591 -0.6624550335221637 0.3225835629162097 -0.5129249469510215 -0.5969653313254406 0.12664658886775837 0.939868426327281 -0.7337572916437269 -0.9253445393769344 -0.5423872495879369 0.27889689203317736 -0.13014276543006664 0.23064247094792378 0.11158530977266823 0.6369984849848123 -0.5477486448607078 -0.9021898369458161 -0.6412943707281036 -0.9647332905008381 0.9550911304612679 0.18446171106543563 0.4905418443004741 -0.9163107198237395 0.9597389194405772 0.45824217336079687 0.3752453362394388 0.6987132541865333 0.38699703238689653 0.7712648634815509 -0.30296477250037035 0.2851612960041485 -0.02353386226574683 -0.5282557159527279 0.868139304565035 -0.5326592180952512 -0.03727576952325662 -0.725045517842057 0.7956713078680242 -0.2294359727029298 -0.24107555307439776 0.20702139945103215 -0.9114236499404229 -0.7842542598251179 0.8198074134213149 -0.5317159032397931 -0.1639302520604411 0.6943659435986 0.7315645624913334 0.3876422037140641 0.3870861785872839 0.09674483095979935 -0.16783028380477671 -0.9823815026458538 -0.38555870266578673 0.589650424533249 0.5299837706424066 0.7422244027395781 0.29282484027698885 -0.6683586861979427 0.3819381286799104 0.8915037870120928 0.06680002268753582 -0.8459468088916782 -0.9083094401852221 0.10681357355870236 -0.7842429769383312 -0.6102741045313658 -0.6867789701893687 0.7073974069170585 0.6997996699311653 0.08903723731440571 -0.253267452554254 -0.03321949247196043 -0.8939001231885613 -0.31162838014141747 -0.4964787777391835 0.9732640309011102 -0.7877883621923891 -0.10334061409878381 -0.7187835078008604 0.7166888598801056 -0.12760221879395894 -0.4084208901823594 -0.0433313993718798 -0.20853418495563125 -0.2628741214646708 -0.7566945944562582 0.11648294794724046 -0.1462958406107806 0.360830158266195 0.716864139560434 +27 7 0.47298823963038905 0.4124580273059921 -0.5839648530569992 0.094094576827362 -0.9045381513817934 0.3109319409175333 -0.3157886182412124 -0.9584819220889496 0.9789521329834059 0.9177439128516782 0.14700035300084258 -0.46821896428610654 0.5219278338520328 -0.3483303922267318 0.4268597958075959 0.05264699120639116 -0.7705103102333548 -0.43935591039861266 -0.931195332921835 -0.726610969008217 -0.725342819127035 0.06054433419876304 0.14442308896992317 -0.7975634736143198 0.4306406744983524 0.799498221315637 -0.5300264833146737 -0.3090834135202081 0.7555386909425541 0.8994509140447398 -0.7956078763733441 -0.6143611690176001 -0.8092033458777306 0.5718381208704855 -0.35602223776784725 -0.4280792793007564 -0.1489436061746625 -0.276060351346225 -0.6618279820348296 -0.8692093118696085 0.9755472188167451 0.42412851460574696 0.22093120978665448 0.12965361527672625 -0.5268423133290117 -0.8445236149314528 0.3308663187009586 -0.615372418951575 -0.6708986112438229 -0.21309421626174685 0.579944820975768 0.8539847033156458 0.4712805593272542 -0.6324503408531212 -0.40256244043178224 0.5119688868965588 0.9443750276624272 0.37986373497492076 0.6564840731874493 0.6541329552379962 -0.3964260094788574 0.5236492775470041 0.3808760058570666 0.6902648028828033 -0.5709868851511091 0.5122040293827863 0.7757120064270411 0.4214918123815363 -0.14548717919349552 -0.47572914238626796 -0.5829758443212014 -0.15956578365737695 0.3511213711245966 -0.9684159947699376 0.6406728945660767 -0.9402061548083445 -0.9137671208236435 -0.5929781217037204 0.01360257771063833 -0.8645570070598889 -0.7249543220373995 -0.384314748551702 0.6294061993185165 0.47564240909777045 0.9265183831251167 0.7404853305074766 0.041368642484608475 -0.06421079487580661 -0.40662692984421867 0.8847463222122958 0.9546015891349138 -0.5581978909388894 0.0756587836596323 0.2815773491449023 0.4959410940665594 -0.0838007332805657 +27 8 -0.38555914852955775 0.05971135754031964 -0.00877929096163621 0.28936916410224844 -0.0714474853031366 -0.33878461605941945 0.5858745830608869 -0.3450797727189625 0.28311428125487814 0.2503299282878315 -0.4571919274181049 0.8062233213863459 -0.46935215332943026 -0.8568295983268219 0.015052810605937328 0.04107133223946913 -0.982338210965702 0.8745418853501195 0.9778699729637068 0.6180333915267362 0.445822101417388 0.5659775835336274 0.5020207866141415 -0.931695582993785 0.5083273125002927 -0.5467562344231252 -0.07718211932489227 0.028752715944941887 0.6075745086273203 0.3922803026558017 0.3999367484515719 -0.342071208350466 0.10646604264982673 -0.40243638568185425 -0.45241679087851105 0.8058436026071238 0.4797803460117289 -0.9258991330890669 -0.5646396356569208 0.21112610252586617 -0.7737999642997748 0.8996996808271529 -0.4778058970319903 -0.6373174789950864 0.2431589160145453 -0.3262693483805672 -0.895768767494034 -0.6769860213619641 0.03586226949488602 -0.5110240085875939 0.07075331154762687 -0.07431129711125561 0.18707875621625236 0.2789679639331162 -0.33994981730958895 0.9008241980942284 -0.9176437024054902 -0.06468412213272123 -0.8582809010311607 -0.42687018146111244 -0.4137678295584206 0.9824120131945431 0.25946097531054324 0.8287393196298305 0.9430365422015421 -0.3876877365583917 -0.7725070853587044 -0.7417706488983904 0.8612331851144523 -0.07003220603864913 0.6960838970138967 0.17537162664190342 -0.9362774690411895 -0.26736623474580323 0.5316057519634294 -0.8054124030626293 -0.7667911330086052 0.06947568194991072 -0.3337095544726876 -0.2841484066977258 0.7082347582676067 0.47138328651899686 0.08984289595535855 -0.5745803096429902 -0.46347655092520146 0.6299294509060334 0.1024296250054586 -0.1664707069268221 0.4862524423459629 -0.6707359094927114 -0.687403586042034 -0.6488353843672077 -0.3551299822831975 0.3552258224288094 0.6720870845535265 -0.7761912236604174 +27 26 -0.06641904723676317 0.9494909672231095 -0.1679654812117637 -0.16372230762854545 -0.6926762638609738 -0.5447509473581384 -0.5040717449305372 0.18054507517864504 -0.6549241933232988 -0.7180757449122035 -0.4878373422813873 0.718488028723415 -0.1956721994077426 -0.5383041453308366 0.20862850344206163 0.937510218734207 0.2829075179882796 -0.44656643387314654 0.20091334296549213 0.10477726314125335 -0.05203321066543953 -0.36468661761429777 -0.5775533397066692 0.2884176778186154 0.7203741947366327 -0.11131550715612715 -0.9003150979697401 -0.26195647657735255 -0.3824865026379036 -0.2607303667413672 -0.10755196108576603 0.40477423415534686 0.7973270433446702 -0.971380656203668 0.04998729382095046 -0.2662221102391702 -0.6697269404256483 0.5354062930073904 0.4757182656600589 -0.5693813832747483 0.10796724489200171 0.8420067904395443 0.2699783194325245 0.2302899906177447 -0.6280277833873351 -0.7324639049970985 -0.20117397294835038 0.20642411736539445 -0.9782694342361056 -0.7529219727225533 -0.9257351951847261 0.383204302498098 0.0847962520002461 -0.7871243241028703 0.8039019429971679 0.9510247644397409 -0.000638076815867139 0.26651875066697195 -0.030342027509120628 0.7693705713403038 -0.5805817281011105 0.629960182089661 -0.7889194938074937 0.41947163150945577 -0.6850530800623047 0.9499342718922006 0.7206074324327121 -0.6187318905862345 0.8729163780279929 -0.2318689889686989 0.4301285928716969 0.4751674687451073 0.23354878938101242 0.36453007957508143 -0.6114581376845196 -0.6226984038085619 -0.43229918423333946 0.9722430317539343 -0.18886423281843934 0.022052422061651367 -0.16570501582977548 0.1849118344916001 -0.44988007726881296 -0.8940121074686214 0.7601183646232079 0.8350847916235216 -0.6421235967442711 0.39087149985067393 -0.5443275184484355 0.7338196254441782 0.6994174726783875 0.20254405349457372 0.45490684936015535 0.4887692226747806 -0.5428144321415982 0.7839743584097563 +27 27 3.36846038849019 3.7616092185575365 3.6503288247878123 2.8213464798363397 4.6503762690005885 5.350546136885698 5.011485559727221 4.745994841369167 5.648011819275953 4.815717601987264 4.142598378520819 4.868358656126635 3.2903992698081694 5.010370556320405 3.3267035188411453 3.936504258062244 4.38652040625983 4.002315927403352 3.756414988125495 4.598993632067804 3.7522067969298654 4.249433995730174 4.2416874496497625 4.795587449799987 5.328576041127761 4.191020993788313 3.75539328692222 3.035217675921568 5.118854854638737 4.76442089075654 5.202162563107592 5.574982945473572 5.405554731008259 4.4827725723141345 4.37185387951763 4.349513740446146 4.242095325121788 5.473591632379975 4.576542701183708 4.755256645930281 4.056236938730857 5.379166507138283 3.511720070499708 2.8549431145762894 4.106995410388968 5.718534582928342 5.173131489246397 5.257059426949832 4.719062780558727 4.258200980484975 3.5788809815157414 4.373634410517804 3.535170047585985 4.5703291343606764 5.406646704421242 5.568043966479019 4.52656191192344 2.5627320252647072 4.403748369254011 4.645024079764221 4.738422254893196 4.607974264159059 4.670481440561735 4.039175494373751 5.1850441965161735 5.143776631156431 3.0936200522028052 4.322738850356233 5.346388570955056 3.2379308469286636 5.390837517333376 4.4017863400635635 4.897988394947609 3.331981163715737 6.244914953050042 5.767217736484122 5.137785456269084 4.736457702887172 3.8010361002410296 3.5263807071126045 4.477263712221775 4.195408333390651 4.226322443912524 5.002132941532791 5.354461198066898 6.20239781039862 3.288601389597902 3.931238580171633 2.878617246981578 3.580938860046601 5.052048088280982 6.164789688525625 4.198134529383008 5.271456020390055 4.40703758267477 6.064026959177703 +27 28 -0.40044005122560233 -0.25707728605615054 0.13542566709923487 0.5614504446535831 -0.3377486253287172 0.9077219677162911 -0.6332035942531531 -0.3589282171228221 -0.988525845148978 -0.486817380178344 -0.5169470502388334 -0.15970247798339354 -0.6366431623035114 0.2993000598646458 -0.26420388769513714 -0.26577116877713247 0.3639057542871589 0.07841984529928459 0.10946223697328361 -0.06253131723510141 0.627989763715719 -0.08757818180302879 0.5199098206470345 -0.061870471596608745 0.8165070223751938 -0.7634482502045803 0.57586870146929 0.033448069085840526 0.5956092371334754 -0.2672513704916295 -0.09877090244794262 -0.9632580740895351 -0.5680387880883451 -0.05869979993792929 -0.9284727878356354 -0.4573160970896608 0.31796916739091885 0.49665038932778427 0.25747216460575806 0.3861724276616998 0.31044883613754526 0.230748789017575 -0.6818737724101764 -0.32653483156140606 0.7137697263053784 0.9904809749831076 -0.4113374825521543 -0.8219892756648626 -0.11166843637072255 0.3628970456864955 0.2816652440787635 0.03916723995813465 0.6007476770775002 -0.8955800620945735 0.8759842079019102 -0.22862028983438787 -0.5938319967795631 0.13006703599627634 -0.8265778053368797 0.12839779601790058 -0.8917480296200417 -0.06737275732742165 0.14464128179659008 -0.34445240358127105 0.7688942480677319 -0.5751618660154818 -0.04033865718141838 -0.557788490207394 -0.2130564620168678 -0.35990311312614875 0.3163388138262524 0.9135823221649464 -0.2689348016654549 0.06523865078056645 0.8091666661157924 0.6611894108099896 -0.636391610595245 0.2337268240334227 -0.3504905399288569 -0.5751214248967891 0.8266901188169191 -0.190755375945582 0.2245986395281261 0.9902680027207447 -0.22445334807479767 0.3289135905534404 0.06888216280235304 -0.7900203233770533 0.12864158418354377 -0.1110129616797717 -0.4015769863801868 0.6574081364094873 0.9584745293341377 -0.9276829097378578 -0.6725955901386471 -0.9342839345504861 +27 46 0.3912685481561078 -0.1981057528013086 0.8445965735329433 0.2550781929744621 -0.8487835519788993 -0.5170551806480803 -0.7213682062486539 0.54395837074716 0.4049482570365208 -0.5133140019780749 0.4819497475444219 -0.6130413266372048 0.06026109760702236 0.6429800345084857 -0.6370437005000538 -0.28856774868956414 0.7466273423287548 0.5807468425273092 -0.33614168378287257 0.9737719853522584 0.5399911443250578 0.0995505673872028 -0.1273906868866468 -0.3375639639920165 -0.7977870832671901 0.2895949439852086 -0.03919767617840586 -0.760824026866949 -0.18191225979493364 0.7910972601371078 -0.8266297398156037 0.13399397208234132 -0.8149009553679716 -0.28238317703265636 0.7931602392354213 0.7468709912658802 -0.6684065593517385 -0.8692091646837206 -0.909286594355585 0.5940431191416271 0.5545453883169338 -0.0582844938642495 0.34194080282617323 0.5317600613516023 -0.2771031965543902 0.007792962807870341 0.6122771557917934 0.32882544582274775 0.6839797548801279 0.6933044770649395 0.8210163652909741 0.11320362869122436 -0.404342534090244 -0.12956143563409617 0.44046435359559966 -0.990461174209649 -0.9311934227416476 -0.027283234859132754 -0.24913174798628046 0.41173087310265877 -0.2643339405998262 -0.004799966039009229 0.9990688209696432 0.15296765517198407 -0.03222759050699531 0.6581166547651192 -0.13623586632356588 0.1877123454996401 0.9001722813286923 -0.5126853963684939 0.4157230778550278 -0.141874443372356 -0.6944104448860837 0.10928867048166135 0.9847925964516724 0.5228257802493539 -0.6384823979409553 -0.7429422284481924 0.7123235250237228 0.08585291854205601 0.5224388364376988 0.12709007208104794 -0.8321282751223391 0.3282890394332043 -0.5388036669710241 0.867246348109449 0.7127513868926234 -0.27688224304577225 0.44581436835156096 0.1853642093211869 0.9424149340451524 -0.7562345247597528 0.6190591075107064 0.8156091141066184 0.3087421243812454 -0.7452960813170004 +27 47 -0.0751294757717833 -0.4578745590178692 0.25615615962821425 -0.12000189945657902 -0.09982533111200675 -0.6415751636190015 -0.841297139964633 -0.7097113567138069 -0.32213217486303614 -0.2520564652918471 0.8110628503605113 -0.1786723498154421 0.12228816934845876 -0.24839364321625035 0.3023337447474339 -0.7466439319663838 0.31577818580076156 0.6641705865726326 0.21532957479634396 0.8105014704167244 -0.1125130140497188 -0.9581368913737949 -0.326769669637315 0.38797277928982155 0.12234306877892598 -0.35993902760447005 -0.8794315166820901 0.4165110767867055 -0.34452069165400423 -0.3297929899619285 -0.7570708138687143 -0.9803042012712468 0.6415028851956321 -0.49620039714099096 -0.0762991405130291 0.7227584106495957 0.4771708140651236 -0.16349030669074915 0.5320380326913898 0.6009825312016979 0.28466444261621104 0.93537117647898 0.0996542365750368 -0.23527322823998986 0.3434719467042162 0.9390217048207337 0.3766412060829525 0.9695494697976981 -0.7428130179331152 -0.21154072999806828 -0.1352594006542971 -0.9536963593830377 -0.329654691945247 -0.021816296588322848 -0.6145993907456044 -0.6324506097168248 0.47475988802505587 0.09633437734416295 0.8820726351351618 -0.5909750462879337 -0.006714104034244661 0.6260508257965423 0.9893011746052494 0.5193939665067251 0.725405286036515 0.32700194826148965 -0.09766870288489704 -0.21437394540856602 -0.0011478984056811914 0.2430929208140089 0.8130902604709342 0.7053401943309612 -0.918660164886518 0.09207503502472036 -0.5788458348328482 0.9864372623937356 -0.4264126199336551 0.11913860918752461 0.3254048228434372 0.14237570338178784 0.194731965790502 -0.6058844255873206 -0.4589284412757815 -0.5613850226104067 0.21492468032956435 0.8273737334488935 -0.3256717013157229 0.45792378144441326 -0.01177279928846131 -0.4549960647342304 0.26029966099766 -0.7908449712003831 -0.7270677846047768 -0.9860417037628735 -0.3253827487890648 0.5978349230829494 +27 48 0.5261587615045911 -0.9972992877899169 -0.900328533205135 0.5384818982433617 -0.64305427791872 -0.3471765860897058 0.4714200534803017 0.3535077587083253 0.9602061014386818 0.1428393170067508 -0.8421510848710243 -0.6054246840399988 -0.15229099141530145 0.5665058721324645 -0.36896637878676963 0.6386564899750293 0.5292205330955642 -0.11604910190040663 0.492814005547185 -0.21407572253252338 -0.46579277214295534 0.3496942673729806 0.7083922151561739 -0.3275062814723051 0.8879531623333956 0.9911280834887364 -0.25045350656340193 0.20260674162220194 0.5283742383758865 -0.8454091834700941 -0.9242264737284285 -0.5844924617856251 -0.9528398921184742 0.6250318604891945 -0.5896278717088548 0.41700871323905564 -0.6883113627729247 -0.9815116859480588 -0.27040625127815865 -0.784768033121775 0.05080738395364692 0.4195367772954328 0.06457453073732111 -0.4990469103859423 0.6004564191991089 0.933808901617496 -0.9632614719637012 -0.5566035039135195 0.2851894181886132 0.8534152190224913 0.1812111713614859 0.43555436942872783 0.3208196470106883 -0.9529890365338969 -0.6141474724841454 0.9273176209825738 0.3973164563893734 0.3788892059657041 0.3638729177695281 0.09599119261668476 -0.948497212251745 -0.2855577470216524 0.23951784097104611 -0.3151233539422602 0.7272590474460034 -0.011922879331617509 -0.05541154260663972 0.3081413890109954 -0.5920331753748016 -0.5241148410516512 0.9686672531664418 0.8676441420968166 0.795331672184757 -0.4614057286646738 0.5649280540087811 -0.3309718012706937 0.6526870848958135 -0.9793923580231567 0.12221872701301062 0.8354113549079145 0.6166931393234829 -0.7168779269870407 0.49028260151865655 -0.1489311807548963 0.7034484439560762 -0.7530045851461455 -0.7082713919107628 -0.5599322125305537 0.3574937192157437 -0.016203302755961158 -0.42395675450912873 0.8283736484931945 -0.7569847378701162 0.3454068322169692 -0.7506776809180815 0.8306789965962511 +28 7 0.5439315077961722 0.8836885551447524 0.6872322135630813 0.9876550143569394 -0.5473786723829619 0.7832216964803316 -0.676586411556306 0.40600712271659467 -0.5337622382374105 0.24174237985492408 -0.43137359975011447 -0.8153442987257224 0.6089495761160162 -0.04728362901072258 0.9707355129978839 0.09319985681888432 -0.05062112545856401 0.4853961316795905 0.016570370889346098 -0.38388994599136295 0.2725538348119958 -0.8820229441916017 0.7326404802388167 -0.17528433094356566 0.6876646887677029 0.09136944986949724 0.3937759821526141 0.8921895641214637 0.5659767735483805 -0.9028199450545802 -0.2249749973081343 0.5508465894464656 -0.6445610903387342 0.09315317744930596 -0.828066994325164 -0.46988908954344955 0.017154262587612212 -0.802808582485772 0.8497711124633112 0.9188287181034931 -0.9390339013685589 0.17351462188387257 -0.22598885887123776 -0.19665339149449967 0.4315197238877817 -0.009873852852360976 -0.40091683443842685 -0.3956646462634712 0.6994822983383604 -0.07750281913945001 -0.6773450081554664 0.335347677117134 -0.38635286150619574 -0.60899830193917 0.06081737675469445 0.8974258421131449 -0.23369693407690373 -0.27225782947649146 -0.827143494235911 -0.10397832691748565 -0.3275390826041187 -0.08854772263912025 0.266507597900429 0.02055803778382903 0.4181460110558832 -0.1530794214635518 -0.25320733538916307 0.8410118893524039 0.990031632919383 0.8606822732027639 0.6425821687526716 0.02743052013893421 0.9996049174064396 -0.48527240771352487 -0.4707025300054113 0.015020345449839878 -0.29153684265547164 0.9079218565128313 0.9905324087846521 0.28749177953767635 -0.9281173476694122 -0.5588168479299169 0.4803915434147439 -0.6227201142277619 0.1454483745558648 -0.7615587538936359 0.2678227820895962 -0.7118240094275756 0.32925078643327144 -0.5775323424026544 -0.5243685771283841 0.359340480796543 0.533547574252661 0.32707508046023026 -0.3927279257494487 -0.4258588942925188 +28 8 -0.37038466031897466 0.6927247330072266 0.1739529744553443 -0.22514538536203954 0.8414053154025356 -0.09116288101086134 0.8793595518272681 0.5192662773189756 -0.6893672845557677 0.8676802083242052 0.1045855598481007 0.6843781892685785 -0.8401892266290794 -0.622146779414501 0.3193560041829895 0.9024478872038306 0.9257629224596267 -0.7984873115374811 -0.18103469779132997 -0.6747289796877771 -0.002484241301941692 0.6514707568824576 -0.45547081992790694 0.39089031537807073 0.3543893075867921 0.2073315488241687 0.5658956123780303 0.13606223164751796 0.5667300232729404 -0.757277736666861 -0.6068377746985583 0.5237513438229404 -0.9947448264719765 0.8634262105973607 0.8674687303142994 0.1450712045628948 -0.3917296386576834 0.489850596205075 0.862043626745453 0.7256553498889884 -0.7144275452014877 -0.5037938297279894 -0.1794566252371217 -0.5146409458780599 -0.3546807541930601 -0.18447076235777726 -0.13780952309385586 0.1219024538862592 -0.24973019357239457 0.8694513531539396 -0.28998556633418415 0.9141839656632209 -0.27823484699961765 0.09686603015788875 -0.8169480496553825 0.754645732912872 0.16874186213178044 -0.7074888304676166 -0.8129951728154929 0.6160320643782482 -0.751363443363366 0.7583243253417624 -0.365642744977575 0.6859017904889586 -0.08786333521363998 0.9628833554711873 0.30610514063475547 0.534223147738101 0.3305062250455899 -0.3634628522301486 0.7243856047091322 0.9984991613830352 -0.0747319191979956 0.11231629446666158 0.26573359429421006 -0.15836628901406535 0.40753323868380176 -0.8273320871820249 -0.5559574426395644 -0.8903641174125643 0.4522790810994426 -0.2655214679368125 0.17099015150832542 -0.9157911891113184 -0.3360023170377504 -0.6092198178440862 0.7387087196950874 -0.11308532312332176 0.29920759846714273 -0.049076098106480615 -0.4277988233876515 -0.2744566063314444 0.5135051637900705 0.851858315952482 0.5709217694061337 -0.1601403348760928 +28 9 -0.20239599990904988 0.5671437821694398 -0.6151618761438271 -0.04618220776768056 -0.8231067418732585 -0.4475602980615969 0.42570267684873087 -0.4642374766081647 -0.09396688923002605 -0.15936830033890148 -0.0793023328864868 -0.3619870809451884 0.7185311917547048 0.2764456221683147 -0.9728169766144901 -0.9655276813654743 0.03775013385730408 -0.35994437727003126 0.6920945927914177 0.40190139578717177 0.3404736186707127 0.11774361194067184 -0.7875022018118025 -0.8849500656916045 0.44937605685395043 0.22764489859656778 0.571117507787593 -0.36657326487118125 -0.23054917597708546 -0.0730660061032049 -0.39558282561866354 0.826689275341431 0.7911877053117122 -0.6731240638212588 0.4726566535594212 -0.0912794710134035 0.054596838168656125 0.05058411220813319 0.5755527956299404 -0.6945607382936212 -0.2939767720302551 -0.19355395852612545 0.27764647896561634 0.6438835717430786 -0.1271216223579945 0.9137087778044839 -0.1599125275159956 -0.29532901849392124 -0.051204737996466854 0.9815607796932813 0.24157509513060949 0.6071639089352734 0.4059406079425061 -0.0535770694811637 0.8280071671789309 -0.7722461863623855 0.32604629385516515 -0.6062453341156366 -0.09197896673427142 0.7226028740617672 0.7036698611671133 -0.2107399704948958 -0.6043408772618963 0.5837387758418147 0.5231788623707787 0.9818767620886091 0.17517527501501684 -0.3520333670651221 -0.7931843242742529 0.3443369286908877 -0.7317139061298228 0.12652278701957997 -0.6935303846500096 -0.003994558025914197 -0.6699435799186915 0.965175395152609 -0.3092302114056307 0.3860773752437745 -0.4966437831451611 -0.6158137252187386 0.5291774890182035 0.6618488573102774 0.314099553619245 0.585091026542415 -0.2885315941391773 -0.3463305014431457 0.7242882972264715 -0.6622758157469268 -0.3723225821655487 0.7772923859820848 0.7500635354699505 -0.628973273615806 -0.4979382564502952 0.6956693844819084 0.6741925709925394 -0.6918521625362686 +28 27 -0.40044005122560233 -0.25707728605615054 0.13542566709923487 0.5614504446535831 -0.3377486253287172 0.9077219677162911 -0.6332035942531531 -0.3589282171228221 -0.988525845148978 -0.486817380178344 -0.5169470502388334 -0.15970247798339354 -0.6366431623035114 0.2993000598646458 -0.26420388769513714 -0.26577116877713247 0.3639057542871589 0.07841984529928459 0.10946223697328361 -0.06253131723510141 0.627989763715719 -0.08757818180302879 0.5199098206470345 -0.061870471596608745 0.8165070223751938 -0.7634482502045803 0.57586870146929 0.033448069085840526 0.5956092371334754 -0.2672513704916295 -0.09877090244794262 -0.9632580740895351 -0.5680387880883451 -0.05869979993792929 -0.9284727878356354 -0.4573160970896608 0.31796916739091885 0.49665038932778427 0.25747216460575806 0.3861724276616998 0.31044883613754526 0.230748789017575 -0.6818737724101764 -0.32653483156140606 0.7137697263053784 0.9904809749831076 -0.4113374825521543 -0.8219892756648626 -0.11166843637072255 0.3628970456864955 0.2816652440787635 0.03916723995813465 0.6007476770775002 -0.8955800620945735 0.8759842079019102 -0.22862028983438787 -0.5938319967795631 0.13006703599627634 -0.8265778053368797 0.12839779601790058 -0.8917480296200417 -0.06737275732742165 0.14464128179659008 -0.34445240358127105 0.7688942480677319 -0.5751618660154818 -0.04033865718141838 -0.557788490207394 -0.2130564620168678 -0.35990311312614875 0.3163388138262524 0.9135823221649464 -0.2689348016654549 0.06523865078056645 0.8091666661157924 0.6611894108099896 -0.636391610595245 0.2337268240334227 -0.3504905399288569 -0.5751214248967891 0.8266901188169191 -0.190755375945582 0.2245986395281261 0.9902680027207447 -0.22445334807479767 0.3289135905534404 0.06888216280235304 -0.7900203233770533 0.12864158418354377 -0.1110129616797717 -0.4015769863801868 0.6574081364094873 0.9584745293341377 -0.9276829097378578 -0.6725955901386471 -0.9342839345504861 +28 28 3.832309085789718 5.715914234861003 3.719582326096405 4.185275961084281 5.411914394220267 3.793348323505673 5.230832338839189 4.045845368788785 5.3893528912064355 3.909351672241346 2.5815019055810744 5.391716248101814 4.736392933955285 4.5251371011316746 4.075935914624271 4.437057062241087 2.7711706659724777 5.332864827975534 3.7512166515218874 3.6535066929949003 3.9526217141174875 5.0383049516560465 4.545914060832034 4.411582643454901 5.964819909523108 4.1366010188236775 4.0072691702179215 4.074764429028171 4.182583799330083 5.544248463460198 3.341941175712707 4.99219571526957 5.285294550126624 3.807556285061217 5.122133073476888 3.8853437153913744 3.679642053399336 3.9082618682035464 4.250170307731331 4.595332123477274 3.9527775060375765 2.2059705847530027 3.361289179652932 4.804202782582868 4.772826803587082 3.6471655586675618 4.965535751923208 3.860359452541817 4.460508711931306 3.4933613619965778 4.07467373622274 4.756710659678853 3.7732896873797044 4.344691950985505 4.873922527395547 4.958492673710241 4.698755026426049 3.666947591305436 5.22472217943493 4.765332316559287 4.45738521685663 4.819496830894906 4.711384837432325 4.8784418170670305 4.331165475199555 3.9566275677391767 3.2701726798086233 5.594200380055263 4.665026953884969 4.392033506418224 5.582308469071591 5.096878831698072 3.913048214143816 3.935087080533993 4.4161052573818225 2.9297545917139365 4.976674616844045 5.231467572104846 4.1054079602052465 4.629995154979897 5.0241640327234816 3.7650098318651963 3.1601309221583547 5.521719784531259 2.751904993176642 4.146735568884036 4.084867884113411 5.499067049944543 4.450909711038598 4.404211217959006 4.158880533251109 4.168953121772768 6.02686622553467 5.710431944723791 5.777108332225094 5.546402285305808 +28 29 0.3752907919861117 0.535045738020371 0.13867821320554996 -0.6256880307542494 0.8621954386777322 -0.09747259695207422 -0.5880596173343675 -0.034128575117921 -0.28263295835774493 -0.7253001147851388 0.03376697072240398 -0.7402725398956675 -0.7010285548160555 0.9831658464815305 0.6653626782211703 0.7026701812445189 0.23193777024957796 0.8557268101916777 0.21299521570830215 -0.4120658399320629 -0.9219288139462949 0.16455234149041953 0.3012843633634885 0.051033133555226984 0.8429887465809613 -0.17104946515333386 0.1400751184350999 -0.046596377931733324 0.24139924764342258 0.8822623743594693 -0.7305889975716593 -0.3363382395026606 0.7399789703787634 -0.16835557800051903 -0.4531921915486301 0.08836864988958792 -0.5773499057510378 -0.21642989473674668 0.12717723299961725 -0.29564238385041786 0.896320216022598 0.327472959853663 -0.6681707170332509 -0.4164077957657526 -0.2848050163226874 0.30106171493500367 -0.8951565104570272 -0.07633794953829476 0.5855177458683358 0.1774603352678339 -0.7079807429705753 -0.5208845439726362 0.7755681930324037 0.7327330930938731 0.972092094699406 -0.3607062946942683 0.7896600587087907 0.18572922673543313 -0.7057197958048516 0.4548809090140671 0.28652093075517215 0.49310635869919883 0.6741123792910999 0.7941542249935869 -0.6866860106899346 0.4001793157073601 -0.6399199010175218 0.8347118310303769 -0.1861361727411759 0.9175792457833416 -0.46074578131275334 -0.5287069081776619 -0.04866794168036814 0.6445222965358008 -0.6477510980677603 0.17095254371372492 0.9188725984834405 0.5851937482830107 0.5318236038352648 -0.13709659497704263 -0.24315609037357655 -0.5310179558469084 0.5265695056292972 -0.3311428644127874 -0.2681143475969343 0.6284643810438519 0.5151337733461345 -0.04502195227977235 -0.5738871135710766 0.6241083813760544 -0.12101300700607709 -0.09761518547772274 -0.6525996143347479 -0.6528175711823667 0.5744043998437505 0.0997833733339819 +28 47 0.6980078676337131 0.779180270156421 -0.12380201341716424 0.10537731429223562 -0.9992915865982124 -0.09344560334958385 -0.18894024663167563 -0.6585191002902802 0.5503655832244567 -0.655142100634077 0.5972927151422756 0.933974375914939 0.17405171723178658 0.46596006393121914 -0.21908526420934127 -0.1692240039312889 -0.3347625904246274 -0.9520732835099994 -0.9178225330206018 0.4885629811495158 0.13829796110966353 -0.9165431024995201 -0.12853722850274685 0.4706628535018078 -0.9694279528322349 -0.38509745640676996 -0.40038444976372123 -0.6439225666990982 0.1046026147496757 0.527210634110129 -0.9117337524699691 0.46940665599858633 -0.32603255124046493 -0.30328325548239543 0.11768023862825894 0.5960302965994653 -0.3512995840366331 -0.6104401702249851 -0.7391734617581094 0.11922386864516255 0.2639805343095334 0.4960099676508991 0.3899712211266657 -0.8512196796771265 0.6257832864221013 0.17526455039559607 -0.7885335291624982 -0.390201839738594 -0.5931821658997862 -0.4992949559621269 -0.4859858088476785 -0.779625409256655 0.19920974696838956 -0.0936287273391494 -0.6553203830238203 -0.18115607123895816 -0.74585660612066 0.5151440924658379 -0.5270624988656427 0.8020676584697679 -0.6101582926276066 -0.4942017407077479 -0.5916650406186745 0.8387182314091275 -0.09141165153539355 -0.3396125938104704 -0.06911982068132838 0.49344451940876066 -0.7043518042709314 0.023891439080825805 -0.3986320137786912 -0.847682198925138 0.2384480501838273 0.35785194987567426 -0.3537690237697373 0.5068358926624483 0.6122172675370652 0.9851758851478574 0.37154144607337836 0.3127640559537772 0.5085614261638476 0.3827699782293714 0.833819627811583 -0.4746806909665173 -0.6241379483097347 -0.5468365571822154 0.3881503984203156 0.9088005100380114 -0.7833734661369685 -0.8700425533048297 0.03107968554846252 -0.6342504273292227 0.47389054928317265 -0.6229651304692589 -0.6989714176878823 -0.843461965545653 +28 48 0.3269773441514374 -0.5339653043846868 -0.3595030309985645 -0.2413187424033303 0.19758843566076068 -0.3246550707278746 -0.8871636795914815 0.9894774770570092 -0.7778259523101168 -0.312940651048216 0.3832484445692752 -0.7093143608538766 -0.1221693716093335 -0.861328962783017 -0.31712019677802306 0.3121721478166166 0.4111294372515455 0.08573182430599413 0.842768234573529 0.9796920300331824 -0.8552719071391224 0.9715803461450458 -0.5775113489467889 -0.5163401701989208 -0.7873991623153842 -0.8964722041893556 0.6809982633914635 -0.7338698196786599 -0.4204875111125175 -0.9921786581448773 -0.09694942091934067 -0.09471541211072232 -0.09915860320503245 -0.9821074393249198 0.4189470621265432 0.9190355295294945 -0.53737132846793 0.4783174641866179 -0.0697670748622008 0.8843353906028852 -0.3812598935213236 0.2225820802190206 0.41716664363796285 -0.7492829932785459 -0.8128009227779953 -0.2463491793924848 0.5187831816397674 0.5356464583295291 0.6109823715682217 -0.2518961789164835 0.305819623992432 0.046873049546845014 0.36706780514228243 -0.7287103975490301 -0.0504670207682516 0.3670528645620683 0.8494147729666686 0.2388077621788962 0.8761986208245462 -0.4280265061058608 -0.2240743535898393 -0.8201353820848296 -0.9556888284469098 -0.5509132963302377 0.6507295013699619 0.16125463750229807 -0.38469533999203964 -0.35116556808905286 0.7131267700555761 0.32477872374737293 -0.7494146948041178 0.4930438948546705 -0.08555694350084697 -0.7790636658526668 -0.336289522863515 -0.3604285203408968 0.7480734227739361 -0.2875429943552956 -0.21418786760750996 0.06888039251987355 0.5374993927368628 0.6858875468296695 -0.025062387067550596 -0.24961227886093162 -0.1439482604656841 0.8489600655165912 -0.6552788125459983 0.5017394919485467 -0.9800062723824936 0.17470868582644838 -0.6281055238643931 0.4365310428916025 -0.9480524070645684 0.3094167902433853 0.9900834246838193 -0.6558804816764967 +28 49 0.38165595846099887 0.7102497650440815 -0.5336748787328627 0.7165440087506261 0.08127821510324851 -0.1563695327151895 0.1841292066127329 -0.09533622762952532 -0.8218118830612124 -0.3715227139758246 -0.15167430218524713 0.5755416518274998 0.6928850788537326 -0.4584500959385911 0.10368490203527303 -0.15370015683676885 -0.10075956909337136 0.9734135668893251 0.41251995835371 0.24528088322163333 0.5108047027761895 0.44144288423296607 -0.6010645188296464 -0.928126902790146 -0.6314503220484968 0.4071108089106992 0.009211264778271167 0.38410685956707225 0.9523928099172105 0.42915553051944366 -0.004769216141564447 -0.5284265734322535 -0.3066571218418028 -0.3650263592905456 -0.04082760130838414 0.287050688239219 0.8027584406398385 0.22761858101266386 -0.0335542688673276 0.4080125671464794 0.12047025095607844 -0.056377884995275185 0.1432052166761164 -0.49463148641530585 0.895628331747234 0.8046725136159125 0.7002041303062381 -0.697350079309285 -0.5647217394824391 -0.0197206050375327 0.11372033044586005 0.576030306586147 -0.5557809981652841 0.2737792711288771 -0.25054489168980276 0.7313787323859606 -0.33813236331252594 0.17305121285239733 0.2700882976131478 0.9100560587423752 0.4242910218395781 0.9282592359615025 -0.9958171096522028 0.6991428892002451 -0.41360818567460145 0.07029214044420962 0.43920459237955645 0.8246794348561755 0.10780360526899879 -0.8154442556790411 0.6059757442385356 -0.48534066793187103 -0.6389993491953461 -0.5163987669893846 -0.6580890866671729 0.007823098259699623 -0.8358818909859027 -0.6925812965932354 0.26642464358090456 0.7870141053100494 -0.1243925521695648 -0.13358957187089904 -0.3410187872065906 0.8299630716205952 -0.43110022630449363 -0.04509206091114337 0.2955991602690391 -0.7936488512175672 0.5372330044331319 0.5346204772344016 -0.3534273094722449 0.1288229582425 0.9382387271756236 0.9410025689462951 -0.41258726263032 0.751341900645071 +29 8 0.32826624531155946 -0.06669850337261574 0.5070314499108761 -0.6827061768788594 -0.03301797763603642 0.05091021700154652 0.23236301522220315 -0.39931035698587847 0.4681742459066487 -0.9650295325479428 0.02256568431964623 -0.7734801711623962 0.09864503007452607 -0.3959723699814153 0.6822134133708433 0.5772190271510005 0.7039634773713674 -0.8810153671003615 0.40117765968286667 0.0017818598259455865 -0.19136274441435863 0.01604576472102881 -0.9676264568980901 0.3089207723755685 -0.6180116097741721 0.5228775860062798 -0.9694261889348776 -0.24114671159743528 -0.8702189358814314 -0.6600916372968326 0.1883487289903727 -0.4340836846013105 -0.3756982207036028 -0.6453912529691017 -0.1511127960599039 0.010559903941030901 -0.294056138027849 0.639690990026804 -0.1790612097134925 -0.7698667120314802 -0.8559484048831836 0.14175036340526947 0.6279199870987895 -0.9081996369916283 0.2763848222002414 -0.3609969293783353 0.39616455668842465 -0.37277935225251535 0.5140155335963248 -0.6078078171510741 0.9033262864086833 0.09561157342385673 0.18371012047561486 0.7181980761050133 0.7043274615298236 -0.8136702531646776 0.5838512528094195 0.9433514296265684 0.27874391551169064 0.709881225764859 0.3953013277985644 0.25719144876004574 -0.6927313762637048 -0.9581561616960039 0.5445648441017379 -0.41479547292560737 -0.3173869261376081 0.3581588846970023 0.3965524150379178 -0.03940386661425377 0.8435730008964 -0.7583852062238965 0.5485065307324037 -0.7547060856035279 0.17284937868754469 0.8637116754232106 -0.4841816501806451 -0.8189641990954164 0.05651101276286208 0.0780702178284638 0.2733761298393256 -0.18961256335607102 0.5210905789790277 0.5326364346393344 0.6771427107648229 0.9778504348148509 0.4101351489210021 -0.2580360248572251 -0.8129618635299964 -0.1766212351258003 -0.6330526131618026 0.414173790293519 -0.5644981727308032 0.6868133208936094 -0.42022218114819676 0.5101808144542084 +29 9 0.6782938284807194 -0.8398477041013126 0.012242646632979248 -0.7090015415956603 0.31809140244823264 -0.2339139461375277 0.5136449864658454 0.950463960091084 0.8299677333239481 0.49115746254639925 -0.8270562837724895 -0.08651736844029645 0.7452016427681918 0.8774631941721582 0.629651728595608 0.7852129498851588 -0.9327402099733915 -0.31271073563236373 -0.38430029220413897 -0.47353139750896744 -0.4103027052941477 -0.06774368551583443 -0.5056070880600665 -0.19881979262654959 -0.04261720887959353 0.8393884816800865 0.8883905589998846 0.47761982017800086 -0.6965486795382148 0.3615773883343396 0.34949123121519055 0.5466755483279064 0.3760942014208535 -0.20642215112595874 0.7397106678853136 -0.08437807680332177 -0.20037523159414783 0.13640521994188837 0.7164989019057217 -0.46049757243358025 -0.6920857369415814 0.8620982200618963 0.6498414718299428 -0.08570925754778225 0.2945268103751779 -0.569949555936905 -0.5093387877036617 0.7302986066437451 -0.12280811957040605 0.4035535645798507 -0.6499843299731367 0.904309079881187 -0.6216824775000775 -0.4115877036924642 0.0781792770198404 -0.5932931487530855 -0.7665438496733024 -0.4675044442073786 -0.9715030411432195 0.6082390984362946 0.8414078024622631 -0.5463560088336281 0.14275750316385305 0.2883843998644744 -0.8515958529225565 -0.137278269134951 0.8619466233265947 0.6674436958764387 0.4027676173379433 0.7888910500977357 0.8792821065951657 0.10498258621019141 -0.9532644536458794 0.2525385209438158 -0.11305981291957123 0.597418282400213 -0.3773874997752942 0.9972504162953775 -0.036473775959597665 -0.6530161334354743 0.2822788941667267 -0.19733164755682742 0.7251616663618086 -0.12689302254752577 -0.028329947170775194 0.7801364561765836 0.6002483009003141 0.278414872287559 0.7861141122236637 0.552870073062661 0.11990155135970104 0.6456102703971018 0.9296166434757267 -0.8637628929355936 -0.4152272558642274 -0.25342754934256884 +29 10 0.3375342078584045 -0.3501803307806328 0.800129952024214 -0.20416925133110286 0.2425315140642692 0.5422715961829014 0.6621242079066019 0.832373913948117 -0.11345362508962387 0.14799871634346218 -0.9293272447244818 -0.13083438884073417 -0.06681321666006723 0.4000639523475722 0.5669376005206608 -0.9503459277550688 -0.9736045650542233 -0.09225783885320227 -0.5921604376040677 -0.5789127032646131 -0.2595968967540032 -0.5242778610068974 0.14374454881961318 -0.5784081717769212 -0.6156714232386344 0.9869377002160797 -0.47531280335163917 -0.028202399432060377 -0.35437684411853887 -0.7212533387085924 -0.009798450206483178 -0.9930306026916651 0.599827797595277 -0.20033512096044515 -0.769890481648587 0.16850286810104764 -0.0302519848906746 -0.499041478251556 0.228138012987112 -0.8481111337655021 -0.7844433586405242 0.9312929003829225 -0.41547279631740497 0.5061551409205947 -0.5649420600655581 0.014657241991628878 0.9688544250842537 0.19887821590921795 -0.4366241103985504 -0.8316203271536204 0.21752278348102805 0.25612159916222343 -0.03866387682843864 0.9144289582664038 0.3999132497395026 -0.6881710339620419 0.4490882897194717 -0.6357917112386824 -0.9894333397355359 -0.957184348681188 -0.19363356738880078 -0.09470061644709493 -0.423062042755999 0.661266103697818 -0.19490509512173593 -0.08617023037787463 0.7551004281091478 -0.2142714744520362 0.8709941270552106 0.02257545518742976 -0.5061553505735163 0.5845368398398183 0.26257017218977285 -0.06253960436622608 -0.46519378180017235 -0.6794767644326132 0.19893458119790375 -0.2581028926599005 0.4063991856867102 0.8796064180481358 -0.30278156714547877 -0.8227607009725759 0.37835705506031303 -0.5489545975030132 -0.018757076595718125 -0.7759774815850766 0.051724544949325546 0.6751082584278947 -0.03551450018509361 0.7608280909192648 -0.2712955807327684 -0.5594341199684039 0.7022002007683956 0.14704972132144878 0.11554717523184932 0.49759298082051573 +29 28 0.3752907919861117 0.535045738020371 0.13867821320554996 -0.6256880307542494 0.8621954386777322 -0.09747259695207422 -0.5880596173343675 -0.034128575117921 -0.28263295835774493 -0.7253001147851388 0.03376697072240398 -0.7402725398956675 -0.7010285548160555 0.9831658464815305 0.6653626782211703 0.7026701812445189 0.23193777024957796 0.8557268101916777 0.21299521570830215 -0.4120658399320629 -0.9219288139462949 0.16455234149041953 0.3012843633634885 0.051033133555226984 0.8429887465809613 -0.17104946515333386 0.1400751184350999 -0.046596377931733324 0.24139924764342258 0.8822623743594693 -0.7305889975716593 -0.3363382395026606 0.7399789703787634 -0.16835557800051903 -0.4531921915486301 0.08836864988958792 -0.5773499057510378 -0.21642989473674668 0.12717723299961725 -0.29564238385041786 0.896320216022598 0.327472959853663 -0.6681707170332509 -0.4164077957657526 -0.2848050163226874 0.30106171493500367 -0.8951565104570272 -0.07633794953829476 0.5855177458683358 0.1774603352678339 -0.7079807429705753 -0.5208845439726362 0.7755681930324037 0.7327330930938731 0.972092094699406 -0.3607062946942683 0.7896600587087907 0.18572922673543313 -0.7057197958048516 0.4548809090140671 0.28652093075517215 0.49310635869919883 0.6741123792910999 0.7941542249935869 -0.6866860106899346 0.4001793157073601 -0.6399199010175218 0.8347118310303769 -0.1861361727411759 0.9175792457833416 -0.46074578131275334 -0.5287069081776619 -0.04866794168036814 0.6445222965358008 -0.6477510980677603 0.17095254371372492 0.9188725984834405 0.5851937482830107 0.5318236038352648 -0.13709659497704263 -0.24315609037357655 -0.5310179558469084 0.5265695056292972 -0.3311428644127874 -0.2681143475969343 0.6284643810438519 0.5151337733461345 -0.04502195227977235 -0.5738871135710766 0.6241083813760544 -0.12101300700607709 -0.09761518547772274 -0.6525996143347479 -0.6528175711823667 0.5744043998437505 0.0997833733339819 +29 29 3.730085441389165 3.5786657429282256 3.2491913105772765 5.666136577987103 4.073322691039186 1.9971738695970154 5.1565685896343325 5.683856695494361 4.493449804143475 2.7051606051924275 5.240248812797365 4.706646776873047 4.5663839367558925 5.919216188502297 4.708674919730447 4.610526680257367 5.983215227226417 4.208614240376626 4.122294478080616 4.649762977593918 5.154994419436652 2.4872468311857343 4.5534724757445275 4.059077719313019 4.61571775628906 4.883633205427916 5.144161604793933 1.6339853199653698 5.190989197668453 5.779958131281099 3.9330086571928486 4.464817274978185 4.875425755475401 2.9781298980043456 4.541150413389641 3.5511171686918876 4.6418087830208306 3.5954104159586002 4.071485798459736 4.0062237169831505 6.844159912508809 4.978120633558472 4.1852623089651635 5.13855271809813 4.032427945831832 3.180791609963334 5.234010789766241 3.459336773563594 3.6887513961308134 4.645305157818301 4.62160914213314 3.0625853683505104 4.7991354059570925 4.7088016440212055 4.201734701366288 3.959464095196429 3.910679413594176 5.141120228689315 5.176178289523205 5.999287172159532 4.056540309968657 3.7684525770702564 4.513988269901174 5.589693151896483 4.212086254292069 4.301769418422091 5.133998619719895 4.4335287286217575 4.714832053170474 4.235342516153293 6.206453980949833 5.533237269957618 4.304521832564221 4.6833711750352895 2.6618697568245073 3.9429969924952104 4.906746949390837 5.335423048406178 4.168103197261853 3.1685945194101395 4.073254747333342 5.217912583243092 4.527662252985888 4.858301320162182 4.169255200509478 5.922986597816245 2.854158474958452 3.754776572126808 4.175115852449508 5.159785750000826 3.162021349907922 4.244312961058469 5.770436194917171 5.696822675327122 4.093601572632168 3.7696314493999576 +29 30 -0.13949589290482312 -0.5573546498377053 0.49537299882274555 -0.9009996392743156 -0.5669065826032778 -0.12929500124931748 -0.4953066188375761 0.9621762987002316 0.4926250170715687 -0.07692876891625744 -0.6772263119035686 -0.34416830399892007 -0.9702521331812266 0.9432965700722873 0.32967176876481474 -0.3040904678573093 -0.9127871591981611 0.1431626476586454 0.5134387292411222 -0.4311123464547548 -0.36040022160213914 0.3404951835818577 -0.717267678941411 -0.7522072110327449 -0.43225008575899615 0.7408035745294548 0.3721301742696197 -0.3348119238441736 -0.7644392853744795 0.9168592370886686 -0.6418240575034753 0.2487922712527344 0.9420621806715372 0.1767857562440791 -0.09810511445405257 -0.96841178977086 -0.7876554851965845 0.196416620138679 -0.5355039583566612 0.12732730984759266 0.8387163228501775 0.7101592840661877 -0.5754664825170022 -0.9802979073648161 0.5269420364409734 0.6539175960466506 -0.8969223543719993 -0.23148153093670176 -0.44200632841261966 -0.07239308835964064 -0.7015453766651591 0.7086718926276367 -0.552568423868049 0.8257397398335851 -0.12386801512821632 0.7854242091512831 0.2792570556266125 0.6187321329300515 0.2988107119682688 -0.8757201151981826 -0.45207274806582887 0.8236463499852769 -0.4374241476367078 0.7028978121120681 0.4542362007318932 0.9305596397815983 0.5618595245031868 -0.4289544793443927 -0.5970233634311217 0.050071682936445594 -0.3135106472714826 -0.6778302182388476 -0.6356194865204934 -0.5361671218793604 0.0467269215433086 0.15088451189817165 0.8602360554463995 0.9100440881054559 -0.8208287844584352 -0.14917397054141124 0.7081073988283897 -0.4581969187445838 -0.12976497886692528 0.43080864885663295 0.5305779722754238 0.7804622831628423 0.13043154591149753 0.5137741065833832 -0.7465785564644198 -0.593655079986736 0.45775986200514196 -0.4199958412873841 -0.7554016433520678 0.5075241165733893 -0.37145227673779835 -0.012462945855892471 +29 48 0.5262182538952853 0.3704115769605538 -0.44476391869340315 -0.9880462285013345 0.5031699414202282 0.0465187265644309 0.8501222597652276 0.6469361572541601 -0.7560557832196284 0.11504052714931468 0.8904687384610657 -0.6259522519564906 0.44367520546834704 -0.7341197746913894 0.8575160667327539 0.28212814467506964 0.6228769364494815 -0.6698490111462423 0.3639475639552503 -0.8434261675643873 0.8888332646262729 -0.8330179821928145 -0.9182431538198748 -0.7987049431081732 0.766586863962629 -0.2070453154679328 0.2783443566551791 0.041079928476611016 -0.3389874873316021 -0.7898978847803928 0.26690411456887 -0.7167499285281649 -0.5333247209353567 -0.3678887248417655 0.8753676069342236 -0.25980315334738147 0.9260129981649596 -0.30003310212581824 -0.6236832694700365 -0.23686563729223598 0.8830542725639154 -0.7505798607547589 -0.034213762419145644 0.7396129391924973 -0.9032393383706216 -0.6405917723320713 -0.45417478265355604 -0.3246535071928398 -0.3027582933248081 0.31137007325950083 -0.026366777114185114 0.1917707278092129 -0.9488898926482483 0.23426498216557246 0.2921935215737872 -0.020918384186398464 -0.07414993843336615 0.1808967616904391 0.4838742443790873 -0.7236846751108044 0.05075528170156973 0.5400460965413094 0.7599218779510366 0.30820950719065987 -0.031827675855803816 0.655905616311885 0.526873073580397 -0.20504539877432393 -0.844354356993994 -0.2439484734131372 -0.7368272199729304 0.9020298214382081 -0.7458743054429648 0.9069864582280323 -0.485404687223592 0.045981567570201776 0.5213193626216377 -0.346634563298192 -0.1513797407835178 -0.1106734704417478 -0.6982843763484805 0.951104699769749 -0.013598197897478848 -0.7523628073458397 -0.49566164260149526 0.7225607060051942 0.2337958171553307 0.750744163776536 -0.09778045549200587 0.2380097998490569 0.3908539101655213 -0.5234139067751311 0.1986605589163064 0.7914409631216472 -0.4483214588135722 0.6386054054122208 +29 49 0.06532457572552874 -0.001159063441841468 -0.030624375662567482 0.07055875174370008 0.3642173366649075 -0.35578603256554486 0.6022987110253151 0.33201394561617015 -0.8448512778902029 -0.08922816604190231 0.6950761074616179 0.4148774941858695 0.5558349584481501 -0.8265902914023158 0.3305230888901223 -0.3939128261496081 0.5991840010161869 -0.5130307442318938 -0.959878889668683 0.2829920365369514 0.8780065380025859 0.04572600395912718 -0.36334967671559903 0.07919636835270993 0.44569333395762256 0.859889476422635 -0.8873718702144944 0.16274956826324405 0.6514350334666628 0.12567697750470508 -0.6416426454233486 -0.5849239633896928 -0.9467877662054851 -0.8025634214650954 -0.17110504673554172 -0.6234278522184429 0.12350231333448414 0.6573796231543292 -0.32672106664969935 0.7143101192162229 -0.7458768350453013 0.2601279751668317 0.8125147279629299 -0.16130628042718342 0.45909505933261774 -0.18944940726545312 0.6582001858118705 -0.3639131506806115 -0.6011639511835003 0.7043066683119135 -0.1625469587238968 0.11210164598770644 -0.9814831197699734 0.03126846595708299 -0.48804845551781617 -0.15263125804489963 0.06470724772274705 0.42947121094988305 -0.3435304017390963 -0.527181704709087 0.567499752650044 -0.734350184490481 -0.4904770560268399 0.9733791895360557 0.35733189867372395 0.4321819391247921 0.32874934867003813 -0.07966787649003138 0.7259742452777569 -0.9537540528980604 -0.7699497106701447 0.548853991493236 0.7901064044926607 0.8709257280439293 -0.3234514008136189 0.5214712774309662 -0.61460858435219 -0.4879784984200015 -0.9264344652136414 0.5000921507633751 -0.5000261651739188 -0.23523922635745342 0.8662902481943959 0.8825766216580866 0.9532094951472216 -0.23913877077007362 -0.4635470364134482 0.9214508003115953 -0.40432719464643907 -0.8368637985156162 -0.9581412679149379 -0.19347206764716152 0.8282353565482863 -0.9683987272307448 -0.4803872345839644 -0.39242194745909464 +29 50 0.3755927759338453 -0.12027449025972903 0.3209026547931628 0.7339968099839225 0.3865761095498066 -0.059665063300769594 -0.5622907697387234 -0.6274732396143021 0.5665299573207456 0.016434860298829346 -0.547916766506817 -0.634469919015215 0.014246085298779576 -0.7043054412454692 0.17264071969233186 0.38141548934371405 -0.7188181210136464 0.272763956201318 -0.13522802619075347 -0.7445860122859311 -0.7412680632942477 0.025996527411633608 0.3974526136722343 -0.43006272248051114 -0.09566115541755282 0.029005083741502347 0.4728694025868019 0.26505076537965233 0.8609264354168629 -0.8317130367255641 -0.4459093728319816 0.48642502212069627 -0.2555942021777404 0.26522667703550296 -0.41871664862355695 0.7305568324246825 -0.9603700205907686 -0.40781023505784963 -0.5120235642644297 -0.45826014937471027 0.9432976878937696 0.010602251427694442 0.057963603402087616 -0.8577326531695073 0.054488144290045115 -0.2696884319452708 0.35016947286044475 -0.6895575527872133 -0.5791346441591123 -0.6699175835629831 -0.5754627886732764 -0.19560205010368148 0.07825054372930862 -0.5001575324731511 -0.46109094469833023 0.5102563961283577 0.8009472403083355 -0.8811697050778562 -0.8490339231657102 -0.676961281796564 0.3843247132934451 0.12178577586498363 -0.2590837072283909 0.8041850090390819 0.10978788407842677 0.3001758194000097 0.18419186895634776 0.9793279702072746 -0.18298341539112783 0.3037075177141133 -0.9515834540123378 0.824004510340443 0.27019537953581696 -0.14625844155937773 0.15995262931409404 -0.4545222467034773 0.5940384323060777 0.5332005342353197 -0.7001335308842305 -0.1673807072920963 0.5827761774866385 0.9691175417268669 0.4540562091432414 -0.7316649792105938 0.5641271223176472 -0.10251185625029624 0.44739841057135266 -0.11860493486235546 0.44928088304424163 -0.9457661349732203 0.1551864245914083 -0.6248863377967444 -0.991141774478022 -0.2762520696738051 0.6006311386204783 -0.7380708840920465 +30 9 -0.6434675725793186 0.03666219059888376 -0.6121221785476307 -0.4832468920929658 -0.8919022546350435 -0.8072812073436886 -0.6976815436691663 -0.5903380512930312 0.3815038824087442 0.7411661351820293 0.1686055615474953 -0.185625624712761 -0.5725921978053037 -0.7892006080890528 -0.8024800861439443 -0.7375929569796233 0.4119408305818162 -0.8855994571846437 0.1647024418841574 -0.7252372929615516 0.2306994807584657 0.48630865635129794 0.08449769252319062 -0.06564363216453994 -0.8793544263124957 0.5872466315227334 -0.6168572714855403 -0.9982329254340983 -0.6250821091866898 -0.27550363328344285 0.4008149234878968 -0.467281292881806 0.7099132515362714 0.44329983447899934 0.9354555849260513 -0.04925252400283475 0.7457247084237122 0.8668637373860095 0.2363798747338859 0.5943821254033419 -0.3959962146862195 -0.2160119580425799 0.1052887890425338 0.521782107852381 -0.2190543047566842 0.731234432797639 0.5557988017413356 0.15157934100602577 0.2203955762850358 0.9556689789123738 -0.8305861834004216 -0.8598922721696611 0.31957986072749867 0.35850423651534435 -0.7842119395487095 -0.8671342049644586 -0.270111495077787 -0.2575707461617607 -0.41595981362112755 0.05238551101352562 -0.8399307533853659 0.9021147115115549 -0.4466992795092166 0.3539712101347876 0.4065650131773222 -0.4752320509468253 0.7161372160569752 -0.8242058873090468 0.0853053314975385 -0.5531266254988618 0.4722226422327196 0.2203711290518784 -0.9788041020832083 -0.3533784043498134 -0.2988141473627608 -0.06295658892745326 -0.5560865883855226 -0.6354246899642673 0.48054995376303045 0.776491671661707 -0.41721780562640176 -0.43395633426595204 0.7982419458919272 -0.34800258715196963 0.1568012475144993 -0.8169916522766425 0.03474759222389712 0.4950338251341635 -0.07290711845096975 -0.9338050389604595 0.1257417587159806 0.06912185302689622 -0.5657886570109316 -0.8674407196358185 0.4047921106648542 0.03313226670771585 +30 10 0.7931030723073209 0.8397193095149333 0.9212587862755606 0.43377790426575147 0.19724205263293548 0.44174882449577746 -0.7846632463173131 -0.7529157149447605 -0.9142479063153706 0.02749174735955151 0.5795027488324453 0.18558192672141405 0.9936297308550903 0.4214525402700282 0.7374062396438703 -0.42394457301568345 0.26502058135414397 0.6658265388938818 0.02241401782195851 -0.9568861402821405 -0.008308931262047015 -0.43189277910911517 -0.7224723934935187 0.6510107572296338 -0.3500995010127266 -0.34041911194081687 0.9820246142839213 0.1817545755665202 -0.2110603562200417 -0.6094705545437569 0.8336164802001824 -0.9851751473831123 -0.831177596581613 0.3360837278181492 0.42102203750768497 0.972553040516897 -0.09175310755764232 0.5746684523974146 -0.6793711069458797 0.09030205135100244 0.9507478322129894 -0.06273045927654497 -0.575924312370097 0.41988310461745537 0.8498791969160375 -0.9603177817987996 -0.591785717742864 -0.39825155493802544 -0.7668556950977343 -0.28090175063360845 -0.40596122562365866 0.4970494571026407 -0.8222464452027418 -0.9389707162359835 -0.03418757364711311 0.09466932138231843 -0.3371307368705949 -0.5923803687963975 0.4901161808015142 0.16539955518306027 -0.2150625893393734 0.6672162296724671 0.6634103754642777 -0.9922842276140227 0.4417618618977859 0.8565926181933399 0.6284235036804113 -0.3231884008870016 -0.9985879892530174 -0.8153483817130516 -0.03505399669454867 0.46301290736363865 0.3436842844171142 0.8152614495277777 0.883123631552061 0.819107811798089 -0.05786642045398649 -0.9573336227015921 -0.4665912772295193 -0.9413631075527251 0.7526429776593442 -0.20156155620205185 0.6067622157213437 -0.9356798484866597 -0.5025680736934517 -0.784947723021286 -0.3950653459589024 0.028286521253741093 0.4543280419020588 -0.8497912743365632 -0.03473145084714213 0.5908376259635615 -0.8233877869314727 -0.03915890033516223 -0.06950680886325555 0.5938108598369423 +30 11 0.04228563882895586 -0.07173996026786567 -0.37132003867577046 0.17695820807891982 0.8955204030152153 -0.7915500155101374 -0.3505439115345952 0.5145062622500023 -0.6655999714971284 0.15781434439208608 -0.3193525174314107 -0.8829360893798246 0.661321084439535 -0.40286582827675366 -0.4017740072655025 0.12168148822810698 -0.09521002503268083 -0.5133292877065962 -0.1652583232125704 -0.7143487136967908 0.8542683751349271 0.7227423273968043 0.6558817423762191 0.749515109689556 0.706385376837521 -0.4048494059524148 -0.1849768537644647 -0.881708065278221 0.5259945104407147 0.5358183157716492 0.9325127638268602 -0.08123411606207287 -0.4846884703322616 -0.8433805545944388 -0.8733024119970856 -0.6967430988646448 -0.44049880603238467 0.137950545054089 0.8413342215175985 -0.6459491672036799 0.2506328138849372 -0.9205476063247326 -0.721398306138533 0.03463959761120794 -0.20766730806007128 -0.9747468854943286 -0.7404091771811856 0.051527414477850364 -0.9096207793772595 -0.009970665837966353 0.17275217599229786 -0.7330408223585163 -0.6480987880602171 0.18557146874101815 -0.6125282722530716 0.616030624447327 -0.84197138069478 -0.14362060111720876 0.10038743311197518 0.8047106561312947 0.9042908285225639 0.4315178569705489 0.18799697130054693 0.16242035158453683 0.8321978407789656 0.4226397067234564 0.8367461091722088 0.2069041116719914 -0.4740558221774498 0.9123571238748702 0.3345304803112914 -0.3967259158346119 0.2625134276194867 0.4095493567534856 -0.23665729715128658 0.7175954746125284 0.5594797862795102 0.9046096388176634 0.19798806985278938 -0.3413352615260761 -0.7558302362518161 -0.02406597081117856 0.32362888960108793 -0.7057044927095786 0.6363717708463681 0.5628138520806707 -0.75333547348641 -0.8595721040444702 -0.6808168376707193 0.17448851686349465 0.2976738411216755 0.827208845521725 -0.4904657940600483 0.4376695075880159 0.3169457532659463 -0.3961334419193754 +30 29 -0.13949589290482312 -0.5573546498377053 0.49537299882274555 -0.9009996392743156 -0.5669065826032778 -0.12929500124931748 -0.4953066188375761 0.9621762987002316 0.4926250170715687 -0.07692876891625744 -0.6772263119035686 -0.34416830399892007 -0.9702521331812266 0.9432965700722873 0.32967176876481474 -0.3040904678573093 -0.9127871591981611 0.1431626476586454 0.5134387292411222 -0.4311123464547548 -0.36040022160213914 0.3404951835818577 -0.717267678941411 -0.7522072110327449 -0.43225008575899615 0.7408035745294548 0.3721301742696197 -0.3348119238441736 -0.7644392853744795 0.9168592370886686 -0.6418240575034753 0.2487922712527344 0.9420621806715372 0.1767857562440791 -0.09810511445405257 -0.96841178977086 -0.7876554851965845 0.196416620138679 -0.5355039583566612 0.12732730984759266 0.8387163228501775 0.7101592840661877 -0.5754664825170022 -0.9802979073648161 0.5269420364409734 0.6539175960466506 -0.8969223543719993 -0.23148153093670176 -0.44200632841261966 -0.07239308835964064 -0.7015453766651591 0.7086718926276367 -0.552568423868049 0.8257397398335851 -0.12386801512821632 0.7854242091512831 0.2792570556266125 0.6187321329300515 0.2988107119682688 -0.8757201151981826 -0.45207274806582887 0.8236463499852769 -0.4374241476367078 0.7028978121120681 0.4542362007318932 0.9305596397815983 0.5618595245031868 -0.4289544793443927 -0.5970233634311217 0.050071682936445594 -0.3135106472714826 -0.6778302182388476 -0.6356194865204934 -0.5361671218793604 0.0467269215433086 0.15088451189817165 0.8602360554463995 0.9100440881054559 -0.8208287844584352 -0.14917397054141124 0.7081073988283897 -0.4581969187445838 -0.12976497886692528 0.43080864885663295 0.5305779722754238 0.7804622831628423 0.13043154591149753 0.5137741065833832 -0.7465785564644198 -0.593655079986736 0.45775986200514196 -0.4199958412873841 -0.7554016433520678 0.5075241165733893 -0.37145227673779835 -0.012462945855892471 +30 30 3.460530391454422 2.853148110931248 5.673143221211696 5.74382643572801 4.560892804436664 4.479989030638916 4.108077786334535 5.377872204713499 4.080916284148946 4.056838199818943 3.223451596463071 3.5330059865375247 6.033276305307109 3.956621858470741 4.650080019936504 3.9491436885813322 3.853247098054573 3.5744529204147932 3.1643816912195657 5.226075953055757 4.493235466432401 3.902220699406281 4.494647192015483 5.174131068453106 4.498883799971583 4.128135373085049 4.78637808211924 4.414314456135563 3.900475819535691 4.696915643906028 6.012768649433727 3.5048184972747967 4.410665579908438 4.78470056831511 4.430035983222144 4.2249592435880245 3.9599008490136747 4.167828634222293 4.286329993687062 4.0490689550879315 4.688660132745937 3.9715503401291086 4.492526254521843 4.275019780657471 4.498810792860908 5.7430390331274435 6.043316151834366 3.004330611671986 4.8310979520872275 4.145363355298231 4.239209612371852 5.370092044823092 4.400420696708339 4.80736792461766 3.480858731269831 5.38997490320593 4.452294972144774 4.2405102015634215 4.076715546299945 4.471367499121955 5.518481599202522 5.013913322576091 3.514483344883085 4.043227041323369 3.9997561039405767 5.482750325163067 3.49207598177113 3.8482647596984787 4.800277265666515 4.595846273137571 2.6028854508230928 4.052152916389869 3.8231657020066323 6.030140139917068 4.46707841057821 3.133906475491953 4.969227185923638 6.186419872055426 3.9895640278035054 4.888724076402067 5.460541203495417 4.114404052300813 5.051870842900655 5.271689032209442 3.388209370718499 6.093531804079436 4.227865441119672 5.0484468984240145 4.399789057151946 5.693324705300172 4.076732747933373 4.724361470790212 5.015566419361359 5.2730153423736255 2.762009471787531 2.2465671832315532 +30 31 0.20256842663109786 -0.2799270138088934 0.5917914523437566 -0.8072965043605884 -0.8205005416595306 0.6345095095916828 -0.5167515277705952 -0.9322333189950833 -0.17342872073890603 -0.9188426071268465 -0.04158829294936539 -0.4725640545589387 0.18540367377870615 -0.1739195758522456 -0.6143449590606074 -0.6674302585094867 -0.7969384242285502 0.23970081879021254 0.48153585881045236 -0.9697195622398804 -0.4721688783653635 0.15155283300102962 -0.4628402110856451 -0.5739881936614202 -0.41728861252711735 -0.6683045637292817 -0.3553567787170857 -0.0014824672115378856 -0.3107486139212938 0.7025068820108638 0.5174513398902003 0.32624783869584095 -0.03499983261812245 0.6810458885881061 -0.31452254911843225 0.08146907942451631 0.809143238969217 0.06489721153531924 -0.7521858532064756 -0.22124022902771423 0.7226866215471806 -0.024854124860331783 -0.8159198769183986 0.5647643933269857 0.6125156455648688 -0.668328541734015 -0.24479733899866396 -0.06857237339601596 -0.4990445226799869 -0.4589366841952067 0.1880675624649215 0.13315255934441672 -0.5438821485722534 0.3844520747419222 -0.44244507386399556 0.9614184665167724 0.37925905179393604 0.7596592352131988 -0.12739115677547863 -0.3342827004179605 0.3395139203929074 0.13717629121678487 0.3339438969639221 0.5083879809208436 -0.2868710104273069 -0.7003497587738383 0.2713644076527624 -0.34759941420302387 0.6330224192732066 0.2885000441463641 -0.18251543650017799 0.520878199439061 -0.44968203631699266 -0.6934030278048571 0.29107440699761145 0.21476243858504618 -0.832054510494687 -0.16228060706026248 0.379455216888515 0.4136626804579182 -0.8475369796087628 -0.887509843507317 0.9801138919062515 -0.5262899545519688 -0.2544560676834735 0.6530588530498038 0.6744457731632627 0.34785385317741446 0.9735243838532186 0.29073857401082437 -0.5390903083525205 0.5201499352692289 -0.17145836186859031 -0.2882573626191478 -0.22762108907248102 0.6250334796249755 +30 49 -0.6743506076899122 -0.28528816762956666 0.5496762855039377 -0.584942806645856 -0.2834571052338075 -0.05714806147058571 0.4197133291731636 0.22202462373130039 0.5055536853282858 0.1303508033565257 -0.06934097942909734 0.04985985959430894 -0.868673961187949 0.13125369822744193 0.903869346008864 0.395205150433509 -0.1313921843527559 0.26195003623487323 -0.9932507529060111 -0.6346009924590548 -0.9332392547598289 0.5648641014815587 -0.8470416763992705 -0.7835696846726536 0.33457204782776717 -0.005418380342049778 -0.5302993297635734 0.7882156777970519 0.08703103225468345 -0.023121941861873108 0.9916850831880968 -0.5357747185139055 -0.05955168611234041 -0.018000305949355866 0.7399621395558555 0.0005363103416313741 0.3140022583252724 0.8112976515934849 -0.636238630861462 0.8865227843911885 0.9554249190818458 0.8524438030770283 0.6365431803520942 -0.36197361546432427 -0.5155040656989929 0.7391769500916898 0.8195226072940149 0.25537530085951987 0.6105468772450571 -0.5361504439951688 0.6484570083864349 -0.8919719293883888 0.041497447573039636 0.8207991114908562 0.07207762419344932 0.8707346517291754 0.6140976677576058 0.6338461241579236 -0.7169442202877605 0.1999811411743888 -0.6525520537420084 -0.6937885392668961 0.2283949895808619 0.29398266133361206 -0.7437093344500081 -0.2558459656224805 0.10679323699482413 -0.11258414551851526 0.2713343240412833 -0.7278228953204775 0.49842384781318727 0.2549160622773974 -0.03809859263629645 -0.7028641451947022 -0.30930146473095665 0.18526105263690384 -0.9061484801806539 0.7701819940721293 0.15675655852732495 -0.19680791206517334 0.24174210130381057 0.8242534977757228 -0.8825179540463244 0.42688142601651946 -0.3648804565434087 0.6984433154012017 -0.6829161649962521 -0.9863253735158573 0.8074153152256549 -0.5476856231575875 0.8510617071243944 -0.5707450771176688 0.7767239008290063 0.9726255728363455 -0.44507771669978125 -0.023438183195864104 +30 50 -0.3901010721272251 0.18034085898367302 0.599614399674419 0.9770385467646834 -0.36820715865471 0.7945086407161186 0.27512597026825025 0.49532558240482105 -0.23594512235399612 -0.9072063758973312 0.8945503705915001 0.5587901398300268 -0.8289085116753498 -0.1595260143600612 0.15402381256421083 -0.2729892256912585 -0.32740546083212196 -0.32471998610430775 -0.010951771768807239 0.23376763045995075 -0.4105696307758815 -0.8904769081111206 -0.3240226934352768 0.6643370801695057 0.5886639052452081 0.9851830770135461 -0.7082433295675044 0.5771511180845896 -0.9071041808360445 0.3188843035047988 0.49570291313621473 -0.2855168350961954 0.2788483914552622 -0.9913768990546823 -0.42174200946317675 0.02834372450828737 0.5647572441948872 -0.11728387718047117 -0.16528875001429366 -0.5519416329794278 0.14059014453321983 -0.7622299139963082 -0.32299904312097993 -0.9178800607740962 -0.17247257000526073 0.2644704727271583 -0.7395928105070593 -0.4243401383552379 -0.5765116918461151 0.8275371669614902 0.059830441928474976 0.14514977131181506 0.9017282125032209 -0.05031041926750146 -0.5820582622514114 -0.12359284811557592 0.8970053174364665 -0.27627382035046644 -0.4782505095642664 -0.9183983617605513 -0.5146634698285599 -0.48813241173460153 -0.11138173590248823 0.1986874246338337 0.5446205134610194 0.241884273564283 -0.29547887549413887 0.5895026713604488 -0.7964926096764324 0.8812017787777351 -0.08657180171831835 0.26383179750968977 -0.5137846993619233 -0.549005481097615 0.938924011251334 0.7267949446701276 -0.7990539523144033 -0.5302804239412813 -0.7185974106412378 0.5757967363626619 -0.25559569716506503 -0.33601923717088855 -0.48563721682314864 -0.45966184043161684 -0.42575833681231123 -0.473723377889147 -0.622477365979601 0.817924307338848 0.11013403497259078 0.33489219400180414 0.43428626802612036 -0.8136395437851529 -0.08509382539473087 0.8182794507441826 0.0565004019304729 -0.27907218101019016 +30 51 -0.09597095774516395 -0.25207469952662365 -0.7461400054162681 -0.47569166845267064 -0.07991661017261054 0.3057992896114874 0.46776946012978926 -0.23308770960347158 0.412340718798446 -0.9243569326398078 0.2916400149779754 0.41272001639076117 -0.4149437702363814 -0.6438794630969846 0.35887536775232776 0.8086360803256736 0.7408514940181472 0.2858777130922352 -0.7487223600579107 0.3571059657229172 0.9801678765683581 0.2788335993416331 0.5706017323893886 0.9017686065051207 0.4114864474380193 0.1254603774859313 -0.9290214160072139 0.6008048140539606 -0.27305160794529315 -0.9323551838080404 -0.37440673043714523 -0.1574817272875748 0.3903187086308264 0.5390235140767385 0.42434702640041366 0.8648052249268203 -0.1113521513582334 0.9296219629037374 0.2496459422652595 0.23462441649035015 0.04754030056222969 -0.38388084356994967 0.16135777456004874 -0.21920354776698825 0.46649407634061824 0.416426104070714 -0.9847344074319331 -0.43627762305179685 0.025672183190288633 0.09812978047694454 0.714799581924423 0.8844870373377964 0.28260517728446044 -0.7610264127893835 0.04159770128999973 -0.48854284102006895 0.7786813893533222 -0.23835952083737855 -0.8209520421952599 -0.8959594075834636 -0.9426633898312666 0.11105037569383325 0.38582735194743 0.6993551731384116 -0.14986578026438235 -0.7647115373490907 -0.06048851572631775 -0.2864961358899205 -0.4835625025949961 -0.16845086085790983 0.4098698421606026 0.6477945140605639 0.5924998633155911 0.9879775250669336 0.4760182164809996 0.25085380900733223 -0.29140314921683985 -0.4012807630619357 0.3532309261148563 -0.9013453495539732 -0.5617549711213621 -0.644544520042033 -0.8395574263929344 0.749886122905141 0.47902570839697534 -0.3497566697133083 0.8301541732359987 -0.3430203668072296 0.17914019657075198 0.9846257216187586 0.338329246672169 0.701844678713829 0.6367782233693191 -0.5007420327818797 -0.8427510660673416 -0.2445952958496107 +31 10 0.005511422548410305 0.962029142975581 -0.502888306399025 0.36610463536093185 -0.1891949316106185 -0.6098129400205083 0.06156971166660474 -0.813990346099231 0.11739669303012668 -0.8591981140063365 0.8463195873809932 -0.4245623957822726 0.2790632086515765 0.3381873463333871 0.7187065869255209 0.7317702964874022 -0.7173438158266159 -0.014652421888716738 -0.5569927976069913 -0.026686981362325612 0.7055998473333265 -0.6903639714120229 0.951571144499749 0.1619671054141012 -0.19994328523521676 -0.7876288679126862 0.15267654558691013 0.5513066316978117 -0.20390072884911814 -0.07034981747256075 -0.3917600706021729 0.08660220907013971 -0.3888510383116577 0.1019319067345823 -0.4173192050665704 0.45746033707557787 -0.6834405984964247 -0.13325487127220192 -0.6229861967442176 -0.2341351782154455 -0.16951363841758993 0.9910478699547856 -0.3827778754893725 -0.693524759558513 0.07159689335789632 -0.27851566942509165 0.9070350125212938 0.42275620686288695 -0.9382329452861498 -0.49306931203243565 0.7052764499815911 -0.177470295312937 -0.64449776083075 0.18820848003637258 0.2381222191878236 0.8924655609851047 -0.9427049490152244 -0.010231256593344895 -0.5268237845727468 -0.2488082933167075 -0.6138137576015963 0.04133264947689219 -0.22329477933661934 0.24273375638273742 0.39132819276800523 -0.4536891463252015 -0.46918853725980036 -0.901819893780837 -0.055360340994151214 -0.693482756434491 0.6883272117361472 -0.9665358494505212 0.5766758046537857 -0.5432788325202151 -0.016057347389516474 0.669425630994511 -0.3931199563753671 0.2365335649778777 0.6891013233153076 -0.9792415344514052 -0.7704287996873702 -0.7155182688112003 0.655170801284916 0.522006757350719 -0.777291205872831 -0.6161624986646996 -0.31987577346169416 -0.7673402276316206 0.5636707043831188 -0.8020553433709008 -0.43234871564404775 0.2686842211691709 -0.42698005588277743 0.2516415871179738 -0.13678958795971186 -0.04186219329554963 +31 11 -0.8969711284324418 0.03682750968346049 -0.9065868768691039 -0.024298119915972638 0.6741974525788459 0.010501102810042795 0.012024466038614845 0.9640307695358958 0.5193145904381136 0.6296355603643213 -0.057956336428440114 -0.29422352852336986 -3.222536935898468e-05 -0.1112857414740902 0.23021664858534008 -0.020174433636370948 0.10615612799945384 0.8367973411313261 0.7118419045074167 -0.08724420096299812 0.3660047621372604 0.3038363122131005 -0.8965932101462675 0.4749490493031996 -0.47309256101905506 0.48790071766527787 -0.2518134655526054 0.6329044312909826 -0.9027690075086858 -0.5874806680784288 -0.6609363653098661 0.39800437145408196 0.04289618090323377 -0.4296038746704265 -0.505195010557864 -0.1781076915867672 -0.16166227080167905 -0.40824569650099063 -0.6705237257757972 -0.8901260152030297 0.666539715748518 -0.603386570344534 -0.2506791826454795 0.05377879175132105 -0.21445032495134875 -0.1340265490288246 0.974607451222385 0.43127271822518276 0.2976223362203809 0.7257507769796407 -0.27806513529581056 0.47987337696081656 -0.6360670427163837 0.43921029255891786 0.5945423296187278 0.2765194687884873 0.9243363621166092 0.9067956545895635 -0.05535130086241069 0.9717898420720099 0.01992104560380037 -0.9505810424709218 -0.8105260296780332 -0.6377312887166033 0.07002486663147023 -0.2035571438738475 -0.6327605388702697 -0.9875377685274869 0.6378119000050715 0.6235777509576976 -0.897953742381516 -0.7093870911108002 0.14509505149032553 -0.027440872234985036 -0.9192699817165542 0.2277709065992679 -0.41260666002113133 -0.6207268572936662 -0.03708362913218877 -0.5526302053094823 0.8206129532909832 0.857822117329101 0.4265830751394788 -0.8684930438156473 0.02637693860604351 0.07922358003545282 -0.9475698644978143 0.9469603279458383 0.6806081840599869 0.9334734593125542 -0.4699532738409109 -0.9766295099371312 0.01892038090319592 0.8213192425138951 0.742000645442463 -0.8606684210081477 +31 12 0.3357527758067045 -0.2175687274531184 0.3123223875225061 0.5009464624245663 0.05499320563598231 -0.4029247708607109 -0.9533312024826304 0.2238637438624047 -0.4580172367847781 -0.3531226371740075 0.014102289990167494 -0.3288436231130487 0.9964653924536819 -0.43476015556949976 -0.8544627669513052 -0.19718248030498775 0.08297851026936098 -0.5232655530466179 -0.529399078473312 0.3546982751201373 -0.15880220872521744 0.24212531623791933 -0.2810914301451952 0.5912449115751077 -0.733301850437309 -0.7176162350251645 -0.0055698324358424145 0.5620381299289468 -0.7145036317558942 0.4768895190033582 0.14047076806270198 0.6047398278470288 0.8252572360746755 -0.06395564644829754 -0.61378544732801 -0.03424414192618541 0.35363179638352316 0.6997748699208242 -0.8976834800761926 0.6532806655903709 -0.947249401471087 0.42924291312261587 0.1689880555060852 0.7938944728742379 -0.14971361679472572 0.16549655052372558 -0.6926428151458219 0.3095819498927306 -0.19803999405921746 0.8846339670967467 -0.932745768273773 -0.28887283066821046 0.5436439663128365 0.030552453722409112 0.2324081486956755 -0.2959373905107754 0.7383679989951812 0.2887684950515148 0.325080706606796 0.04190479329177066 0.4351654314869118 -0.6342702301758785 0.07512273372891509 -0.2689875093703229 0.8792465294898788 0.5633543845574551 -0.40957620072828127 -0.22679410285967205 -0.1333417198166662 -0.27913011929923126 0.06673400365365212 0.11763709249412924 -0.8544181935346233 -0.7054898934859488 -0.29364535865505825 0.9079162509053293 0.2832355212324338 0.5474099180364913 -0.8318550930486619 0.48765884371692336 0.5912694961398488 0.4490921919951516 0.5315847354208119 -0.22908573747743377 -0.9951532377677044 -0.05050389117995002 -0.3228676527785792 -0.5766521616775935 0.8018401633704368 -0.8895628152217194 0.5185925966848546 -0.38869893787834164 -0.8944159800581128 -0.496671846498256 -0.3397177998803145 0.8455537696877837 +31 30 0.20256842663109786 -0.2799270138088934 0.5917914523437566 -0.8072965043605884 -0.8205005416595306 0.6345095095916828 -0.5167515277705952 -0.9322333189950833 -0.17342872073890603 -0.9188426071268465 -0.04158829294936539 -0.4725640545589387 0.18540367377870615 -0.1739195758522456 -0.6143449590606074 -0.6674302585094867 -0.7969384242285502 0.23970081879021254 0.48153585881045236 -0.9697195622398804 -0.4721688783653635 0.15155283300102962 -0.4628402110856451 -0.5739881936614202 -0.41728861252711735 -0.6683045637292817 -0.3553567787170857 -0.0014824672115378856 -0.3107486139212938 0.7025068820108638 0.5174513398902003 0.32624783869584095 -0.03499983261812245 0.6810458885881061 -0.31452254911843225 0.08146907942451631 0.809143238969217 0.06489721153531924 -0.7521858532064756 -0.22124022902771423 0.7226866215471806 -0.024854124860331783 -0.8159198769183986 0.5647643933269857 0.6125156455648688 -0.668328541734015 -0.24479733899866396 -0.06857237339601596 -0.4990445226799869 -0.4589366841952067 0.1880675624649215 0.13315255934441672 -0.5438821485722534 0.3844520747419222 -0.44244507386399556 0.9614184665167724 0.37925905179393604 0.7596592352131988 -0.12739115677547863 -0.3342827004179605 0.3395139203929074 0.13717629121678487 0.3339438969639221 0.5083879809208436 -0.2868710104273069 -0.7003497587738383 0.2713644076527624 -0.34759941420302387 0.6330224192732066 0.2885000441463641 -0.18251543650017799 0.520878199439061 -0.44968203631699266 -0.6934030278048571 0.29107440699761145 0.21476243858504618 -0.832054510494687 -0.16228060706026248 0.379455216888515 0.4136626804579182 -0.8475369796087628 -0.887509843507317 0.9801138919062515 -0.5262899545519688 -0.2544560676834735 0.6530588530498038 0.6744457731632627 0.34785385317741446 0.9735243838532186 0.29073857401082437 -0.5390903083525205 0.5201499352692289 -0.17145836186859031 -0.2882573626191478 -0.22762108907248102 0.6250334796249755 +31 31 3.2026113447392026 3.2075244858397074 5.781184205397832 4.391338623400861 4.038199556957066 5.040448468016672 3.0305050166645673 5.42066297466048 4.633604774897076 5.601734023608195 3.379066352139919 3.9917218852268492 4.066256731256387 2.9564317425558526 5.190799556131351 4.246392462896861 4.489492244877791 3.165100300182451 4.910469010254189 3.9152509538783846 3.413662023875106 3.659548296816392 5.051459505107067 5.018758256397227 4.882545187861093 5.786016748725485 3.1401755119241583 3.6125341273583835 4.59332607952676 4.0009631812959885 5.061055380243992 4.968029146978623 3.7020621525788844 3.270558891342797 4.922443978512677 2.2836299345595386 4.165601037712765 3.350316462084221 6.489402578711116 3.928461937802833 5.6882594728833835 3.14159915887985 3.3158645583198565 4.507068958066194 4.534035802864417 4.09144886144736 5.564199466600441 3.708850543159371 4.642420809397877 5.3255831780035665 3.796143623547714 3.7625791651087885 5.139889002345633 4.397080828832179 2.8758933250278997 5.36602421671866 5.018258154015358 4.732850056012982 2.8525351551139613 4.466908543048378 1.9422178891170763 3.1610803272913355 4.431976821003987 3.584134812599393 3.784138065063383 4.60160934743554 3.685578381332965 4.8824905998647266 4.200570689015654 5.503272538878052 4.177761844307633 4.611091573937601 4.7635759143848 4.582425435482451 2.868691389629027 4.160727918490217 3.396365993423779 3.9565657220754593 4.413799823923705 5.212159550120493 5.34175980665014 4.358142447757236 3.4863886192507114 4.11486311283892 4.6966060924589135 3.4432687986036203 4.332229583822699 4.597792972617813 5.2329895292121975 5.092014590654189 3.702880524786327 4.629736033472929 4.812916438010189 4.235366846496222 4.176806462823123 5.329150780175809 +31 32 0.014458075481270649 0.008699737431101973 0.9417584835631825 0.8926703831020422 0.2495363918311111 0.7688826795906258 0.006731524437834091 0.8619046802926333 -0.49759795643075 0.9655181927649392 0.7826329401841889 0.2203087558855088 0.9844146814774382 0.8649890254480554 0.948309164035052 -0.7109571327177726 0.45095785518789966 0.06296648116216352 -0.7036890663424169 -0.6959409499743914 0.9464726936924859 0.4042489190514842 -0.29695166270799445 0.9866102802658068 -0.6950059739310754 0.03622523911038256 -0.2524484292898208 0.7281690015110296 -0.8216046988955947 -0.7232527326463161 0.8844835066894954 0.5242811707754991 0.3495942485432255 0.3721768539702832 -0.1370201764911001 -0.11069063150149594 -0.8421297367351586 0.36189441318965065 -0.19047835713460448 0.6457418035684106 -0.9826457099474075 0.3120807273259938 0.19234747876686464 0.7016411289234898 -0.2887731042323065 -0.8483537780782331 0.4817551404355198 -0.6288617611153746 -0.6170634216349107 -0.4900880483120782 0.05216865884028632 0.2273261373867781 0.629833739884097 -0.7303953711816906 -0.09136992861040172 -0.6362770653423035 0.1775921055858969 0.7131252195943012 0.010776153658426102 -0.6760515045288751 0.16201351336159298 -0.8517491829056132 0.6994845143070332 0.0836990584922459 0.016784488489796523 0.49788423679009197 0.20274831038087404 0.7976185623427696 -0.1849702721895079 0.7022521121878422 -0.10528662090328744 -0.37472246770024165 -0.6358684573446396 -0.49132137650876007 -0.1555999804962236 0.42264714922227564 -0.5889260142946917 -0.5285655952178301 0.17661174260774448 0.45392106597441173 -0.18387250243142872 -0.2382398445830396 0.15903623735833494 0.3629274341152311 0.7701448447416399 0.03349535324123343 0.3310659260971551 -0.07535411158800076 -0.2349192289230475 0.38312981661876266 0.026397577003834938 0.4314596716447323 -0.199977876397337 0.4487425974405652 0.9929440885635561 0.5268887356438243 +31 50 -0.9522529783353457 -0.8333258210073409 0.8090883842525354 -0.22943323413813532 0.6745032550521781 0.6591662786967731 0.09899182022403274 -0.365598791905841 -0.7730588985509343 -0.1023866097305055 0.3545297284817932 -0.31606668634038626 -0.48227314070028804 -0.030382588287001466 -0.2916691913638809 -0.17690821217818953 -0.1679252841682748 -0.13922397306743095 0.2541832240478028 0.26452686357181454 -0.014299310709443569 0.8691721063609987 0.49752504388742835 0.31544034980164604 -0.7557428427526853 -0.9316214834097176 0.562928661340411 -0.5059300723562199 0.5129210145613787 -0.9808038267675512 0.8618219767149768 -0.8634383908222913 0.3784116470015497 -0.2326771030831687 0.6786839229126256 0.0638320298868349 0.05121823566633843 0.658057345042492 -0.7296371278074307 0.4402836077516077 0.3597709835720666 -0.15911381857558382 0.5397447015798986 -0.03458227627475363 -0.9269865559433357 -0.6878622225338107 0.8224148205482193 0.1591971464193329 -0.7254633907803465 -0.930843071634281 0.6181315398144303 0.4619435009320114 -0.25492429485619317 0.9840591973473756 0.21593424276060436 -0.7776477932331154 -0.9103118062103535 0.16935508239017838 0.47149806589148846 0.993634975918513 -0.03609382441071585 0.0030457804663435173 0.779539639522925 -0.0075683752797397474 0.9572847652568974 -0.4293901512092835 -0.9508815049292698 0.20430188598891275 0.6721847508033221 0.48096708441570657 0.38789294236925675 0.14906066841501797 -0.3676570552817955 0.8387717702047317 -0.004123997410119928 -0.46823221671571025 -0.16841209107843036 -0.7053200337100849 -0.9070103261427189 0.6204728276437153 -0.06905618798945778 0.0579049472188089 -0.12861867072641142 0.28364652216995356 0.7500304910550928 -0.5624363813013713 0.219618548945274 -0.0668522731230643 0.7868887264895752 0.9842795465436209 0.2243757084091682 0.4794845370339642 0.9076561224982662 -0.07551016946219113 -0.06093772062398917 -0.3628305089157564 +31 51 0.47364429475869385 0.2540280769168237 0.4652196702594886 0.4619415433135976 -0.3116819514399667 0.47913525676763946 -0.22662665626195055 0.08439590996572788 0.9009751860126631 0.05874613639259629 -0.7413630277144725 0.2173345247115981 -0.23634875398578936 0.1090572992604073 0.7268820732236454 -0.6456616459597642 -0.9831249909184372 0.20738006422256694 0.21933004738557837 0.6338363802024412 -0.4829859430440946 -0.028996580882042045 -0.43673972752900037 0.2091363410104241 -0.48081598199502373 0.45778698026386033 0.46354784989407793 -0.25325044634225913 0.6340833827268495 0.021802612731498083 0.2338241690874292 -0.9362884375431004 -0.8975263000264433 0.10546413412785083 0.9227148548995943 -0.26909218356377496 -0.02102795444802985 0.03869072607669066 0.9839355197958117 0.4439035878205595 -0.5708413214264452 0.1515977599756011 -0.34007532549121655 -0.9237185811727722 -0.7525512313848244 -0.6550118084918783 0.3724275513236961 0.33421069576886486 0.7853130147133109 0.15372728445556927 0.5141264720698042 -0.6754707892369736 -0.24245137208700496 0.5486942780821695 0.09452292271738116 -0.4132099115679655 0.6982853020107354 0.6172045059549214 -0.09481577150002396 -0.15193178337214563 -0.03293438494432066 0.05386274336009733 0.18728120536893633 0.4170531929991703 -0.16023553143078262 0.37591268386788745 0.5368659713017991 0.3587071174744958 -0.3163810205748634 0.923625913634945 0.8314439018396476 0.858054847208527 -0.7295904103590116 0.6738928429236786 -0.5862505085285266 0.1400946254504596 -0.04594697527786962 0.9546595143141416 0.03415556233336403 -0.5425685191671221 0.7863090606322896 -0.6067557399010926 0.18668666412803714 -0.27987547378828825 -0.04232806705722236 0.19240205376154584 -0.01110053617367357 -0.5638037621095371 -0.37709149257780505 0.617634719790257 -0.8479961309174471 0.29329681602053226 -0.8534989622040161 0.08838098700193786 0.2769324946102909 0.8668020277944719 +31 52 0.23851639238176214 -0.576206299427527 0.8117985899988276 -0.5690619431842063 0.37872701948395315 -0.7205174773350036 -0.6264423172590956 -0.6644657866422068 -0.6027342844924075 -0.7826291024772494 0.010613413607313271 0.8332983264908298 0.7634986917635473 0.6523467794678091 -0.4603839257138982 -0.5949457309149511 -0.5462379027570532 -0.3575506836429183 0.7746570952160192 0.03559894498942784 -0.20317708599879336 -0.5302987504375241 0.27717530109890576 -0.9658990573713757 -0.35632000256248264 -0.7311104490180358 -0.5616477000254261 0.19164304695837608 0.16960245640352434 -0.3201101905768189 -0.883079819186479 0.8097594962128265 0.7335890507415235 -0.5934338005392883 0.9515645641401966 0.6537720087850034 0.30508742436024217 -0.6949656628450498 -0.8899541409897029 0.20614714987975913 -0.9261819240398381 -0.2768628266225137 0.04736128542591089 0.738867923854233 -0.7639616078690634 -0.1713405828382648 0.9107733715250579 0.839345956273952 0.2839942799380004 0.3079396902050282 -0.5004838531089026 -0.9492239357053229 0.8792302763467572 0.6198557901910371 -0.3987964065317371 -0.8304655627988624 0.17491621524880174 0.538729767227544 -0.38099651871314477 -0.1786958687915159 0.1484561829398814 -0.4824925607647643 -0.7179898971574743 0.6894427922869568 -0.19121633954842387 0.8614312827769341 0.04633148581867408 -0.8676590427827637 -0.7879165503157228 -0.5290389189907303 0.24077301117022976 -0.024919215908861814 -0.034480042135953015 0.5389834914535259 -0.004361190347382804 -0.3524529618879897 0.021653897177663417 -0.0026591545118559434 -0.42261717446097324 0.1997706695591155 0.828179624705778 0.4398699100432175 -0.012274324229041955 0.890456153450027 -0.4115416547261559 -0.5387413189930845 0.9731327363320945 -0.36772557356163116 -0.2786298495614741 0.010988360808049658 0.17729039934832969 0.547293591783033 -0.8868914922135513 -0.9374497761001568 0.4394612530360278 0.41623276830586575 +32 11 -0.9184236495018436 0.5723394851802686 -0.2730467189214689 -0.46950372101811966 -0.43495265203244005 0.7002209497104246 -0.2502181865188411 -0.9139145046714159 -0.23534360074905103 -0.11226770047479206 -0.4134585661039436 -0.3508431597712678 -0.7515084298177359 0.8625183412127961 -0.5081349632274246 0.8227112031403538 -0.9352938795981902 0.576151004804798 -0.4548204098730142 -0.40960303026160094 0.6332524514904443 -0.6285766001876616 0.34638819102245355 0.7879037069647585 -0.08102282167006414 -0.22498386383976476 0.3368724753820662 0.5720912997094405 0.6612804028388306 -0.5457745035564039 0.25512403199906974 -0.5692704505645902 -0.6608357457180121 0.8915525104252764 0.8549737823963526 0.1754569009940179 -0.9705183569120068 0.13207739429702725 0.5450710356793318 -0.8837513743638596 -0.4903653883417096 -0.8842400751763257 -0.43565331593558 -0.15592835108015746 0.7753281512820132 -0.22961338275886933 -0.33290400994755 0.004918135070734575 0.12838102259726325 0.711212558602693 -0.21453311484450155 0.08541091313431592 0.9464216413949311 0.05122411708928931 0.30357309329428905 -0.20473073265408592 0.6589736349705002 -0.23021779180977564 -0.8687837799505134 0.7364632437880503 0.18601676064844597 -0.5682948398083711 -0.07180933954800706 -0.774693513048192 -0.657488176725991 0.5023915560503032 -0.16249797990028347 0.785151752139772 0.2004967201527299 -0.11126735434632273 0.09911802723568397 0.3446995481241941 0.3737497071271425 -0.6171428266383372 -0.8826834944832376 0.3485134640619858 -0.4741248558603437 0.7597636964825774 0.10285390257680693 -0.05439061823373259 -0.680842873193273 -0.7129704569669522 -0.14234228526529846 0.8270947905276735 -0.3360631255143183 0.8800761603574256 -0.09132682088154143 -0.6384379218787297 0.18286705161893968 0.34818317256759146 -0.7228276211433684 -0.01809477648349267 -0.5673431040646251 -0.7073815252878211 -0.049157987238805934 0.5477211256601806 +32 12 0.7321414790863878 -0.14866391557055803 -0.7845549090993431 -0.7043940481242763 0.11226442060956776 0.37108443917961775 0.49159384566414177 -0.1116210526245216 0.39909609155772396 0.6822067308108684 -0.1499836193111106 -0.8208832452087298 -0.8255626498261595 -0.193631700586693 0.8098991572342793 0.8417690466540984 -0.09741920062737397 -0.31356196231990574 0.03367014236725674 0.8504820644016169 -0.22577286900863025 -0.5827865039002833 -0.2315116799922119 -0.24407306198559797 0.9619510230197519 0.9171724662539582 -0.01969065628744282 -0.6169351090237154 -0.8733787384178668 0.7181805790204938 0.6630359021884182 0.6795664570034439 0.9839437920439131 -0.3238954724481773 -0.619082119894097 0.5435621713580814 0.12570258035975024 0.48763110217498173 0.6223257650326846 0.989938989870331 -0.9588239755488628 -0.10055329096088994 -0.6769960272384126 -0.7572995494072392 0.10547831859645052 0.14174253285240535 0.9325724997603526 0.8258260859272097 -0.7128111513416453 -0.5825812035644202 -0.4092458732287181 0.35745454390560094 -0.11351910169380641 -0.7204570166823288 -0.7699883786935271 0.41708426996273884 -0.827817977624387 0.16833474136119575 -0.5894466614230436 -0.36024493100570165 0.9590230804493998 0.2779940518706925 0.884305465504011 -0.5357995136791585 0.38205358358169117 0.8305344627507751 0.3238587676357434 0.28708540172965136 0.07242497468584808 0.3384588297731892 -0.7935601571166049 -0.43814342821178553 -0.9246302991195843 0.1674055780781165 -0.35695602563354756 0.565669175503341 0.5925698478601549 0.9358487028680957 0.8563998021219363 0.9902788199933013 -0.36874634037619214 -0.458759759016524 0.9742510501377237 0.7524365584940587 0.9139477340482403 0.616256414790685 0.9644534222281258 -0.1804650813718185 0.006068869801559851 -0.01590421400117359 -0.15428281776562036 0.147355118732432 -0.012187464041046647 -0.06233248053348128 0.749122777003921 -0.9923060812089337 +32 13 0.8483748774336386 0.23771536017795292 -0.2642224937980431 -0.6460066671022464 -0.5749976699716448 -0.31932117040810315 -0.8554293973859124 0.18906897392911515 -0.8326475442155972 -0.4276967888783567 -0.654784535683322 0.8342437118629986 0.2606924913106521 0.9649546446699491 -0.8958001689695712 -0.5434678318655817 -0.9335101840388353 -0.014228575758405526 -0.8943258021603055 -0.9596884473460241 -0.43269229565501766 -0.8793848666799682 0.1921821239910284 -0.6442417314393634 0.40589551300365656 -0.314602673724411 0.8962639572140998 -0.7415948112923199 -0.4562153277027503 0.5565700896197339 0.23399100301304276 0.3575802642326311 0.8187975296267658 -0.5406012126041826 -0.761409811459997 0.734237659828944 -0.4685917503503092 -0.1613805941615163 0.9012255698470777 -0.8822331213041623 0.011068482986271055 0.02246245623848586 -0.41619282966149496 0.2175068229968744 0.5671783615358921 0.21107393038343258 -0.879946108414613 0.46869050213414587 -0.7595094767429806 -0.48292955543061744 -0.1976168139685459 -0.36623028464773255 0.2527701986289812 0.8328002892013111 0.007207571810045277 -0.13305221899175446 0.3801048090301411 -0.27463975849648326 0.4590998985841166 -0.6789042482960159 0.11369791690670161 -0.3251183242528828 0.11136114392112195 -0.4984470533837475 -0.1356541567451779 -0.8427420773837837 0.03349782441421212 0.6576974836607927 -0.749656036396227 0.250667469490534 0.9324674869908629 0.20940130894577558 -0.7812689442554748 0.4826382896312018 -0.8793901011549692 -0.5215102043928128 0.02332403964260843 0.23161540331885155 -0.9667926411052559 -0.8320472735565814 -0.5136818097227238 0.5840117593572056 -0.7373982448639609 -0.10776556200931897 0.168203010273964 0.44345255063120526 -0.3962119636635937 0.6123899014699843 0.01746575093139735 -0.27295968553584316 0.8309116841192818 -0.6028784162630254 -0.8318855955005344 -0.8933102854026156 0.7992799530030144 0.17082205311687715 +32 31 0.014458075481270649 0.008699737431101973 0.9417584835631825 0.8926703831020422 0.2495363918311111 0.7688826795906258 0.006731524437834091 0.8619046802926333 -0.49759795643075 0.9655181927649392 0.7826329401841889 0.2203087558855088 0.9844146814774382 0.8649890254480554 0.948309164035052 -0.7109571327177726 0.45095785518789966 0.06296648116216352 -0.7036890663424169 -0.6959409499743914 0.9464726936924859 0.4042489190514842 -0.29695166270799445 0.9866102802658068 -0.6950059739310754 0.03622523911038256 -0.2524484292898208 0.7281690015110296 -0.8216046988955947 -0.7232527326463161 0.8844835066894954 0.5242811707754991 0.3495942485432255 0.3721768539702832 -0.1370201764911001 -0.11069063150149594 -0.8421297367351586 0.36189441318965065 -0.19047835713460448 0.6457418035684106 -0.9826457099474075 0.3120807273259938 0.19234747876686464 0.7016411289234898 -0.2887731042323065 -0.8483537780782331 0.4817551404355198 -0.6288617611153746 -0.6170634216349107 -0.4900880483120782 0.05216865884028632 0.2273261373867781 0.629833739884097 -0.7303953711816906 -0.09136992861040172 -0.6362770653423035 0.1775921055858969 0.7131252195943012 0.010776153658426102 -0.6760515045288751 0.16201351336159298 -0.8517491829056132 0.6994845143070332 0.0836990584922459 0.016784488489796523 0.49788423679009197 0.20274831038087404 0.7976185623427696 -0.1849702721895079 0.7022521121878422 -0.10528662090328744 -0.37472246770024165 -0.6358684573446396 -0.49132137650876007 -0.1555999804962236 0.42264714922227564 -0.5889260142946917 -0.5285655952178301 0.17661174260774448 0.45392106597441173 -0.18387250243142872 -0.2382398445830396 0.15903623735833494 0.3629274341152311 0.7701448447416399 0.03349535324123343 0.3310659260971551 -0.07535411158800076 -0.2349192289230475 0.38312981661876266 0.026397577003834938 0.4314596716447323 -0.199977876397337 0.4487425974405652 0.9929440885635561 0.5268887356438243 +32 32 5.699362693270745 2.8756568617600484 3.6712151901744754 5.455365249858852 4.260651022548866 4.667042161456438 5.003745567341193 4.724099892537786 5.080745049295517 5.165968362601162 4.817280463151349 5.245709465383446 5.214387600574116 4.618813250702618 5.647967605828173 5.999399932464133 4.893540326939037 3.2093344788488203 4.820577398840342 5.53610543062101 4.904150973679772 4.434660247283426 4.258194152727399 6.497524165441841 4.778773820263973 4.836208840187796 4.460584454716998 5.499859363969934 4.426726211712876 5.159298942279006 5.261655339864876 4.150009526994308 4.697932945435374 3.1027565121242144 5.2512217901923455 3.774914768497416 4.105110410670065 2.4510113771021946 4.95159981879537 6.637589602894952 5.567684703736965 2.7864055824595364 3.836137707394901 5.372250575404576 4.0368387768601215 3.801973455877051 4.737860797840299 2.3538228819247635 4.371715650157082 5.0100508239566 2.8367443749516372 3.229840707230725 3.529470229223238 3.6151821729485745 3.5933814244452273 2.3244368688147676 4.213508567883897 4.661494262412375 3.386287011384238 5.42127592157188 4.38247055474918 5.704393235725858 4.429868297231694 4.265016778845264 3.5593278170364853 4.0891443834838945 2.629172579634678 5.686442688231348 3.68454248157287 3.1419487113005165 4.153297674897392 2.6452433646088154 5.292425776724009 5.674442544566426 4.724002357251646 5.23402573650338 5.0524017040927 3.79910849375495 4.4991616713962355 5.419761825553946 3.6324442925283966 4.996675680272541 5.085305960674522 4.14043140312145 4.29233898149261 4.498913169792422 4.833639028156056 4.076777615341328 2.905807551580917 4.228467412985476 4.900141103436299 3.866266676438542 4.129544686541237 4.102452404119729 4.797258268936183 5.360896092765925 +32 33 0.6277076140183115 0.3342736789765275 -0.3948135480623558 0.5219691874608787 -0.24529239648050027 0.434110840255336 -0.5090853211833961 -0.19394379875774814 -0.754820894143275 0.15806282862472054 -0.7617211698880182 -0.21816011316513717 -0.03413425883261989 -0.711214196256051 -0.9523309016768875 -0.5019021382604103 0.3623224596702752 0.8536172406381062 -0.3519269073612812 0.42460974915354144 -0.058727940313040516 -0.43613343184002473 0.9426578680277315 -0.6852019067312387 0.8073134434581399 -0.5200979415958891 0.9083347220856177 0.8642297340872152 -0.3079966998421546 -0.908636934068906 -0.7824609965948086 -0.24495638174346102 -0.5938700921768223 0.22243412455190992 0.787463305145115 -0.06342879092718756 0.007270482800759481 -0.10279791914807035 0.4627302376278699 0.24310561868969582 0.29697572417265716 -0.04036906502697102 -0.9137106887448654 -0.6090029667869603 -0.057224794775800225 -0.6366917414553677 -0.013802425566636911 -0.015314949278266932 0.06586978434076585 -0.9500080832794615 -0.17266114619047346 0.22386523160803784 0.09497474024625419 -0.4203669751556627 -0.6807794968585132 0.17029337336679795 -0.4446384527762355 -0.6989413105459534 0.17289069614943964 -0.44225987311952264 -0.8938637116501811 0.7308754204318351 -0.5946837636264242 -0.8730989913972811 -0.3135830420977943 -0.03685134238943122 0.10245228841512377 -0.5760483153625102 0.5878798612279355 0.05650855495987295 0.19285414603594075 -0.09986571298338909 -0.8553334538761994 -0.7921798748097757 -0.33546490152997666 -0.8866542737388652 -0.33096436765368975 0.04629517162312857 -0.19477966868241614 -0.4984999411963944 0.534763877917142 0.7788262028855568 -0.8459948535139536 -0.24193476109400347 -0.48702319922598125 0.619916274095903 0.5650526425347042 0.5534465825707169 -0.721704839398347 0.8075158555965565 0.7990006289919425 -0.37361039557894626 -0.6483201391921258 0.493414592513598 0.8057377092994846 0.7190087247162862 +32 51 -0.9737692894576995 0.6141432398632205 0.34088927518433887 0.1321647688237062 -0.7042537396164832 0.020513874039954194 -0.9526669857050718 0.8909047180122429 0.5261056714354311 0.9330967651341349 -0.9030512772198722 -0.515150383473411 -0.5234108405747406 -0.436419403841243 0.24839120672435144 -0.8929707654666248 -0.40437609044068523 -0.3277704916523505 0.8037574983110403 -0.5900964832914433 0.6995559810522738 0.6509575083819701 -0.7952964160616602 0.9305892893518426 0.7411150601422203 0.9816825900843114 -0.6985220012780682 0.8243138625560729 -0.06719893194761273 0.06750431790589118 -0.3749947254361876 -0.3899272035998047 -0.02140613335110708 -0.08572947665112829 -0.16848277795524136 0.2532524739432134 -0.1398899942362779 0.9551279492714009 0.724796406646214 -0.9895125116454448 -0.9478844861330487 0.5608065884593638 -0.030752868978177528 -0.9374917960755544 0.475927000774675 -0.49111215828509613 -0.3089765136906806 -0.00149243082712891 -0.11876686043984508 0.4019724968757421 0.0613727047273287 0.7500179910880331 -0.4684790334063784 -0.24562289093999534 0.1986818972204003 -0.13659288380683932 -0.9952031676557698 0.707557590248548 -0.21786537470004674 -0.05685598157475069 0.7894997623789535 0.9223650001183414 -0.3703173985667356 0.01392017314608629 -0.7442575129016202 0.15853244190795102 -0.5240838684199103 0.8306297777741138 0.681403979847784 0.23495171850826146 -0.9431639390268491 0.056282100728544115 0.19820621474244926 -0.8561774794022525 -0.6660456255313363 0.6739601981160299 0.6276400735835088 -0.1617537985858022 -0.7427993501275791 0.9982087223501841 -0.30689840526172363 0.21252956928195088 0.6412933253553259 0.40571911369309954 -0.16989176268041173 -0.369246339058122 -0.8705439908709995 0.1053581724380872 -0.4692452986240565 -0.7749273503917102 -0.8672576940465164 0.4796016505797627 0.19088109906853368 0.17234723178837852 -0.2644921015851467 -0.6021044623545422 +32 52 -0.4271702203463539 -0.12461451470560769 -0.34163679302317895 -0.6962069502663544 -0.9195654376624787 0.8384519703665314 0.9761830643329379 0.9223681145518072 0.21882300293408075 -0.38168272248987356 0.6232694669901535 0.7707054274014482 0.3369871127243136 -0.00525135156044132 -0.03880270468179492 -0.9373852480053435 -0.940204848946991 -0.1334364908375827 0.9048780274185684 -0.50161426072695 0.6490088655597073 -0.06876991729518855 -0.16826972357288073 -0.8231608509804738 -0.00014505451658997082 0.6431522033305193 -0.16417532339954666 -0.134833881905581 0.7772101790556989 -0.84612861510609 -0.7975181212830873 0.2775061467435238 0.9728237005109936 -0.3684969061664809 -0.3533156760234335 0.5600582189323984 -0.9320747360242667 0.07095885181110928 -0.9707780526155878 0.6961947057248186 -0.6019336576056993 0.23399728866276548 0.534191197316757 -0.7706628935891775 -0.6164113752841678 -0.5190449120216758 -0.6304479196141675 -0.33872968631423594 -0.7162772598368066 -0.282919827610256 0.8526333840115266 0.3072632490358924 0.21461975232826047 0.07534239183158142 -0.18408062708254547 -0.171878528266874 -0.2884496610202165 -0.7671239544427904 0.4319331020019579 -0.9016748269061092 0.3587079758246503 0.7572803496942229 -0.6993334287846249 0.9558315299711313 0.6872182760606531 -0.022401935182303045 -0.022423014465171365 0.8046012918714858 0.27541429790794947 -0.7878960458370272 -0.3789664047212715 -0.3646917294174046 0.7988351997419154 -0.88699809802932 -0.4803456858209185 -0.5537319671201664 0.860366813607399 -0.18837143080433316 0.001036809517678261 -0.5894711645428137 -0.10178369885332095 0.10873774676448789 -0.7251776063386852 -0.15499899300209563 0.3057153322711854 -0.846692949431189 0.24522736999152683 0.5712557656518111 0.34786749269568884 0.698517408841185 -0.7817971384586153 0.4117810450149817 0.7569699838108177 0.4666983434251528 0.2533037011635899 0.8688770527882992 +32 53 -0.6694623261129826 0.5640695152797979 -0.2921914898147737 -0.728692433320338 -0.08335518836691524 0.3382525134458816 -0.8626083201878296 -0.21594809382508573 -0.9749657732669965 0.9853358766053413 -0.035184969841215885 0.6937329613322287 0.8507918307580706 -0.049684786422594884 0.7805567894331822 0.27015955857065377 -0.30619176670776405 -0.108361446063439 -0.05081059604031246 -0.26209000447841446 -0.6754812407842483 -0.7722321303263604 0.5513651058256144 0.6448004018197677 -0.5043955022211826 -0.9927267954431593 -0.8166544840615053 -0.15611405791020738 -0.12325052425340743 -0.1792493072039889 -0.5316591444212362 -0.1781329223759871 0.1098503769428143 -0.2502481854761853 -0.9052746370121423 0.3748699663041719 0.42452207324940594 0.07032104366139613 -0.49280481103880636 -0.37834752021711227 -0.3792554287524119 0.07580125917507319 0.46557116511619845 -0.979006274768186 -0.7931758615603111 0.6852518862010124 -0.3992149493360009 -0.036620489321406824 -0.5220380222303083 0.18807060785269236 0.6480557531831557 -0.8964953403270481 -0.07132824111446379 0.21846682165085007 0.9568899681652265 -0.1952912453728577 -0.20695897459207147 0.523186737584646 -0.011445578561137149 -0.6367823286206264 -0.2807423607280053 0.8112668622002057 0.1199272142841914 0.03988153898970981 0.2687682073400397 0.6205504004344304 0.9062244489737803 -0.07546554162909014 -0.786449086958821 0.2868146741298334 -0.20293024598304554 -0.7444379430545491 -0.05787339300139038 -0.553501245638407 -0.46118230663949644 0.3005111262525637 0.8965884164615983 0.1536367909910108 0.9135145792220289 -0.9734300344606648 -0.19327058134118125 0.9616685976878043 -0.6357790820427083 -0.8546757657170556 -0.7115187315635843 0.33851896877312404 -0.9126562968046261 -0.738558194748137 0.4410338088053374 0.019415086189437325 0.10377029744771327 0.6486244319140413 0.5360033641141146 -0.02585898252918528 0.247186614374868 0.06792604450312445 +33 12 -0.8301455134425506 0.43779480064893694 0.35912493666726 -0.1996612537597091 -0.8262095632028557 -0.8232398494256774 0.41758677874735417 -0.7340760006674383 -0.9338835179445248 0.7205116616087568 0.9070468901835806 -0.20931461316104372 -0.7638131274907642 0.44955135530274637 0.6265360561650346 -0.7082428450205556 -0.4520396327124221 -0.41973305257259086 -0.07012266824516367 0.8046375842380165 -0.4158754946444694 -0.2887783605352121 0.19372859418794874 0.8169659853661297 0.45041867531978763 0.31113469272036776 0.6742223019683091 -0.029677102308861114 0.8755192805191379 -0.7664980716182848 -0.14337398981829375 0.2303531435999504 0.453106347562392 -0.12324211248304318 0.06259737607284865 -0.43527117514226266 0.6167503551535982 -0.8726295864311668 -0.17929749305403875 -0.17557938771011328 -0.09101983510216916 -0.3636067549755042 -0.9916672276239038 -0.059967184124923856 0.0334838353631719 -0.20514942719501894 -0.49565168333281595 -0.6585383063039636 0.6030059144172886 0.7009385379998307 0.3211107166385374 -0.08059846770754997 0.1348514126031537 -0.22098170827900665 0.9841036756732362 -0.964141166510162 0.6288670274133217 0.5041649785696538 -0.09870350311218057 -0.9870258132135521 -0.41872070827860086 -0.895193777701393 0.2945293079018043 0.7291956917048219 -0.8682696009708502 0.8376866943294599 -0.8847218249704416 -0.33115335084949304 0.9686077897461913 -0.17643178964954398 -0.1755443501159093 -0.5642255724020959 0.13868549816807718 0.07457888729715534 0.7180961447092804 -0.6392998335201077 -0.3922448823611522 -0.06666071549988062 0.8732709661436371 -0.316260997774487 0.7652083320824712 -0.07830674146157035 0.22896862176230903 -0.4912375897672183 -0.8128101768199214 0.7680635082642722 0.4321426170468352 -0.25951524508518986 -0.6621476353837965 -0.8119624848356952 0.017789609946586626 -0.6133867738392282 0.3253406489164399 -0.4719109731871294 0.6365047648227855 -0.27969101512892225 +33 13 -0.5215250270658283 0.7067309468897742 0.46596542072763736 0.04126694624478233 0.6603846033075578 0.21474704400293998 -0.20433734327238162 0.8381216988911344 -0.45543149545595485 0.7416009045358629 0.5491919276647801 -0.49082268007195884 0.6468405924040621 0.12249416288058801 0.4547251227996181 0.9143379268114638 0.7444914948264452 -0.36222932518402606 0.11855928207656574 0.10315701285954182 0.3754966960505741 0.7576706258760286 0.7691440601908817 0.429823826244528 -0.5881102872021011 0.19800691119949643 0.018741664665376634 -0.7223258556935797 0.692553743457379 -0.5035733257744537 0.2809679417781943 -0.33133875887997144 0.8704241820316514 -0.6871330489849261 -0.6616942424650538 -0.22280694827572045 -0.2998969520534327 -0.7798175797307969 -0.3014837340691998 -0.46209436911699786 -0.029139993037720524 -0.1002695280116499 -0.928871813066503 -0.263982485349076 0.921065603074154 -0.9862629073052134 -0.8193545752327358 0.5631352729948709 0.1678976913338377 0.446234397583676 0.06640056157680196 -0.6094939771078085 0.04866231924012654 0.00193390154350781 -0.4583440905789966 -0.09700690425134839 0.8239965724872025 -0.1493928182697195 -0.7787711247429132 -0.8231302412424917 0.8140414981271304 0.5184594082708394 0.43779857553051515 -0.9695149735207114 0.8667867760644634 0.4263022539715855 -0.8491504433576644 0.024985276452236027 0.33707754026066605 0.3658251100427139 0.4097102900657523 0.43820143955551094 0.8413044297346168 -0.97081419527356 -0.7842963751626737 0.6642766626868184 0.9458138718646405 -0.8196535194957593 0.7904877588180186 -0.44044156356124686 -0.6708080005841854 0.76120049291666 0.23630800792895568 -0.5316910430748842 0.6971270340107154 -0.4209079461538945 -0.30645594755342853 0.8287172310156989 -0.06165790438133034 0.7141509295587187 0.9045033926444783 -0.18783578219451424 0.37370628345042434 -0.6439301717492705 0.5465258526662253 -0.20941341679597603 +33 14 -0.875298734061535 -0.7268645169439896 -0.3909013254970184 -0.303558828715631 -0.037194025472140346 0.02035959152756117 -0.5370135749894154 -0.25298479583152234 0.5377632858375962 -0.5406334012201464 0.8717535691458695 -0.19993062089546276 0.0056955868852368585 0.6483032677744363 0.2982787913039564 0.19397806502277515 -0.48840640424459236 0.5078452447518951 0.35804288028283504 -0.11220028643266455 0.4200959031645357 0.731429071418209 0.24162182920886677 -0.6295430892152105 0.23583257627052423 0.1457563415265124 0.8581570491087684 -0.9940381026317708 -0.320318482489784 -0.8755058281081398 -0.36765482187222953 -0.8990952786629942 -0.438120673903341 0.176712357470183 0.19761835271835104 0.2558830291894898 0.17835884751579267 -0.30385306199007633 -0.9235518770869557 0.10466685308867274 -0.8004408748817302 -0.7159529227995718 0.30022016837043464 -0.4796232840305914 0.14874264682289629 0.3018635573847044 -0.8618086161173562 0.25337013670035513 0.843785199890636 0.6308459812162683 -0.3287224324738445 0.17353339662605505 0.41726469939806443 0.5086254936052603 -0.7010556926746325 -0.8774714747933434 0.9189142289584067 -0.9900295540805213 -0.6834113633232859 0.42387981721204504 0.159257116915273 0.05385897682575336 -0.23383711946626606 0.4115005824441651 -0.03281727597837358 0.04061188121563242 -0.20069598269506006 -0.34315580663266276 -0.9524340447219619 -0.3621569654169383 0.45942124243205673 -0.7759273207012081 -0.39586743466018737 0.3323155174799184 -0.5397444680646484 -0.4790132952962016 -0.670746799574967 0.8505957709931256 -0.8701599360021683 0.6172468515073077 0.3347531830932544 -0.4108842762682099 0.8372316903572075 -0.6270948600815607 -0.7702779185699413 -0.5090496012282082 -0.1823469914438185 0.8749713159187751 0.7228537441680765 -0.18802325597530523 -0.587846807104415 0.6954859021111262 0.9381995674461447 -0.8377254159670868 0.8483421737394585 0.3671856570929042 +33 32 0.6277076140183115 0.3342736789765275 -0.3948135480623558 0.5219691874608787 -0.24529239648050027 0.434110840255336 -0.5090853211833961 -0.19394379875774814 -0.754820894143275 0.15806282862472054 -0.7617211698880182 -0.21816011316513717 -0.03413425883261989 -0.711214196256051 -0.9523309016768875 -0.5019021382604103 0.3623224596702752 0.8536172406381062 -0.3519269073612812 0.42460974915354144 -0.058727940313040516 -0.43613343184002473 0.9426578680277315 -0.6852019067312387 0.8073134434581399 -0.5200979415958891 0.9083347220856177 0.8642297340872152 -0.3079966998421546 -0.908636934068906 -0.7824609965948086 -0.24495638174346102 -0.5938700921768223 0.22243412455190992 0.787463305145115 -0.06342879092718756 0.007270482800759481 -0.10279791914807035 0.4627302376278699 0.24310561868969582 0.29697572417265716 -0.04036906502697102 -0.9137106887448654 -0.6090029667869603 -0.057224794775800225 -0.6366917414553677 -0.013802425566636911 -0.015314949278266932 0.06586978434076585 -0.9500080832794615 -0.17266114619047346 0.22386523160803784 0.09497474024625419 -0.4203669751556627 -0.6807794968585132 0.17029337336679795 -0.4446384527762355 -0.6989413105459534 0.17289069614943964 -0.44225987311952264 -0.8938637116501811 0.7308754204318351 -0.5946837636264242 -0.8730989913972811 -0.3135830420977943 -0.03685134238943122 0.10245228841512377 -0.5760483153625102 0.5878798612279355 0.05650855495987295 0.19285414603594075 -0.09986571298338909 -0.8553334538761994 -0.7921798748097757 -0.33546490152997666 -0.8866542737388652 -0.33096436765368975 0.04629517162312857 -0.19477966868241614 -0.4984999411963944 0.534763877917142 0.7788262028855568 -0.8459948535139536 -0.24193476109400347 -0.48702319922598125 0.619916274095903 0.5650526425347042 0.5534465825707169 -0.721704839398347 0.8075158555965565 0.7990006289919425 -0.37361039557894626 -0.6483201391921258 0.493414592513598 0.8057377092994846 0.7190087247162862 +33 33 5.18139787972092 3.5902163354650263 4.645863109390836 3.3250380966396906 5.222798738808498 3.2131524968724534 4.439063852470261 5.070144675061188 3.7894176310606955 4.889235645744052 5.005620486580415 3.9490568101490715 3.7163545218764265 4.361464074695931 4.963631014764669 5.005303673948081 4.3211468618382245 5.180935521186963 3.5885272343935406 3.7254509130135633 3.9800001769220854 4.898456125794703 4.735370132729224 4.416602506488761 5.128414171254089 4.8012589729888635 5.159308873376265 5.347066447494037 3.771920358846679 4.721753642919973 3.709338317383778 4.2942023808858645 5.5398150680355425 4.1943238660552815 4.047767962820961 3.236888541965325 4.034532487860919 4.089809788762234 5.803464595714745 2.1616177959445935 3.880115429374688 3.437030992174365 6.007531733230675 3.641312733251799 3.711723165752856 3.9951857276531166 5.022415930784018 3.1603086550611788 3.6974418586230366 5.05465009992609 2.972400611660193 2.9545733194516757 2.7964880481153847 3.0866897777477433 4.988879932592843 4.676890595483689 5.905510289144049 5.695885774031943 3.6781018750093355 4.299937376255356 5.281058681892758 4.826383870761772 4.614407201425658 5.659155497718126 3.7463183266598152 4.9399694452879475 4.6799534136908205 3.85438965444005 5.8213433983763725 2.8972107745467186 4.3724164099318195 4.6378045749858305 5.650006031307507 4.523033316076958 4.762740769997894 5.899436825994546 4.4699712123890505 4.834574039075923 4.664784542613866 5.25750650370571 4.338786502359426 4.7551851421422775 4.73948059537073 4.082807593508629 6.425335814704921 4.243564943046021 5.557759401598579 5.436127802102377 3.921264077776195 4.930568471099749 5.213995304460258 4.888997458141848 4.970505212471341 4.997023811051336 4.529154120613198 3.1610195247548676 +33 34 -0.3639686861982898 0.18569505551710863 0.5326815978079551 0.9787011321521586 -0.5310949932118445 -0.2699919304267866 0.25637966990604255 -0.519889353142621 -0.20350140173700582 0.3386481491271296 0.7784076283565977 -0.16816540573234517 0.249503387326937 0.6859937170612032 -0.4847991395288578 0.8232569700992116 -0.8576638144973867 -0.9361945695707481 0.6671470635323529 -0.26634545413237287 0.3567297452792655 0.07575251780035996 0.9425494614771881 -0.9706171776215293 -0.8642864141546702 0.7383978511190794 -0.2292721306344485 0.8649986482814656 -0.22383169257836588 0.03221264640193677 0.426925578218728 -0.5926974308028177 0.125122096700925 -0.857092989664199 -0.1456794811854174 -0.3141426474642637 0.8128991581257279 0.004841291158396377 -0.9595256110186448 0.017995150240013524 0.9591207052832134 0.4250496246541642 0.9363587992552151 -0.3883107999352675 -0.31760151666371805 -0.4677249283593041 -0.528301618813372 0.4108932793902471 0.1149826985997906 -0.8545611250345744 -0.03843007909160345 0.7012535362601635 -0.39022212672099665 -0.0978786713148605 -0.7642100860629577 0.8982080228398159 0.38738797132699765 0.45852068151019054 -0.4876967261793066 0.16307135158508768 0.5006969656974805 -0.28251063140399113 0.8329917759001009 0.8152340018690749 -0.7050816491897813 -0.5830097575229476 -0.30271528047689444 -0.9013799093846231 0.9479221091837899 0.011126570192401708 -0.06084845059876254 0.8100061327960915 -0.9851298871979925 0.958375396123659 -0.27790513311573006 -0.15380137806859207 -0.05082668133232504 -0.8512224112629103 -0.40969819852982914 -0.6843588955557169 0.4502446310227626 0.3661674669939179 -0.694066078435841 0.8273577352228363 0.33143280866403657 0.2364811051620641 0.7748020809311973 0.8258144036796955 0.11544291283880215 -0.22282704889022864 0.49807485192703016 0.6836305945519046 -0.7141702861979324 0.26034543921691666 -0.0428864067616177 -0.1403546964630784 +33 52 0.4482998845245767 -0.5264692546990186 -0.1383826443201921 -0.3461286997386164 -0.7505788009757313 -0.35968033578975733 0.278221729784222 -0.6827243222565602 -0.47145030049503256 0.3119458669310602 0.2185751148321402 -0.23773584578278917 -0.36022744575301524 -0.719702275472613 -0.23477473867763266 0.3790352895423301 -0.06364649285515678 -0.41011781240103207 0.5886456644112048 0.668462677038822 -0.9597553891937087 -0.9376508699988122 -0.7604359279750421 -0.23273539004000465 0.5626512431873598 0.9888023732845215 0.5057192844370004 -0.528130952620476 0.5881525144254505 0.6875766637646434 -0.5840804767705263 0.9022898703468543 0.913195437611533 0.489211341137604 -0.41058790133722556 0.7583928799461874 0.7088125358975739 -0.33162336975059215 0.9832224053472489 0.3905804464594751 -0.15954473110293987 -0.6936053055052374 -0.6728175785568822 0.33496450440226244 0.9401978616406759 0.9595053185629312 -0.7704642053902551 0.3082743575317386 0.6701846206095652 -0.17138935678585288 0.8643383879307083 0.1922353347919985 0.3192403351706763 0.40656624052306745 0.6835934165257775 0.541371882712441 -0.6224494665846574 -0.3257519784641083 0.01556719098824022 0.1754172959037179 -0.7696313593723332 0.8366521389011969 -0.5027366711826688 -0.05817422372003267 0.32386236970856186 -0.8645188249922529 -0.6456197250876847 0.6085892415245393 0.6452092280166932 -0.04329002930161607 -0.5560447516376017 0.5514204833418861 0.44045625997543936 -0.18606704329626345 -0.3287392931698967 0.8450129476944495 0.21885987285019493 -0.29438475220430127 0.8984592343699622 0.967204633505881 -0.49397060277194216 0.8216887811826474 0.737905727612983 0.7037899800457963 0.9951838925217023 -0.20742392474763505 0.9884807671140694 0.8700686294192328 0.6975370339304965 -0.0492436075437952 -0.9499792752655489 0.04016500160817227 -0.47029195161787296 0.744713881599784 -0.4882624126766304 -0.7235950883863953 +33 53 0.11627019490469448 0.16698529837975173 -0.5167943300317666 0.485930416709335 0.5327202434448861 0.6438817833743091 0.296997086724452 0.9647124180376576 -0.007026105529336135 0.9200780587269266 0.38340369454336787 0.7163688643698114 -0.4897676446417678 0.4380078845342048 -0.3769704159706946 -0.5200590687007429 -0.3857063194188146 -0.3909054340205904 0.5750880179318181 0.6570080938800129 -0.24025517853070388 0.7635609071250906 0.33847930191213926 -0.24949561543127508 -0.6769761779210204 0.5988448858033082 -0.6778211557396954 0.7644175075515871 0.127248553878879 0.0999189522654702 0.4607837589761947 0.10430100467478165 -0.8762404659719338 0.11907514220510573 0.7512314831047973 -0.09669270635976157 0.6351168762638522 -0.44221773334805325 0.8084648086775099 -0.09182014745925238 0.4728687384759853 0.2794428042257264 -0.6867317658119834 0.30283138889810823 -0.1471427613907592 -0.11108933926809361 -0.9907214878241235 0.41980869877579474 -0.49247673431140737 0.6828754860541275 -0.1549856058691388 0.10174351196433773 0.2306350107513382 0.1259945679117298 -0.1715356753940369 0.624523373729873 0.7642954189479456 0.8428748304136378 -0.6035925882650999 -0.20481813358673429 0.22526446841505843 -0.3598753245444273 0.8388526305160002 -0.8663591712410601 -0.22530919624567525 -0.8851268783887076 -0.24087812640150275 0.3237547722573286 -0.37114598517307185 0.9015176009973085 -0.8803437599511774 -0.6998931336243317 -0.3945714770351323 0.2168096556531054 -0.2631331669505037 0.47260944764262236 -0.7913955027831685 -0.2595637069775265 -0.041213752511193524 0.7987013648850771 0.07123020461733431 -0.9970624860930968 -0.626213328517782 0.23385538036932196 0.7068078434647027 0.7123609052026219 0.7832061589552404 0.38144077696226053 -0.0016981179836912386 0.6173487277394247 0.3991405360114537 -0.9656750682892872 0.18588222156204526 0.20862051347070398 -0.7489645588118099 -0.6144739815354072 +33 54 0.7115405038697915 0.2628920849877405 0.8832921093677191 0.01833626700363622 0.664021618973178 0.09321546201970432 -0.9586791289187515 -0.48663727216218833 0.2932174464377877 -0.4156437805527098 0.5077852322224665 -0.7834226333792418 -0.5640120986705641 0.15318027130073042 -0.667305865139719 0.5243437541606726 -0.5725553105604084 0.9547571930015206 0.3558289930477314 0.5708452614675172 0.8043505219950202 0.49452806462108345 0.017250462638461528 -0.1577884794561908 -0.5578309502264442 -0.6648121206807454 0.801011217395931 0.3309795074751216 0.29615611401128694 0.13274764534337025 -0.15762509890642784 0.9551227807017597 -0.9319475942401929 -0.8730718852105364 0.5347779993254109 -0.44124904092004735 0.025697185247881782 -0.28378612276538395 -0.6993854584632371 0.645804096553027 -0.14256090620880113 -0.7828353635775311 -0.2633763690747055 -0.44308573026332443 0.7317224694387432 -0.07952565602628048 0.289666914721616 -0.28719633158944635 -0.41578454113266927 -0.4465303832335126 0.6877376103570148 0.00047586180109937537 -0.6587203064552554 0.554593573084939 0.16803100213824473 -0.353720113650708 0.5474788942203828 0.7833274674840278 0.8149272714103861 0.14512960118067864 -0.5861590837472115 -0.9386528747361678 0.6533926306887605 0.6358658172426641 -0.089901748737506 -0.45365936654129957 0.614885387517903 0.23585102812261827 0.43109177499957974 0.9351176285763538 0.6626526548839577 -0.3768403078023972 -0.730650194722871 -0.699873484630859 0.9200274775773192 0.8577883244784958 0.10013256502919621 0.9102536869945856 -0.3827707501610216 -0.7161785452857472 -0.5072044132781934 -0.4603007882323855 0.12993198683310525 0.1409135136327535 0.7114400803195595 -0.004471992671643221 -0.8312628418102916 -0.7084795109272308 0.007663782360981308 -0.9378106411642055 0.17302458428992584 -0.48111764085286324 -0.8636419126918746 -0.4793295157624271 0.3688186888076017 0.10047567528786128 +34 13 -0.05784970883316709 0.15364447120453084 -0.3466205827830533 -0.4121391588803842 -0.900378759049375 0.6796906726343808 -0.9998697847087008 0.2644000924733729 -0.8848564890565338 -0.6546886303504307 -0.6040972063007206 0.9760552771233515 0.6716447453875976 0.09316554701525726 0.6849784877652225 -0.3700473220641549 0.06012088132223403 -0.45470695143998796 0.9593131004644229 -0.9379974645476274 0.9135212152819041 -0.597525196294072 0.549228284507753 -0.30763922480720174 0.8666309850692222 -0.7346856045686923 -0.7326082469169428 0.2834911800269917 0.7267196225558141 -0.7597137196361763 0.9976920417475759 0.362948754276591 0.9108441335839728 0.6851313040720086 0.7840099650415067 -0.07403475502150236 -0.25890390788137974 0.0698555336781943 -0.3607828051947106 -0.03004936776044742 0.7043930821226958 0.7033317592553581 0.07819712445717242 0.5032947038519666 -0.07076353365603238 0.722043591705154 0.7104827421277919 -0.03700001990271584 0.06699480899724697 -0.7244616052283772 -0.7649105100688127 -0.6979607793054481 -0.12428397805737168 -0.7060064156160295 0.7929620669465107 -0.32037927120779597 -0.8213590863111977 0.799863115587162 0.5850176650933225 0.37317241252102606 -0.7044698105311038 0.9632544350462893 0.6716212919141962 -0.5249248259030077 0.557272383560903 -0.9131631612760429 0.9190855584816611 0.6763512972290058 0.45234038894798134 -0.951114300745532 -0.6520227031263355 -0.5570365303438132 0.36054241209301896 -0.45062625457725414 0.2541903665048224 0.9535190220533161 0.7014593603373185 -0.41848310658941346 -0.925228806918031 -0.8835678090511312 0.4816505110999145 -0.5179279715890277 0.4198301341940729 0.5483877476337908 0.8806058915739858 0.0009379906754911627 -0.656247788973237 -0.5467478599884512 0.5062011203721544 0.690446083775325 -0.34807118208337573 -0.5352398052773613 0.38866975585738284 0.03352970335775396 0.2411831899835628 -0.2515490186301783 +34 14 0.8882586548376534 0.26432319663983694 -0.9351881919015148 -0.32817046618677703 -0.3368010981894871 0.8858173679393657 0.9603544303825728 -0.6240176398595867 -0.3336477419937005 0.48634553635749533 -0.4846894910995545 -0.32701597148952977 -0.3344306806701267 0.0697148674023893 0.8550353753319604 -0.9794869483176112 -0.04294193146328329 0.7503684468478116 -0.14671366072588432 -0.9444287056543892 0.7226332359613727 0.2220678840690673 0.6311046127566944 0.5270499027330888 -0.13187956871135342 0.9593155939943891 0.9868523671915443 -0.9428694997245581 0.31470002168846545 -0.63078673561873 -0.6498937842983992 -0.2922246152537329 0.6203483460941055 -0.9928117708040272 0.7821617653816892 0.17950187965291642 -0.36138603742985986 -0.9098770130920291 0.02036454058512005 -0.9852935199992692 -0.9300097856141896 -0.7545436857833339 0.5277410067157788 -0.482088035226486 -0.37945846676772765 0.23820385369539965 -0.765292504579695 0.4324089376398672 -0.3751330190909341 0.3044582172496484 0.443938443713207 0.7979342410235435 0.8320927636928752 0.7790318319406428 0.4822021612003833 0.47901062517894477 0.5909181394389427 -0.43971125267998645 -0.07655340939207123 0.18101836358625567 0.8264335673597571 -0.6003159150130415 0.20781537496902058 0.3518432614728866 -0.9053826559132256 -0.6178079017925564 0.17282323143752554 0.2636179451973619 -0.2566927326568773 -0.6175367393970221 0.17369089138553062 -0.7848184814463499 0.8075398415950503 0.5409473781589389 -0.709137706941787 -0.6550349355001266 -0.5374919049587097 0.08445963910976495 -0.7217218312333453 -0.09907037310621725 -0.7074896447619861 -0.6228418840917604 0.4557085129587406 0.016808761895299673 -0.4402195119304968 0.9054696762518843 0.6780988709887772 -0.7931141053996462 -0.4982053069493442 -0.6118255543683326 0.17816998158162867 0.7603301528200173 0.6862712800860908 0.3956889506175949 -0.9675474910529551 -0.6584924572337207 +34 15 0.13830463903656942 -0.5983353868011914 0.21737448205079501 0.4573876252452709 -0.02167934513395431 0.3582869322182023 -0.5558818229929059 -0.18469482527742098 0.058125559666495796 -0.9742873157137353 -0.8414912462205901 0.24340438072205073 0.5918820226574231 -0.47655388091481043 -0.9959794175516621 0.7389508081199143 -0.3461492054401083 -0.7958862745851181 -0.7228761419029333 0.9226643061852444 -0.6396407049830188 -0.03459251283247866 0.6196005532075137 0.057648220190628985 0.3161880344122834 0.012336490603793493 -0.7117002493286206 0.025305912307593603 0.5856887435829985 0.45415993533297194 -0.043446856747167306 0.00910091756605591 -0.7302556358687906 -0.735902002354875 0.13460718817906692 0.7461012541205114 0.40299308389422883 -0.34169485213346484 -0.082704035848576 0.4815476564246819 0.44515825332247205 0.03127481024013545 -0.03615347974487282 -0.6389524808757803 -0.4539940083607126 -0.1722743522499759 -0.9075371641584056 0.24055162035636313 -0.7053889413578007 0.23589546818416296 0.4893267334692133 0.6939110162299873 0.27529447871138735 -0.2279537963725249 -0.030115640396741528 0.3363512433840996 0.6016141358781086 0.2337087104615574 -0.7126397878649497 -0.43731653291879136 -0.16223189414723604 0.8256857034199352 -0.8205759979275731 -0.949916361734604 0.878900801387785 0.18260517451556546 -0.48505046197296986 0.03782165920666314 -0.7820882553964237 0.5135146536087098 -0.3911361064845782 0.34627908706451027 -0.8582867668504814 -0.10860339392509077 -0.5749240437921059 -0.7639176549423532 -0.04696600278329566 -0.324554842494599 -0.14713397780873416 -0.46807381934583425 0.6748119133600876 0.9638110984806347 -0.38142664029325735 0.9525399761341888 0.8709826858539591 0.8192204343597749 -0.2748701452591751 0.8263932324251921 0.7850270489294224 -0.4882320079111375 0.024803199955241606 -0.345568799690126 -0.6029734613358086 0.2870047105938134 -0.33802827673914804 0.7548671191776317 +34 33 -0.3639686861982898 0.18569505551710863 0.5326815978079551 0.9787011321521586 -0.5310949932118445 -0.2699919304267866 0.25637966990604255 -0.519889353142621 -0.20350140173700582 0.3386481491271296 0.7784076283565977 -0.16816540573234517 0.249503387326937 0.6859937170612032 -0.4847991395288578 0.8232569700992116 -0.8576638144973867 -0.9361945695707481 0.6671470635323529 -0.26634545413237287 0.3567297452792655 0.07575251780035996 0.9425494614771881 -0.9706171776215293 -0.8642864141546702 0.7383978511190794 -0.2292721306344485 0.8649986482814656 -0.22383169257836588 0.03221264640193677 0.426925578218728 -0.5926974308028177 0.125122096700925 -0.857092989664199 -0.1456794811854174 -0.3141426474642637 0.8128991581257279 0.004841291158396377 -0.9595256110186448 0.017995150240013524 0.9591207052832134 0.4250496246541642 0.9363587992552151 -0.3883107999352675 -0.31760151666371805 -0.4677249283593041 -0.528301618813372 0.4108932793902471 0.1149826985997906 -0.8545611250345744 -0.03843007909160345 0.7012535362601635 -0.39022212672099665 -0.0978786713148605 -0.7642100860629577 0.8982080228398159 0.38738797132699765 0.45852068151019054 -0.4876967261793066 0.16307135158508768 0.5006969656974805 -0.28251063140399113 0.8329917759001009 0.8152340018690749 -0.7050816491897813 -0.5830097575229476 -0.30271528047689444 -0.9013799093846231 0.9479221091837899 0.011126570192401708 -0.06084845059876254 0.8100061327960915 -0.9851298871979925 0.958375396123659 -0.27790513311573006 -0.15380137806859207 -0.05082668133232504 -0.8512224112629103 -0.40969819852982914 -0.6843588955557169 0.4502446310227626 0.3661674669939179 -0.694066078435841 0.8273577352228363 0.33143280866403657 0.2364811051620641 0.7748020809311973 0.8258144036796955 0.11544291283880215 -0.22282704889022864 0.49807485192703016 0.6836305945519046 -0.7141702861979324 0.26034543921691666 -0.0428864067616177 -0.1403546964630784 +34 34 4.263982565012675 4.659850641019736 5.229871774555193 4.837791382969322 4.547709745344437 4.674110660409421 4.697480129096904 3.937879210209456 4.3155456986675755 5.13535843158482 5.497892719444149 4.024606037554699 5.430112113073638 2.7511571181038645 5.218734743618567 6.588414494273673 1.9941075540098068 4.333148322857612 3.9892999860115177 4.350507966881123 5.430509827763898 3.7163428288815274 5.740217653899908 4.033649448529448 4.573808289152987 4.400335275345779 4.82387486247819 4.284138717056339 5.09262393749264 4.697214228438099 4.349556958808132 3.6563804321238766 5.760359925199054 7.029820146670474 4.076689813761999 3.8654838957486284 3.810977996519529 3.5047053865968287 3.138599364814752 4.06149335429807 5.704670989771079 4.125911695360081 3.6762776073701504 4.561063104449353 3.88121389124887 3.975070334913892 5.602271910542349 3.007545355004111 4.3028790619699135 4.094541903429124 4.9532385723760095 5.336763203084 3.7612716659293235 5.302737733020169 5.255353024122547 5.019815935849689 3.7923207456251093 4.641776451421901 5.323497742258558 4.06157117883634 4.026779403576252 5.8984703352343475 4.713487856545082 4.4082008997173325 5.048685765485394 3.9143688013111104 3.6758681700269644 4.28881569640897 4.63859676890603 4.714641098148335 3.461326568249779 4.49749576349651 6.787745250584678 3.5541757291619103 4.369073753013582 5.736821764095273 3.990527774405975 3.910285356582542 5.572166257949194 4.27820858721587 4.430021428416857 4.894568218885729 5.222223696895913 4.428931143703059 4.642130972274164 3.966320623376359 4.180045516825026 4.53817491827378 4.499135805403828 4.116274923960926 3.5061366538292305 5.126514151765045 6.125757808055978 4.436264102898392 4.4605495330693365 4.503437880534154 +34 35 -0.7846585847681733 -0.694465100718302 0.29555963523235684 -0.31775889744825325 0.2823102634774224 -0.0915988622009154 0.5099582395848254 0.0011440948519609861 -0.04837904763735623 -0.40018681233187503 0.7462460298370737 -0.9341258988263548 -0.8618150618768547 0.2664294551813988 -0.517005501990006 -0.7364513903802263 -0.046460517516583755 0.12373376455960239 0.001170380526817727 -0.2119899614094205 0.9643693407410439 0.647571261573715 -0.4785098760309392 0.10179084592911769 -0.3497538519462109 -0.34812634437498624 0.14470063259385113 0.4924280051913661 0.41185256369723144 0.21278421795925895 -0.22656914476998335 0.6517206559635569 0.8117490686266886 -0.8750292615018291 -0.6504760427460157 -0.2525984670808483 0.5942591387093641 0.7569193810734018 0.026909354548450226 0.3384785724754116 -0.2648912285474416 0.37956968653001955 0.10145687527826608 0.6404276067830112 -0.1366784842913129 0.16333620129131865 0.67780946291524 0.2912968632602484 -0.9807405003857528 -0.19190115684338482 -0.5660834074428471 -0.1238473558135933 -0.20897157448235748 -0.45646625135901653 -0.7974716665924253 -0.7504424631401152 0.10313387448558098 0.9198602249792318 -0.8364310472872509 0.5291555752409385 0.7268055776107978 -0.8073232791652731 0.6142046392409712 -0.9144591956207 0.018914596238338577 -0.1167792048859968 -0.9195631811550016 -0.6132714632544685 0.392655173842565 -0.4937940491171824 0.24243975657035932 -0.09757569424090007 -0.8764394764780004 -0.22436357021728837 -0.051094771763194435 0.4257145413779746 0.9983861866584232 -0.0007616560702206066 0.6089524642772883 -0.6721519826497035 0.5424669607320896 0.22759668322946136 -0.8638596392764284 0.4337483818892611 -0.16087016663381593 -0.30449205986698935 -0.44500748721875727 0.16356812513728558 0.7685801554252416 0.1992677025537839 -0.07809267218034566 0.6418038678693174 0.9328771205193136 -0.6243838068001379 -0.21256833340337433 0.3479428048807558 +34 53 0.8526932970303274 0.7446914869615862 0.901037503809007 -0.533070335157348 0.6024883714678444 -0.5727955938909199 0.38024301269585936 -0.971649595943139 0.5985882926034236 0.32485739140019865 0.18284949376947002 0.8519421275434016 0.40015422954345437 -0.5204439729496733 0.5457117189967313 -0.8375453619696596 0.3318779725013503 -0.13608985015452357 0.8589201983392818 -0.17178204664317542 -0.42031467081843665 0.7384676749006784 -0.496789920500178 0.48423509300323686 -0.8095009320530575 -0.43100410664685485 0.24083363850758155 0.05979898604371514 -0.483876918652717 -0.6289642535271804 -0.570297636552358 -0.5171587673792646 -0.9225967984186834 -0.5987310660326044 -0.02707421592384507 0.9955583422256091 -0.000779824463232659 -0.28893285433148486 0.9060367912520928 0.6819747440854389 0.8841758977272627 -0.025338466348122868 -0.21660313958030564 0.8870221876531599 -0.8852383605867067 -0.7577567213941598 -0.22694546622587763 0.6955155905179289 0.38964011640489615 0.49603930527039775 0.9545435152853425 -0.7439696317454367 -0.5736802388784044 0.9196886280833083 0.7379100368110127 0.7604683469659836 0.14688775332898074 -0.48921450366202124 0.14703688155996253 -0.9452492232651815 0.7390874252166539 -0.4678155452244326 0.797007156897561 -0.10543936829477607 0.25591975580803283 -0.4100145062884635 -0.08783682929072922 0.1576063267000769 0.37413500891416396 0.8331237571317349 -0.9737222202239595 0.2741915989099275 -0.6022524062605152 0.6144223533412445 -0.6691918021948335 -0.6980654735799663 0.34921519582946314 0.42390586042379286 -0.7750421771110512 -0.04900891627260329 -0.31598489889573034 -0.2628653888268577 -0.560295047991545 0.48136468848515945 0.2697855666926987 -0.24283890738661928 -0.5190861493782359 0.013933589770379395 -0.29824089769858286 -0.42949976315744043 -0.4067073606337259 -0.6423713351718487 -0.6917773031205101 0.9859678097397284 -0.4843689996755012 0.8311722670072261 +34 54 0.4759669230828387 0.6187081570819946 0.7740613293200811 0.7570429218962478 0.7458530831914612 -0.17715344616964956 -0.21759535992975998 0.8323488075946897 -0.794149628706903 0.7331655312474517 -0.5870774561164029 0.21956621298872236 0.6204991768988477 -0.26404044037870267 -0.25571479902514294 0.6441052296751664 0.18660660073460367 -0.5760014308466594 0.3532304064307086 -0.049938889922493956 0.013346988778313529 -0.7600299279214697 -0.9093074154463094 0.6929081226901745 -0.031288408492142095 0.6656001764518391 -0.7325770479619089 -0.6040940954863976 0.5924500351152213 -0.9341499267706801 0.5858682658673589 -0.45163095633502515 -0.883930072284028 0.7961572980777103 -0.12494634867364174 0.6020309911142046 -0.8984428607006636 -0.09390576530125405 0.08053301845543581 0.6070098989818971 0.5888921041152226 -0.6480901418802301 -0.8044657142965999 -0.14699569950656155 -0.28714921311289165 0.5977783579772844 -0.6701926954851944 -0.08887319346131894 -0.1939490979932501 -0.19490973919015797 0.4746651227588923 0.1303198551953686 0.33301787242253433 -0.3084182091357164 0.961266704497203 -0.26498699103747203 0.6529423944447184 0.23575517566670046 -0.8728057360195356 -0.022577550502219434 0.020642044992911668 0.9533186040839607 0.09931317041781051 -0.41234740335659503 0.8198635890456576 0.3071268160832159 -0.5800232213076029 0.43024923528383785 -0.1428268371305561 0.6510608106293183 0.09028611732877523 -0.11510487978390072 0.6710016144531015 -0.04396469835932293 0.8066201401753064 -0.6214291557417133 0.23262082190008337 -0.6666982105330366 -0.809184252098569 0.45104705865957473 0.014401372447134797 -0.3987512385905436 -0.6173694532993472 0.42605819110684373 0.9427287916890554 0.44124305166621736 0.06862816911580616 -0.5563573196756477 0.5598452859629097 -0.41663068710776896 0.9958181128932175 -0.16244068302083714 0.38357070846324914 0.5500829773056359 -0.6307383654080336 -0.7375842985066619 +34 55 -0.24803875743366488 -0.5627112835621337 0.8052356694970395 0.5805872669357048 0.3601524257384605 0.8043161387365043 0.0690349894572535 -0.35639709516138884 0.9362989475584507 0.6610615349307292 0.6155188780269598 0.26714827601243885 0.7718815092359776 0.29268861104161004 -0.0887796603963138 0.47889280805543133 -0.02931916980697591 0.3435262514128541 0.06960232915169406 0.7650322564172443 0.6293970328582956 0.560301063130852 0.22824413393256093 0.6065322363372239 -0.78628403905735 0.01749743704993012 0.36313398433777033 -0.8926329758581462 -0.7638350972321406 -0.7948294006975634 -0.11281450553508354 -0.35415775395079785 0.5993672271775932 0.8992730201176395 0.9452705904133119 -0.3439113721925766 -0.0006813230458946329 0.30581156750646854 0.3188113854831447 0.6295214197321761 -0.2229011461007857 0.7659933516044961 0.12119846704939463 -0.8269569716024616 -0.4830217996220454 0.6244465578001981 -0.2143156895159508 0.45777504574255734 -0.4919927796062227 -0.2545801010604791 0.9636896822515835 -0.917785572637501 0.9400536249188733 0.8592029326373523 0.6494961361107578 0.21288915183764567 0.39825037336388913 -0.3644527282253127 0.9823477876083162 0.9341989011701641 -0.21707421911640545 -0.17301699524599523 -0.37810107324539555 0.1308291744094201 0.5634850543183865 -0.23536340290689828 0.18195970067793787 0.8460943635841787 -0.5533024997399587 0.2629682322711042 0.27573988773898117 0.5317853550475171 0.7098193520447351 -0.5262169006214013 -0.17586220744127967 -0.7233134280075517 0.7003817739522433 0.6673000652144037 -0.39403847988316665 -0.5005290128581295 -0.5323780368747035 0.8593768640118455 -0.4950559544960267 0.6089986881178131 -0.20687029288344339 0.41743466595046197 -0.23459855168249422 0.7067921795600403 0.9344557743441968 -0.766091688121399 0.42099745515174924 -0.8448545513751857 -0.7871369723636332 0.357330234554849 0.7062615693923708 0.40147600602692135 +35 14 -0.557797110468019 0.3383552048781344 0.9682702232189828 0.536761440758067 -0.9115345976270939 0.4362747083719942 -0.33929065956588667 -0.7459382312037324 0.3892538287206906 0.1324466401662754 0.05870820327085435 0.5205694474865326 -0.5499639809220018 0.2718044240893991 -0.6332410690181274 -0.6206889002640321 0.43299634451361757 -0.9134498824724624 0.6033783661514729 0.1471964059691413 0.6034227388965585 0.38702835365461263 -0.8177089234700607 0.00627143984655909 0.3298683577909338 0.9862190199931997 -0.6667071421933837 0.7883140323447615 0.3745792155518781 -0.5166938344916507 -0.5449545829267828 0.25352076035381566 -0.309978052428989 -0.9889250456585452 -0.48276231150962445 -0.6773197119666527 0.3003496384053115 -0.6823105521905777 0.17263631891521913 0.586740374068691 -0.7032032337855245 0.6223949354595919 -0.48851129511729274 -0.9367205638567848 -0.7131401645669277 -0.9574582828794878 0.9522022995529789 -0.9614099483538463 -0.01879787261393262 0.4025974766787428 -0.7577762989132948 -0.8003320359848145 -0.6772566831729527 -0.7645542093458508 0.21803097656825976 0.400105162667481 0.9020188941146645 -0.2506335939308033 -0.8613404398393996 -0.35929533605999975 0.638000245281882 -0.14281419941727336 -0.4766486587146117 -0.5567693436285168 0.385873788492616 0.8741052559679943 0.2825678803430245 -0.5793808011907926 0.08004068274527865 -0.858544453889122 0.8488139664209362 -0.9488114738145019 0.951788952819415 0.2501798203552539 0.14779309145771413 -0.5497447054422022 0.2284674906339459 0.4110683545357148 -0.7287041626525506 -0.4303899506947997 -0.47633093106738156 0.5134258829222063 0.6103034226441177 -0.045814884748889284 -0.6613701662533347 -0.5491210627625931 0.6979407608648602 -0.4435057518912353 0.5446063853259462 0.8362732927689398 -0.7123115573950138 -0.8953754947965786 0.7683395513453322 0.727069014143563 0.32253057600957935 0.21181640502608956 +35 15 0.7005158312428739 -0.34182456080271706 -0.7568844682238569 0.34941390922935733 0.8632891434355261 0.2963856761637713 0.018792759538161175 0.45079791857105245 -0.48557185781895584 0.24355217907009719 -0.6450297720208622 -0.3601456990554821 -0.014312325272530346 -0.12232594446861111 0.8092485861804848 0.0060572598237940145 0.9282602532050555 0.5924764283925441 0.9314155978670988 0.7954298753633899 -0.3794720217635754 -0.43537634114996693 0.732953983901879 0.0960471353681156 -0.026075601931957904 0.8411517785652238 0.16590096033663415 0.21143878769772995 -0.621620761169454 0.7708269694319627 -0.5838338470799529 0.0928906862054526 -0.4143384591980295 0.7423393727849494 0.5889742455617972 -0.17225295325486645 -0.17123767695007563 0.7304188515038219 0.25687812262092513 -0.1599159593311601 -0.8731905194877712 -0.5308779444100056 -0.8525283973437456 0.5634107369061923 0.5233647227657181 -0.730581042220571 0.6923994412413539 0.8416357125189151 0.5524080412258945 -0.7823208073546939 -0.05882457711595701 -0.7364673337011032 -0.8835483524429408 -0.8597412664272057 0.921007724644276 -0.316812938976873 -0.6033019185053603 -0.1519666998139122 0.09020173030071654 -0.08190819977651653 0.5669968397058402 -0.7066321217439613 -0.3497371185656428 0.45142298470877384 -0.716327463036935 -0.012842416960389125 -0.948423362978656 0.07238944695332039 -0.29384071136889234 0.9642387410821867 -0.7577219100404111 0.7061770133289629 0.07036612168719492 0.13271712843438843 -0.7083648329742942 0.5896997624677534 0.7880911960685755 -0.71378723554628 -0.23372663082736467 -0.13987572422734673 -0.6516553444699531 0.9398069383162224 0.8924568254384078 0.46696540606137926 -0.11205503734433764 0.9980236117011889 -0.9514595736683644 -0.9787654932129564 0.4328403661170743 -0.706350712882762 -0.5160255403805205 -0.9881890553578228 0.41605372911065697 0.13160397678220526 -0.1758277333110847 -0.3590718509023929 +35 16 -0.6063009746115968 -0.9782994064327653 0.02914504563527842 -0.17384675404158978 -0.754590562390093 -0.29389764522806816 -0.6994605014313002 -0.5319894081779195 -0.5856031332076932 -0.28584470208280033 0.8711815504133784 -0.8473818795690773 -0.6304703880972171 -0.7161463527540814 -0.7188205814149342 -0.04647003224797763 0.7709490903325289 -0.05260324298154706 0.7047184029794646 0.6252705881623264 -0.40942511632046874 0.2926630965568313 0.3191332908163409 -0.8018800379071755 0.18029950231078784 -0.95425677710343 0.17930016881248045 0.4576895402889709 0.1835395146198855 0.12035227799505277 0.10699646979588051 -0.8516076952126443 0.30312637776845164 0.03717726237254415 -0.06027833728042675 -0.13427786664241048 0.08996104479063005 0.7802538973352597 -0.20908313082434038 0.09214548881581175 -0.16128140632412924 -0.43479725965256333 0.5367540759532585 -0.9507992908633878 -0.31463670700488655 0.11590832592580202 0.3535563089586289 -0.45257463666739306 0.5614752950917707 0.7546503960352775 -0.36471038662214394 -0.8140112155117243 0.7278957783547861 0.6197050407580262 -0.2649343271018614 -0.038474267725955524 0.22036902778466816 0.2794661274230168 0.2830397079581055 -0.7488154349806626 0.29060200670376024 -0.09956309065729196 0.8006012648673335 0.05922947096677067 0.24595228400098978 -0.24201657619179806 0.5283804528965022 0.08007079101026782 -0.8949133295669454 -0.691058501583897 0.4195086343979748 0.5450607879398668 -0.5052711939078529 0.21624861458914246 -0.21384587634463004 0.8083174109803011 0.38381556257803684 -0.6148867757069116 0.29604078032654857 -0.22635082232034276 0.728321382476971 0.6878150602684463 0.7779528307950658 -0.21501775550614877 -0.6991796542395337 0.3229234755744006 0.2656719324976342 0.34992975524783376 0.00037652540586385896 0.7108018784703143 0.43933487015987494 0.47502717730107236 0.10340643352355139 -0.3264571523365085 0.08498182295948076 -0.2641895439222939 +35 34 -0.7846585847681733 -0.694465100718302 0.29555963523235684 -0.31775889744825325 0.2823102634774224 -0.0915988622009154 0.5099582395848254 0.0011440948519609861 -0.04837904763735623 -0.40018681233187503 0.7462460298370737 -0.9341258988263548 -0.8618150618768547 0.2664294551813988 -0.517005501990006 -0.7364513903802263 -0.046460517516583755 0.12373376455960239 0.001170380526817727 -0.2119899614094205 0.9643693407410439 0.647571261573715 -0.4785098760309392 0.10179084592911769 -0.3497538519462109 -0.34812634437498624 0.14470063259385113 0.4924280051913661 0.41185256369723144 0.21278421795925895 -0.22656914476998335 0.6517206559635569 0.8117490686266886 -0.8750292615018291 -0.6504760427460157 -0.2525984670808483 0.5942591387093641 0.7569193810734018 0.026909354548450226 0.3384785724754116 -0.2648912285474416 0.37956968653001955 0.10145687527826608 0.6404276067830112 -0.1366784842913129 0.16333620129131865 0.67780946291524 0.2912968632602484 -0.9807405003857528 -0.19190115684338482 -0.5660834074428471 -0.1238473558135933 -0.20897157448235748 -0.45646625135901653 -0.7974716665924253 -0.7504424631401152 0.10313387448558098 0.9198602249792318 -0.8364310472872509 0.5291555752409385 0.7268055776107978 -0.8073232791652731 0.6142046392409712 -0.9144591956207 0.018914596238338577 -0.1167792048859968 -0.9195631811550016 -0.6132714632544685 0.392655173842565 -0.4937940491171824 0.24243975657035932 -0.09757569424090007 -0.8764394764780004 -0.22436357021728837 -0.051094771763194435 0.4257145413779746 0.9983861866584232 -0.0007616560702206066 0.6089524642772883 -0.6721519826497035 0.5424669607320896 0.22759668322946136 -0.8638596392764284 0.4337483818892611 -0.16087016663381593 -0.30449205986698935 -0.44500748721875727 0.16356812513728558 0.7685801554252416 0.1992677025537839 -0.07809267218034566 0.6418038678693174 0.9328771205193136 -0.6243838068001379 -0.21256833340337433 0.3479428048807558 +35 35 5.406276633509074 3.254711111059169 4.227814532771451 3.7425912455977444 5.275065969285274 4.649619501198407 2.9891549034930343 3.1532120223085407 3.909983328817653 3.06268623401673 6.0028622978703625 6.282975187037625 3.9116468542681426 3.226904676527401 5.206917820433675 3.490789797532951 5.421380355892009 3.500911362070891 4.104479538157098 3.177116593604965 4.417321751514622 5.128235622624696 5.523804295499742 3.4958979624455138 2.7355359054281467 5.584674885389641 3.3220731237896803 5.511725536495021 2.5074558162984557 3.910720122632806 4.997581568074145 4.542782658382105 3.946029141913796 6.0847925466002994 4.5038063408551645 3.0199896008560945 3.0413234227095947 5.87159210971096 2.9959048438645564 4.455247322478594 4.314859500248442 4.896852299758323 5.083617866447991 5.752411556520353 3.795561795139313 4.453104140931723 4.336549315875726 4.427057245127404 3.9668457260249173 4.612548616187771 2.8742673784623314 4.778929371293764 4.376353330322263 4.970510072682099 4.476893097494757 2.7178819513822416 3.7868180867663943 3.045991719056836 5.130254846318636 2.6456563053034747 4.106801741223793 4.843366783496302 3.9046602633664147 3.6340585588362995 3.284325931580513 2.6906481768882884 5.232705242465215 2.44132986700918 4.017730966733505 4.851906832582696 4.3649250905501145 3.8630621393170674 3.506365705879733 2.648513774545131 3.6390316980872885 4.2339317770134395 4.144061402811003 4.9093004120612616 4.9417193466775355 3.8610807161262297 5.589740919046567 5.643980658710986 5.234466063268696 4.647325658680753 4.759887527109077 4.8360132532376605 5.12889164389583 5.575075618557484 4.506035275005827 3.60732808094121 3.471561879933888 6.389981220517328 5.5440479450887175 4.228712534093604 3.0754222209261615 4.195208740958208 +35 36 0.9511184420770811 -0.15316217903773555 0.37482329483255006 -0.24356113599941365 -0.5914283311210753 -0.9756206333701596 -0.2216076839069301 -0.3431280948259756 0.6960391990108861 -0.17266807514778115 -0.8338816109793594 0.7332514011713671 0.2990308033564253 0.01111812084599939 0.6663432206452904 0.36807611653380423 -0.7252913278883542 -0.3079772346198546 0.0667978130684399 -0.721178796258007 0.15448212841854048 -0.8927120532795394 -0.4971235595998378 0.2484334398992727 0.3011115415355514 0.7078828106114066 -0.6969120868433882 -0.7535609140500519 -0.03656926849332143 0.6591515235779042 0.6594461852726667 0.8772666248999401 0.4864368988573684 -0.5074625970594762 0.22029772228547184 -0.168026015119624 -0.25140638263840986 -0.7657044583285928 -0.051840511200247796 0.9257201077805246 0.3211685062990266 -0.4501432999191315 -0.8907092113255932 0.6411510325677019 -0.6891926489824676 0.8757107680146599 0.38120778371244657 -0.2971005802749487 -0.48331130504723174 -0.4773884055283264 0.44490220082674226 0.42630806402544486 -0.6172406876646042 0.8170927139512019 -0.1670490087718044 0.01241091613853218 0.43169676894450704 0.06920998376715848 -0.5084198397944653 -0.0887420078673693 -0.12414617487785162 0.6056033695305991 -0.32616125739314006 0.48780138363004255 -0.45654079794900415 -0.07323073175468675 0.9326394024246611 -0.32745598918761387 0.46486818357951254 -0.5812528009143116 0.2982999180294088 0.13969595651024247 -0.3574458271130301 -0.3302100319763617 -0.11879014331838356 0.36150953478110637 0.32722621896274595 -0.8254077969292855 0.9606292236498322 -0.9045967609835446 -0.45142419540410783 -0.813648902941901 0.11458651966042055 -0.9631997856063532 0.47842347923282524 -0.5273164334663933 0.3344822013842652 0.9801563749258446 0.6733332753083556 0.1636773311183739 0.5668659067649175 -0.9102419906533106 -0.39378460892465705 0.6695868009397448 0.5074960869987131 0.4737496060268678 +35 54 -0.31837364309666816 0.03100726164235157 -0.09981796470678495 -0.7649323217188189 0.6244581539827354 -0.48948225267578516 -0.0032956776914270236 0.3528563876604318 -0.8131023208308303 -0.4075156602130747 0.7780893935171007 0.640584433206874 0.04353074057044237 0.415163860457038 0.8802073464584759 0.42134106062472854 0.30510193816175435 -0.5634952624618255 0.29050149914890055 0.040944552961072356 -0.6474826650929819 -0.008299505524949291 -0.5734131270204508 -0.16574598790148043 0.26799895261033746 0.05328765780345601 0.6663195561177322 0.2955185912651439 -0.22038306985315348 0.6010701897002451 0.4400459740810285 0.5041561161028183 0.18767364464356606 0.9706627336145242 0.768500031720156 -0.09392204856379016 -0.5044106831810014 -0.9556412306301265 0.48624056205971455 0.3316574856044221 -0.5459916914186096 -0.27868151977206135 0.8266117847296119 -0.4535141637522049 -0.14618551349085607 0.3924012926227247 0.1611623523552672 -0.05877615360632271 -0.5889389442477593 -0.201927612533787 0.52866491626541 0.4745916538099755 0.3618947549632461 0.3212137247336633 0.19180432615045206 -0.036388784066038404 -0.865876845842237 -0.46165503987808876 -0.7806497053514954 -0.2293729723502782 -0.8306257613034178 0.5003587017232538 0.8401939811578543 0.36469027619486005 -0.8503244943953336 -0.23293302475668187 0.007075431215212813 0.04855086721321289 -0.31881016816242735 -0.17594800293954416 -0.10492431060392104 -0.4340560085731622 0.03755281412447231 0.13711751141041373 -0.747052032488428 -0.29607925444408334 -0.443236899763537 0.9866694837749681 -0.25526222097699924 -0.13088043660940762 -0.9682187890423577 0.38404442859830423 0.3175346414621085 -0.7620634975127556 0.9734111545782451 -0.6586811821574912 -0.41040007815819135 0.9621531683589584 0.663854639850844 0.27411112482753897 0.4208785735385947 0.47140257471092695 -0.755393178515031 -0.7333787499640503 -0.3961917441832694 0.5920904671171003 +35 55 0.38962920367461185 -0.11177542115806949 -0.7642702393080656 0.691272223736217 0.4667575830201356 0.33195612863819046 -0.6950685177621994 -0.0685387565307587 0.49074753769424784 0.8562868450699683 0.6693621115199859 -0.8797506256451537 0.2686440208194829 -0.7947402898915426 0.6658771463207642 0.482828186028017 0.8110686879167348 -0.3194304192077051 0.6483780345156962 -0.2614446911626287 -0.17794163143562947 0.618354325084751 0.28108338451028225 0.9469665158336595 -0.12132503084932833 -0.6804711831230905 -0.05954470990352734 -0.761953716284411 -0.32082828779754546 0.045846659556125324 0.5580943723157605 0.7241666895348791 0.5382050112561674 0.683850229449211 0.6340568508701143 0.20231735484632662 -0.046298727916816995 -0.7448727769618466 -0.524874179928376 -0.2079100573480983 0.5434921856272459 0.3972611571893312 -0.4321783014140703 0.03300052233271433 -0.6349197608497623 0.8688240546265984 0.12572720297229667 -0.5257334113361389 -0.10244017311958764 0.6945967260711983 0.036725377843443985 -0.15062739075253329 -0.33421316392431044 0.11590265136561473 -0.8215069309066589 0.2669814301172093 0.19084843133851814 -0.2705726923655314 -0.45061018799654984 -0.12830492520499237 -0.35153831268728664 0.6152355667829899 0.20988863131924518 0.1531774455490864 0.4722373645568356 -0.01999613629783137 0.5167763390494631 0.11723868418530192 -0.9466221301000983 0.01996703389647614 0.6411103762062118 0.07063500162507119 -0.2180790413119531 0.31213609556889144 -0.6421765555414067 0.6613115772459395 0.2613288114761143 0.11486896557787296 0.9424388824613648 0.7297600773547561 0.6988904583924369 -0.3673411417088188 -0.9168002862843527 0.5950371824068637 -0.6595081453020191 0.20000413143061535 -0.5350655193804927 -0.47826554064613735 -0.4659312743030122 -0.06555362477018756 0.2621909278115109 -0.6050614202607354 -0.42109324577865115 -0.20495874706990014 -0.6384669957825597 -0.38235412447639217 +35 56 0.25716547533516887 -0.38664529804730163 -0.3707027554510254 0.39584618654352477 -0.5214298944987672 0.819907267698047 0.2649797885044658 0.3424169508655359 0.27141914200306294 -0.30441507529157996 0.5759446544437588 -0.7026775587498006 0.24409567417682498 0.07565532326503055 0.1771160110829504 -0.03704369661707707 -0.40417216741824347 -0.5369069157632433 0.7538967852567593 0.3390539853689767 -0.22295624485017518 0.9363855017546532 0.9300732192620818 0.9516648092107054 -0.23385858267697968 -0.4900127033136512 -0.2627317080034941 -0.928022753887829 0.2112422227096602 0.4451178416239414 -0.9273080879752227 0.1705549970788438 0.8252977572972982 -0.4827437408419166 -0.9514081714338358 0.87409176893237 -0.26749635440048825 0.32754266322361714 -0.7931218278870173 -0.9267420073880273 0.38700631554723386 0.896595771297813 -0.7284944159430187 0.7972936709654084 -0.3596022128878773 0.2904715981004773 0.3019251664918132 0.34058504595771444 -0.6169612076499709 0.7571169335551162 -0.034193441124975577 -0.9013542350974548 -0.3966552934664289 -0.5556042735964626 0.16504450691986228 -0.8029201906653769 -0.11434460016702586 0.0848040823110583 -0.9395085065272752 0.13985866666720237 -0.5769674377622536 0.4987876271902931 0.20095719245416155 -0.09930986381898044 -0.06736373724402767 0.5413681742379561 0.7576940227822682 -0.580570282955839 0.03531633874717954 0.46292787047148765 -0.6088671263544161 -0.12756781099007308 0.04612780398313476 -0.49892136419969146 0.5629784069289892 -0.11454314060714932 0.5385018988784365 0.2664956872149127 0.5474866399200085 0.5212098247843915 -0.7043583769414559 -0.8444823964867136 0.5080968859900268 -0.9852371985974815 0.19671178181355176 -0.36759102352249573 0.9150527371760955 -0.6609834288621166 -0.5463730218758787 -0.5307403078379529 -0.46186445272144017 0.9331204221580287 0.7817788545799575 0.110101192889146 0.6346816299855464 0.9303293910141099 +36 15 -0.8189989108385796 0.5768809288628849 -0.5382676534001258 -0.27896904563516745 -0.45863689685728404 0.8351829907786397 0.40284782862038093 -0.8344470327746616 0.14971634772423248 0.5285748635325107 0.4264729756760126 0.4755136885403035 -0.39552881504562976 0.10137234832130404 -0.5983915647726528 -0.5450224435393893 -0.46409867431469576 0.3359429310348141 0.30587371591645707 -0.2862286395474527 -0.16768102344539448 0.13849903748964065 0.7565621748258471 0.12824421830151578 -0.7993511828106099 -0.5020174295848152 0.15676364951109556 -0.17449351526789436 0.3815603247495434 -0.3112793293737195 -0.31396453001056424 0.0838160237933534 -0.4221033159635168 -0.16900148962788886 0.8925604304807875 0.9553411073174092 0.27356545292570345 -0.14188809644806555 0.4157774322696113 0.9730021231190717 0.7436932799588223 0.698089774883635 -0.9066231358074226 -0.9203492523459296 -0.2598642153887001 -0.7343154453638499 -0.5504194381105258 0.3392216416858944 -0.6315859659420007 0.08890900854037298 0.6731724819009361 -0.33704954700019885 -0.8263160471233049 -0.9157071018605429 0.93529499129906 -0.3081760302559968 0.11550368127329858 -0.2345617665098283 -0.9913504904440402 0.9612430878219982 -0.7600037498559178 0.39886004201962355 0.7233316359332842 -0.8287162436103492 0.6818613024410931 0.6815888451907162 -0.6407116826058816 -0.6727631990779199 0.3164427600800992 -0.03382621159540444 -0.5571311926155598 0.19390567870092124 0.1829651688270344 -0.9698180340204978 -0.7526803362321715 -0.5075879796381901 0.5709052280124809 -0.9004600306715749 0.24829644720786703 0.5186025672724424 0.5927617061607764 0.8951446588850809 0.9959494073215971 0.9525665352945083 0.8052171828555874 -0.5607180488343912 0.5330365447855332 -0.07777281524056412 0.5412057155480552 0.08002561081888304 0.6263011394374398 0.39334145242323126 -0.5808914656725599 -0.044971474562422786 -0.5273101685259844 -0.6662746314438881 +36 16 -0.6318701699246831 -0.80882250475131 -0.5789253082571988 0.12782180080678684 -0.5351108140291054 -0.2589658539090578 -0.40325871926827217 -0.03439380983859319 -0.5223845681652317 0.14280376321901445 -0.8769726215078326 0.25789179288986075 0.8990649942159143 -0.7079014880748755 0.6222450505178467 -0.19611054764906166 -0.35875206740977217 -0.8036089079145565 -0.485563946686725 -0.29008284215223945 0.22514084303662663 0.2492899212758033 -0.6608588917483273 -0.08246178479413513 0.3684360087152674 0.9176988756296276 -0.9563732974810586 -0.40314380051497545 0.8289151282699372 0.3268931785697662 -0.41027896927550933 0.6366880257506442 0.7894769894582054 -0.9819485309449498 -0.1178484920525642 0.22390078335201768 -0.4961679807278754 -0.6934813441016043 0.06655120959821259 -0.5633309605391867 -0.0619835788811165 -0.537307399500198 -0.20901443125669772 0.723222497132191 0.6161653251876233 0.6465881575176049 -0.4231899599635909 0.9259509797412395 0.33310521627286893 0.7904373166365264 -0.2831467548217277 -0.7420681925133858 -0.9067259656571967 -0.606503530144302 0.5315615142816599 -0.7147463918958956 -0.5613493489633179 -0.19912683658981822 -0.560547329920217 0.8188027700605285 0.853213134351823 -0.8263555688083273 -0.02240861944876582 0.7998081641675359 -0.2627558327757331 0.35690661907765486 -0.7944392357227563 0.8026190536673388 -0.03473386542970225 -0.2559989750833167 0.19850857945166922 -0.052482814796149135 0.42511710545729753 0.38328828874267895 -0.08162570821431459 -0.3225573889647726 0.9305226068922536 -0.7367864133829083 -0.5297768403209957 -0.15299001208863272 -0.8818884913787681 0.9035652740271904 -0.5467470889144148 -0.30568537395088957 0.7754269693988964 0.565909198853743 0.8785012558577694 -0.17236561293282704 0.4402527427149572 -0.28392544657062424 -0.30412742239810653 0.17447634965804082 0.5223768546618095 0.916782007458216 -0.8633656562328331 0.9634754486063222 +36 17 0.46177741868425537 0.3329615319214807 0.5650620556099253 -0.5336519758604295 0.3151814329011211 0.8886356526684622 0.6084876093345868 0.46746238728554435 -0.5201149419059661 -0.5905059273999083 0.03783271625867446 0.4414205130003812 -0.2488919790286992 0.48521965318360705 -0.27018310909482013 0.12979089880578765 -0.23695155159035886 0.4332026173256396 0.17472738712554858 -0.005784773698540802 -0.5299524013870767 0.12858222731279811 0.9940996058487894 0.870644652398157 0.701850873404233 -0.8385663923062647 0.36321007577263553 0.5443055851226137 -0.9613089086811166 0.3509160015601407 -0.07692358450509085 -0.477350178821349 0.9804983096226052 -0.4637599650063562 0.11159568057970914 -0.46587932428658574 0.5949010128182688 -0.727808604426905 0.3695365013438563 0.1671074335042131 0.8128824811061488 0.7483087715931569 0.7883835589071895 -0.14181600045027576 0.4819501803121975 -0.10713952793713055 -0.6459390261202327 0.8909564529456615 0.12777761355771267 0.43342388139985566 0.3195838821560415 0.8530152150400221 -0.6744820585170417 0.9770609135704431 -0.8121263068274218 0.30980565064311505 -0.2541437242265092 0.7753904040631614 -0.8078803767413363 0.49834832843876975 0.7372682872473832 -0.7351674267384576 0.0807230632190079 0.28004726813238534 -0.34601297773524076 -0.8992567212959903 0.013314094508528385 0.7780294911076897 0.07477060999710683 -0.4484522061620728 0.02442166431379933 -0.6924371458257723 0.11550817528740587 0.5389607783464951 -0.22320866719006904 0.7559894694922877 0.4946287435612817 0.7367067602546611 -0.42905455557685057 0.9365463758594368 -0.8026346538634359 0.4225250857466092 -0.6430518085207273 -0.11491650297156286 -0.46808197524308603 0.3205709034622839 0.8077639913492991 0.5180063156049761 -0.6875372467716254 0.9560547035005766 0.9301858814257367 -0.9905952332061605 0.3621613883137078 0.030835712009577243 0.0949811159548839 0.9908842247989753 +36 35 0.9511184420770811 -0.15316217903773555 0.37482329483255006 -0.24356113599941365 -0.5914283311210753 -0.9756206333701596 -0.2216076839069301 -0.3431280948259756 0.6960391990108861 -0.17266807514778115 -0.8338816109793594 0.7332514011713671 0.2990308033564253 0.01111812084599939 0.6663432206452904 0.36807611653380423 -0.7252913278883542 -0.3079772346198546 0.0667978130684399 -0.721178796258007 0.15448212841854048 -0.8927120532795394 -0.4971235595998378 0.2484334398992727 0.3011115415355514 0.7078828106114066 -0.6969120868433882 -0.7535609140500519 -0.03656926849332143 0.6591515235779042 0.6594461852726667 0.8772666248999401 0.4864368988573684 -0.5074625970594762 0.22029772228547184 -0.168026015119624 -0.25140638263840986 -0.7657044583285928 -0.051840511200247796 0.9257201077805246 0.3211685062990266 -0.4501432999191315 -0.8907092113255932 0.6411510325677019 -0.6891926489824676 0.8757107680146599 0.38120778371244657 -0.2971005802749487 -0.48331130504723174 -0.4773884055283264 0.44490220082674226 0.42630806402544486 -0.6172406876646042 0.8170927139512019 -0.1670490087718044 0.01241091613853218 0.43169676894450704 0.06920998376715848 -0.5084198397944653 -0.0887420078673693 -0.12414617487785162 0.6056033695305991 -0.32616125739314006 0.48780138363004255 -0.45654079794900415 -0.07323073175468675 0.9326394024246611 -0.32745598918761387 0.46486818357951254 -0.5812528009143116 0.2982999180294088 0.13969595651024247 -0.3574458271130301 -0.3302100319763617 -0.11879014331838356 0.36150953478110637 0.32722621896274595 -0.8254077969292855 0.9606292236498322 -0.9045967609835446 -0.45142419540410783 -0.813648902941901 0.11458651966042055 -0.9631997856063532 0.47842347923282524 -0.5273164334663933 0.3344822013842652 0.9801563749258446 0.6733332753083556 0.1636773311183739 0.5668659067649175 -0.9102419906533106 -0.39378460892465705 0.6695868009397448 0.5074960869987131 0.4737496060268678 +36 36 5.307346014201245 3.5884997706278234 4.29664646035811 3.284035215693147 5.007670942546165 5.2524203958944815 4.178549819152042 4.597722181203416 4.743983827296205 3.380071575839583 5.181943191721096 5.780826043500535 5.816029274933802 4.180080656922625 4.089097977653559 2.4901916630378054 3.9313699820386243 4.612447277004831 4.222177140193725 3.9988987443621653 3.7611562205397755 3.766980084388452 5.004254311023167 5.116636461553487 4.368235652914669 4.877931053307574 4.313633174609033 3.5297925155385608 4.469340755037643 3.8828699976983225 3.923136160046669 4.289704724921942 5.076380140730586 4.763699655968903 3.955135569422181 4.279474866519369 4.501172900221787 4.405241519420594 2.5554628917342654 5.049185928901817 3.7644012267419193 5.402778530389867 4.132424182272163 4.201852202437607 4.486297474299822 3.8879659152891968 3.83468800648234 4.969975553829489 4.8688932763188415 4.003453663151557 4.839850399359122 5.67465942812893 5.385039499449698 5.8978531394268146 5.3565871238690175 4.4002913675003805 4.351388489958352 2.37923100624969 6.459287860036186 4.0665173121465195 5.415435953263242 6.1928855570853605 3.2618658725901835 3.807966132828259 5.249100480321188 4.4240144623467 4.714566972625074 5.503199123290281 3.000906687716273 5.039580292000707 4.1341633210265485 2.648924948081549 3.8783408349476716 4.447648746933741 3.1380702950219668 5.200910457838763 3.459688312882539 5.966411451667975 4.401095249455704 4.61429565896749 4.196148058806753 6.110327549017947 4.800089394104557 4.936795248492039 5.649721690997022 4.355892582463664 5.668374022600004 3.867923889426784 3.893598541611343 5.5074805407957586 4.989016872747978 5.865195466159944 4.707748947274744 3.617014581862666 4.874388636609355 5.826611950129956 +36 37 0.6417960371448781 -0.1017430368687231 -0.7612224965108714 0.18962638608803206 0.2284450802176492 0.5662616576453048 -0.3838050391246728 0.9247348659090195 0.6831353149231136 0.2501556243840186 0.5851496337283006 0.9023177036664756 -0.7586227226440074 0.996116668133668 -0.195834393731801 0.30302406493116485 -0.9657952830019474 -0.17119828449431962 0.721888421404389 0.7762315282912111 0.20504031437458403 0.6820148990888277 -0.30720124604937205 -0.15042492745213054 0.28263479543706094 0.17364391524101763 -0.4756268366748153 -0.2569036249344576 0.7361200228520273 -0.5737894082651409 0.7740434503429083 -0.3216236456267463 -0.6273061363546051 -0.26830018152615787 -0.16525006550157917 -0.7976824016846604 -0.8245970625831016 0.5299872552969125 0.3944765617527559 0.6373799173526953 -0.4114963688680957 -0.9315353652896117 -0.06943932082900495 0.4273427378388259 -0.5425935683068692 -0.09093767742702186 -0.20468895404201315 -0.21397317132872518 -0.9648145715284695 0.35951898951605643 0.11307353455252134 -0.3827559325492371 0.43638483023791785 -0.5425970261411937 0.8616228304578772 0.330752473950078 -0.8532011377804021 -0.46703460573810607 0.3183747377385737 0.2189234079191027 0.4847317709630776 -0.9444983543542469 0.5252997385655851 -0.07425853974896635 -0.8284127061448128 -0.8899786854219043 -0.18938645164067447 0.43334959185555433 0.3681256641289483 -0.9196971635136801 0.7292626957957338 0.01931054132124288 -0.7948899198162749 0.7658704823397604 0.6949761585482155 0.5966102341447515 -0.2865881708116371 -0.7932603963956049 -0.11268053287883006 -0.683894491401748 -0.6035889284083622 -0.5085700372467832 0.07604072656419425 0.8098328351951147 -0.5402114851247963 -0.2609994675740095 0.7676227240437126 -0.5856435849765766 0.2227034798191705 -0.7792853875145336 -0.6790397964497596 -0.571919393485093 -0.4023056661120885 0.30736364528448057 0.7203879415558945 -0.3351425055020958 +36 55 0.9694008877929428 -0.2940693644110324 0.983349109052611 0.9656779082134261 -0.7823868301656662 0.9485026381411574 -0.6841870670505454 -0.9224865585581628 -0.2523763823180847 -0.03475089507693352 -0.6253685881383961 -0.6538742648878282 0.9730446059958466 -0.3596251151265788 0.47103753797286796 -0.27173512360064644 -0.21731912568049006 -0.9436236437073182 0.4654852044505844 0.9084505465811035 -0.9973203728823472 0.42850706552943074 -0.04686795886094708 0.8454919319749779 -0.8335425523301978 0.10264773991189058 0.35178726532794125 0.4343613929710133 -0.7541854658845275 -0.4520299695338279 0.9793061764191824 0.08037987867063756 -0.22244067318830107 0.6207459415083576 0.8860986464136817 -0.20139562046800363 0.6876469502336702 -0.16448754956709322 -0.7004569911186562 -0.5820847327669658 -0.6591353219245482 -0.13663022224471466 0.02206560683258263 -0.7764080019855926 0.08145365921441994 0.3741809490842747 -0.12878220777769278 0.49194862283211793 -0.7075327395875097 -0.06849971219201478 0.6143896908306334 -0.8666296353028253 0.5678933102705668 0.005510841043022241 0.09776871445871427 -0.6999982365677224 -0.2642471718646031 -0.19882112634285298 0.8266057427470792 -0.33254299216619865 -0.873059422965478 0.6333159839253293 -0.7013489659813468 -0.0266980837707802 0.5852756923497442 -0.4118807309113006 0.39767350287899483 0.61664099907799 0.939441300375212 0.9973204045889452 -0.8584983255883882 0.13126288638328787 0.5039332866426618 -0.24081089760992214 -0.12800482652220424 0.8551155018278054 0.18509072503832358 0.8966942660613277 -0.8199714118209127 -0.36055974292846615 0.31010638292082127 -0.7611754216574302 0.7128634669945411 0.12507302438486922 0.5732413390922053 -0.39410011911993004 -0.2504592979241733 -0.3379969254864499 -0.3656930795250166 -0.9829563309037521 0.24961543211046622 -0.4781380623438207 -0.6977482909389439 -0.4555913924384347 -0.06389219123195078 0.31814443855773344 +36 56 0.2334766542364597 -0.16814722938944215 -0.11451498899222656 0.3731969533554387 -0.48667396185020406 -0.4757581038327914 -0.6175069417723504 0.6923702089526294 -0.6781915993091603 -0.9197708402781155 0.4097269049848766 0.831556495103073 -0.5721290291522911 -0.8810461257554341 -0.9282582290359176 -0.5266636298085499 0.5613743379076255 -0.8222846739385619 -0.8272212254276672 -0.19392651903328195 0.544969046930518 -0.2486839227207973 -0.23810071180123615 -0.8417158912449956 -0.2036322730657849 0.24519557421740878 -0.4161686189622338 -0.12014773359600617 0.17063064580372078 0.16358656634821345 0.12922347574137483 -0.08995137326681357 0.908050138621413 -0.4209176746354766 -0.40188750158691167 0.7036803799460694 -0.23243546516620883 -0.8604944977759139 -0.48892822183163 0.8110845633195618 0.051162757951891624 0.4014146732654653 0.48080956293105936 0.02469771892089545 -0.5534046880236201 -0.3881389383884237 0.16423120248695677 -0.4483375611780076 0.22128889360907 0.6356018072758443 -0.705132615961968 0.8940217598992253 0.9810423427034138 -0.8965270482097536 -0.5373234708113788 0.6557797796630291 -0.3891310158340473 0.1190805839848672 -0.570366985778084 0.5857510504338892 -0.6464069093783067 -0.2068945540353715 0.04086581099929343 0.49908126116069385 0.7427470508982057 -0.08729314265239929 0.13896024066303725 -0.549727442116037 -0.06597683284874867 0.6559929084665288 -0.26048863400134903 -0.10799418819512852 -0.44293155929882433 -0.025833599394175177 -0.223533798748625 -0.9206008223108286 0.10402429698516102 -0.7733767348609959 -0.33207111828597524 -0.6721100565516069 0.02292111261233698 0.7718180558085281 0.11462783633993534 -0.3118655565641928 0.6826863450837086 -0.7132501198773602 -0.3607711132016733 -0.532503918620346 0.0024595299734231357 0.6759232655926122 -0.12724301728935572 -0.8811804941155152 0.2500702369002994 0.32681191521183606 0.7706126585529554 -0.8621602047053447 +36 57 -0.31614554480815693 0.5526115349046687 0.28784632954319656 -0.5274530076128916 -0.878439850998229 -0.05804447700977011 0.27774973075491016 0.13365757460675254 0.4620482348214181 -0.2751002135379004 -0.7208739476278996 -0.9660565607993596 -0.8148327082812181 -0.11918345514436401 0.18543767893425667 0.034302233104586355 -0.39205868767477314 -0.09717113671225763 -0.3962294708987457 0.4780953553929985 -0.2209228645046093 0.35470221531851265 -0.9861272139297503 -0.950220921377634 0.033864107608222005 0.8251234861477201 -0.3236513181842744 0.7002061192906963 -0.34071761109642207 0.7745893767664105 0.11651337399339701 0.8229181858767329 0.3320697988331809 -0.47403317276678525 -0.30993786243700305 0.4475334545159373 0.7869175883418338 0.07646250640183139 0.05089544993289974 0.18321560365303857 -0.6799478477836933 0.7620952780197807 -0.02412855019959781 0.005215782728903218 -0.40213867295016237 0.6427982586193559 -0.838412364212527 0.5649620790305723 -0.9253430785355596 -0.7680645525174647 -0.992065318918188 0.3041277200402226 -0.019221651581486476 0.26049296360144636 0.6488986690891894 -0.47051530949486176 -0.7854747350906521 -0.14336853378693037 -0.9311569132158448 0.34154738626061354 -0.42637891444074594 0.872876503307781 -0.5053995802354871 0.7303726603037626 0.8692028756320911 -0.4854727524345097 0.8321077548005895 0.9966793566246774 0.47612768074432377 0.8497103497540957 -0.2918087255672748 -0.3742386070400543 0.907898270901992 0.9616399109296334 0.548936220793659 0.7412652246164204 0.16430328055933474 0.08679979164554608 -0.6985798773329364 0.23021874652736418 -0.23314257556691387 0.6984932291322148 0.7183853261731143 -0.440734574037696 -0.3372678178675139 0.9249335205607625 0.753371333912559 0.2756836263492912 -0.9432264486613771 -0.9592775318875029 0.7789838974994929 0.7601093470105735 -0.5622254553902699 0.3384325471961034 -0.9903544367695944 -0.7607725936004852 +37 16 -0.2730694238848417 -0.441759866792496 0.2801340593855075 0.8338548156792229 0.47533831898778556 -0.09883747726760062 -0.084492297541501 0.8235467542134345 -0.7394720066620617 0.5468965901121021 0.6132302506878637 0.491138046543099 0.25341876450962975 0.9567656608700512 0.6546050341739706 0.7542373474204405 -0.5223968929410319 -0.4900540702145173 -0.3987416006429012 -0.6203889123392932 0.926362875122861 0.8433358022166251 -0.05133596734618884 0.08229885316767893 0.46837872498724087 0.500218938570848 -0.823012301244108 -0.07955592143938839 -0.6976224987033903 -0.04843823769745259 0.5898482682910022 0.1737797393538878 0.5944817561858851 -0.36816980969588764 0.263043473655834 -0.6800887205307875 -0.7147860784821278 -0.3229828444460927 0.24677325229131442 -0.2451637016460162 0.04699070576962705 -0.5374241370767441 0.41954758703283446 -0.030550873228935904 -0.9021971539327243 -0.5238185066806098 -0.11317669219153359 -0.20580282590270116 0.2231838344341528 -0.12170174825618041 -0.5708552573780452 -0.523480588382389 0.25269573227810005 0.5968997836804191 0.7095185206170047 -0.9200016156528859 0.23551982999936194 -0.5287701200286841 -0.9385464889093829 0.23477784050469186 -0.283784396475399 0.04648291158324391 0.6901524533331733 -0.5878492730108342 0.6348865451295338 0.6592104875480631 0.9210082233738814 0.3787667494296989 -0.8652326256229781 0.9035535885563415 -0.6148722515208715 0.6258138095078474 -0.13440755378602698 -0.9863262989220123 0.0008038795017362155 0.8849614423884946 0.4966335207903274 -0.5329878707907525 -0.3592525015719734 0.8944162000922471 -0.9514377120526611 -0.8195610351569476 -0.5268609095797534 -0.3543348995706026 0.3493086626855919 -0.8788566787657108 -0.9370132214467166 0.37679848791106285 -0.5259317668601418 0.6488303231759565 0.8277081952201291 0.8488853556301068 -0.14668346361006024 -0.5460541093546658 0.010784830382190247 0.28212451964763363 +37 17 -0.443614030729125 0.7418232038946604 -0.41323786451061073 -0.11927473283807943 0.780005877989771 -0.7037867163569971 -0.9093455524064822 0.13318185174920383 -0.8424342231880055 -0.004931699110295895 -0.18835058548447337 0.9846521043952796 0.6282669389503082 0.2848821219450688 -0.4806782561823255 -0.20152805976671084 -0.08691326753497175 -0.5846988367807002 0.17588273026392387 -0.3928573480256372 -0.0832011100754857 0.5671712146376393 -0.6851288797598252 0.529225558920619 0.5298334403101845 0.7844120470673646 0.6246142059583475 0.9494680242370559 -0.6697943082092848 0.1768365081026153 0.2533705580843857 0.6640762420756159 0.8529313822396651 0.02440265401047359 0.49675468823499247 -0.7239633397290142 0.6780406010265718 0.8662369019675256 0.606810396927453 -0.07394651966902632 -0.22125891908940432 -0.25649600543573237 0.9410556153386327 -0.6751397300249877 0.5004823535261447 0.12775082493741996 0.7239461348806977 0.567967752348044 0.8466895435252129 -0.03846078354464444 -0.38382697642580843 -0.7396228554966033 0.34722623988622603 0.2266416591383349 0.1959143734836304 -0.7144566990344594 -0.43522593368702633 -0.6628600256719046 0.16983367143375605 -0.7203854592269243 -0.9800712768595894 0.6761066127989068 -0.5181649010803484 -0.9107287509684567 0.04237196002481047 0.6201254254459558 0.43266311865404083 0.729406834667431 0.6000016486894177 0.7780047246766133 0.4409046402595638 -0.4813447965320976 0.0020448655362379498 -0.5409497223083224 0.5379891624819515 0.36637588656678166 -0.2250974204035474 -0.6091473008086836 0.48476456778890364 -0.022022814755076947 0.4254232302748251 -0.5639953785084739 0.5421407880161637 0.7559908602864238 0.09558976319919754 -0.9529566870498696 0.7277754200787074 0.7075437614669335 -0.5660613875593097 -0.08199995619767697 0.8864534766115735 0.8860513016120142 0.6340118743828844 0.5228115578743435 -0.6136506670976689 0.27946517673691806 +37 18 0.9381264638296964 -0.7756100347996344 0.5441066347128742 -0.229590478298487 0.33195164855882187 0.30027285430425743 -0.34796897307956476 -0.18930829685310657 0.18799703755412955 0.59175352541874 0.4107571503663374 0.4456482096327099 -0.23737046403943496 -0.2959068129334206 0.41858104321952805 0.7240467493056291 -0.10111333471637018 -0.8730208745003261 0.5950431647602623 -0.33983647171719844 -0.2349344506102411 -0.44933697106182247 -0.37951673352400195 0.3352275651904708 -0.1094235504598362 -0.28196974450786927 -0.8450191039337094 0.4532833904252316 -0.24476339848237028 -0.31104568506739616 0.7106938864757033 -0.13274915035278223 0.22402889879202248 -0.2534117094955708 -0.021892730814955907 -0.5154917858692347 0.35361094345624355 0.5573458329851597 -0.8230355515564587 -0.9126361230772828 0.4673423153855829 0.3845589240758953 0.38068584551774687 0.2829465839658445 0.5098560112895689 0.5741773010442861 -0.1644144556268341 0.6371652765587765 0.8197432172926316 -0.7747894849605028 0.46942252354413583 -0.868683053923966 0.33483843382379574 -0.9319762182231406 0.5068595650825951 0.29729091797331697 0.2962111081827288 -0.516653006129512 -0.8716839889134553 -0.06608147177022938 -0.42100983885602417 -0.413853117545683 -0.9602086332135147 -0.30920200358010774 0.21112232691402477 0.5431472237704944 0.7149930932239765 -0.9603632881050839 0.19774839308032144 -0.3004086358983904 -0.676040913473483 -0.15683771157783766 -0.15909041128199597 0.10989873206100298 0.43670248525144806 0.18750966750771192 0.873309724939568 0.41269021176432474 0.8032701968316907 0.7094265185591471 0.9640002845525419 0.3691104642562524 0.5477374343781383 -0.8913906207677085 0.00905379107099491 -0.1682588717469844 -0.5331719657302603 0.9688171396749905 -0.11520908605453672 0.3995714075645156 -0.11692858883060153 0.37087851806387984 0.9392898213590337 -0.7825267724426983 -0.16811389664196996 0.2760412535849197 +37 36 0.6417960371448781 -0.1017430368687231 -0.7612224965108714 0.18962638608803206 0.2284450802176492 0.5662616576453048 -0.3838050391246728 0.9247348659090195 0.6831353149231136 0.2501556243840186 0.5851496337283006 0.9023177036664756 -0.7586227226440074 0.996116668133668 -0.195834393731801 0.30302406493116485 -0.9657952830019474 -0.17119828449431962 0.721888421404389 0.7762315282912111 0.20504031437458403 0.6820148990888277 -0.30720124604937205 -0.15042492745213054 0.28263479543706094 0.17364391524101763 -0.4756268366748153 -0.2569036249344576 0.7361200228520273 -0.5737894082651409 0.7740434503429083 -0.3216236456267463 -0.6273061363546051 -0.26830018152615787 -0.16525006550157917 -0.7976824016846604 -0.8245970625831016 0.5299872552969125 0.3944765617527559 0.6373799173526953 -0.4114963688680957 -0.9315353652896117 -0.06943932082900495 0.4273427378388259 -0.5425935683068692 -0.09093767742702186 -0.20468895404201315 -0.21397317132872518 -0.9648145715284695 0.35951898951605643 0.11307353455252134 -0.3827559325492371 0.43638483023791785 -0.5425970261411937 0.8616228304578772 0.330752473950078 -0.8532011377804021 -0.46703460573810607 0.3183747377385737 0.2189234079191027 0.4847317709630776 -0.9444983543542469 0.5252997385655851 -0.07425853974896635 -0.8284127061448128 -0.8899786854219043 -0.18938645164067447 0.43334959185555433 0.3681256641289483 -0.9196971635136801 0.7292626957957338 0.01931054132124288 -0.7948899198162749 0.7658704823397604 0.6949761585482155 0.5966102341447515 -0.2865881708116371 -0.7932603963956049 -0.11268053287883006 -0.683894491401748 -0.6035889284083622 -0.5085700372467832 0.07604072656419425 0.8098328351951147 -0.5402114851247963 -0.2609994675740095 0.7676227240437126 -0.5856435849765766 0.2227034798191705 -0.7792853875145336 -0.6790397964497596 -0.571919393485093 -0.4023056661120885 0.30736364528448057 0.7203879415558945 -0.3351425055020958 +37 37 3.703711590395073 5.500922491502976 5.454850559556309 3.280173442296535 3.148707313776044 5.034628910206203 4.638787479182637 5.043225828115776 4.955863042557814 5.246270014358089 5.139612224598647 5.753637183281414 4.8066045596003 5.921466649845951 3.5966765374999046 4.902740528335382 4.819340651038823 5.027236089048758 5.883725536491323 4.425528402126963 3.851149357263573 6.228517354629539 4.548895706936222 4.019956447103622 4.218309649036662 3.4683458652498107 5.276307608175247 4.186641567807923 4.73937528230746 3.4749199547706837 4.597703677214108 4.516653074757098 4.810130622589949 3.1112411167789653 3.4494630501177994 4.572632009490141 4.531221668165564 4.692127708957521 4.156271893675473 4.899784446547999 3.9210820330650984 4.923721980682362 4.329972551853222 2.719662169066562 4.153749969163456 3.309090510853587 3.641537829087892 3.652818299423582 5.35722403452578 5.305860595320924 3.695811860433847 4.746324141605249 3.237242877891992 5.2804119629856805 4.6334804334300115 4.273908147297293 4.984417876895127 4.919808150748225 3.7886567274981813 2.6190492242288856 5.898317905117322 4.946937047665906 5.063597670846344 4.3908920578612785 5.05902680050465 4.834763989849964 6.085961842459498 5.190415798919759 5.539150791124069 6.514909202118959 4.2058908126856736 3.3214371623621055 3.6939333845262965 4.806220496614355 3.5847612599637886 5.189751048197707 3.6775712759247137 3.99378929538195 3.7778441308182398 4.91042201095296 4.173089844514916 3.584860825284667 4.054539447145411 5.058301257505691 3.5300289982002755 5.56371155255372 6.416851392182529 5.769050734375206 3.5397362289451175 3.2780098351041804 4.801816276938499 4.820596855405318 4.159189925794677 4.292278090628209 4.500753729723939 3.3433459470097624 +37 38 -0.7298867930630786 0.9087789781346998 -0.5493229121952978 0.6194855308034593 -0.331663832624558 -0.8942422686272664 0.140171750380095 -0.5610808974849317 -0.4707152690639098 0.840067374934099 0.772017595357867 0.9935669066784103 0.16733131492965692 -0.45736346689727925 0.35560704659543907 -0.1626923324517271 -0.29333856295045546 0.8868666501130114 0.786347640670505 0.9134574180656709 0.630949657530671 0.9411565047049606 0.9826250228335203 0.346684122778675 0.4333518589454446 -0.030011047051332396 -0.9056054586606843 0.3160917164062782 0.08945446987917482 0.49395360110546127 0.5724282524544748 -0.7648823773102122 -0.2985481313884937 0.0278586925375095 -0.42645791599675853 -0.35841330875780697 -0.536394488306124 -0.8365019325635745 -0.7507581960895313 -0.40148146442241717 0.9548200297934428 -0.41777918338622966 0.2207601212935093 0.12303403054230344 -0.25525243527016794 -0.4535169922827198 0.21470004148839794 -0.2689819109051945 -0.719414361859201 0.6845233038306731 0.172416352605832 -0.7107810834703618 0.7833369064707683 -0.9152652746026182 0.25758267835152093 0.5001949721155339 0.6118937317171034 0.9467088441990927 -0.06308446948040713 0.4704701922886596 -0.6260571615441373 0.5171311765179794 -0.34220859262454706 0.2005527354988239 -0.3222076680978412 -0.5231896774221572 -0.8684461289365202 0.8723326627774428 0.8662116758229892 -0.9796600728309874 0.5399389740097618 0.2930407729760882 -0.726776632084221 0.33136717137687444 -0.5415320500622309 -0.8868028116985784 -0.22476578419184956 0.15913517343702788 0.11030510011178651 -0.4648541627064562 0.08160892671307995 -0.1510308747613034 -0.9721555056185265 0.6142061544996753 0.5283662794207253 0.34866180351749 0.046011472537626386 0.6750804183126047 0.3748211922694904 0.5374081056098883 0.02270676389148618 0.41197286595908333 -0.16155763427933767 -0.03789813251164298 -0.9957159211430939 0.48100573427191096 +37 56 -0.29206189417305817 0.7636664679989038 0.9872182587527918 -0.18301577198610075 0.458894501271089 0.32330818523959404 0.5587525947142353 0.5665801315769063 0.4344729074174458 -0.9210437405938214 -0.5545890250442493 -0.485162982585152 -0.46016325356476995 0.8123938549061116 0.8461841626904023 0.9686897475571146 0.8270799133638456 -0.04241743071572612 -0.965890278508077 -0.7863279958044656 0.7036152592673495 0.979064974551692 0.04236868968077867 0.747525779088926 -0.47985160337785726 -0.8307993891772774 -0.0016359880730605347 -0.4472139192420297 0.29051289137817937 -0.18053219802365783 0.24923600063357632 0.7376850730513704 -0.4396371087153461 -0.3407209298327074 -0.6019261547084684 0.6494906997238319 0.010162863763927277 0.3117785432914353 -0.007328521980012326 -0.6604923417620612 0.5002235139706455 -0.5802537719966243 -0.9896320986544169 0.04498207879680338 -0.4639986976844237 0.28740385390977075 -0.34690251367273506 0.4552432970079394 -0.6868672278184049 0.7625022262984662 0.17291443049884725 0.661977078302497 0.020745080956911854 -0.5085609523536305 -0.3569524757571576 0.45781419382118727 0.6664248908278914 -0.32075371389769036 0.23049966859346216 0.06462399691047094 0.8510965899117704 0.6484547445108546 -0.4078832307079281 -0.3276365937530272 0.8822154187132423 0.12233953154646837 0.9991229645455577 0.31573819319978536 -0.9098692056465745 0.9773772062746533 -0.4663381630362753 -0.5583522213098928 0.336583587828305 -0.7630371844806367 0.3756221972821514 0.7137433704560383 -0.5625723284053901 -0.0765827870761604 -0.3527620110757934 -0.3890807404252472 0.09260320749325479 -0.34890571880637755 -0.4187986393491432 0.194473813548518 0.26431612964821505 0.5754631552645784 -0.7718888436689226 -0.7650907551316164 0.5446535905736665 -0.4240680224443485 -0.5763738430643452 -0.6324704608677578 0.08682018743245967 0.9261376062805629 -0.49649959993891213 -0.16288054805523333 +37 57 0.04877986270798673 -0.407302812529174 0.9067263903147773 0.27507929957092947 0.2368422694372816 0.6782826863615901 0.9438168345690636 0.36098369459442714 -0.7719703321575653 0.20560316322821937 0.815893845800765 -0.8553035081387339 -0.6511362328844934 0.7476370990816941 -0.47490471755534647 -0.5267386664232669 -0.5641075183849857 -0.3173094881811944 -0.7710092686812691 0.3228961096942635 0.504780128820737 0.4652224468419319 0.9397944594855829 0.3943636826179451 -0.6654135966706161 -0.050733459494759714 -0.832422586567946 -0.3163374096980094 0.6548246853245665 -0.8976872520812011 0.09270509437839491 -0.8469093058812163 -0.7832441734131679 -0.9370448097934603 0.44241911517614607 0.0356249825607704 0.6772707666945676 0.23635884437561838 -0.2510917414983853 0.43707209463868657 0.28953382446648024 -0.4054560758830301 0.13852309534836826 -0.4263238634031783 0.16243172736637534 -0.09917652281923961 0.7426012508060968 -0.43220906109672974 0.40438952905173964 0.9981144056301778 0.43897887856107554 0.2780682222671329 -0.2265871398107011 -0.17134699547722643 -0.10797355807533782 0.5008680473128888 0.7600569274874094 0.6927649466120249 0.9094393183524674 -0.5293868903738059 -0.8775517768165713 -0.9159138005586356 -0.5048772993155775 0.7553753636920069 0.32349427677027154 0.7288773683378913 -0.37270351050761774 -0.1925856114151545 0.7008388875207028 0.7121999461736372 0.2841608803104956 -0.813090910446383 0.4641754006114893 -0.39547017256950934 -0.25432417212739233 -0.19902739855595164 0.6244411311881324 0.6599246205237166 0.6306438452817484 -0.43077591470735843 0.5819435092683924 0.383190714324094 0.2821578791226611 0.7091202152885259 0.895971766721245 0.9968571869216309 0.8656797251374244 -0.7652452221969366 0.16721034937503165 0.06958231526746195 -0.6348173972421225 -0.973708888122407 -0.6718114912112634 0.16954402593567308 -0.2346981304077671 -0.13113714022251122 +37 58 -0.09247264605092065 0.5733128929455047 0.8379306489859393 0.6500555161056207 0.22271872671700943 -0.9558350253994274 -0.44434508719766086 0.9675101312889753 0.26067777327333674 0.8976117977909204 0.7558787652506527 -0.5044576404775654 -0.9146209520145825 -0.4271387931959205 0.03533730331097584 0.35982272119723246 -0.9421881506350738 0.6768841586126855 -0.8661254518453954 0.23688606128070155 0.3964458725844615 0.9624066609396886 -0.7630736919427852 -0.9328073251481515 -0.40084561561299337 0.7339416644912569 -0.3172935786742699 0.9088534726817918 -0.9418059918465509 0.1951764762803192 -0.8828540367939701 0.12673123475299297 -0.41359745883521026 -0.1920258803949677 0.3300425310637043 0.14869802373163266 0.2927375394960583 -0.6233813138062436 -0.6037353542418245 -0.7571530235982933 0.3973893297429756 0.566074602500686 -0.9632181588825977 -0.6758670513193221 -0.10055378246965407 -0.25250366158579807 0.32585122698407765 -0.2495428935268018 0.677920314482892 -0.9913663976348102 -0.6936067227409632 -0.48052352178295554 0.5261460039953503 -0.6173623162599975 -0.659515644819789 -0.2415074448051211 0.6967133228763631 0.6572560928379174 0.12377491104987848 0.044584775867122506 -0.9613747271828721 -0.48300719000921855 0.6182657214980976 0.5503751356682332 0.9888422747676686 0.5294700238594245 -0.8319016676973956 0.7879339477843665 0.9487436501584183 0.2735057879351859 -0.04177170606452818 0.31708928265417735 0.12371383060233065 0.3200586563853418 -0.5363403812122505 0.9855770119429783 0.11072042168651941 -0.4356630907613823 0.404670483482062 -0.621990690916719 0.3447831892342328 -0.13772356969296773 -0.6639771586712204 -0.6238519834226031 0.638630470816679 0.38941102646210957 -0.9511130348731329 -0.9146320002378983 -0.27618602894371347 -0.16261438050957078 -0.6720924246707929 0.01633433914972504 -0.8135808448816357 0.3185544680313248 -0.5966844206451134 0.8609867726841363 +38 17 -0.10222793689712595 0.7855296151877906 -0.3452374134606633 0.9416901421058261 0.5423923026847326 0.751878836167259 -0.966322136641925 0.3460290593164699 -0.371272503303993 -0.571072402360568 -0.23125029875762948 0.5113217297974124 -0.18133527408632255 -0.021722136210092335 -0.7642150741623013 0.677567104279466 -0.5265486477443808 -0.4019706498727389 0.8590055697983976 -0.4969794439506583 -0.39684074653780255 -0.9740885596324096 0.04732679387655536 0.2916854693680675 0.10074094950892665 0.29076990823927096 -0.2978736577900254 -0.7465708292050772 -0.1754301164418326 -0.7243134930827975 0.3481294876155485 -0.19059455919026513 -0.8782415873998235 0.3377075252583557 0.36158981702735415 0.09103760676219119 -0.47172064321336626 -0.9261137895625391 -0.9094703296629867 0.2764302607954008 0.5019305973495494 0.7613461482923858 0.4696159019090833 0.270290904687271 -0.18579763742929423 0.25003257588835726 -0.8747946034008434 0.7525859571741738 0.3000166547569978 -0.0914023461082536 0.8088950966258743 -0.9619438143420582 -0.5892882999479034 -0.16968139817683414 -0.02809819064880248 -0.804983563508374 -0.909026755419791 -0.1857859275090077 -0.8528486311608243 0.09390624628917732 0.39189975549619094 0.7472208218785246 -0.5178715653953576 -0.1558805381447439 0.2031414796671025 0.3446517972597323 -0.7489567670816306 -0.3089507828430418 -0.7720021740827951 0.9992048752624518 -0.8779754683378753 0.2945935003854856 0.1980942357260056 -0.4626245555528006 -0.6491307301498757 0.18998724193375716 -0.9719074787560356 0.7349301230074976 0.8598608314620377 0.01313316067256265 -0.40368611710258473 -0.15557309164871191 -0.8307438411190631 -0.29548711423717666 -0.5823453974357351 -0.8832413838300801 0.994042741750286 0.8091438928594932 -0.5139866826015342 0.1422019297946111 0.6511978448920732 0.012993632559730184 -0.34599409168128625 -0.32392665818816146 -0.8225239894053822 -0.8516097709733954 +38 18 0.01970358894461821 -0.02112703847395614 -0.2648462713145603 0.41425814023211927 -0.7305762926251964 0.5575793441571155 0.3955340321371703 0.6550591780382309 0.9080046054022761 -0.29585392987058756 0.8326526642972316 -0.8168204076070238 -0.9984730735299163 -0.5161701446715619 -0.6716733170374447 0.9628533578709526 0.5751326839043587 -0.6002225460022892 0.6495741123035486 0.13755877817615358 -0.4423286659485015 0.6373462247989663 0.2826243325597131 -0.39173464147729953 -0.22614718075024043 0.6895091341959529 0.8672482138917235 -0.45496384610524254 -0.6987514207041419 -0.6636560938150837 0.0669650216255877 -0.532252057015943 0.1568968972747995 -0.007977673230837867 -0.5249551141071094 -0.16286567615001601 -0.24856149807649164 0.5584297854188425 0.1669552139567254 -0.8873409875915139 0.06796183810084777 -0.558930762058985 0.21387690180104912 -0.46036028178954247 0.8192725722665442 0.17314013387536265 0.15912677254252738 0.8934658506023654 -0.8891364092313352 0.6741880266609279 -0.43886287650999 0.48224070701565247 -0.6205155295750839 -0.43897380555387056 -0.8549757248955236 0.937406376252107 0.46452680038898664 0.5272298606595964 0.5760292725992546 -0.6173099404756195 0.5259676401621844 -0.6370683838516558 0.7586109407646939 0.36914671604504123 0.5780294950268676 -0.2088464433838133 0.30939791700754893 0.6152818541181106 0.004868592199953392 0.4049616305846364 0.4490310686385419 -0.9099993244870164 0.16995729725748276 0.9751107715899288 0.2917459538920726 0.27650833475065695 -0.9512382058496578 0.9413524792755767 -0.6996793955945464 -0.2788184898968711 -0.4099943281863321 0.2331347617123618 -0.07357837358824648 -0.7861074580581235 0.8483015875921496 0.8234208320084884 -0.3343610736279605 0.8694079140335249 0.5545439964498584 0.49739274890555696 0.5867733982681531 -0.22132563269823868 0.5684768150132773 0.5943038297346526 -0.12239646040686036 -0.03958935206580305 +38 19 0.10520228908860774 0.8478919941484924 -0.1286055895359306 -0.6613767597098512 -0.573866272870281 -0.46628708171694666 -0.5553629651876433 -0.0859796218603579 -0.22820890366541313 0.14404716567183606 -0.23397106397587275 0.4879379785234401 -0.7292047250239133 -0.772925040792708 -0.24201754169215262 -0.5205602464471917 0.015051470472458472 -0.7594498348356324 -0.1654202512485028 -0.14579871578880477 -0.20097423040560924 0.393170835856794 0.9951385136834245 0.6377867945490305 -0.8844886061115942 0.5115852687168461 -0.6593504814991469 0.7899515089710021 -0.48768590086133745 -0.5803319914925482 0.13368183066699224 -0.747175065494633 0.9812335000225756 0.25139495886866103 -0.9974936706041737 -0.11820459304710518 -0.801076157009426 -0.14844235892563828 -0.7226840471831304 0.6439041847679221 0.6813859722760964 0.4961505867699727 -0.5344767736279397 0.5263470885984423 -0.72378719813572 0.4649991251735608 0.24262652143314756 0.5906039787191455 -0.20353171031577233 0.42046313630553755 0.08142185413302894 -0.27408212317753233 -0.03519628697770161 -0.7283987754398935 -0.8922637290948248 0.004521472014715755 -0.8936624107645761 0.6113553025578522 -0.034564954299397765 0.13485781544293185 0.1441571363868972 0.3096370668334667 -0.40978791536951653 -0.7367932880824066 -0.9906779170419888 0.19349605294991234 0.9788268588777382 0.38607140702860043 0.5086359176025943 0.5659589158286769 0.36623746038750804 0.9081174221571695 -0.3480938914299394 -0.05422296486855349 0.79708434420079 -0.5488228572265827 -0.7153911026591799 0.6586846594179638 -0.44490052575394246 -0.363570811844647 -0.2448098742037219 0.16907613150826917 0.4157663290873126 0.22672657728849188 0.3552815781168652 0.6074326142881636 0.8818655010239069 0.4917850182665462 0.5685680039047847 0.870427392360799 0.02423352944992163 -0.3055573935640228 -0.34351024599884483 0.7918531534307236 -0.528268417639228 -0.25846402939053137 +38 37 -0.7298867930630786 0.9087789781346998 -0.5493229121952978 0.6194855308034593 -0.331663832624558 -0.8942422686272664 0.140171750380095 -0.5610808974849317 -0.4707152690639098 0.840067374934099 0.772017595357867 0.9935669066784103 0.16733131492965692 -0.45736346689727925 0.35560704659543907 -0.1626923324517271 -0.29333856295045546 0.8868666501130114 0.786347640670505 0.9134574180656709 0.630949657530671 0.9411565047049606 0.9826250228335203 0.346684122778675 0.4333518589454446 -0.030011047051332396 -0.9056054586606843 0.3160917164062782 0.08945446987917482 0.49395360110546127 0.5724282524544748 -0.7648823773102122 -0.2985481313884937 0.0278586925375095 -0.42645791599675853 -0.35841330875780697 -0.536394488306124 -0.8365019325635745 -0.7507581960895313 -0.40148146442241717 0.9548200297934428 -0.41777918338622966 0.2207601212935093 0.12303403054230344 -0.25525243527016794 -0.4535169922827198 0.21470004148839794 -0.2689819109051945 -0.719414361859201 0.6845233038306731 0.172416352605832 -0.7107810834703618 0.7833369064707683 -0.9152652746026182 0.25758267835152093 0.5001949721155339 0.6118937317171034 0.9467088441990927 -0.06308446948040713 0.4704701922886596 -0.6260571615441373 0.5171311765179794 -0.34220859262454706 0.2005527354988239 -0.3222076680978412 -0.5231896774221572 -0.8684461289365202 0.8723326627774428 0.8662116758229892 -0.9796600728309874 0.5399389740097618 0.2930407729760882 -0.726776632084221 0.33136717137687444 -0.5415320500622309 -0.8868028116985784 -0.22476578419184956 0.15913517343702788 0.11030510011178651 -0.4648541627064562 0.08160892671307995 -0.1510308747613034 -0.9721555056185265 0.6142061544996753 0.5283662794207253 0.34866180351749 0.046011472537626386 0.6750804183126047 0.3748211922694904 0.5374081056098883 0.02270676389148618 0.41197286595908333 -0.16155763427933767 -0.03789813251164298 -0.9957159211430939 0.48100573427191096 +38 38 3.093635213848902 5.257343295817622 4.676397452078678 5.399048725933645 3.9411098889641507 4.127039384686283 3.8849332613544876 4.236738704062027 4.377759601540863 4.688831701780272 2.9796456342698745 5.854646331629326 5.002309654306524 4.090461524394579 3.931935003681545 4.195966300983951 4.179210788401734 6.054943641226023 4.511059179246284 3.679767822660227 4.711877361352221 5.814333988059563 4.321743035410858 3.938224053594479 4.0065437198607645 3.990243408918996 4.537258593415466 5.884828355625064 3.2240045373410524 6.20113619060703 4.734717031710633 4.452007666896038 4.2219104269933325 2.9950372773739096 5.3880872526604815 2.1405004220084574 4.316889539643895 5.043834481986745 5.375071250794277 4.600568902684231 4.0939174726745335 4.761105098056952 4.299687048123469 3.7797204880101622 5.224805000978947 3.445447066034535 3.6175196235039904 4.653521786227898 6.115221798237374 4.076505817617507 3.8732953515427386 4.951015531543472 4.233275713899557 5.074551591368822 4.086617025739093 4.833423684599834 5.223271961427231 4.127627746988378 3.8856581329021624 3.3710608814275074 4.047931644777729 5.021840519601764 4.221453404037221 4.7952879125556676 5.025134407848741 4.1797771971821165 6.162120054222086 4.786296881212962 5.329033992454114 6.649311581846652 5.618276299398712 4.602294816889111 3.877111576487766 4.447113524263739 4.914257773065135 3.340417138643827 6.14949287122337 4.047637805770395 5.316440929881234 3.448678896435956 3.123257739888717 4.1706495642578565 4.9913567557263665 3.82462916918914 4.639204094238199 5.182792730883927 4.791373649692046 4.866972858750553 4.758010216741125 4.095835632844732 4.09252221149838 2.452900227716075 4.525863956496166 4.617282045981165 5.76360776345076 4.476683596135054 +38 39 -0.13973209258304786 0.3059835412992946 -0.6727819111938913 0.726993541852822 0.4874330329090315 -0.09079323485460544 -0.08304979900978138 -0.03169540637199253 -0.0018703652914680013 0.8266943999823035 -0.18067184135032388 0.9869462241212963 -0.8453107969611957 -0.7558937164952624 0.11233032648846208 -0.42473880123687713 0.9508458067278618 -0.5508975263035973 -0.7637769209680241 -0.39565315634619047 -0.8256839418512596 0.883598843517114 0.22364183573462748 -0.7504273973789681 -0.5020370762110857 -0.455732682071907 0.027862013767209426 0.5049386618436744 -0.8264222616062245 -0.999672901689028 0.6309616844859174 0.25337410408270067 0.08053279406472136 0.5404798961133852 0.7310994947966432 -0.34565319294518226 -0.612960322486445 0.866174785697436 0.6358303175326594 -0.5773003383428406 -0.05168865308391046 -0.3520217406188464 -0.6404024967138127 0.6003042907914902 0.37209525348272754 0.6235219822749707 -0.5990109293392525 -0.200148547824617 0.8719036076230575 0.4890572064201151 -0.32404663093967745 0.9318629678426553 -0.5043246340617218 -0.2545174837009858 -0.7351433314876372 -0.8407646027988442 0.0016654147460177793 0.6652614980223854 -0.4845808259923474 -0.4591900934208031 0.43882595329835805 0.12407441482143367 0.4245055936970359 -0.8886004187366983 0.6563453263367105 0.7725353773825929 -0.7251410146961159 0.7758142431645596 0.9343189311525264 0.7755085385807798 0.7589307348033751 0.03508140931948933 0.0800005903922838 -0.6456916093878198 -0.36432926513678154 -0.299628311691831 -0.8408861524523346 0.4701052931492473 0.6059352815261432 0.2172424028815776 0.8086884839339241 -0.6812084900878619 -0.792325594402038 0.028225096443680098 -0.5600244580214571 0.9949591690825315 0.7929329753413865 0.78550087143777 0.8547769706445214 -0.8347850186046097 -0.8349159749434536 0.04143071677689569 0.7972399648923347 0.9616227325326783 -0.32394919953796864 0.3480052148385224 +38 57 0.47749866298467447 -0.8554880783438399 -0.4043952898600778 0.8833900408286208 0.41674165127590657 -0.2959936084056094 0.9235178841481757 0.5025587021982196 0.46226889110261715 0.07803708719317815 0.05832202517922647 -0.5486413269592381 0.7618643011779098 -0.06575855379446471 -0.6792562416729377 0.5875352885848923 -0.3813894889490126 0.9634481904805268 0.2813195640888584 0.6682546180838382 -0.44574461351620487 0.5089882051720618 -0.3322470303691394 -0.12104790780697283 -0.7120730686786871 0.883401612997089 -0.9479557539824601 -0.5295199002155373 -0.273953404182276 0.929751801506143 -0.3692544551129102 0.7385870837669308 -0.3276516922106254 0.8499537641649728 0.3760177751463656 -0.4532688491151775 0.037814663682110394 -0.560444986459459 0.9961310280801776 0.4520065384939247 -0.5939190371755885 0.5723665091498971 0.9364951983954433 -0.6477050560379711 -0.13413486578666745 0.8025313536415302 0.3058323105874339 0.4639510531023452 0.9432740621531581 0.49405108451145363 -0.6931402387888443 0.5200748281740444 0.5130970711389928 0.5447271383116805 0.32133595639432055 0.46146300247927297 0.7247273251628221 0.20166960563862224 0.5174846116029943 0.43470807336811257 0.24964502481404605 -0.7477415650403312 -0.8978979367341495 -0.6956085611410336 -0.6163493756201148 0.17767865251533577 0.970095027717 -0.6362948459024755 -0.3504847567349314 0.7227070514585459 0.8932094503347598 0.3702168606781733 -0.8274545194416318 -0.9936571046787566 0.887262906433772 -0.21567301642892445 0.5548401451851719 0.5498796866841213 0.8215773580682431 -0.7135861275955775 -0.5451031539626712 -0.6479961111611372 0.6591972531324104 -0.11880323308364082 0.4152229200354405 0.476651360016048 0.6723931352509038 -0.5582065007590351 0.10732405561035963 0.008272251484421567 0.2460404263182605 0.16989337719692155 -0.7332684181358979 -0.9834724970228632 -0.9672274086363137 -0.6681579438718408 +38 58 0.9825697464910388 0.9953589031225092 0.44824732117135 0.5620687517728697 0.3956645580107627 -0.8801367172025365 0.46487233938594663 -0.6171448932099557 0.8932473177917668 -0.4835552691821421 0.09186260195642859 0.8362003336495103 -0.20914159533275223 0.9696426287933075 -0.42362484094025676 0.06414372912792254 -0.371459891688676 -0.7770141574392331 0.6380901820553884 -0.023676006625541035 -0.9912645738848032 0.264162751529573 0.4250132565970475 -0.1505934906057671 -0.5184272746291698 -0.5538035411751454 -0.2025229843696117 -0.755428449188043 0.28394141935751094 0.013087347268813332 -0.852255916036863 -0.007938541398588406 -0.1668314940716138 0.25540034717546245 0.9818870155910533 0.008879652514770742 0.18601541293371393 0.16257224729100894 0.29296909596859333 0.15740213422983373 0.8217965893751131 0.025225206706116943 -0.7741889670923774 0.3391253640474565 -0.9763172515656273 -0.04330541650918329 0.41300375202235684 -0.27067871312497727 -0.8330040227023263 -0.31481784031959026 -0.25934786702550716 -0.17308340117304666 0.5509059600425297 0.6172003245863333 -0.6275033752414971 0.35188189321865315 -0.8779326494033954 -0.28246378627503965 -0.9980414648791531 0.4741990592026857 0.6499228249972988 -0.8752605617118263 0.5053383233944866 -0.7107043973663902 -0.8473730009121592 -0.7022563459401601 0.4201519275118566 -0.06217379085841568 0.7612802750129055 0.9677085704185928 0.6286593102434277 -0.6283960084980125 -0.40834347610849475 -0.2640198632967061 0.7856659187009598 -0.09776824877354673 -0.8179238940591622 0.1727881155055615 0.6495433212173896 -0.6451494591044595 0.27707168243190283 0.7717681074226206 -0.31271400028288876 0.5478476315633027 -0.653914492774883 -0.6064027618485228 -0.3595994982728363 0.3654745050819581 -0.38826072363181874 -0.3132367748272231 -0.7904824779156392 -0.1308618248147979 0.4905520362843183 0.43345757536259666 -0.9200132484962911 0.9962125083528213 +38 59 -0.3881499876093726 0.15622165149780676 0.8687683128910115 -0.4051217991663332 0.20735425771949023 -0.0556961167696417 -0.06785482861299053 0.5203609664408528 0.5670271504424513 0.9143595859204199 -0.0770557961553422 -0.1500051121312238 -0.7826565576282043 0.10091605442560359 -0.10838155934337812 0.34178013584455 -0.7171898960594971 -0.7306894033635882 0.05329993063372851 0.7450117073779265 -0.5934901055740547 0.599732979305742 0.9748401078597133 0.8179083967159011 0.20250445882505574 -0.13906321967437818 -0.2788667667607394 -0.8121852165362247 -0.2634650879123326 0.9457711446752899 0.845945864463278 0.4546530011284178 -0.686568405765595 -0.2779174556996502 -0.6015685559672774 -0.33909181384271125 -0.821195394679866 0.6748664529965502 0.829499251757922 0.2571987097999531 -0.4094580217632189 0.8154373800639831 -0.09955546425931594 -0.573429809108229 -0.9554173408695712 -0.3261005879842169 -0.6127802496264982 0.3202019054120149 0.5748234111104249 0.8675839357851347 -0.7304265886704704 0.775080739083758 0.34479242108063635 -0.861576906318013 -0.028945239392223154 -0.0017381878241928828 -0.3064183488734462 -0.4842391552509906 0.17448969557198035 -0.1564992890844672 0.27235643319463665 -0.18892184240756715 0.010634494548853901 -0.5852277683498874 0.7062055594323771 0.5029223650255847 -0.3395384193866968 0.5245972123519445 -0.13491696780331042 0.27148574692968785 -0.5446638834932505 0.17728275234691204 -0.9025949109074682 0.03880616778716561 0.042046031454584964 -0.19482884296852943 0.9560784740686146 0.35790480112640943 0.9695305259739486 -0.027383511047833098 -0.11178011462098847 -0.5041020926837081 0.20333277402901784 0.4123941406802436 -0.05509403895749587 0.2782124164272337 0.015010822619471842 -0.23873315844232912 0.5823778372810293 0.22179760329534726 -0.46959784079990774 0.2764813192798645 -0.18913354796953552 0.03212169522954578 0.6795998419410878 0.48680917150726843 +39 18 -0.3590286851033764 0.6179936128695185 -0.14999228165577083 0.6293532506020165 -0.17474861982408618 -0.4863818588138482 -0.1891643021082483 0.6860884152493036 -0.9507327736752285 -0.4060299547910098 -0.25401738163983234 0.40143013689117346 -0.8649877720071895 -0.6719890566260311 0.948200930846335 -0.1748124467639578 -0.6363794420488174 -0.1849748166699512 -0.005556840959594522 0.8095272997805296 -0.28105203089119124 0.09140941757221177 -0.754510005294335 0.4111418158831055 0.7181216516198012 0.4045285980629747 0.7311029867476464 -0.3751334910958455 -0.517772432144185 -0.09144898880924979 0.511770329656352 0.8482563984644409 -0.6139557744381885 -0.397296168587828 -0.8900268648626699 0.7055164226941706 0.36104162543729146 -0.30059485188164925 0.8405247316133337 -0.5121579528266764 0.987993778379153 -0.7031258791100081 0.5601515233029517 -0.4806345319073182 0.35013423156888535 -0.30660523927219074 -0.9153338737525343 -0.5589927389271709 0.1339258958594387 0.8106876270419234 0.37133021322618065 -0.9445041369720382 0.1448745680454382 0.0140964735180511 -0.08099627834671796 0.057153722005178764 0.32871211075311235 0.907068071249451 0.9492392063560646 -0.7461289661325512 0.6959436933696443 -0.09177230439470607 0.789858523960216 0.6063107447608658 -0.6277101896018162 -0.80208840454978 -0.7409877345268201 -0.45927683886757187 0.7728554159204466 0.09296171918307627 -0.6938422732435079 0.3691030934777586 -0.8588168405999903 -0.35548536062021374 0.8776780967914879 -0.046319464177511094 0.5085954960508539 -0.6380746122033076 -0.5100516622139377 -0.4402430528104213 0.31843132452160416 0.234020704626553 0.37879321689604684 -0.4420324323543219 -0.15960531537298617 -0.3973139831313379 -0.6268636258474347 -0.6507311897245842 -0.6688176866325275 -0.7345560889926872 0.7415237471110954 -0.555183596967608 -0.21373439886241408 0.2776260735649758 0.3529999974485607 0.7218164171036381 +39 19 0.5378944322632888 -0.763520762918563 -0.22311063627075778 -0.38282716060899435 -0.4332017128841452 0.5983028471131697 0.7771524642427725 0.7513166074188085 0.6373232665146364 0.6938120319881782 -0.34598758395425944 -0.4903282602479846 -0.5372112922751628 -0.3474908768926188 -0.09914392277224793 -0.8447620200522676 0.05013494112980266 -0.37514783531775775 0.9300068976619991 -0.42848558556859406 -0.20021617807972913 -0.8551661781440223 0.7450412374901976 -0.4116350192877427 -0.02502780737265131 -0.12005344653210193 0.9231265642078625 0.08791268587991041 0.16404830718428065 -0.20004660339403468 -0.5456395820369895 -0.6365153292458987 -0.9906470138256074 -0.9229702940376143 -0.1875118515608898 0.816547234411348 0.5561934773932311 0.18334359759293406 0.4403070071159967 0.7251162472919417 -0.863099525442447 -0.45892856836427653 0.15678288202528656 -0.45192661084830577 -0.5921847610032678 -0.8918539761992252 -0.7014507630805491 0.2852955378350477 0.973413641033658 -0.7074772770593596 0.2068794862548231 0.2335691549592993 0.007863685363418194 0.1327521753489369 0.31044492219862363 0.7357064846528605 -0.31567248212231513 -0.45947776251724326 0.7987242463957236 -0.7163482552342175 -0.8927266079715404 0.42563067492170426 0.1106452618537912 -0.09998371549594798 -0.46347185523957557 -0.5128949552979643 0.16570869346246475 0.39165608276988984 -0.8975557802547147 0.9927075610609448 0.9484399853977488 0.6272858814019573 -0.3927602382840727 0.0985482814398917 -0.3763504692675139 -0.12378062125480294 0.2411186820266371 0.5269882670605675 0.400968100249961 -0.9928152871152149 -0.17937011644991263 0.9923293321859281 0.8794753130573976 0.9763372143608962 -0.12435662757750165 -0.4391739897731952 -0.2488158742210722 -0.46583699555475677 -0.22314734165395977 -0.7997680013977524 -0.5179389498339202 0.9584358853812616 0.8764582980139266 -0.8838118566534525 0.6228143894615661 -0.5062432829131887 +39 20 -0.2564647493410226 -0.2334272553307848 -0.33415920377646624 0.554160352790749 -0.10912702878630265 0.3486240379837986 -0.7247295937470224 0.31388280168913707 0.26168430652330676 0.9193454921594979 0.17913274543386115 0.9923143837312829 0.745597033091536 0.2967967203608932 -0.32627077978079444 -0.28444114806427434 -0.8641657514295837 -0.42439555483478775 0.05437130637295384 0.3155518455577835 -0.5511210274087499 0.340016379840663 -0.1793489621950195 0.786846648953323 0.15529348976422308 -0.0245494207113357 -0.5173394295372098 -0.014086285650731334 -0.07744953160545687 0.20321731232125706 0.8897023147362422 0.8141721171542595 0.8177849521140128 0.4575754020239906 -0.14247522767864762 0.7820710838618568 -0.5302929118396278 -0.40477890888974133 0.1899910809557923 -0.5028357944196018 -0.10066610019786881 -0.960691319423143 -0.7545674051883471 -0.16181728846312038 -0.18531178096805334 -0.8032831192384862 -0.9100584513242944 0.07316490220110472 -0.2989926077419882 -0.3725178993955234 0.5838344208350845 0.32264014310355793 -0.16733705874560578 -0.8298685477541594 0.4389779735550434 0.9417310222391924 -0.5778945090939496 0.3269689141915675 0.5088726543411868 -0.28309819610439213 -0.0957901655608544 0.1345940345641985 -0.5523618027289852 0.7352842165911959 -0.9810019588770675 0.9029624349504708 -0.5813253986978195 -0.16272230889510775 0.042396293074869584 0.7381065193094769 -0.8478703022389174 -0.8694510678882712 0.2884029359216913 0.24725631194112818 -0.14380157140240057 0.837252280806962 -0.4107569209129136 -0.6088905364321526 -0.8292580937707261 0.8576252202927195 -0.15068748870668158 0.1969579547903313 0.28277957921340313 0.2674487591581878 -0.08113822606552668 -0.9189765848204747 0.22826627112910702 -0.4435228544367804 0.07625757410086176 0.6415396060750445 0.32975613746471644 0.751381791397157 0.4114525944405276 -0.39527159191494876 -0.4118466486501162 0.2752016428861932 +39 38 -0.13973209258304786 0.3059835412992946 -0.6727819111938913 0.726993541852822 0.4874330329090315 -0.09079323485460544 -0.08304979900978138 -0.03169540637199253 -0.0018703652914680013 0.8266943999823035 -0.18067184135032388 0.9869462241212963 -0.8453107969611957 -0.7558937164952624 0.11233032648846208 -0.42473880123687713 0.9508458067278618 -0.5508975263035973 -0.7637769209680241 -0.39565315634619047 -0.8256839418512596 0.883598843517114 0.22364183573462748 -0.7504273973789681 -0.5020370762110857 -0.455732682071907 0.027862013767209426 0.5049386618436744 -0.8264222616062245 -0.999672901689028 0.6309616844859174 0.25337410408270067 0.08053279406472136 0.5404798961133852 0.7310994947966432 -0.34565319294518226 -0.612960322486445 0.866174785697436 0.6358303175326594 -0.5773003383428406 -0.05168865308391046 -0.3520217406188464 -0.6404024967138127 0.6003042907914902 0.37209525348272754 0.6235219822749707 -0.5990109293392525 -0.200148547824617 0.8719036076230575 0.4890572064201151 -0.32404663093967745 0.9318629678426553 -0.5043246340617218 -0.2545174837009858 -0.7351433314876372 -0.8407646027988442 0.0016654147460177793 0.6652614980223854 -0.4845808259923474 -0.4591900934208031 0.43882595329835805 0.12407441482143367 0.4245055936970359 -0.8886004187366983 0.6563453263367105 0.7725353773825929 -0.7251410146961159 0.7758142431645596 0.9343189311525264 0.7755085385807798 0.7589307348033751 0.03508140931948933 0.0800005903922838 -0.6456916093878198 -0.36432926513678154 -0.299628311691831 -0.8408861524523346 0.4701052931492473 0.6059352815261432 0.2172424028815776 0.8086884839339241 -0.6812084900878619 -0.792325594402038 0.028225096443680098 -0.5600244580214571 0.9949591690825315 0.7929329753413865 0.78550087143777 0.8547769706445214 -0.8347850186046097 -0.8349159749434536 0.04143071677689569 0.7972399648923347 0.9616227325326783 -0.32394919953796864 0.3480052148385224 +39 39 3.7297458076375474 5.0872864197166106 2.7655368800542752 4.553230397556691 4.004148263713943 3.554599267586843 3.5613338397155334 3.3611025248288744 4.4530758752075945 5.768777085046008 4.072094543132213 6.0060492134220285 4.669111694842931 3.643360976466063 3.718849959252199 4.1378996707561 5.165229690083274 3.9207891417045078 4.946567133241102 4.096508499618885 4.513466478689133 4.33552760961201 3.9002338233872127 4.919080204481443 5.443288479855822 4.178204953847141 4.9529673180387865 3.0640434885870746 3.3654695785788755 3.6844006383093317 4.307609745789345 6.135373647206978 5.59599362086218 4.697480220982464 5.6324180848282275 3.945007250554786 3.910822396154607 4.665450895695178 3.77456811452158 5.284302056833122 4.2444604596138875 5.364411876241173 4.985121411491642 4.618889975409967 3.640314490128075 4.816927965444353 5.193588523916514 3.4468451836715754 5.012443559283703 4.776028352843138 3.5293264875576824 5.078649174952769 2.481663171402582 3.7495284258728905 4.489352197835777 5.006533564800782 3.8391022769672496 3.6329633674254227 5.296707357697475 6.392751953484929 4.992482838055156 2.5976524952041844 5.467528926077257 4.845336409270985 5.198578447013578 5.7164145960323545 5.600451682695447 4.068715401468707 4.771887669592386 5.299905864667538 5.7314173439049405 3.3056196664619697 3.2087957501231665 4.313562655139252 3.4833060325974 5.115615093577725 3.462024749985405 5.227996145013482 4.6843013534935 6.125613540173161 3.6267774708235736 5.760201772655644 5.345830357295782 3.9177670638375086 3.488622700610557 5.752884968412217 3.7413881569117193 5.033039902569653 3.7849310643849163 5.840322729525577 5.262230347214314 5.609933990876684 4.41902695080711 5.656826374241018 5.922951484615015 4.49065589674666 +39 40 -0.12974391211885128 -0.23996536681837055 -0.19974926473998322 -0.9812928298928782 0.8282797409935712 0.03954800318623519 0.05506186598979124 0.3607827553400569 -0.22733787472048572 -0.7526183130837512 0.33930802203008104 0.5489807838981744 0.22309308359071967 -0.7883071495276015 0.3986665275565384 0.12210225808327269 0.1252057927393826 0.12918701103716979 0.060160774492947544 0.8888865658360243 0.14275083274699618 -0.4709533057478379 0.1031264782714294 0.4427795151330187 0.46745044926201107 -0.34320956674857817 0.2053680522496102 -0.48059848565755137 0.35466822081804206 0.7838575756758177 0.6864577021181519 -0.8309022512305335 0.6784027846289908 0.9208841710715785 -0.9073988094719072 -0.197513051328575 -0.3297713130134319 0.4445606481698836 0.3794145987889974 0.6191901356479523 -0.22044410028362793 -0.7708998272019072 0.3435049727803541 -0.6293206609328903 0.03485161776629542 0.13754995871321918 -0.5796798756744526 -0.20965455300274716 -0.7074347503236185 -0.2821120585781953 0.13200257771113955 -0.6459770043625912 -0.07598923967809101 -0.6652177428008965 -0.1335460712580161 -0.945921012970782 -0.26323957482427884 0.3693487992163167 0.8254908407341557 -0.8043169978105909 0.8492722209328951 -0.5043537411216836 -0.7404333987403127 -0.7799331157389311 -0.9697552279889881 -0.35050677757066784 0.6205006831125532 0.49714369384131185 0.764195828931564 -0.3188438470527708 0.4513046940984702 -0.013189983070960531 0.10958304288571052 0.48316548077188437 -0.24306088491573163 -0.9741507006185419 0.01777653302115101 -0.5938455913242087 0.8440875767393958 0.8608068590014211 -0.31014997831601 0.8591094865671396 0.21148366453345901 0.44440228547581406 0.39490206452210175 0.819478208300729 0.01773627507211195 0.5272437609716234 0.3748824410248479 0.957973718758832 0.07003861154328961 -0.6952084116832142 0.5686607142069926 0.4702198323833735 -0.6957250038080149 0.6751712583932314 +39 58 0.6932056436714384 -0.40466797184100267 0.23208814226594532 0.051455533912359686 0.5792231934004735 -0.3668021188416464 0.9387508245104865 -0.039959582460541654 0.7076119755789918 -0.13492529975264267 -0.9205540943553192 -0.5650054792497532 0.2859825328281387 0.065905419525631 -0.4780095808497986 -0.820927086889903 -0.546484619851741 0.594001895262692 0.8470136619107207 0.417041270011538 -0.11047388917934242 0.4277543778496433 -0.27532466315945925 -0.5194826440856575 0.8988168419891915 0.48014066280883116 0.1251111036940329 0.5053455268763318 -0.21605873293826128 -0.5049967955258896 0.6012954872770297 -0.9637975028459227 0.8467186872296104 0.1357321651372254 -0.8187275381831243 -0.13750826138248562 -0.4658333206386689 -0.3334556102368038 0.25209600887012584 -0.7936422961636291 0.3116606791147185 -0.4238037509434318 -0.3354816137875929 0.4703691630539173 0.41755509271385427 0.912809864008836 -0.5342685425020262 -0.0602181558732513 -0.9060937484041338 -0.8960909062617735 0.6237963065926999 -0.2214044232495449 -0.7514544139351755 0.21445146755820832 0.6284702642252418 0.03176581629605635 0.4562403324348081 0.08271998247848655 0.6834380809547458 0.7671040694025191 0.6914602663366736 0.05971603199696651 -0.772869035723436 -0.3237538747565045 -0.5580329500972254 -0.13904602717185233 0.43274310985372955 0.3357131681163894 0.06744540376707064 -0.5174481868168763 0.20755150448774562 -0.5545467386040626 0.8546917268939647 -0.29000792879255677 -0.8733948623859578 -0.8642821536672607 0.10316433307933481 0.12374154527882886 -0.10322579338676574 0.9037164326840057 -0.5790881140861501 -0.8896241209678077 -0.9033846590215742 -0.6798610214238667 -0.25573006585200786 0.6810965247848577 -0.8029026050513022 -0.5537361051818164 -0.21088836586205728 -0.6625155658001112 0.6424757844152482 0.609356648264922 0.6053119209093143 0.8180373428632643 0.7551255116336495 -0.6252208810594317 +39 59 -0.09033884051120511 -0.9126947935672176 -0.2313345333849537 0.366682476557183 0.427240666654888 -0.5763080776260472 0.4857689191794796 0.6415244393292305 -0.22005661959436384 -0.74127704277913 0.6015182877172234 0.9474244372570366 -0.40626581766177305 -0.3188495850499784 -0.37247766425730333 0.12750537928971784 -0.7569749622614583 -0.27385274190478737 0.8802188841621943 -0.2361239382245368 -0.8222558488135483 0.22004282247536655 -0.6864513519333677 0.319708839733873 0.8933392505851105 -0.8342152749894007 0.9370616377454632 0.3247327988040889 -0.10721707345358733 -0.15249745732676123 -0.02707444353010313 -0.6511669681538639 0.44237999518288595 -0.15487196672569725 -0.6782724245691478 0.008375707539826971 -0.4806834785799141 -0.9290640342464946 -0.19529029200161063 -0.5370404503425585 -0.5395700237218706 0.8930193234613524 -0.7730540543689606 0.6570750304335706 -0.47976561059791334 -0.06473738789784522 0.5005087645368798 -0.6847235412478276 -0.15265264947509438 0.3729944225743327 0.717625029054918 -0.8954726633603558 0.2547538257358217 0.4147633413484273 -0.820543561640972 0.6839458448942688 0.36871777180280607 -0.4059949358254755 -0.4983219485375867 0.8518478789512061 0.1902997089582268 0.27308348452796016 0.5708288171582743 0.7949384628899558 -0.0790643073334234 0.5975029470058835 -0.8965879630000744 0.10558014358756185 0.08932604383942633 -0.9350544965999545 0.9845069880381234 0.06035088545935596 -0.1958107860394267 0.8226334808320976 -0.1722398835914245 0.7207968477119253 0.9523123491883319 0.6600274596051454 0.2997689108415409 0.7237584833074919 -0.6284510825961624 0.758429268598575 0.8558512524455097 0.03732980985376577 -0.9844775716094136 -0.6858694351247425 -0.17215787948084538 0.34130615289658484 -0.5789768934578532 0.43902687480583724 -0.9678846231275988 0.48658693394951835 0.39341023130921293 0.8047397767959048 0.8457255614822812 -0.8513465678860119 +39 60 0.9103840220603157 0.91790873197648 -0.4656458003710573 0.16856896754649453 -0.6382738443996274 -0.5493621438722822 0.16712397797151057 0.32574836666089957 0.9218298047878226 0.8109093135666661 -0.5267407854041333 -0.7457408042663742 -0.011231503423279054 -0.1284840855938041 -0.900505255034233 0.6055862518071222 0.6022293895730386 0.8515245113923289 -0.7356006808965934 0.1466378773919217 -0.6545259491041497 0.2856098820097439 -0.8923460098154983 -0.35802564190708486 -0.9057069097357984 0.835703075486173 0.6913978375797833 0.20352865286833755 -0.8855449265343773 0.0214893192983594 -0.06767311349372584 0.20136753832764231 -0.48854354854759374 0.5928251354610115 0.5371519230716102 -0.6750183400118992 -0.04570269236096225 0.4356472421843369 0.7492543439510835 0.8667737341729003 -0.4643782248578938 0.14493779636741944 0.8650088224796675 0.20317889904194564 -0.3440247547039519 -0.146639477271721 -0.4253601965471263 0.5760194661283908 -0.3821066616438742 0.14566931089047186 -0.3429517613157296 -0.8164048726877586 0.0651170689972016 -0.5439601072987046 0.7958797639866733 0.5773961663230598 0.8504064165186851 0.1506425414060253 -0.40576172924972154 -0.8519799579308147 -0.34335169375108165 0.6395794432339545 0.5745307005543463 0.11087766330010895 -0.5344300074502679 -0.8088969594020521 0.7586690617336149 0.41253601999961353 0.9906805587979668 0.7752260252447984 0.28562120314552764 0.4735076331923085 0.041485223271487515 -0.5275869116403313 -0.306039100835269 -0.42025811508017386 -0.1510276377867381 -0.7479246727975137 -0.6414844801679991 0.9132675820263874 0.4924404782461129 0.2334539709864869 -0.4748216597532853 0.7468194224825884 -0.2319264433828483 -0.07807902146647816 0.028315700890480855 -0.8005966557766098 0.5396479480016882 0.47552629205856856 -0.9593365590426268 0.7696743668607176 0.5342348196398075 -0.4208241146145786 0.9299536594656848 0.386141776488343 +40 19 0.10453501078868332 -0.19298775277917257 -0.20615695496324582 -0.7242292693170127 -0.4700727382230685 -0.1891486581349906 -0.2536163487376195 0.8250364506585246 -0.7565424437635477 0.8820890009687814 0.5761743190656303 0.7010695556971029 0.08058151881573306 -0.9642123920366668 0.9855305128070133 0.23537421641278722 -0.547408438528739 0.21499381145354501 0.348378591020023 0.8300855432152638 0.8186096880130751 -0.7933032610345598 0.5977260247568446 -0.2610650622779227 -0.23275770840662702 -0.33245313918230956 0.7495433716735516 -0.1066128555686594 0.5297273382027783 -0.9573981437284389 0.04878192964541883 -0.27978959625729893 -0.1656769846934989 0.3091949283346054 -0.16054244478682045 0.6847714465441517 -0.654001200447923 0.8140784423735079 0.1768188189904789 0.48457998022817783 -0.6958492436320252 -0.8267237130665286 -0.4439478742825602 -0.4502731538011533 -0.8232239217054262 -0.2464688647745492 -0.15960454992821416 0.8042573000929494 -0.3483077221493749 0.19416901373527806 -0.2576670371789218 0.6102783360874102 0.09629275934632675 0.532258398358967 -0.040458843887276386 0.06759468541486657 0.959317387480678 -0.2305949912319163 -0.04134694639723402 0.5025104040416186 0.379572493670568 -0.993657129392675 -0.08527784238998537 -0.40472845872525176 0.500353211801978 0.8773031394828363 -0.839046600896409 0.10975296127869805 -0.5611404027328266 -0.4810376984561908 0.7206870886299974 0.7133886042932005 0.7935718651055157 -0.15160309328236643 -0.1522282576143763 0.2784181672018946 -0.11339303855814231 0.07978221743600145 -0.006541038264001431 -0.7108460671254264 0.8883335988872987 -0.5832690494836017 0.7323568342771358 -0.1595073886765479 -0.08787567353224057 -0.26931929172821123 0.8250868657743888 0.1370525998429577 0.44658783217365783 0.43025371375280885 0.8967724292016721 0.5693212729601387 -0.6059894023437826 -0.2373821114079231 -0.9771867904337774 0.5561652564159749 +40 20 0.19182175558284364 -0.24906255441324054 0.10429130909473017 0.05365543608258405 -0.6485728243890707 0.2225674832481519 -0.7542066941126047 -0.6473849031286025 -0.8673948438501087 -0.07945434827146958 0.772589481047177 -0.07749723750935833 0.3817510484219868 -0.6584982402593014 0.5219944870643143 -0.9472867306309853 0.005547188612470277 0.5170125687242395 0.5215324075703394 0.4565931835194852 -0.18159661890463452 0.19213520673065032 0.1950281932672202 0.28761741447571776 -0.6949240187321626 -0.4296794153422434 0.8313791849272454 -0.42771082464881105 0.7671646448712668 0.33643755511805695 0.21779199869470478 -0.07313530409717894 -0.058932618615556986 0.06031681567741898 0.5773709098789326 -0.586496785373005 0.17374808391894137 -0.8178790529886288 -0.820253215732853 -0.18489198630421821 -0.12965977783448834 0.806479949536242 -0.21295138598707708 0.6417265618066508 0.4259619358899327 0.16984792846434327 -0.7584886384202538 0.21421077930272925 0.5834970583183303 -0.1323995381268137 -0.5629467807086006 0.38284318867768374 -0.05519948365430993 0.8811399623760157 -0.16772598715627907 0.549629580859557 -0.3921751863513423 -0.451141808660934 0.8822896544008221 0.7521157884306728 0.12850934770782962 -0.8920306325581495 -0.4544691235411542 0.9406104067673868 -0.29508539275853574 -0.8047203102083182 0.7690417918087684 0.8776832966215087 0.3407218684530602 -0.23634655300304241 0.9007698814455194 0.9997102554276249 -0.6136917411175267 -0.018477243721534364 -0.06127036499182292 -0.2106672968868546 -0.6421366553045207 0.4480740866313728 0.49120301420338697 -0.697435641121807 0.6180463622295254 -0.6077209547830393 -0.2443954351851072 -0.8742683779709652 -0.0626802282850083 0.9266645384201044 -0.11645607660635293 -0.5347634705886986 0.9815839185831827 0.16040660621781067 -0.02536396378656236 -0.27060158193143513 0.5120939500119912 0.17733703614663532 -0.34137124606623215 -0.836310191669426 +40 39 -0.12974391211885128 -0.23996536681837055 -0.19974926473998322 -0.9812928298928782 0.8282797409935712 0.03954800318623519 0.05506186598979124 0.3607827553400569 -0.22733787472048572 -0.7526183130837512 0.33930802203008104 0.5489807838981744 0.22309308359071967 -0.7883071495276015 0.3986665275565384 0.12210225808327269 0.1252057927393826 0.12918701103716979 0.060160774492947544 0.8888865658360243 0.14275083274699618 -0.4709533057478379 0.1031264782714294 0.4427795151330187 0.46745044926201107 -0.34320956674857817 0.2053680522496102 -0.48059848565755137 0.35466822081804206 0.7838575756758177 0.6864577021181519 -0.8309022512305335 0.6784027846289908 0.9208841710715785 -0.9073988094719072 -0.197513051328575 -0.3297713130134319 0.4445606481698836 0.3794145987889974 0.6191901356479523 -0.22044410028362793 -0.7708998272019072 0.3435049727803541 -0.6293206609328903 0.03485161776629542 0.13754995871321918 -0.5796798756744526 -0.20965455300274716 -0.7074347503236185 -0.2821120585781953 0.13200257771113955 -0.6459770043625912 -0.07598923967809101 -0.6652177428008965 -0.1335460712580161 -0.945921012970782 -0.26323957482427884 0.3693487992163167 0.8254908407341557 -0.8043169978105909 0.8492722209328951 -0.5043537411216836 -0.7404333987403127 -0.7799331157389311 -0.9697552279889881 -0.35050677757066784 0.6205006831125532 0.49714369384131185 0.764195828931564 -0.3188438470527708 0.4513046940984702 -0.013189983070960531 0.10958304288571052 0.48316548077188437 -0.24306088491573163 -0.9741507006185419 0.01777653302115101 -0.5938455913242087 0.8440875767393958 0.8608068590014211 -0.31014997831601 0.8591094865671396 0.21148366453345901 0.44440228547581406 0.39490206452210175 0.819478208300729 0.01773627507211195 0.5272437609716234 0.3748824410248479 0.957973718758832 0.07003861154328961 -0.6952084116832142 0.5686607142069926 0.4702198323833735 -0.6957250038080149 0.6751712583932314 +40 40 1.6477822317790547 2.537915453747968 2.1917970714119637 2.8219758678381988 4.420216485218984 2.0694549620637437 2.560097746279432 3.4750332522360354 3.5737053045162153 3.6482059497977035 3.0763216432803677 2.744597196741937 2.4330265106246864 3.9579365391185037 3.8624955190204666 3.07787184788061 1.8609041601631016 2.230203130380631 2.570972610991124 3.3895622174140314 3.036839458109828 4.045206256542892 2.11191947047787 2.410132001174512 2.549822912998126 3.1546682166347164 3.1298219223331962 2.0496370492024445 2.501578580016573 2.5179308818183737 2.5779992412474675 2.9374083715717005 2.9572464419819102 2.6333854086195077 3.016666489719671 2.4222722075152534 2.710758970068518 2.9447887093055565 3.1251836844646546 2.2471638427663354 3.2133965159612954 3.8187853578699964 3.087578037889735 2.8838016084593967 2.904371640835466 2.0041809676921867 3.070915261800268 1.9232081945716322 2.3537692240860584 2.417653747660956 3.0688297126695394 3.410920584259581 2.50314857919471 3.240884768632517 2.1146381164252825 3.574146600081839 2.3361432664977446 3.2359205987085686 2.4419116974163364 3.4864726223112052 3.457136869165179 4.5293183037072335 3.703001994950652 3.0566176477485953 2.628709840281582 3.9208227855820894 4.137107842991635 2.746570143358263 3.816483828329888 2.052021909172125 3.649882766147261 2.1617725265737784 2.596129103097408 2.222465499346503 1.422408662397738 3.025486084646269 2.1648962164828944 2.350855630954094 3.0482552084508288 4.368293952345107 2.8480374650594324 3.221718948082313 3.760108191954003 2.9765722792521356 3.444043926892402 2.483197872180804 2.574184835080165 3.4359083946366353 2.9670319652247144 2.66944840510311 2.911690912026666 3.266756882990558 4.15985327626251 2.896337974277845 3.5107652533859817 3.2127056280764994 +40 59 -0.3677144066727158 -0.9023147163996981 0.06289239152672721 -0.5212288667806093 -0.6755421472816396 0.9549830025912212 -0.3356806037076274 0.8604346858896108 0.34629506593377424 0.8399640944014501 -0.2195017722510335 0.23122679807617974 -0.4956817676422358 -0.6010626372730283 -0.9653967566118673 0.35382449503733904 -0.08363896041506247 -0.7800812823176473 -0.6882589780946953 -0.5797507062264113 -0.34879721142056686 -0.8157961863692995 -0.3115161735179719 -0.2109491256469025 -0.11202594898589746 -0.8223454033776723 -0.4144239276130648 0.17471202375154915 0.23386473339850733 -0.2411271886938724 0.19211598346188974 0.37812529000646355 -0.9970123945232916 0.7259034320292774 0.43275212852360556 -0.12422936910016213 -0.6752252820208271 0.008501073457798825 -0.852163850299249 -0.274138047360009 0.9643741739335956 -0.6946227619776713 -0.9528359570096776 -0.5033359762480305 -0.8241266996329417 0.5578177333713914 0.3663572695730628 0.5451499807063456 0.1523845013488061 0.7045841196089655 -0.7707897030204014 -0.5384883154583753 -0.39181639452005257 -0.5959287703440381 -0.7994497032058641 0.7306336323556522 0.12659408244155723 -0.6100257693619919 -0.22428257944316932 -0.8827947023204223 -0.39724939503345924 -0.25217744205298986 0.7047153032920657 0.27840272924690934 -0.021765482935962588 -0.9859131277271262 0.651126962161185 -0.5586137529742572 0.5845130209499196 0.4055386626262951 0.20145862396754377 -0.15354474025340537 0.6297515736620354 0.22078669040165266 0.22612937614680106 0.8077952208006693 0.573431952849274 0.17907723733531777 0.48440199087450764 0.5435541352712867 -0.03892156819838144 -0.49309895039386054 -0.8545687197507539 0.6365348703831382 0.9973547439546364 -0.250787276942938 0.3728361184490203 0.707012369540766 -0.8229904286886995 0.7837360413455534 -0.9344312429329455 -0.1829378397367145 0.9179730366327901 0.8609273144130338 0.7061276563622956 0.41977512632785796 +40 60 -0.3398423133741093 0.6820256509056033 0.9484890729773645 0.5144133708520024 0.8441576097863521 0.37707304477296977 0.2432979883134998 -0.43740933213613786 0.6643975594145557 -0.20005002581809617 0.8976076283794587 0.4172476972023391 0.2604825478083441 0.3908709389416596 0.09806891428489473 0.4765379912117804 -0.22994989685848766 0.08969413329777698 -0.6120292667281655 0.20369329505246814 -0.6921633509342422 -0.9362357600925513 0.06681696018654515 -0.5663142157582051 -0.46244566410599286 -0.23399396311215237 -0.8526148741265691 -0.3960303336484188 -0.39900570496250554 0.11881797179427322 -0.8862003338261824 0.50493166289057 -0.48587304970350886 -0.3168057691704469 0.24450372664992703 0.15996400055285642 -0.24401508231150504 0.3867820630809573 0.5448924840646681 0.2505062820062969 -0.45120690034111566 0.4829479742181326 -0.40498045383193526 -0.3112064103136918 -0.4598303280527658 0.8835771960254966 0.9982473864068364 0.012232146580760883 0.1590661200928194 0.37233001238097274 -0.7389776106852193 0.3441078738480343 -0.966987735583084 0.12859723296789594 -0.5916937090048957 0.502098306969671 -0.21198895726606004 0.646874024230844 0.46470170412472234 -0.4279971334911383 0.8059580696909296 -0.8907408976458284 -0.7764893211905592 -0.4577883670995082 -0.32713566945542083 0.8750936905840232 0.5108749949914577 -0.010863220534497176 -0.9458907103848617 0.04521566250198017 -0.41924937107091687 0.010422978436297914 0.34129641267085864 -0.4205741711322164 -0.06654314000364137 -0.3197635919920301 -0.5540529346177823 -0.8646208336577392 0.3654863298269917 0.8667996232193371 -0.11357416228479766 -0.6040809423010269 -0.9517120033489355 0.7272830422043435 0.9026167780855552 0.1260066886487743 0.9324957696352127 0.915564482768588 -0.30762838507744616 -0.0833956382100991 0.8381166098491579 -0.6139838276603962 -0.8640551923429718 0.4494911007271878 -0.6540350300750011 0.59526703372374 +41 21 -0.05492318941028129 0.9165185207085145 0.10788229954769202 0.30669521821765944 -0.9015914571707784 0.4694569697240343 0.2176098297415081 -0.3618869572329746 0.6518554670927539 -0.6288687310020031 0.6455826115661707 -0.05390511450501467 -0.9575190881446438 -0.8821389377084614 -0.16060569976510775 0.4087302952017491 0.24095809249117783 0.6787320533304755 0.36015022492920523 0.6357415292032567 -0.4138524904449987 0.19961342696566953 -0.9473461971449941 0.8837205647996083 -0.5320633437812359 -0.47245753913400734 -0.21588807373692664 0.045528901057950044 0.2549850517862955 0.7103956963637186 0.7618221417522502 -0.026397848587971007 -0.4427887671779589 -0.7112422921364829 -0.4012565981629159 0.9937433182990763 0.27964915148905 -0.04440343775561839 -0.4744623217358723 -0.32753117482938277 -0.5863922943408764 -0.7166876904164825 0.9537852100132542 -0.8688588800246748 0.8786628350486934 -0.35624737055239053 -0.5293047409242526 0.11384171683140254 0.6472963119601949 0.5578909981583322 0.7007832059207297 0.6343047918873734 -0.8518124015385873 0.12147908526619844 -0.4243500740741324 0.6962764882754549 0.20221073707711734 -0.6318402516733967 0.789472098965684 -0.6533979857344858 0.7885551979326904 0.9193222832610974 -0.15808808409848885 -0.6559894333230827 0.2009764768055866 0.2947195840665766 0.6785865354594656 0.7946881960754393 0.5622811965034946 0.9945417018046219 0.7277493904821166 -0.21694551165310227 -0.6800163898530658 -0.7645529539678788 0.615464985607612 0.43979026174984326 -0.852471411217872 -0.6484324541877091 0.0728031925499879 -0.891143362648865 -0.013543130738908449 0.6936329965016408 0.7260168971731353 -0.15938056507018228 0.03966175131731409 0.8486038694404663 -0.25160367180441856 0.20976224787518039 -0.34867624751728177 0.2781847636421353 0.19591718127430968 -0.026107916004540765 0.5946121833226712 0.7802811282823601 0.10814660989235914 0.9705181306134734 +41 22 -0.05302263453976974 -0.22565562660295102 -0.643376929716289 -0.7817640330469287 -0.326343135897317 0.5843945196062863 0.5913790091816546 -0.43334215225927775 0.58320325130263 0.6204301522726945 0.9887992327551345 -0.5461985373324654 0.5960329283708325 -0.40224942708909595 -0.3024964865521236 0.7793222450198374 -0.01290386399806831 0.10455457226390052 0.012410063510190472 0.8195244863171358 0.17253476635845355 0.16623471390383893 0.10013291705265237 0.29359047951322337 0.49567993187281845 0.4628245161826343 -0.47849599392570097 0.896228772545419 -0.6364600059666965 0.085318761147402 0.8861522338119661 0.00457358681961284 0.9340408322014391 -0.9439497898948148 -0.8599081380837481 -0.6215128106726344 0.27224685037867546 -0.1200314757077956 0.207535670616948 0.1556129501206207 -0.03522706194717884 -0.27263784335247676 0.5119094228932979 0.24326928424668548 0.8973861794113729 0.3489240844303345 0.8678682014500456 -0.36633675636986385 -0.18551101534399184 -0.7051961191308698 -0.35589115735594845 0.8962983950328343 -0.5904415875014366 -0.1556949234118472 0.915742331713115 -0.26717380254151357 -0.8136640383811287 0.3547850425000776 0.4511247149480817 -0.8080950474355053 0.4993723355332278 -0.6542635717664802 -0.5431827766233508 -0.3634239604858678 0.9757134350553289 0.1071603591525705 -0.6328043241827468 -0.11319394134315286 0.24763760262693912 0.8569286250066295 0.9649874112532515 0.12030246418832413 -0.12149322920875494 0.33606449173058905 0.6149399417155434 -0.08641413142191534 0.2628119144227561 0.9117875263815545 -0.015229770620051708 0.8322094421502546 -0.3721982511051982 0.760551510839236 -0.7889787231072392 -0.21194529331660772 -0.6637589862633617 0.7007285654238862 0.20592134514082572 0.5186176568899581 0.5971825156306421 0.6184743246572042 -0.8545432354902733 -0.9576386135914183 0.8295500009045742 0.6558860319292015 -0.41839553853926903 0.5116023541051637 +41 41 2.8755107959760022 3.5300623121309282 3.2053353903338753 2.197089692274233 2.5928687044224086 3.466792919162985 2.6840762980718926 3.482100300058865 3.566938365653436 2.7004333488918677 4.212090802193021 3.375342298180739 2.7598241598683075 2.5845940812488477 3.366589478602693 2.7508563603486684 2.3293189606570905 3.037061465820647 2.1777140905504964 3.6865663075618196 2.692553326012467 1.7160211435115067 2.6220051709899432 3.632849226480978 2.6338819070241533 3.1200423193438276 1.8684852010143647 2.904715238917335 3.069178226347832 1.6525802374668674 2.568325079071575 1.2660085932342062 3.0157195984727982 3.7909503183786155 3.053484591881029 2.6215286748952327 2.2550494451900054 2.4096540214067463 2.5218778865874487 1.8700097376814369 2.2818059783120885 3.9709366941258954 4.253874465997827 3.485172825279558 3.7576507608736955 2.533553846824231 2.5380204915881097 1.0759510747810055 3.4368703576579973 3.9888287728925835 3.894254539653642 3.797487412955701 3.7118984874971233 2.361924804225244 3.1713652904152267 3.424306660668144 3.626293175772082 3.8845335031595223 3.568404613572524 3.339387921175047 2.8391805302827717 2.5507131364525404 3.2645041560323973 3.5832703620922337 3.1649078262723065 2.8246029102997046 2.6082293267768124 2.6512841793815127 3.4730564802735797 3.1953749554809203 3.6571462230656833 2.3498326582344307 3.6028361917364613 2.751646779421639 2.6129924009240506 1.7109913555742777 3.6951108709911398 2.7871051516944014 1.109728900632922 3.580160037180928 3.4399446692985993 3.252217686234346 2.9256760331166056 2.4406178615579446 2.4078540794486765 4.134612138247225 1.371893013000857 3.065412190892827 2.81765472212949 3.1361395243285566 2.1786771131897544 3.2403539865016597 2.530483275785903 4.252454341770303 2.476786010900233 2.844142618326756 +41 42 0.9567130710218898 -0.3646864791068869 -0.11275353568984947 -0.48097833140304136 0.9219624415968859 0.8954445163486877 -0.11424125102507143 -0.3026697075135365 0.34395329271552155 -0.41219161646990976 -0.5029609452939003 -0.14455394041860492 0.15204247677215177 0.9740072533680708 0.8253714257724536 -0.73302961406956 0.8554404936608624 0.5704925831004206 0.7351989602366245 0.664279752573516 -0.09174447149791232 -0.7787308270552795 0.961818987387147 -0.023581735582427266 -0.551275154663109 0.8776006667815888 0.23524292659429014 -0.43434616628361566 -0.8420595576574079 -0.09439933756632901 -0.21295192294002496 -0.1441642722273646 0.0002891861752263303 0.590742372743529 -0.39273395608661077 0.36917551454658426 -0.4546308838703166 0.9813236666404033 0.580983951624273 0.3768573145981948 0.8423233583285672 0.7510652934316533 0.7800052844550576 0.6981335525206762 -0.6908177612727728 0.1256964984008737 0.22096632471339306 0.405351699119872 0.6140100046374466 -0.5561552002537031 0.581023200845687 0.044418894017705934 0.4780984122860037 -0.2239761762586101 0.24532748760101852 -0.4792894302683126 0.9088446136395123 0.9785694234669784 -0.40893118661284356 -0.3344519248755735 -0.1028472732544694 -0.24394642447608983 -0.799052399313801 0.17752145369361316 -0.021309650156061455 0.8580774553249024 -0.35271162961947433 0.5364195351050818 -0.8790354206191617 -0.010523050949143853 0.11843544208517853 0.42606968641761545 -0.4372240793323925 0.5362552627273234 -0.6254966268186148 0.09619338089791052 0.8521194136633661 0.18537713123491972 -0.31599798769450715 0.008695526568743173 -0.9987933650793039 -0.49718793235156533 0.6307370661409262 0.288418950265777 0.7412997416890097 -0.8961319583869174 -0.5780602908771417 0.5673168579765637 0.46294978222803373 0.415858496778472 0.17998876891620785 -0.3590060770106702 -0.1277085171531389 0.7496649640851798 0.04469279048106034 -0.2622804040417315 +41 61 0.8985904111811496 -0.94702724904416 0.8229054073111721 -0.11511336590846932 -0.062113028501431744 0.9007496306749474 -0.9844594186305748 0.45243696262342104 -0.9680219871671316 0.735751939315473 -0.6946595824999722 -0.9465327269165436 -0.27660864543336783 0.039505832159082876 0.18467146899640396 -0.16406276868087044 -0.5208651539417293 0.3953358162821119 -0.5319638542772076 -0.9957794892674636 -0.8294347715243777 -0.5115078424088377 -0.07800495078770808 -0.9947964408884298 0.07113725027134898 0.5375271707120881 0.808134994833251 -0.19540408853695723 0.533440129561009 0.5903308348072833 -0.4499564446950699 -0.6948502157870835 -0.6621043248963225 -0.5897789941193865 0.2503550886070425 0.10572362234588661 -0.8446699645675122 -0.14116013537076988 -0.5193112628780958 -0.5459759118133005 -0.29791133481245113 -0.3193518607977721 -0.8542949380520166 0.7952011372801655 -0.7176446528736236 0.7783457925260973 0.04950243098286311 -0.026554502793871615 0.5398295850278552 -0.9907318484535901 -0.9316152935242776 0.8715046672089026 -0.9221805495362672 -0.7276545801318302 0.14255183762249657 -0.7286801245595724 0.7817009607488696 0.34697541796718134 0.24583485897104995 -0.13607787770137691 -0.3549570516386793 0.05596257747147115 -0.5149614173468704 0.723550896911787 -0.7424663113336045 -0.9637309074081071 0.1725397937342834 -0.046193034777972874 -0.6246159031016012 -0.20155610601660223 0.5192416083183202 0.48675831258601376 0.7861198415040809 0.1354009607432709 -0.2937394305052454 0.5004311825721415 -0.4808404846666954 0.9709254463470098 0.20445101318188308 0.9912058546782192 0.4952917253828448 -0.334772674118345 -0.5057125915492562 0.3302609592089998 -0.346762988323031 0.7829545612038851 -0.1838902856853124 -0.9032578544040748 -0.23421477376300248 -0.47279557463522903 0.4473876843971367 0.44256301816410626 0.06884005430785556 0.8309545648832208 -0.7261052322177568 -0.4552601163385346 +41 62 0.2603373383446508 -0.8825358973374593 0.583664413232784 0.4119209613975956 -0.3249133079455404 0.14871538490630476 -0.5162534567172099 -0.9402094068748439 -0.9968952368236694 0.2077852222552139 0.7597687261688448 -0.8223281438629835 0.1277324961826518 -0.25186501140349904 0.9881824950632927 0.21037967137518665 -0.6084001459616459 0.711962239685954 0.04936501194456122 0.2883385646444867 0.4281536878597647 0.04732858329587586 0.4032411395364428 -0.5936429880247429 0.6548677349058434 0.4752647569829367 -0.019455868485676042 -0.5732476379535199 0.6634928254263741 0.12376092157676655 0.22237575826931377 0.029673963795018077 0.48283688796340196 -0.023907657145889383 0.6509268835725224 -0.1909385699929358 -0.20301804941773938 -0.45879947815099587 -0.32152406718811677 0.19274569556543453 0.31523844959138736 0.9723522554181352 -0.776903884370072 0.061280544091959044 -0.24239936418814212 0.14825210417114354 -0.15615944922047698 0.10513398863632073 0.9046787497796327 0.7167485643585687 0.8609454917672232 -0.8923226369139374 0.31184085130236894 -0.36428486755354816 0.7891276389694835 0.5673249189114005 -0.9149554783131406 0.9372091420544519 -0.8240035793224538 -0.7110624032541129 0.996376880748534 -0.24741472342027393 -0.6752538085354358 0.941215559463672 -0.4770452557810754 -0.45594442158945214 0.3697557275200387 0.7856756501540152 0.8344652132007682 -0.36510953159666326 0.8715717100762246 -0.7148214561268726 0.8271923477694818 0.5995194221052267 -0.4571430343560001 -0.1898574579813892 0.2497667415162974 0.054608204608993516 -0.4506640790872898 0.46471530471155176 0.9200054081990636 0.010667180021127987 0.1935445081224496 -0.705692931787611 -0.5821960767081042 -0.2950917240755666 -0.056493103256929134 0.23462563033872152 -0.6034922663150843 -0.3669809189095459 -0.2898865106206263 0.7640252977918556 0.2816458874306915 0.8390554871381177 -0.5737572863727818 -0.5274609280034426 +42 21 0.32114334159780555 0.22337219187720736 -0.6062227823796924 -0.8388868501911801 -0.7138205285628403 -0.7337739495694442 0.6180190563297021 -0.9494303574840277 0.28268734584036537 0.07338869634777478 0.5520012591515027 0.07269432747113758 0.5021854527395939 -0.2649671470944053 -0.9722631424881465 0.45526504619291663 0.771260685530136 -0.32571070784877443 0.9412357934459847 0.19836080699181258 0.2901227272065974 0.3205411844227366 -0.6179557677007701 -0.4040821579735623 0.03675533497246031 -0.9263370643974307 0.39158569542967614 -0.3460632741849401 -0.8294835303333272 0.674756843840095 -0.737144064620169 0.1173708669639062 0.7003519298370526 -0.9917940896738844 -0.595218165885929 0.3367230519087905 -0.04099963337662027 0.5613320062489378 0.6292393023118292 0.23009566624495936 0.4283588443469013 0.31434201707187426 0.7078335186290619 0.20132192791935188 -0.7936956144989953 -0.2771285189920796 0.3116739766728016 0.07283801542623025 -0.25382650108601057 -0.8609336122711309 0.8396991146041553 0.9954430861572068 0.05499711514987893 0.9871932573192477 0.23097579618473718 -0.015457952387711194 -0.5103034210815804 -0.6615639599006948 -0.943346903806737 -0.5110116803174742 0.36760453485527944 0.05945664604588097 0.49062505880117935 -0.8906089060609956 -0.959476500572576 -0.107851386548248 0.636500582206494 0.3357064673446073 0.7460708151531521 0.2572571588622141 0.7444447747968976 0.44528436701086016 0.6418455033686608 -0.6867670276638698 -0.16819323894190963 -0.979329593996763 -0.7834608094128954 -0.30603582552913533 -0.393304160757038 0.03026356435754196 0.6148760245955593 -0.7548639450902985 0.9542839960204232 0.3310683555129097 0.8452955851071244 0.8383415513690833 0.473836944808536 0.1987355662789283 0.41913895575386784 0.38988525773419513 0.29136200297402515 0.741525620135153 0.23562446301477724 0.600322318747398 0.6397549010391963 0.5252863236906962 +42 22 -0.9466366299608011 -0.7658599237362222 0.5697106351443351 -0.16042576257113894 0.7928328471555002 0.221489531186851 -0.22807508905932106 -0.3160471978355659 0.1039359752625093 0.5436873774028665 0.8719571597344524 -0.5166585551737386 0.17725726133019482 0.7642704058968035 0.16033067104439924 0.47414951917313686 -0.6032836327453204 -0.14090827025124897 0.9387241972314806 -0.9221951207974237 -0.5601374801150425 -0.5205349239145651 -0.06539580194959616 -0.6662693251219418 0.3760842650465035 -0.3816626560435217 0.8506162475722583 0.290343182713358 0.7584412086086829 -0.383619605195028 0.8908468155087579 0.44713727785176594 -0.8508760703474783 -0.8065261675699891 0.32411967967255495 -0.6699771525239169 0.9068862506889714 0.8162684714380999 -0.6614979937557981 -0.49668790175160815 -0.8382677936735152 0.07494983970028457 0.7460203371747236 0.44702961476854863 0.24755677154804268 -0.27734351279985003 -0.22134592625541583 0.23912782843736657 -0.3097965955087467 -0.7263525530072779 -0.881903272475941 0.6110872995960084 0.9002301732298057 -0.10133273972367762 0.9715292535990001 -0.8388602391879514 0.6650073169316717 -0.4876712725800716 -0.03754801655345075 0.48627052979357765 -0.7355668465381018 -0.8136363946564935 0.5568023267923468 0.21957082519893412 -0.19698760591491538 -0.7793917756937652 0.9930095528336538 0.8366221180025772 0.8851610948282862 0.5312668306866557 0.7292448754671288 -0.3432935817812237 0.6600453113409097 0.3802545718628374 0.8763563485861143 -0.742686324547029 -0.11981812734678599 -0.42394658246940464 -0.024256942292233408 0.21919254509435615 -0.42834112110584055 -0.18531018072315875 -0.26111234870494315 -0.894878014644443 -0.8967652493575304 0.017669599532150082 -0.10439277933683933 0.9481289407544014 0.3613618896935753 -0.16656666868804004 -0.13637851925366706 0.11033206663789019 -0.9652268287503356 -0.3575527370988918 -0.6109055864431707 -0.5208148383295539 +42 23 0.7432363957346972 -0.7512085595176561 0.026619172756377374 -0.14528224209336016 0.2350729194695036 -0.06926733021191622 -0.1370715133569369 -0.05332843034223944 0.1688073200111755 -0.8483649851678858 0.035182795906833375 0.36051641322758776 -0.5036984940507943 0.22757928340703204 0.36396809542849984 0.11872358649214232 0.7246714519409343 0.021082975356325306 0.23317568442769643 0.05851556514607581 -0.305521138912191 -0.5131175155468446 0.9396519321175247 0.09948243847780769 0.46302180627604206 -0.5074095411189388 0.9146093872139069 -0.08081597792502637 0.9253050027143637 -0.7929526186340428 0.31244444171155816 0.236355763394555 0.1927788196875142 0.9933488053911468 0.8251441156110875 0.030839657708333412 0.5716184978954035 0.1782856339254344 0.4981546972962978 0.2861959526314919 -0.2642104890831136 0.777196077316668 -0.9695915940295778 -0.5907309966498373 -0.9353028767104634 0.21819984035802453 0.4082127464677465 0.5976447355299486 -0.505449380329587 0.6123775425051694 0.2812768133621515 -0.8167502500845414 -0.439975088895034 0.8067224149747192 -0.03206958629383405 0.5215058203892253 0.46946664374933755 0.5030970837648077 0.7814930140702498 -0.06941712070385075 0.8826232441371515 -0.0169686607687487 -0.8058337397454345 -0.6527669620843646 0.34986776784478124 -0.06500685347775015 -0.9848481223018002 -0.4402635692886572 -0.6921994949497676 0.8959189552703881 -0.9832207834306352 0.33166008787070456 -0.036114143809925725 -0.8661221918622732 0.036324600043852184 0.6660723409620766 0.9739117866078759 0.20812080828734314 0.6647635901213724 0.8708814694783129 -0.49856081428120524 -0.9556039771467946 -0.700853728737405 -0.33503152890865695 0.5865415829552971 -0.19300214212267508 0.894589118408609 0.9426826726525968 0.8547591276507223 0.743965560220625 0.495012547926438 0.6839448072679077 -0.6679621316932722 0.541913465759051 0.7160294210567419 0.1256308982200749 +42 41 0.9567130710218898 -0.3646864791068869 -0.11275353568984947 -0.48097833140304136 0.9219624415968859 0.8954445163486877 -0.11424125102507143 -0.3026697075135365 0.34395329271552155 -0.41219161646990976 -0.5029609452939003 -0.14455394041860492 0.15204247677215177 0.9740072533680708 0.8253714257724536 -0.73302961406956 0.8554404936608624 0.5704925831004206 0.7351989602366245 0.664279752573516 -0.09174447149791232 -0.7787308270552795 0.961818987387147 -0.023581735582427266 -0.551275154663109 0.8776006667815888 0.23524292659429014 -0.43434616628361566 -0.8420595576574079 -0.09439933756632901 -0.21295192294002496 -0.1441642722273646 0.0002891861752263303 0.590742372743529 -0.39273395608661077 0.36917551454658426 -0.4546308838703166 0.9813236666404033 0.580983951624273 0.3768573145981948 0.8423233583285672 0.7510652934316533 0.7800052844550576 0.6981335525206762 -0.6908177612727728 0.1256964984008737 0.22096632471339306 0.405351699119872 0.6140100046374466 -0.5561552002537031 0.581023200845687 0.044418894017705934 0.4780984122860037 -0.2239761762586101 0.24532748760101852 -0.4792894302683126 0.9088446136395123 0.9785694234669784 -0.40893118661284356 -0.3344519248755735 -0.1028472732544694 -0.24394642447608983 -0.799052399313801 0.17752145369361316 -0.021309650156061455 0.8580774553249024 -0.35271162961947433 0.5364195351050818 -0.8790354206191617 -0.010523050949143853 0.11843544208517853 0.42606968641761545 -0.4372240793323925 0.5362552627273234 -0.6254966268186148 0.09619338089791052 0.8521194136633661 0.18537713123491972 -0.31599798769450715 0.008695526568743173 -0.9987933650793039 -0.49718793235156533 0.6307370661409262 0.288418950265777 0.7412997416890097 -0.8961319583869174 -0.5780602908771417 0.5673168579765637 0.46294978222803373 0.415858496778472 0.17998876891620785 -0.3590060770106702 -0.1277085171531389 0.7496649640851798 0.04469279048106034 -0.2622804040417315 +42 42 4.8131941315708655 5.209857301259227 3.9226423058601867 3.3077501662503934 6.157648523793268 4.167393122463574 2.614860302393745 3.830551690858016 3.472600819446818 5.314963217491156 4.0245483775831925 3.264007979484215 3.7061049042799126 4.199497700267253 4.8060156611066045 4.508377936800332 5.349477450514404 3.740457073121581 5.210201026531379 3.286903948174823 4.075836530122448 4.773835354666421 5.915572061850871 3.2975127748121307 2.6628418028113865 4.938223330585828 4.374507645057349 3.9954716874435166 5.85348919240055 4.760564933403408 4.633854495202593 3.2610131415471333 3.673490155887395 6.9877557731581295 4.699987295113824 4.047376647002345 4.514503055726357 5.860731513373003 4.759697659799013 3.5896116927235244 5.495552596666968 4.15923956697499 4.737194327316839 3.880143248657057 6.170078156106488 3.923236207613583 3.744273720588729 4.399569917004267 4.487123537583763 5.681914611530639 5.540441166484471 5.193646828430363 3.222510286537005 5.478466578390661 4.041889804596523 4.613527295412718 5.596811075798785 3.868333519665218 5.354104736925757 3.052873447659038 5.333781332346909 3.6778116146742432 6.743286392160743 3.5962563238699268 2.586317043167697 3.8564742218664314 6.11050294668258 5.50108074151866 5.4812472700203445 4.512356610147466 4.623419872999659 4.162164627247452 3.724582325550452 5.291279834721338 3.9654471343872224 5.067118389977448 4.529621925411755 4.003584234143367 4.572657458466998 3.874054165153571 3.6823972077386733 5.33336564984911 5.013395764628291 5.007630901497877 4.657928506732922 3.3790418742459183 5.274196090142528 5.351676000284113 4.371153056237202 3.927623659677877 3.583092198458493 4.995277182409816 3.4035930668418164 4.8816836491511735 3.877606817254009 3.340881504534221 +42 43 -0.49916971581184955 -0.8762977006994279 -0.4058091062709024 0.7413345196485766 -0.3153891679422718 -0.2711064768316147 -0.11934183199078019 0.34441093058963634 0.2138912024869679 0.8988483594218863 -0.026235356210126293 -0.5730154345696723 0.138243350308898 0.28093916860747625 0.7919879385370463 0.8262082956960284 0.669095430070396 -0.7013682966736723 0.5268803755114762 0.64514001320038 -0.5808651313870219 0.8026972564506691 0.9994506197254156 -0.24654674729973625 -0.06773777911188761 0.47548044737989104 -0.04875242514673794 0.025552671145635975 0.8340433841050643 -0.7757892043728434 -0.91896937307747 -0.1346191582768741 -0.3373005646438003 0.8552241894080099 0.8436703531915781 0.6841312299268996 -0.09710247774163716 -0.9728215661341317 -0.2795301090179032 0.7457201122300612 -0.8413853761865786 0.38314836420553156 0.14639592923903488 -0.21905703304095647 -0.8394780594160205 0.37109727648238056 -0.4253492493696225 0.7310865071697379 -0.8834801308205307 0.5346113600639644 -0.769746134300981 -0.5110726859452113 -0.28183637987967747 -0.3794304855103834 0.8725286552051559 0.874879688803837 -0.701514403445149 -0.05428959828711388 -0.10773216100552707 0.4046484338085352 -0.13066179789022092 0.1221641710101482 0.7186733109342625 -0.5261208053634696 -0.027547999059893913 -0.34571959211071346 -0.08825997822959941 0.9818819196357362 -0.9818060665812431 -0.5633687725445631 -0.029071406079086204 -0.65021087042084 0.3409579957493385 -0.23899981497252343 -0.40359695485045144 -0.6921110144797689 0.13737203293494948 -0.7397690016722973 0.3557796765414585 0.9737567032092969 0.3805054768564544 -0.9232572806391266 0.40242815547103805 -0.7136685469041497 -0.27383206173337293 0.13306060288616228 -0.6665203843729803 0.9084785130474822 -0.24488394408891812 -0.3113589603838418 -0.8885908489739043 0.19356948004923358 0.11551762873325622 -0.10202323052187512 0.3621119488708988 -0.31819672702851665 +42 61 -0.17905588621874724 -0.7466065868726266 0.6433765899899648 -0.30642179061589614 -0.8821920246478445 -0.7040512144195052 0.5261201252545002 -0.1491784571714554 -0.9437972445112068 -0.7186702469780508 -0.9094758622482708 -0.08995594479082736 0.6407292216716312 0.7021084367879262 0.027089383183411586 0.4577800615668508 0.049349092834577224 0.29365560731753715 -0.12711669996103625 0.17752130165074398 -0.9615867206897408 0.368886546225057 0.9881870276156508 0.6284857781357964 0.30486433215071274 -0.2790821597184783 0.9279133479330541 0.5908303075082022 0.12295052534793971 -0.9009895302635018 -0.12112920055344123 -0.7768335208788075 -0.5702770378278286 0.5598196789969287 -0.7021747846801631 0.18470578117100733 -0.5581925817207443 0.5533869468049 0.5331905355551136 0.8039884742100827 0.8435940217774673 0.33441961256271413 0.13315077024923205 0.17389560239311086 -0.8022812790839455 0.22378232633793171 0.9427503684048288 -0.9232356822157133 0.5037689966586936 -0.39745622420011495 0.3229954065655467 0.25836001445877055 0.43771365479046986 0.4368798703285566 -0.535180719410898 0.10176382353462876 0.27188633563730513 0.3398384934088403 0.9342240275314773 0.18493919138307446 -0.9524789681599293 0.9338745237238144 -0.9042942038757222 -0.9386786824722471 0.5090492194237619 -0.19889336029579008 -0.5255310239662585 0.9361222998478038 0.0336410687085098 0.23949936798426608 0.16398962780995263 -0.5574542359854131 0.7444883370584063 0.9789321697636781 0.419310775336587 -0.7850739306645476 0.6740260991671876 -0.9583875714279948 0.9403355952099268 0.6384684089017736 0.05418441954321218 0.6185502473145943 0.7500626729866446 0.40607062494192503 -0.26100972561731295 0.2422065131395943 0.9085108088855225 0.6201812791993679 0.3975380205293839 -0.43625890142613977 -0.5395128467282435 -0.6359145547931249 -0.20364029525619598 0.9347936465368598 0.6364816382292147 0.4804746645668059 +42 62 -0.44043416015726855 -0.03197339263681598 -0.8818311487243817 -0.26876739808163763 0.43784441192547874 -0.8420234877310333 0.04666905301953661 -0.09698131682491584 0.14664024062639158 -0.7059456953535059 0.20780920010421045 0.46537868493659285 -0.27463130583018147 -0.4979049423625235 -0.014400056866998412 0.9720019209002175 0.5048799111041675 0.24538356037894826 -0.4811728778719395 0.2628256503893662 -0.012939044936007615 0.39888252310659 0.6488794385636563 -0.1731777758988633 -0.63995447572753 -0.3015127802419324 -0.25909843406602207 -0.8876244264838968 0.487259308357447 0.6513325182641954 -0.3036281581812972 -0.7209732943564477 -0.41450957810481337 -0.5903654512562995 0.19304428850364297 0.24556369998322514 -0.5188583857158633 0.46357346744874084 0.7834086408894987 -0.09642283185206835 -0.6815153865362145 0.7722115049908507 -0.5853252111398148 -0.5499891626827309 -0.0645719805817564 0.9897720149299332 0.2814952597888132 -0.822293971521026 -0.2133670821905369 -0.6747488965755066 -0.2839066792422704 -0.19578804347541512 0.19226538496379453 0.7239592088394642 0.7716399806384244 -0.1719063575956139 -0.9150607489392926 0.06906890853676417 0.7659394813107803 0.44251117567591414 0.7828752669151366 0.5174672828578222 -0.8457149789032059 0.07481389772440639 0.052316022794253625 -0.35076337580392813 0.8301626338629327 -0.40689293705412743 0.5028653497967963 -0.7950034990878128 -0.3321331344129044 0.626968476562763 -0.6667197078849654 -0.5104315079782136 -0.6505119806113764 0.01882524835547117 0.3217794982594424 0.500669529707658 0.43137131482551827 -0.32356432435586613 0.22421485669446617 -0.281088084066174 -0.14451330807137452 -0.7538872059003827 -0.5731316450232058 0.6115350242006425 0.05121302036897979 -0.09062554469827888 0.1539012077511721 -0.09488041136302416 0.8453163754784327 -0.7046884811914373 0.3838962203374092 -0.5371559916595943 0.6752902647128209 0.10476843882318909 +42 63 -0.3409399038862788 0.5884367557125523 -0.12455380969012331 -0.20295614319892974 -0.9953103799721377 0.14654983197383897 0.6475367788921171 0.6653653176492442 -0.6482473717642476 -0.8887944893367505 0.731380602201237 0.8664925025860093 -0.9738160427421474 0.022880113696872595 0.665286736353206 -0.39948671903742405 0.5958816119471877 0.7526494500127987 0.5485437332946397 -0.32396360252784406 -0.7234866862733944 -0.5815577468418704 0.21315674414939 0.677625417757524 -0.00012563862302195083 0.35498630778644547 -0.24015592080263004 0.5139346003246865 0.2863917635038735 0.11746641824061 0.9429718562454861 -0.1874551525325543 -0.3683105774052762 0.9574276274137499 -0.530747057090833 0.868714655370247 -0.4334652708852387 0.7355963865325446 0.45007638255653126 -0.39284678167680553 0.25195098860458653 -0.13625562780260725 -0.6476900653055251 0.8503069185666441 -0.933491517386547 -0.946033099412873 -0.44609387741675355 0.2698159325974949 -0.6264316647655728 0.5838443093826424 -0.7106977063899362 0.8421480750314998 0.08136903190579448 0.9947680595012021 0.35919718012766055 -0.6954472584143458 -0.7140192576250957 0.3227062288934168 0.4901264219983872 0.04294518923566226 -0.44304945330369305 -0.7452762475337817 0.9402677601354661 0.0346808621443504 -0.33240123316658887 0.30247664120674345 -0.7443927915889728 0.2919500709154432 -0.26861869075160105 -0.31881749487277755 0.9930213271426505 -0.17081018037621987 0.16829144997158774 -0.5480346804844809 -0.6089174507282036 -0.6274435127748417 0.060158673898531356 0.2912647829947106 0.5308007373048556 0.39743784062478427 0.3250990883725009 -0.37941738836943206 -0.6049229177316098 0.799505461626999 0.16929699629393902 0.2144916759534723 -0.9831717250333172 0.7429959747066013 -0.5475574996178989 -0.6702022772405187 -0.036786413942716756 0.5670419129257496 -0.3318159132008125 -0.5041781979081652 -0.14648265852241238 0.7166085401062603 +43 22 -0.38142234548810006 0.2659218986388636 0.4706261019865723 0.4660897498714527 0.9124489010606951 0.5917840730008699 0.6015567963450206 0.4966148564874311 -0.993885709264579 0.3095201512211625 0.3397128792303634 0.7552875823125427 0.142306876070597 -0.6378476662058437 -0.14088669012590427 -0.3062419656607387 0.3997988522451319 -0.6863379260040199 -0.6891469484663095 0.6496506514204063 0.24156818202395236 0.6817012425864435 0.38613858502627707 -0.9186751284107872 0.23443791811184123 0.7845951336166173 0.6698389218626817 0.588390608089242 0.14619293923823573 -0.4080047050597104 -0.6343279495658025 0.17876836463462786 -0.4681735497959367 -0.5252585229583853 -0.35534320503738637 0.5449638193879711 0.3845882097766109 -0.15900683069839183 -0.379325653898247 0.5500195476138252 0.5769018959416548 0.12581753256354222 0.21511699941506213 0.09196026865807272 0.7593862651456267 0.037085680738790705 -0.9057011838960387 0.37749154698064746 -0.8037277666743272 -0.4713438531756773 0.2014504425239072 0.005878917844236886 0.9006604963383813 -0.8508144060387226 -0.5324791975485432 0.7761274800036357 -0.2711419254930174 -0.6244805543595184 0.3727281313475137 0.6689083179331896 -0.9846363078659426 0.1874239838047329 0.5696904709767354 0.33925283133761086 0.44582149790147363 0.04428155211479279 -0.8841688758569353 -0.19616500956100502 0.9960554355472664 -0.2861357844220993 0.7533488323659239 -0.8463008110475321 -0.06693405171570332 -0.700523488823992 -0.339432504390881 0.4982927441432312 0.21831851657759893 0.5796935011535973 -0.8939736582915923 -0.3615581473932101 0.8014876578894166 -0.4505574526856557 0.8911365303606162 0.5908804344524385 -0.4920901308386103 -0.4974081076843717 -0.3314030765054703 -0.5294273929863746 -0.6905105834811882 -0.8873631754836138 0.9563215521736297 0.46530231460974725 0.4193151532777324 0.9259112603676141 0.8102258175938872 -0.9927969149207978 +43 23 0.8668130509742296 -0.9177457304762193 -0.7702796564075389 -0.3188731784312204 0.32027166242109284 0.5250780955775862 -0.9978486035688161 0.36271459662672 0.463588883281554 -0.2542409769174363 0.6929270159067149 0.9248010984913662 0.8142804049271326 0.7920808564702397 0.5181194064695966 -0.5037856115159756 0.49900365061422614 0.5248237291882718 0.7472934538456883 -0.9084677771931062 0.9922052855240608 -0.42343558529607406 0.7049794916756689 -0.4354984954313226 0.2239396318614899 -0.40317858521257377 0.7935138299896907 -0.6949720516486892 -0.6807957907296887 -0.837230076565628 -0.5011123526404957 -0.789456657515168 0.031471221806630645 -0.8774376271729325 0.2732410891892485 -0.841754529005194 -0.1809476942794519 0.8865245872320033 0.3197820300629619 0.4494725897842662 -0.4357368044631744 0.2350475498280966 0.9055981299859013 -0.6897464197923353 0.154354534596699 0.62841098210096 -0.8789133183497011 0.38544118275211336 -0.8471599498443692 -0.32537792216847805 -0.5695845246395985 -0.590261995864356 0.18655476739966304 -0.693625958708709 0.5967665177916757 0.363760102108857 0.052783165221871764 -0.3447849114444539 0.8487811583147791 -0.058141237149112124 0.5837043389313497 0.8793484606517243 0.1108749025972362 0.9787137549045617 0.9170074295763424 -0.8268187867743801 0.1536886576503449 -0.06420927706661939 -0.06097798749762151 -0.9653184970105362 0.6522657660007984 -0.6221856651813671 -0.6858689371658413 -0.846678882817999 0.13271340687331734 -0.33116546932242064 -0.2284066341602986 0.1406077680579172 -0.15675039843468452 -0.23449522837497971 0.7594316965813415 -0.14449354160884886 -0.5649806806101778 0.25378816039739793 -0.23191341401666787 -0.6714793611366496 0.8071792982791781 0.4090773081833845 0.5607330972926317 0.03507986607237146 0.2820010284753749 -0.1015345082387169 0.5971493686821392 0.7865584867464788 -0.9568834457461852 0.5983719459239463 +43 24 -0.7997172177958183 -0.2599966323042213 -0.3606365840533403 -0.7818307027790372 -0.3914516369322729 -0.5193093245402061 0.8194896394461042 -0.578385693060208 -0.1400844425871417 -0.5678891271195494 0.243601310547106 0.17414006382284097 -0.3007385220276133 -0.4200023446490855 0.4376444511897979 -0.8860974784959281 0.03752141239649287 -0.0026105063982768684 0.04529336415037544 0.37787150035832595 0.4796257540713029 -0.3487208017850618 -0.9368301599136843 0.7351404269934798 0.6563802392001081 -0.42394409216199613 -0.937027830511524 0.29717318950489346 0.5232865483256839 -0.31346120447773296 0.39597548101244406 -0.4320167538520334 -0.5515979955743924 -0.7624169868112747 0.5309087771771781 0.27369706700068974 0.023342409570655143 0.2090655724510435 0.38526615665667263 -0.7879362051967675 -0.8122044801665305 0.9623325384302304 0.3825444598385592 -0.29527916314920843 -0.4709662024026424 -0.8694589532308032 0.26353707840861706 0.7919168484246268 0.11520323887874051 0.3856570034681792 -0.14245317752223996 -0.1620412555320958 -0.31159670861861066 0.54119034748912 -0.8141638530932189 0.6282631689561082 0.36479138966137703 0.27761923120031007 0.3066113228434699 -0.07161509425832668 0.45685684329519605 -0.813648173612491 -0.8751853119367281 -0.056714725668513655 0.17346586733699332 0.9533645146176832 -0.9985048482264822 -0.31091126583936135 -0.7280876661396245 0.9546145261458987 0.2716058856565102 -0.8514415172154928 0.8715747119472201 0.38562874801144353 0.26547483941506234 -0.9232224093875783 0.8354354289390373 -0.6972361573012384 -0.712019707043867 -0.9084420259731205 0.4086699971988932 -0.42245182853304075 -0.7471964353159248 -0.4862228159313178 -0.5463807265098173 0.38138823739476946 -0.06103581637330291 0.8218555881376255 -0.9425530873796586 -0.25409687810983117 0.5112521171319246 -0.6926365353621804 0.930630709783377 -0.06794896720174326 0.6802192965890668 0.02312450663370824 +43 42 -0.49916971581184955 -0.8762977006994279 -0.4058091062709024 0.7413345196485766 -0.3153891679422718 -0.2711064768316147 -0.11934183199078019 0.34441093058963634 0.2138912024869679 0.8988483594218863 -0.026235356210126293 -0.5730154345696723 0.138243350308898 0.28093916860747625 0.7919879385370463 0.8262082956960284 0.669095430070396 -0.7013682966736723 0.5268803755114762 0.64514001320038 -0.5808651313870219 0.8026972564506691 0.9994506197254156 -0.24654674729973625 -0.06773777911188761 0.47548044737989104 -0.04875242514673794 0.025552671145635975 0.8340433841050643 -0.7757892043728434 -0.91896937307747 -0.1346191582768741 -0.3373005646438003 0.8552241894080099 0.8436703531915781 0.6841312299268996 -0.09710247774163716 -0.9728215661341317 -0.2795301090179032 0.7457201122300612 -0.8413853761865786 0.38314836420553156 0.14639592923903488 -0.21905703304095647 -0.8394780594160205 0.37109727648238056 -0.4253492493696225 0.7310865071697379 -0.8834801308205307 0.5346113600639644 -0.769746134300981 -0.5110726859452113 -0.28183637987967747 -0.3794304855103834 0.8725286552051559 0.874879688803837 -0.701514403445149 -0.05428959828711388 -0.10773216100552707 0.4046484338085352 -0.13066179789022092 0.1221641710101482 0.7186733109342625 -0.5261208053634696 -0.027547999059893913 -0.34571959211071346 -0.08825997822959941 0.9818819196357362 -0.9818060665812431 -0.5633687725445631 -0.029071406079086204 -0.65021087042084 0.3409579957493385 -0.23899981497252343 -0.40359695485045144 -0.6921110144797689 0.13737203293494948 -0.7397690016722973 0.3557796765414585 0.9737567032092969 0.3805054768564544 -0.9232572806391266 0.40242815547103805 -0.7136685469041497 -0.27383206173337293 0.13306060288616228 -0.6665203843729803 0.9084785130474822 -0.24488394408891812 -0.3113589603838418 -0.8885908489739043 0.19356948004923358 0.11551762873325622 -0.10202323052187512 0.3621119488708988 -0.31819672702851665 +43 43 5.876162959610887 5.856537625254308 4.446766356685442 6.0649619407713145 5.005040241407928 4.27280832326617 5.094042210399819 4.7869647625888225 4.911257097332623 4.445713854434723 4.478169090568218 3.3208000206495885 3.8094707410821216 4.92194773890609 4.33295299311393 5.717514776757 3.364422500626171 4.294947441993503 4.556148537507143 5.6739018651977515 4.513047534904968 5.299102824704004 5.696182277172778 4.301832375127503 4.5670260567623595 4.309398805334719 5.123934424502284 4.514171116618969 6.176679123250398 5.211175517682503 4.285066384926384 3.160977094453963 5.486955493892923 5.838763126390592 3.9845961471202256 4.36079025381117 3.3999769598827996 4.035161433200782 4.303124784491468 4.430656541213791 4.3515058708013985 3.1976605008075696 3.403616354257609 3.453303713737432 3.729545458160086 5.183349674439691 4.940696086278248 4.995704808027929 4.882300811998859 4.095308107600059 4.533778564499582 2.8705546263727206 4.520302882300188 4.810696559103267 5.802997701867788 4.072385796273668 4.5640517822716244 3.6820874705718323 2.7363603442151456 4.035123912710275 3.3359250837007752 3.7135533874247413 4.813862481542252 4.58704856879299 4.328117496225935 3.58652150299027 4.461651030015761 4.185843425069828 5.0072761432500785 6.2995791408675705 3.8650072539103943 3.899894412100093 4.016270989191866 6.255742598585897 3.8996754911759828 4.616994907619523 5.199490827765528 5.5295112552193615 4.274100044033286 3.9253431337519764 4.676160541953132 4.90756971687172 3.9164135410818903 3.6158418831012438 3.8946930374955535 3.733371848005289 4.486148555982738 5.164433066993535 4.567725139794646 3.5043846273173096 4.931011061434237 3.0025176635258948 3.5394620576288514 3.871338935561991 6.321087708739016 4.599542517648745 +43 44 0.3457354961135193 0.9388105487987719 -0.4237175744170154 0.6333229753316787 -0.4723197395123415 -0.09039131298031666 0.6905055120134715 -0.6668536030135042 -0.7675116262237522 -0.007044698805314775 0.7731577203211477 -0.1510301556354554 -0.07884216147150025 -0.6601759479496074 -0.9811666951425138 0.9715453956104585 0.0882003547819683 0.8436712784187614 -0.105327156986603 -0.9407646930790035 0.8997976108695245 -0.6569784987011449 0.438820569949967 -0.8885178526626378 -0.9949171456868768 -0.44506696275297264 -0.4861936149554471 0.8137306700631981 0.7997653794870594 -0.013598238916625816 0.08100954711228292 0.7591514750822299 -0.7294833460967938 -0.10939041709559882 0.6916224410151721 0.46089906093526545 0.47785660790398454 -0.12224891167506491 0.028127203999687156 0.378612354279124 0.08512069365426034 0.13181685636915863 -0.9914970310833255 -0.29089763453765505 0.33031773180834967 -0.33741439583371124 0.42779015720286595 0.5015109717342976 -0.670069990811841 0.24792776190761012 -0.381089981707909 -0.37975816127044837 -0.8494851923242908 0.14408725466884098 -0.891238835918803 -0.3438669848335234 -0.5154285416920734 0.9661360005690074 -0.09851959594682103 -0.7900094479386295 -0.046404793761293694 -0.06860026777626227 -0.38265840460313827 -0.2859176026236454 0.7469132288688456 -0.06994485920723181 -0.3493891218836547 0.22985446085418526 -0.7976973401389513 0.5180533943995165 0.11180450936229613 0.21354869160825962 0.8959421845865634 -0.9671242310764805 0.9009203383220148 0.640358872719853 0.6783625753819855 -0.8998501120450577 0.8231942773901035 -0.26634833942695724 -0.9177310036470145 -0.494484901298307 -0.0697057102030274 0.5221969799020532 0.6426204242836555 -0.7250224834317254 -0.6246054782822017 -0.49799964528963536 -0.7814335512255939 -0.8021742150707687 -0.4935990589059678 -0.05915394648943262 0.37162862903145855 -0.1840656638348781 -0.7904268263401641 0.8233918218954568 +43 62 0.9238278218384537 0.6808698945862814 0.038851984807209305 0.7509259905823109 -0.47156757015330397 0.4949415483839681 -0.3240631461964989 -0.029075319692186907 -0.4612293432318495 -0.8046999412721125 0.959126706535451 -0.5032407837599067 -0.994819493859004 0.27989880270677525 -0.10220233739430218 -0.11916474631009177 -0.7826066934989562 0.32214069828659464 0.043678091278882114 -0.7838581005716123 0.859047134090156 -0.5386578079134805 0.6371040044696761 -0.248206222847845 0.7132975516207334 -0.6130744851229868 -0.5422924776379128 -0.8904786016228763 0.8396612351608901 -0.9856561479525849 0.24809582766493277 0.16521330270667156 0.8786012621658428 0.7975746569636493 0.4399864184041715 0.12577851359402148 0.770049312894455 0.643221153788563 0.8555402714584297 0.8259387668464626 -0.12818637045987846 0.06956800458204548 0.4184814823777374 -0.7010497627796239 -0.6823982418694206 0.9432853387357014 0.23707366047940703 -0.39018136519722324 0.051500573038466335 0.5853610059609513 0.22883219197479643 0.14423699750519114 0.5522261104229982 -0.17643300010051033 -0.3956989038853651 -0.19153132607691203 0.949731661259984 -0.12655149330758753 0.08899222033233611 -0.006750756379900524 -0.7716871480584575 0.0413188298640208 -0.6418716567823985 -0.7806867343253485 0.08482942292037166 -0.04431964546758205 -0.31815442902940094 0.8413294316111453 -0.6363746002901871 0.868557618799211 0.8656397208528628 0.23283340447791723 -0.015683831130455017 0.5054253690729038 0.06731823536898363 0.5746179995351504 0.3994939247676008 0.5100968972351794 0.5129548675472997 -0.09672187080139771 0.18520887774656614 -0.8021840485688316 -0.06897586965564928 0.035659188206745185 -0.1918405896468216 0.7062808252057466 0.6926934238211653 0.3772822717792419 0.10676363668553157 -0.14461442617038456 -0.6249230007760807 -0.2620334461458489 -0.3596431839730114 -0.12084963716942076 -0.999397127175867 0.34838681979534525 +43 63 -0.8272703678196609 0.7776108815850227 -0.6561573784280763 -0.9294343599952808 -0.7607235662325342 -0.04217979534405991 0.5254175534625052 0.774990195883474 0.6975710566889257 0.7437296579480357 -0.46863487041927554 0.14803375033390065 0.29974031875173135 0.7462378570728256 -0.10938341762284742 0.8767600550373407 -0.09005123986268693 -0.02440484645868568 0.8389899650379138 0.5668007681295739 -0.22516294870751286 -0.618088959221152 0.7128419515896485 -0.1438847209934313 -0.8983882949936972 0.10073804774663864 -0.8753840761383542 0.23593997157318847 -0.9583247907622279 -0.8127439792462283 0.3028009354796568 0.08175242208425981 -0.932796688747034 -0.9819424659657703 0.5643473605683833 -0.2581291258222189 0.43006358923477905 -0.47109481096461225 -0.3974367877715843 0.3067030689023962 -0.21184567892463346 -0.3679344363628012 0.2007449058469819 0.25133006043056927 0.20380453468713666 0.7394202144494846 0.14478424121805888 0.9957662055744674 -0.4068617486794186 0.9778920763800365 -0.8070599716917695 0.565590315814285 -0.5820232736073998 -0.5151282992862967 -0.26039430726758206 0.050421217082227354 0.7130029698213776 -0.17483722977658567 0.12707244503364912 -0.3581502048760834 0.31537250685887974 0.9202728672030405 -0.04533946175226444 -0.6882736157149134 -0.5740633248729299 0.8038015773169558 0.8899744954704234 0.3762487525883209 0.5435371211762996 -0.817069551784364 -0.3442699881696667 0.14998923952711007 -0.3013110504755936 0.7960180216135944 0.9334939480764854 -0.17947643387351508 0.8916357993704778 -0.5232808141743757 -0.4002173082017286 -0.7465045122149432 0.018389931183476982 -0.8149931471322922 0.5515964837266834 -0.5353583987588173 0.9653613955833775 0.08069170812073301 0.3824577235487745 -0.6730096127478673 -0.13877349232486091 0.39610040952905745 0.06444437995925067 0.24369224198172224 0.5619348445905026 -0.894432149816337 0.7577720157091852 -0.7990523532372444 +43 64 -0.5599328857247154 -0.9404778359745447 0.992451713235512 -0.498403655712061 -0.7654664680838599 0.7906425323087902 -0.7644801279908482 -0.7152638119157428 0.5578633285753589 0.8041940544785844 0.06680216461668653 0.07652503427979918 -0.5705794151680359 0.6833245685578999 0.9231125313850284 0.284283661753554 -0.6603870652104451 -0.9571750142375344 0.5682614297438695 0.3524449367014737 0.2148718090841919 -0.8079949558431101 0.5005189465078539 -0.10074169687840606 -0.5703841561619165 -0.6550301511827694 0.32324812012528037 -0.1449018880651114 0.63702655810034 0.07277173637450773 0.6055313799189885 0.281387951552178 0.8214390730366026 0.4443617427789899 0.2514024787726461 0.3300385360419267 0.1677661898485725 -0.3235450453857325 0.9231193958902166 -0.25261281862345797 0.3592855109478885 0.03459590884930486 -0.13516684371147614 0.032268204767677444 0.16477563894583902 0.6904978589205846 -0.7011560784921982 0.6758430840813099 -0.3343598130584595 0.3790169333382647 -0.5155045331784158 -0.28821215766612207 -0.2657333094299079 -0.7880347314822198 0.48646596506480266 0.29267653200218513 -0.6009285572758465 0.8199786343416413 0.6822728966094562 -0.8262901804347906 -0.0110405189404843 0.5802587011788047 0.7671284464805381 -0.32474347245566904 -0.910723836455509 -0.21998469929781916 0.47859592726538036 -0.5241339773500164 0.03298685708710014 0.877049746304718 0.0016859466300866988 -0.30562647672460086 -0.1980737399566399 -0.8833787791729022 -0.2646384374406088 0.12240089523445352 -0.9824969674619184 0.5959885758661252 0.18394278006626275 0.09900437935576711 -0.2548310531925113 0.39435088399345863 0.07806945375220531 -0.47055342001851885 0.24172560232416251 0.062645841710953 0.40148359644501963 -0.23629971745576972 -0.34624755868099166 -0.5910866914027242 -0.5876411349141644 -0.5808291928831331 -0.1657320333532557 0.37196275228520936 0.4949278596714708 -0.006958670408016676 +44 23 0.9538661133820578 0.13349244370163982 0.883841299964357 -0.9424840404953632 0.8142882380852448 0.2641271018670617 -0.4696854711812162 0.1702322657817925 0.7805559847832406 -0.26062270089178274 0.6293885990273338 0.6534761420254265 0.33424096985091123 0.5567999155350727 0.7406520456133234 -0.7775862787525738 0.8266791565059779 -0.2623407619908895 -0.5508904483972632 -0.5154275923908309 -0.2081495761391876 0.7912000865110775 0.0379506487846637 -0.04724195301060785 -0.5695771245484871 0.2529067134380505 0.27330470641012616 0.587363399011547 -0.9966767288682261 0.5047023228491454 0.9930287707178995 0.34841082901764064 -0.020614951448129748 -0.9130527067139413 0.8654580871234372 -0.46383394916524656 -0.844745486533304 -0.5184040520698732 -0.07107491881100447 0.5375804771534334 0.21222104090743898 0.5669138012976971 -0.6711385482377166 0.25385307736822393 0.9085817185956631 -0.3929548820063886 -0.23803969824553817 -0.5486796742013103 0.9077630673279349 -0.07214559247014041 0.04781403694532882 0.3974857289431597 0.4123446801898554 0.7330657339857456 -0.5925555954375075 -0.9251943014111799 -0.06500107051617943 -0.8026979257135722 -0.19664224994372836 0.9880637813001603 -0.47535892600604357 0.5330600229770255 0.7643144182112653 -0.001097584550220132 0.3466676848869461 0.3628660006915685 -0.5218223870666192 -0.6477429444857037 -0.3215421143853683 0.22564932640510738 0.03683051708452445 0.1471165195132722 0.7438846148600797 -0.9113735078501815 -0.6687362311499561 0.7791862372903824 0.8677805496717106 0.4528951737245426 0.5741214982596969 -0.3545341555251158 -0.1158417631667128 -0.3407870203066736 0.26530662113545267 0.35244484617834315 0.9949004477418129 -0.09999062167128403 0.517445498406889 -0.6719483721958359 -0.4122437658227953 0.8428704486552345 -0.21312216442140008 -0.7992971115826069 -0.3463487990909966 0.2329319347767893 0.6941467931759773 0.4964458516490402 +44 24 -0.4347110263627536 0.518993076663659 -0.9284028672442599 -0.9080052747765066 -0.6091043147302739 0.687630727894571 0.8880149065980867 -0.5775867287878458 -0.3163462551718046 -0.8742472433052488 0.7370148537796315 -0.033115592182999753 0.443226209285871 -0.98030300774213 -0.42144330604653324 -0.01878698594371997 0.021851346998591037 -0.8206157360719699 0.5051215216513723 0.3888842261975538 -0.15105462663917657 -0.5975369423921193 0.22247992316982979 -0.6565938496719927 0.5375099249861401 -0.13513233893219967 -0.9371477770403867 -0.4698319752709481 0.8629284337744703 0.5057888708038463 0.6893097398586798 -0.7165438328231541 0.8173571275864744 0.8680052231130635 0.8125870854814599 -0.4575919353452014 0.2771181049893574 0.1508095418250357 0.2699681786713972 -0.47776265932436046 -0.5814613030659868 -0.6191708924260206 -0.8881544112528093 -0.5438747464871527 -0.5515689210284551 0.23370587222587313 -0.35850710731306346 -0.9593012638481269 0.6534246563227972 0.04071980070619263 0.3010569122880926 0.8644143390829151 0.08605992415529684 -0.42410983599637553 -0.8056434918970594 0.6051658612745607 0.7154883184873864 -0.009799567201832504 0.7260570882672515 0.21639156459946807 0.8275871481713906 -0.9640241275064614 -0.9378911162709527 -0.7437350551546962 0.15640183158775023 0.8551545334400257 0.05572483227527947 0.9547296922308806 0.31102921904853864 -0.6140179660595417 0.023069102032688527 0.9870609689889194 0.1708473392912664 -0.794875025760063 0.2657095212109235 -0.9804355902796087 0.34197060688348513 -0.7414221383003476 0.11583644566460571 0.7244345327330988 0.8587237876905625 -0.8754134649737983 -0.3500627957711362 0.7256983188590498 0.05246684501194743 -0.12673149240589665 -0.7878789619491944 0.6358571240878836 0.024195007664182144 -0.3850794084304574 0.35228067609978764 -0.29482395198656164 -0.4253904359491547 0.953565931499883 -0.9206230296787805 0.21912772119361046 +44 25 0.2203004894807994 0.6096837156434851 -0.0851306945670709 0.5666239247438256 -0.5776231673450201 0.4688809372547491 0.7897613856374988 -0.263999128685072 0.23814959811958425 -0.2327754286265158 0.2979050927152185 -0.7665946818536413 -0.34379246342385916 0.12431067866328682 -0.8841766943784726 0.33277066460836324 -0.726227754507109 -0.819476630412828 -0.0255208319851441 -0.7525384882571249 0.9497066153476006 0.22379008523695765 0.4549279654753038 0.5920498995656645 0.9321739884217068 0.6451256539957053 -0.6020701000596189 0.26809320442244555 -0.5741467448058464 -0.29165106805050156 -0.05450338973174973 -0.788842969785541 0.9403890545249736 0.204702954217429 -0.9000363457396445 0.46856613010978476 -0.5710753954556407 -0.951133304626474 -0.12677465454369785 0.5959381707356814 0.619908838884595 -0.5025919770741001 0.34604984862653465 -0.6479491958705859 0.39349631003035923 0.08459878915717334 -0.03177013865410894 -0.6833017102813417 0.5312673406605297 0.5380223739827779 0.0018498470845822457 0.28444609413907274 -0.8247514466734047 -0.5145160440542631 0.5419715278861268 -0.7037311520105316 -0.7667449179276273 0.13015695710583342 -0.008598329892476775 -0.1631574546706136 0.7746306457855114 0.11425777117434244 -0.9277135338088671 0.9209902278405933 0.21286963738800502 0.7299756039688148 -0.632070234716936 -0.14870331704815865 0.19465865724061815 -0.9747528988784255 0.42213020513304533 -0.08447044623822197 -0.7122724062857515 0.6600851966730361 0.9027497053230888 0.09931107215362589 -0.5890716710288755 0.3443185719082118 -0.11751472663181706 -0.9595558520035461 -0.5401444349337228 0.31274122708763374 0.7039657175972407 -0.713654572050155 -0.11075327580580319 0.34648231558573883 -0.03294007665353904 0.45806327254641954 -0.49324161567179114 -0.2484756191321833 -0.6502627014084637 0.7288118967420361 0.2206475331388913 0.4074595633266136 -0.2938254141134258 0.601740382848188 +44 43 0.3457354961135193 0.9388105487987719 -0.4237175744170154 0.6333229753316787 -0.4723197395123415 -0.09039131298031666 0.6905055120134715 -0.6668536030135042 -0.7675116262237522 -0.007044698805314775 0.7731577203211477 -0.1510301556354554 -0.07884216147150025 -0.6601759479496074 -0.9811666951425138 0.9715453956104585 0.0882003547819683 0.8436712784187614 -0.105327156986603 -0.9407646930790035 0.8997976108695245 -0.6569784987011449 0.438820569949967 -0.8885178526626378 -0.9949171456868768 -0.44506696275297264 -0.4861936149554471 0.8137306700631981 0.7997653794870594 -0.013598238916625816 0.08100954711228292 0.7591514750822299 -0.7294833460967938 -0.10939041709559882 0.6916224410151721 0.46089906093526545 0.47785660790398454 -0.12224891167506491 0.028127203999687156 0.378612354279124 0.08512069365426034 0.13181685636915863 -0.9914970310833255 -0.29089763453765505 0.33031773180834967 -0.33741439583371124 0.42779015720286595 0.5015109717342976 -0.670069990811841 0.24792776190761012 -0.381089981707909 -0.37975816127044837 -0.8494851923242908 0.14408725466884098 -0.891238835918803 -0.3438669848335234 -0.5154285416920734 0.9661360005690074 -0.09851959594682103 -0.7900094479386295 -0.046404793761293694 -0.06860026777626227 -0.38265840460313827 -0.2859176026236454 0.7469132288688456 -0.06994485920723181 -0.3493891218836547 0.22985446085418526 -0.7976973401389513 0.5180533943995165 0.11180450936229613 0.21354869160825962 0.8959421845865634 -0.9671242310764805 0.9009203383220148 0.640358872719853 0.6783625753819855 -0.8998501120450577 0.8231942773901035 -0.26634833942695724 -0.9177310036470145 -0.494484901298307 -0.0697057102030274 0.5221969799020532 0.6426204242836555 -0.7250224834317254 -0.6246054782822017 -0.49799964528963536 -0.7814335512255939 -0.8021742150707687 -0.4935990589059678 -0.05915394648943262 0.37162862903145855 -0.1840656638348781 -0.7904268263401641 0.8233918218954568 +44 44 4.577854294833166 4.793650651201066 4.419420050826949 4.817492064198829 4.8632108347155985 3.7952177968411602 6.620803623923436 5.045265120215992 4.747752581446237 3.33306659522042 4.473237982125892 4.039646970755295 3.9147138883300263 5.586675226896548 6.23420657534565 3.6343237899766367 3.6866221598751534 5.8580035591071615 3.783749611062322 4.8145426447014845 4.25733327181901 4.360866687811724 4.519617955416855 3.648886578327713 5.484241077903793 3.1395592878265166 4.3182715955570155 4.610180075330228 5.470653335536511 4.084378656171063 4.896520967866871 4.630085179284885 6.060066414478468 3.9987412482051514 5.579929025422246 4.82139977004533 4.625882905415999 3.6183464242762935 2.9670002363942327 4.834637222897706 4.668205407404292 5.165227823995643 5.673886757462244 4.878626693700552 5.136646897469177 3.9071943541469603 2.573069958736758 4.54805453070862 5.260886618711536 2.398342012705922 3.7313245060001536 3.68787916890135 4.121831857579493 4.1770334072467135 4.838653502511475 5.503306674756356 4.423590797979001 5.051342883181038 3.849458034784628 4.562360620088549 4.135864187684608 3.8374672380938426 5.244418721564227 3.8864598221475335 4.225764001618252 3.5738797485142757 4.339418310356134 5.288345174933797 2.34783164176175 4.70287490595465 2.9201617380977805 3.8184049766243446 5.670973302313615 5.06221769192911 4.655999033834673 5.395921992993518 5.728315006502604 4.022483700982982 4.879327368665901 6.1819500745759814 3.313118991716369 5.828287704600556 3.6641933209902593 5.619720879178989 5.0171362917506315 2.8201568464455398 3.18214715283687 5.241469390483473 3.193757268891237 4.856806214590721 4.354235170431717 4.523503399959812 3.832749107059751 4.883281880365025 6.0189825898331275 3.914106213439868 +44 45 0.7749931280058437 -0.2672536583818219 0.17577770775905854 0.8464924994029226 -0.8051490378661672 -0.7418071304163507 0.8169443656407238 0.7178690515898667 0.9186299633328483 -0.7233331771688016 -0.4871754378240516 0.0970679730298123 0.27825241496236885 -0.38250937010193997 0.9003354134835384 -0.17774844664791312 -0.5618758762182721 -0.5974757800133379 -0.25617884012847547 -0.7378971727020731 0.009446852764813718 -0.05118263362614961 -0.813803295145304 0.33808156258471445 -0.9566693080886175 0.5084575149092863 -0.8385335110243144 -0.15155897828841947 0.8573209735283083 0.966260899265396 0.7450014786602421 0.43243041637930824 -0.9414985831653062 -0.9194868597216634 -0.9122485415764383 0.22852980595182837 0.9383855612611782 0.039290540363611015 -0.9236454845993562 0.7642281460724376 0.6142586179276972 0.62234091420065 0.3956642270588666 -0.8807504896954186 0.6615188816241997 0.8985381474138869 0.351178459978986 -0.1867993809314734 0.8297351504715791 -0.16013424326247105 -0.8954961341348968 0.484095923002992 -0.3891775118127949 -0.8363179765104531 0.8263728972371323 -0.7790069078634465 -0.18718098899708968 0.48038690919278904 0.43247001511641847 -0.6658643418589889 0.4807385559316837 -0.31993652572302267 -0.2456887508676524 -0.09144981603128466 0.8420168244545752 0.340583634813151 -0.998960405624584 -0.9726843812022934 -0.4410602589071402 0.4347601909642418 -0.9691989235082856 -0.09192175509647171 0.8158543047117806 -0.2195673356147232 0.21375901956450494 0.18139604655721442 -0.3186600942808575 0.1971417648928433 0.6645679418749209 -0.893257130221845 0.8065319967501516 0.6649776845935114 -0.9570340958044841 0.5074369500198594 0.09419815848479085 -0.24047452087719257 -0.28541682725809525 -0.39799559721221445 0.25619202936608887 0.8436403592621036 0.2060981785304823 0.8598357914314456 0.4923686413275983 0.7187192032529839 0.5435577038237351 0.42440703802435475 +44 63 0.4863838261871827 0.45872999471717457 0.23051085587475906 0.06504463677914218 0.21326155338559283 0.6452563552105237 -0.8517956829477467 0.4951912390598978 0.21110942428309576 -0.38508515334072935 0.2911354390448053 -0.7286806804157351 0.34409809555287807 0.823460512243475 0.7857886231612836 0.08497017004928686 0.14153019260212596 0.8088426027364752 0.6908211735866046 -0.1887423978243037 -0.49582397294879965 0.38917274933156065 0.4896891397823018 -0.42516483608025335 -0.3210103842667793 -0.15749733445210623 0.39042661376802124 -0.10418788482579067 0.11708441284772442 0.2305617816452643 -0.657925102008047 0.04815234321498996 0.6074039195370193 -0.18296391476020846 -0.30462399581262156 0.498537335385729 -0.12489110713547391 0.09021202910266357 0.32596205929454847 0.9252923294445023 0.8380353426367766 -0.8405079102676378 0.5269012826735668 -0.3125598488678798 0.8459298317574508 -0.5910499864085967 -0.24070824356360876 0.8081626190850835 0.14441862504918057 -0.10908747402256314 0.5002909758826226 0.5747627156590425 -0.0880351496965801 -0.3369253424062615 0.044992506742320026 -0.34027606926419973 0.622085117841574 0.7525812898419844 -0.4913832157845883 -0.5690444512285917 0.001392559816623562 0.6662436859733887 -0.131358232074831 0.8672186615921671 0.8561705550812664 0.37437971303870654 -0.24263253901218484 -0.4242496123656634 -0.013779749255838913 0.921525436426891 -0.32736865534354176 -0.6893204793527363 -0.9079764842357632 -0.7650998255390637 -0.4970045367274911 -0.519852411203326 0.6366422758835932 -0.28705718613501796 0.264473716214056 0.9657916026897724 -0.0019414465154117266 0.6804118823243881 -0.3089193250560285 0.9292032395342635 0.7235468852917812 -0.21454687232395586 -0.09702710195965758 0.41295636013572357 0.048990975574012996 -0.7167797840780117 0.6214646449233339 -0.20496942400652784 -0.5381004069522901 -0.5468368354693505 0.8899731424659891 -0.026778252908795652 +44 64 -0.27637973383638625 0.8512951753728033 -0.7960160249148001 -0.030732599623682022 -0.42372377477542944 -0.24807399965808385 -0.278131398807548 0.8427457405788679 0.7514715858076202 -0.4702932781684246 0.529172019495695 0.07580106098317141 0.626226408696523 -0.9315374719622285 -0.88445280970106 -0.7469889221011603 -0.8073893106351082 -0.7824474507532919 0.2012956736769156 0.7479431126727649 -0.9898007331109224 0.573426471019546 -0.9806566333953914 -0.20931573425223982 -0.5793454035519345 -0.700276631930401 -0.33933356346844334 -0.5443715975143464 0.09095314933691467 -0.14275388686424795 -0.7120596493693514 -0.1414819224199757 0.5155603006966718 -0.026894369475273905 0.8642415001391426 -0.946290437800061 0.5101777589623324 0.5834102531182903 0.775624227815169 0.5339346726230851 -0.5289667836341283 0.4296543441157834 0.7477019803485891 0.6109000369995787 0.9505618557366455 -0.059328275450265755 -0.3708094482209885 0.4422998120778985 0.04856424239990753 0.6114872229324857 0.71166066854912 0.25860724007614944 0.3942452595584811 0.4325766834089666 0.6017374954639214 -0.2922718357173284 0.2743291554756797 0.7907252468283559 -0.868047429963112 -0.8240698583556805 -0.5409530590374132 0.1967254656181916 -0.5340973351667406 -0.7599971841713336 0.27155522771156915 -0.1092804607306821 0.9459197255392693 0.6912147132033468 0.027920045091247347 0.105293675099563 0.1743448870450448 -0.8258218456246742 -0.12783681828340066 0.1487728065788969 -0.3142298064217979 -0.2527707087268678 -0.5608506269160762 0.05829311499467016 -0.7697905411023014 0.3366097355207842 -0.06052617389162407 0.7537414407287844 0.5263010969327102 -0.18810134027433412 0.662987252299448 0.04965793956079745 -0.35403068863478193 -0.6044765487338117 0.9357416905211104 0.1513830644047216 -0.5782622587996533 0.9211994591320853 -0.18794203271040755 0.8487901844887829 -0.2190640423468555 -0.25524946751138433 +44 65 0.10183646721421313 -0.5092580549171954 0.03891571412939676 -0.28992763696915924 0.12593397808753037 -0.3317498066604656 -0.9759887446044326 -0.8619800042608121 0.22010196637602997 0.02503402023054213 -0.5382383966093114 -0.6810379817468595 -0.9570363550955105 0.15293135215969111 0.16314511117874364 -0.43834177230166516 -0.44705020423102626 -0.555618470295675 0.9980773480642875 0.16234114436548408 -0.20728955279442562 -0.40630041523146954 0.5829038272523663 0.4589743858796649 -0.36578952766551254 0.19159960179915703 0.3963927426334688 -0.9398252217339218 0.43496871792008784 0.9812056747992695 -0.4192677100359108 -0.4435703908124775 0.7077510538264156 0.4258644806793954 -0.17640380352515428 -0.4784876134447933 0.744114606010772 -0.5309195221732721 0.07649797038380646 0.588818431893877 0.8678672408805157 -0.9349861557907235 0.49255398202460876 0.589677582435383 0.139286271926921 -0.5583772281466641 0.11574581007446816 0.41274104595573835 -0.5964682821376874 0.09006535546580818 -0.533904209295522 0.1490377415960915 -0.4161248685329004 -0.13112443581614186 0.13456524025128647 0.9923684313891918 0.7806512203882485 0.14250185368271717 -0.7742166929399092 0.24241200570644095 0.7966514590893985 0.3445821180003932 0.8485584869395433 0.06310050687395874 -0.3766448778581877 -0.5559696323467143 0.5784446604826985 -0.8893987269443668 0.06440520937539729 0.700117845297771 -0.4236483459188136 0.5886778809369071 0.35591638212528487 -0.39215699646607316 0.57223068473532 -0.9726884337341173 -0.9445799806735817 0.582657877396499 0.7004216570114692 -0.8648958692293411 -0.003943832266964931 0.7352969613233953 -0.30903221407017867 0.702653511614229 0.823507537850293 0.8912856908442963 -0.4081269879769691 -0.8907579902777172 0.1752427457689063 -0.15318746444558973 0.4294566008424301 0.3239330496766035 -0.4491569419042485 -0.24462020022396835 0.7508061847141803 -0.8627467787427301 +45 24 -0.046157470835269665 -0.8572934642143806 0.8691523774712469 -0.23385136983384025 0.21149786804235227 0.8908911681651699 0.26737909834573026 -0.019388605839868234 -0.7583023787588175 0.7153465029066599 0.8570953973777258 0.5136496633786936 0.6676205076493746 0.5377236846061908 0.4117827111632686 0.5542260060549791 -0.08287465826911933 0.3580350728075554 0.4776920841338772 0.5404719356715149 0.3065884668106271 0.9125293319742152 -0.6261648141091034 0.31328503950490494 -0.9962728669800618 -0.9943125616024506 0.9692834916104183 0.5259569642988478 -0.8448320981000679 -0.8605889140209533 -0.32977539798228106 0.7534968548752268 -0.8524946778582012 -0.013138767250294281 0.6610400041303046 -0.07191666176155342 -0.006302593379775567 0.3960439483904079 0.6024330524272561 -0.5327410382383926 0.5082083596761946 0.16258318710698694 0.9333998979557758 -0.6996336132894678 0.22964122357356964 0.5533887175022667 -0.41297108921218806 0.6223585468322195 0.20538877666355493 0.8503683678370875 0.511997012347361 0.6911684800490141 -0.6356669923651295 0.48183353993153366 0.9418389676926644 0.03691470374209693 0.6495025569373378 -0.8722378986619841 0.912097459967427 0.40656044198891284 0.3624387902096582 0.8769526367887919 -0.6563035117884208 -0.8530384908266186 0.4866097595834862 0.166873180370543 -0.7873347805133706 -0.4163308168101265 0.13816674485253766 -0.296015984786151 -0.48799744276930523 -0.8067541789295882 0.2811724160748581 0.908901573144046 0.5042181322590489 0.6480688175358285 -0.5484349720722699 0.05838878291384075 0.8433512669800227 -0.09566655997669016 0.22564794793446596 -0.44639765990650115 0.2775578708930724 -0.0006149948819571538 -0.29832061199799687 -0.8714218587995424 0.6632942903175787 -0.4854960479780588 0.8454045857781365 0.08963998475046342 -0.7782466853698751 -0.44426921792886853 0.652452848392675 -0.8288005007016415 -0.6963754489868714 0.6958306409300679 +45 25 0.22099765891594925 0.2623994733057362 -0.3662874727900476 0.7369123577492873 0.09154003095262242 -0.21758468816334875 -0.7659532990476561 -0.4415828982698502 0.2287354642941728 0.36232362120496564 0.817509595981704 0.8037210676181998 -0.635842929841427 -0.9026658868615074 0.6441937996611884 -0.1081802787197621 0.2688972132836527 -0.15408932986857082 0.8788992989603861 -0.6191029580919971 0.9243531344882197 0.46920096733358996 -0.3253052151235287 0.10928525633663688 0.19867223804882195 -0.6209536694557996 0.4955899484458175 0.3449304709361962 -0.5171451577744948 -0.3795469612540374 0.07692386113322569 0.4741261588623884 0.5632080495757614 0.665018919849347 0.29119632748899726 -0.4320546016319786 -0.7528326529636964 0.9472382969292594 -0.3054852836106736 -0.834805897774147 -0.702363004947604 0.8543239035211128 -0.7381371902607512 0.7982378008739921 0.3559245355090237 0.8148852001732707 -0.010322144332124195 0.37557187935378655 0.7382010650403972 -0.478462540326819 0.020662661370094648 0.5930177472280578 -0.685091590647962 -0.9268846056136075 0.059272895624172595 0.07358055115174356 0.3720183137661284 -0.32737170716818165 0.39832478960108086 -0.016389059621624735 -0.4597931946111291 -0.9463784381550795 -0.4244520845966444 -0.9633886384967356 -0.2863088602478421 -0.7711403280996951 0.7601384866754246 -0.5780317604564993 -0.032701111071164135 -0.040798260019892174 0.04846877257041804 -0.6361937008280552 0.9828223620610472 0.6071781455000733 0.21998696687892805 0.6304903219322942 -0.18784366367546013 -0.40196736013089973 0.7785465214020215 0.4430091536932854 -0.2640597429144389 -0.2829914572166805 0.581172412873219 -0.2521801510866941 0.19755460146664472 0.9254296728038514 0.043986494757301875 -0.7878890588648697 -0.366624885263066 -0.6303106407664922 -0.22517619823608737 0.4035396156718343 0.5164048411348761 0.9272524945022191 0.8577442662459294 -0.4189247203597606 +45 26 0.7229344924445609 -0.10429022808949706 0.258523496195489 -0.2500276009771636 0.12071279871453044 -0.9656147224473508 -0.5136588149322201 0.8136807898639762 0.5058314521964613 0.21608442261420824 -0.23890725395517154 -0.3182235871757051 0.6480456125925789 0.5831909106477764 0.8424679114256513 0.9660854861480754 0.48453604552362584 0.30491772953178176 -0.4734543167366019 -0.8845376250306738 -0.8129558367502137 -0.42859197923642345 0.7123696516675591 0.5882339552402183 -0.12572303843298038 0.577815634080735 -0.945127497033009 -0.7101261483641361 -0.5249816908994343 -0.20351011928622031 -0.9934072433402827 -0.7910114228423684 0.9067795788998927 0.5356553023624173 -0.3763514965970367 0.6066085088777946 -0.6629709478772567 -0.5998671489794647 -0.09538563859380145 0.7603109062045283 -0.3444274608354132 0.16592672842643807 -0.6096473782719172 0.38012515684413106 0.252007964883769 0.8616664148658557 0.8697661429605614 -0.5051046071122232 0.8333363074138491 -0.19438432716198562 0.4139980485257484 -0.8568858277097411 0.7279374785983823 -0.42226796114877385 -0.5483364920772111 0.6406531382781437 0.07974912412004342 -0.3183301439127484 0.9262102297180339 -0.4111280811753626 -0.29437690514246273 -0.23637556207730714 -0.6618140050446473 -0.08799945305526213 -0.406890421866807 0.43125427425838847 0.5888390575839302 -0.6448347759222384 -0.4637308128297204 -0.9749382130367577 -0.958400953740115 -0.15533754819242862 0.3005766695452279 0.4013230288149414 -0.33556293104192836 0.7316091301060315 0.28836498472623795 -0.6647933629117491 -0.7398824856131907 0.6593377585640792 0.5112817639201821 -0.3121993849640434 -0.35926466179324046 0.7036424351620363 -0.8446668858203967 0.21066137107786442 0.45947124872760203 0.5437025967867564 0.7866464868181613 -0.7122918840473509 -0.369579275225979 0.5941732702600264 -0.4308730548278956 -0.29213875210468854 0.8760329554221113 -0.9566639723166876 +45 44 0.7749931280058437 -0.2672536583818219 0.17577770775905854 0.8464924994029226 -0.8051490378661672 -0.7418071304163507 0.8169443656407238 0.7178690515898667 0.9186299633328483 -0.7233331771688016 -0.4871754378240516 0.0970679730298123 0.27825241496236885 -0.38250937010193997 0.9003354134835384 -0.17774844664791312 -0.5618758762182721 -0.5974757800133379 -0.25617884012847547 -0.7378971727020731 0.009446852764813718 -0.05118263362614961 -0.813803295145304 0.33808156258471445 -0.9566693080886175 0.5084575149092863 -0.8385335110243144 -0.15155897828841947 0.8573209735283083 0.966260899265396 0.7450014786602421 0.43243041637930824 -0.9414985831653062 -0.9194868597216634 -0.9122485415764383 0.22852980595182837 0.9383855612611782 0.039290540363611015 -0.9236454845993562 0.7642281460724376 0.6142586179276972 0.62234091420065 0.3956642270588666 -0.8807504896954186 0.6615188816241997 0.8985381474138869 0.351178459978986 -0.1867993809314734 0.8297351504715791 -0.16013424326247105 -0.8954961341348968 0.484095923002992 -0.3891775118127949 -0.8363179765104531 0.8263728972371323 -0.7790069078634465 -0.18718098899708968 0.48038690919278904 0.43247001511641847 -0.6658643418589889 0.4807385559316837 -0.31993652572302267 -0.2456887508676524 -0.09144981603128466 0.8420168244545752 0.340583634813151 -0.998960405624584 -0.9726843812022934 -0.4410602589071402 0.4347601909642418 -0.9691989235082856 -0.09192175509647171 0.8158543047117806 -0.2195673356147232 0.21375901956450494 0.18139604655721442 -0.3186600942808575 0.1971417648928433 0.6645679418749209 -0.893257130221845 0.8065319967501516 0.6649776845935114 -0.9570340958044841 0.5074369500198594 0.09419815848479085 -0.24047452087719257 -0.28541682725809525 -0.39799559721221445 0.25619202936608887 0.8436403592621036 0.2060981785304823 0.8598357914314456 0.4923686413275983 0.7187192032529839 0.5435577038237351 0.42440703802435475 +45 45 3.3739694766548536 4.6484960840342655 3.3147513771352157 3.9066086024161435 3.452922632559791 6.172686422716122 3.5556743001730235 5.049173949106119 5.072533867342293 5.400588609011996 4.843161759350713 3.4188547974273815 6.1284692536020815 5.275793051222481 5.45449731083445 4.156194411381048 4.956375023585097 3.9683897176132863 3.239108082096747 5.630503652800831 4.819742233251413 3.3761392168212536 4.938907654316328 3.783720907881344 5.320402671031996 6.026965157600447 5.692513827728966 4.764507730242717 4.969188859329508 6.253510269035672 5.495556856913666 4.648149297653161 6.381909178536509 4.643227854727658 4.0403923246152065 4.026809724661216 4.251714903137842 5.366329020520368 3.1525460606970412 5.1474782485235435 4.514222797385395 3.515580687032389 5.837178989899046 4.572008279820397 4.256375835304721 5.348475485385909 4.450222993177787 4.639037899113853 5.162131432234152 3.67439147828141 5.956136879280959 5.636495014071399 6.133245460767132 5.86314865434575 4.496459407657546 3.1665331178092853 4.785764298503164 4.95903505666811 6.527973490189064 4.319126091604975 3.292257530408342 4.1501210115299525 5.075764939639993 3.6608597795471574 4.399326110355548 3.2007962237726155 6.099376389958636 5.894846549114714 4.107172130746369 3.7680127852728473 5.736051348956218 4.601513508309964 5.966291533930985 4.327097539398584 3.5560643264106915 4.9199408351364635 2.935142575010272 4.0366859222776945 5.496979988664954 3.9700641413767457 4.428228015574776 4.62403566321891 5.79218538742169 4.228108857650917 4.825019880490601 4.61857263524751 2.8673888063419 6.131080157662202 4.674093705074199 5.170324634033947 4.36067655799674 5.256952441418443 5.067060089754438 4.486931402828792 4.996722281881248 4.054359445832565 +45 46 -0.5351270381766644 -0.620406182510419 -0.22108727664637717 0.512615253147001 0.7146754801241637 -0.7854405123164057 -0.11490019554771225 -0.639883160967422 -0.3377838848235777 -0.6730683728395641 0.7919909883667442 -0.23791331191579768 0.9941676568162938 -0.9117616359283516 0.6166021405003397 0.07575128437217438 -0.526849924885892 0.1478106298011499 0.39381184023145543 0.6744745038932367 -0.09901389428216545 -0.46904970623390296 0.9771255759268087 -0.27969978171459675 -0.022618013231784584 -0.28146014563821 0.3770902031805321 -0.44418783588256905 -0.04604481623495005 0.9351055339904215 0.8683570934658582 0.8700432305521841 0.8396493034476145 0.42305763678197117 0.9173125673738018 -0.8392575712663621 0.20617773018727426 -0.5152120778216984 0.22744876056071095 -0.6479597211610957 -0.8950472613969283 -0.37896115353075044 -0.9705336646246752 0.022122767797251974 0.22623759335370952 -0.20594832898306992 -0.5882992647600362 0.9241073796586403 0.9786000923325193 -0.047999251118097996 0.9283322219223193 -0.5556357729851713 -0.7745030609589685 -0.47837366676967363 0.002301221527425623 -0.2436234714268526 0.8688739247929975 -0.7781955089759562 0.4943473666928293 0.13829609630700723 0.5355112170700083 0.3233750261320494 -0.5451379548695161 0.1220816954453281 -0.20246082579760794 0.6465458801132795 0.5809696072504043 -0.6044580281178429 -0.032217377394660573 -0.6926467659439302 -0.5175589079884493 -0.000978395406236121 -0.40646104428428687 -0.08988048088499823 0.94244038970688 -0.9532336362907101 -0.216208587853697 -0.8284342873273756 -0.21185953977229754 -0.28057785478680075 -0.24400349420186518 -0.5505418573477969 0.8397270768772513 0.6380430842316713 0.8285637870774785 -0.13846328154341303 -0.019558293121113346 0.7726413900184033 0.6671490071654549 -0.7753813799594313 -0.7407881554722142 0.7112161409891431 0.28926175549772215 -0.17732387207951894 -0.04784624509325064 -0.4522096159204725 +45 64 0.17091198940269803 -0.7348793189523513 -0.07622906183490441 -0.493644045401628 -0.05470318664728668 0.41742017965828615 0.1017579074623185 0.9818996020287198 0.9470552119941327 0.6607868941842259 0.18162351998230708 0.7945299116222102 -0.6516532190632336 -0.12128160077499195 -0.46420646953185263 0.4320402316649743 0.6115729193349384 -0.6647059414749703 -0.09261011708146905 -0.6782138928605079 -0.9710134609996748 0.026812273549586596 0.7558210585600402 0.2793968922512964 -0.8815566791487168 0.6114851787969988 -0.5301785220431119 -0.5276197395139295 -0.6665279782501081 0.6750682774867616 -0.07781807586647771 0.19911529934429084 -0.7370944228437861 -0.3959245770672921 0.3147033323211941 -0.7728702425730452 0.44750323195674513 -0.871063519058662 0.18690627951725292 -0.058115373006732085 -0.5783496215295101 0.6052186592308981 -0.5210870019099945 -0.011446732477864874 -0.6981544595315059 -0.721141001114278 0.4947458286382258 -0.9365782319599352 0.9801186706181502 -0.7778242486427582 -0.81783329611156 -0.9933465360490392 0.8880152912796049 0.4362445281229268 0.28497949792181543 0.32929840501558916 0.5302944234861595 0.8117286918699294 0.5359638864216358 -0.7194246496609293 0.1345142973712845 0.11293277029677218 0.42492678373347736 0.4171483085775609 -0.2563101111765522 0.013457176057315445 0.33624622078115474 -0.06818372903335157 -0.7175623482393001 0.09803304246809197 0.5565578035272933 -0.7501778343883831 0.7386570460825599 -0.5048126184898345 -0.26661111774304946 0.7647956074769553 -0.1522236545787623 -0.054861988258650296 -0.9489729815857075 -0.009054722431000917 -0.05688650250898308 0.3628055502987293 -0.7463815734572954 0.4775922700263475 0.6736196224180346 0.2701411729790075 -0.28283267767790554 0.6664381606133558 -0.13157282215956356 0.43841340146832786 -0.21177422607042606 0.47443073893812393 -0.6035218902345745 -0.664704631823333 0.693938283163108 0.042261888120746605 +45 65 0.6639201652414333 -0.6264376006255397 -0.9804530177892401 -0.3299833462637123 -0.9585356164648693 -0.6792511261226035 -0.6117519182505684 -0.2534918277101408 0.43870672145780243 -0.7991619700006023 0.6883637314748601 -0.004284961811834576 0.5608764660115431 -0.7282094555781178 -0.5840484783617441 0.4041579141443272 -0.9631895806949673 0.8882864014935747 0.16688828093979335 0.3273353409749842 -0.46129467090779386 -0.16467299499180932 0.21265814222351498 -0.5732671120807245 0.6060474473732154 -0.8234560875891854 -0.5000460545621703 0.7814460526058855 -0.655758518214218 0.9875347663697123 0.90843003048325 0.5804963484393106 -0.5324084304803383 -0.5678595621277265 0.13685331922232358 -0.48338264741762704 0.6994424226149052 -0.8291853652889192 0.04781245108088372 0.6108289131844304 -0.264752883816298 -0.21363164084338204 -0.3174023368410208 0.4912211330005227 -0.8055963186804662 -0.35946473415806945 0.7074010065500291 -0.6680462989707678 -0.05118389100161447 0.16308754605964837 0.8640466615056908 0.2550148701012076 0.5022919389826737 -0.5183549693546179 0.8767497002008722 0.5046673093771443 0.8978840783880537 -0.6799209124751524 0.9651567493616455 0.8741032263390467 0.6444648098160963 0.838353181184252 -0.6758163366365504 -0.41324733040870587 -0.7306170749496212 0.0348385466452894 0.8069311291284849 0.9499268355835682 0.8572153530989937 -0.8278716305912586 -0.7480674397888103 0.5250278390593528 0.9052017753337349 0.9890508546745018 0.3576974757359219 0.14282150884076206 0.05964901407735268 0.657860907745025 -0.06040284255138584 0.4328600655473436 0.8542563727339487 -0.8814846922809512 -0.6732658882660905 -0.8568212296646587 -0.8655954163286916 -0.6141399668676122 0.4373636253191271 -0.9862825001497562 0.5395235503179454 -0.9274160820666815 0.5770766419883582 0.15938517522911821 -0.7493029212520057 0.8078848797972116 -0.7189905546811795 -0.0281127885477237 +45 66 0.1961708755464726 -0.6372952333268205 -0.1703592327951946 -0.11579851291190035 -0.4900238220609614 0.711761083116415 0.2567621716913653 0.9755556540155075 0.9021675365979345 0.4245059813448844 0.47047084905893843 -0.6235957367398048 -0.6965153198510194 -0.15090352651936123 0.8330309385423149 0.8179273136677283 0.8896629559701463 0.3458608722883547 0.38568397259835185 -0.751153706499831 -0.40364250406639246 -0.5088651822579466 0.21039025207498208 0.5702426973496897 -0.5799176452801931 0.6275147670449412 0.6129010068325296 0.4860940292134879 -0.20140604345385338 -0.4784854046879927 -0.9704830310043513 -0.05679898812010431 0.261551660036077 0.967439724420627 0.37079153542374743 -0.4320520240878649 -0.00017220936628326022 0.614658084572826 -0.04463018849066347 -0.7635069299185233 -0.4948892206823099 -0.3583768114613701 0.6191276333302524 0.6046048782747551 -0.40478241767190326 -0.00470609148760226 0.8243088269712109 0.02592262450670546 -0.4721558129993424 0.9976247333665376 -0.9302833239715309 0.44532002320193453 -0.6060142901822982 -0.7962581468836869 -0.0758828732147121 0.504699205530216 0.40859934850013446 0.18994701859786423 0.9778984198621965 0.9801691348660326 0.33805190291644793 0.4193454547451394 -0.8071427149696211 -0.1472441753771232 0.2532371668026865 -0.5076646332041554 0.6124850975940719 0.8846608480627589 -0.7126445605185787 0.0036439345034910975 -0.5389021943104562 -0.879428813319181 -0.909646801603422 -0.15604436101366992 -0.4711514777640413 -0.631169036378934 -0.8593382340252314 0.8745107637939884 -0.9343366071989248 -0.40592979357552017 0.47767874707670965 -0.6704246828170384 0.8953512605019307 0.37859217105077536 0.35964623927593875 -0.9478802826118131 0.0672985505236825 0.9757592093168737 0.16967713790093297 -0.6205823183705572 -0.6933202513250003 0.6104855387928172 -0.676033584457187 0.013945442659105689 0.30063344427514305 0.9706904749246985 +46 25 -0.8396453007043632 -0.36020793790459393 0.21116538053487033 0.02634334206682465 0.9598551344219219 0.19745659204182986 -0.5459729500365982 0.737520998449916 0.3855512339781564 0.7202508395478053 0.19930961712853046 -0.49004676760109445 0.3702031802188739 -0.6474501949790077 0.5614774160163365 -0.4691771498613557 0.5703707418926425 0.47489432850358515 -0.12474717891592357 -0.46749512769847135 -0.050997736409144734 0.14374787536870626 0.5152875779496631 0.18138089499453502 -0.4180332607534465 -0.7733250701031626 0.8748910243021915 -0.9420526035667931 -0.44223224622083057 0.6305150983253771 -0.7749173556148861 -0.042662930444321345 0.41654102667015347 0.6855350900009274 -0.30375329494141035 0.03373442822156614 0.5945826680906581 -0.6123069575697664 -0.48071485733489117 0.021173148592846802 -0.7765312855002187 -0.5092786120266783 -0.9377266807994213 -0.05883284117448495 0.5531161230391326 -0.16858243590192568 -0.21202361099779465 -0.16248524317941193 0.3688603285569292 0.5137075607770136 0.1570063584682988 0.6255521957675239 -0.13774164717567405 -0.6134153339272879 -0.83213093343633 0.8150158353060071 0.08399427942827464 0.7064366282780306 0.5646577844899339 0.44587612797775833 -0.5035305539035104 0.7909315480232697 -0.2906521647517242 -0.21315382504383007 -0.7905566551649061 0.3589611112350919 0.19434212982838184 -0.7797495651191877 -0.4368172236172132 0.052258112705279025 0.9932512304904719 -0.40307075736570774 -0.2487586029585287 0.2903602732997457 -0.8362558601428289 -0.9085322866116441 0.35472999147991735 -0.2069647299192865 0.2136063732705904 -0.6971533040248534 0.5151609056467106 -0.7598752393392538 -0.5081355246724857 0.83330070499014 0.9485776288750787 -0.9050346918032675 -0.6586074184076016 -0.38507421883669357 0.8232086730098864 -0.9139650859587489 0.9049256817363347 0.028839675843585155 -0.8566349048209512 0.3425746728862089 -0.3369087570524043 0.8878009371466964 +46 26 0.49585773725166415 0.8643101867360035 -0.4593150238287429 0.5589267855774944 0.18699737602951383 -0.18120248840016018 -0.8610557868741602 0.9223847483021725 0.979315895055086 0.7084421415669484 0.005335213487674739 0.4576235189651092 0.7236332368852132 0.6428401572116236 -0.1755942821847738 0.17772773744596115 -0.021371335032301042 -0.6587520163461082 -0.7302682773588487 0.08105892616728472 0.08012746072243226 -0.140037372120557 -0.04549122980319109 0.689081783835783 -0.7704550184343153 -0.3294264161046807 0.4209266727575214 0.8434061430440518 0.910006244340696 0.7486030109045974 0.5599941466850851 -0.8790028278752753 -0.25936428015827295 0.26810203929557974 0.5188730104843646 0.4250131268770727 -0.16892691141702887 -0.4336979243984427 -0.26992028438020843 0.24188145652015547 0.08241364446719213 -0.5226433851852288 0.6719941878104203 -0.00010520923146351002 0.9627189579249851 -0.2233529847829996 -0.675924601018097 0.03575635983726566 0.6329072659411072 0.31201204746212685 -0.8499982919229956 -0.18683057623670396 -0.03177744282981343 0.9786877684537032 0.8569272238494205 0.6231305406086818 0.40347681675214386 -0.29622526466660837 0.9194052241259929 -0.5118394376177129 -0.4891159805111762 -0.9808823972970326 0.7565532870020453 -0.5235904664795443 -0.30981617667297545 -0.49117787969547666 -0.9144056824838636 -0.24341499395013422 0.4314250928159835 -0.46640237065857115 0.990483917123909 0.024371510141941277 -0.4245781544882974 0.22817549937453818 -0.5855619175813982 0.6979416975204371 -0.8053140494836233 -0.8718248241878546 -0.30300082618947766 0.7389073959401928 -0.9463077842945518 -0.8697516738904423 0.5568547705553029 0.7564989403508471 -0.986880240244961 0.35636954386372577 -0.5107474434788228 0.7842574053758062 0.2325301812342857 -0.7178262877906634 -0.14456791067610242 -0.30174943083024863 0.3440018279953321 0.8965231389848476 0.7442717528592306 -0.43248952692529996 +46 27 0.3912685481561078 -0.1981057528013086 0.8445965735329433 0.2550781929744621 -0.8487835519788993 -0.5170551806480803 -0.7213682062486539 0.54395837074716 0.4049482570365208 -0.5133140019780749 0.4819497475444219 -0.6130413266372048 0.06026109760702236 0.6429800345084857 -0.6370437005000538 -0.28856774868956414 0.7466273423287548 0.5807468425273092 -0.33614168378287257 0.9737719853522584 0.5399911443250578 0.0995505673872028 -0.1273906868866468 -0.3375639639920165 -0.7977870832671901 0.2895949439852086 -0.03919767617840586 -0.760824026866949 -0.18191225979493364 0.7910972601371078 -0.8266297398156037 0.13399397208234132 -0.8149009553679716 -0.28238317703265636 0.7931602392354213 0.7468709912658802 -0.6684065593517385 -0.8692091646837206 -0.909286594355585 0.5940431191416271 0.5545453883169338 -0.0582844938642495 0.34194080282617323 0.5317600613516023 -0.2771031965543902 0.007792962807870341 0.6122771557917934 0.32882544582274775 0.6839797548801279 0.6933044770649395 0.8210163652909741 0.11320362869122436 -0.404342534090244 -0.12956143563409617 0.44046435359559966 -0.990461174209649 -0.9311934227416476 -0.027283234859132754 -0.24913174798628046 0.41173087310265877 -0.2643339405998262 -0.004799966039009229 0.9990688209696432 0.15296765517198407 -0.03222759050699531 0.6581166547651192 -0.13623586632356588 0.1877123454996401 0.9001722813286923 -0.5126853963684939 0.4157230778550278 -0.141874443372356 -0.6944104448860837 0.10928867048166135 0.9847925964516724 0.5228257802493539 -0.6384823979409553 -0.7429422284481924 0.7123235250237228 0.08585291854205601 0.5224388364376988 0.12709007208104794 -0.8321282751223391 0.3282890394332043 -0.5388036669710241 0.867246348109449 0.7127513868926234 -0.27688224304577225 0.44581436835156096 0.1853642093211869 0.9424149340451524 -0.7562345247597528 0.6190591075107064 0.8156091141066184 0.3087421243812454 -0.7452960813170004 +46 45 -0.5351270381766644 -0.620406182510419 -0.22108727664637717 0.512615253147001 0.7146754801241637 -0.7854405123164057 -0.11490019554771225 -0.639883160967422 -0.3377838848235777 -0.6730683728395641 0.7919909883667442 -0.23791331191579768 0.9941676568162938 -0.9117616359283516 0.6166021405003397 0.07575128437217438 -0.526849924885892 0.1478106298011499 0.39381184023145543 0.6744745038932367 -0.09901389428216545 -0.46904970623390296 0.9771255759268087 -0.27969978171459675 -0.022618013231784584 -0.28146014563821 0.3770902031805321 -0.44418783588256905 -0.04604481623495005 0.9351055339904215 0.8683570934658582 0.8700432305521841 0.8396493034476145 0.42305763678197117 0.9173125673738018 -0.8392575712663621 0.20617773018727426 -0.5152120778216984 0.22744876056071095 -0.6479597211610957 -0.8950472613969283 -0.37896115353075044 -0.9705336646246752 0.022122767797251974 0.22623759335370952 -0.20594832898306992 -0.5882992647600362 0.9241073796586403 0.9786000923325193 -0.047999251118097996 0.9283322219223193 -0.5556357729851713 -0.7745030609589685 -0.47837366676967363 0.002301221527425623 -0.2436234714268526 0.8688739247929975 -0.7781955089759562 0.4943473666928293 0.13829609630700723 0.5355112170700083 0.3233750261320494 -0.5451379548695161 0.1220816954453281 -0.20246082579760794 0.6465458801132795 0.5809696072504043 -0.6044580281178429 -0.032217377394660573 -0.6926467659439302 -0.5175589079884493 -0.000978395406236121 -0.40646104428428687 -0.08988048088499823 0.94244038970688 -0.9532336362907101 -0.216208587853697 -0.8284342873273756 -0.21185953977229754 -0.28057785478680075 -0.24400349420186518 -0.5505418573477969 0.8397270768772513 0.6380430842316713 0.8285637870774785 -0.13846328154341303 -0.019558293121113346 0.7726413900184033 0.6671490071654549 -0.7753813799594313 -0.7407881554722142 0.7112161409891431 0.28926175549772215 -0.17732387207951894 -0.04784624509325064 -0.4522096159204725 +46 46 4.403306831958702 4.07587176315948 3.170180928646148 4.284162857807569 5.40742661449982 4.0869930683848725 4.79840911036039 4.508159926265509 4.551732894772339 5.015244501121307 3.2369509682798485 4.646030896429169 4.019984117934877 4.03176805909966 5.400858875335837 3.276032639129552 3.7079568579054647 4.360852796438358 4.205841936837143 3.959156509020475 4.522420513001891 2.204449813819764 3.608764818144292 4.2549117177378 5.401970017967901 4.065903379684961 3.762776062007237 4.801491071885234 3.9410597120713957 6.1270824163901265 4.630863267014143 3.5998742782487776 5.977574303405874 4.590258989195434 4.591855891093919 4.796896003421199 4.2573121187977 5.420055754817455 3.6869436057396756 3.1337060825053182 4.4073767367690415 4.517558968029822 5.127385022674355 2.0425746856482743 4.411572692758274 2.19173208258998 4.895787173623991 3.9241500893065266 6.018977808045257 3.60762225561169 6.1475263922345205 4.74611165149439 5.317626927026863 6.176800634803264 3.4401674264127826 5.789994146649052 5.007759837324248 4.6033034799190435 5.2292864396681 3.9343501646644468 4.177595206070095 4.527023425306052 5.652359301388901 3.7699529532912 2.63143781597536 4.9163002993308735 4.303312069328567 4.983802274260244 4.5350174117470266 4.399097458055589 4.792228370205034 2.835673302135245 3.307646377356841 3.607568254551044 6.351872700938726 5.517981619748726 5.052825376200571 4.75222347265421 5.115495731309743 5.0969120036043645 4.13606485364341 4.267721647775405 5.152182419364576 4.845488270585108 5.380906645951849 4.27919419827525 4.025456688074099 4.5767803437200705 5.491753556099537 4.701552277820353 5.34335618229433 3.6954880989868117 5.234021648910094 5.564379086676624 3.200957012159752 4.154767093179533 +46 47 0.272324798252753 -0.9723299578147242 0.28261993759917514 0.9510366636860843 0.9186997983174714 0.9206035376543698 0.56787746690801 0.23510401865680364 -0.9758767184203452 0.4016939281545311 -0.6643773332620562 -0.677112572401467 -0.40617837925130407 -0.2838332374593373 0.9521617779811151 -0.4137602203562589 -0.1602292378163468 -0.8502470162770024 0.669263234571366 0.1743491941798596 -0.8963620499453235 0.1494570517346714 -0.005597973068564244 -0.6953509627356289 -0.9780437429645286 -0.1884785414835557 -0.6771726425916929 -0.4165987451863955 -0.07617653235659927 -0.33677560833905296 0.32574411571926176 -0.23245045240792717 0.9211061297918814 0.2373649952440613 0.9519876602962876 0.8271514795250963 0.5448933568872669 0.32542525349448126 0.3013848734996105 -0.5570788153778932 0.5027193627229953 0.9494151143089924 0.13095986096176615 0.030189580372041336 0.4620091311145569 0.41960596922521254 -0.38125023678182846 -0.4565226040609871 0.4852618605252721 -0.7901235269219893 -0.8147312578362564 0.6564677796236682 -0.8908957170937519 -0.9690430564635708 -0.18021206692657765 0.7074110052524283 -0.7624241284063855 0.11145829643346228 0.3191688538567632 0.8958707741607355 0.8561690422308428 0.4768900835022274 -0.6803509468349143 -0.4813130106476753 -0.24691225943028194 0.12184081326606 0.7543627735118974 0.6186938508194888 0.9100148297450956 0.0070994127131616125 0.003098432762335568 0.09875266257549109 -0.14643734337131775 -0.21558354805961089 -0.8618147900254185 0.4329868408115036 0.393883382616661 -0.7127386273732836 -0.9852881748593891 0.8696700643655542 -0.10951568622344587 0.36181677617076535 0.9387180831496953 -0.05675124026569067 -0.35575528096166864 -0.15069961995056746 -0.012936831395169213 -0.347382170346052 0.33087839199184477 -0.44316740667007526 -0.04465812741796915 0.4469034103957037 -0.7816893335652204 -0.15354260782036078 0.7265799113548197 -0.6757827800709166 +46 65 -0.2450651734186271 -0.24419871867713794 -0.6049911629036817 -0.7485438503604347 -0.5974424371745533 0.6089071936792572 0.32382814586307895 0.36065158216671245 -0.01175730996307589 0.08164835430947393 0.49457999428313126 -0.9473592840660983 -0.315361552698294 -0.426009785091259 -0.3579241641166573 0.10909838958253526 0.03224768583498694 0.0009114255707152186 -0.27895901605260565 -0.7191656788495138 0.9132359766486113 0.3450043848661757 -0.9774583461088813 0.45340201679034964 -0.5253776791651037 0.24854104098444707 0.25470717324723857 0.3819185921438282 -0.5451446730258012 0.7176485435338349 -0.5125284134645751 0.6154441354960609 0.503049062399535 -0.6044001542987998 0.49495213088437606 -0.7312679671321642 -0.9159831091804198 0.8002241679253468 -0.4093914353574952 -0.3969336761407387 -0.5746867615277651 -0.5774371873653876 -0.644720854542572 0.5032376543812735 -0.9293791810106755 0.6484331785885304 0.7989868428526068 -0.2884313687453124 0.5427499932748108 0.16036655244044673 -0.761905531905505 -0.4801727281559449 -0.6832752932338662 0.9731464888370978 0.06756457113868919 -0.702730806603463 0.5312273079721055 -0.948956113562972 0.7719116792131406 0.28256232727878894 0.5540680711693884 -0.073902915690093 0.2943150768657228 0.7696077659847294 0.019697883271859062 0.713823645174738 -0.14110081301696065 -0.7950554360334616 -0.32442028032727377 -0.8648283636467144 0.6631950664539614 -0.9436517743398574 -0.2144615524019795 0.805648931734144 -0.42036301546488564 -0.057382518344543554 -0.954995273406041 -0.1349128983063257 -0.6951703862438279 0.864450833150362 0.5784451796853058 -0.27260053954871766 -0.6328751728890702 -0.935974734196495 -0.238302511244596 -0.3423948795474159 -0.3513605885898401 0.39812022212054 -0.9866377463263325 -0.3175391999639394 0.855403560764687 -0.37899063909747976 -0.5663816404751161 0.9156480234209146 0.8463149935299483 0.4367591404802764 +46 66 -0.3367021757649946 0.23520584521521437 0.20265095898863184 -0.3275936117134308 0.021590904896445107 0.1013506754440201 0.9941161648545478 0.3098066164192619 0.29882679077842744 -0.9734978952220374 0.1513627634394441 -0.034394916684827415 0.7816132166640155 -0.21161358334966263 -0.5551209937823529 0.33245703454633313 0.33220436489212357 -0.4835334856073832 -0.8903435709093857 -0.028903444855522764 -0.18967689207938232 0.07058941179485823 0.5098637104219148 -0.8278051009306335 -0.9381397342101641 -0.612607649093412 0.6919886238331936 -0.1836090182994583 0.39086173500606547 0.9284673044429088 -0.006113151554820284 0.16089539986662893 -0.9827629073540427 0.9530876306512583 -0.0081140272751421 -0.11276649467340993 -0.6287975155622734 0.9852917612438201 -0.43917506646887094 0.19078909760075957 0.08482429905436994 -0.13569541194621348 0.2588009087717589 -0.09984265403663084 0.40674092735068546 0.18416755823741204 0.8583091782336334 0.9891645427540328 0.7652040753341169 0.10538403055314949 -0.9049484101499272 -0.6797733973810094 0.8365575453289082 0.7151418832102692 0.00359979975004987 -0.585027317348757 0.10548074878218339 0.6910642381887588 -0.8991000569659844 -0.9057356772746226 -0.21214578009174256 0.8884540351764569 -0.6958169610343892 -0.3734148233177479 0.7592531644578118 -0.46437282852083994 -0.6199361485729697 -0.9978395878518773 0.7774196891817717 -0.6692043778957197 -0.11935907299946091 0.22364762026283835 0.09024016723755612 -0.6556561918100294 -0.1304453604284448 0.8179410563975122 0.8897409934286329 0.5547683519083695 0.8340094169865666 0.22936647768614904 -0.1320517330844635 0.8044554801802715 -0.23615154618455536 0.5649361125843662 0.5196146357812852 -0.394607132337391 -0.20725041074159734 -0.7440472780304996 0.3303752747159079 0.3630702910861132 -0.6175440107983501 -0.7394007585020719 0.6729414032648771 -0.9908912208282932 0.07721775066318814 -0.16327016465752497 +46 67 -0.33890195466750317 0.24981165756231505 -0.28126268973587454 0.48482616539064916 -0.8257202003724187 -0.6292348925031312 -0.5461806367644189 -0.674875808313115 -0.856442042341413 0.11444657188844198 0.03191218751666969 0.5319790017193302 0.054137783680325846 -0.0574709006895604 -0.8537787300949342 -0.660309926652753 0.8121296278379244 -0.6334388931098094 -0.771068118898701 0.057087054425698947 -0.8117127051118047 0.4073234788819562 -0.34995249963496233 0.2267141307442655 -0.7327247107745944 0.3984313119264904 0.16020818116908275 -0.4233180952380544 -0.3572515336738502 0.518896201761297 -0.3117467874621018 -0.4956859110723242 -0.2409682544452283 0.3423572506083079 0.3509780286900872 -0.3135203741375896 0.1775110709748864 0.15634404976175542 0.21547959042645504 -0.31915225928439783 0.9149670824394434 0.918422340287173 -0.3783167485590022 0.5123630530552645 -0.2816219738600143 0.2999652669687489 0.5800425659963242 0.22762399828319402 0.7627245665850926 0.7667465451765623 -0.05519771372549176 0.6141195887150117 -0.6827339485022053 -0.8030590028286195 0.24233221159728613 -0.19145549195648215 0.7519589884682876 0.9324723613033439 0.4897096650346855 -0.28841950877087474 -0.2025851283530351 0.2019230689187952 -0.56539951211849 0.15064866900381935 -0.18645281469905073 0.8090416379264029 0.7719184871412947 0.04969608527885505 0.40718481175002363 -0.5168284898354436 -0.5481820144902536 -0.48057575236486416 0.5758053686401905 0.3712242298411992 -0.8133799670459612 0.8413226000655458 -0.6966670803188684 0.2145257504069682 -0.9661844298991122 -0.7483148787294316 0.22719846849680492 -0.12187479493486864 0.27697897745815037 0.6406105678283138 0.9065394499043704 0.9977549202780573 0.668807912349612 0.838923672823682 -0.6987477587109461 0.9789190558870042 0.664842215772282 -0.28863770495019203 -0.39594815875470735 0.30373927968721315 0.04915409292307382 0.03755971047476603 +47 26 -0.9157163503879417 0.8424483743725346 0.1181160084974191 -0.2841339078377847 -0.8794877078957535 0.47808420151500486 -0.15527907346612912 -0.5108277650361512 -0.8036556403304285 -0.5295305822379912 0.8369584884040961 0.8760196469463934 -0.17217678109686996 0.5320242576842606 0.26050226520482944 0.13036434710753309 -0.41956677592486114 -0.4608784912632109 0.9082626615025502 0.9101947040247542 -0.6184397334984977 -0.6241598751554929 0.8514820253540172 -0.09736455313870684 -0.6668342608130287 -0.07097201970649958 0.2268464376053907 -0.8219896816876935 -0.8909500532119883 0.7721495785105941 -0.928709273968501 -0.7545393505803206 -0.5503654144324788 -0.25698811974965885 0.9899305421166158 -0.7681582231000434 0.11018620808973933 0.9311229387572508 -0.6114267937339994 0.25355505758581076 -0.14729896645214313 0.254448296601161 -0.920175510174005 -0.33097015210842073 0.305808585516149 -0.016420352137813454 -0.0049508872682042515 -0.634765699553389 -0.07479582218645642 0.2721925653116348 -0.4636165971413848 0.799414096345157 -0.7577356313141483 -0.3286265093325327 0.03153313100485722 0.674631978084796 0.2316553876137566 0.3002593286546391 0.7367691300482766 0.6027198228828148 -0.799671732366563 -0.5043404459829504 -0.6524470574040082 -0.46539143464454513 -0.9258432776898959 -0.3517276991297069 0.33406557680393334 -0.03469949551100138 0.6344023692542338 -0.39019327267783765 -0.2932371337959885 0.7703431131083673 -0.6094097267279881 0.07051671749658928 0.9982537643553866 -0.8042645525975154 -0.2219225212949869 -0.44919201035652856 0.8042279662717322 0.6789894834090233 -0.7497734156160556 -0.24268325005644842 0.7180568437410402 0.18451283063638013 -0.3464592088345064 0.4703028817231998 -0.6302692073119711 0.041369329422000556 -0.9778238765140255 -0.7834076244871906 -0.06916802987356507 -0.7059645231548899 0.5239909432667631 0.36982164540567286 -0.9949390255620925 -0.9139955125991845 +47 27 -0.0751294757717833 -0.4578745590178692 0.25615615962821425 -0.12000189945657902 -0.09982533111200675 -0.6415751636190015 -0.841297139964633 -0.7097113567138069 -0.32213217486303614 -0.2520564652918471 0.8110628503605113 -0.1786723498154421 0.12228816934845876 -0.24839364321625035 0.3023337447474339 -0.7466439319663838 0.31577818580076156 0.6641705865726326 0.21532957479634396 0.8105014704167244 -0.1125130140497188 -0.9581368913737949 -0.326769669637315 0.38797277928982155 0.12234306877892598 -0.35993902760447005 -0.8794315166820901 0.4165110767867055 -0.34452069165400423 -0.3297929899619285 -0.7570708138687143 -0.9803042012712468 0.6415028851956321 -0.49620039714099096 -0.0762991405130291 0.7227584106495957 0.4771708140651236 -0.16349030669074915 0.5320380326913898 0.6009825312016979 0.28466444261621104 0.93537117647898 0.0996542365750368 -0.23527322823998986 0.3434719467042162 0.9390217048207337 0.3766412060829525 0.9695494697976981 -0.7428130179331152 -0.21154072999806828 -0.1352594006542971 -0.9536963593830377 -0.329654691945247 -0.021816296588322848 -0.6145993907456044 -0.6324506097168248 0.47475988802505587 0.09633437734416295 0.8820726351351618 -0.5909750462879337 -0.006714104034244661 0.6260508257965423 0.9893011746052494 0.5193939665067251 0.725405286036515 0.32700194826148965 -0.09766870288489704 -0.21437394540856602 -0.0011478984056811914 0.2430929208140089 0.8130902604709342 0.7053401943309612 -0.918660164886518 0.09207503502472036 -0.5788458348328482 0.9864372623937356 -0.4264126199336551 0.11913860918752461 0.3254048228434372 0.14237570338178784 0.194731965790502 -0.6058844255873206 -0.4589284412757815 -0.5613850226104067 0.21492468032956435 0.8273737334488935 -0.3256717013157229 0.45792378144441326 -0.01177279928846131 -0.4549960647342304 0.26029966099766 -0.7908449712003831 -0.7270677846047768 -0.9860417037628735 -0.3253827487890648 0.5978349230829494 +47 28 0.6980078676337131 0.779180270156421 -0.12380201341716424 0.10537731429223562 -0.9992915865982124 -0.09344560334958385 -0.18894024663167563 -0.6585191002902802 0.5503655832244567 -0.655142100634077 0.5972927151422756 0.933974375914939 0.17405171723178658 0.46596006393121914 -0.21908526420934127 -0.1692240039312889 -0.3347625904246274 -0.9520732835099994 -0.9178225330206018 0.4885629811495158 0.13829796110966353 -0.9165431024995201 -0.12853722850274685 0.4706628535018078 -0.9694279528322349 -0.38509745640676996 -0.40038444976372123 -0.6439225666990982 0.1046026147496757 0.527210634110129 -0.9117337524699691 0.46940665599858633 -0.32603255124046493 -0.30328325548239543 0.11768023862825894 0.5960302965994653 -0.3512995840366331 -0.6104401702249851 -0.7391734617581094 0.11922386864516255 0.2639805343095334 0.4960099676508991 0.3899712211266657 -0.8512196796771265 0.6257832864221013 0.17526455039559607 -0.7885335291624982 -0.390201839738594 -0.5931821658997862 -0.4992949559621269 -0.4859858088476785 -0.779625409256655 0.19920974696838956 -0.0936287273391494 -0.6553203830238203 -0.18115607123895816 -0.74585660612066 0.5151440924658379 -0.5270624988656427 0.8020676584697679 -0.6101582926276066 -0.4942017407077479 -0.5916650406186745 0.8387182314091275 -0.09141165153539355 -0.3396125938104704 -0.06911982068132838 0.49344451940876066 -0.7043518042709314 0.023891439080825805 -0.3986320137786912 -0.847682198925138 0.2384480501838273 0.35785194987567426 -0.3537690237697373 0.5068358926624483 0.6122172675370652 0.9851758851478574 0.37154144607337836 0.3127640559537772 0.5085614261638476 0.3827699782293714 0.833819627811583 -0.4746806909665173 -0.6241379483097347 -0.5468365571822154 0.3881503984203156 0.9088005100380114 -0.7833734661369685 -0.8700425533048297 0.03107968554846252 -0.6342504273292227 0.47389054928317265 -0.6229651304692589 -0.6989714176878823 -0.843461965545653 +47 46 0.272324798252753 -0.9723299578147242 0.28261993759917514 0.9510366636860843 0.9186997983174714 0.9206035376543698 0.56787746690801 0.23510401865680364 -0.9758767184203452 0.4016939281545311 -0.6643773332620562 -0.677112572401467 -0.40617837925130407 -0.2838332374593373 0.9521617779811151 -0.4137602203562589 -0.1602292378163468 -0.8502470162770024 0.669263234571366 0.1743491941798596 -0.8963620499453235 0.1494570517346714 -0.005597973068564244 -0.6953509627356289 -0.9780437429645286 -0.1884785414835557 -0.6771726425916929 -0.4165987451863955 -0.07617653235659927 -0.33677560833905296 0.32574411571926176 -0.23245045240792717 0.9211061297918814 0.2373649952440613 0.9519876602962876 0.8271514795250963 0.5448933568872669 0.32542525349448126 0.3013848734996105 -0.5570788153778932 0.5027193627229953 0.9494151143089924 0.13095986096176615 0.030189580372041336 0.4620091311145569 0.41960596922521254 -0.38125023678182846 -0.4565226040609871 0.4852618605252721 -0.7901235269219893 -0.8147312578362564 0.6564677796236682 -0.8908957170937519 -0.9690430564635708 -0.18021206692657765 0.7074110052524283 -0.7624241284063855 0.11145829643346228 0.3191688538567632 0.8958707741607355 0.8561690422308428 0.4768900835022274 -0.6803509468349143 -0.4813130106476753 -0.24691225943028194 0.12184081326606 0.7543627735118974 0.6186938508194888 0.9100148297450956 0.0070994127131616125 0.003098432762335568 0.09875266257549109 -0.14643734337131775 -0.21558354805961089 -0.8618147900254185 0.4329868408115036 0.393883382616661 -0.7127386273732836 -0.9852881748593891 0.8696700643655542 -0.10951568622344587 0.36181677617076535 0.9387180831496953 -0.05675124026569067 -0.35575528096166864 -0.15069961995056746 -0.012936831395169213 -0.347382170346052 0.33087839199184477 -0.44316740667007526 -0.04465812741796915 0.4469034103957037 -0.7816893335652204 -0.15354260782036078 0.7265799113548197 -0.6757827800709166 +47 47 3.5781896239576145 5.608595964969304 4.713694403073456 2.681115984464716 5.684259059497568 3.7737844531114777 4.277181995465719 4.238191001672395 6.48598897576209 2.785946340666155 6.047015917706983 4.830945254660481 3.940201356535974 4.2668968983398665 4.660572522977278 5.500687864678622 3.987391671949947 5.152801227982002 5.806773511986144 4.065281441257522 3.7559333488440743 6.085035074967742 3.0806289722156004 3.4724777407236513 6.222716384182517 4.176457228887873 5.455116938601511 4.997178940754287 4.152251158840712 4.748894445828631 5.2796781109132995 4.153489766053468 5.616937402167601 4.11076192220321 3.1858740884775973 5.140940026907046 4.295552109356782 5.018190079678181 5.662208459878802 4.077583459387103 3.2447100854647766 4.045160504563294 3.6579263901730945 3.428118612554075 4.273808643799467 4.168656370262065 3.1151444391114484 4.302567540305532 4.949481791923207 5.075348505101511 3.796684249687802 6.040003168858183 4.334501976594334 3.2862441184469855 3.0594472662964067 5.66599826388588 5.601254337114755 3.0145892923910123 4.556901015069579 4.736105144250725 4.887714858716922 4.429169438874902 5.89780910472426 4.077745825738171 3.9912185620577407 3.789366745763262 2.9366455077333686 4.482836435595077 4.231378607903499 3.7644983444043403 2.7964277145695444 4.102858344217088 3.865590875065469 2.882919189461597 5.3108914784318575 4.770404417527401 4.009223632188528 4.427130177291317 4.157449690314058 4.524097390345228 3.687494413812394 4.190844100950867 4.662047828842963 5.000210186516499 4.340374958829211 3.070588802013682 4.304828136450306 3.5423739357508657 5.637770796634969 5.34025267238303 2.597407295629924 5.33872094550867 5.236415742113406 3.8774772332094556 6.22073919856389 5.388174276551815 +47 48 0.8208832477427681 -0.866971195333013 -0.9380364773011565 -0.3813978933989848 -0.6085901391244819 -0.38960747245741123 -0.7143194409134026 -0.04982217162231062 -0.955447182003909 -0.1669855352638805 -0.5676126617182118 -0.6917755172730362 0.6294737217440818 -0.9903356464954864 0.7167541701665048 0.8366991928366241 -0.6916682879428162 0.37148727965170747 0.6102272952334435 -0.875275394105252 -0.39778104532638237 0.0062264620192966635 -0.07994289216887318 -0.005042456938031403 -0.16826949712967632 0.8986729648002321 -0.17275301144449062 0.27347550838957657 -0.4513731246064516 0.27794991637904864 -0.0408647529591355 0.686941442327401 -0.8729993217362435 0.8284351140115771 -0.1586495673915771 -0.7052449560711946 0.9449721616188322 0.6471009846359455 -0.9028355239557913 0.1644962498859972 0.1347443062379925 -0.4100782927065796 0.33443937075617125 0.0167778671184855 0.790832320958315 -0.8746887887919226 -0.22003117769349578 -0.8540390788523273 -0.38483975993337305 0.856534377305262 -0.19838495897012454 0.42700899551372773 -0.6167923474271844 -0.18744517229838165 -0.27233215837052493 -0.5907149149982112 0.5032117335594688 -0.5446542689693505 0.22579662562556102 -0.12843011183511255 -0.8097105286993114 -0.5105905996214826 -0.7706303287473908 -0.3963076609861127 0.05163394939398902 -0.48215699894995345 0.3057216361637982 0.23391001431569314 -0.15738120626161956 -0.9175032700057133 -0.2772165986612627 0.3811339499323938 -0.19918696423779347 0.6092344930502476 0.26056653448001654 -0.130256513543352 0.12057630221071047 -0.3088150529957996 0.0010332592185777756 -0.05979482163667149 0.024223492668951963 -0.8794349641903627 -0.13689904287689103 0.4708365402403787 0.2046398802595928 -0.35165030006658227 -0.34632948147736786 0.538811162718928 0.9709060836694008 0.1645667443522425 0.06743814759767819 0.4292840870432282 0.20575366290332053 -0.03921359554681292 0.9865859657873619 -0.1435415215969722 +47 66 -0.1162574236040228 -0.964930607867583 -0.949972234027656 0.02290036278455454 0.9307986168605642 0.5014946925322155 -0.02103545085157177 -0.825647704700808 0.6924378962095252 0.1414404716926989 0.8247019751082003 -0.19874624364653148 0.6412832126426564 -0.7754263748552459 0.23897769556654058 -0.8887380953284565 0.6191847652291809 0.5615610851786621 -0.9323131863349565 0.018318040436392957 -0.339168689855853 0.7984532980522558 -0.1398948012732797 0.02543755888998711 -0.8529503646235728 0.6998429018701999 0.9306251013525699 0.24615767824628687 0.4391143403357898 0.7136071845951135 0.8432070611122713 0.6605423561843575 -0.8947112953398131 -0.03416823186551832 -0.29308964704964846 -0.5086547605241583 -0.7819943506693678 0.4218523090071722 -0.6895511396235583 0.9234654228381174 0.13559700195532254 -0.12722858933069103 -0.3741801388533983 -0.1075265710924258 0.9038212143341189 0.1953843707980778 -0.6262263770260383 0.42565866875485114 0.3924100876496164 0.6895887679552493 0.01593937311049687 -0.6994908609304527 -0.5655237540497717 -0.9472695042231118 0.061123165278105906 0.08272986507471303 0.733449083904522 -0.45696788511161146 -0.8775218982993112 0.3867116638570749 -0.15157824184438673 -0.5880832939751928 0.19479418132431903 0.7150700213722112 0.9239769805016049 0.6529991512269628 -0.5639520939325497 0.7179997938200235 0.30162986619903087 0.2824459609342269 -0.06911274071416051 0.7010080864064439 0.5014546122553241 -0.018575895401352405 -0.9381892578759259 -0.8205115099511178 0.5585777256059961 0.32267208292114247 -0.4162991360773187 0.3580789092802614 -0.5606394245512694 0.03599689259580363 0.30007525737613006 0.9520959955091179 0.7014643640495408 -0.4137338590777382 -0.9311823063277835 0.02371133241285195 -0.9223619232604361 0.6432157364268338 -0.23389123259977973 -0.28475616246347357 -0.2565554888603072 0.5195486404600289 0.8491331069664869 0.9732360493855561 +47 67 -0.3414752415207214 0.11147564650337771 0.9452796187330383 -0.5759704633394331 0.8613668736670834 -0.0759546351286382 0.5208692110601332 -0.7104178393766514 -0.27525985456528423 -0.040035047575734506 -0.7687382655109056 -0.4261773535864595 0.24716825330645698 0.3329465154960798 -0.9379625669352403 -0.44615807070696256 -0.2068396985041414 -0.947345653868946 0.30079240216715286 -0.1376654491085061 -0.7836731158247459 0.8107402252112632 -0.9765824031907162 0.9478201810872884 -0.8834863472191599 0.6720277716868652 -0.8642359500379413 -0.8610034515445038 -0.9646571839833904 0.0977029474881197 -0.4106906175843006 0.028849948408713688 0.16343409392125574 0.9090766000819719 -0.15876269174062418 0.7730900357608002 -0.4212377354417116 0.6537461193731118 -0.7377871870575676 0.7672114657323803 0.5863353744598752 -0.5974152941202502 0.37521279126079055 0.23719800282235481 0.31608834801411545 0.49671753187635903 -0.2540859200171588 0.07884176944161259 -0.8200523297110518 0.7433302211377684 -0.41038624327956197 0.6725536331998181 -0.19874797108796893 0.1044597320542815 0.4160381036498437 0.8134985214155552 0.48436566532147673 0.5234909871055653 0.050209287188687 -0.17634769175151255 0.8889707559161781 0.4816281320531981 0.4835227510257569 0.022381500041400937 0.0035338430798323994 -0.6044306145866498 -0.045454879747388155 0.7466661876228162 -0.14260802576427212 0.708852929301794 0.5563951405269028 0.024967927472848483 -0.7369795503804364 -0.3843093142678293 0.5999919953549497 -0.4210734613850706 0.8094448848522005 -0.852391049852443 -0.6074692297088875 -0.9613420133137776 0.7854548858338686 -0.6557711975543428 -0.35309294285199644 -0.7985015646833813 -0.5488308058385465 -0.06832155155789565 -0.11541883003986286 -0.6145649995571352 0.2596436128010169 -0.5637057629311695 0.8740953891616958 -0.8536425291307335 0.9202402745084604 -0.25380495608191844 -0.7439341086932865 -0.49144842274143885 +47 68 -0.21594403479369717 -0.45292131319821416 -0.824454052827222 0.066293605846939 -0.2667153391178434 -0.36087773387533106 0.511403725211447 0.5213880981992967 0.9128251916591956 -0.482422119915181 -0.31514600334978726 -0.5602615565765872 0.9554920629225216 -0.4632096528989613 -0.10048622803022034 -0.9842283090651156 0.6189533044312683 0.2695263477412755 -0.5189984040987896 -0.05983253282476042 -0.03228589450525843 -0.9365133141717801 -0.38790717774147 -0.5852786319221766 0.6955044981527811 -0.25952409307294655 0.6716633800656984 0.7282456222129778 0.7196282207581504 0.9764668354962638 0.7745517380740214 -0.19808779868069815 0.30174880258129866 0.7355133450050169 0.12417802055468341 0.199349309346615 0.44341409321858194 0.6212728668563021 -0.5619702699099545 0.6848618437974268 0.2789831029337977 -0.24050447112715356 -0.4864870923504949 -0.9792530912080877 -0.009623466401053049 -0.4077332524794819 -0.1593362663165354 0.3091797892413557 -0.9933286602812137 -0.0608890729980085 -0.931881505175369 -0.7362229438709593 0.3378512966132401 0.10050099032691939 -0.28976385741348754 0.9866464586735213 0.9757014234355719 0.4050094783372944 -0.5110434902444649 0.7966241327779999 0.7614935440598416 0.12129929244947868 -0.7958731029678674 0.32844745931751995 0.0445363544289481 -0.2283264261281106 0.1438829822299852 -0.7604775665295047 -0.49068405046026986 -0.755434272276351 0.016770148270149665 0.008461534868121401 0.0612005899900836 -0.48137810535382375 -0.514643324104457 -0.12805867449566688 -0.11994126415798911 0.12689381463712857 -0.5455442029625555 -0.9643248335032499 -0.7116303392093204 -0.7157650398011384 -0.639148506862748 -0.9699092063309358 0.49265895195264786 -0.2038589001964377 -0.6472922250785436 0.44360048219820847 0.49545728000243106 -0.5798780042816081 -0.5524802265352293 -0.3260033054924898 -0.8856025738591204 -0.5430103348423736 0.6716414509711095 -0.02356874756272309 +48 27 0.5261587615045911 -0.9972992877899169 -0.900328533205135 0.5384818982433617 -0.64305427791872 -0.3471765860897058 0.4714200534803017 0.3535077587083253 0.9602061014386818 0.1428393170067508 -0.8421510848710243 -0.6054246840399988 -0.15229099141530145 0.5665058721324645 -0.36896637878676963 0.6386564899750293 0.5292205330955642 -0.11604910190040663 0.492814005547185 -0.21407572253252338 -0.46579277214295534 0.3496942673729806 0.7083922151561739 -0.3275062814723051 0.8879531623333956 0.9911280834887364 -0.25045350656340193 0.20260674162220194 0.5283742383758865 -0.8454091834700941 -0.9242264737284285 -0.5844924617856251 -0.9528398921184742 0.6250318604891945 -0.5896278717088548 0.41700871323905564 -0.6883113627729247 -0.9815116859480588 -0.27040625127815865 -0.784768033121775 0.05080738395364692 0.4195367772954328 0.06457453073732111 -0.4990469103859423 0.6004564191991089 0.933808901617496 -0.9632614719637012 -0.5566035039135195 0.2851894181886132 0.8534152190224913 0.1812111713614859 0.43555436942872783 0.3208196470106883 -0.9529890365338969 -0.6141474724841454 0.9273176209825738 0.3973164563893734 0.3788892059657041 0.3638729177695281 0.09599119261668476 -0.948497212251745 -0.2855577470216524 0.23951784097104611 -0.3151233539422602 0.7272590474460034 -0.011922879331617509 -0.05541154260663972 0.3081413890109954 -0.5920331753748016 -0.5241148410516512 0.9686672531664418 0.8676441420968166 0.795331672184757 -0.4614057286646738 0.5649280540087811 -0.3309718012706937 0.6526870848958135 -0.9793923580231567 0.12221872701301062 0.8354113549079145 0.6166931393234829 -0.7168779269870407 0.49028260151865655 -0.1489311807548963 0.7034484439560762 -0.7530045851461455 -0.7082713919107628 -0.5599322125305537 0.3574937192157437 -0.016203302755961158 -0.42395675450912873 0.8283736484931945 -0.7569847378701162 0.3454068322169692 -0.7506776809180815 0.8306789965962511 +48 28 0.3269773441514374 -0.5339653043846868 -0.3595030309985645 -0.2413187424033303 0.19758843566076068 -0.3246550707278746 -0.8871636795914815 0.9894774770570092 -0.7778259523101168 -0.312940651048216 0.3832484445692752 -0.7093143608538766 -0.1221693716093335 -0.861328962783017 -0.31712019677802306 0.3121721478166166 0.4111294372515455 0.08573182430599413 0.842768234573529 0.9796920300331824 -0.8552719071391224 0.9715803461450458 -0.5775113489467889 -0.5163401701989208 -0.7873991623153842 -0.8964722041893556 0.6809982633914635 -0.7338698196786599 -0.4204875111125175 -0.9921786581448773 -0.09694942091934067 -0.09471541211072232 -0.09915860320503245 -0.9821074393249198 0.4189470621265432 0.9190355295294945 -0.53737132846793 0.4783174641866179 -0.0697670748622008 0.8843353906028852 -0.3812598935213236 0.2225820802190206 0.41716664363796285 -0.7492829932785459 -0.8128009227779953 -0.2463491793924848 0.5187831816397674 0.5356464583295291 0.6109823715682217 -0.2518961789164835 0.305819623992432 0.046873049546845014 0.36706780514228243 -0.7287103975490301 -0.0504670207682516 0.3670528645620683 0.8494147729666686 0.2388077621788962 0.8761986208245462 -0.4280265061058608 -0.2240743535898393 -0.8201353820848296 -0.9556888284469098 -0.5509132963302377 0.6507295013699619 0.16125463750229807 -0.38469533999203964 -0.35116556808905286 0.7131267700555761 0.32477872374737293 -0.7494146948041178 0.4930438948546705 -0.08555694350084697 -0.7790636658526668 -0.336289522863515 -0.3604285203408968 0.7480734227739361 -0.2875429943552956 -0.21418786760750996 0.06888039251987355 0.5374993927368628 0.6858875468296695 -0.025062387067550596 -0.24961227886093162 -0.1439482604656841 0.8489600655165912 -0.6552788125459983 0.5017394919485467 -0.9800062723824936 0.17470868582644838 -0.6281055238643931 0.4365310428916025 -0.9480524070645684 0.3094167902433853 0.9900834246838193 -0.6558804816764967 +48 29 0.5262182538952853 0.3704115769605538 -0.44476391869340315 -0.9880462285013345 0.5031699414202282 0.0465187265644309 0.8501222597652276 0.6469361572541601 -0.7560557832196284 0.11504052714931468 0.8904687384610657 -0.6259522519564906 0.44367520546834704 -0.7341197746913894 0.8575160667327539 0.28212814467506964 0.6228769364494815 -0.6698490111462423 0.3639475639552503 -0.8434261675643873 0.8888332646262729 -0.8330179821928145 -0.9182431538198748 -0.7987049431081732 0.766586863962629 -0.2070453154679328 0.2783443566551791 0.041079928476611016 -0.3389874873316021 -0.7898978847803928 0.26690411456887 -0.7167499285281649 -0.5333247209353567 -0.3678887248417655 0.8753676069342236 -0.25980315334738147 0.9260129981649596 -0.30003310212581824 -0.6236832694700365 -0.23686563729223598 0.8830542725639154 -0.7505798607547589 -0.034213762419145644 0.7396129391924973 -0.9032393383706216 -0.6405917723320713 -0.45417478265355604 -0.3246535071928398 -0.3027582933248081 0.31137007325950083 -0.026366777114185114 0.1917707278092129 -0.9488898926482483 0.23426498216557246 0.2921935215737872 -0.020918384186398464 -0.07414993843336615 0.1808967616904391 0.4838742443790873 -0.7236846751108044 0.05075528170156973 0.5400460965413094 0.7599218779510366 0.30820950719065987 -0.031827675855803816 0.655905616311885 0.526873073580397 -0.20504539877432393 -0.844354356993994 -0.2439484734131372 -0.7368272199729304 0.9020298214382081 -0.7458743054429648 0.9069864582280323 -0.485404687223592 0.045981567570201776 0.5213193626216377 -0.346634563298192 -0.1513797407835178 -0.1106734704417478 -0.6982843763484805 0.951104699769749 -0.013598197897478848 -0.7523628073458397 -0.49566164260149526 0.7225607060051942 0.2337958171553307 0.750744163776536 -0.09778045549200587 0.2380097998490569 0.3908539101655213 -0.5234139067751311 0.1986605589163064 0.7914409631216472 -0.4483214588135722 0.6386054054122208 +48 47 0.8208832477427681 -0.866971195333013 -0.9380364773011565 -0.3813978933989848 -0.6085901391244819 -0.38960747245741123 -0.7143194409134026 -0.04982217162231062 -0.955447182003909 -0.1669855352638805 -0.5676126617182118 -0.6917755172730362 0.6294737217440818 -0.9903356464954864 0.7167541701665048 0.8366991928366241 -0.6916682879428162 0.37148727965170747 0.6102272952334435 -0.875275394105252 -0.39778104532638237 0.0062264620192966635 -0.07994289216887318 -0.005042456938031403 -0.16826949712967632 0.8986729648002321 -0.17275301144449062 0.27347550838957657 -0.4513731246064516 0.27794991637904864 -0.0408647529591355 0.686941442327401 -0.8729993217362435 0.8284351140115771 -0.1586495673915771 -0.7052449560711946 0.9449721616188322 0.6471009846359455 -0.9028355239557913 0.1644962498859972 0.1347443062379925 -0.4100782927065796 0.33443937075617125 0.0167778671184855 0.790832320958315 -0.8746887887919226 -0.22003117769349578 -0.8540390788523273 -0.38483975993337305 0.856534377305262 -0.19838495897012454 0.42700899551372773 -0.6167923474271844 -0.18744517229838165 -0.27233215837052493 -0.5907149149982112 0.5032117335594688 -0.5446542689693505 0.22579662562556102 -0.12843011183511255 -0.8097105286993114 -0.5105905996214826 -0.7706303287473908 -0.3963076609861127 0.05163394939398902 -0.48215699894995345 0.3057216361637982 0.23391001431569314 -0.15738120626161956 -0.9175032700057133 -0.2772165986612627 0.3811339499323938 -0.19918696423779347 0.6092344930502476 0.26056653448001654 -0.130256513543352 0.12057630221071047 -0.3088150529957996 0.0010332592185777756 -0.05979482163667149 0.024223492668951963 -0.8794349641903627 -0.13689904287689103 0.4708365402403787 0.2046398802595928 -0.35165030006658227 -0.34632948147736786 0.538811162718928 0.9709060836694008 0.1645667443522425 0.06743814759767819 0.4292840870432282 0.20575366290332053 -0.03921359554681292 0.9865859657873619 -0.1435415215969722 +48 48 4.471650124731749 4.357798117273609 3.787563453796401 5.328229767723485 4.43281808683566 4.693492330646322 4.776253754569689 3.2593190702336994 5.029455510250786 3.231816269285625 5.0962216830076725 4.856820622104799 4.40331751246898 5.304650794811577 5.03897909067782 5.263082857856232 3.378969658673027 4.36042501909559 4.320896100751507 4.2068280934129225 6.259120642712294 3.988759611687448 4.970946933217506 3.468975184836671 5.665661208621493 4.431022595767818 3.0446195731884824 3.9679623397803647 4.5519944284216125 6.268681744720297 3.8517879542051956 4.327320244274219 4.527306270153273 6.522834688710111 4.58865268251619 4.87371483138254 5.155363434200151 4.677689009139753 4.165445646325237 4.372524378616591 3.518290967967369 5.467970231361431 4.097364624496702 5.0807281494088015 6.5862896681212915 4.741175001117807 4.890762803438632 4.136984948770945 4.126069279450388 3.9239495074494393 2.3739453781001933 3.509124342312528 4.605434877567132 3.993154613631901 3.955283019585986 3.8119831609559904 3.4190102688686004 3.287599904314207 4.347374779362836 4.439226575386489 4.545397749252632 4.53882321453065 5.430604412484078 4.093711961056121 3.781183736489355 4.370277879811285 3.7173605915559147 3.099330268561277 3.6113762256452535 4.310037019349148 5.353159616596974 5.163158320325663 3.684852016483979 5.439196623832155 4.201851556396194 2.132639520885064 5.181094010023944 4.868738480498393 2.824102034541365 4.117218253772061 4.223267777939134 5.437808554016907 3.739650323008886 5.392270418144898 4.774307327325221 3.4976496256165563 3.806019814213921 4.836398718251541 4.458736943063059 4.019236206403109 4.678281548344472 5.1045211148810115 4.543755017278572 5.241050783940174 5.400134239761833 3.370805270423398 +48 49 -0.6157411444951923 -0.9437014849707988 0.11215575141731882 0.3992108378227017 -0.8141225268846417 0.6786300684968087 -0.566175427724946 -0.4238633794710669 0.0436628776415644 0.826239553655779 0.5004515180175846 0.22765151349777635 -0.9137544626628451 -0.3982691643343459 0.33490991267058123 0.21560657727299604 0.09526677216145063 -0.677865671874887 -0.6105150220779896 0.06535072446604762 -0.20020948193111288 -0.13579986392874055 -0.9788239801896035 0.23087058357474244 -0.8687538752939601 0.060347786215260824 -0.13695922726729282 0.02857285547584132 0.26392421365166574 -0.8306694208756782 0.3864462712652308 0.04102475441059328 -0.9517510409114474 0.6450215750586157 0.32455849068307563 -0.2695848851987621 -0.36678829377027666 0.45450811663443624 0.5587102002887394 -0.6356672093576652 -0.7665481633562727 0.994789084719159 0.8912412227670756 -0.7754453427856289 0.9062600954484958 0.9172853522683415 -0.17718874654192907 -0.100219531092125 0.6362324716878969 0.05190884151734587 -0.03279517112643404 0.07264346882383066 -0.9202519316369837 -0.21235339688538257 0.8718593352207471 0.638725588307169 0.05577332782776878 0.04286255283505014 0.05505111553929942 -0.9598760462572999 0.6291488505346472 0.5889809703112943 -0.9469635145142545 0.35921195012867946 0.3782806163503014 0.486499840870078 -0.5688971925055062 0.13726409717805454 0.02029940487456594 -0.9149067593369087 -0.17609827569887937 0.04279600258135852 0.7306350908926109 0.19326358128182464 -0.20257777614919315 0.25692327949653015 0.41671464259720237 0.5045618000320764 -0.3837522509828204 -0.9480692605928984 0.9655179876935005 -0.7940355725007271 0.2858589220346839 -0.8895015460449074 0.9068446839602522 0.12336384341192974 0.07376004417057969 0.2386466576538515 0.11751292840216632 0.5836490192594905 0.5603261058337521 0.7608255792237664 -0.225374817080503 0.9968173247169319 0.3530849048524858 0.024574785276344047 +48 67 -0.5185894697562707 0.04435536455486422 0.5668207304926529 0.4628799596861879 0.019342511040999488 -0.3927215044325245 -0.3716620236606136 0.5484825984993902 -0.04850651344053958 0.1493172346424565 -0.8778502209379075 0.1886702454299225 -0.8447854589345494 -0.5276062983838294 -0.7696505463567678 0.49226552263879286 0.09423656190493834 0.34658134372714877 -0.5472841817666261 -0.016662146699283342 -0.9484036325054026 -0.7193470552207857 0.47246650374362575 -0.2350208472062869 0.4249611426254809 0.48071081609690736 0.08144816499945828 -0.48782991316155067 0.6330395361589836 0.765165909611645 -0.8314718247361301 -0.4897191248187216 0.016588801235817296 -0.33934134446116837 -0.6262471354037555 0.9214916071284389 0.04242608904506051 0.9758483890340386 0.08594661636318834 -0.3935265505631411 0.07884602505834248 0.3523086571361955 0.9561687754282906 -0.6147386839115943 0.08425957277463114 -0.11385629824772514 0.4435891476230833 -0.20265808656217277 0.8819499684372423 -0.4628400202125198 0.103947454592211 0.3239772136213679 -0.22179209033459002 0.4367960809041045 -0.46226479507486573 0.009572666224587412 -0.3562551804844931 -0.5200708014550695 0.16507794371708018 -0.15042923731384783 0.7335473926735547 -0.2800767671534774 -0.5565994113939912 -0.39407146721664854 -0.25600357761628745 -0.8106987981320812 0.3077355781850746 -0.2715553208814978 -0.7805915282743243 0.2624313709695525 -0.7963180036853501 -0.7941483742655078 -0.5130731579924814 0.7529359194518732 0.24049586960473412 -0.038288762187444814 0.8270626918070165 0.745699704290036 0.11787618483953888 -0.6313190519067842 0.19253652218835082 -0.567070329104316 0.9175901309769374 -0.9314312942731069 -0.9644629977228454 0.19013549546681197 -0.4728002719260527 0.7120954520331135 -0.44979128548428515 -0.7261239706986344 -0.35528961151664706 -0.31849152964148164 -0.8451102473108236 -0.755073205080518 -0.3283718946139036 0.24903415913511573 +48 68 0.3356820354394421 -0.020037964222537674 -0.02069725096402375 0.7956156196721997 -0.130784810357077 0.5885342658839048 -0.7073665822078716 0.07505694829096132 -0.18962800341638353 0.6813817276967968 0.19525656673746083 0.780916831113966 0.0248698808921497 -0.4779135521528597 -0.8805035562962638 0.8719211395344333 -0.13528744899970735 -0.9011748199072471 0.7779336189773365 -0.3560747154092512 0.9824583044709514 -0.5203557995528509 -0.20811402444147364 0.9765762178033124 -0.13445388212952003 -0.409550320640629 -0.9217786294014512 0.992475693118458 -0.9938736738767757 0.7296583880441716 0.21680467157590466 -0.33002690739337015 0.7621356565882977 -0.9930938561040363 -0.7061959376692699 -0.3183748598102183 0.6738609420726211 -0.24229167557589792 -0.9274444406371711 -0.024692866628988952 0.08952173355830761 -0.7932691024402221 0.06641854929587976 0.5779940669782668 0.9836335583608931 0.32572528372565923 -0.6300741090119808 -0.3615595286182245 -0.43075599208851467 -0.7407653207405482 0.7224942715706661 0.43595133032199884 0.3192997170327292 -0.9429900344763569 0.03361415615644514 0.005689672116210742 -0.07795164721692438 -0.5086355852260063 0.8037784935507271 0.8935018510841384 0.2839778745314028 0.8716252039865238 0.3130800796836226 -0.8580371333671248 -0.7968424387064823 -0.8450197366301426 0.6803224401758785 -0.5856920759260682 0.2684037011401317 0.7870727294324689 0.7287990443800676 -0.9922225936445774 -0.005591506485483233 -0.9885374395753652 0.9269351957968579 -0.7522594638905464 -0.38888892580960754 -0.14260566643918393 -0.8435635639930168 -0.6529592510421414 0.9315809411458169 0.5806558395313746 0.6236104885591465 0.6128299288633912 -0.3395386633269202 0.1489606818882072 -0.35070676553205415 0.4661818817208112 -0.23363096082043833 0.7847423826476818 -0.5332412925043137 0.3603149249421229 0.11212681610644615 -0.1582223182026028 0.9426525877557788 0.05992043735719599 +48 69 -0.11787005494058289 -0.558272468880137 0.16130038030498728 0.5769067679107027 -0.744955819073184 -0.9556297512519603 0.012670725259409377 0.018684950987701177 -0.5983156449375673 0.7098528770198842 0.4321912251116051 -0.43082148333154313 0.7599217455083667 -0.13265763351545257 0.06026626381691136 -0.9343014756843544 0.13710121128220387 0.7021943859050199 0.0491806002376578 -0.25765830033328396 -0.8930987160530204 -0.11617616216910642 0.5458216673961773 -0.14293359398107874 0.9060064723129961 -0.19470982371112644 -0.10231424929888955 0.4464397339823021 0.24911876463027482 -0.800569402846385 0.3552843034257094 -0.8814900624069448 0.11141645164928726 0.8900416026659141 0.5269996569020945 -0.7554524561856109 0.9082439220344398 0.01908355076348145 -0.681798935511422 -0.3922427403529163 0.8786703065794723 -0.9729996062760082 -0.5300801192971025 -0.16617690733133728 0.9719185677042372 -0.07790884707774803 -0.5437218996576767 0.6841013923087569 0.2748706817243729 0.3674639028163933 -0.08736653166041286 0.60053029098653 0.3968832892295244 0.15695508118051782 -0.9777514439710946 0.6947995051963571 -0.9120923842610991 -0.7409324137883595 0.9822570066930043 -0.7975731712893661 0.15026622142562363 -0.34046636882751335 0.8512006869368365 -0.3841523793079116 -0.5860901740695934 -0.824906098340171 -0.22264679010612398 -0.47015492243810053 -0.12974633310767092 0.09264251212256869 -0.6060615708772032 0.17584899163993284 -0.4952546801190023 -0.41559885157444776 0.6129287442883078 -0.19744791746755896 -0.5821314087010421 -0.6021819728738602 0.2378622345496353 0.6145439750973789 -0.24119392966454023 -0.11017327714860614 0.41802063230771536 -0.5733015605319163 -0.6159992471774993 -0.1159047730853362 0.12052145168324668 0.11991522423060652 0.9826191985239638 -0.3881577689526461 -0.8773476554819299 0.9482708291159088 0.5900201803150842 -0.9167344496595213 -0.5328770525754594 -0.32273596067043453 +49 28 0.38165595846099887 0.7102497650440815 -0.5336748787328627 0.7165440087506261 0.08127821510324851 -0.1563695327151895 0.1841292066127329 -0.09533622762952532 -0.8218118830612124 -0.3715227139758246 -0.15167430218524713 0.5755416518274998 0.6928850788537326 -0.4584500959385911 0.10368490203527303 -0.15370015683676885 -0.10075956909337136 0.9734135668893251 0.41251995835371 0.24528088322163333 0.5108047027761895 0.44144288423296607 -0.6010645188296464 -0.928126902790146 -0.6314503220484968 0.4071108089106992 0.009211264778271167 0.38410685956707225 0.9523928099172105 0.42915553051944366 -0.004769216141564447 -0.5284265734322535 -0.3066571218418028 -0.3650263592905456 -0.04082760130838414 0.287050688239219 0.8027584406398385 0.22761858101266386 -0.0335542688673276 0.4080125671464794 0.12047025095607844 -0.056377884995275185 0.1432052166761164 -0.49463148641530585 0.895628331747234 0.8046725136159125 0.7002041303062381 -0.697350079309285 -0.5647217394824391 -0.0197206050375327 0.11372033044586005 0.576030306586147 -0.5557809981652841 0.2737792711288771 -0.25054489168980276 0.7313787323859606 -0.33813236331252594 0.17305121285239733 0.2700882976131478 0.9100560587423752 0.4242910218395781 0.9282592359615025 -0.9958171096522028 0.6991428892002451 -0.41360818567460145 0.07029214044420962 0.43920459237955645 0.8246794348561755 0.10780360526899879 -0.8154442556790411 0.6059757442385356 -0.48534066793187103 -0.6389993491953461 -0.5163987669893846 -0.6580890866671729 0.007823098259699623 -0.8358818909859027 -0.6925812965932354 0.26642464358090456 0.7870141053100494 -0.1243925521695648 -0.13358957187089904 -0.3410187872065906 0.8299630716205952 -0.43110022630449363 -0.04509206091114337 0.2955991602690391 -0.7936488512175672 0.5372330044331319 0.5346204772344016 -0.3534273094722449 0.1288229582425 0.9382387271756236 0.9410025689462951 -0.41258726263032 0.751341900645071 +49 29 0.06532457572552874 -0.001159063441841468 -0.030624375662567482 0.07055875174370008 0.3642173366649075 -0.35578603256554486 0.6022987110253151 0.33201394561617015 -0.8448512778902029 -0.08922816604190231 0.6950761074616179 0.4148774941858695 0.5558349584481501 -0.8265902914023158 0.3305230888901223 -0.3939128261496081 0.5991840010161869 -0.5130307442318938 -0.959878889668683 0.2829920365369514 0.8780065380025859 0.04572600395912718 -0.36334967671559903 0.07919636835270993 0.44569333395762256 0.859889476422635 -0.8873718702144944 0.16274956826324405 0.6514350334666628 0.12567697750470508 -0.6416426454233486 -0.5849239633896928 -0.9467877662054851 -0.8025634214650954 -0.17110504673554172 -0.6234278522184429 0.12350231333448414 0.6573796231543292 -0.32672106664969935 0.7143101192162229 -0.7458768350453013 0.2601279751668317 0.8125147279629299 -0.16130628042718342 0.45909505933261774 -0.18944940726545312 0.6582001858118705 -0.3639131506806115 -0.6011639511835003 0.7043066683119135 -0.1625469587238968 0.11210164598770644 -0.9814831197699734 0.03126846595708299 -0.48804845551781617 -0.15263125804489963 0.06470724772274705 0.42947121094988305 -0.3435304017390963 -0.527181704709087 0.567499752650044 -0.734350184490481 -0.4904770560268399 0.9733791895360557 0.35733189867372395 0.4321819391247921 0.32874934867003813 -0.07966787649003138 0.7259742452777569 -0.9537540528980604 -0.7699497106701447 0.548853991493236 0.7901064044926607 0.8709257280439293 -0.3234514008136189 0.5214712774309662 -0.61460858435219 -0.4879784984200015 -0.9264344652136414 0.5000921507633751 -0.5000261651739188 -0.23523922635745342 0.8662902481943959 0.8825766216580866 0.9532094951472216 -0.23913877077007362 -0.4635470364134482 0.9214508003115953 -0.40432719464643907 -0.8368637985156162 -0.9581412679149379 -0.19347206764716152 0.8282353565482863 -0.9683987272307448 -0.4803872345839644 -0.39242194745909464 +49 30 -0.6743506076899122 -0.28528816762956666 0.5496762855039377 -0.584942806645856 -0.2834571052338075 -0.05714806147058571 0.4197133291731636 0.22202462373130039 0.5055536853282858 0.1303508033565257 -0.06934097942909734 0.04985985959430894 -0.868673961187949 0.13125369822744193 0.903869346008864 0.395205150433509 -0.1313921843527559 0.26195003623487323 -0.9932507529060111 -0.6346009924590548 -0.9332392547598289 0.5648641014815587 -0.8470416763992705 -0.7835696846726536 0.33457204782776717 -0.005418380342049778 -0.5302993297635734 0.7882156777970519 0.08703103225468345 -0.023121941861873108 0.9916850831880968 -0.5357747185139055 -0.05955168611234041 -0.018000305949355866 0.7399621395558555 0.0005363103416313741 0.3140022583252724 0.8112976515934849 -0.636238630861462 0.8865227843911885 0.9554249190818458 0.8524438030770283 0.6365431803520942 -0.36197361546432427 -0.5155040656989929 0.7391769500916898 0.8195226072940149 0.25537530085951987 0.6105468772450571 -0.5361504439951688 0.6484570083864349 -0.8919719293883888 0.041497447573039636 0.8207991114908562 0.07207762419344932 0.8707346517291754 0.6140976677576058 0.6338461241579236 -0.7169442202877605 0.1999811411743888 -0.6525520537420084 -0.6937885392668961 0.2283949895808619 0.29398266133361206 -0.7437093344500081 -0.2558459656224805 0.10679323699482413 -0.11258414551851526 0.2713343240412833 -0.7278228953204775 0.49842384781318727 0.2549160622773974 -0.03809859263629645 -0.7028641451947022 -0.30930146473095665 0.18526105263690384 -0.9061484801806539 0.7701819940721293 0.15675655852732495 -0.19680791206517334 0.24174210130381057 0.8242534977757228 -0.8825179540463244 0.42688142601651946 -0.3648804565434087 0.6984433154012017 -0.6829161649962521 -0.9863253735158573 0.8074153152256549 -0.5476856231575875 0.8510617071243944 -0.5707450771176688 0.7767239008290063 0.9726255728363455 -0.44507771669978125 -0.023438183195864104 +49 48 -0.6157411444951923 -0.9437014849707988 0.11215575141731882 0.3992108378227017 -0.8141225268846417 0.6786300684968087 -0.566175427724946 -0.4238633794710669 0.0436628776415644 0.826239553655779 0.5004515180175846 0.22765151349777635 -0.9137544626628451 -0.3982691643343459 0.33490991267058123 0.21560657727299604 0.09526677216145063 -0.677865671874887 -0.6105150220779896 0.06535072446604762 -0.20020948193111288 -0.13579986392874055 -0.9788239801896035 0.23087058357474244 -0.8687538752939601 0.060347786215260824 -0.13695922726729282 0.02857285547584132 0.26392421365166574 -0.8306694208756782 0.3864462712652308 0.04102475441059328 -0.9517510409114474 0.6450215750586157 0.32455849068307563 -0.2695848851987621 -0.36678829377027666 0.45450811663443624 0.5587102002887394 -0.6356672093576652 -0.7665481633562727 0.994789084719159 0.8912412227670756 -0.7754453427856289 0.9062600954484958 0.9172853522683415 -0.17718874654192907 -0.100219531092125 0.6362324716878969 0.05190884151734587 -0.03279517112643404 0.07264346882383066 -0.9202519316369837 -0.21235339688538257 0.8718593352207471 0.638725588307169 0.05577332782776878 0.04286255283505014 0.05505111553929942 -0.9598760462572999 0.6291488505346472 0.5889809703112943 -0.9469635145142545 0.35921195012867946 0.3782806163503014 0.486499840870078 -0.5688971925055062 0.13726409717805454 0.02029940487456594 -0.9149067593369087 -0.17609827569887937 0.04279600258135852 0.7306350908926109 0.19326358128182464 -0.20257777614919315 0.25692327949653015 0.41671464259720237 0.5045618000320764 -0.3837522509828204 -0.9480692605928984 0.9655179876935005 -0.7940355725007271 0.2858589220346839 -0.8895015460449074 0.9068446839602522 0.12336384341192974 0.07376004417057969 0.2386466576538515 0.11751292840216632 0.5836490192594905 0.5603261058337521 0.7608255792237664 -0.225374817080503 0.9968173247169319 0.3530849048524858 0.024574785276344047 +49 49 4.7416008460081365 3.9873535367956205 3.159161882154583 4.518999076644914 4.099792558490954 3.430400772829465 3.4638843764249305 3.780058622736962 4.457899450931824 4.987113555185916 4.213925688016978 3.6041622309995613 4.503669940180963 4.6350669849686525 3.4924804160988074 3.3782996464621835 4.275180746044244 5.021520278702781 5.2524916434315685 3.6635557486882595 4.8878681131971735 4.348402356608702 5.444151107474893 5.197635843213772 4.6573962523510115 4.166611809116864 4.068636584496952 3.757917797121082 3.131684745376826 2.8503799394455873 4.396670072495604 3.4477957247027184 3.627116402779579 4.71028462887249 3.7565898994557134 4.31615479871456 3.2486476139679805 5.319987005094219 4.682095660444981 5.037163169127174 4.684280671385877 3.7165434096887164 5.2527382069313555 3.647199893441369 6.496961118778464 5.754268899444696 4.270475017904626 3.782511563302803 4.529106858446841 4.112311109817339 3.7388857003076774 3.802822205861274 4.3846628987387 5.0255655467795535 4.2724933311879845 5.237147255324721 3.7114395140338363 3.1730675305586145 4.139129093182911 3.842001570426803 6.068294471967766 6.098204382068432 4.392924582517396 4.919771778049112 4.606889718282488 3.4165008250216444 3.43323509639142 3.670784455299996 3.175826296532039 5.2172022335136905 4.8060100548058236 4.283860710311758 4.508996868012748 4.970917284748699 3.5415209324425616 2.875215831352776 6.600525252978025 5.024708419639708 5.305214279612204 5.124461281038509 3.4563218755726233 4.93752208757025 4.0000491964234115 5.1422356265941955 4.843977452424686 3.7505823689430775 4.365485267381953 5.134349526112743 3.941232936192259 4.698267952503984 5.74879910632416 5.52153544775457 6.424401741488599 6.724078009930558 3.8494127853779005 3.333473418193634 +49 50 -0.23892299559772545 0.07427026263235081 -0.11309448885662543 -0.676335940611271 -0.707613697588841 -0.05014704113324986 -0.23201375673206237 -0.9022523249134271 -0.13537529634346868 -0.9781874804846913 -0.2720114742466473 -0.7398185960731201 0.009119272975817827 0.7566450338967456 0.598237314057076 -0.5786439156230756 0.9925177328793577 0.5967074865469466 -0.5379448829769773 0.08715370030211411 0.7322650050065282 -0.9531999679110326 0.7325833700979465 -0.8453218804284683 -0.24307250783877365 -0.7612018503255498 -0.7790115927135155 0.9868083274576986 0.19290967438785467 -0.19458249342216782 -0.08442323570864807 -0.15044240062084246 0.11785130434187074 -0.9106106637830287 -0.46659226405014365 -0.9344662937803521 0.4386017824793509 -0.9970870017485585 -0.8996798391625176 -0.793770721192127 0.9611909194184587 0.08465835531353716 0.44649038614386694 -0.28080292872052603 -0.5351461713028434 -0.9047829206285825 -0.20765060907531363 0.7123658028869975 -0.7874136625941268 0.9387303989694229 -0.8767789053442983 -0.4816564205981657 -0.5068767042790294 0.46307515605715954 0.6611953146899343 0.8884820959800921 -0.9882708964813591 0.826751102699961 0.8411957204245719 0.0012763450885744376 0.5959797655354839 0.39898864180282345 -0.12750720145991856 0.4391245226209517 -0.04825041397696905 0.9142256925192755 0.13823278914863057 -0.24232402476321413 0.4276803526304338 -0.08874493464109756 -0.916162747647937 -0.8595972825277252 0.03856801300377222 -0.8580184860900517 -0.011433769015103401 -0.8186694611191618 0.828945512195032 -0.7283233327756362 0.8834917394859898 -0.4026016689511658 0.2844680405182851 0.9790248403940649 0.011739023304441876 -0.7156164734461505 0.6456261557919589 0.37301311504045054 0.43821516855692066 0.2041172830170359 -0.13878132155868594 0.4165544859605528 -0.21215834629115315 -0.9459410521909646 0.8761646812825203 0.3455805022830476 0.18664272495362555 -0.9112446525863285 +49 68 -0.5078070292076966 0.33086510865021923 0.01713349660172736 -0.12014973851285848 0.4653414480517786 -0.7147893558223415 0.8049339731438561 0.5137853281763711 -0.8241002161048028 0.6799762641959346 -0.4300632701941558 -0.27498458361859157 -0.5788195465564072 0.3886770076092654 0.1218152823996208 -0.7516897707368637 0.653575244380308 0.17893199119192071 -0.5239298289877452 -0.9332925164794443 -0.8713981812164697 -0.6627827745565813 -0.23252850485590493 0.7679338491913787 0.3512160367404009 0.3399838474599175 -0.6743940969664834 -0.3547048417896159 0.18807008116400792 -0.10828041594059012 0.8645956865928655 -0.515932068103512 0.003482775084581613 -0.46204647383949626 -0.3282327719452971 -0.8681434635407739 -0.12290102114918788 -0.4731223170637613 0.5787945308075493 -0.4153217468833932 0.15868167272838218 0.7987801963262111 0.6740947782304851 -0.42252520138431326 0.9759243046221002 0.017084330366879952 -0.907154357827187 -0.8690987438430064 0.25992249687842195 0.42709477204136803 0.30590516126232625 -0.5088603557408926 0.02957280012232033 -0.8091680487090072 0.4711406606741182 -0.5693927149044493 -0.2182902588447282 -0.038363013237766364 0.7960237451081456 0.23068136735764577 0.9653790791250916 0.9994924508446499 -0.04750179591957049 -0.9628257686765525 -0.7501167485841538 -0.338508857623937 0.7812406552737243 0.8663876159497341 0.01666270125964453 0.30935418201289533 -0.7193697095991767 -0.7305342251397695 0.980167995979855 -0.3446226554406797 -0.17913761691549812 0.2043176647095608 -0.8174341032459278 0.1459076171430278 -0.6716992574932512 0.8110666709020924 -0.6623298477407698 -0.7336685704061083 0.38720052710462993 0.6850727747299474 -0.7638758761834745 0.6727946259614679 0.06687075921808994 0.2933334187685823 -0.3066430387696666 -0.35175310878304855 -0.5524508099215997 -0.9334529695266656 -0.5895720087371299 0.07223319602596123 0.8049622582169584 -0.6840674686422901 +49 69 -0.8654134461936094 0.5014199408496263 -0.6388002724344197 0.7016792405633625 -0.09642848083334332 0.2072898721371803 -0.09208043199574645 -0.3414220755255313 -0.1446954362877575 0.39692931665889475 0.945355002799459 -0.5157821481473905 -0.05493158491787686 0.8175688600035704 -0.6486419585901622 -0.19346634795073192 -0.9715688780464156 0.5381100929317637 0.7436090878999373 0.6009750885807661 -0.19725540643870532 0.4763084121098262 -0.8046126289953954 -0.2697846119937961 0.8849851902764212 0.38179277693140135 0.5114797684412715 -0.5940297073945844 0.40285568290693363 -0.20436873918445886 -0.4197579003116889 0.5337976828665314 -0.19470849317060135 0.7049771332917825 0.2507191745552386 0.043613107696488074 -0.368867512560868 0.6889476601329485 0.6954811866750179 0.03232409560816807 0.22428424745012698 0.2711200878756632 0.4894316239228289 0.016144952149875547 0.8881541740941519 -0.9279331445078611 0.049115880375809606 -0.19394448382023577 -0.35339904585814863 -0.7064697588744384 -0.9377734025178373 -0.6036012179001924 -0.36633482815106033 -0.9533661843103483 -0.6890798641459503 0.7971173778595744 -0.16220992235050113 0.2760317349424133 0.111959804754167 -0.6145035169067978 0.7735253171447709 -0.8278587337982697 0.4492585777246587 0.49397181880366636 0.4669357873001849 0.07528330563305752 0.993878625670074 0.05371835681988091 0.36400222748865096 -0.23278273237096903 0.7254441796247328 -0.48427370385953683 0.35815457130233885 0.43968755732010156 0.7165588142443928 -0.11661555940384094 0.6465938865914156 -0.7266760364734994 -0.8371253875104931 -0.470353732681849 -0.12585480419518347 -0.8101518793160067 -0.19808268289221198 -0.16570888804446304 0.055490997128209374 -0.7048938537793483 -0.5693045461579209 0.4458695839184217 -0.06223510398302601 -0.6954794264361763 0.9594201668296249 -0.13653191416743082 0.9365276690964248 0.9188623193003613 -0.3146032538719503 -0.08579849815621365 +49 70 -0.820967034789629 0.9712361292144469 0.3507362007473973 0.8544086746317301 0.7757180270751212 0.7883452800457496 0.10315921906517045 0.23876149597706786 -0.7297765042344644 -0.5882604579229513 0.9585905963185795 0.24159815976421983 0.20689945167153811 0.7139682428431824 -0.06552418424740925 0.49141765547200866 0.5585872595821304 -0.4266652555857975 -0.46264941439748397 -0.3213954292331136 0.42884472555757713 -0.5229711014036482 -0.42762667674381794 0.7373413542213629 0.27198817077000315 -0.6494799507393147 -0.055492466765334925 0.35115049129333187 0.2950998333503341 -0.15751045008201103 -0.37997639095335334 -0.08863515425961221 -0.23014081969163813 -0.26433065076461437 0.7268519065944916 -0.5695954317662533 0.6362212534837999 0.4247485800307682 0.7075824713396301 0.38952648352994723 0.42299713871455835 0.35528351361647803 0.2570685418978744 0.4738518227992454 0.7730867304466524 -0.32481122396653483 -0.274437921017751 -0.12527073124621513 0.30027700814681135 -0.2872881634704849 -0.45947867475012205 0.5095177819148144 0.9688812089824073 -0.4695075960828887 0.09280796871030539 -0.19731573844491468 -0.308278928313221 0.10738254204540687 0.5133211638325541 -0.37338757613821505 -0.5250830239825672 0.036348356990610675 -0.4626752740531248 0.5996161822944723 0.8794920548745926 -0.21844023509263666 0.04980355907761225 0.5262111670988101 0.8150417921911721 -0.5442638206488506 -0.356184589193302 0.8692526376050225 0.48833169279279875 0.19118701277397276 0.4577121603742953 0.2589556978777603 -0.7340550172622364 -0.04448005551192358 0.6484505405189349 0.549351055819612 0.28423716263542165 0.11110870236907644 0.9120134592514497 0.3087375579406506 -0.03639024964241311 -0.043318739068983536 -0.96564469220246 0.36309519696989945 -0.9417341284138212 0.47356224933478575 0.49252365482589333 0.9744597872089276 -0.364899281037679 0.9342406949758346 0.5565499510157699 -0.0080676661780954 +50 29 0.3755927759338453 -0.12027449025972903 0.3209026547931628 0.7339968099839225 0.3865761095498066 -0.059665063300769594 -0.5622907697387234 -0.6274732396143021 0.5665299573207456 0.016434860298829346 -0.547916766506817 -0.634469919015215 0.014246085298779576 -0.7043054412454692 0.17264071969233186 0.38141548934371405 -0.7188181210136464 0.272763956201318 -0.13522802619075347 -0.7445860122859311 -0.7412680632942477 0.025996527411633608 0.3974526136722343 -0.43006272248051114 -0.09566115541755282 0.029005083741502347 0.4728694025868019 0.26505076537965233 0.8609264354168629 -0.8317130367255641 -0.4459093728319816 0.48642502212069627 -0.2555942021777404 0.26522667703550296 -0.41871664862355695 0.7305568324246825 -0.9603700205907686 -0.40781023505784963 -0.5120235642644297 -0.45826014937471027 0.9432976878937696 0.010602251427694442 0.057963603402087616 -0.8577326531695073 0.054488144290045115 -0.2696884319452708 0.35016947286044475 -0.6895575527872133 -0.5791346441591123 -0.6699175835629831 -0.5754627886732764 -0.19560205010368148 0.07825054372930862 -0.5001575324731511 -0.46109094469833023 0.5102563961283577 0.8009472403083355 -0.8811697050778562 -0.8490339231657102 -0.676961281796564 0.3843247132934451 0.12178577586498363 -0.2590837072283909 0.8041850090390819 0.10978788407842677 0.3001758194000097 0.18419186895634776 0.9793279702072746 -0.18298341539112783 0.3037075177141133 -0.9515834540123378 0.824004510340443 0.27019537953581696 -0.14625844155937773 0.15995262931409404 -0.4545222467034773 0.5940384323060777 0.5332005342353197 -0.7001335308842305 -0.1673807072920963 0.5827761774866385 0.9691175417268669 0.4540562091432414 -0.7316649792105938 0.5641271223176472 -0.10251185625029624 0.44739841057135266 -0.11860493486235546 0.44928088304424163 -0.9457661349732203 0.1551864245914083 -0.6248863377967444 -0.991141774478022 -0.2762520696738051 0.6006311386204783 -0.7380708840920465 +50 30 -0.3901010721272251 0.18034085898367302 0.599614399674419 0.9770385467646834 -0.36820715865471 0.7945086407161186 0.27512597026825025 0.49532558240482105 -0.23594512235399612 -0.9072063758973312 0.8945503705915001 0.5587901398300268 -0.8289085116753498 -0.1595260143600612 0.15402381256421083 -0.2729892256912585 -0.32740546083212196 -0.32471998610430775 -0.010951771768807239 0.23376763045995075 -0.4105696307758815 -0.8904769081111206 -0.3240226934352768 0.6643370801695057 0.5886639052452081 0.9851830770135461 -0.7082433295675044 0.5771511180845896 -0.9071041808360445 0.3188843035047988 0.49570291313621473 -0.2855168350961954 0.2788483914552622 -0.9913768990546823 -0.42174200946317675 0.02834372450828737 0.5647572441948872 -0.11728387718047117 -0.16528875001429366 -0.5519416329794278 0.14059014453321983 -0.7622299139963082 -0.32299904312097993 -0.9178800607740962 -0.17247257000526073 0.2644704727271583 -0.7395928105070593 -0.4243401383552379 -0.5765116918461151 0.8275371669614902 0.059830441928474976 0.14514977131181506 0.9017282125032209 -0.05031041926750146 -0.5820582622514114 -0.12359284811557592 0.8970053174364665 -0.27627382035046644 -0.4782505095642664 -0.9183983617605513 -0.5146634698285599 -0.48813241173460153 -0.11138173590248823 0.1986874246338337 0.5446205134610194 0.241884273564283 -0.29547887549413887 0.5895026713604488 -0.7964926096764324 0.8812017787777351 -0.08657180171831835 0.26383179750968977 -0.5137846993619233 -0.549005481097615 0.938924011251334 0.7267949446701276 -0.7990539523144033 -0.5302804239412813 -0.7185974106412378 0.5757967363626619 -0.25559569716506503 -0.33601923717088855 -0.48563721682314864 -0.45966184043161684 -0.42575833681231123 -0.473723377889147 -0.622477365979601 0.817924307338848 0.11013403497259078 0.33489219400180414 0.43428626802612036 -0.8136395437851529 -0.08509382539473087 0.8182794507441826 0.0565004019304729 -0.27907218101019016 +50 31 -0.9522529783353457 -0.8333258210073409 0.8090883842525354 -0.22943323413813532 0.6745032550521781 0.6591662786967731 0.09899182022403274 -0.365598791905841 -0.7730588985509343 -0.1023866097305055 0.3545297284817932 -0.31606668634038626 -0.48227314070028804 -0.030382588287001466 -0.2916691913638809 -0.17690821217818953 -0.1679252841682748 -0.13922397306743095 0.2541832240478028 0.26452686357181454 -0.014299310709443569 0.8691721063609987 0.49752504388742835 0.31544034980164604 -0.7557428427526853 -0.9316214834097176 0.562928661340411 -0.5059300723562199 0.5129210145613787 -0.9808038267675512 0.8618219767149768 -0.8634383908222913 0.3784116470015497 -0.2326771030831687 0.6786839229126256 0.0638320298868349 0.05121823566633843 0.658057345042492 -0.7296371278074307 0.4402836077516077 0.3597709835720666 -0.15911381857558382 0.5397447015798986 -0.03458227627475363 -0.9269865559433357 -0.6878622225338107 0.8224148205482193 0.1591971464193329 -0.7254633907803465 -0.930843071634281 0.6181315398144303 0.4619435009320114 -0.25492429485619317 0.9840591973473756 0.21593424276060436 -0.7776477932331154 -0.9103118062103535 0.16935508239017838 0.47149806589148846 0.993634975918513 -0.03609382441071585 0.0030457804663435173 0.779539639522925 -0.0075683752797397474 0.9572847652568974 -0.4293901512092835 -0.9508815049292698 0.20430188598891275 0.6721847508033221 0.48096708441570657 0.38789294236925675 0.14906066841501797 -0.3676570552817955 0.8387717702047317 -0.004123997410119928 -0.46823221671571025 -0.16841209107843036 -0.7053200337100849 -0.9070103261427189 0.6204728276437153 -0.06905618798945778 0.0579049472188089 -0.12861867072641142 0.28364652216995356 0.7500304910550928 -0.5624363813013713 0.219618548945274 -0.0668522731230643 0.7868887264895752 0.9842795465436209 0.2243757084091682 0.4794845370339642 0.9076561224982662 -0.07551016946219113 -0.06093772062398917 -0.3628305089157564 +50 49 -0.23892299559772545 0.07427026263235081 -0.11309448885662543 -0.676335940611271 -0.707613697588841 -0.05014704113324986 -0.23201375673206237 -0.9022523249134271 -0.13537529634346868 -0.9781874804846913 -0.2720114742466473 -0.7398185960731201 0.009119272975817827 0.7566450338967456 0.598237314057076 -0.5786439156230756 0.9925177328793577 0.5967074865469466 -0.5379448829769773 0.08715370030211411 0.7322650050065282 -0.9531999679110326 0.7325833700979465 -0.8453218804284683 -0.24307250783877365 -0.7612018503255498 -0.7790115927135155 0.9868083274576986 0.19290967438785467 -0.19458249342216782 -0.08442323570864807 -0.15044240062084246 0.11785130434187074 -0.9106106637830287 -0.46659226405014365 -0.9344662937803521 0.4386017824793509 -0.9970870017485585 -0.8996798391625176 -0.793770721192127 0.9611909194184587 0.08465835531353716 0.44649038614386694 -0.28080292872052603 -0.5351461713028434 -0.9047829206285825 -0.20765060907531363 0.7123658028869975 -0.7874136625941268 0.9387303989694229 -0.8767789053442983 -0.4816564205981657 -0.5068767042790294 0.46307515605715954 0.6611953146899343 0.8884820959800921 -0.9882708964813591 0.826751102699961 0.8411957204245719 0.0012763450885744376 0.5959797655354839 0.39898864180282345 -0.12750720145991856 0.4391245226209517 -0.04825041397696905 0.9142256925192755 0.13823278914863057 -0.24232402476321413 0.4276803526304338 -0.08874493464109756 -0.916162747647937 -0.8595972825277252 0.03856801300377222 -0.8580184860900517 -0.011433769015103401 -0.8186694611191618 0.828945512195032 -0.7283233327756362 0.8834917394859898 -0.4026016689511658 0.2844680405182851 0.9790248403940649 0.011739023304441876 -0.7156164734461505 0.6456261557919589 0.37301311504045054 0.43821516855692066 0.2041172830170359 -0.13878132155868594 0.4165544859605528 -0.21215834629115315 -0.9459410521909646 0.8761646812825203 0.3455805022830476 0.18664272495362555 -0.9112446525863285 +50 50 5.027841552877743 4.63540966330263 5.201413551999503 5.552329350818226 4.524177629742193 4.287144047704349 2.513717289245821 4.553802981347522 3.996316358815676 3.88458807050666 5.331655506387055 5.106663208404228 3.8020922674879434 2.3608953751771793 4.056165830096988 3.333761575412095 5.549315101582469 4.326241333731834 4.967471921841424 4.981770544057072 5.127263398318144 5.415669197897902 4.291566983857391 4.4615137356398415 3.9294303755241486 5.494799635299162 5.319725084375703 4.725921859565593 5.297948765696654 3.6475995893246975 4.883262352726328 4.31588562355161 3.8185321156245973 3.9038394717819833 5.135189123401592 4.638545779491466 4.752351592991328 4.496316535409457 4.702720346727695 4.242730481487305 3.6079601634714185 4.618574109745381 3.2998824660928427 4.096170351238217 3.1180555990467878 5.537819358877324 5.414820238572727 5.318128110436917 4.731744069556493 6.155549978294269 3.994584816303584 2.3866677647911865 4.291883413428693 4.904726110572959 3.9676378315363268 5.2617277722170295 6.784050453174022 4.610624557799881 5.788506355850446 4.131586313752272 3.5053485510322657 4.718133550005457 3.584105394421962 3.5762608284542408 4.832639300211451 3.8444835018483614 4.484193964980386 4.421321236998544 4.855845524670459 4.185661895189621 5.107735724101794 4.215986159890179 4.678207547572713 5.122470551244492 3.6397902112857223 4.516442098006043 4.053937450783865 4.757973394378298 4.942450392390272 3.4001927687393083 3.532732065795457 6.301928492172535 4.197133428736328 4.274263692582651 5.818251650813059 3.718006313682201 3.565915969520124 2.9382358925918823 2.8463948059580204 6.279456479119046 2.3814288231107548 6.1244830721084025 5.386355059063673 3.7572985714629112 2.833653760998806 4.579531640051261 +50 51 0.33800025630842767 0.7124578227060381 -0.9587500163520901 -0.6873674962449219 -0.254899407345931 0.38926470588471607 -0.08664064555068185 0.8140438882873473 -0.6905425356137853 -0.8185886235013806 -0.7301888037542521 -0.2433496761484648 -0.43732170978583396 0.1345209000600558 0.30904095276296095 0.8561230480852549 -0.7448225564405593 -0.5258444515321834 -0.9143729801634237 0.8124607579636298 -0.7765358424196893 0.5115473180084686 -0.03108868366619988 -0.16264336490494657 -0.7058812957448537 0.8721984584370781 -0.7211631753724017 0.3589860856218574 0.041359668688098816 0.7036208134932389 0.7649955433556881 0.9801859697301134 -0.5702819293031163 -0.308564091912064 0.8469305034249615 0.2714033046684543 0.42888659487288905 -0.393028591544192 -0.8050953158477521 -0.4080730028604169 -0.12090132475160975 0.940836273115395 -0.6432438693914999 -0.6260658660408451 0.29368393062762066 0.8714722404070334 -0.644135104723423 -0.998560451115386 0.22684048824910508 0.03685300264911473 0.9195127774734593 0.6542824698058309 -0.8818998447398501 0.8612288295070292 -0.22257137485181788 -0.19919533721158222 0.8684652480897586 0.5783707540368328 -0.38434918153029374 0.1372322935297421 0.27437337037974996 0.5334580822318866 0.832389894377731 0.7999378283253278 -0.5043040159791421 -0.5198386266549375 -0.7231505788026049 0.3877411406944906 0.3370049627614009 -0.7062742682174235 0.8187787381308416 -0.25410282165614384 -0.6536553682071564 0.6871405682240501 -0.11345945749258823 0.6099892578438146 -0.09261795285267005 -0.3951760951926444 -0.16366848913621213 0.10080404660411446 -0.4556143005910558 -0.9402190072671508 0.7852726508992645 0.7389509926008471 -0.9411774659821726 -0.5167201418731502 -0.4682539459233215 -0.29122229555312606 -0.06589257106258017 -0.4726704273426505 0.3652554438177942 0.8261274980844537 -0.40739327959615257 0.48810489871551077 -0.0011477190613895516 0.7035402702747056 +50 69 -0.9016912297854232 0.9244626911923386 -0.5911410410895104 0.23680284989387945 -0.7697597601545172 0.3955810011885439 -0.2823874212941051 0.1715815238926941 0.05228859808419428 -0.09555264483626691 0.09455868837280068 -0.4239586175365875 -0.5234458340354051 -0.2828126376025075 -0.7066643585426229 0.3542905834009624 -0.5133641629999275 -0.8773428249066635 0.942432991280215 -0.9478252956357764 -0.5597829626696083 0.7966191280453077 -0.6982063107438383 -0.5873839200476181 -0.5377013112602971 -0.19561310870997817 0.5828851100909267 0.9075376317184312 0.2747242883296477 -0.11452311576519669 -0.7609402226637276 -0.44918559696303695 -0.7532113433411076 0.5944863996246392 -0.8259558016006088 0.7531798000961187 -0.5895276173319122 -0.093061706701697 0.20153135640306652 -0.2866961800439949 -0.5234993759074087 -0.5273279966838933 -0.0610981637713961 0.3763773765765994 0.4038398543170332 -0.9190506080593186 -0.37063244294938036 0.5974398221928272 -0.7285493055863073 -0.1482726763509068 0.044660258427372757 -0.08129270215895068 0.23512667364124273 0.09442817067952936 -0.9367642616154255 -0.4130567751557115 -0.9403198566356854 -0.11945932560009953 0.5944207023532218 0.5089391260308815 -0.4166504883066471 0.9111404237020855 0.12400846645317642 0.7264684733506865 -0.991232011636132 -0.38486202150786486 0.2958758338919325 0.8782771852338749 0.29542209313412227 0.4317513321731079 0.8828299448335486 0.4770780439554885 -0.6965275214633535 -0.3151004003582538 0.6725782742507638 0.46608477014854177 0.4632099813064181 -0.978470116811365 0.009878655267075986 -0.42453071721033586 0.47230705444445875 -0.9493100833844226 0.9247217520623645 0.9449283727259263 0.74553740627576 0.8143250592387721 -0.3603503536016921 0.19155488801006815 0.38742368622139534 -0.9736034758777328 -0.4665361385511333 0.78032287384093 0.5920343458620407 -0.9390316313101397 -0.12892793568050376 0.5687034824885191 +50 70 -0.927788169598859 -0.9809189617635317 -0.6704084791503104 0.5776082999985195 -0.20463843898698109 0.3378379484817613 -0.2551445062646711 -0.06083541214595867 0.6543322361347872 -0.06708384910340048 -0.6345105156231297 -0.9847174843477566 0.8250800802704539 0.23338269021666824 0.8805793845877938 0.1854479949358585 0.6951131697445228 0.5641394003821563 0.3698398293131011 -0.7498196327594269 0.8141764312193598 0.48649638014018404 0.3371842730891119 0.2589763738702424 -0.43064538869065916 -0.4757134210028544 0.2930884528361597 0.7399279589161445 -0.9563372663533938 -0.003003515789904432 0.8231844654357596 -0.19290562534179667 -0.5562943301851542 -0.26928962691877123 -0.08086894441648673 -0.7645599986769154 -0.5999496559759796 -0.42107955924913965 0.6628516242949221 -0.263175997501238 0.08596288619861592 0.46487869540651316 -0.42113100758448185 0.5810238672834271 -0.44294215049906627 0.6720869658978874 0.798225842055974 0.6265863434921279 -0.9388432710385879 -0.6573262671231257 -0.058391565520370836 -0.26297471707387254 -0.6362637349919031 0.23129143635291527 0.02401158357223432 -0.7254757809548171 0.2358137581846642 0.5420471323149147 0.589874570639813 -0.19013374656615634 0.6399335210868333 0.9569685117720208 -0.4826756980881972 0.2226530266801947 0.5911533166324134 0.7101735069529092 -0.6887276053115696 -0.08640476072791059 0.8768205880967517 -0.4061547051096588 -0.939062737077405 -0.6817251449342343 -0.3553765854503008 -0.7574553681585292 -0.24938958829313318 -0.03350241578845092 -0.7792734881030123 0.18602063677610015 0.6666819763962979 0.1651751592603674 0.6491943354935505 -0.48327871316084847 0.6700877081459278 -0.053769537064884965 -0.662966572945564 0.3282799230771971 -0.11285755657223895 -0.7685842617253698 -0.35663329459290427 0.8659656847373614 0.19893308845538837 0.17573104000911433 0.2729522467911578 -0.21133597297412243 0.6580677912242736 -0.7729412474119601 +50 71 0.14904663090741832 0.3594661561451027 0.3616736288446907 -0.7445786670503034 -0.15987445766810215 -0.9236853911156351 0.041460019802099124 0.9417039482570402 -0.7160157357983439 -0.6284613358165811 -0.9394159047465347 -0.8520873335209322 0.2067204496328512 -0.02683066834228831 0.2811841649184901 -0.2073270964629481 0.7163391993956298 0.0839865362236667 -0.9699577865003075 0.9657860152710187 -0.9187971678897688 0.6891935919785264 0.5951825717665384 0.2990697859735636 -0.2570936101634753 -0.6786849366486851 0.7383634895916895 -0.37487588633201874 -0.7239466180932583 0.10493636135233286 -0.19780785954480917 0.5422690607148077 0.5912090088640074 0.11757549717007443 0.5420321279103268 -0.10506930622116117 0.7891623481686096 -0.4334797516261748 0.5084381330496164 -0.795716163469794 0.15344266244446159 -0.9649349760189843 -0.16046373890042664 0.35217512223729597 -0.194082801276648 -0.5777110494044759 0.9823082601736364 -0.4748720089002274 0.16410400916747792 -0.9832246095028312 0.7247559638129313 -0.017584036797133606 -0.17517133071383117 -0.9901983983735807 0.12219649556639145 -0.8538169579607942 0.32437883507721677 -0.2930025873133466 -0.9349570430832725 0.4616114827570297 -0.2553489809646552 -0.33464705799191385 -0.2862775266424691 0.2961791038852153 0.43344676796767856 -0.2392749032714656 0.6240008831957915 -0.689137376236926 -0.4715897441786896 -0.40823005452140304 0.12477514372786946 0.7009196472824832 0.8272116420977009 -0.04873553052045665 0.6947354386570708 -0.11823649766975142 -0.108787389424017 -0.17797471221713668 0.1921859453712167 -0.6156144641915684 -0.46321784839238633 -0.9821971103810592 0.105021822881743 0.15818088852447398 -0.8707639291548488 -0.08929078292564174 -0.5755156301251176 0.04475563185017206 0.28320929976296916 -0.5489900672056516 -0.13500351624108342 0.8898405191147227 0.4944543711465703 -0.37988820120537525 0.935919165263601 -0.002588815946659384 +51 30 -0.09597095774516395 -0.25207469952662365 -0.7461400054162681 -0.47569166845267064 -0.07991661017261054 0.3057992896114874 0.46776946012978926 -0.23308770960347158 0.412340718798446 -0.9243569326398078 0.2916400149779754 0.41272001639076117 -0.4149437702363814 -0.6438794630969846 0.35887536775232776 0.8086360803256736 0.7408514940181472 0.2858777130922352 -0.7487223600579107 0.3571059657229172 0.9801678765683581 0.2788335993416331 0.5706017323893886 0.9017686065051207 0.4114864474380193 0.1254603774859313 -0.9290214160072139 0.6008048140539606 -0.27305160794529315 -0.9323551838080404 -0.37440673043714523 -0.1574817272875748 0.3903187086308264 0.5390235140767385 0.42434702640041366 0.8648052249268203 -0.1113521513582334 0.9296219629037374 0.2496459422652595 0.23462441649035015 0.04754030056222969 -0.38388084356994967 0.16135777456004874 -0.21920354776698825 0.46649407634061824 0.416426104070714 -0.9847344074319331 -0.43627762305179685 0.025672183190288633 0.09812978047694454 0.714799581924423 0.8844870373377964 0.28260517728446044 -0.7610264127893835 0.04159770128999973 -0.48854284102006895 0.7786813893533222 -0.23835952083737855 -0.8209520421952599 -0.8959594075834636 -0.9426633898312666 0.11105037569383325 0.38582735194743 0.6993551731384116 -0.14986578026438235 -0.7647115373490907 -0.06048851572631775 -0.2864961358899205 -0.4835625025949961 -0.16845086085790983 0.4098698421606026 0.6477945140605639 0.5924998633155911 0.9879775250669336 0.4760182164809996 0.25085380900733223 -0.29140314921683985 -0.4012807630619357 0.3532309261148563 -0.9013453495539732 -0.5617549711213621 -0.644544520042033 -0.8395574263929344 0.749886122905141 0.47902570839697534 -0.3497566697133083 0.8301541732359987 -0.3430203668072296 0.17914019657075198 0.9846257216187586 0.338329246672169 0.701844678713829 0.6367782233693191 -0.5007420327818797 -0.8427510660673416 -0.2445952958496107 +51 31 0.47364429475869385 0.2540280769168237 0.4652196702594886 0.4619415433135976 -0.3116819514399667 0.47913525676763946 -0.22662665626195055 0.08439590996572788 0.9009751860126631 0.05874613639259629 -0.7413630277144725 0.2173345247115981 -0.23634875398578936 0.1090572992604073 0.7268820732236454 -0.6456616459597642 -0.9831249909184372 0.20738006422256694 0.21933004738557837 0.6338363802024412 -0.4829859430440946 -0.028996580882042045 -0.43673972752900037 0.2091363410104241 -0.48081598199502373 0.45778698026386033 0.46354784989407793 -0.25325044634225913 0.6340833827268495 0.021802612731498083 0.2338241690874292 -0.9362884375431004 -0.8975263000264433 0.10546413412785083 0.9227148548995943 -0.26909218356377496 -0.02102795444802985 0.03869072607669066 0.9839355197958117 0.4439035878205595 -0.5708413214264452 0.1515977599756011 -0.34007532549121655 -0.9237185811727722 -0.7525512313848244 -0.6550118084918783 0.3724275513236961 0.33421069576886486 0.7853130147133109 0.15372728445556927 0.5141264720698042 -0.6754707892369736 -0.24245137208700496 0.5486942780821695 0.09452292271738116 -0.4132099115679655 0.6982853020107354 0.6172045059549214 -0.09481577150002396 -0.15193178337214563 -0.03293438494432066 0.05386274336009733 0.18728120536893633 0.4170531929991703 -0.16023553143078262 0.37591268386788745 0.5368659713017991 0.3587071174744958 -0.3163810205748634 0.923625913634945 0.8314439018396476 0.858054847208527 -0.7295904103590116 0.6738928429236786 -0.5862505085285266 0.1400946254504596 -0.04594697527786962 0.9546595143141416 0.03415556233336403 -0.5425685191671221 0.7863090606322896 -0.6067557399010926 0.18668666412803714 -0.27987547378828825 -0.04232806705722236 0.19240205376154584 -0.01110053617367357 -0.5638037621095371 -0.37709149257780505 0.617634719790257 -0.8479961309174471 0.29329681602053226 -0.8534989622040161 0.08838098700193786 0.2769324946102909 0.8668020277944719 +51 32 -0.9737692894576995 0.6141432398632205 0.34088927518433887 0.1321647688237062 -0.7042537396164832 0.020513874039954194 -0.9526669857050718 0.8909047180122429 0.5261056714354311 0.9330967651341349 -0.9030512772198722 -0.515150383473411 -0.5234108405747406 -0.436419403841243 0.24839120672435144 -0.8929707654666248 -0.40437609044068523 -0.3277704916523505 0.8037574983110403 -0.5900964832914433 0.6995559810522738 0.6509575083819701 -0.7952964160616602 0.9305892893518426 0.7411150601422203 0.9816825900843114 -0.6985220012780682 0.8243138625560729 -0.06719893194761273 0.06750431790589118 -0.3749947254361876 -0.3899272035998047 -0.02140613335110708 -0.08572947665112829 -0.16848277795524136 0.2532524739432134 -0.1398899942362779 0.9551279492714009 0.724796406646214 -0.9895125116454448 -0.9478844861330487 0.5608065884593638 -0.030752868978177528 -0.9374917960755544 0.475927000774675 -0.49111215828509613 -0.3089765136906806 -0.00149243082712891 -0.11876686043984508 0.4019724968757421 0.0613727047273287 0.7500179910880331 -0.4684790334063784 -0.24562289093999534 0.1986818972204003 -0.13659288380683932 -0.9952031676557698 0.707557590248548 -0.21786537470004674 -0.05685598157475069 0.7894997623789535 0.9223650001183414 -0.3703173985667356 0.01392017314608629 -0.7442575129016202 0.15853244190795102 -0.5240838684199103 0.8306297777741138 0.681403979847784 0.23495171850826146 -0.9431639390268491 0.056282100728544115 0.19820621474244926 -0.8561774794022525 -0.6660456255313363 0.6739601981160299 0.6276400735835088 -0.1617537985858022 -0.7427993501275791 0.9982087223501841 -0.30689840526172363 0.21252956928195088 0.6412933253553259 0.40571911369309954 -0.16989176268041173 -0.369246339058122 -0.8705439908709995 0.1053581724380872 -0.4692452986240565 -0.7749273503917102 -0.8672576940465164 0.4796016505797627 0.19088109906853368 0.17234723178837852 -0.2644921015851467 -0.6021044623545422 +51 50 0.33800025630842767 0.7124578227060381 -0.9587500163520901 -0.6873674962449219 -0.254899407345931 0.38926470588471607 -0.08664064555068185 0.8140438882873473 -0.6905425356137853 -0.8185886235013806 -0.7301888037542521 -0.2433496761484648 -0.43732170978583396 0.1345209000600558 0.30904095276296095 0.8561230480852549 -0.7448225564405593 -0.5258444515321834 -0.9143729801634237 0.8124607579636298 -0.7765358424196893 0.5115473180084686 -0.03108868366619988 -0.16264336490494657 -0.7058812957448537 0.8721984584370781 -0.7211631753724017 0.3589860856218574 0.041359668688098816 0.7036208134932389 0.7649955433556881 0.9801859697301134 -0.5702819293031163 -0.308564091912064 0.8469305034249615 0.2714033046684543 0.42888659487288905 -0.393028591544192 -0.8050953158477521 -0.4080730028604169 -0.12090132475160975 0.940836273115395 -0.6432438693914999 -0.6260658660408451 0.29368393062762066 0.8714722404070334 -0.644135104723423 -0.998560451115386 0.22684048824910508 0.03685300264911473 0.9195127774734593 0.6542824698058309 -0.8818998447398501 0.8612288295070292 -0.22257137485181788 -0.19919533721158222 0.8684652480897586 0.5783707540368328 -0.38434918153029374 0.1372322935297421 0.27437337037974996 0.5334580822318866 0.832389894377731 0.7999378283253278 -0.5043040159791421 -0.5198386266549375 -0.7231505788026049 0.3877411406944906 0.3370049627614009 -0.7062742682174235 0.8187787381308416 -0.25410282165614384 -0.6536553682071564 0.6871405682240501 -0.11345945749258823 0.6099892578438146 -0.09261795285267005 -0.3951760951926444 -0.16366848913621213 0.10080404660411446 -0.4556143005910558 -0.9402190072671508 0.7852726508992645 0.7389509926008471 -0.9411774659821726 -0.5167201418731502 -0.4682539459233215 -0.29122229555312606 -0.06589257106258017 -0.4726704273426505 0.3652554438177942 0.8261274980844537 -0.40739327959615257 0.48810489871551077 -0.0011477190613895516 0.7035402702747056 +51 51 4.439815127064257 5.269586561230579 5.144012982816072 3.670283734832572 2.515116327087725 3.8437018760202677 5.083967232795432 3.7659287631110967 6.763555152427388 4.746610808103354 5.36967139049851 2.721656869104982 3.5036999779344367 4.586673161807862 4.471930136102758 6.554261239508634 4.310664808975691 3.2351031134635737 7.123041670957821 6.017744515546281 5.110874608907139 4.002043176251511 3.86338804358526 5.00148609852151 5.163322380397181 5.732483797801109 4.9534176671425865 4.7544765301543075 3.236478549040366 3.864972828962935 4.834897475894357 4.01444431051573 5.582043017938905 1.9608346198132245 4.4141067144787804 3.413210495337003 4.115302915894827 4.227445568612394 5.65370463225299 5.637834674537926 3.593914737681288 4.416213261682513 4.041561837806462 4.473457322880715 3.8730484084151904 4.451299113020114 5.975142032016491 4.287211263628573 2.683820652619856 2.929553197403746 4.717265590455564 5.382310020172747 4.66180147559308 5.115455890127218 3.994322966459003 4.129466669877164 4.795188388143183 4.342948442330581 4.227991746195398 4.042614107063351 4.152457805244797 4.373292102704809 5.356518246600883 5.006002997268652 3.726222663962201 4.399419728346259 3.425150404949866 3.866828351588354 4.118636464708893 4.04789010903515 6.205183667350166 4.634918098477796 4.45777973299578 6.320932064354947 5.142154905107573 2.9622074743428657 3.837056185386229 3.941246144272334 4.565091540899435 4.715437741909507 4.571443983665319 3.92888626235711 4.796093412812827 5.535797392134923 3.327797212924838 4.05265322338143 5.410185648696145 4.582380257621856 3.9415627042327595 4.878318923571154 4.65481795730273 5.463024843443266 4.842641648639577 2.1080216322350624 3.3055392719533545 4.092853779169877 +51 52 0.8207257560367407 -0.6065682232135778 -0.7162676521308995 0.5502333416989684 -0.0020180395195426026 0.9673820807503379 0.6347314411794476 -0.73104480808759 0.8033408465638987 0.7077003711121908 -0.6071151943795967 -0.09231817791658181 -0.18935689719693904 -0.9959016412512935 -0.35303017368198275 0.9660210764288402 0.4163096473934407 0.2802123735922917 0.9112703756201217 -0.7194328789953428 -0.3984261887595957 -0.029267487914968582 0.9383170097675864 -0.20445348325047652 -0.8758329762243446 0.3148526188331928 -0.3212375680509909 -0.9420675808846357 0.642899173433094 0.5596585554974907 -0.20605022813667073 -0.1582765784064366 0.6918952167827477 -0.044324770325588236 -0.028809297229704267 -0.05336945557876627 -0.9297312254910628 -0.4114814217436007 -0.9943529290487587 -0.22664945808904569 -0.8949640736266558 0.6974924768973372 0.5134414040522726 -0.22662370490494887 -0.22584215500943206 0.9599813286831511 -0.9347251519612472 -0.03795285494267997 0.12525243588143242 0.2555831817128509 -0.45886726497881725 -0.006721946257432165 0.3993378977847686 0.9352998296622708 0.25799162526790886 0.26728154289599737 0.06505268376368756 -0.047165091542661575 -0.9957375177746541 0.48098924926243636 -0.4642420599252197 -0.5542858103174013 -0.47583649865767264 -0.3870250789654839 -0.523731488111469 0.8913403205514698 -0.2700044881594448 -0.2603385415075834 0.53731692046217 0.635581017121924 -0.7804213152665569 0.6282164572106599 0.4975595932984249 0.8981468264332639 0.6375527288596605 -0.18755756362235454 -0.7440162728092552 0.195681607363132 0.7963039480184422 0.7040737960137144 0.05164000508733535 0.03978287864467567 0.5044524556453693 0.5984107172337645 -0.9988173233815139 -0.8272055619103642 0.888203094722607 -0.7002943490169369 -0.18067195605855435 -0.290327827646486 -0.02972899083293834 -0.07581785219953274 0.9036614230625655 -0.04400720742238451 -0.4272173289072696 -0.06727362429189387 +51 70 -0.8937888547976844 -0.5785641344255668 0.9907704777444784 0.20619758204842165 -0.12172359799667665 0.18753145915106173 -0.9999973881331912 0.30877860377098054 -0.844599557291791 0.7187700378863782 0.9853978044159901 0.8308456666439687 -0.2974081946102951 -0.3495296976321094 -0.4243972132748228 -0.16963788014533998 0.14782606990694358 -0.3354901217160473 0.6723325058880516 -0.9505905019425911 -0.030226591679205495 -0.7818035783593287 -0.056437666615391846 0.7964690362685509 0.8757302460494756 0.7762455375602788 -0.9103083673935517 0.4103457360577156 -0.1888792393776635 -0.4147740774537165 0.7078678814133645 -0.32633262874892766 -0.9019322766914677 0.004817907800343857 -0.8645090101597264 -0.37918722203589894 0.8289998747183756 -0.4203005618161191 -0.8126230568652661 -0.7419164817677923 0.15736322527442104 -0.4069188663541765 -0.8136104340295616 0.2951881189277674 -0.3461965478138129 -0.19019688564420245 0.26406212305007704 -0.8681438380684869 0.06879700028549252 0.31446615525912835 0.9819370656358204 -0.6742010500018556 0.29740055844472035 0.16444883658423626 0.6915542966851087 0.5460354613970513 0.3346360513315867 -0.7451438808896085 0.7136760356056295 0.6476160471696495 -0.3150754858978535 -0.43314611076087783 -0.8531135924057787 -0.6353882398309194 -0.1375589783466351 0.5507655180377522 0.44245027801575465 -0.7515362419287401 -0.6586815376521595 0.19836451309061176 -0.8227259550826054 0.2884988908095345 0.1297793869254893 -0.9065500874448538 0.4922573218385533 -0.45542264963316215 -0.23777389709473384 -0.7645614284018247 0.40239398832086226 -0.2824447035808879 -0.8341550034808076 -0.3370967738135273 0.3804335015249074 0.7136069280985349 -0.3472124416082998 0.4946579785217793 0.6600750668525353 0.2800434939979328 -0.9603923587507512 -0.44643854178739883 0.7383318606692926 0.4731810518249526 0.012961983307679503 0.10653003482318812 -0.885711791262817 -0.03067475971398048 +51 71 -0.11790691725219427 0.8725657131503224 -0.5064507416150925 0.3914723457146656 0.23793474377407464 0.5731237718716693 0.6171970221318974 0.2725980793912488 -0.6885653119354795 0.019578474643591415 -0.12129516178889332 -0.11344558068411459 0.29622611202201754 -0.6104452544168102 -0.695756392207364 0.6927155882785268 0.3100949327637246 -0.2160620078834068 0.9724868636556412 -0.028569168949306833 -0.3956980300243691 0.7175746794251128 0.7073694816672154 -0.8281842630664957 0.6247947223009562 -0.6616802513888149 -0.6835302476220169 -0.16224081473316754 0.1139415671073074 0.9812305993164103 0.9015689244441494 0.9593864810550887 0.8623134833636756 0.5163876241012142 -0.26200106841555115 -0.09154798724630919 -0.8888343400126781 -0.4197619170787341 -0.1540548355889264 0.7388772416209388 -0.3255512488314456 -0.25171467973001205 -0.884868725773013 -0.15477026612739975 0.8843925302795583 0.19079009475069642 -0.9109886084084877 -0.6072363162376055 0.9122846095096591 -0.4009373232007143 0.6198899888768259 -0.3359880402758084 -0.8945874928533881 -0.49956564081001176 0.7588067375512437 0.6511775020316815 -0.21407054691324578 0.6526769646185697 -0.21206901054617933 0.07265628278143432 0.4283748695696141 -0.7043543009988247 0.8709948884895453 0.3256574582152154 0.7043497075853737 -0.8683614406191369 -0.24877154347449348 -0.001426537255348137 -0.13035208885598948 -0.5891322349355956 0.7984608153782522 0.9560931270446127 0.781487446911654 -0.5666122501291457 -0.4551718110122569 -0.4875107117462272 0.07132439013317216 -0.23130219108201477 0.2954237311126957 0.1635109965002166 -0.03385386504110066 0.5052766080794198 0.16701645358311046 0.7989367801291447 -0.25594109652453056 -0.04291196963140731 0.33584281391161386 -0.7695135343950348 0.7301678834805858 0.8880278341136083 0.20547618764726594 0.8949884894508005 -0.6163231792671786 -0.21072643004282487 -0.22474996940948322 -0.6735696853144932 +51 72 0.03433497825118237 0.5796496733250234 -0.32285511507463105 0.3631970502434416 0.37863245756112374 0.8092361484478823 0.32168960812933034 -0.20602134268981853 -0.9238711131860087 0.1675927904454393 0.47374914699485293 -0.26909843095799 0.3418365635254419 0.7952601401332351 -0.39748455078825295 -0.8896788187909401 0.3559917965894548 0.29694442047994896 0.9122415870696878 -0.9870425456662426 -0.49514896177787837 -0.3748433929029875 0.21120369087669788 0.0612055295803966 0.2896422199829318 0.8443071125605703 -0.033475387175844196 -0.48653717805508645 0.34930570452039333 0.06288368876103512 0.4511157100493237 0.06812049028697742 -0.25309019663661836 0.3031108565841669 0.42599616712512645 0.4588462412865961 -0.4680238481233858 0.30025958213958726 -0.599270350327747 -0.8731322662993839 0.21698911204871285 -0.7815801795846464 0.3902450128762789 0.5724260719941154 -0.16938379084252464 -0.5315406818954573 0.607722822415339 0.480633506235441 0.08476957367429949 0.6414567156859203 -0.031656613246749954 -0.427712775675843 -0.5993046110840365 -0.33492548331260674 -0.7407585688927025 0.8800917627927101 -0.018645915390763435 -0.7545300748455959 0.5524242594469928 0.6102848893575561 -0.8388892299075359 -0.2924244740546391 -0.7363293596702805 -0.899608106484481 0.7415896683750041 0.16617343560437448 -0.12872071974238963 0.7970771785172002 -0.10051458205193486 0.22241867157844908 -0.26885979743516053 0.8937207930475881 -0.861343588864276 0.37637503861056043 -0.9598255648947285 0.11002266751939671 -0.912549728280581 -0.2811641423309761 0.8259865857505215 -0.8040630974008682 -0.7131043680416456 0.10723196884346953 -0.29393550989262796 -0.7716647064001017 -0.06636876745964249 -0.3125521945912524 0.4424499640716517 -0.6594990893635122 -0.24855320613528087 -0.0162955631368642 -0.8039202768100033 0.8367815684351725 0.26733089836365953 0.2451670982507379 -0.10802604306682628 -0.639485954473076 +52 31 0.23851639238176214 -0.576206299427527 0.8117985899988276 -0.5690619431842063 0.37872701948395315 -0.7205174773350036 -0.6264423172590956 -0.6644657866422068 -0.6027342844924075 -0.7826291024772494 0.010613413607313271 0.8332983264908298 0.7634986917635473 0.6523467794678091 -0.4603839257138982 -0.5949457309149511 -0.5462379027570532 -0.3575506836429183 0.7746570952160192 0.03559894498942784 -0.20317708599879336 -0.5302987504375241 0.27717530109890576 -0.9658990573713757 -0.35632000256248264 -0.7311104490180358 -0.5616477000254261 0.19164304695837608 0.16960245640352434 -0.3201101905768189 -0.883079819186479 0.8097594962128265 0.7335890507415235 -0.5934338005392883 0.9515645641401966 0.6537720087850034 0.30508742436024217 -0.6949656628450498 -0.8899541409897029 0.20614714987975913 -0.9261819240398381 -0.2768628266225137 0.04736128542591089 0.738867923854233 -0.7639616078690634 -0.1713405828382648 0.9107733715250579 0.839345956273952 0.2839942799380004 0.3079396902050282 -0.5004838531089026 -0.9492239357053229 0.8792302763467572 0.6198557901910371 -0.3987964065317371 -0.8304655627988624 0.17491621524880174 0.538729767227544 -0.38099651871314477 -0.1786958687915159 0.1484561829398814 -0.4824925607647643 -0.7179898971574743 0.6894427922869568 -0.19121633954842387 0.8614312827769341 0.04633148581867408 -0.8676590427827637 -0.7879165503157228 -0.5290389189907303 0.24077301117022976 -0.024919215908861814 -0.034480042135953015 0.5389834914535259 -0.004361190347382804 -0.3524529618879897 0.021653897177663417 -0.0026591545118559434 -0.42261717446097324 0.1997706695591155 0.828179624705778 0.4398699100432175 -0.012274324229041955 0.890456153450027 -0.4115416547261559 -0.5387413189930845 0.9731327363320945 -0.36772557356163116 -0.2786298495614741 0.010988360808049658 0.17729039934832969 0.547293591783033 -0.8868914922135513 -0.9374497761001568 0.4394612530360278 0.41623276830586575 +52 32 -0.4271702203463539 -0.12461451470560769 -0.34163679302317895 -0.6962069502663544 -0.9195654376624787 0.8384519703665314 0.9761830643329379 0.9223681145518072 0.21882300293408075 -0.38168272248987356 0.6232694669901535 0.7707054274014482 0.3369871127243136 -0.00525135156044132 -0.03880270468179492 -0.9373852480053435 -0.940204848946991 -0.1334364908375827 0.9048780274185684 -0.50161426072695 0.6490088655597073 -0.06876991729518855 -0.16826972357288073 -0.8231608509804738 -0.00014505451658997082 0.6431522033305193 -0.16417532339954666 -0.134833881905581 0.7772101790556989 -0.84612861510609 -0.7975181212830873 0.2775061467435238 0.9728237005109936 -0.3684969061664809 -0.3533156760234335 0.5600582189323984 -0.9320747360242667 0.07095885181110928 -0.9707780526155878 0.6961947057248186 -0.6019336576056993 0.23399728866276548 0.534191197316757 -0.7706628935891775 -0.6164113752841678 -0.5190449120216758 -0.6304479196141675 -0.33872968631423594 -0.7162772598368066 -0.282919827610256 0.8526333840115266 0.3072632490358924 0.21461975232826047 0.07534239183158142 -0.18408062708254547 -0.171878528266874 -0.2884496610202165 -0.7671239544427904 0.4319331020019579 -0.9016748269061092 0.3587079758246503 0.7572803496942229 -0.6993334287846249 0.9558315299711313 0.6872182760606531 -0.022401935182303045 -0.022423014465171365 0.8046012918714858 0.27541429790794947 -0.7878960458370272 -0.3789664047212715 -0.3646917294174046 0.7988351997419154 -0.88699809802932 -0.4803456858209185 -0.5537319671201664 0.860366813607399 -0.18837143080433316 0.001036809517678261 -0.5894711645428137 -0.10178369885332095 0.10873774676448789 -0.7251776063386852 -0.15499899300209563 0.3057153322711854 -0.846692949431189 0.24522736999152683 0.5712557656518111 0.34786749269568884 0.698517408841185 -0.7817971384586153 0.4117810450149817 0.7569699838108177 0.4666983434251528 0.2533037011635899 0.8688770527882992 +52 33 0.4482998845245767 -0.5264692546990186 -0.1383826443201921 -0.3461286997386164 -0.7505788009757313 -0.35968033578975733 0.278221729784222 -0.6827243222565602 -0.47145030049503256 0.3119458669310602 0.2185751148321402 -0.23773584578278917 -0.36022744575301524 -0.719702275472613 -0.23477473867763266 0.3790352895423301 -0.06364649285515678 -0.41011781240103207 0.5886456644112048 0.668462677038822 -0.9597553891937087 -0.9376508699988122 -0.7604359279750421 -0.23273539004000465 0.5626512431873598 0.9888023732845215 0.5057192844370004 -0.528130952620476 0.5881525144254505 0.6875766637646434 -0.5840804767705263 0.9022898703468543 0.913195437611533 0.489211341137604 -0.41058790133722556 0.7583928799461874 0.7088125358975739 -0.33162336975059215 0.9832224053472489 0.3905804464594751 -0.15954473110293987 -0.6936053055052374 -0.6728175785568822 0.33496450440226244 0.9401978616406759 0.9595053185629312 -0.7704642053902551 0.3082743575317386 0.6701846206095652 -0.17138935678585288 0.8643383879307083 0.1922353347919985 0.3192403351706763 0.40656624052306745 0.6835934165257775 0.541371882712441 -0.6224494665846574 -0.3257519784641083 0.01556719098824022 0.1754172959037179 -0.7696313593723332 0.8366521389011969 -0.5027366711826688 -0.05817422372003267 0.32386236970856186 -0.8645188249922529 -0.6456197250876847 0.6085892415245393 0.6452092280166932 -0.04329002930161607 -0.5560447516376017 0.5514204833418861 0.44045625997543936 -0.18606704329626345 -0.3287392931698967 0.8450129476944495 0.21885987285019493 -0.29438475220430127 0.8984592343699622 0.967204633505881 -0.49397060277194216 0.8216887811826474 0.737905727612983 0.7037899800457963 0.9951838925217023 -0.20742392474763505 0.9884807671140694 0.8700686294192328 0.6975370339304965 -0.0492436075437952 -0.9499792752655489 0.04016500160817227 -0.47029195161787296 0.744713881599784 -0.4882624126766304 -0.7235950883863953 +52 51 0.8207257560367407 -0.6065682232135778 -0.7162676521308995 0.5502333416989684 -0.0020180395195426026 0.9673820807503379 0.6347314411794476 -0.73104480808759 0.8033408465638987 0.7077003711121908 -0.6071151943795967 -0.09231817791658181 -0.18935689719693904 -0.9959016412512935 -0.35303017368198275 0.9660210764288402 0.4163096473934407 0.2802123735922917 0.9112703756201217 -0.7194328789953428 -0.3984261887595957 -0.029267487914968582 0.9383170097675864 -0.20445348325047652 -0.8758329762243446 0.3148526188331928 -0.3212375680509909 -0.9420675808846357 0.642899173433094 0.5596585554974907 -0.20605022813667073 -0.1582765784064366 0.6918952167827477 -0.044324770325588236 -0.028809297229704267 -0.05336945557876627 -0.9297312254910628 -0.4114814217436007 -0.9943529290487587 -0.22664945808904569 -0.8949640736266558 0.6974924768973372 0.5134414040522726 -0.22662370490494887 -0.22584215500943206 0.9599813286831511 -0.9347251519612472 -0.03795285494267997 0.12525243588143242 0.2555831817128509 -0.45886726497881725 -0.006721946257432165 0.3993378977847686 0.9352998296622708 0.25799162526790886 0.26728154289599737 0.06505268376368756 -0.047165091542661575 -0.9957375177746541 0.48098924926243636 -0.4642420599252197 -0.5542858103174013 -0.47583649865767264 -0.3870250789654839 -0.523731488111469 0.8913403205514698 -0.2700044881594448 -0.2603385415075834 0.53731692046217 0.635581017121924 -0.7804213152665569 0.6282164572106599 0.4975595932984249 0.8981468264332639 0.6375527288596605 -0.18755756362235454 -0.7440162728092552 0.195681607363132 0.7963039480184422 0.7040737960137144 0.05164000508733535 0.03978287864467567 0.5044524556453693 0.5984107172337645 -0.9988173233815139 -0.8272055619103642 0.888203094722607 -0.7002943490169369 -0.18067195605855435 -0.290327827646486 -0.02972899083293834 -0.07581785219953274 0.9036614230625655 -0.04400720742238451 -0.4272173289072696 -0.06727362429189387 +52 52 4.439327316375431 4.338405469136494 4.525413078726591 4.59089340242447 4.805053227201549 5.583070656477443 5.419213930051589 6.589210090323802 4.2088775448114255 4.761088562934639 2.9383818880059005 4.582657874461793 4.284770761162609 4.251052882503337 4.712412892298524 5.192890203256962 4.497023813038766 4.867393546371283 6.3438689609389565 4.070181851040291 4.495568605040671 4.136098553848742 5.42343883551845 4.182505797137876 5.3177027449553265 6.474537495739815 4.35871750130015 3.635726561023785 4.363251791425509 5.5269976433357915 5.537548961939715 4.388870636719795 5.415774879567739 3.395268175043932 4.521543294528656 4.620205880951306 5.854035905199835 4.0182728833735855 6.901057821939659 3.866927716487865 5.192713040713477 5.225723877140158 3.9138912162105672 4.253165719873935 4.337054100007201 5.603959873175188 5.123970075806005 2.596986048196557 5.2311666625362445 2.8826241306496954 5.394763558838186 4.092337044978249 3.768654129534702 5.551476119687928 3.7248182577647886 5.6523373571604045 4.196925140152709 3.7170339762613915 3.679417931539612 4.144348988154412 4.028611119770468 4.912112453215887 4.954168121390615 5.8578616771381835 3.9429471264435225 4.112231368351871 4.446954349739684 4.7084840647776955 5.515860406297858 4.2749183314209835 3.688293466031454 4.317908668774623 4.99262315366445 4.344731841817955 3.624023904291108 4.516560435754003 5.389531144198659 2.117681745140328 5.218183741315412 4.574119519931099 3.5442424767940253 4.150374245740782 3.9341735092554764 4.574475440523088 4.799248696356623 4.666097128962468 6.5513367019709445 3.2830377994732283 3.610266227229091 2.457228888626651 4.738179719987514 3.1944684984891945 5.1519512646727055 4.984692637564937 5.332230287953131 4.370226740377583 +52 53 0.8922189441953263 0.2575715417810369 -0.22169061202044915 0.30562168773975884 0.951602954958044 -0.9047442743807967 0.28067530899560467 -0.5538266708623756 0.5051179694301375 0.8175562738924982 0.07011553214398902 -0.671240925857431 -0.6206005198056332 0.6962458541027983 -0.8942536127034673 0.5381581329849376 0.6576696167626257 0.9993453266199734 -0.6907764846941722 -0.34077332882064226 -0.4125346212423002 0.8774287614922522 -0.9855394756758791 0.4417492088366244 -0.9391912311707775 -0.48302786541983367 -0.39280838487352 0.3404350981622022 -0.3132372336570344 0.27446305651494485 -0.8602067657629615 -0.42514064062696666 0.9048083547739518 -0.38491262841687 0.5266170837900901 0.591101482801393 -0.9217874392651979 0.249285368150852 -0.7025892856291498 0.5988862743738455 -0.8330780316472681 -0.7971816104890783 -0.8848617329013173 0.8837450909345801 -0.06652331025081115 -0.7052148225999919 -0.014675332779107375 -0.41044009373687174 0.9561778854404595 -0.09156903680946327 0.6213971759307986 -0.11411191826420186 0.20913769052026976 0.6819564074167139 -0.6298128255928446 -0.8667270683748964 0.626645328099581 -0.09224217440185489 -0.11533139313764673 -0.8759993935649422 -0.8235676769037383 0.03407639805758933 0.9152205640390632 0.8255369748620347 0.6077787551329958 0.263184396369887 -0.7040864749417728 0.13799786077399778 0.8630254203873775 0.1744759424849749 -0.5302952117098776 0.8934989154937156 -0.6050735133412826 0.14124903572655456 -0.30607816582259506 -0.10491561223065449 0.9032272560769257 -0.3336021390545567 0.7161652592156722 0.8008104668920455 0.5507660756258463 -0.6471989121806707 0.4215659321191514 -0.6287226050044483 -0.14147683899259356 0.5549020617312568 -0.8884468741870801 0.3695663251368275 -0.15064898327833753 0.3293443237705749 0.888496940696172 0.7875218636075336 0.06861718911067194 -0.21521910367721375 -0.9483620747123225 -0.5134683705372216 +52 71 -0.39978631186652214 -0.7266129203147056 0.8061453313032376 -0.5074600204995234 -0.34216595824061935 0.6245194695506544 -0.7997406149806443 -0.5470718089486628 0.0841158658199288 0.6561448506730632 0.1795725376203423 0.6137552030273932 -0.7547380914236992 -0.03899929628427423 0.6171574253042731 0.39206712951315503 -0.27605774054504306 0.800422243880268 0.57939024235208 -0.41873865276719924 0.6434100149620046 0.9943677049124957 -0.6208019146188324 -0.49505889391461655 0.5685163732292211 -0.8747979527724752 0.7078053083388178 -0.0657400334271745 0.08147314355184654 0.6161916942044863 0.8652378624832842 -0.972997365706183 -0.09224986008352865 -0.496215487289579 0.25327161675798515 -0.7638118770888807 0.7865294325210772 0.757158628819607 0.4888001693429649 -0.20058463250183722 -0.7743561506985623 -0.695595744021454 -0.43070528833762856 0.45909269837445144 -0.6207201801424134 -0.037035726508540145 -0.7251658737522222 -0.0617352098998758 -0.8046029299753441 -0.7126038774082013 -0.8329009104128786 -0.8341128035387655 -0.07011136234730198 -0.7119749615944446 0.21138739767389825 0.46343299463834375 0.559938052693675 0.5117398566315028 -0.13209863750675188 -0.22038531290062346 -0.8641932844093883 0.4763556580812698 0.22321735740762616 0.89655774548479 0.7238829328858596 -0.04121849285045576 -0.42715330092938864 -0.35756142366307797 0.588743702571837 -0.6260776949562026 0.7598689241040302 0.8953160451581483 0.8950944705946289 0.5338516221255174 0.22670605372077723 -0.7765404733124326 -0.7510226456122995 -0.1726167825825251 0.5610951838851161 0.33847978145615665 0.7606289164954352 -0.7382952312053135 -0.39335082404571464 0.2714060449617812 0.6915069604830757 0.0005097576790473735 -0.9152721729332156 -0.1829092157681944 0.5288361422064491 0.08176161516915492 0.7879779217201612 0.09321881004760502 0.03124475424718609 0.6453789823770872 -0.9171321109199151 0.6464614292291397 +52 72 0.9409822723015844 0.9679809702352957 0.8478621503173864 0.8247836609512114 -0.6109078479225818 0.31201337270086626 0.43927761173127045 0.7388947539527346 -0.7061489344602976 -0.012821409652923332 0.13338937217750835 -0.9293641021338872 0.3479586220269948 0.24964073446676904 0.63787429096874 0.6167418201685926 -0.9338877052458074 0.7413691759328687 -0.842986592674412 -0.016359280521672792 0.04150752912994049 -0.19712118482137408 -0.6427549778341126 -0.1653551818658363 -0.46809087421108897 0.9013577051226755 0.03654769516316181 -0.9489908218719765 -0.4478388528223114 -0.8938038285134708 -0.730779914836315 -0.04645281734736506 0.5703463219104468 0.3346005194793942 0.4077094552692555 -0.3782389014305203 -0.13758966941646378 -0.8723684888884911 0.3490926815522104 -0.7620557875904994 0.07704989492877656 0.12698699922795686 -0.061452074256249656 -0.3846427723630088 0.39992020720938504 -0.8041799650431849 -0.13539330010259953 0.49910712177563177 0.6250166676064135 -0.31943595158315374 0.6068642628074963 0.675635096770876 0.49697156785754704 0.7274649458464995 0.38897268913038796 0.916935115502177 0.31536420332309656 -0.54305085858331 0.2457294678763544 -0.5235964172265495 -0.08697303241441978 -0.47569431163141385 0.4837362574948296 -0.7699724155054333 -0.02266603202793016 -0.09533047383415605 -0.6026854946682036 0.6132481496040061 -0.9923613252917327 -0.8751405776162615 -0.17124648346492943 0.26026750170018875 -0.4807829506164576 0.7689171272405213 -0.5412228955187504 -0.6631505021021018 0.8089235955382321 -0.25515934945433894 0.7477459918202085 -0.5493813863030779 0.1805519668181894 0.06060757454601551 0.5806575828807554 -0.4124951028347166 0.9054839597325413 -0.33065370003427663 0.7476528420623239 0.03484095598175396 0.821014661134372 -0.10309428065168791 0.8014292394835523 0.7372113791917843 -0.738633891350065 0.7305390181774329 0.8230472642578561 -0.4668137096864662 +52 73 0.1511870312035084 -0.5013402187187441 -0.11070282935280695 0.5565076021793653 -0.031017179821680063 0.538345738386868 0.9488503354084492 -0.9587646369640328 0.13315182619662624 -0.983316934477309 0.8028305012277437 0.16006421109039293 0.3124204020554766 0.2167411643089483 0.7985060828744726 0.21883765396246613 -0.5597913963871632 -0.597377358135567 -0.5599299002201914 0.9347113015579822 -0.5619419154268486 0.32624157392569986 0.26152453981645496 0.4883606457921943 0.5758193290889202 -0.7489399317676637 0.9043491187570591 0.03560792015442882 0.7079948293665639 -0.4109232581210964 -0.02603075013301792 -0.7280706047977412 0.13467755635300116 0.15990930857369023 -0.9281467740277647 0.7215447362777911 0.16655424715070466 0.40249193724512766 0.8457415476847225 0.11605564414330516 -0.8870209340815258 -0.7297985498552477 -0.25732251460003996 -0.4091936299261807 -0.4345250797994775 -0.4532215418662142 -0.3704842547329965 -0.0965832226629868 -0.9024305248684832 0.4444681181214376 0.30154090559533 -0.13860777931167778 -0.3093498709957341 0.5196759714173258 0.3092731381427929 -0.8752822613221065 -0.8432533941694815 0.675247295219936 0.722634165213198 -0.21717014948495694 -0.22224413211296423 -0.9784085772291999 -0.24420405534613576 0.9581468595469258 0.36197048568346823 -0.8063904765590932 -0.7667242214079484 -0.7792676747437703 -0.21263067052177975 0.4245117009572559 -0.14191528615068827 0.11105853608118799 -0.9804275134895288 0.024969338720222334 0.1846418323225516 -0.9712280382180982 0.79242070685755 -0.4715345077845996 0.22121182739801815 -0.24576132407917983 -0.1462360419044073 -0.6370797628948637 0.46797059667884233 0.8608450021502989 0.12172750261553289 0.7333369964880054 0.1621541686149004 -0.1074892685539961 -0.22004484091284904 0.12602080289346618 0.29646218753290077 0.4116369385830323 0.3562828571041383 -0.502826215003195 0.3801475392040188 -0.6494658837842844 +53 32 -0.6694623261129826 0.5640695152797979 -0.2921914898147737 -0.728692433320338 -0.08335518836691524 0.3382525134458816 -0.8626083201878296 -0.21594809382508573 -0.9749657732669965 0.9853358766053413 -0.035184969841215885 0.6937329613322287 0.8507918307580706 -0.049684786422594884 0.7805567894331822 0.27015955857065377 -0.30619176670776405 -0.108361446063439 -0.05081059604031246 -0.26209000447841446 -0.6754812407842483 -0.7722321303263604 0.5513651058256144 0.6448004018197677 -0.5043955022211826 -0.9927267954431593 -0.8166544840615053 -0.15611405791020738 -0.12325052425340743 -0.1792493072039889 -0.5316591444212362 -0.1781329223759871 0.1098503769428143 -0.2502481854761853 -0.9052746370121423 0.3748699663041719 0.42452207324940594 0.07032104366139613 -0.49280481103880636 -0.37834752021711227 -0.3792554287524119 0.07580125917507319 0.46557116511619845 -0.979006274768186 -0.7931758615603111 0.6852518862010124 -0.3992149493360009 -0.036620489321406824 -0.5220380222303083 0.18807060785269236 0.6480557531831557 -0.8964953403270481 -0.07132824111446379 0.21846682165085007 0.9568899681652265 -0.1952912453728577 -0.20695897459207147 0.523186737584646 -0.011445578561137149 -0.6367823286206264 -0.2807423607280053 0.8112668622002057 0.1199272142841914 0.03988153898970981 0.2687682073400397 0.6205504004344304 0.9062244489737803 -0.07546554162909014 -0.786449086958821 0.2868146741298334 -0.20293024598304554 -0.7444379430545491 -0.05787339300139038 -0.553501245638407 -0.46118230663949644 0.3005111262525637 0.8965884164615983 0.1536367909910108 0.9135145792220289 -0.9734300344606648 -0.19327058134118125 0.9616685976878043 -0.6357790820427083 -0.8546757657170556 -0.7115187315635843 0.33851896877312404 -0.9126562968046261 -0.738558194748137 0.4410338088053374 0.019415086189437325 0.10377029744771327 0.6486244319140413 0.5360033641141146 -0.02585898252918528 0.247186614374868 0.06792604450312445 +53 33 0.11627019490469448 0.16698529837975173 -0.5167943300317666 0.485930416709335 0.5327202434448861 0.6438817833743091 0.296997086724452 0.9647124180376576 -0.007026105529336135 0.9200780587269266 0.38340369454336787 0.7163688643698114 -0.4897676446417678 0.4380078845342048 -0.3769704159706946 -0.5200590687007429 -0.3857063194188146 -0.3909054340205904 0.5750880179318181 0.6570080938800129 -0.24025517853070388 0.7635609071250906 0.33847930191213926 -0.24949561543127508 -0.6769761779210204 0.5988448858033082 -0.6778211557396954 0.7644175075515871 0.127248553878879 0.0999189522654702 0.4607837589761947 0.10430100467478165 -0.8762404659719338 0.11907514220510573 0.7512314831047973 -0.09669270635976157 0.6351168762638522 -0.44221773334805325 0.8084648086775099 -0.09182014745925238 0.4728687384759853 0.2794428042257264 -0.6867317658119834 0.30283138889810823 -0.1471427613907592 -0.11108933926809361 -0.9907214878241235 0.41980869877579474 -0.49247673431140737 0.6828754860541275 -0.1549856058691388 0.10174351196433773 0.2306350107513382 0.1259945679117298 -0.1715356753940369 0.624523373729873 0.7642954189479456 0.8428748304136378 -0.6035925882650999 -0.20481813358673429 0.22526446841505843 -0.3598753245444273 0.8388526305160002 -0.8663591712410601 -0.22530919624567525 -0.8851268783887076 -0.24087812640150275 0.3237547722573286 -0.37114598517307185 0.9015176009973085 -0.8803437599511774 -0.6998931336243317 -0.3945714770351323 0.2168096556531054 -0.2631331669505037 0.47260944764262236 -0.7913955027831685 -0.2595637069775265 -0.041213752511193524 0.7987013648850771 0.07123020461733431 -0.9970624860930968 -0.626213328517782 0.23385538036932196 0.7068078434647027 0.7123609052026219 0.7832061589552404 0.38144077696226053 -0.0016981179836912386 0.6173487277394247 0.3991405360114537 -0.9656750682892872 0.18588222156204526 0.20862051347070398 -0.7489645588118099 -0.6144739815354072 +53 34 0.8526932970303274 0.7446914869615862 0.901037503809007 -0.533070335157348 0.6024883714678444 -0.5727955938909199 0.38024301269585936 -0.971649595943139 0.5985882926034236 0.32485739140019865 0.18284949376947002 0.8519421275434016 0.40015422954345437 -0.5204439729496733 0.5457117189967313 -0.8375453619696596 0.3318779725013503 -0.13608985015452357 0.8589201983392818 -0.17178204664317542 -0.42031467081843665 0.7384676749006784 -0.496789920500178 0.48423509300323686 -0.8095009320530575 -0.43100410664685485 0.24083363850758155 0.05979898604371514 -0.483876918652717 -0.6289642535271804 -0.570297636552358 -0.5171587673792646 -0.9225967984186834 -0.5987310660326044 -0.02707421592384507 0.9955583422256091 -0.000779824463232659 -0.28893285433148486 0.9060367912520928 0.6819747440854389 0.8841758977272627 -0.025338466348122868 -0.21660313958030564 0.8870221876531599 -0.8852383605867067 -0.7577567213941598 -0.22694546622587763 0.6955155905179289 0.38964011640489615 0.49603930527039775 0.9545435152853425 -0.7439696317454367 -0.5736802388784044 0.9196886280833083 0.7379100368110127 0.7604683469659836 0.14688775332898074 -0.48921450366202124 0.14703688155996253 -0.9452492232651815 0.7390874252166539 -0.4678155452244326 0.797007156897561 -0.10543936829477607 0.25591975580803283 -0.4100145062884635 -0.08783682929072922 0.1576063267000769 0.37413500891416396 0.8331237571317349 -0.9737222202239595 0.2741915989099275 -0.6022524062605152 0.6144223533412445 -0.6691918021948335 -0.6980654735799663 0.34921519582946314 0.42390586042379286 -0.7750421771110512 -0.04900891627260329 -0.31598489889573034 -0.2628653888268577 -0.560295047991545 0.48136468848515945 0.2697855666926987 -0.24283890738661928 -0.5190861493782359 0.013933589770379395 -0.29824089769858286 -0.42949976315744043 -0.4067073606337259 -0.6423713351718487 -0.6917773031205101 0.9859678097397284 -0.4843689996755012 0.8311722670072261 +53 52 0.8922189441953263 0.2575715417810369 -0.22169061202044915 0.30562168773975884 0.951602954958044 -0.9047442743807967 0.28067530899560467 -0.5538266708623756 0.5051179694301375 0.8175562738924982 0.07011553214398902 -0.671240925857431 -0.6206005198056332 0.6962458541027983 -0.8942536127034673 0.5381581329849376 0.6576696167626257 0.9993453266199734 -0.6907764846941722 -0.34077332882064226 -0.4125346212423002 0.8774287614922522 -0.9855394756758791 0.4417492088366244 -0.9391912311707775 -0.48302786541983367 -0.39280838487352 0.3404350981622022 -0.3132372336570344 0.27446305651494485 -0.8602067657629615 -0.42514064062696666 0.9048083547739518 -0.38491262841687 0.5266170837900901 0.591101482801393 -0.9217874392651979 0.249285368150852 -0.7025892856291498 0.5988862743738455 -0.8330780316472681 -0.7971816104890783 -0.8848617329013173 0.8837450909345801 -0.06652331025081115 -0.7052148225999919 -0.014675332779107375 -0.41044009373687174 0.9561778854404595 -0.09156903680946327 0.6213971759307986 -0.11411191826420186 0.20913769052026976 0.6819564074167139 -0.6298128255928446 -0.8667270683748964 0.626645328099581 -0.09224217440185489 -0.11533139313764673 -0.8759993935649422 -0.8235676769037383 0.03407639805758933 0.9152205640390632 0.8255369748620347 0.6077787551329958 0.263184396369887 -0.7040864749417728 0.13799786077399778 0.8630254203873775 0.1744759424849749 -0.5302952117098776 0.8934989154937156 -0.6050735133412826 0.14124903572655456 -0.30607816582259506 -0.10491561223065449 0.9032272560769257 -0.3336021390545567 0.7161652592156722 0.8008104668920455 0.5507660756258463 -0.6471989121806707 0.4215659321191514 -0.6287226050044483 -0.14147683899259356 0.5549020617312568 -0.8884468741870801 0.3695663251368275 -0.15064898327833753 0.3293443237705749 0.888496940696172 0.7875218636075336 0.06861718911067194 -0.21521910367721375 -0.9483620747123225 -0.5134683705372216 +53 53 5.271043976212106 4.9741466107334436 4.414173565983262 5.493026516221613 3.5909787506763235 5.093655374296539 5.717311531960837 4.516349283828819 3.9483013163996823 4.770087399256765 3.6024337994649347 4.810809653973871 4.70973822739356 4.811789348486438 5.7309384599092414 5.102028801665679 4.390485629520546 4.739122284543895 5.518377278402686 4.4647985147016405 3.7170447249011946 5.7822391763390995 4.920669614473003 3.389272658582427 4.312739981940545 5.030858790229968 4.876202716338428 3.066801160921022 3.4325316149038527 3.931094574239152 5.59752539945365 3.8762852480776413 5.182586609294352 4.416821952656406 4.079834239006963 5.222142506045073 4.329962559243436 3.276802659508425 6.459838694413519 4.763607732275203 5.460642537393929 3.77751944848114 4.656139511393148 5.280972159960916 5.182464654524232 3.9454299285723575 4.060643381030288 3.709297996572117 4.2836958721293925 2.831278346057357 5.095063731932646 3.232465918040899 3.058030931659754 4.515252716302712 3.979030216301372 5.480302128700613 3.966944075021983 3.881659247868424 2.898713077026221 5.408345776265363 3.784592081841895 5.435566856754653 4.583063748822718 4.102686812674041 4.139967867112354 4.694753088183993 4.14960788997503 3.0107525227160497 5.9058953653535315 5.882336944325704 4.341237938078273 4.712099503530455 2.850300998738698 3.739982611117851 4.155477590533666 3.610033473498104 5.010124197160074 4.139422371322776 4.079033178917334 4.333571040462724 4.084889161802821 5.600486325394462 6.253161658635614 3.688481864744997 3.7906004296990194 3.7542803905225868 6.2837048114627585 4.36006980572836 2.529203335597651 3.976462122690646 3.954955037007176 4.376340539451556 2.937017816280568 2.8345396555216444 4.889208327658352 4.612962540639243 +53 54 -0.4134179267373208 -0.9174818573317507 -0.10113223498672164 0.7825273227123266 0.3053575948353615 0.43796369321241 -0.8505236008434791 0.5046680625174935 0.7313523895185363 0.744727969382627 -0.763995281293733 0.15526461568284255 -0.7061492734428902 0.4995446173304927 0.5261662957517579 0.21297230031889236 -0.5576177100539257 0.9250394988074355 -0.49084929969486235 0.27622678751537477 -0.22366290676411849 -0.19794340346370465 -0.9569055594999856 -0.6969186713097164 -0.1773128323560711 -0.5391068277845135 0.19548694172613912 -0.775638465819311 -0.1679980235793619 -0.6725029393399717 -0.5389312253704754 -0.4893676066681709 0.33258979598080085 -0.8722824296897227 -0.7434822222904311 0.7838151495828378 0.2367006392492188 0.7144495142891667 0.5423550038426459 0.29150932613522085 -0.8874491053403699 -0.5013485816620689 -0.4637804778243211 -0.08782269344585925 -0.49949066464579217 -0.20955444265125855 -0.18757757716022194 0.6294756552492748 0.28769313113548445 0.3021579614944667 -0.7987216208845211 0.15155891109138508 0.5750573650365978 -0.6993640922056175 -0.040921088746092016 0.25053162281293573 -0.005743366640576841 0.0975487754229849 -0.15177746002676917 0.7431573611911293 -0.38004136047227877 -0.7385911995405905 0.5460717685907279 -0.08130717622479233 -0.8365269309403025 -0.6243282173408313 0.7327145813675162 0.24415114335574417 0.4901689664159774 0.7986780687999437 0.12655749629587887 -0.06213076346431423 0.11057080441712674 0.3989480227871478 -0.20587189059761624 0.28179570856736524 0.17489240235452264 -0.8606038652349965 0.3090532148836067 -0.363026311627094 0.5347037711160052 -0.13404592246216818 0.8594603239029093 0.7866042960155262 -0.7860069857085463 -0.368269111808994 -0.30792510192927947 0.9333804608916128 -0.32672338254754685 -0.4881922876809772 0.12591869070824213 0.13495860461743514 -0.07621011283757695 0.37347926935438114 0.15074469733335216 0.5185674645378335 +53 72 -0.6863753049002197 0.933222934558323 0.6128885081935616 0.2882707218181537 -0.6299337343398563 0.5340463931329569 -0.4599985545150034 -0.04470415865256405 0.38221892316829886 0.11641578845357192 0.9896069000490604 0.14174489120781342 -0.8166894985604332 -0.06512367836600785 -0.7076230044829217 -0.4376831812058468 0.5198435312066876 -0.6258408367019117 0.7415411808113075 0.9241616368145984 0.8112138126014983 -0.06430534152027478 -0.05435697970192899 -0.2468609518422904 -0.15596887527665615 -0.7933667485493483 0.42555273111723135 -0.23112631668411732 -0.6341644464843794 -0.8290807856423317 0.574956634208875 -0.4735248282654647 0.7374781238928512 -0.7911432710925266 0.2315367357591407 -0.6052075139158479 0.9906903839790895 0.27236545623727415 -0.5971000065361851 0.7654776218335639 0.3706689888219674 -0.9697370169600901 0.7778012298199224 0.5537560173797831 0.7841702274329978 -0.3824450426409791 -0.751774565100721 0.05157193540872229 0.729401939857657 -0.24541159941752522 -0.8443370851578873 -0.05543444873028225 -0.06047065767960258 -0.27500267121863176 -0.28545716530953325 -0.776166235520465 -0.5719632926654599 0.3240406824815014 0.20165430204070334 -0.18103189009709997 0.2661092585955658 -0.9891586955969744 0.08822469660507082 -0.5552948056300109 -0.5436273319159113 -0.0465824819260916 0.4278022367254446 0.8603202659682336 0.6426700982217664 -0.8090332535986784 -0.463428380465956 -0.8261205308345685 0.12314991009372234 0.5624517259233432 -0.23589522886839864 -0.7195518337982567 -0.3619458504397235 -0.4718927835057576 0.08051009025872857 0.11400615101762712 0.7329634373150553 -0.8501109637717066 -0.8539573845053907 0.24697038873323707 0.3230494850658432 0.022853065216763113 -0.636353171497896 0.27256876211631975 0.13380864977215934 0.39118278910386994 -0.546987408908167 -0.3167173931600449 0.8457703992979819 0.45106459554489886 -0.49075791660456414 -0.22897290930227565 +53 73 0.878014417440808 -0.38384316983902367 -0.23384837638348643 0.9660543362201004 -0.12194876775681607 -0.5878346468461046 -0.6269150053142261 -0.3852422103285673 0.6872180421655398 -0.37015490568103715 -0.013851333595134241 -0.3843901633783271 0.028725109274122307 0.8402736426835276 0.630476912734147 0.517997210691014 0.8384460003313843 0.6604757572831392 -0.3878149767194885 0.29395244755700123 0.026492150366586698 0.9235050113269021 -0.7327469984361794 0.2151831584758459 -0.0011435297720463478 -0.994243520837286 -0.965606946585635 -0.2593847578920796 -0.8269691908650614 -0.39408787490562536 -0.7848899623004704 -0.24062092844384964 -0.07361245759916835 -0.47828643830916073 -0.34934914060148947 -0.9909028996949594 -0.12682623944732208 0.03190785541903107 0.8818407209984294 -0.9534970825611384 0.7612220903290219 0.27791857029782263 -0.9573097511403386 -0.41733559744928184 0.9678061200374495 -0.3022866648168714 0.761658651884584 0.2337651485012573 0.2289480799373096 -0.21415175543087406 -0.16495606196255896 0.02293109440225205 0.42888794903597693 0.8349840323216349 -0.23627768979918584 0.7699520996619342 -0.7798871891809385 0.3260355405849473 -0.4028383332115659 0.8070988570920643 -0.4088199662546188 -0.6948570640615277 -0.12866631894675207 0.4624163996395385 -0.5873187668839595 -0.4635881102277657 -0.42792049281765454 -0.6789057442013435 0.9259051118797172 0.37633216134581726 -0.6335820551457589 0.12318501578235974 -0.465203329412073 -0.03299105227750587 -0.663102089618572 0.137040594234199 0.9244414121754478 -0.6719483480385935 0.080998461388061 -0.6094255400078747 -0.6534389501091462 0.35119467814174077 0.72314192620393 -0.17906896053111332 0.44740127747701486 -0.25007115860398765 -0.9426736636540418 0.7484662240149149 0.5032947906973579 0.18276669228556996 0.5455084303115545 -0.2501222494887123 0.07094108952032818 -0.3009062996752181 0.6140374014349708 0.650157033981726 +53 74 -0.07960692747819298 -0.5288566340117509 -0.6571654842337771 -0.590888132520752 0.015030578218563573 0.2546821675616142 0.9713114594151082 -0.7708857449313959 -0.043110167179621905 -0.25705851301155414 0.8688519627520244 0.8837240950979144 0.7479742210874687 0.7558645984375121 0.8265086147206848 -0.9600659767711441 0.001442482197213879 0.8531886592560971 0.7602110460912845 -0.5573413343204663 -0.42399501167934095 -0.725140890276321 -0.13578538373973803 0.08124411484929328 0.9988262686701632 -0.1847539805736622 0.2568404030818139 -0.22834921145329634 0.3753538235451672 -0.20604642987342214 -0.5871932887892568 -0.9500549480127736 0.6133992114820701 0.8734408954786601 -0.14723621582698954 -0.3104324875981088 -0.21174276773254586 0.3392737419943379 -0.7811471116828932 0.9987364660666893 -0.5792522059137866 -0.1911922088094551 0.12513400533041108 0.9257949936017016 0.5685692787589247 -0.4215433709506913 -0.18797852614406962 0.6346156630458046 -0.6498945552770783 0.29762824399107957 -0.6078719817158649 -0.43797398039462876 0.5521631467623793 -0.1080991129880986 0.9160808309924653 -0.2854396227191225 0.4912591797107215 0.638672989172028 -0.6930183612583032 0.5994144581344998 -0.5249221109431634 0.7414882255956488 -0.7185017980374819 -0.8509957798871775 0.06368990264642771 -0.840870956407676 0.42241965973911966 0.20192294200826355 -0.8369889669989745 -0.9922353017649059 -0.1496799494024439 0.7352528670906495 0.2558934044524286 0.8465399150321928 -0.7232687264575566 -0.47668109083597665 -0.44558075425905996 0.420778745278761 0.40256929024090926 -0.4976200127721728 -0.09197125641670278 0.958017600544864 -0.7159035182649482 -0.2758139551559633 -0.25243367385257187 0.5173215422205923 -0.32182606907856703 -0.6989522136606838 -0.2118671156215297 -0.5555232687828979 0.5120907392084053 0.2219858236520309 -0.4177692142375684 0.14989080894173434 0.4257996844425649 -0.6151056311029668 +54 33 0.7115405038697915 0.2628920849877405 0.8832921093677191 0.01833626700363622 0.664021618973178 0.09321546201970432 -0.9586791289187515 -0.48663727216218833 0.2932174464377877 -0.4156437805527098 0.5077852322224665 -0.7834226333792418 -0.5640120986705641 0.15318027130073042 -0.667305865139719 0.5243437541606726 -0.5725553105604084 0.9547571930015206 0.3558289930477314 0.5708452614675172 0.8043505219950202 0.49452806462108345 0.017250462638461528 -0.1577884794561908 -0.5578309502264442 -0.6648121206807454 0.801011217395931 0.3309795074751216 0.29615611401128694 0.13274764534337025 -0.15762509890642784 0.9551227807017597 -0.9319475942401929 -0.8730718852105364 0.5347779993254109 -0.44124904092004735 0.025697185247881782 -0.28378612276538395 -0.6993854584632371 0.645804096553027 -0.14256090620880113 -0.7828353635775311 -0.2633763690747055 -0.44308573026332443 0.7317224694387432 -0.07952565602628048 0.289666914721616 -0.28719633158944635 -0.41578454113266927 -0.4465303832335126 0.6877376103570148 0.00047586180109937537 -0.6587203064552554 0.554593573084939 0.16803100213824473 -0.353720113650708 0.5474788942203828 0.7833274674840278 0.8149272714103861 0.14512960118067864 -0.5861590837472115 -0.9386528747361678 0.6533926306887605 0.6358658172426641 -0.089901748737506 -0.45365936654129957 0.614885387517903 0.23585102812261827 0.43109177499957974 0.9351176285763538 0.6626526548839577 -0.3768403078023972 -0.730650194722871 -0.699873484630859 0.9200274775773192 0.8577883244784958 0.10013256502919621 0.9102536869945856 -0.3827707501610216 -0.7161785452857472 -0.5072044132781934 -0.4603007882323855 0.12993198683310525 0.1409135136327535 0.7114400803195595 -0.004471992671643221 -0.8312628418102916 -0.7084795109272308 0.007663782360981308 -0.9378106411642055 0.17302458428992584 -0.48111764085286324 -0.8636419126918746 -0.4793295157624271 0.3688186888076017 0.10047567528786128 +54 34 0.4759669230828387 0.6187081570819946 0.7740613293200811 0.7570429218962478 0.7458530831914612 -0.17715344616964956 -0.21759535992975998 0.8323488075946897 -0.794149628706903 0.7331655312474517 -0.5870774561164029 0.21956621298872236 0.6204991768988477 -0.26404044037870267 -0.25571479902514294 0.6441052296751664 0.18660660073460367 -0.5760014308466594 0.3532304064307086 -0.049938889922493956 0.013346988778313529 -0.7600299279214697 -0.9093074154463094 0.6929081226901745 -0.031288408492142095 0.6656001764518391 -0.7325770479619089 -0.6040940954863976 0.5924500351152213 -0.9341499267706801 0.5858682658673589 -0.45163095633502515 -0.883930072284028 0.7961572980777103 -0.12494634867364174 0.6020309911142046 -0.8984428607006636 -0.09390576530125405 0.08053301845543581 0.6070098989818971 0.5888921041152226 -0.6480901418802301 -0.8044657142965999 -0.14699569950656155 -0.28714921311289165 0.5977783579772844 -0.6701926954851944 -0.08887319346131894 -0.1939490979932501 -0.19490973919015797 0.4746651227588923 0.1303198551953686 0.33301787242253433 -0.3084182091357164 0.961266704497203 -0.26498699103747203 0.6529423944447184 0.23575517566670046 -0.8728057360195356 -0.022577550502219434 0.020642044992911668 0.9533186040839607 0.09931317041781051 -0.41234740335659503 0.8198635890456576 0.3071268160832159 -0.5800232213076029 0.43024923528383785 -0.1428268371305561 0.6510608106293183 0.09028611732877523 -0.11510487978390072 0.6710016144531015 -0.04396469835932293 0.8066201401753064 -0.6214291557417133 0.23262082190008337 -0.6666982105330366 -0.809184252098569 0.45104705865957473 0.014401372447134797 -0.3987512385905436 -0.6173694532993472 0.42605819110684373 0.9427287916890554 0.44124305166621736 0.06862816911580616 -0.5563573196756477 0.5598452859629097 -0.41663068710776896 0.9958181128932175 -0.16244068302083714 0.38357070846324914 0.5500829773056359 -0.6307383654080336 -0.7375842985066619 +54 35 -0.31837364309666816 0.03100726164235157 -0.09981796470678495 -0.7649323217188189 0.6244581539827354 -0.48948225267578516 -0.0032956776914270236 0.3528563876604318 -0.8131023208308303 -0.4075156602130747 0.7780893935171007 0.640584433206874 0.04353074057044237 0.415163860457038 0.8802073464584759 0.42134106062472854 0.30510193816175435 -0.5634952624618255 0.29050149914890055 0.040944552961072356 -0.6474826650929819 -0.008299505524949291 -0.5734131270204508 -0.16574598790148043 0.26799895261033746 0.05328765780345601 0.6663195561177322 0.2955185912651439 -0.22038306985315348 0.6010701897002451 0.4400459740810285 0.5041561161028183 0.18767364464356606 0.9706627336145242 0.768500031720156 -0.09392204856379016 -0.5044106831810014 -0.9556412306301265 0.48624056205971455 0.3316574856044221 -0.5459916914186096 -0.27868151977206135 0.8266117847296119 -0.4535141637522049 -0.14618551349085607 0.3924012926227247 0.1611623523552672 -0.05877615360632271 -0.5889389442477593 -0.201927612533787 0.52866491626541 0.4745916538099755 0.3618947549632461 0.3212137247336633 0.19180432615045206 -0.036388784066038404 -0.865876845842237 -0.46165503987808876 -0.7806497053514954 -0.2293729723502782 -0.8306257613034178 0.5003587017232538 0.8401939811578543 0.36469027619486005 -0.8503244943953336 -0.23293302475668187 0.007075431215212813 0.04855086721321289 -0.31881016816242735 -0.17594800293954416 -0.10492431060392104 -0.4340560085731622 0.03755281412447231 0.13711751141041373 -0.747052032488428 -0.29607925444408334 -0.443236899763537 0.9866694837749681 -0.25526222097699924 -0.13088043660940762 -0.9682187890423577 0.38404442859830423 0.3175346414621085 -0.7620634975127556 0.9734111545782451 -0.6586811821574912 -0.41040007815819135 0.9621531683589584 0.663854639850844 0.27411112482753897 0.4208785735385947 0.47140257471092695 -0.755393178515031 -0.7333787499640503 -0.3961917441832694 0.5920904671171003 +54 53 -0.4134179267373208 -0.9174818573317507 -0.10113223498672164 0.7825273227123266 0.3053575948353615 0.43796369321241 -0.8505236008434791 0.5046680625174935 0.7313523895185363 0.744727969382627 -0.763995281293733 0.15526461568284255 -0.7061492734428902 0.4995446173304927 0.5261662957517579 0.21297230031889236 -0.5576177100539257 0.9250394988074355 -0.49084929969486235 0.27622678751537477 -0.22366290676411849 -0.19794340346370465 -0.9569055594999856 -0.6969186713097164 -0.1773128323560711 -0.5391068277845135 0.19548694172613912 -0.775638465819311 -0.1679980235793619 -0.6725029393399717 -0.5389312253704754 -0.4893676066681709 0.33258979598080085 -0.8722824296897227 -0.7434822222904311 0.7838151495828378 0.2367006392492188 0.7144495142891667 0.5423550038426459 0.29150932613522085 -0.8874491053403699 -0.5013485816620689 -0.4637804778243211 -0.08782269344585925 -0.49949066464579217 -0.20955444265125855 -0.18757757716022194 0.6294756552492748 0.28769313113548445 0.3021579614944667 -0.7987216208845211 0.15155891109138508 0.5750573650365978 -0.6993640922056175 -0.040921088746092016 0.25053162281293573 -0.005743366640576841 0.0975487754229849 -0.15177746002676917 0.7431573611911293 -0.38004136047227877 -0.7385911995405905 0.5460717685907279 -0.08130717622479233 -0.8365269309403025 -0.6243282173408313 0.7327145813675162 0.24415114335574417 0.4901689664159774 0.7986780687999437 0.12655749629587887 -0.06213076346431423 0.11057080441712674 0.3989480227871478 -0.20587189059761624 0.28179570856736524 0.17489240235452264 -0.8606038652349965 0.3090532148836067 -0.363026311627094 0.5347037711160052 -0.13404592246216818 0.8594603239029093 0.7866042960155262 -0.7860069857085463 -0.368269111808994 -0.30792510192927947 0.9333804608916128 -0.32672338254754685 -0.4881922876809772 0.12591869070824213 0.13495860461743514 -0.07621011283757695 0.37347926935438114 0.15074469733335216 0.5185674645378335 +54 54 4.366860514126525 3.8618824714365427 4.261540548423575 4.835855432232501 4.485383918335981 4.6456588475143095 4.539116629114588 5.2638129547010015 4.754056865644355 5.025972690606332 5.447213519311224 4.15472238886417 4.9705604349950265 4.5838336935736566 3.961758653454165 4.337186465671746 4.171786484253822 6.030974820282893 3.710946991682729 4.5648004509418465 3.111525131376836 2.7176176141575468 5.163004304091151 4.14919184236173 3.7304234544363792 5.484202355417928 5.617266831378566 3.828016490079335 4.750176627399603 5.5454590432068365 3.1311296602107834 5.465721458161202 5.407993048526912 6.360529653468234 4.694537450647699 3.5914960828073994 4.810345501212565 3.9634696862829006 3.528184645579773 4.449377662009977 5.602271349284621 5.020124671350269 5.1265973151441635 4.271017138714941 4.052660894827335 3.366757300705129 4.260270752899213 4.924727687674816 4.3771239157701345 3.3533996431499418 4.535418982800585 4.133681328303689 4.76623310403207 4.9450209414040085 4.47772089140236 2.5359280443480143 4.217801346473247 5.206204909759191 4.730055059559779 2.8982420811823704 4.4698377047739015 6.609976463221753 4.625371437032793 3.2893699925510154 4.239643313802242 3.8911476575729766 3.7401158255674094 3.477340906733298 3.381852223827063 6.213527657176256 3.5517061092413673 3.915451249515099 3.4980233644010488 3.776083963342858 4.958850011171364 4.1954585615508275 3.134028607077859 6.386891884152289 4.226492037264807 4.289728206157665 4.24098597014481 4.359444269213359 3.9681719806146107 4.044117589866851 5.441817824328504 3.317515885777635 3.890525404592938 6.185824585363411 2.769230295711653 4.5982762515919005 4.107917540220416 3.3776240336938654 6.086392341784113 4.021080072926395 5.085723574844184 4.150165552494695 +54 55 -0.7542472841436723 -0.5648968168262347 0.8834699450311587 -0.7811608335079985 0.21668359298843032 -0.8000171187218703 0.29161596921966004 0.8752781517775012 0.13375951140211617 0.19173173881254413 -0.3113254696593468 0.7990069561732474 0.5639899505466375 -0.969731562530735 -0.6913937775363863 0.5580273450710838 -0.2696657194558436 0.2792293979105698 -0.17754514317702474 -0.8013050908290875 0.43865695928993786 -0.7890551627260196 -0.7176212732369227 0.3296609106094901 0.7400516749924222 0.9966863728636801 -0.6106395473877817 0.2536897203465751 -0.33223012258072004 -0.9913162535601798 0.12326090681400736 -0.8653434535190043 -0.5853384665203858 -0.7963575910878882 0.3291412650707479 -0.18675431671631038 -0.9581800028452154 0.3329634058897102 -0.2948666815772045 -0.966178420043363 -0.84769970073977 0.5390673022857648 -0.12745735781577516 -0.7522931424438424 -0.6897306756056414 0.4867077513758775 -0.4212122845457129 0.9465932689263961 0.9441714620502577 0.7036567435102064 0.3220626288076358 0.46923653723866554 0.6362949479866149 -0.7927087599629214 -0.6469220203336361 -0.33841594173419054 -0.4988343779386293 -0.9608128838795174 0.7412926087517315 -0.33881426159748074 -0.5114628330694184 -0.9987916258779816 -0.06408993646147709 -0.49027699100055355 -0.3596938617332157 -0.16181897068045492 -0.13071309353271587 0.49876869084414754 -0.4940439679895521 0.9420435625005732 0.2978974869522364 0.3709348969732853 -0.5651226532184699 0.5565527598421245 -0.6044382350924495 -0.22635011062554478 0.28393319441788045 -0.950054253972958 0.7056390637154542 -0.7851693531992971 -0.6414125878519166 0.6210560089362891 -0.0943720551617977 -0.4344984761024495 -0.7773189261162945 -0.48100258085780756 -0.06526910191044322 0.9511193451101516 0.22388474661766922 -0.39312829954696005 -0.6869343951680928 0.21122772289623248 -0.8044496961111498 -0.3396152697540442 0.9832949274052798 0.6235030114920033 +54 73 -0.8520866231920938 0.0722241605522973 -0.05737173461288059 -0.2517378816046416 0.43359535222398105 0.38751799720317415 0.106329354859237 0.14895801994160385 0.4520797250067703 -0.06336151082944075 -0.2897002517870233 -0.327885964259123 0.5938713552283361 0.959896113921453 0.15365184939586718 -0.752474785714371 -0.7822683459935529 -0.8306568115720676 -0.20711424921893573 0.3211117732839748 -0.022707787844741256 -0.11013708331726013 0.8809281907380251 -0.3227614054554888 -0.32583193036112745 -0.6867740583194812 -0.6619408144865151 -0.0011762355817903636 0.7622770327750696 -0.48556729954540145 -0.024119130654486787 0.32518730248143557 -0.7991321059256964 -0.9377620419592203 0.4434567918052186 -0.4011569999480271 0.7995337959938555 0.18954631566574576 0.7503490986945232 0.5523857402238463 -0.7294382852653922 -0.6690297003915207 0.6865675052630305 0.9886431954977448 0.25478283164172755 0.11488415035635868 -0.8133113050647265 -0.9479468275659786 -0.998974136367268 0.9895453658050637 -0.6208597057892324 0.7747375581568134 -0.27864718733094684 0.2785494798780763 -0.9440256750253468 -0.25540821760982624 -0.21679633807924903 0.4548573719324982 -0.07254421057119065 0.8948904833697906 0.5963723918550332 0.74870200870146 -0.8054138288341461 -0.05712090462367514 -0.6354525351385854 0.5516611371120084 0.5386506357873533 0.988795857959269 -0.10236490190858172 -0.9721053056932183 -0.9474386324549178 -0.4725020032239724 0.31823517618966024 0.6527864115823032 -0.023221777435814328 0.762002390899033 0.06778892389917579 -0.5112706834144709 0.1330750031120187 -0.8518466310804922 0.23087130126488997 0.5876871235299896 -0.39633046521321247 -0.6915511944862187 -0.7395344792115679 -0.6904664263383444 0.8047786591326851 0.4806262288233327 -0.4921762650840249 0.08752102536735662 -0.5524230362008911 -0.13759815957571164 -0.6638138999964207 -0.3083832231113921 0.6347481283766332 0.0596612816912383 +54 74 -0.2621580027156212 -0.9552615674966103 0.5618718993828162 -0.1185580894250815 -0.7108876590548203 0.9397060582801786 0.7305371256950075 -0.5782122391951727 -0.10165706013610643 0.7648227259138793 0.7396569956456889 -0.443080592962531 0.3634711803257247 -0.08546310257541978 0.06072964786355439 0.42420281696690143 -0.28422172585538275 0.986693327338291 0.5983990349009272 0.8483568122114082 0.3221516229008028 -0.26435343181249404 0.3444749516125585 -0.11817607989281576 -0.7823892487256576 0.6560143860471266 -0.6645925094304328 -0.9270180469538853 -0.9656409023061108 -0.8476618661685276 0.6197716941807674 -0.1349651270193306 0.872779876957388 -0.2231548782928141 -0.5301025801996471 0.21499924239494517 -0.43728335445396094 0.4065385222925626 -0.010453377863265612 0.4154439937113372 -0.6312526153151874 -0.3364105112066711 -0.8106891365794908 0.7771797745498612 -0.38705534644555795 0.16610022224881416 -0.9264647079687067 -0.7288771495917479 -0.011171248102302744 -0.10646452753549607 0.2074804574503546 -0.996283728025293 0.7418828116947636 0.2788699859840229 0.5108450591620124 0.3801520142717223 -0.1789028338339076 -0.8700872233345707 0.1782773187666471 -0.0800725031429772 0.525670703000892 0.765505594989365 0.5479688948019477 -0.321775666100949 -0.0821710441903667 0.09798409377104389 -0.8364329530319319 -0.35515877214173774 0.14260077992272668 0.645633513394487 0.23594435309726736 0.38878625401141553 0.5213644499308046 -0.171972818633924 -0.6935020671737635 0.23708293685803206 -0.4839836456302049 -0.6334613876027189 -0.11139336603203787 0.4300805149768223 -0.6148665657394121 0.5436519151158428 -0.955550568836754 -0.2068520037570225 -0.1481061200136904 0.4951537566911466 -0.780004732803228 0.8874723662763202 -0.14759610480797147 -0.46693919653515836 0.1877267385557686 0.42084731628986405 -0.8576548520348803 0.39817644185014345 0.8008254419365075 -0.5386995387693443 +54 75 -0.22406517575869067 -0.4137383808689221 0.408456287125875 -0.8275629846526635 -0.5951889375415835 0.8882658369827934 0.9947073505614861 0.5303081821425824 0.4737578540148024 0.9097938224980107 0.8209493094417359 -0.6284128986272985 0.9451173087864742 -0.35028785045746336 0.7176215775833172 -0.1961254305872313 -0.8683535539264964 0.5341510087804124 -0.8802662816148996 0.6917159582578081 0.050795800216559606 -0.0741431658007008 -0.4931700672594952 -0.8460972137606759 0.24072529198043968 -0.2592352957579498 0.3848327140791614 -0.09757806047529471 -0.44563375821126106 -0.5899118920960347 0.0875870502346281 0.7947825278896687 0.29087852317205387 0.8249430410343801 0.6093577527397978 -0.3494763494693591 -0.2216195714043636 -0.43916100572854977 0.15754540309784582 0.3540163963372418 -0.8531806636448156 -0.4670141960808549 0.902996124227434 -0.0018185404708044306 -0.9090992170906458 -0.345053078694898 -0.021466612981563493 -0.9350547170735015 -0.0648229060399701 -0.08046046580791155 0.3528250909163291 -0.7092501368757882 0.5783893907962274 0.7514565190812914 0.7482760072275454 -0.1110744404777888 0.33061394491772655 0.9532827467504628 -0.8793269651529558 -0.25940565056943 -0.3792230539596466 0.8821689354861499 -0.975445548905262 0.7946640600801322 -0.37859643541460053 0.8452403525922112 -0.07640333488037254 0.3405765371020595 0.2602131187023313 0.23165211679393738 -0.26385714855408837 -0.7083818162584681 -0.28320884561283477 -0.6442878430614571 0.156272335594986 -0.24086363313073988 0.7755816560185096 -0.012017991592574662 0.9643508967991776 0.10048823172539523 -0.328810069614778 -0.9658959286766704 -0.4789967673719182 -0.1706762943996687 0.13884064485215108 -0.030912506895047098 -0.516430987296947 -0.4304728294092508 -0.10358291236050055 -0.7572605066829232 0.9423282352198978 -0.6016016666691828 -0.7226355143813468 0.001693009095214748 -0.6132199256191146 -0.920559944134951 +55 34 -0.24803875743366488 -0.5627112835621337 0.8052356694970395 0.5805872669357048 0.3601524257384605 0.8043161387365043 0.0690349894572535 -0.35639709516138884 0.9362989475584507 0.6610615349307292 0.6155188780269598 0.26714827601243885 0.7718815092359776 0.29268861104161004 -0.0887796603963138 0.47889280805543133 -0.02931916980697591 0.3435262514128541 0.06960232915169406 0.7650322564172443 0.6293970328582956 0.560301063130852 0.22824413393256093 0.6065322363372239 -0.78628403905735 0.01749743704993012 0.36313398433777033 -0.8926329758581462 -0.7638350972321406 -0.7948294006975634 -0.11281450553508354 -0.35415775395079785 0.5993672271775932 0.8992730201176395 0.9452705904133119 -0.3439113721925766 -0.0006813230458946329 0.30581156750646854 0.3188113854831447 0.6295214197321761 -0.2229011461007857 0.7659933516044961 0.12119846704939463 -0.8269569716024616 -0.4830217996220454 0.6244465578001981 -0.2143156895159508 0.45777504574255734 -0.4919927796062227 -0.2545801010604791 0.9636896822515835 -0.917785572637501 0.9400536249188733 0.8592029326373523 0.6494961361107578 0.21288915183764567 0.39825037336388913 -0.3644527282253127 0.9823477876083162 0.9341989011701641 -0.21707421911640545 -0.17301699524599523 -0.37810107324539555 0.1308291744094201 0.5634850543183865 -0.23536340290689828 0.18195970067793787 0.8460943635841787 -0.5533024997399587 0.2629682322711042 0.27573988773898117 0.5317853550475171 0.7098193520447351 -0.5262169006214013 -0.17586220744127967 -0.7233134280075517 0.7003817739522433 0.6673000652144037 -0.39403847988316665 -0.5005290128581295 -0.5323780368747035 0.8593768640118455 -0.4950559544960267 0.6089986881178131 -0.20687029288344339 0.41743466595046197 -0.23459855168249422 0.7067921795600403 0.9344557743441968 -0.766091688121399 0.42099745515174924 -0.8448545513751857 -0.7871369723636332 0.357330234554849 0.7062615693923708 0.40147600602692135 +55 35 0.38962920367461185 -0.11177542115806949 -0.7642702393080656 0.691272223736217 0.4667575830201356 0.33195612863819046 -0.6950685177621994 -0.0685387565307587 0.49074753769424784 0.8562868450699683 0.6693621115199859 -0.8797506256451537 0.2686440208194829 -0.7947402898915426 0.6658771463207642 0.482828186028017 0.8110686879167348 -0.3194304192077051 0.6483780345156962 -0.2614446911626287 -0.17794163143562947 0.618354325084751 0.28108338451028225 0.9469665158336595 -0.12132503084932833 -0.6804711831230905 -0.05954470990352734 -0.761953716284411 -0.32082828779754546 0.045846659556125324 0.5580943723157605 0.7241666895348791 0.5382050112561674 0.683850229449211 0.6340568508701143 0.20231735484632662 -0.046298727916816995 -0.7448727769618466 -0.524874179928376 -0.2079100573480983 0.5434921856272459 0.3972611571893312 -0.4321783014140703 0.03300052233271433 -0.6349197608497623 0.8688240546265984 0.12572720297229667 -0.5257334113361389 -0.10244017311958764 0.6945967260711983 0.036725377843443985 -0.15062739075253329 -0.33421316392431044 0.11590265136561473 -0.8215069309066589 0.2669814301172093 0.19084843133851814 -0.2705726923655314 -0.45061018799654984 -0.12830492520499237 -0.35153831268728664 0.6152355667829899 0.20988863131924518 0.1531774455490864 0.4722373645568356 -0.01999613629783137 0.5167763390494631 0.11723868418530192 -0.9466221301000983 0.01996703389647614 0.6411103762062118 0.07063500162507119 -0.2180790413119531 0.31213609556889144 -0.6421765555414067 0.6613115772459395 0.2613288114761143 0.11486896557787296 0.9424388824613648 0.7297600773547561 0.6988904583924369 -0.3673411417088188 -0.9168002862843527 0.5950371824068637 -0.6595081453020191 0.20000413143061535 -0.5350655193804927 -0.47826554064613735 -0.4659312743030122 -0.06555362477018756 0.2621909278115109 -0.6050614202607354 -0.42109324577865115 -0.20495874706990014 -0.6384669957825597 -0.38235412447639217 +55 36 0.9694008877929428 -0.2940693644110324 0.983349109052611 0.9656779082134261 -0.7823868301656662 0.9485026381411574 -0.6841870670505454 -0.9224865585581628 -0.2523763823180847 -0.03475089507693352 -0.6253685881383961 -0.6538742648878282 0.9730446059958466 -0.3596251151265788 0.47103753797286796 -0.27173512360064644 -0.21731912568049006 -0.9436236437073182 0.4654852044505844 0.9084505465811035 -0.9973203728823472 0.42850706552943074 -0.04686795886094708 0.8454919319749779 -0.8335425523301978 0.10264773991189058 0.35178726532794125 0.4343613929710133 -0.7541854658845275 -0.4520299695338279 0.9793061764191824 0.08037987867063756 -0.22244067318830107 0.6207459415083576 0.8860986464136817 -0.20139562046800363 0.6876469502336702 -0.16448754956709322 -0.7004569911186562 -0.5820847327669658 -0.6591353219245482 -0.13663022224471466 0.02206560683258263 -0.7764080019855926 0.08145365921441994 0.3741809490842747 -0.12878220777769278 0.49194862283211793 -0.7075327395875097 -0.06849971219201478 0.6143896908306334 -0.8666296353028253 0.5678933102705668 0.005510841043022241 0.09776871445871427 -0.6999982365677224 -0.2642471718646031 -0.19882112634285298 0.8266057427470792 -0.33254299216619865 -0.873059422965478 0.6333159839253293 -0.7013489659813468 -0.0266980837707802 0.5852756923497442 -0.4118807309113006 0.39767350287899483 0.61664099907799 0.939441300375212 0.9973204045889452 -0.8584983255883882 0.13126288638328787 0.5039332866426618 -0.24081089760992214 -0.12800482652220424 0.8551155018278054 0.18509072503832358 0.8966942660613277 -0.8199714118209127 -0.36055974292846615 0.31010638292082127 -0.7611754216574302 0.7128634669945411 0.12507302438486922 0.5732413390922053 -0.39410011911993004 -0.2504592979241733 -0.3379969254864499 -0.3656930795250166 -0.9829563309037521 0.24961543211046622 -0.4781380623438207 -0.6977482909389439 -0.4555913924384347 -0.06389219123195078 0.31814443855773344 +55 54 -0.7542472841436723 -0.5648968168262347 0.8834699450311587 -0.7811608335079985 0.21668359298843032 -0.8000171187218703 0.29161596921966004 0.8752781517775012 0.13375951140211617 0.19173173881254413 -0.3113254696593468 0.7990069561732474 0.5639899505466375 -0.969731562530735 -0.6913937775363863 0.5580273450710838 -0.2696657194558436 0.2792293979105698 -0.17754514317702474 -0.8013050908290875 0.43865695928993786 -0.7890551627260196 -0.7176212732369227 0.3296609106094901 0.7400516749924222 0.9966863728636801 -0.6106395473877817 0.2536897203465751 -0.33223012258072004 -0.9913162535601798 0.12326090681400736 -0.8653434535190043 -0.5853384665203858 -0.7963575910878882 0.3291412650707479 -0.18675431671631038 -0.9581800028452154 0.3329634058897102 -0.2948666815772045 -0.966178420043363 -0.84769970073977 0.5390673022857648 -0.12745735781577516 -0.7522931424438424 -0.6897306756056414 0.4867077513758775 -0.4212122845457129 0.9465932689263961 0.9441714620502577 0.7036567435102064 0.3220626288076358 0.46923653723866554 0.6362949479866149 -0.7927087599629214 -0.6469220203336361 -0.33841594173419054 -0.4988343779386293 -0.9608128838795174 0.7412926087517315 -0.33881426159748074 -0.5114628330694184 -0.9987916258779816 -0.06408993646147709 -0.49027699100055355 -0.3596938617332157 -0.16181897068045492 -0.13071309353271587 0.49876869084414754 -0.4940439679895521 0.9420435625005732 0.2978974869522364 0.3709348969732853 -0.5651226532184699 0.5565527598421245 -0.6044382350924495 -0.22635011062554478 0.28393319441788045 -0.950054253972958 0.7056390637154542 -0.7851693531992971 -0.6414125878519166 0.6210560089362891 -0.0943720551617977 -0.4344984761024495 -0.7773189261162945 -0.48100258085780756 -0.06526910191044322 0.9511193451101516 0.22388474661766922 -0.39312829954696005 -0.6869343951680928 0.21122772289623248 -0.8044496961111498 -0.3396152697540442 0.9832949274052798 0.6235030114920033 +55 55 4.547372065694766 4.655728789830503 6.4297883980627715 4.7549293873108835 4.36713928391426 5.898301669373688 4.193817444575091 4.8498977727299115 3.9519179845841457 4.910049225247862 4.877760692187604 5.094708892260776 5.159817155505998 5.641158702157497 5.476233314769596 5.057421295764157 3.784516644004749 5.191652800229024 4.203122830460154 4.54307729907213 5.000839972231686 6.137887927511207 4.180743481354368 4.903067329262594 5.445997407055978 4.666360419717865 3.6333118451306374 5.636136971581088 4.819403498560408 5.259131332103173 4.822654961765817 4.034490080118296 5.832367602556894 5.86998813798553 4.889786901641104 2.236760032670184 4.724033595615278 4.414093173500042 4.9359410205891585 4.952969496229839 4.985527665528188 4.47491146898228 3.5810474792228706 4.188473498331549 4.202974500182942 4.512659323730912 3.304329236071384 5.159783892694483 4.828289366447317 4.4164387503633495 4.350735039269949 5.31831569324367 4.86746779285523 3.633756353511714 5.542211178589902 5.088123265329673 5.0354485078235784 4.49189468141927 4.35906710470905 3.7276202415175703 5.939263974371728 4.482085475280126 4.616610604457497 3.427555250473409 5.193873081844522 3.2720630445537044 3.245486964239302 4.863095227735295 4.738373806749333 4.35284213884815 4.412958763687494 2.9619420806640804 3.9346531118727484 4.03355696513345 3.215889262657936 5.950329888602788 3.186494035686975 4.513503722729202 5.023684997089989 3.78076618980835 4.980726352720023 5.728987721365515 4.606015884713919 3.472691950733659 5.199619486624716 3.0971688413803267 3.102893409360607 4.471224652934241 5.102060657111416 3.4514662576653947 4.0805444952325916 4.875647213394357 4.674498591281582 3.122635775385996 4.6601708172997185 3.571029281450885 +55 56 -0.15402242894533602 0.8199306870830774 0.93807223744734 -0.6099408176205454 0.47998920175564863 0.9229203117798261 -0.9818264980780469 -0.5344330727589761 0.05666228140520735 0.7726735165678973 -0.9143459769915081 0.6995061137737799 0.6502991043579642 -0.5188856430631628 -0.4904910994855538 -0.4912417679429779 0.8703973024935174 -0.7630139021450988 0.5486587151578515 0.5705931107471856 -0.5519767900116781 0.985854835615344 0.16318700055574453 0.3507623418286714 0.5944670423145078 0.8622146811819635 0.2798901159442222 0.6307605802524583 0.6942827591412524 -0.8007623186385453 0.5008148719217176 0.5184973194049902 0.5417595388810799 0.40371631632789096 -0.0734364423642413 -0.2231129662470479 -0.5953747553607451 0.9701129491655311 0.4493548654357986 0.5008579016218062 0.4564968078827003 -0.09024613218997612 0.5915114840078013 0.15994736996616976 -0.6269499392313245 0.6807087319885876 0.8278495962922474 -0.9853866121407742 0.2771129040432583 0.8373705237978069 0.7018512115319575 -0.7088076195270268 0.21202342829046206 -0.5036096794746816 -0.48464848834780483 0.9987705657746431 0.6547449095000586 0.46714645171048574 0.14021839260425462 0.016199336696611555 -0.9048244701889794 -0.2174258843574497 -0.7834146945323737 -0.923445853506853 0.021658846051578973 -0.8564421841903929 -0.10584371378236934 -0.06111533028778782 -0.0952449392974748 -0.6961799363553376 -0.49843346091982466 -0.05261223166268669 0.5203422379956475 0.7095429141865073 -0.8859265875435822 0.7147925188631696 0.2858877935121342 -0.30098863289889377 0.11904264228489736 0.32281666009011256 -0.9795215028903062 0.7589532171422257 -0.680604201079998 -0.17943482930124688 0.8859607733283053 -0.0449186846222942 -0.9026226153401835 -0.1466966316200653 0.7332945862603379 0.018935901422426626 -0.21544039570000173 -0.564012951955031 -0.27166819462777636 -0.31102402456670997 -0.1997930439794049 -0.219919983434115 +55 74 -0.6947116772841821 0.5144123299800227 -0.4297465211333755 0.5275080731358162 -0.26819103765665964 0.09202075414726152 -0.5613741871406535 0.3249919760109983 -0.16230466357832363 -0.9088354194893757 0.15579856639145273 0.5678962793167137 -0.7073476054109922 -0.6519378715070341 0.8318795346058077 0.7337546632374532 -0.5262287201771194 -0.9050574953327586 0.8298609571082081 0.713166919204695 -0.9885836987110939 0.9405073659705532 -0.849172335288572 -0.29419061102211397 0.755261219042711 0.8660377843033344 -0.060780223201523764 0.6752274183373979 -0.11651636747181526 0.39858602309727087 0.7333230858530468 -0.42498308218861247 -0.7276777036058646 -0.8616669438335556 0.9672763956921306 0.15809959627581294 0.6313472415505321 -0.21153704563880016 0.12629472995760294 0.06724916413089188 -0.8370105758039383 -0.4095585376420918 -0.822564950507432 0.360979487304413 0.09870463378415217 -0.16291010138764372 -0.3337034439909705 0.2680268198559337 0.6417618244612198 -0.33810002928059424 -0.32492153321157735 -0.4744163505072265 0.5140000638071691 -0.4844971217442109 0.8852077000091052 0.8579246740934334 -0.5018829755375236 -0.7822405922880904 -0.35053363832526063 -0.15392465766106112 -0.682271591468292 0.6822168620154623 -0.5907177705352773 -0.824175828349385 -0.9659429683730827 -0.4437044691337497 0.7355506200821031 0.8752514556263762 -0.3456072690783669 -0.18910118898326855 -0.383045997165699 -0.3101761231225406 -0.3898833547408542 -0.07769178203014726 0.12437134685541285 -0.0763116107373829 -0.3084793192535771 0.568195436890621 -0.5037287750986197 -0.06469421857489843 -0.6488159866355012 0.0808965446928891 0.27669119160320177 0.33642272637581083 -0.703388519808168 0.8951306740305343 -0.31035657584694953 0.7589407584099592 0.5858810927124234 0.4715487681144337 -0.8915333075592311 0.44902380636006667 0.3160415127072025 0.512689704278869 -0.9440928136616356 -0.4220710437857724 +55 75 0.8704533560916703 0.6770505531370834 0.5793523089196837 -0.06141581903229976 0.6957724480324508 -0.8155189621308991 0.2890089940034837 0.09887015294886825 -0.6096473548929908 0.7682890891296188 0.5587233907151734 0.5429669289057142 0.7221536293623703 0.7257849802390992 -0.908247271066611 0.8666841148921041 -0.11120647243648918 0.9424227183022131 -0.6146209227783084 -0.0682077049904839 -0.6872309012117763 0.5770639957666657 -0.19901317627826076 0.9431005633400027 0.4538710844306344 0.008730811501491242 -0.8695398421040985 -0.24885341528992022 0.6309099187059206 -0.8365536533518525 -0.5924946184517894 -0.05889609228755899 -0.6970103597646866 -0.3686790995671805 0.8824316525676676 0.3450695639676826 -0.8349483061104712 0.8811844175093 0.6582582211309929 0.6777602342096305 0.09752471509549854 0.7535688911824883 0.35457952390832226 0.3557519314161641 0.7144496394203876 -0.5535348325080824 -0.3838565475850071 0.8913880922852655 -0.5610260338371058 -0.6445598100251915 0.41146771032298 -0.30963645668600237 -0.9963655229129174 -0.023997107444316823 -0.9361030970506299 -0.6063410536694027 -0.719488303120241 0.39983450908972995 0.07648957565074732 -0.5071686445909698 -0.5979089032681122 -0.49667464761224545 0.8120406206394883 0.04238855621502302 -0.7200754215804539 -0.30371649910785625 -0.3707376772644426 -0.5563048170542215 0.34057149333718395 -0.7203645748811944 -0.3417156186534269 -0.8806644858355679 0.41776667103527965 -0.8302332339319303 -0.4660504709487798 0.9052981784171956 -0.23660379524295916 -0.1336481067171158 0.45927058262856524 0.5582334062042758 -0.3230960261806055 -0.8859792606697958 -0.532086808849153 -0.18599962379105972 0.006323108431030233 0.1705853154673922 -0.009647440929050122 0.15954964729361687 -0.7451179129947669 -0.22643779716554313 -0.24886238034562158 0.3361084935481722 -0.01309519505997958 0.46303986654095475 -0.20705457972785202 -0.44578738135533813 +55 76 0.251583136768619 -0.517088456149774 0.1151618387795148 0.41908281760153976 0.7432704919151265 0.5855100269464621 -0.3558010319036675 -0.7517727118213342 -0.5176628945727126 -0.1261149215832873 0.7742723688594386 -0.28142659982785867 0.4081502432751465 0.7799448367223152 -0.912346363804819 -0.4970870979801283 0.867647765687932 -0.021005771826224873 0.06433430384410666 0.38151379589426626 0.1539915229599722 -0.8450667504267695 0.917385386373248 0.4147793652101859 0.7662379747451478 -0.8827202880660154 0.28492411062983614 -0.9963933571147932 -0.4480855546421745 -0.0773025864389214 -0.5477253087291365 -0.8268283439584996 0.951857738207081 -0.2911886618052981 -0.0971032262405509 -0.42496043744816236 0.5772846590664318 -0.7439774603924312 0.8708746037967781 -0.3796105542663375 -0.883304566414246 0.8985250094561643 -0.5874996792880602 0.9065862029974996 -0.7899003800313966 0.22931580558578246 0.07280663211990568 0.16557899901200313 -0.23233295164510714 -0.3147524942735067 -0.5712191157016078 -0.6431373715137301 0.36603645187999456 -0.2503626647019699 0.11874863842867667 0.3347294497762199 0.9865952308309778 0.32966144376746276 0.6179333716136592 -0.4874991154762036 0.9438595325621417 0.12344873595599948 -0.8125900605862881 -0.3257499248842455 -0.9254007920646168 -0.8370381699018448 0.10618852203093132 0.5240887772724143 0.13642178408146943 -0.5175057745790093 0.9998107153156668 0.10570937790131452 -0.02330241908295627 0.6031768440544736 -0.14338646272787714 0.8799845141422398 0.36083801894700707 -0.6640873516652019 0.9641214955122455 0.4270141917772241 0.7597542820133707 0.6650547193833325 0.3709296401423421 0.8477460600845204 0.7417102456342435 0.24073799716822464 -0.7757074840754794 0.029097198699186144 0.9578002996773378 0.3035542735311394 -0.3159208332658825 0.656075586647606 -0.5866029354612048 -0.11270467411824381 -0.8538409643677927 0.6694091487594289 +56 35 0.25716547533516887 -0.38664529804730163 -0.3707027554510254 0.39584618654352477 -0.5214298944987672 0.819907267698047 0.2649797885044658 0.3424169508655359 0.27141914200306294 -0.30441507529157996 0.5759446544437588 -0.7026775587498006 0.24409567417682498 0.07565532326503055 0.1771160110829504 -0.03704369661707707 -0.40417216741824347 -0.5369069157632433 0.7538967852567593 0.3390539853689767 -0.22295624485017518 0.9363855017546532 0.9300732192620818 0.9516648092107054 -0.23385858267697968 -0.4900127033136512 -0.2627317080034941 -0.928022753887829 0.2112422227096602 0.4451178416239414 -0.9273080879752227 0.1705549970788438 0.8252977572972982 -0.4827437408419166 -0.9514081714338358 0.87409176893237 -0.26749635440048825 0.32754266322361714 -0.7931218278870173 -0.9267420073880273 0.38700631554723386 0.896595771297813 -0.7284944159430187 0.7972936709654084 -0.3596022128878773 0.2904715981004773 0.3019251664918132 0.34058504595771444 -0.6169612076499709 0.7571169335551162 -0.034193441124975577 -0.9013542350974548 -0.3966552934664289 -0.5556042735964626 0.16504450691986228 -0.8029201906653769 -0.11434460016702586 0.0848040823110583 -0.9395085065272752 0.13985866666720237 -0.5769674377622536 0.4987876271902931 0.20095719245416155 -0.09930986381898044 -0.06736373724402767 0.5413681742379561 0.7576940227822682 -0.580570282955839 0.03531633874717954 0.46292787047148765 -0.6088671263544161 -0.12756781099007308 0.04612780398313476 -0.49892136419969146 0.5629784069289892 -0.11454314060714932 0.5385018988784365 0.2664956872149127 0.5474866399200085 0.5212098247843915 -0.7043583769414559 -0.8444823964867136 0.5080968859900268 -0.9852371985974815 0.19671178181355176 -0.36759102352249573 0.9150527371760955 -0.6609834288621166 -0.5463730218758787 -0.5307403078379529 -0.46186445272144017 0.9331204221580287 0.7817788545799575 0.110101192889146 0.6346816299855464 0.9303293910141099 +56 36 0.2334766542364597 -0.16814722938944215 -0.11451498899222656 0.3731969533554387 -0.48667396185020406 -0.4757581038327914 -0.6175069417723504 0.6923702089526294 -0.6781915993091603 -0.9197708402781155 0.4097269049848766 0.831556495103073 -0.5721290291522911 -0.8810461257554341 -0.9282582290359176 -0.5266636298085499 0.5613743379076255 -0.8222846739385619 -0.8272212254276672 -0.19392651903328195 0.544969046930518 -0.2486839227207973 -0.23810071180123615 -0.8417158912449956 -0.2036322730657849 0.24519557421740878 -0.4161686189622338 -0.12014773359600617 0.17063064580372078 0.16358656634821345 0.12922347574137483 -0.08995137326681357 0.908050138621413 -0.4209176746354766 -0.40188750158691167 0.7036803799460694 -0.23243546516620883 -0.8604944977759139 -0.48892822183163 0.8110845633195618 0.051162757951891624 0.4014146732654653 0.48080956293105936 0.02469771892089545 -0.5534046880236201 -0.3881389383884237 0.16423120248695677 -0.4483375611780076 0.22128889360907 0.6356018072758443 -0.705132615961968 0.8940217598992253 0.9810423427034138 -0.8965270482097536 -0.5373234708113788 0.6557797796630291 -0.3891310158340473 0.1190805839848672 -0.570366985778084 0.5857510504338892 -0.6464069093783067 -0.2068945540353715 0.04086581099929343 0.49908126116069385 0.7427470508982057 -0.08729314265239929 0.13896024066303725 -0.549727442116037 -0.06597683284874867 0.6559929084665288 -0.26048863400134903 -0.10799418819512852 -0.44293155929882433 -0.025833599394175177 -0.223533798748625 -0.9206008223108286 0.10402429698516102 -0.7733767348609959 -0.33207111828597524 -0.6721100565516069 0.02292111261233698 0.7718180558085281 0.11462783633993534 -0.3118655565641928 0.6826863450837086 -0.7132501198773602 -0.3607711132016733 -0.532503918620346 0.0024595299734231357 0.6759232655926122 -0.12724301728935572 -0.8811804941155152 0.2500702369002994 0.32681191521183606 0.7706126585529554 -0.8621602047053447 +56 37 -0.29206189417305817 0.7636664679989038 0.9872182587527918 -0.18301577198610075 0.458894501271089 0.32330818523959404 0.5587525947142353 0.5665801315769063 0.4344729074174458 -0.9210437405938214 -0.5545890250442493 -0.485162982585152 -0.46016325356476995 0.8123938549061116 0.8461841626904023 0.9686897475571146 0.8270799133638456 -0.04241743071572612 -0.965890278508077 -0.7863279958044656 0.7036152592673495 0.979064974551692 0.04236868968077867 0.747525779088926 -0.47985160337785726 -0.8307993891772774 -0.0016359880730605347 -0.4472139192420297 0.29051289137817937 -0.18053219802365783 0.24923600063357632 0.7376850730513704 -0.4396371087153461 -0.3407209298327074 -0.6019261547084684 0.6494906997238319 0.010162863763927277 0.3117785432914353 -0.007328521980012326 -0.6604923417620612 0.5002235139706455 -0.5802537719966243 -0.9896320986544169 0.04498207879680338 -0.4639986976844237 0.28740385390977075 -0.34690251367273506 0.4552432970079394 -0.6868672278184049 0.7625022262984662 0.17291443049884725 0.661977078302497 0.020745080956911854 -0.5085609523536305 -0.3569524757571576 0.45781419382118727 0.6664248908278914 -0.32075371389769036 0.23049966859346216 0.06462399691047094 0.8510965899117704 0.6484547445108546 -0.4078832307079281 -0.3276365937530272 0.8822154187132423 0.12233953154646837 0.9991229645455577 0.31573819319978536 -0.9098692056465745 0.9773772062746533 -0.4663381630362753 -0.5583522213098928 0.336583587828305 -0.7630371844806367 0.3756221972821514 0.7137433704560383 -0.5625723284053901 -0.0765827870761604 -0.3527620110757934 -0.3890807404252472 0.09260320749325479 -0.34890571880637755 -0.4187986393491432 0.194473813548518 0.26431612964821505 0.5754631552645784 -0.7718888436689226 -0.7650907551316164 0.5446535905736665 -0.4240680224443485 -0.5763738430643452 -0.6324704608677578 0.08682018743245967 0.9261376062805629 -0.49649959993891213 -0.16288054805523333 +56 55 -0.15402242894533602 0.8199306870830774 0.93807223744734 -0.6099408176205454 0.47998920175564863 0.9229203117798261 -0.9818264980780469 -0.5344330727589761 0.05666228140520735 0.7726735165678973 -0.9143459769915081 0.6995061137737799 0.6502991043579642 -0.5188856430631628 -0.4904910994855538 -0.4912417679429779 0.8703973024935174 -0.7630139021450988 0.5486587151578515 0.5705931107471856 -0.5519767900116781 0.985854835615344 0.16318700055574453 0.3507623418286714 0.5944670423145078 0.8622146811819635 0.2798901159442222 0.6307605802524583 0.6942827591412524 -0.8007623186385453 0.5008148719217176 0.5184973194049902 0.5417595388810799 0.40371631632789096 -0.0734364423642413 -0.2231129662470479 -0.5953747553607451 0.9701129491655311 0.4493548654357986 0.5008579016218062 0.4564968078827003 -0.09024613218997612 0.5915114840078013 0.15994736996616976 -0.6269499392313245 0.6807087319885876 0.8278495962922474 -0.9853866121407742 0.2771129040432583 0.8373705237978069 0.7018512115319575 -0.7088076195270268 0.21202342829046206 -0.5036096794746816 -0.48464848834780483 0.9987705657746431 0.6547449095000586 0.46714645171048574 0.14021839260425462 0.016199336696611555 -0.9048244701889794 -0.2174258843574497 -0.7834146945323737 -0.923445853506853 0.021658846051578973 -0.8564421841903929 -0.10584371378236934 -0.06111533028778782 -0.0952449392974748 -0.6961799363553376 -0.49843346091982466 -0.05261223166268669 0.5203422379956475 0.7095429141865073 -0.8859265875435822 0.7147925188631696 0.2858877935121342 -0.30098863289889377 0.11904264228489736 0.32281666009011256 -0.9795215028903062 0.7589532171422257 -0.680604201079998 -0.17943482930124688 0.8859607733283053 -0.0449186846222942 -0.9026226153401835 -0.1466966316200653 0.7332945862603379 0.018935901422426626 -0.21544039570000173 -0.564012951955031 -0.27166819462777636 -0.31102402456670997 -0.1997930439794049 -0.219919983434115 +56 56 3.1903668546675226 4.06490083055095 4.543806433141477 3.6874843112561093 4.517505320319044 4.098724636815483 3.8949741385736543 5.154242192620946 3.7607731132250852 5.588482621955794 3.8588688712529815 5.299133267096964 4.060886668859627 4.2400142340040325 5.226242573526329 4.436278772809861 5.787441549093135 4.288820325658614 5.482746131147137 4.106909450871936 4.971776440384847 4.361724689969666 3.9226011837393324 4.355334960651345 4.084049765966559 4.4094913939859035 3.974339985798232 4.849783338558777 3.033709442495175 3.9327601068493663 3.607272698998747 3.828378133274266 5.389996535172905 3.8662129684812783 4.2148853667094395 4.828874296079897 4.194130126750296 4.312427559721215 3.606067400947073 6.240243316632789 4.342951266919943 5.139103375393315 5.298450036916653 3.6074663736945976 5.045715724122137 2.5483975725605523 4.217360545921309 5.798273426926965 2.699509462580223 6.618264488205713 4.188078253076613 6.519623691439394 4.102244195388497 4.8238713436623275 4.253785364361853 5.5172123393581645 4.8696356703754295 3.136951794198575 3.8541092815102096 1.9440964285922893 5.676692222222428 3.97068169735239 4.868061482065804 4.029766527214042 4.150555919592296 3.35774473334503 4.6437991643927345 3.9788126472563747 3.534829743478504 4.482380849376495 3.4291239759910788 3.148780943548946 3.7621905388661556 4.734459454911963 4.612992407551976 5.745227172170243 4.372300649659778 3.409043775504707 4.51751014604338 3.9677552280195716 3.026129368456697 6.390614477280933 4.601745098973351 3.1903306059284486 3.6915423722780396 2.4877324037176995 4.851198404589691 4.7921975698668415 3.3908038280469643 3.811140827168901 3.443163196045946 5.456922298357752 4.149521673610121 4.928015742619605 4.731706971560537 4.525297571303771 +56 57 -0.7273968524989023 -0.8341545079253379 0.5312357858519889 0.1716501595508213 0.48923886288610063 -0.5408462004967314 -0.33745157941217374 0.4598114739006076 0.6577789140566219 0.6463876960390567 0.5608138256350916 0.6980883439872614 -0.7392065686818228 -0.9677578469775654 0.1756629901799458 0.6385572085556721 -0.7415347158101917 0.2346360290387126 -0.30577856809757975 0.36512331342516235 0.46956159793658014 -0.09235682749316454 0.3337047865511771 -0.13999338025261387 -0.17906442957240087 0.1724550770025346 0.10374314504661353 -0.8004129290602762 -0.029015212186004113 0.6747859007725308 0.005136311634886814 -0.24639144200848762 0.7321813242642874 -0.8632181090113777 0.5893215790579418 0.9535129700579206 -0.9452188687652288 0.36136964600154675 0.5610293086407641 0.4263229750728459 0.5967153875689633 0.6607724211117891 -0.9249262996607566 -0.37486463813935367 -0.6271562620032487 0.1526749274585033 0.6985164671184929 -0.5122574999691589 0.01136603195702568 -0.988768766874287 -0.553285285569916 0.9055337735874884 0.06727674284387763 0.2223202252282701 0.5277638284021475 -0.22376197289657207 0.7777017456540263 -0.7253448330830801 0.055573801862912386 0.16503723311574126 0.9929902811039455 0.7400184731808077 -0.9934626036086354 -0.3863769553278369 -0.6314277109760544 -0.15764928489795071 -0.2896391095011295 -0.1645717771477817 0.4151025666380377 0.9898849388646611 -0.06849660711167771 0.08732374644770569 -0.284657688191464 0.6894357091832954 0.0844346914965941 0.267717888051896 0.9144138255146985 0.3469678165994512 -0.6722328670243967 -0.9074001056383543 0.038039333651432194 -0.5689517227686525 0.7217091570624989 -0.6641443549242947 0.37737562442430517 -0.318299868201936 0.8678542329473229 0.16653968279281206 -0.14678476734138424 -0.6633168776326468 0.393365788180539 -0.6132565042748213 -0.24633610363456415 0.6067243603653996 0.7842147985508425 0.6202200325670992 +56 75 0.9957150893141635 -0.16156245786607126 -0.2165146889714178 0.025005605086539928 0.23958590167007965 -0.1858037380013451 0.06098738309874108 0.6347939371770324 0.7076133656593195 0.5014554732079646 -0.4485196430205043 -0.5168146389862578 0.5859856163678234 0.05608382926969435 0.34823491307451726 -0.1367513994819758 -0.9247023872723783 0.27014643847304765 0.7526978945425502 0.47866758645357965 -0.672932454340746 -0.5136524835131806 0.30426453984056656 -0.3109171639294612 -0.7488830716470019 0.23749126241376417 -0.8654942526846316 -0.12035376533991227 0.6658605366866035 -0.5292402512641201 -0.48490378520218713 0.1880245795226707 0.23959867586683758 0.1427893704527552 0.4118387420872509 0.18923517945733703 -0.15471883327372815 0.035028537713410524 -0.4307498560318812 0.7772432340920963 -0.22947496331015382 -0.8842336714330585 -0.22927451645447472 0.2958840427376703 -0.9773322891412124 0.1589878217572307 0.013537706762522195 0.5853041149274023 0.009132897117569039 0.79343165841531 -0.2955488620963962 0.6827001175710334 0.9472621391450469 -0.8272587148027861 -0.13081038794556532 -0.05822330896038541 0.9067546641329414 0.6907246795722952 0.1649034296973042 0.07680148726475577 -0.9023326939234189 -0.2849319472728655 0.5412585202861535 0.4508807262418859 -0.9684163553184779 0.8586193234914892 0.8981009506715649 0.9366561154551718 -0.20623916196195102 0.012028726120418609 0.3787374622709787 -0.3703690550991394 -0.6175289880850212 -0.2669552495025611 0.3741087675320849 0.9810235040515389 0.09738282737611259 -0.08014148429281276 -0.9185574150668403 -0.05205811181069686 0.20895998904609248 0.6382130459680759 -0.8404835270345643 -0.01572016908603313 0.008897033999928583 -0.08306036195897559 0.12027340068335302 0.6033241008466586 0.46143891706108553 0.19602793510987526 0.18512359453388805 -0.7337600767039323 0.07861653030358196 -0.7083735198277916 0.360077006211309 -0.48673904946747437 +56 76 0.21784341019743025 0.596764696758542 -0.2944215555270062 0.8795512872653239 -0.9690116609955497 0.3555070576982662 0.11284049037879673 -0.9320445104187627 -0.4800805216764674 -0.02484144739425198 -0.11121948471072152 0.4130449612566047 -0.19001863742437664 -0.43403441335475335 0.8559029478922513 0.6987083410759962 0.294436884696899 -0.9420624934123865 0.6077462581546333 -0.7356825965854408 -0.818301267590813 -0.07671582609254068 0.31643981558717726 0.4875811072407894 -0.3332196179632896 0.7679856187194545 -0.7033265671671407 -0.7393925740966656 -0.10753730070949974 0.5130924819682541 -0.11709670686831508 -0.9900489845024287 0.7519752726490847 0.577683556847695 0.3034987576655066 0.31180271875918253 -0.5381428059749318 0.8381860809533312 0.1642489758829131 0.7253306214380171 -0.4473281505216038 -0.8369805299032544 0.5143746447102586 0.9698911615121184 0.12490876108405913 0.4156372526971197 -0.7972344974225223 -0.587881263026989 -0.16793813397517376 -0.8517379294368432 0.61363693987243 -0.9859998458512182 -0.7297254611159891 -0.03316856588032935 0.6129410677948439 -0.44609881930624495 -0.5723030370210145 -0.30170402073418745 0.4516818627071377 -0.5187547849713998 -0.06631377419994 -0.31300455034996055 0.7606377909827151 -0.023987726392411535 -0.37122559743300165 0.32289700038082736 0.9678672005913569 0.4234953925045175 -0.43072793956259714 0.3241875610894258 -0.01208743726448036 0.5124865030195696 -0.5923399964437657 0.9279955933296968 -0.8294718695547589 0.2908988027496522 -0.4495971553494118 -0.4258828356088342 0.2772768121001712 -0.20071960935884658 0.08098123274145452 -0.6219612621478199 -0.7217908622012945 0.5490019821362722 -0.44641562057533535 0.17372506920469521 0.08155807023673645 0.6853097971941846 0.241932448668573 0.042756113927509 -0.2794390622731677 0.0039041387701308494 -0.6310743254106446 0.40423963890858494 0.7516415163306782 0.07750438230524503 +56 77 0.27230904702320724 0.09057261130688232 0.1442304367415801 -0.13784406543683247 0.31244786353279497 -0.1033865978705828 -0.3107239520701264 0.4982468364712067 -0.06947062149101768 0.8390189077277641 0.20665422910986164 -0.8299564395007566 0.34297216261566943 -0.14101769614647286 0.659737811363805 -0.2722664129804049 -0.20685020496548168 0.31439434772034724 -0.36585950139739687 0.34506964149442054 0.23387837023198754 0.33745333694228874 -0.6337550916716685 0.03501542559521087 -0.9314517742536008 0.1917960191619279 0.607394607338879 -0.8041966721147646 0.21878459609494483 -0.529843220447892 -0.6376411053075997 -0.4980573726970392 -0.8126905949564458 0.34032512929406433 0.7102287294258387 0.5107859777330348 0.6182717435640324 -0.30732267515238765 0.4270334980767285 0.5421542122526148 0.8919266284572853 0.21496207828771197 -0.02359432216752677 0.00713983076153335 0.7115087846326482 -0.08285133323093397 -0.36626336080186994 0.9108413591768643 0.6982549946468408 -0.09852860854812184 0.8094330937128722 0.03288509651298588 0.6807104653784681 -0.8330948827073905 -0.6662516023991829 -0.9379310911077727 0.2872865675623879 0.04674736716838557 -0.9423058513839595 -0.2862431263625662 0.48875218328473347 0.5380851916322158 0.46546631132629557 0.45011290579245244 0.42868975519983277 -0.004644306110070939 -0.3687469237196226 -0.5586095632841253 -0.642930992462017 0.33550032110739747 -0.21677004754961016 0.8910219514819264 0.13380433543432502 -0.03226870223555833 0.9673141583935763 0.8796322037706019 0.5973452021759329 -0.9217858787623339 -0.7735943905870808 0.525869384242428 -0.6451637942481079 -0.874399694902692 0.1019979892284073 -0.13188016964630522 0.16523507910343604 -0.009683392741727914 0.7839106596920538 -0.9132690822087655 -0.07494541631051788 0.5197482994479383 0.6415850453279839 -0.5352436506783358 -0.8776755084591348 -0.7899724867211007 -0.713642389303945 -0.9230617182869221 +57 36 -0.31614554480815693 0.5526115349046687 0.28784632954319656 -0.5274530076128916 -0.878439850998229 -0.05804447700977011 0.27774973075491016 0.13365757460675254 0.4620482348214181 -0.2751002135379004 -0.7208739476278996 -0.9660565607993596 -0.8148327082812181 -0.11918345514436401 0.18543767893425667 0.034302233104586355 -0.39205868767477314 -0.09717113671225763 -0.3962294708987457 0.4780953553929985 -0.2209228645046093 0.35470221531851265 -0.9861272139297503 -0.950220921377634 0.033864107608222005 0.8251234861477201 -0.3236513181842744 0.7002061192906963 -0.34071761109642207 0.7745893767664105 0.11651337399339701 0.8229181858767329 0.3320697988331809 -0.47403317276678525 -0.30993786243700305 0.4475334545159373 0.7869175883418338 0.07646250640183139 0.05089544993289974 0.18321560365303857 -0.6799478477836933 0.7620952780197807 -0.02412855019959781 0.005215782728903218 -0.40213867295016237 0.6427982586193559 -0.838412364212527 0.5649620790305723 -0.9253430785355596 -0.7680645525174647 -0.992065318918188 0.3041277200402226 -0.019221651581486476 0.26049296360144636 0.6488986690891894 -0.47051530949486176 -0.7854747350906521 -0.14336853378693037 -0.9311569132158448 0.34154738626061354 -0.42637891444074594 0.872876503307781 -0.5053995802354871 0.7303726603037626 0.8692028756320911 -0.4854727524345097 0.8321077548005895 0.9966793566246774 0.47612768074432377 0.8497103497540957 -0.2918087255672748 -0.3742386070400543 0.907898270901992 0.9616399109296334 0.548936220793659 0.7412652246164204 0.16430328055933474 0.08679979164554608 -0.6985798773329364 0.23021874652736418 -0.23314257556691387 0.6984932291322148 0.7183853261731143 -0.440734574037696 -0.3372678178675139 0.9249335205607625 0.753371333912559 0.2756836263492912 -0.9432264486613771 -0.9592775318875029 0.7789838974994929 0.7601093470105735 -0.5622254553902699 0.3384325471961034 -0.9903544367695944 -0.7607725936004852 +57 37 0.04877986270798673 -0.407302812529174 0.9067263903147773 0.27507929957092947 0.2368422694372816 0.6782826863615901 0.9438168345690636 0.36098369459442714 -0.7719703321575653 0.20560316322821937 0.815893845800765 -0.8553035081387339 -0.6511362328844934 0.7476370990816941 -0.47490471755534647 -0.5267386664232669 -0.5641075183849857 -0.3173094881811944 -0.7710092686812691 0.3228961096942635 0.504780128820737 0.4652224468419319 0.9397944594855829 0.3943636826179451 -0.6654135966706161 -0.050733459494759714 -0.832422586567946 -0.3163374096980094 0.6548246853245665 -0.8976872520812011 0.09270509437839491 -0.8469093058812163 -0.7832441734131679 -0.9370448097934603 0.44241911517614607 0.0356249825607704 0.6772707666945676 0.23635884437561838 -0.2510917414983853 0.43707209463868657 0.28953382446648024 -0.4054560758830301 0.13852309534836826 -0.4263238634031783 0.16243172736637534 -0.09917652281923961 0.7426012508060968 -0.43220906109672974 0.40438952905173964 0.9981144056301778 0.43897887856107554 0.2780682222671329 -0.2265871398107011 -0.17134699547722643 -0.10797355807533782 0.5008680473128888 0.7600569274874094 0.6927649466120249 0.9094393183524674 -0.5293868903738059 -0.8775517768165713 -0.9159138005586356 -0.5048772993155775 0.7553753636920069 0.32349427677027154 0.7288773683378913 -0.37270351050761774 -0.1925856114151545 0.7008388875207028 0.7121999461736372 0.2841608803104956 -0.813090910446383 0.4641754006114893 -0.39547017256950934 -0.25432417212739233 -0.19902739855595164 0.6244411311881324 0.6599246205237166 0.6306438452817484 -0.43077591470735843 0.5819435092683924 0.383190714324094 0.2821578791226611 0.7091202152885259 0.895971766721245 0.9968571869216309 0.8656797251374244 -0.7652452221969366 0.16721034937503165 0.06958231526746195 -0.6348173972421225 -0.973708888122407 -0.6718114912112634 0.16954402593567308 -0.2346981304077671 -0.13113714022251122 +57 38 0.47749866298467447 -0.8554880783438399 -0.4043952898600778 0.8833900408286208 0.41674165127590657 -0.2959936084056094 0.9235178841481757 0.5025587021982196 0.46226889110261715 0.07803708719317815 0.05832202517922647 -0.5486413269592381 0.7618643011779098 -0.06575855379446471 -0.6792562416729377 0.5875352885848923 -0.3813894889490126 0.9634481904805268 0.2813195640888584 0.6682546180838382 -0.44574461351620487 0.5089882051720618 -0.3322470303691394 -0.12104790780697283 -0.7120730686786871 0.883401612997089 -0.9479557539824601 -0.5295199002155373 -0.273953404182276 0.929751801506143 -0.3692544551129102 0.7385870837669308 -0.3276516922106254 0.8499537641649728 0.3760177751463656 -0.4532688491151775 0.037814663682110394 -0.560444986459459 0.9961310280801776 0.4520065384939247 -0.5939190371755885 0.5723665091498971 0.9364951983954433 -0.6477050560379711 -0.13413486578666745 0.8025313536415302 0.3058323105874339 0.4639510531023452 0.9432740621531581 0.49405108451145363 -0.6931402387888443 0.5200748281740444 0.5130970711389928 0.5447271383116805 0.32133595639432055 0.46146300247927297 0.7247273251628221 0.20166960563862224 0.5174846116029943 0.43470807336811257 0.24964502481404605 -0.7477415650403312 -0.8978979367341495 -0.6956085611410336 -0.6163493756201148 0.17767865251533577 0.970095027717 -0.6362948459024755 -0.3504847567349314 0.7227070514585459 0.8932094503347598 0.3702168606781733 -0.8274545194416318 -0.9936571046787566 0.887262906433772 -0.21567301642892445 0.5548401451851719 0.5498796866841213 0.8215773580682431 -0.7135861275955775 -0.5451031539626712 -0.6479961111611372 0.6591972531324104 -0.11880323308364082 0.4152229200354405 0.476651360016048 0.6723931352509038 -0.5582065007590351 0.10732405561035963 0.008272251484421567 0.2460404263182605 0.16989337719692155 -0.7332684181358979 -0.9834724970228632 -0.9672274086363137 -0.6681579438718408 +57 56 -0.7273968524989023 -0.8341545079253379 0.5312357858519889 0.1716501595508213 0.48923886288610063 -0.5408462004967314 -0.33745157941217374 0.4598114739006076 0.6577789140566219 0.6463876960390567 0.5608138256350916 0.6980883439872614 -0.7392065686818228 -0.9677578469775654 0.1756629901799458 0.6385572085556721 -0.7415347158101917 0.2346360290387126 -0.30577856809757975 0.36512331342516235 0.46956159793658014 -0.09235682749316454 0.3337047865511771 -0.13999338025261387 -0.17906442957240087 0.1724550770025346 0.10374314504661353 -0.8004129290602762 -0.029015212186004113 0.6747859007725308 0.005136311634886814 -0.24639144200848762 0.7321813242642874 -0.8632181090113777 0.5893215790579418 0.9535129700579206 -0.9452188687652288 0.36136964600154675 0.5610293086407641 0.4263229750728459 0.5967153875689633 0.6607724211117891 -0.9249262996607566 -0.37486463813935367 -0.6271562620032487 0.1526749274585033 0.6985164671184929 -0.5122574999691589 0.01136603195702568 -0.988768766874287 -0.553285285569916 0.9055337735874884 0.06727674284387763 0.2223202252282701 0.5277638284021475 -0.22376197289657207 0.7777017456540263 -0.7253448330830801 0.055573801862912386 0.16503723311574126 0.9929902811039455 0.7400184731808077 -0.9934626036086354 -0.3863769553278369 -0.6314277109760544 -0.15764928489795071 -0.2896391095011295 -0.1645717771477817 0.4151025666380377 0.9898849388646611 -0.06849660711167771 0.08732374644770569 -0.284657688191464 0.6894357091832954 0.0844346914965941 0.267717888051896 0.9144138255146985 0.3469678165994512 -0.6722328670243967 -0.9074001056383543 0.038039333651432194 -0.5689517227686525 0.7217091570624989 -0.6641443549242947 0.37737562442430517 -0.318299868201936 0.8678542329473229 0.16653968279281206 -0.14678476734138424 -0.6633168776326468 0.393365788180539 -0.6132565042748213 -0.24633610363456415 0.6067243603653996 0.7842147985508425 0.6202200325670992 +57 57 3.0964128776276265 4.196019355029746 4.624576118561005 4.575291496741671 4.611909853609429 3.6921325490007746 5.650066605850965 4.071421493009087 5.229853143372179 3.695877999736834 4.918414784008741 5.234722484723363 6.392078802226253 4.278305822683072 3.434955402117504 3.883412102439069 4.7336010558261075 4.951100882335697 5.017758932547262 4.208256880449024 3.7801588176649723 4.0264167638343755 5.566107583160942 4.208271629134771 3.3364330866906977 5.217081292381433 5.225125659559193 3.3954250992727615 4.721107606168054 4.951768557718942 3.123840785767551 6.394448338399146 4.379054836347485 6.309933725080399 4.0988293547867265 3.2575994239725268 5.987187767776968 3.7028930432648726 3.349640650957725 4.291108156228237 3.7177070597812945 5.04871304647532 5.67303247624889 3.793292276899896 4.3706767917699585 3.82312585992722 6.608088133309196 4.379551558357004 3.9898401632520057 5.27461473924601 5.581244497223755 3.929214138351969 4.118911791195115 2.9840107871531707 4.4571048975692475 4.796785852075847 5.8171004045062755 3.6155684593110347 5.160978221303587 3.169564278975891 6.031204666914205 6.121386063978339 6.777163615664468 6.192111295019561 4.603490141292856 4.61936939220916 5.006413009960848 5.488795361474256 4.0341522250566095 4.434792813892402 4.41157531954799 3.8803231776702742 4.891665867975428 5.477906130092713 4.98345554387106 3.2635443540945186 4.528588364665139 4.041390587954794 5.5289051154743705 4.11170903160541 3.8873396809974676 4.891832976324904 5.119567080675781 4.548656830157368 3.4612619148724644 4.6025158616268875 6.683217795506927 4.572520647154708 4.5713140789757585 3.3925028567773774 4.294485982022204 4.9484301480981845 5.226164384661463 4.934151384844587 5.289122846780582 4.265768025308655 +57 58 -0.62279873982233 -0.18942311963993652 0.5761052064987389 0.2684115438772856 0.7025206857683695 -0.5166757215405713 -0.6922906121796817 -0.2053048609525292 -0.429459078522759 0.7261498601055727 0.27483819600613146 0.17200388296559943 0.961860900222502 -0.6596662106777191 0.08038372160383411 0.33431629228760684 0.19725067604802815 0.38119673885840855 -0.7661743281054605 0.38620634551986566 0.5573492745952378 -0.16568388948108814 -0.4796045534301243 -0.8387485673998449 -0.5258136832370834 0.627869401720347 -0.1600551367377474 0.5261227188536026 -0.9184112337820574 0.3598947196372133 -0.6577953489284021 0.5584002698603745 -0.6729953131561452 -0.47054314319767343 0.7378619678971345 0.4141880341423865 -0.6477073105181979 0.3723661549001318 -0.9021830163522631 0.48548542815436035 0.37565411070686294 -0.492167389142254 0.8769507448965932 -0.5372141280537865 0.47017085043492735 0.12281469624862207 0.9423014144702082 0.2621519107443633 -0.6870587629857541 0.08685152769636995 0.8962616329273454 0.02935250266074041 -0.7053582343239986 -0.29985251515486055 0.29215867477535173 0.9975099693030935 0.8323412648254953 0.4570176529829362 0.4624428446258677 -0.07226044683382771 0.5352563700637025 0.9750154122268886 -0.8575414298007606 -0.9773392377359906 0.5020538577291298 -0.9556463302166311 -0.3091014611446068 0.6308377430157486 -0.01660695755165076 0.3112802781766013 -0.14346927838344592 -0.006968181127445794 -0.900224567706613 0.24259517782977813 -0.6239880336846411 0.5617602865732234 0.7774478212331792 0.9179657174311515 0.040399391076481495 0.1767192287409738 0.18834753620093014 -0.3777760637921339 0.9835696081115075 -0.3888056229874275 -0.8757291036464343 -0.10680077343852123 0.7844019210962656 -0.1116318366696969 0.9827601149052725 -0.46295838167414005 -0.5215305263769505 -0.3864999127484452 0.881782519709438 0.6154870799452496 0.52142784397693 -0.4488767218759733 +57 76 0.05148215667312228 -0.27951398755382306 -0.826131583093189 -0.640686477158138 0.06485163454888454 0.1413619813780529 0.5512798930683847 0.8911306883642267 -0.7493731569345432 -0.07389957739756015 0.49381911546042967 0.6019302582486707 -0.778003780034993 0.8939228518302569 -0.4965546707651731 -0.3179489613298503 0.6557511761398387 -0.8820474281130637 -0.7262382470894715 -0.8146075023047612 -0.4638430342758164 0.9630119441895606 0.1268736571747422 -0.06065241983913272 -0.1942926120212951 0.8049697565833549 0.8342317407598017 -0.12225044797210538 0.8525116991818036 -0.1103355103710848 0.17611588973335013 -0.7101184206939326 -0.31171257275690634 0.8630859257498109 0.506805899676833 -0.16506816877124453 -0.9173024848661966 0.3398681046732426 0.1937238329710822 -0.9736419931348774 -0.2403146393072444 0.9961284692583947 0.5542743467240494 -0.7221113721793779 0.19790639440471325 -0.48063327660086563 0.862983882606053 0.15947553975146 -0.12867174805424098 0.5589622477029763 0.6768810750261576 -0.4384675594496401 -0.9402751731903556 0.003192169012177226 -0.5845314901039469 -0.9736901580869262 -0.6115657734747102 0.19134671922745516 0.7467114675156634 0.9446086672860625 -0.20100236979522834 0.37480294420007687 -0.9745453306731919 0.8706307373504656 0.6381254802045209 0.07453071398762257 -0.719237274382412 -0.9881012805800591 0.22876714173237933 0.38654257891647514 0.6818105676951012 -0.7762055674354114 0.6810830905172209 0.8806792168363533 -0.8948722306558372 0.048702029759558396 -0.3973738320101121 0.3341265613840061 0.8896138309709811 0.4106091871245141 -0.6955042473156963 -0.1879234500626885 0.23822829542745572 0.13742968573198477 -0.00041257107603853704 -0.8657002504857154 -0.9051364901727907 -0.9559768242381745 0.3853462392426312 -0.6561932414038136 -0.296968919881601 0.5595915023603197 -0.5783681186770995 0.21123245214448172 -0.1912136775238027 -0.06571899170465567 +57 77 0.5524209783843717 -0.044283245129506765 -0.29949828923548116 0.4469866779492693 -0.4784210824617685 0.6049827116934701 0.628414587247818 0.32534190181001255 -0.09208438810579644 0.7272660537222659 0.6540528184135619 0.43661536811701684 -0.4226015858753336 -0.0813860046734145 -0.06194218603117796 -0.23541283156971993 -0.11699458534066642 0.3661235444848112 0.7407289615913561 0.746565121521851 0.10461173808642088 -0.269644615773625 0.9074585547705751 -0.06666454210026007 -0.3657709134124172 0.5853944435481837 -0.8145121329676523 0.16567960936524284 -0.7452862101281665 0.9175557034667723 -0.5739056266575566 0.9266558290950802 0.7385715367847598 0.7351647846195375 0.9742878861958484 -0.1908221957233074 -0.44097178430162276 -0.894017214762042 -0.12174305060497481 0.14328580240326882 -0.2026734972790758 0.22118547268113065 -0.9472799641450762 -0.051358414905450234 0.653281060600847 -0.39008346313199405 -0.8852366879571427 -0.8055025630764634 0.6728850264708328 -0.6284046238417083 0.23758009832755556 -0.23860904343367895 0.9021409222256929 0.18558436572035086 -0.5385812473135407 0.639763379948975 0.41785758776381354 0.7375934523127659 0.36344134462233435 -0.15703818543601722 0.9084183866481723 -0.12689978018466253 0.6039987108471472 -0.14492897814951644 0.6810911762476053 0.44473159554376873 0.420300650383975 0.7165405377753082 -0.6829504810251086 -0.07078395898314005 -0.5812513406389774 0.7567300828386012 -0.05398912887066798 -0.0477371120665524 -0.2969430834250315 -0.6167714559571182 0.557005707223784 0.008386661783833294 -0.10826164124801974 -0.5128326935577356 -0.9760938822452003 -0.6621447493634962 -0.5880945259786052 0.5456791703307928 0.05035817180063629 -0.1293420118526558 -0.47357086047925256 0.6148360092096878 0.31945354550119465 -0.07517555905186946 -0.8863011621197303 0.32197831683214795 0.37717889522682313 0.8530948215291041 0.40874524179579197 -0.19118890588569593 +57 78 0.1986700930768821 0.4670769178282901 -0.14119893683474127 0.4761731961642306 -0.4533253074021315 -0.024261637943916003 0.5441906844813291 0.7446454203539865 -0.7600418495857333 -0.872230800225265 -0.34300600472399245 0.9399425547991573 -0.7956790044562834 0.6604740457279146 -0.504862270890466 -0.8935627062898535 0.7996741372321046 -0.9592631454931748 -0.2366353450599139 -0.2141241711506141 0.2946281582526302 -0.4546174824697189 0.4765372424488947 -0.7348829951816582 0.25723421833355187 -0.7723101304784588 0.33818996491443176 -0.1500655562318287 0.11570867777509664 0.1410894920273673 -0.22604039275874555 -0.7965639940357849 -0.07352102667390703 0.22216037659612797 0.05249656438391659 -0.1346935744342157 -0.6597823905821445 0.2264180753175018 -0.19142084971243345 -0.8860234455238076 -0.5087573779879822 0.0894030196340454 0.7003941715106072 0.7373499289566361 -0.902229804874563 0.6918209403022617 0.630141782674569 -0.9211366914178942 0.1657350698309088 0.6589222302283686 0.5384492785457438 0.8196333159422355 0.22761587367234704 0.34567767043459896 -0.6971784349742371 0.30598122286778473 0.08181785460590052 -0.030494012247435087 0.8340546069385124 -0.042387262403496884 -0.8704839762646124 -0.5629038824887436 0.7695255578749904 -0.6967341130367535 -0.11350761565949452 -0.9889102514558215 0.6388189835021671 -0.1820665651064446 0.5611319042558629 0.1943266778713839 0.7430565440998811 -0.16686883606254144 -0.7492634121004935 0.47061367682126565 -0.7992282154281127 -0.49923790509685095 0.29097396668771736 -0.9523904067013169 -0.8564791297062866 -0.25650017380291623 -0.40284375446416787 0.46192711388639096 0.012541055673476631 0.6902641799508529 0.20127779452904626 -0.5171764147896087 -0.4954411799928571 -0.28480209152432745 0.5667507621056718 -0.24695514087846604 0.4380296829531032 0.4928192912619216 -0.7223232517269347 -0.3521760626444923 -0.7553389905495085 0.6324363067333696 +58 37 -0.09247264605092065 0.5733128929455047 0.8379306489859393 0.6500555161056207 0.22271872671700943 -0.9558350253994274 -0.44434508719766086 0.9675101312889753 0.26067777327333674 0.8976117977909204 0.7558787652506527 -0.5044576404775654 -0.9146209520145825 -0.4271387931959205 0.03533730331097584 0.35982272119723246 -0.9421881506350738 0.6768841586126855 -0.8661254518453954 0.23688606128070155 0.3964458725844615 0.9624066609396886 -0.7630736919427852 -0.9328073251481515 -0.40084561561299337 0.7339416644912569 -0.3172935786742699 0.9088534726817918 -0.9418059918465509 0.1951764762803192 -0.8828540367939701 0.12673123475299297 -0.41359745883521026 -0.1920258803949677 0.3300425310637043 0.14869802373163266 0.2927375394960583 -0.6233813138062436 -0.6037353542418245 -0.7571530235982933 0.3973893297429756 0.566074602500686 -0.9632181588825977 -0.6758670513193221 -0.10055378246965407 -0.25250366158579807 0.32585122698407765 -0.2495428935268018 0.677920314482892 -0.9913663976348102 -0.6936067227409632 -0.48052352178295554 0.5261460039953503 -0.6173623162599975 -0.659515644819789 -0.2415074448051211 0.6967133228763631 0.6572560928379174 0.12377491104987848 0.044584775867122506 -0.9613747271828721 -0.48300719000921855 0.6182657214980976 0.5503751356682332 0.9888422747676686 0.5294700238594245 -0.8319016676973956 0.7879339477843665 0.9487436501584183 0.2735057879351859 -0.04177170606452818 0.31708928265417735 0.12371383060233065 0.3200586563853418 -0.5363403812122505 0.9855770119429783 0.11072042168651941 -0.4356630907613823 0.404670483482062 -0.621990690916719 0.3447831892342328 -0.13772356969296773 -0.6639771586712204 -0.6238519834226031 0.638630470816679 0.38941102646210957 -0.9511130348731329 -0.9146320002378983 -0.27618602894371347 -0.16261438050957078 -0.6720924246707929 0.01633433914972504 -0.8135808448816357 0.3185544680313248 -0.5966844206451134 0.8609867726841363 +58 38 0.9825697464910388 0.9953589031225092 0.44824732117135 0.5620687517728697 0.3956645580107627 -0.8801367172025365 0.46487233938594663 -0.6171448932099557 0.8932473177917668 -0.4835552691821421 0.09186260195642859 0.8362003336495103 -0.20914159533275223 0.9696426287933075 -0.42362484094025676 0.06414372912792254 -0.371459891688676 -0.7770141574392331 0.6380901820553884 -0.023676006625541035 -0.9912645738848032 0.264162751529573 0.4250132565970475 -0.1505934906057671 -0.5184272746291698 -0.5538035411751454 -0.2025229843696117 -0.755428449188043 0.28394141935751094 0.013087347268813332 -0.852255916036863 -0.007938541398588406 -0.1668314940716138 0.25540034717546245 0.9818870155910533 0.008879652514770742 0.18601541293371393 0.16257224729100894 0.29296909596859333 0.15740213422983373 0.8217965893751131 0.025225206706116943 -0.7741889670923774 0.3391253640474565 -0.9763172515656273 -0.04330541650918329 0.41300375202235684 -0.27067871312497727 -0.8330040227023263 -0.31481784031959026 -0.25934786702550716 -0.17308340117304666 0.5509059600425297 0.6172003245863333 -0.6275033752414971 0.35188189321865315 -0.8779326494033954 -0.28246378627503965 -0.9980414648791531 0.4741990592026857 0.6499228249972988 -0.8752605617118263 0.5053383233944866 -0.7107043973663902 -0.8473730009121592 -0.7022563459401601 0.4201519275118566 -0.06217379085841568 0.7612802750129055 0.9677085704185928 0.6286593102434277 -0.6283960084980125 -0.40834347610849475 -0.2640198632967061 0.7856659187009598 -0.09776824877354673 -0.8179238940591622 0.1727881155055615 0.6495433212173896 -0.6451494591044595 0.27707168243190283 0.7717681074226206 -0.31271400028288876 0.5478476315633027 -0.653914492774883 -0.6064027618485228 -0.3595994982728363 0.3654745050819581 -0.38826072363181874 -0.3132367748272231 -0.7904824779156392 -0.1308618248147979 0.4905520362843183 0.43345757536259666 -0.9200132484962911 0.9962125083528213 +58 39 0.6932056436714384 -0.40466797184100267 0.23208814226594532 0.051455533912359686 0.5792231934004735 -0.3668021188416464 0.9387508245104865 -0.039959582460541654 0.7076119755789918 -0.13492529975264267 -0.9205540943553192 -0.5650054792497532 0.2859825328281387 0.065905419525631 -0.4780095808497986 -0.820927086889903 -0.546484619851741 0.594001895262692 0.8470136619107207 0.417041270011538 -0.11047388917934242 0.4277543778496433 -0.27532466315945925 -0.5194826440856575 0.8988168419891915 0.48014066280883116 0.1251111036940329 0.5053455268763318 -0.21605873293826128 -0.5049967955258896 0.6012954872770297 -0.9637975028459227 0.8467186872296104 0.1357321651372254 -0.8187275381831243 -0.13750826138248562 -0.4658333206386689 -0.3334556102368038 0.25209600887012584 -0.7936422961636291 0.3116606791147185 -0.4238037509434318 -0.3354816137875929 0.4703691630539173 0.41755509271385427 0.912809864008836 -0.5342685425020262 -0.0602181558732513 -0.9060937484041338 -0.8960909062617735 0.6237963065926999 -0.2214044232495449 -0.7514544139351755 0.21445146755820832 0.6284702642252418 0.03176581629605635 0.4562403324348081 0.08271998247848655 0.6834380809547458 0.7671040694025191 0.6914602663366736 0.05971603199696651 -0.772869035723436 -0.3237538747565045 -0.5580329500972254 -0.13904602717185233 0.43274310985372955 0.3357131681163894 0.06744540376707064 -0.5174481868168763 0.20755150448774562 -0.5545467386040626 0.8546917268939647 -0.29000792879255677 -0.8733948623859578 -0.8642821536672607 0.10316433307933481 0.12374154527882886 -0.10322579338676574 0.9037164326840057 -0.5790881140861501 -0.8896241209678077 -0.9033846590215742 -0.6798610214238667 -0.25573006585200786 0.6810965247848577 -0.8029026050513022 -0.5537361051818164 -0.21088836586205728 -0.6625155658001112 0.6424757844152482 0.609356648264922 0.6053119209093143 0.8180373428632643 0.7551255116336495 -0.6252208810594317 +58 57 -0.62279873982233 -0.18942311963993652 0.5761052064987389 0.2684115438772856 0.7025206857683695 -0.5166757215405713 -0.6922906121796817 -0.2053048609525292 -0.429459078522759 0.7261498601055727 0.27483819600613146 0.17200388296559943 0.961860900222502 -0.6596662106777191 0.08038372160383411 0.33431629228760684 0.19725067604802815 0.38119673885840855 -0.7661743281054605 0.38620634551986566 0.5573492745952378 -0.16568388948108814 -0.4796045534301243 -0.8387485673998449 -0.5258136832370834 0.627869401720347 -0.1600551367377474 0.5261227188536026 -0.9184112337820574 0.3598947196372133 -0.6577953489284021 0.5584002698603745 -0.6729953131561452 -0.47054314319767343 0.7378619678971345 0.4141880341423865 -0.6477073105181979 0.3723661549001318 -0.9021830163522631 0.48548542815436035 0.37565411070686294 -0.492167389142254 0.8769507448965932 -0.5372141280537865 0.47017085043492735 0.12281469624862207 0.9423014144702082 0.2621519107443633 -0.6870587629857541 0.08685152769636995 0.8962616329273454 0.02935250266074041 -0.7053582343239986 -0.29985251515486055 0.29215867477535173 0.9975099693030935 0.8323412648254953 0.4570176529829362 0.4624428446258677 -0.07226044683382771 0.5352563700637025 0.9750154122268886 -0.8575414298007606 -0.9773392377359906 0.5020538577291298 -0.9556463302166311 -0.3091014611446068 0.6308377430157486 -0.01660695755165076 0.3112802781766013 -0.14346927838344592 -0.006968181127445794 -0.900224567706613 0.24259517782977813 -0.6239880336846411 0.5617602865732234 0.7774478212331792 0.9179657174311515 0.040399391076481495 0.1767192287409738 0.18834753620093014 -0.3777760637921339 0.9835696081115075 -0.3888056229874275 -0.8757291036464343 -0.10680077343852123 0.7844019210962656 -0.1116318366696969 0.9827601149052725 -0.46295838167414005 -0.5215305263769505 -0.3864999127484452 0.881782519709438 0.6154870799452496 0.52142784397693 -0.4488767218759733 +58 58 5.280126532116979 4.467990220822624 4.327528561557181 4.254650702174299 5.2408653536784255 5.878301414081951 3.4975574142917205 4.873571856901483 5.980776799094632 5.485071307107294 5.278874457784419 3.962067461827732 5.11119622502661 3.9105645086688106 3.2157464314975535 3.697857348876912 4.168941802844071 4.790293303465463 6.35003978117477 3.919876496468314 5.202767759554926 3.1032501095047267 3.753762245349205 4.757803227324645 5.50168362009108 4.561929499101955 3.8079959933708056 5.597131328403921 4.860791647398101 4.235068109389951 4.9206357657244 3.9037244564635394 4.067472357229851 4.095012137012369 5.742611075719889 3.1664343299001096 2.9857796958981884 2.6628322318735593 3.8831560912129808 4.776998520480827 3.4774393336398433 4.1018975381827945 6.044783656791674 4.997151750232197 5.828138387198428 3.0732164203331083 5.678358296630245 3.3108249946403343 4.591325272121345 4.204655631743896 5.146914114072462 3.8561967357294327 4.920858228758356 3.9585768428328576 4.00461345425014 3.6300388339695724 6.29593192071131 3.820718092567276 4.162012218355308 4.1506006614301105 5.895109727108842 5.186090405717847 5.90274363720609 4.39790567721571 4.205791572971262 5.3151388182707695 3.9141453760317733 3.8198423629150637 4.6977333395383605 3.4180392113023563 4.102267515635305 4.305097144464932 4.162504744393619 3.840733587653334 5.91330968968229 5.284556534901631 4.898447249052179 5.276782112501971 3.3915883732814107 5.4264279445948285 3.2105237894202414 4.32989597587736 4.2774482309485915 5.869778418244019 4.2712196606486454 3.748768435476591 5.017922027274848 4.069186452773962 3.4346304978955233 4.427568231511975 4.536810714214561 3.3575155216967723 5.640524780100847 5.476115123196923 6.085303329430865 4.815199412981205 +58 59 0.6435009964519973 0.48240029487610125 0.03456679356983239 -0.3696041488272921 -0.48548284223793914 0.9871192269660396 -0.269069173748979 0.9401307235536218 -0.6003619511456324 0.5313949549585011 0.6488125900384036 0.3742356798022799 0.9434629024011292 0.2716038933193081 0.8333797252678352 0.3556743151139232 0.5804062849509404 0.18285781754565789 0.27917414929444573 -0.1306133874716051 0.6810417173133028 -0.6871400491898418 0.4023101095925474 0.6290212028187263 0.4972461096488947 0.2238876680955859 -0.6391240706393946 -0.6534679755935782 0.3970965921191527 0.6659969191042863 -0.2735248027619319 -0.8346403798169908 0.5737808769877328 -0.9944542332193802 -0.7305287209027496 0.7192844541738572 -0.27885779939139077 -0.7605847408265392 0.3715812828986609 0.05726422458887126 0.3173457449050925 -0.8388400840322681 -0.9384246843037172 -0.6348796269484307 -0.9135224761555609 -0.21008207180694716 -0.9376359013340363 -0.7406488565968374 0.3755645088245372 -0.1218445536522923 -0.1645387403223042 0.9579506324974594 0.13475765652296512 0.47287249976612555 -0.2663805094800973 -0.21702284816169737 0.3885250859779674 0.7370832192069052 -0.7791304357984199 0.9055230829324128 -0.5422730604826991 -0.3270282068971544 -0.6484690459926168 0.5336341266843059 0.204723909248127 -0.35015707643471483 0.46079614616391074 0.57435120566879 -0.3971009884050052 0.21977977784383618 0.868206882309567 0.9138097943388104 0.4207416993742932 -0.7654591898208287 0.1570825980867694 0.11514788766866157 0.9311809525702703 -0.9128027488466322 0.05504443535913972 0.9584805531134075 -0.44965071388659683 -0.28292645900426816 0.2804898596852847 -0.9902522884175486 0.06097134355729539 -0.11735468776061331 0.5009166400444731 0.22441003154104733 -0.8618963620241391 -0.4237271806203229 -0.3784401768710566 0.9070019103638778 -0.3848094784966769 -0.1582779199169575 -0.8099806061151564 0.06957663008046633 +58 77 -0.7123203378920508 0.858326382475773 0.7089434201760729 0.5220320857708594 0.7716318788786147 0.2765337291804457 -0.3013392072086145 -0.23432137469117986 -0.9934381192974169 -0.12718346227963462 0.4349138358901212 0.7714165204829071 0.17652752060213306 -0.07047768358235396 0.3205629352391024 0.6530402182608752 0.31681644089754535 0.7641028237249041 0.9074542249661679 0.8892133703182037 0.6841899731134369 0.013115101267502371 -0.2770776547122773 -0.9521336291808664 -0.6974945413235147 0.4166385407156097 -0.963422314820128 0.6196794418668474 -0.7921020197065951 0.7375189836841676 -0.5846212868971621 -0.08748098239255131 -0.8941292727978862 -0.7412668181993949 0.24928461141546165 0.021386928376733394 -0.2616171705944841 0.08011111661729742 -0.874440283634726 0.5124024048937035 -0.07026668075180109 -0.15588231750878379 0.04569612942873991 -0.8810553961908014 -0.6551098225727874 0.7638213488218155 -0.3251242669675516 -0.32634520009570056 0.41060914443831154 0.3300845765251239 -0.664489919213979 -0.13036597725660481 0.5159016294951186 -0.23643233362354366 0.19837680486816645 0.062021054727224856 0.30510628125417893 -0.3845149422766392 0.020424990943078036 -0.6497397635167348 0.5920828781083936 0.846499705665221 -0.5928967287716322 -0.22544163053748534 0.3691237167126493 -0.8783927183992586 0.5202625883648346 -0.6339685651266191 -0.8116835234767938 0.2925785822108673 -0.08328495525801438 -0.5014693237670329 0.46977997558615847 -0.6810245983847611 0.3587440096886465 -0.6737345637997822 0.8200780829587251 -0.7800993402937071 0.38019313542250255 0.9849057403584918 0.41828682443015563 0.11706694974979848 -0.08434365786922138 0.8215390317238298 0.09014153233428579 -0.610201799167418 -0.3234823559407274 -0.27485363627313797 0.2647243969051418 -0.8470775786716198 0.4695740697658537 -0.34811198451864644 0.017177526448895808 -0.6653487605587798 -0.5275587237046189 -0.3487993180495841 +58 78 -0.6815314676991238 0.43254981500457856 -0.9212677017022697 0.37017306385675375 -0.9868635816195908 -0.6457664921517556 0.30016415221202064 0.3821079851454561 -0.42324900826316614 0.9798784891645937 -0.8547755428036476 -0.045735006319438165 0.8870504763624172 0.7137238740783773 -0.0034362231922748787 0.8418047372743596 0.5432772310067204 -0.008577187187207347 0.9354953939305752 -0.45086537591214304 -0.8791167463024665 0.3616166309758231 -0.2046206227656857 -0.28077637454052007 0.789976047197807 -0.09256548670737152 0.4368051894969802 0.7875184135985507 -0.7833280280433499 0.4570380781219685 0.07703224839340694 -0.7455668341005965 0.47428986738720247 0.38326200243790565 0.7670171713998266 0.8727260140041735 -0.19771402128472193 0.13950647984890407 -0.49105498726139896 -0.5139421707066534 0.6019096685372791 -0.6471156796846109 0.1527980574080885 -0.6003522472679503 0.6967757990834091 0.0759322454103315 -0.48128954574025773 -0.6822288824599201 -0.4395695285039112 -0.9765794176474913 -0.766845647255413 0.7325666917652591 -0.07596527061089686 -0.34209915738827745 -0.28020057399179166 -0.4340154291735294 0.8682395378554799 -0.6890538139213047 0.5413951900669491 0.9107274898181932 0.7778567324869485 0.6641869248208585 0.30974402405727663 -0.23233891321997535 -0.32020060911208237 0.5660091369866971 -0.38720976847093636 0.36921781842663215 -0.43838669780169215 -0.030760251630715052 -0.5526130270229073 0.5811585036305389 -0.0333513912303125 -0.2225181189572576 -0.9392952759886002 -0.7972257106235403 -0.1797997530850517 0.7931394448590172 0.4466284826948592 0.30674283996340135 0.1693145991735705 0.44260468314955514 -0.7166673083530373 0.7229795636367378 -0.361616427694178 0.9686640736161436 0.17046756742805824 -0.851971078079111 -0.22960991788115015 -0.4519721559772827 -0.2828682167977081 -0.001344585930222797 0.9952294232016039 -0.9588767517894445 0.8153299751884517 -0.38815178508425063 +58 79 0.09545018775349767 -0.08452898796058617 -0.4247170931981883 -0.5677518764879645 -0.7464165143809371 -0.9398966824529325 0.07471490853254381 0.5357071578882384 0.8633029110802077 -0.6295323836213274 0.7489901186375267 0.14597981616346178 0.13461847938594174 -0.698209224320768 0.9148118689980789 0.015698863840029276 -0.49837141142101316 0.8967571115047608 -0.7108841788382443 0.4536631997146654 0.4535758021283687 -0.08096937875105281 -0.1604326035478294 -0.19478226298775292 -0.9027910561969259 -0.4737186394171946 0.8322149180628453 -0.6859996721354513 0.2309272858930147 0.6762678530940014 0.1033799064957206 -0.4166479356982862 -0.002054759995931299 -0.2561129319433493 0.9957615539595848 -0.6277788175846428 0.19768083087589972 -0.039343205120257574 0.07852169949728194 -0.9966957333612674 0.20678571694157077 0.26888610456466444 -0.9674121721910545 -0.7696035047444574 -0.7954042927987155 -0.6888927802564544 -0.7255950101132584 0.3750871492843135 -0.12444595292532967 -0.12947403465004448 -0.39516339738687334 -0.9487834878069588 0.807403042809294 -0.49868415846308856 0.9016848668131765 0.8941908123069029 -0.8868213773375679 -0.09952998031872462 0.17130015978547353 0.14350044761165837 -0.46512590698560885 0.51960602102476 0.6317458533711626 0.5154661504194424 -0.3222513321194922 0.8157979463044422 -0.30950117874510497 0.38766821540317964 0.4456432515098221 0.19708591194957026 0.9578863581013644 0.6110611632328589 0.14861504758292088 0.2763808662138556 -0.7997546011085377 -0.26228515384716355 -0.9454860961054852 -0.6531474335773879 0.7660692698231621 0.28978623557142247 -0.33945193554976694 -0.6940253124145159 0.1215890710003209 -0.2789214214042224 0.4695944688201399 -0.02074485439692375 0.8233705112887704 -0.003785848423072835 -0.17090074514711984 -0.11037740598799517 0.7535822779258528 0.9299250278275952 -0.5630565676278876 -0.7584269106796662 0.6329480055229386 0.4647329775992459 +59 38 -0.3881499876093726 0.15622165149780676 0.8687683128910115 -0.4051217991663332 0.20735425771949023 -0.0556961167696417 -0.06785482861299053 0.5203609664408528 0.5670271504424513 0.9143595859204199 -0.0770557961553422 -0.1500051121312238 -0.7826565576282043 0.10091605442560359 -0.10838155934337812 0.34178013584455 -0.7171898960594971 -0.7306894033635882 0.05329993063372851 0.7450117073779265 -0.5934901055740547 0.599732979305742 0.9748401078597133 0.8179083967159011 0.20250445882505574 -0.13906321967437818 -0.2788667667607394 -0.8121852165362247 -0.2634650879123326 0.9457711446752899 0.845945864463278 0.4546530011284178 -0.686568405765595 -0.2779174556996502 -0.6015685559672774 -0.33909181384271125 -0.821195394679866 0.6748664529965502 0.829499251757922 0.2571987097999531 -0.4094580217632189 0.8154373800639831 -0.09955546425931594 -0.573429809108229 -0.9554173408695712 -0.3261005879842169 -0.6127802496264982 0.3202019054120149 0.5748234111104249 0.8675839357851347 -0.7304265886704704 0.775080739083758 0.34479242108063635 -0.861576906318013 -0.028945239392223154 -0.0017381878241928828 -0.3064183488734462 -0.4842391552509906 0.17448969557198035 -0.1564992890844672 0.27235643319463665 -0.18892184240756715 0.010634494548853901 -0.5852277683498874 0.7062055594323771 0.5029223650255847 -0.3395384193866968 0.5245972123519445 -0.13491696780331042 0.27148574692968785 -0.5446638834932505 0.17728275234691204 -0.9025949109074682 0.03880616778716561 0.042046031454584964 -0.19482884296852943 0.9560784740686146 0.35790480112640943 0.9695305259739486 -0.027383511047833098 -0.11178011462098847 -0.5041020926837081 0.20333277402901784 0.4123941406802436 -0.05509403895749587 0.2782124164272337 0.015010822619471842 -0.23873315844232912 0.5823778372810293 0.22179760329534726 -0.46959784079990774 0.2764813192798645 -0.18913354796953552 0.03212169522954578 0.6795998419410878 0.48680917150726843 +59 39 -0.09033884051120511 -0.9126947935672176 -0.2313345333849537 0.366682476557183 0.427240666654888 -0.5763080776260472 0.4857689191794796 0.6415244393292305 -0.22005661959436384 -0.74127704277913 0.6015182877172234 0.9474244372570366 -0.40626581766177305 -0.3188495850499784 -0.37247766425730333 0.12750537928971784 -0.7569749622614583 -0.27385274190478737 0.8802188841621943 -0.2361239382245368 -0.8222558488135483 0.22004282247536655 -0.6864513519333677 0.319708839733873 0.8933392505851105 -0.8342152749894007 0.9370616377454632 0.3247327988040889 -0.10721707345358733 -0.15249745732676123 -0.02707444353010313 -0.6511669681538639 0.44237999518288595 -0.15487196672569725 -0.6782724245691478 0.008375707539826971 -0.4806834785799141 -0.9290640342464946 -0.19529029200161063 -0.5370404503425585 -0.5395700237218706 0.8930193234613524 -0.7730540543689606 0.6570750304335706 -0.47976561059791334 -0.06473738789784522 0.5005087645368798 -0.6847235412478276 -0.15265264947509438 0.3729944225743327 0.717625029054918 -0.8954726633603558 0.2547538257358217 0.4147633413484273 -0.820543561640972 0.6839458448942688 0.36871777180280607 -0.4059949358254755 -0.4983219485375867 0.8518478789512061 0.1902997089582268 0.27308348452796016 0.5708288171582743 0.7949384628899558 -0.0790643073334234 0.5975029470058835 -0.8965879630000744 0.10558014358756185 0.08932604383942633 -0.9350544965999545 0.9845069880381234 0.06035088545935596 -0.1958107860394267 0.8226334808320976 -0.1722398835914245 0.7207968477119253 0.9523123491883319 0.6600274596051454 0.2997689108415409 0.7237584833074919 -0.6284510825961624 0.758429268598575 0.8558512524455097 0.03732980985376577 -0.9844775716094136 -0.6858694351247425 -0.17215787948084538 0.34130615289658484 -0.5789768934578532 0.43902687480583724 -0.9678846231275988 0.48658693394951835 0.39341023130921293 0.8047397767959048 0.8457255614822812 -0.8513465678860119 +59 40 -0.3677144066727158 -0.9023147163996981 0.06289239152672721 -0.5212288667806093 -0.6755421472816396 0.9549830025912212 -0.3356806037076274 0.8604346858896108 0.34629506593377424 0.8399640944014501 -0.2195017722510335 0.23122679807617974 -0.4956817676422358 -0.6010626372730283 -0.9653967566118673 0.35382449503733904 -0.08363896041506247 -0.7800812823176473 -0.6882589780946953 -0.5797507062264113 -0.34879721142056686 -0.8157961863692995 -0.3115161735179719 -0.2109491256469025 -0.11202594898589746 -0.8223454033776723 -0.4144239276130648 0.17471202375154915 0.23386473339850733 -0.2411271886938724 0.19211598346188974 0.37812529000646355 -0.9970123945232916 0.7259034320292774 0.43275212852360556 -0.12422936910016213 -0.6752252820208271 0.008501073457798825 -0.852163850299249 -0.274138047360009 0.9643741739335956 -0.6946227619776713 -0.9528359570096776 -0.5033359762480305 -0.8241266996329417 0.5578177333713914 0.3663572695730628 0.5451499807063456 0.1523845013488061 0.7045841196089655 -0.7707897030204014 -0.5384883154583753 -0.39181639452005257 -0.5959287703440381 -0.7994497032058641 0.7306336323556522 0.12659408244155723 -0.6100257693619919 -0.22428257944316932 -0.8827947023204223 -0.39724939503345924 -0.25217744205298986 0.7047153032920657 0.27840272924690934 -0.021765482935962588 -0.9859131277271262 0.651126962161185 -0.5586137529742572 0.5845130209499196 0.4055386626262951 0.20145862396754377 -0.15354474025340537 0.6297515736620354 0.22078669040165266 0.22612937614680106 0.8077952208006693 0.573431952849274 0.17907723733531777 0.48440199087450764 0.5435541352712867 -0.03892156819838144 -0.49309895039386054 -0.8545687197507539 0.6365348703831382 0.9973547439546364 -0.250787276942938 0.3728361184490203 0.707012369540766 -0.8229904286886995 0.7837360413455534 -0.9344312429329455 -0.1829378397367145 0.9179730366327901 0.8609273144130338 0.7061276563622956 0.41977512632785796 +59 58 0.6435009964519973 0.48240029487610125 0.03456679356983239 -0.3696041488272921 -0.48548284223793914 0.9871192269660396 -0.269069173748979 0.9401307235536218 -0.6003619511456324 0.5313949549585011 0.6488125900384036 0.3742356798022799 0.9434629024011292 0.2716038933193081 0.8333797252678352 0.3556743151139232 0.5804062849509404 0.18285781754565789 0.27917414929444573 -0.1306133874716051 0.6810417173133028 -0.6871400491898418 0.4023101095925474 0.6290212028187263 0.4972461096488947 0.2238876680955859 -0.6391240706393946 -0.6534679755935782 0.3970965921191527 0.6659969191042863 -0.2735248027619319 -0.8346403798169908 0.5737808769877328 -0.9944542332193802 -0.7305287209027496 0.7192844541738572 -0.27885779939139077 -0.7605847408265392 0.3715812828986609 0.05726422458887126 0.3173457449050925 -0.8388400840322681 -0.9384246843037172 -0.6348796269484307 -0.9135224761555609 -0.21008207180694716 -0.9376359013340363 -0.7406488565968374 0.3755645088245372 -0.1218445536522923 -0.1645387403223042 0.9579506324974594 0.13475765652296512 0.47287249976612555 -0.2663805094800973 -0.21702284816169737 0.3885250859779674 0.7370832192069052 -0.7791304357984199 0.9055230829324128 -0.5422730604826991 -0.3270282068971544 -0.6484690459926168 0.5336341266843059 0.204723909248127 -0.35015707643471483 0.46079614616391074 0.57435120566879 -0.3971009884050052 0.21977977784383618 0.868206882309567 0.9138097943388104 0.4207416993742932 -0.7654591898208287 0.1570825980867694 0.11514788766866157 0.9311809525702703 -0.9128027488466322 0.05504443535913972 0.9584805531134075 -0.44965071388659683 -0.28292645900426816 0.2804898596852847 -0.9902522884175486 0.06097134355729539 -0.11735468776061331 0.5009166400444731 0.22441003154104733 -0.8618963620241391 -0.4237271806203229 -0.3784401768710566 0.9070019103638778 -0.3848094784966769 -0.1582779199169575 -0.8099806061151564 0.06957663008046633 +59 59 3.7264939387308544 4.548225671116015 3.780706229783294 3.7437639143233703 6.188306178665683 4.7409406691928595 3.9392359390298375 3.939953129535401 4.038342640177913 5.979756912780046 4.293466480121634 3.984284896365974 5.836728336316027 3.555310475698442 4.030450507248948 2.66770368322812 5.335343971988787 4.601675946894288 4.908734837213043 4.948144043680729 5.305619337126071 4.006118150633528 4.842078546099273 4.475050488658196 5.143795829401337 4.00008933379204 4.196522670374707 4.707695453376372 4.2937881855058695 3.814278549187199 4.040196086365011 4.747914056877366 3.8537990318250466 4.652040346153381 4.54243779271124 3.082905783633609 4.757190912346825 5.17755842652414 4.09340191704027 3.7202042754892517 4.143367632352105 5.3413258411915345 6.6971939065221315 5.148822235765083 4.8060387395365645 2.0642142308757636 4.704045612820944 3.9097125912791975 4.116598899450844 4.898341460542767 4.884888691891835 4.60854270865177 3.2912836057512003 4.026513348863814 5.038075319087568 4.625157329115002 4.391251363090588 4.251392137044658 3.903946940511811 5.878615010361589 3.6521183197229554 4.200158504563654 4.787090715612571 4.798154888460132 3.615153975513298 5.197262353286783 4.816889787599489 3.864025477698262 3.5081025528557155 4.467251700735284 5.186029069499285 3.3063067052222457 4.449126313337084 3.810524350449038 3.005136365480428 3.65603374103413 6.42779055151842 4.40257035893414 4.953042900550599 3.7395489389638468 2.0157010218719975 4.7448162348202345 4.390442750454281 5.0621160646504215 4.430382829719703 3.6124231010471792 3.236246105916186 3.837528769113578 4.973873815436864 4.241551484876163 5.246006212880708 5.36421807164987 4.648015279683146 5.242727057930882 6.983175889022918 4.906374838442552 +59 60 -0.02437072207741431 0.06053995997022543 -0.3085139945675117 0.14662330878256302 -0.7843420057818975 -0.4313473709107405 -0.6734895527889455 -0.08835589543916367 -0.5952956491322849 -0.4520793537050727 -0.9074276762231395 -0.13308642544610905 -0.6971520474924768 -0.7573079973910211 0.3062974610084239 -0.5821548145510256 -0.251554021658029 0.5691705930060946 0.819644067054891 -0.11329499275684696 -0.4528875773342669 -0.1584347284850922 -0.020750521995257953 -0.8143217954343631 0.76323138292623 0.006161693874837226 0.0043606681914523104 0.7798178407800622 -0.7795283204160166 -0.46881222914134524 0.7287369581362895 0.33252740755825494 -0.263775664259694 -0.4859051003121819 0.6620219398333276 -0.1937503085569463 0.4985677242974704 0.695888073044818 -0.0057588860668771336 0.17325878510118398 0.42800822454788934 -0.41626949890789255 0.7383541376469529 -0.42501384599149383 0.12374265855803901 0.02130679187188589 0.8309193578300542 -0.6414142620639323 0.33730104088393675 -0.4277945982500775 0.9830011984891229 0.0009817279477615237 -0.12792309492147114 -0.11038867645947792 -0.6281910629227876 -0.5823846023842674 -0.9008977924905641 -0.0033132495415189034 0.5038857214770707 -0.9808858292199512 -0.6145766964515251 -0.7473621737996736 0.8585416096166596 -0.30254210950207994 -0.5727155035348224 -0.9361710565170684 0.8464235722483906 -0.6202196705044956 -0.4467396159298802 -0.7475917918538444 -0.7026864226805571 -0.8938909336053507 0.06341759714728412 -0.31978976898732636 -0.8974272644855092 0.7613484623283777 0.6222438134370105 -0.8232849739445025 -0.977788514160777 0.5228312804788064 -0.1937240771691522 -0.8245723317583937 0.28291852288966335 0.9929305449674339 0.08615477791422133 0.23230043695318203 0.6121964877069348 -0.5222638247748752 -0.734131319392175 0.4212936983068616 -0.7193600487957776 0.9737129267069338 0.006336176676090988 -0.9188465207358858 0.9145169178112151 0.15963098581916446 +59 78 0.7470634838879149 0.21223848973722648 0.7376836377479914 0.23826169647387507 -0.8415702474539266 0.9453164091607049 -0.41673374352591863 -0.017931232931964525 0.5558447877648904 -0.5856077948146752 0.005746780563484766 0.5299001095880116 0.43580326579146944 0.08135905806375865 0.5342053203274855 -0.37302800799226943 -0.5829550785916153 0.4510842626167022 0.9115842912157481 -0.6054807617021392 0.2020261395233356 0.12114020856644614 -0.7839142143491276 0.8191534177375528 -0.9739896155008614 0.06086143318013448 0.6444319825063487 0.20882593240123803 -0.9427138180881818 0.1829590887794066 0.759742044261843 0.8437336043429684 -0.3980439772770312 -0.4867856057453235 0.19769541284947234 0.360047437229416 -0.6285852643190597 -0.15763674730490895 -0.5029077917075224 0.7384780423741417 -0.5564940542949204 -0.01785668981580013 0.8229970735987115 -0.021925699923801334 0.3096709577619887 -0.3142636507418801 -0.5949196134487291 -0.07734935895680417 -0.9937153954028004 0.8323138025029584 0.5598014258566539 0.7714162514667713 0.5838004442889715 -0.3243076267051026 -0.77414597737986 0.5289157674072689 -0.43226791250161023 -0.8708867347768428 -0.9727835370790168 -0.23750041766481877 0.5815139379773582 -0.6292734734927485 0.743905148767662 0.6419124339354176 -0.775384711478218 0.5345957716120056 0.03767040680627609 -0.2321484712069104 -0.3860511230027943 0.944304965483246 0.7181300145638874 0.23994625176117768 -0.8468547025419093 0.000452303860276837 0.024296832088084086 0.3721994176621437 -0.4653010701198037 -0.16786410952665443 0.43338869194402174 0.0786051063821549 -0.28149625673931 0.17150271008583062 0.05625559772623023 0.5997224110704917 -0.6875375598579161 -0.4924924933538237 -0.16330861807742392 -0.791210320925601 0.04524945228910937 -0.5727367096192728 -0.010177749879234144 -0.7058905166503491 0.6918108565231302 -0.5302054188108078 -0.7209745740608147 -0.6880140920532041 +59 79 -0.6862383632891447 0.763933042686787 -0.5035229677976689 0.7604734543448104 -0.9434246999750953 0.25510057943174846 0.3250043020065536 0.24628336267682882 0.5340528129941648 -0.9105673494166036 -0.3920954337044722 -0.6449487074851359 0.3768190642785918 -0.10938779904477358 0.05079420687536618 -0.31436820396617504 0.9246875746796592 -0.654132284024445 -0.028957295408173378 -0.7719231890589924 -0.8891295880769781 -0.7483410079260526 0.20446338307156275 -0.3123537372480194 -0.29628325416794987 0.6487645329402223 0.1867275940359625 0.878222760011689 -0.33273603814823605 -0.6915336480562666 0.31948388309290743 0.2553868468576135 -0.15966161012994684 -0.9163038987586685 0.056574805904471726 -0.5671146601505539 0.4482057609302865 0.9128220452908811 -0.35676408238606605 0.2144103110737996 -0.5531044036001669 -0.6436560701720877 -0.9178789962235019 0.9233769085806756 0.9708323876525784 -0.5138283944519306 -0.21298780560166097 0.258102276859808 -0.5714176689309534 0.3874978705013936 0.13465167699931424 -0.24324271762002203 -0.20454229236878985 0.1296839674305117 -0.3974884781689394 -0.6256322834215038 0.013883938645010474 -0.6378058092326595 -0.285150488203862 0.44803764287715264 0.34349243860238343 0.5844801434266365 0.1671831428392958 -0.9691993039990638 0.3030675166583281 0.691085202399621 -0.5561817856540381 -0.4598328707312558 0.8695525038117966 -0.07625971523484232 0.47301260298130954 -0.765659122361044 -0.49070719127168694 -0.51663507745966 -0.6996801576743787 -0.12808774269878742 0.4422399743712959 0.597607277063676 0.963238707297573 -0.20324031022750777 -0.12521334299328135 -0.35606787621424174 -0.190121934778831 0.332305856727549 0.75477472946831 -0.6383783857789302 -0.5380743181806718 0.11458655924844896 0.6643362134943225 -0.02945045034828131 -0.8046417710736951 -0.7513752877374937 0.3847383861397484 -0.4226947629547717 0.4610595471613701 -0.8027941488764707 +59 80 0.20479604076981262 -0.46635292796608807 -0.26178836470026545 -0.4057442174489607 -0.9236555726093993 0.4146781288285579 0.7352559614693388 -0.21365875044351057 0.22291150109828584 0.9610408683361042 -0.4795884739415177 -0.6476182121979923 -0.9253644452432257 0.5389289483018995 0.6368187393147668 -0.12450680108870449 -0.8703275770657697 -0.30609521453813193 0.826016900506104 0.871909377671642 -0.612616055158494 0.6350428069337479 -0.9779744319897037 0.40597098930993347 -0.8430401453148797 -0.597887067627888 0.8244392343769178 0.4931758314607615 0.5816101221734491 -0.1094889211597252 -0.3845834160103361 0.3509206801105291 -0.3281276335932626 0.26087228793939077 -0.3883945636127002 0.41513922168960526 -0.5335364732603285 -0.8257988395512732 0.9499921339647606 -0.8342840877134343 0.35208681314386037 0.7964124767705105 0.6274209614004025 0.7026906762488436 0.02598465503713987 -0.013141039190745607 0.055518609435627475 0.5546463125132854 0.9137098274290616 -0.22621402727465423 -0.3888349193850744 -0.05251258939009973 -0.9474135832781094 -0.7802638068569199 0.8474711891930666 0.8372848998154419 -0.8676318509614991 -0.3787178506072688 0.10880166913976752 -0.5344385123856066 0.30575527570166305 0.8211242397798719 -0.8771524050283714 0.258936993967229 -0.9055987178540095 0.554529818930289 -0.9792083886525689 0.5908059264564178 -0.561475982341697 0.8507221875040516 -0.253579365768668 0.06157746691799426 0.7220434958954887 -0.9335025823780994 0.6048512253851608 -0.38614382174261475 -0.5640537775885179 0.6957570411192395 0.3032522007527956 0.39566601153168746 0.13236698531757796 0.8447742281551638 0.8904711759931521 -0.4025209345925549 0.461539239299231 0.41628514039448183 -0.2314046014991784 0.16727659871972422 0.43658351340986834 0.40984003054697826 -0.2742688647392535 -0.23770549700171273 0.7108756305982367 -0.704917677311343 0.9749200428423197 0.453912219807711 +60 39 0.9103840220603157 0.91790873197648 -0.4656458003710573 0.16856896754649453 -0.6382738443996274 -0.5493621438722822 0.16712397797151057 0.32574836666089957 0.9218298047878226 0.8109093135666661 -0.5267407854041333 -0.7457408042663742 -0.011231503423279054 -0.1284840855938041 -0.900505255034233 0.6055862518071222 0.6022293895730386 0.8515245113923289 -0.7356006808965934 0.1466378773919217 -0.6545259491041497 0.2856098820097439 -0.8923460098154983 -0.35802564190708486 -0.9057069097357984 0.835703075486173 0.6913978375797833 0.20352865286833755 -0.8855449265343773 0.0214893192983594 -0.06767311349372584 0.20136753832764231 -0.48854354854759374 0.5928251354610115 0.5371519230716102 -0.6750183400118992 -0.04570269236096225 0.4356472421843369 0.7492543439510835 0.8667737341729003 -0.4643782248578938 0.14493779636741944 0.8650088224796675 0.20317889904194564 -0.3440247547039519 -0.146639477271721 -0.4253601965471263 0.5760194661283908 -0.3821066616438742 0.14566931089047186 -0.3429517613157296 -0.8164048726877586 0.0651170689972016 -0.5439601072987046 0.7958797639866733 0.5773961663230598 0.8504064165186851 0.1506425414060253 -0.40576172924972154 -0.8519799579308147 -0.34335169375108165 0.6395794432339545 0.5745307005543463 0.11087766330010895 -0.5344300074502679 -0.8088969594020521 0.7586690617336149 0.41253601999961353 0.9906805587979668 0.7752260252447984 0.28562120314552764 0.4735076331923085 0.041485223271487515 -0.5275869116403313 -0.306039100835269 -0.42025811508017386 -0.1510276377867381 -0.7479246727975137 -0.6414844801679991 0.9132675820263874 0.4924404782461129 0.2334539709864869 -0.4748216597532853 0.7468194224825884 -0.2319264433828483 -0.07807902146647816 0.028315700890480855 -0.8005966557766098 0.5396479480016882 0.47552629205856856 -0.9593365590426268 0.7696743668607176 0.5342348196398075 -0.4208241146145786 0.9299536594656848 0.386141776488343 +60 40 -0.3398423133741093 0.6820256509056033 0.9484890729773645 0.5144133708520024 0.8441576097863521 0.37707304477296977 0.2432979883134998 -0.43740933213613786 0.6643975594145557 -0.20005002581809617 0.8976076283794587 0.4172476972023391 0.2604825478083441 0.3908709389416596 0.09806891428489473 0.4765379912117804 -0.22994989685848766 0.08969413329777698 -0.6120292667281655 0.20369329505246814 -0.6921633509342422 -0.9362357600925513 0.06681696018654515 -0.5663142157582051 -0.46244566410599286 -0.23399396311215237 -0.8526148741265691 -0.3960303336484188 -0.39900570496250554 0.11881797179427322 -0.8862003338261824 0.50493166289057 -0.48587304970350886 -0.3168057691704469 0.24450372664992703 0.15996400055285642 -0.24401508231150504 0.3867820630809573 0.5448924840646681 0.2505062820062969 -0.45120690034111566 0.4829479742181326 -0.40498045383193526 -0.3112064103136918 -0.4598303280527658 0.8835771960254966 0.9982473864068364 0.012232146580760883 0.1590661200928194 0.37233001238097274 -0.7389776106852193 0.3441078738480343 -0.966987735583084 0.12859723296789594 -0.5916937090048957 0.502098306969671 -0.21198895726606004 0.646874024230844 0.46470170412472234 -0.4279971334911383 0.8059580696909296 -0.8907408976458284 -0.7764893211905592 -0.4577883670995082 -0.32713566945542083 0.8750936905840232 0.5108749949914577 -0.010863220534497176 -0.9458907103848617 0.04521566250198017 -0.41924937107091687 0.010422978436297914 0.34129641267085864 -0.4205741711322164 -0.06654314000364137 -0.3197635919920301 -0.5540529346177823 -0.8646208336577392 0.3654863298269917 0.8667996232193371 -0.11357416228479766 -0.6040809423010269 -0.9517120033489355 0.7272830422043435 0.9026167780855552 0.1260066886487743 0.9324957696352127 0.915564482768588 -0.30762838507744616 -0.0833956382100991 0.8381166098491579 -0.6139838276603962 -0.8640551923429718 0.4494911007271878 -0.6540350300750011 0.59526703372374 +60 59 -0.02437072207741431 0.06053995997022543 -0.3085139945675117 0.14662330878256302 -0.7843420057818975 -0.4313473709107405 -0.6734895527889455 -0.08835589543916367 -0.5952956491322849 -0.4520793537050727 -0.9074276762231395 -0.13308642544610905 -0.6971520474924768 -0.7573079973910211 0.3062974610084239 -0.5821548145510256 -0.251554021658029 0.5691705930060946 0.819644067054891 -0.11329499275684696 -0.4528875773342669 -0.1584347284850922 -0.020750521995257953 -0.8143217954343631 0.76323138292623 0.006161693874837226 0.0043606681914523104 0.7798178407800622 -0.7795283204160166 -0.46881222914134524 0.7287369581362895 0.33252740755825494 -0.263775664259694 -0.4859051003121819 0.6620219398333276 -0.1937503085569463 0.4985677242974704 0.695888073044818 -0.0057588860668771336 0.17325878510118398 0.42800822454788934 -0.41626949890789255 0.7383541376469529 -0.42501384599149383 0.12374265855803901 0.02130679187188589 0.8309193578300542 -0.6414142620639323 0.33730104088393675 -0.4277945982500775 0.9830011984891229 0.0009817279477615237 -0.12792309492147114 -0.11038867645947792 -0.6281910629227876 -0.5823846023842674 -0.9008977924905641 -0.0033132495415189034 0.5038857214770707 -0.9808858292199512 -0.6145766964515251 -0.7473621737996736 0.8585416096166596 -0.30254210950207994 -0.5727155035348224 -0.9361710565170684 0.8464235722483906 -0.6202196705044956 -0.4467396159298802 -0.7475917918538444 -0.7026864226805571 -0.8938909336053507 0.06341759714728412 -0.31978976898732636 -0.8974272644855092 0.7613484623283777 0.6222438134370105 -0.8232849739445025 -0.977788514160777 0.5228312804788064 -0.1937240771691522 -0.8245723317583937 0.28291852288966335 0.9929305449674339 0.08615477791422133 0.23230043695318203 0.6121964877069348 -0.5222638247748752 -0.734131319392175 0.4212936983068616 -0.7193600487957776 0.9737129267069338 0.006336176676090988 -0.9188465207358858 0.9145169178112151 0.15963098581916446 +60 60 3.889452173604671 3.1826135534075197 3.0276469081720028 2.8663722787865824 4.584274330794328 3.0445569075145547 2.7561124705694806 1.6230239612617927 4.221065800840605 2.666029349570138 2.661052247221166 2.561017952938533 2.542457356057286 3.242243186822053 1.9927302407346794 2.9840347512299568 1.9484294345710482 3.4968724448528405 3.926058442874408 1.8110513763078977 3.9301451500129696 2.148802441840166 2.473320113087819 2.6133704970787197 3.135442383717256 1.3644555274635841 2.4588634508246776 3.1460373771007406 3.605549788556962 2.7026842935349515 2.97223063287637 2.636289902148887 2.3652021935118865 3.5109996091955136 3.5057610547961797 1.9758133661511432 1.5423642128483166 3.158761295023205 3.546719485663382 1.9809340018418664 3.453515728685595 3.0970921170125942 3.449040827328058 2.061802319281588 2.069186953249191 2.5886733403822335 3.294339670478175 2.811857081943016 2.9897106774282314 1.9267853471768694 3.7949972955376583 3.140388676198649 2.753932138240363 1.6906233934567432 4.765612747774438 3.647650706927984 3.4623528680579785 2.2704694389764093 2.8950754173273996 3.173930655913517 3.134371141153675 3.8732891051583413 4.102100844417875 2.36042326159379 2.4498159347270363 3.374901964097237 2.701990934202242 3.166889119667335 4.35317395363081 3.8732669030312477 2.9502576067392914 2.519119659729972 2.9510663737739984 2.661581611567269 2.578731886004794 3.5613738464835296 2.604611876817516 3.2690443234433033 3.340818426919136 5.168809791332631 1.8843479017783842 3.602683230879868 2.9463835752798953 4.385123487166744 3.234534494054313 2.017534729376524 3.1571719504043454 3.476927222769131 3.597373849376993 2.372392086256842 4.663258185473776 3.9126260065100933 2.585785624896188 3.622100952551022 4.519994061246259 2.2974992532099705 +60 79 0.7938375138799685 -0.8138888603739645 -0.5082963685972133 0.8588104483173986 0.7762560168721797 -0.4478331700452107 0.4141760970366488 0.4609984992076217 -0.5266743438100103 -0.5191071021442821 -0.07053036360102105 0.7412696145117903 0.31044366522725264 -0.792864013424877 0.06548088476598712 0.4916108025792931 0.6697441188117141 -0.5723082306925193 0.768718310424841 -0.8776554655983875 -0.7357819224641398 0.0044406765480800026 0.42639344119768374 0.00020647239677851204 0.2875076737399791 -0.00014503339750171484 0.2758501226472405 0.18750884773075915 -0.7559967803025089 0.5997693694876958 0.5576594756567514 0.5907226447712424 -0.5510598615878868 0.13517717751562852 0.1902660224959809 -0.03426074305552551 -0.15745565753276525 -0.3883245233526751 -0.5717899514972395 -0.43475434953288383 0.3661742796313441 -0.44198880742039304 -0.2736629588424184 0.37352569946595016 0.4261562576638025 0.8266634794479764 0.2188270425880836 -0.8634050002483056 -0.808714302253325 -0.14412155497161927 -0.8039665761190886 -0.9546989524405489 0.17686671197143955 -0.013771049226674714 -0.8489574079467146 -0.9461958634622727 -0.37778314490795517 -0.7260603924575908 -0.2859704376937384 -0.4350881883056883 -0.7081208069004632 0.7708794766935383 0.6773744979428755 -0.6864731650934945 -0.18498717456697777 0.13582156110470267 -0.1259976812670931 -0.6919352135405512 0.7983444182989587 0.9628428777674649 0.1028677814165797 -0.6285391631149491 0.8505587804537835 0.32811262193229185 -0.793550896378092 0.7192408881459613 0.5009420746698967 0.21962145385323883 0.4624406774767198 0.9525288437322041 0.3467807131959473 0.23595044545813093 0.09356866281398335 0.13262610872079295 0.7430848467548838 0.47424714409040347 -0.37300080540670555 0.5700854394029842 0.9471470717604575 -0.9733887198907196 0.7306872598384098 0.4934133126585998 0.08253949870828281 -0.352443186144465 0.8131655234730983 -0.0021236300250564444 +60 80 0.9560050906482256 0.5304319204288197 -0.28277973970280357 0.9359530572099453 0.9078278743836108 -0.6404787458353303 -0.40790144614304547 -0.10909015636561059 0.7790005543072365 -0.3886927285466766 -0.0377128877530335 0.30327257011025655 0.7564646157850794 -0.4986423936401063 0.08769944793211626 -0.42807736177786615 0.16834378025908614 0.688182971481593 -0.27977885898459 -0.13504699688620914 -0.672720151203891 -0.03175660334955377 0.19919540132805125 0.8177521611923357 0.7018667813929294 -0.02346888322041152 0.11462924171863165 -0.9900615524893501 0.7762467567094988 -0.8942064494238566 -0.3260967587184864 0.3155050622680493 -0.2831785005990637 0.9887260965399793 0.9292187998613082 -0.8400740560461457 0.09332928957862885 -0.8086920813706684 -0.7546360567633132 0.1967492790158223 0.7587220050647423 -0.8127889455568889 0.22114968417833714 0.6707988983991273 -0.38557468004953943 -0.5097222628920566 -0.031489093527685474 -0.41869798343357667 0.6991476470195892 -0.21820107958559443 0.7733565170982302 0.8824250444061119 0.8720736384135037 0.490559453576195 -0.9704030546236806 -0.5174962160747529 -0.4942469509373977 -0.23594015657161949 0.5668805275527806 -0.10529006032958321 0.5581346664821887 0.19949077510038804 -0.43399167487671053 -0.29522069831134456 -0.33898357832245485 0.3664728682665588 0.012560552834862015 -0.8589420602744882 0.23184348709449765 -0.8031483934962602 -0.9545965591163668 -0.4755977046154929 0.8124284786749507 0.49348612975320294 -0.48859776791242604 0.3409014192078059 0.7128135704040495 -0.46006147352642146 0.0665523745080927 0.9170207707704425 -0.6012879010154943 -0.9660003795181533 -0.16885732628057637 -0.9764096984740165 -0.28821823592446805 -0.9838968423641203 0.7410367989390563 0.25433580688803636 -0.6535319937972879 -0.28827778820890226 0.6475950204064802 0.8446469026337342 -0.5487208026139134 0.8000789499663745 0.3257966253516462 -0.6847556725790567 +61 41 0.8985904111811496 -0.94702724904416 0.8229054073111721 -0.11511336590846932 -0.062113028501431744 0.9007496306749474 -0.9844594186305748 0.45243696262342104 -0.9680219871671316 0.735751939315473 -0.6946595824999722 -0.9465327269165436 -0.27660864543336783 0.039505832159082876 0.18467146899640396 -0.16406276868087044 -0.5208651539417293 0.3953358162821119 -0.5319638542772076 -0.9957794892674636 -0.8294347715243777 -0.5115078424088377 -0.07800495078770808 -0.9947964408884298 0.07113725027134898 0.5375271707120881 0.808134994833251 -0.19540408853695723 0.533440129561009 0.5903308348072833 -0.4499564446950699 -0.6948502157870835 -0.6621043248963225 -0.5897789941193865 0.2503550886070425 0.10572362234588661 -0.8446699645675122 -0.14116013537076988 -0.5193112628780958 -0.5459759118133005 -0.29791133481245113 -0.3193518607977721 -0.8542949380520166 0.7952011372801655 -0.7176446528736236 0.7783457925260973 0.04950243098286311 -0.026554502793871615 0.5398295850278552 -0.9907318484535901 -0.9316152935242776 0.8715046672089026 -0.9221805495362672 -0.7276545801318302 0.14255183762249657 -0.7286801245595724 0.7817009607488696 0.34697541796718134 0.24583485897104995 -0.13607787770137691 -0.3549570516386793 0.05596257747147115 -0.5149614173468704 0.723550896911787 -0.7424663113336045 -0.9637309074081071 0.1725397937342834 -0.046193034777972874 -0.6246159031016012 -0.20155610601660223 0.5192416083183202 0.48675831258601376 0.7861198415040809 0.1354009607432709 -0.2937394305052454 0.5004311825721415 -0.4808404846666954 0.9709254463470098 0.20445101318188308 0.9912058546782192 0.4952917253828448 -0.334772674118345 -0.5057125915492562 0.3302609592089998 -0.346762988323031 0.7829545612038851 -0.1838902856853124 -0.9032578544040748 -0.23421477376300248 -0.47279557463522903 0.4473876843971367 0.44256301816410626 0.06884005430785556 0.8309545648832208 -0.7261052322177568 -0.4552601163385346 +61 42 -0.17905588621874724 -0.7466065868726266 0.6433765899899648 -0.30642179061589614 -0.8821920246478445 -0.7040512144195052 0.5261201252545002 -0.1491784571714554 -0.9437972445112068 -0.7186702469780508 -0.9094758622482708 -0.08995594479082736 0.6407292216716312 0.7021084367879262 0.027089383183411586 0.4577800615668508 0.049349092834577224 0.29365560731753715 -0.12711669996103625 0.17752130165074398 -0.9615867206897408 0.368886546225057 0.9881870276156508 0.6284857781357964 0.30486433215071274 -0.2790821597184783 0.9279133479330541 0.5908303075082022 0.12295052534793971 -0.9009895302635018 -0.12112920055344123 -0.7768335208788075 -0.5702770378278286 0.5598196789969287 -0.7021747846801631 0.18470578117100733 -0.5581925817207443 0.5533869468049 0.5331905355551136 0.8039884742100827 0.8435940217774673 0.33441961256271413 0.13315077024923205 0.17389560239311086 -0.8022812790839455 0.22378232633793171 0.9427503684048288 -0.9232356822157133 0.5037689966586936 -0.39745622420011495 0.3229954065655467 0.25836001445877055 0.43771365479046986 0.4368798703285566 -0.535180719410898 0.10176382353462876 0.27188633563730513 0.3398384934088403 0.9342240275314773 0.18493919138307446 -0.9524789681599293 0.9338745237238144 -0.9042942038757222 -0.9386786824722471 0.5090492194237619 -0.19889336029579008 -0.5255310239662585 0.9361222998478038 0.0336410687085098 0.23949936798426608 0.16398962780995263 -0.5574542359854131 0.7444883370584063 0.9789321697636781 0.419310775336587 -0.7850739306645476 0.6740260991671876 -0.9583875714279948 0.9403355952099268 0.6384684089017736 0.05418441954321218 0.6185502473145943 0.7500626729866446 0.40607062494192503 -0.26100972561731295 0.2422065131395943 0.9085108088855225 0.6201812791993679 0.3975380205293839 -0.43625890142613977 -0.5395128467282435 -0.6359145547931249 -0.20364029525619598 0.9347936465368598 0.6364816382292147 0.4804746645668059 +61 61 4.032035236168955 3.148900327797409 4.341774291342936 1.7951655245375322 2.7814045702040557 3.456555324155974 3.2149600127326092 3.170590395731506 3.179320141477149 3.8164151736485343 4.698304286909927 3.0285641284800384 4.029240871650585 1.9485672089259263 2.2438855305576424 2.7028316255334506 1.5653339280995706 2.397705785813034 1.8187892658947133 3.07125599464289 4.140000176677561 2.8516407230013208 2.289079635257508 4.039436514679014 2.3340787642381073 2.7230135794313073 4.27258740749223 3.442633920155055 2.4886025710824144 4.115091144737044 2.1395979102284297 3.7139448698576425 3.1417985031826072 3.244810900084763 2.9256150826308263 1.9412875862879477 2.4323600457514023 2.676889628306696 2.266724973518255 4.123331215957082 2.696126724736743 1.8988326591113263 3.2828448451155925 2.4834302118864207 3.8581761891586046 3.3810707092599857 3.3318820385943613 4.024884762295236 3.106815669227786 3.4684294548424086 2.464317784519218 3.969419352790898 4.378181954399793 2.4218733929963454 3.0730436675218726 3.587704988237137 3.7137594586568428 2.737943133048197 4.0140189790799035 2.8627104726106314 3.56960553850411 2.739655228712632 3.7120727584245716 3.2885098163799946 2.879942855053693 3.011439089243427 3.1958739060677495 3.2364866422801173 2.1471863005776366 2.3530747772739145 1.2125959456281128 3.106543910071281 2.908127207744437 3.4534512558504415 2.857938388908324 2.861271437361225 3.72885056597877 3.206875064087906 3.464984138022399 4.054886209138858 2.9365320548870346 3.0686872775448464 3.46831538326549 2.5713678809873945 3.2556135753354285 2.3863481235014925 3.6399149759366427 4.056589600358438 2.032150629855738 3.812085735811077 2.694264069077962 3.6807780797870615 3.025999149052433 4.262152747773907 2.6386707674083496 3.534712478077756 +61 62 -0.7676116415356509 0.057460769490594865 -0.966859510433423 0.04565075539699359 0.9062848814974938 0.01822560331554879 0.29867826921653173 0.8874619106136081 0.5789933863326575 -0.6899314963967553 0.9949888727390428 -0.1290313804193186 0.7503738894237 -0.1650793155844812 -0.08042433541200644 0.16079693378814963 -0.22046283507063702 0.7209930526219388 0.12894818914630157 -0.4144152994264316 0.4615044922680507 -0.1416987207557363 -0.6243717734387906 0.7661040865514097 -0.7045098436554891 0.7936458941062006 -0.7773014815609183 0.7661184702984123 0.3579484597441831 -0.8511389192066245 0.22603635454519067 -0.7712709785197573 -0.9839151734376266 -0.9209224668094627 -0.7304259847175805 -0.8583733095429311 -0.6206036849701997 -0.6285486643685374 -0.06316666870761956 -0.20900454964230186 -0.472471574293132 -0.5384420254544822 -0.7881070747021037 0.9701711680889071 0.7515801450190434 0.5276203939679494 0.6953908889243479 0.7096246932866261 -0.38688520461480014 -0.407114107445286 -0.2593197173587396 -0.910849836520595 0.738185744960346 0.13589430707406813 0.10804850312748782 -0.44237801970996804 0.744116949818767 0.5721500756594522 -0.6406434610500074 0.6245883191361439 -0.25460323554564623 0.5015735582154415 -0.7535680221201391 0.14302503907824438 0.5861372377702339 -0.28128369051571456 -0.6857511404016077 -0.6744378483107893 -0.9329548182178027 -0.7574009402350816 -0.21977368609104198 0.2686182954282037 0.3817046163725233 0.7081522238053508 0.5756236150794931 0.21207107971097883 0.5220812744328844 -0.10217333594557854 0.21458141645349715 -0.9185381575455422 -0.9445689361301324 -0.24386103252853797 0.6879354551138659 0.0994250922705473 0.21091984514121687 -0.08219208652016685 0.5009399199336693 -0.9736326229271279 0.8226198951761574 0.8760456663645244 -0.6533107833042049 0.8335931943614285 -0.9717583269950607 -0.7431572159902011 0.09838006641683772 -0.8614835101474707 +61 81 0.6969074635495811 -0.44513137406767256 0.28763202928551346 -0.6325905922773607 -0.0018132691358427877 -0.7891279474956592 -0.4621924030422011 0.4174734259770905 0.11181241981228629 0.36868501280771815 0.615956487927714 0.7615776632121141 -0.9653815255770617 0.14473399329339776 -0.7565800258060817 -0.5343219054207649 0.09308366686724812 0.21879583834735272 0.8726697156624887 0.7185538583256319 -0.608273150066313 0.6978826175991821 0.24934795485209782 0.28690192248577717 -0.33761037088136203 0.0007580288393833623 0.5054802579265492 -0.3235513830325405 -0.2031204128042654 0.04925017387460162 -0.5924213794998174 -0.051239322815034516 0.2671330727497452 -0.31724964583874327 -0.0956147708006081 0.26616284451321204 0.32555666434201624 -0.8919423506748694 -0.08804970913880728 0.9025487344458696 -0.9581890051877426 0.5467046344803854 -0.206786534706906 -0.20890955164986758 0.4905057878036747 -0.6938714780539359 0.19063115615972337 -0.8680741755019425 -0.9645592429439798 0.5332214805098716 0.22453184180073227 -0.5735524100544784 0.6148186389887538 0.43182993340091036 -0.9692057583063982 -0.7993151744913329 -0.6892169306413942 0.33599490899186346 0.8159271541930253 -0.9725923577970712 0.4114832034306155 0.49514597692753703 0.04399803395017177 0.19099939421941814 0.3697692859968691 0.45364766580402693 -0.012886951377592215 -0.5928036555301381 -0.06628286812581674 -0.631376482056117 0.22085466858382774 0.9091121784157741 0.555803513684556 -0.07908150139241488 -0.690002226192955 0.9261779401116397 -0.4623852431440152 0.16138178013142412 -0.5637376962150533 -0.7539759912123825 0.6744671498735635 -0.78163757638566 -0.4316823825203666 -0.8358406126162921 -0.9890620448778951 -0.20766516873527618 -0.23847138869802498 -0.6313148368205646 -0.10869610446665012 -0.8422266762722466 0.19721980952717555 0.5822991411088785 -0.7457059779145325 0.14516867131027866 0.2108872521875209 0.653031876294359 +61 82 -0.7771288027379586 0.20327352085390316 0.8251813900682123 0.649922557503319 -0.92481851637829 0.44519201327728286 0.1288046616943399 -0.561236774829637 -0.47013007364746273 -0.3821039462377964 -0.7862601437085766 0.7317542419890526 0.4023578768482994 0.5023355225481392 0.6114303569147292 0.4958554485327866 -0.6639755126324105 -0.3878010294380747 -0.10871698447143618 -0.40531230538075436 -0.9538034714380947 -0.17416259834074665 -0.04536100781992847 0.4970252876145853 -0.7343863875005303 -0.8401996798039362 0.908238964064449 0.866259434957964 0.38966605766553575 0.7357830048178979 -0.0036789594389106117 -0.9242568802682036 -0.27335285907486306 -0.6465109311473993 0.2351514424514045 0.17634260401560353 -0.015372203300390908 0.21985266381205903 -0.554369916909685 0.7983971500672573 0.02680992371559454 -0.06940892338609905 -0.9092095282267396 -0.005441624045060545 0.9050087800092363 0.3924770629740624 -0.785243326900217 0.50737906809292 0.3351336924099326 -0.7858158483441098 0.03449833789089962 -0.47340081130581857 0.8232396506487318 0.46067973465211676 -0.5317234650747782 -0.9546805631173538 0.3772745342473851 -0.9215922216661003 0.6845669786946003 -0.3618535814395456 -0.9300479889085527 -0.33519179157315926 0.9368658050107292 -0.6210793857281915 -0.06844832509577348 -0.373713643305315 0.9203764545353224 -0.841225278039955 0.40018120435028814 -0.19458502466602967 -0.042649545041032244 0.7339529967286718 0.21680059417697284 0.8769510922119277 0.45449773965022966 0.1936678721132863 0.9585319536506658 -0.1559868945971019 0.5838249835119675 -0.39322603806918144 -0.23358067904148294 0.18745886671558787 0.6683356015318962 -0.06708751310647498 0.7041168672256923 0.6397838201650048 -0.8938416298292879 0.34069116466099847 -0.28016493132360076 0.9465398657860855 0.5645361047238837 -0.4805754261230304 -0.4474716070265934 0.9662138199520953 -0.3917279897714956 0.17456398473923485 +62 41 0.2603373383446508 -0.8825358973374593 0.583664413232784 0.4119209613975956 -0.3249133079455404 0.14871538490630476 -0.5162534567172099 -0.9402094068748439 -0.9968952368236694 0.2077852222552139 0.7597687261688448 -0.8223281438629835 0.1277324961826518 -0.25186501140349904 0.9881824950632927 0.21037967137518665 -0.6084001459616459 0.711962239685954 0.04936501194456122 0.2883385646444867 0.4281536878597647 0.04732858329587586 0.4032411395364428 -0.5936429880247429 0.6548677349058434 0.4752647569829367 -0.019455868485676042 -0.5732476379535199 0.6634928254263741 0.12376092157676655 0.22237575826931377 0.029673963795018077 0.48283688796340196 -0.023907657145889383 0.6509268835725224 -0.1909385699929358 -0.20301804941773938 -0.45879947815099587 -0.32152406718811677 0.19274569556543453 0.31523844959138736 0.9723522554181352 -0.776903884370072 0.061280544091959044 -0.24239936418814212 0.14825210417114354 -0.15615944922047698 0.10513398863632073 0.9046787497796327 0.7167485643585687 0.8609454917672232 -0.8923226369139374 0.31184085130236894 -0.36428486755354816 0.7891276389694835 0.5673249189114005 -0.9149554783131406 0.9372091420544519 -0.8240035793224538 -0.7110624032541129 0.996376880748534 -0.24741472342027393 -0.6752538085354358 0.941215559463672 -0.4770452557810754 -0.45594442158945214 0.3697557275200387 0.7856756501540152 0.8344652132007682 -0.36510953159666326 0.8715717100762246 -0.7148214561268726 0.8271923477694818 0.5995194221052267 -0.4571430343560001 -0.1898574579813892 0.2497667415162974 0.054608204608993516 -0.4506640790872898 0.46471530471155176 0.9200054081990636 0.010667180021127987 0.1935445081224496 -0.705692931787611 -0.5821960767081042 -0.2950917240755666 -0.056493103256929134 0.23462563033872152 -0.6034922663150843 -0.3669809189095459 -0.2898865106206263 0.7640252977918556 0.2816458874306915 0.8390554871381177 -0.5737572863727818 -0.5274609280034426 +62 42 -0.44043416015726855 -0.03197339263681598 -0.8818311487243817 -0.26876739808163763 0.43784441192547874 -0.8420234877310333 0.04666905301953661 -0.09698131682491584 0.14664024062639158 -0.7059456953535059 0.20780920010421045 0.46537868493659285 -0.27463130583018147 -0.4979049423625235 -0.014400056866998412 0.9720019209002175 0.5048799111041675 0.24538356037894826 -0.4811728778719395 0.2628256503893662 -0.012939044936007615 0.39888252310659 0.6488794385636563 -0.1731777758988633 -0.63995447572753 -0.3015127802419324 -0.25909843406602207 -0.8876244264838968 0.487259308357447 0.6513325182641954 -0.3036281581812972 -0.7209732943564477 -0.41450957810481337 -0.5903654512562995 0.19304428850364297 0.24556369998322514 -0.5188583857158633 0.46357346744874084 0.7834086408894987 -0.09642283185206835 -0.6815153865362145 0.7722115049908507 -0.5853252111398148 -0.5499891626827309 -0.0645719805817564 0.9897720149299332 0.2814952597888132 -0.822293971521026 -0.2133670821905369 -0.6747488965755066 -0.2839066792422704 -0.19578804347541512 0.19226538496379453 0.7239592088394642 0.7716399806384244 -0.1719063575956139 -0.9150607489392926 0.06906890853676417 0.7659394813107803 0.44251117567591414 0.7828752669151366 0.5174672828578222 -0.8457149789032059 0.07481389772440639 0.052316022794253625 -0.35076337580392813 0.8301626338629327 -0.40689293705412743 0.5028653497967963 -0.7950034990878128 -0.3321331344129044 0.626968476562763 -0.6667197078849654 -0.5104315079782136 -0.6505119806113764 0.01882524835547117 0.3217794982594424 0.500669529707658 0.43137131482551827 -0.32356432435586613 0.22421485669446617 -0.281088084066174 -0.14451330807137452 -0.7538872059003827 -0.5731316450232058 0.6115350242006425 0.05121302036897979 -0.09062554469827888 0.1539012077511721 -0.09488041136302416 0.8453163754784327 -0.7046884811914373 0.3838962203374092 -0.5371559916595943 0.6752902647128209 0.10476843882318909 +62 43 0.9238278218384537 0.6808698945862814 0.038851984807209305 0.7509259905823109 -0.47156757015330397 0.4949415483839681 -0.3240631461964989 -0.029075319692186907 -0.4612293432318495 -0.8046999412721125 0.959126706535451 -0.5032407837599067 -0.994819493859004 0.27989880270677525 -0.10220233739430218 -0.11916474631009177 -0.7826066934989562 0.32214069828659464 0.043678091278882114 -0.7838581005716123 0.859047134090156 -0.5386578079134805 0.6371040044696761 -0.248206222847845 0.7132975516207334 -0.6130744851229868 -0.5422924776379128 -0.8904786016228763 0.8396612351608901 -0.9856561479525849 0.24809582766493277 0.16521330270667156 0.8786012621658428 0.7975746569636493 0.4399864184041715 0.12577851359402148 0.770049312894455 0.643221153788563 0.8555402714584297 0.8259387668464626 -0.12818637045987846 0.06956800458204548 0.4184814823777374 -0.7010497627796239 -0.6823982418694206 0.9432853387357014 0.23707366047940703 -0.39018136519722324 0.051500573038466335 0.5853610059609513 0.22883219197479643 0.14423699750519114 0.5522261104229982 -0.17643300010051033 -0.3956989038853651 -0.19153132607691203 0.949731661259984 -0.12655149330758753 0.08899222033233611 -0.006750756379900524 -0.7716871480584575 0.0413188298640208 -0.6418716567823985 -0.7806867343253485 0.08482942292037166 -0.04431964546758205 -0.31815442902940094 0.8413294316111453 -0.6363746002901871 0.868557618799211 0.8656397208528628 0.23283340447791723 -0.015683831130455017 0.5054253690729038 0.06731823536898363 0.5746179995351504 0.3994939247676008 0.5100968972351794 0.5129548675472997 -0.09672187080139771 0.18520887774656614 -0.8021840485688316 -0.06897586965564928 0.035659188206745185 -0.1918405896468216 0.7062808252057466 0.6926934238211653 0.3772822717792419 0.10676363668553157 -0.14461442617038456 -0.6249230007760807 -0.2620334461458489 -0.3596431839730114 -0.12084963716942076 -0.999397127175867 0.34838681979534525 +62 61 -0.7676116415356509 0.057460769490594865 -0.966859510433423 0.04565075539699359 0.9062848814974938 0.01822560331554879 0.29867826921653173 0.8874619106136081 0.5789933863326575 -0.6899314963967553 0.9949888727390428 -0.1290313804193186 0.7503738894237 -0.1650793155844812 -0.08042433541200644 0.16079693378814963 -0.22046283507063702 0.7209930526219388 0.12894818914630157 -0.4144152994264316 0.4615044922680507 -0.1416987207557363 -0.6243717734387906 0.7661040865514097 -0.7045098436554891 0.7936458941062006 -0.7773014815609183 0.7661184702984123 0.3579484597441831 -0.8511389192066245 0.22603635454519067 -0.7712709785197573 -0.9839151734376266 -0.9209224668094627 -0.7304259847175805 -0.8583733095429311 -0.6206036849701997 -0.6285486643685374 -0.06316666870761956 -0.20900454964230186 -0.472471574293132 -0.5384420254544822 -0.7881070747021037 0.9701711680889071 0.7515801450190434 0.5276203939679494 0.6953908889243479 0.7096246932866261 -0.38688520461480014 -0.407114107445286 -0.2593197173587396 -0.910849836520595 0.738185744960346 0.13589430707406813 0.10804850312748782 -0.44237801970996804 0.744116949818767 0.5721500756594522 -0.6406434610500074 0.6245883191361439 -0.25460323554564623 0.5015735582154415 -0.7535680221201391 0.14302503907824438 0.5861372377702339 -0.28128369051571456 -0.6857511404016077 -0.6744378483107893 -0.9329548182178027 -0.7574009402350816 -0.21977368609104198 0.2686182954282037 0.3817046163725233 0.7081522238053508 0.5756236150794931 0.21207107971097883 0.5220812744328844 -0.10217333594557854 0.21458141645349715 -0.9185381575455422 -0.9445689361301324 -0.24386103252853797 0.6879354551138659 0.0994250922705473 0.21091984514121687 -0.08219208652016685 0.5009399199336693 -0.9736326229271279 0.8226198951761574 0.8760456663645244 -0.6533107833042049 0.8335931943614285 -0.9717583269950607 -0.7431572159902011 0.09838006641683772 -0.8614835101474707 +62 62 5.4032962393318 4.016618064638919 4.144953100226031 5.12649358333252 5.861170411631117 3.2715438461046498 3.5482654578350052 4.840992706730541 3.781393502486103 4.778009255472203 4.491198665213199 4.319302944616037 5.658950558507119 3.020529519895434 3.0313989731983666 3.869182060005862 4.428182976526064 5.680546096050232 2.21691013389529 4.016920418302007 4.66774595219023 3.9089475026708813 4.229148646802306 4.65819467543888 4.43872273660509 4.602056970309215 3.5750354002298046 4.846403037078871 5.603273060637251 5.016449850075567 3.2193489276543743 3.9189591250280973 6.293845482634585 4.0594854293790235 3.9961448192650693 3.506758782202752 4.860580791324383 4.172259322190139 4.781428810147419 3.685840791581387 3.728335256076194 3.8243939194228727 4.7091530524101675 4.447096519840159 4.448096379069448 6.309532546664177 4.142666058032964 4.53576989636054 4.490202895725847 4.585291109879562 4.340875706710826 5.435622073601569 4.7136939617195 3.3967390821580192 5.778821566618328 3.8417402585216056 4.431723074665279 4.95147591184652 5.8759525668837735 3.7831397924951817 3.4686274364673304 4.893652030647367 6.405801321404616 4.31740616513436 2.3530065750613094 4.030362276624524 4.7704417775759556 4.681605012923868 3.8909180507717034 4.888555332534871 4.713658645844546 4.644068933126018 3.978020401867279 4.6465797709498515 3.5510803492182585 3.5404765428255986 3.7299703842170233 3.5702112298180726 5.469557232766388 4.2532559425925385 6.231995940137708 4.355330038195962 3.0691704274648286 3.078838588129994 4.128091567183686 4.945445458423534 3.126184381769647 5.501667264366155 5.587552589669712 4.079169046003437 5.124194591611424 6.056630361480398 3.8076342261700837 3.604826684449399 5.3263769772909235 4.387300810077889 +62 63 0.8873795056909868 0.9407869412994483 0.47204730980107823 -0.7155791176324284 0.5645112882330707 -0.4776492028171644 -0.22283524227804064 0.843221635879221 -0.29884957896305653 -0.31009288293734927 0.8924970409979551 0.5730617963744549 0.9076288611839984 0.09918485189840198 -0.1173374032652228 -0.7034189765810894 0.9984527923143851 -0.8620058996017836 0.3832199385604016 -0.3040447316594408 -0.6647924169358559 -0.39662920206343566 0.1774759095765066 0.6354668116970428 0.2932821731488635 -0.40779719976923845 0.9522174172522011 0.2115446618384409 0.531162985735647 -0.3357493639719331 0.0033656795949315033 -0.17819245785681703 0.8975188653527384 0.053900455315088136 -0.8814185340192573 -0.992463695686902 -0.581630267588662 -0.40749022590789163 0.4411285218630041 -0.917814446954418 0.05952475077925801 0.5451538091972215 -0.9625223427250844 0.5186486379024693 -0.015925593089914036 -0.4101276730513743 -0.5390670902448729 -0.8911459465734859 -0.540752323660562 -0.22953953725796872 0.39168532208808116 -0.7720721082834032 -0.7662276084494799 0.7575235126945532 -0.8664561489075102 0.47430446036697216 -0.09270178000555251 -0.5993557661024811 0.049156985444981816 -0.28694984358938247 -0.137263242214831 0.4713707590758087 0.9770333537564235 0.7397301887604804 -0.038927502451518325 0.5010819025547237 -0.8592615906042804 -0.293568664094106 -0.07694276012766976 -0.6158284666861038 0.44689511741784704 -0.7717090614418944 -0.4155665230107073 0.7808184770845283 -0.7751430282411034 -0.8676575438013439 -0.4178555915809625 0.4754657227756445 -0.9951011234481408 0.7993864224232718 0.7832835067224788 -0.3410808930661675 0.42204706516594226 -0.06551901081356526 -0.34408728498229 -0.8231198957657677 0.48693974367843973 -0.7558256478529894 -0.4759604642319628 -0.6821458435361054 -0.5187410397590773 0.42483210513546155 0.3403471433664542 0.0462977130617821 -0.43546775462992593 0.3223483748064131 +62 81 -0.847578553694657 0.6084998805121866 -0.11231575392179627 -0.8237255559958405 0.6815280006152789 -0.33817597384944764 0.7983514352996965 -0.873588809255109 -0.3790990103026244 0.6326790841727181 0.033371078061856796 -0.6746792926016942 -0.21928527182771318 0.2226367025502145 -0.5087995573589221 -0.42975742665714844 -0.35540370417777 -0.2855192409961482 0.3510263669189533 0.6890327065257693 0.8436915595896102 0.7002162335763933 0.7766043279834234 0.97485431413687 0.19580297497017618 0.7813541556431371 -0.08415316278263907 0.06046299252031151 0.65193365126664 -0.576360900375686 -0.7308656748092273 0.525527730608532 -0.713509760650183 -0.5033774703683489 -0.48237033710002786 -0.03837381804590767 -0.6032987042382827 0.11075159565002868 0.4985425814638773 0.06891577235660273 -0.9025335079385652 -0.11772274207082556 -0.07527851324728241 0.08122799069259257 -0.7599458653024944 0.5324002420036344 0.5833700826050658 0.6723604187100252 0.43920484575717444 0.6574551413894847 0.7932003375295325 -0.7538499588661687 -0.5600999531914341 -0.8073061478644974 -0.5359199570648727 0.3146417291362049 0.31867388799265606 -0.8629287549713311 0.8671582766752581 0.04876465776376304 -0.25157753772633673 -0.552814598082761 -0.9999680991011595 0.7890612647715636 0.2855263703561135 0.9457876954007911 0.4032824257938097 0.16836767671731745 0.30891127105695304 0.33579829269579853 0.307930444334632 -0.8293717982650972 0.8054107876052807 0.5589550056095034 0.4610438590487813 0.672562075977359 -0.8911064253026257 0.8810302759983766 0.6883243259567602 0.4641008808259617 0.9199489201666031 -0.7781568836234523 0.10291453089325242 -0.9491256296363646 -0.6431887660587694 0.5089014630696636 0.5340006034702505 -0.838700529622004 0.6748804818709788 0.41671659905571623 0.31989768065931745 0.8943300152313767 0.031136113163134027 -0.11788546002522549 0.42588271192683536 0.7707579029338925 +62 82 0.26156314879150067 0.14994396730782378 -0.1765262184466565 -0.7661048748705195 0.8270014542267616 0.42753673765794553 0.40118401556131 -0.19445463909119542 0.017443407194237093 0.1428885848131214 0.12370687771062117 0.4461105443078024 0.6785958354625992 -0.9460850936325766 0.8829972097003902 -0.05378114887419905 0.07701333302750024 0.847554303897994 -0.16163436038534407 0.086622866033355 -0.3895223694968921 0.637786447481189 -0.0703405381606581 -0.3637316833263562 -0.09713092162619308 0.4379092890567331 -0.007953854282510608 -0.4109712809643846 -0.9892651570797264 -0.7597306251290992 0.8404226336470157 -0.869652643500507 -0.48771750326614915 -0.21282679873559274 0.17394236943514563 0.07312671902655521 0.8821592796620761 0.3538395782893311 0.2009799143799813 -0.49397784019310187 0.3847588727606486 0.48682896206138815 -0.679278361291894 0.9872072725340999 -0.9689169354640714 -0.9059696444315519 -0.3402231592206306 -0.0407462263871996 -0.23887503697673274 0.564529799217373 -0.7724876256481517 0.5053795164909787 0.4356146888286354 0.16108366396088747 0.8098576135508628 -0.38625091327727445 -0.03314832284233993 -0.47400454729601416 0.9239858819575211 0.09029885134655324 0.07671007831900734 0.7498825884881508 0.23608618799688608 -0.22029426898367466 0.0651668564320671 -0.9841162055881967 0.32673763284662916 0.3611339618573026 0.19381042568893592 -0.584818476599837 -0.6640140376506536 0.7020490139089348 0.5538860933069316 0.188437886321126 -0.013452004606679058 0.6590642369675093 -0.062385918508627736 -0.6671452952965469 0.811147810090032 0.9863421309602738 -0.9625681081309292 -0.8436802536537096 0.30985149616224894 -0.24410637996434148 -0.8276505973094828 0.5452910525584198 0.606363300230051 -0.43066940910859963 0.9957792650384061 0.5157609375466579 -0.8323054397334837 -0.7580348986624541 0.6631046101342803 -0.6892848823157345 0.6407754208557994 -0.2983185404836639 +62 83 -0.9111532898394026 0.31729320925083004 -0.1395085010596966 0.6158168030009556 -0.7037795057965441 -0.1215873777840939 0.623756975119601 0.11779128300251829 0.899380577194109 0.8344122397999338 -0.1094110410464908 0.47020238909075274 -0.8713205780823989 0.5446254751130819 0.08032759111630372 -0.40405526950494797 0.1473807927566504 -0.8345124278103659 -0.037278068976860146 -0.993586767808373 0.8719764492526563 -0.3251085473429869 -0.7646822346743805 -0.59207600713885 0.9835739910986923 0.43321945027346564 -0.6806785523817431 -0.7886876471602582 -0.28271477560894875 0.7113059951819396 0.5351473659163908 -0.10756460140558333 0.757669118602732 0.6599149401448152 0.09841227124278884 -0.06671987304794769 -0.39900544496975376 0.19354408641648146 0.8164007478036219 -0.7656064923523347 0.4249042887463301 -0.2346976276900652 -0.22295091708741044 -0.4857724600529574 0.03951539833435547 0.9130705479337948 0.6649689422567986 -0.5385361318547413 -0.9819519509706591 0.19009439631076575 -0.6619395207321566 -0.3974252691873488 0.810027639022604 -0.13551001269500795 -0.7404814976418623 -0.7028290907512933 0.13425781876829213 -0.41120936430908195 -0.8958846076799005 0.6191123609059865 -0.09525861097464627 -0.9388358793842433 -0.7707153528463264 -0.17798494427753808 -0.45741321613259567 0.26103124971372393 0.6167270434987395 -0.7742299478471324 -0.2990708067576755 -0.40701697681800586 0.6986901283911973 0.38892113289500574 -0.11898432871951248 -0.7608030760206861 0.0646411283653816 0.27826173469458326 -0.7766447176918312 -0.004684059184354217 -0.661352417984413 0.08433007625749633 -0.3996603493000319 0.43410232641302815 -0.3276803837553661 0.01018299939875189 0.0372114567253059 -0.46395357841431717 -0.016375181360625213 0.8754497859132728 -0.7828680901458762 0.7468582108960624 -0.09036986675048597 0.5956162223692096 -0.5836975918098846 -0.17033203665823216 -0.49724485694525256 -0.1850849597103319 +63 42 -0.3409399038862788 0.5884367557125523 -0.12455380969012331 -0.20295614319892974 -0.9953103799721377 0.14654983197383897 0.6475367788921171 0.6653653176492442 -0.6482473717642476 -0.8887944893367505 0.731380602201237 0.8664925025860093 -0.9738160427421474 0.022880113696872595 0.665286736353206 -0.39948671903742405 0.5958816119471877 0.7526494500127987 0.5485437332946397 -0.32396360252784406 -0.7234866862733944 -0.5815577468418704 0.21315674414939 0.677625417757524 -0.00012563862302195083 0.35498630778644547 -0.24015592080263004 0.5139346003246865 0.2863917635038735 0.11746641824061 0.9429718562454861 -0.1874551525325543 -0.3683105774052762 0.9574276274137499 -0.530747057090833 0.868714655370247 -0.4334652708852387 0.7355963865325446 0.45007638255653126 -0.39284678167680553 0.25195098860458653 -0.13625562780260725 -0.6476900653055251 0.8503069185666441 -0.933491517386547 -0.946033099412873 -0.44609387741675355 0.2698159325974949 -0.6264316647655728 0.5838443093826424 -0.7106977063899362 0.8421480750314998 0.08136903190579448 0.9947680595012021 0.35919718012766055 -0.6954472584143458 -0.7140192576250957 0.3227062288934168 0.4901264219983872 0.04294518923566226 -0.44304945330369305 -0.7452762475337817 0.9402677601354661 0.0346808621443504 -0.33240123316658887 0.30247664120674345 -0.7443927915889728 0.2919500709154432 -0.26861869075160105 -0.31881749487277755 0.9930213271426505 -0.17081018037621987 0.16829144997158774 -0.5480346804844809 -0.6089174507282036 -0.6274435127748417 0.060158673898531356 0.2912647829947106 0.5308007373048556 0.39743784062478427 0.3250990883725009 -0.37941738836943206 -0.6049229177316098 0.799505461626999 0.16929699629393902 0.2144916759534723 -0.9831717250333172 0.7429959747066013 -0.5475574996178989 -0.6702022772405187 -0.036786413942716756 0.5670419129257496 -0.3318159132008125 -0.5041781979081652 -0.14648265852241238 0.7166085401062603 +63 43 -0.8272703678196609 0.7776108815850227 -0.6561573784280763 -0.9294343599952808 -0.7607235662325342 -0.04217979534405991 0.5254175534625052 0.774990195883474 0.6975710566889257 0.7437296579480357 -0.46863487041927554 0.14803375033390065 0.29974031875173135 0.7462378570728256 -0.10938341762284742 0.8767600550373407 -0.09005123986268693 -0.02440484645868568 0.8389899650379138 0.5668007681295739 -0.22516294870751286 -0.618088959221152 0.7128419515896485 -0.1438847209934313 -0.8983882949936972 0.10073804774663864 -0.8753840761383542 0.23593997157318847 -0.9583247907622279 -0.8127439792462283 0.3028009354796568 0.08175242208425981 -0.932796688747034 -0.9819424659657703 0.5643473605683833 -0.2581291258222189 0.43006358923477905 -0.47109481096461225 -0.3974367877715843 0.3067030689023962 -0.21184567892463346 -0.3679344363628012 0.2007449058469819 0.25133006043056927 0.20380453468713666 0.7394202144494846 0.14478424121805888 0.9957662055744674 -0.4068617486794186 0.9778920763800365 -0.8070599716917695 0.565590315814285 -0.5820232736073998 -0.5151282992862967 -0.26039430726758206 0.050421217082227354 0.7130029698213776 -0.17483722977658567 0.12707244503364912 -0.3581502048760834 0.31537250685887974 0.9202728672030405 -0.04533946175226444 -0.6882736157149134 -0.5740633248729299 0.8038015773169558 0.8899744954704234 0.3762487525883209 0.5435371211762996 -0.817069551784364 -0.3442699881696667 0.14998923952711007 -0.3013110504755936 0.7960180216135944 0.9334939480764854 -0.17947643387351508 0.8916357993704778 -0.5232808141743757 -0.4002173082017286 -0.7465045122149432 0.018389931183476982 -0.8149931471322922 0.5515964837266834 -0.5353583987588173 0.9653613955833775 0.08069170812073301 0.3824577235487745 -0.6730096127478673 -0.13877349232486091 0.39610040952905745 0.06444437995925067 0.24369224198172224 0.5619348445905026 -0.894432149816337 0.7577720157091852 -0.7990523532372444 +63 44 0.4863838261871827 0.45872999471717457 0.23051085587475906 0.06504463677914218 0.21326155338559283 0.6452563552105237 -0.8517956829477467 0.4951912390598978 0.21110942428309576 -0.38508515334072935 0.2911354390448053 -0.7286806804157351 0.34409809555287807 0.823460512243475 0.7857886231612836 0.08497017004928686 0.14153019260212596 0.8088426027364752 0.6908211735866046 -0.1887423978243037 -0.49582397294879965 0.38917274933156065 0.4896891397823018 -0.42516483608025335 -0.3210103842667793 -0.15749733445210623 0.39042661376802124 -0.10418788482579067 0.11708441284772442 0.2305617816452643 -0.657925102008047 0.04815234321498996 0.6074039195370193 -0.18296391476020846 -0.30462399581262156 0.498537335385729 -0.12489110713547391 0.09021202910266357 0.32596205929454847 0.9252923294445023 0.8380353426367766 -0.8405079102676378 0.5269012826735668 -0.3125598488678798 0.8459298317574508 -0.5910499864085967 -0.24070824356360876 0.8081626190850835 0.14441862504918057 -0.10908747402256314 0.5002909758826226 0.5747627156590425 -0.0880351496965801 -0.3369253424062615 0.044992506742320026 -0.34027606926419973 0.622085117841574 0.7525812898419844 -0.4913832157845883 -0.5690444512285917 0.001392559816623562 0.6662436859733887 -0.131358232074831 0.8672186615921671 0.8561705550812664 0.37437971303870654 -0.24263253901218484 -0.4242496123656634 -0.013779749255838913 0.921525436426891 -0.32736865534354176 -0.6893204793527363 -0.9079764842357632 -0.7650998255390637 -0.4970045367274911 -0.519852411203326 0.6366422758835932 -0.28705718613501796 0.264473716214056 0.9657916026897724 -0.0019414465154117266 0.6804118823243881 -0.3089193250560285 0.9292032395342635 0.7235468852917812 -0.21454687232395586 -0.09702710195965758 0.41295636013572357 0.048990975574012996 -0.7167797840780117 0.6214646449233339 -0.20496942400652784 -0.5381004069522901 -0.5468368354693505 0.8899731424659891 -0.026778252908795652 +63 62 0.8873795056909868 0.9407869412994483 0.47204730980107823 -0.7155791176324284 0.5645112882330707 -0.4776492028171644 -0.22283524227804064 0.843221635879221 -0.29884957896305653 -0.31009288293734927 0.8924970409979551 0.5730617963744549 0.9076288611839984 0.09918485189840198 -0.1173374032652228 -0.7034189765810894 0.9984527923143851 -0.8620058996017836 0.3832199385604016 -0.3040447316594408 -0.6647924169358559 -0.39662920206343566 0.1774759095765066 0.6354668116970428 0.2932821731488635 -0.40779719976923845 0.9522174172522011 0.2115446618384409 0.531162985735647 -0.3357493639719331 0.0033656795949315033 -0.17819245785681703 0.8975188653527384 0.053900455315088136 -0.8814185340192573 -0.992463695686902 -0.581630267588662 -0.40749022590789163 0.4411285218630041 -0.917814446954418 0.05952475077925801 0.5451538091972215 -0.9625223427250844 0.5186486379024693 -0.015925593089914036 -0.4101276730513743 -0.5390670902448729 -0.8911459465734859 -0.540752323660562 -0.22953953725796872 0.39168532208808116 -0.7720721082834032 -0.7662276084494799 0.7575235126945532 -0.8664561489075102 0.47430446036697216 -0.09270178000555251 -0.5993557661024811 0.049156985444981816 -0.28694984358938247 -0.137263242214831 0.4713707590758087 0.9770333537564235 0.7397301887604804 -0.038927502451518325 0.5010819025547237 -0.8592615906042804 -0.293568664094106 -0.07694276012766976 -0.6158284666861038 0.44689511741784704 -0.7717090614418944 -0.4155665230107073 0.7808184770845283 -0.7751430282411034 -0.8676575438013439 -0.4178555915809625 0.4754657227756445 -0.9951011234481408 0.7993864224232718 0.7832835067224788 -0.3410808930661675 0.42204706516594226 -0.06551901081356526 -0.34408728498229 -0.8231198957657677 0.48693974367843973 -0.7558256478529894 -0.4759604642319628 -0.6821458435361054 -0.5187410397590773 0.42483210513546155 0.3403471433664542 0.0462977130617821 -0.43546775462992593 0.3223483748064131 +63 63 4.988922996585668 5.874208548493755 4.09643059448333 3.6275574404762665 5.92052523300239 3.474933946681065 4.579129119393479 4.933387206725701 4.06736479702429 5.616476121484758 5.096780953854947 4.648384151033645 5.387851210155341 3.3703599975216543 2.780479792557656 3.999421576701117 3.8641392777016303 4.75011198097086 5.523992110832708 3.8602024540732125 4.66721932661046 6.268081188379378 4.33766769956894 4.769718454827499 4.39251324660556 3.2240125741200583 4.534840222725748 2.718076725088941 4.189422894532395 3.6774186210217135 5.0511414488410775 3.92487343589083 5.221080050894618 4.954597052942108 6.320460718340507 5.634345486985651 5.289452539444231 3.9707821374496177 3.8353753664147323 5.0309607805488366 4.88158455356948 3.9435789408396325 4.03890836172945 4.743210895656175 5.2826577619868695 5.281947349727595 3.798292878810625 5.599436768883972 4.478274289014249 3.0174647851599783 6.2323031555765285 5.724043192373329 3.915089470284367 4.45351386681087 3.7860127447219987 3.7634718330301684 5.071844050287414 4.283674938559373 3.917842994803434 4.459954200484643 2.830337361927503 4.4917470109441116 5.298763214586624 4.829876489584332 4.592187824571502 4.269828684474739 5.326951778875354 3.938119955802227 2.728694772976673 4.3414908192239015 4.059127380926085 4.411903696896626 5.105086267128699 5.535430340791966 5.062778393876871 4.709637351944544 4.2186292116405 4.997956862473418 4.440161234734775 4.632921518549823 3.296597812111701 5.6029190840724805 4.510119603906974 5.402978388798306 3.8985712188123314 4.961387304200405 4.372220584483934 5.945981153598524 3.6428944287486265 4.820512780334961 4.230311109457892 4.530551762264171 5.181986291410666 5.374520368799445 4.438619724375107 4.221463939004708 +63 64 -0.9765064948116038 -0.9120207222140913 0.08937883332320018 0.15590573429434063 -0.8813874612924044 0.22285366156954556 0.8948104397365064 0.1554287112977566 0.17128721587360496 0.9296129113003033 -0.744936564951713 0.8983681441334666 -0.9242137656153786 -0.2859177162638389 0.14231425623185334 0.15835059723951406 -0.2932905152237528 0.02453879965197414 -0.5949168335762909 0.5811913295687636 -0.13368545126622977 0.9901209506071249 -0.5050208458074905 -0.8659459956600846 -0.734103681999879 -0.10615015428901531 -0.6875665242896385 0.30335137420338665 0.49654926969724333 -0.030692061990274633 0.806585159869613 0.9282266814365341 -0.5669411093557488 -0.7735103539655617 0.9746988067421425 0.7229658205820746 -0.6283666810603645 -0.8224445620444849 0.17145008999447464 -0.8303302045421601 0.8962575908467991 -0.39307483273533306 -0.4032770629783935 0.9886193397946632 -0.7349683211119473 0.5293281164322203 0.8249563841992189 -0.7199744025122148 0.4368884450210049 -0.30455902737173224 -0.9925323005638196 -0.07675309537513852 0.4022911037447574 -0.7272132812944778 0.41571398517646974 0.4597026348233395 -0.8833491941327047 0.7011187097043823 0.6981574959211567 -0.9385564367462103 0.2993268604996995 0.04756998099395626 0.35956126944211864 -0.21535477673146564 0.3164198519975703 0.4519407989649675 0.6150263461937537 0.8649386418501341 0.40441360530220294 0.4112941496334712 -0.3210203929041844 -0.26363112377371456 -0.5495225505649188 0.3277813259284952 -0.41247719918270453 -0.9295282847716335 0.2679528752896667 0.8515238301240977 0.7878652701381648 0.20074445913111094 0.14015113499627851 -0.31638015835427313 -0.5369583079611595 -0.3945437935588987 0.33276375938290714 0.5756062048814155 -0.675462258062749 0.8450444144625648 0.5397378160340625 0.8037392190636701 -0.7051544811427468 0.6434086387194504 0.0319825130065039 -0.2674494091921855 0.49843436587293133 0.7789099203926555 +63 82 -0.30980612371837224 0.8659300945377921 0.3007833870295802 0.015696047749508946 -0.3991861574642215 0.5997771546035 0.6835914185559462 -0.7447985063849429 0.3850025813781617 -0.8073416229261663 -0.6242167265878726 -0.24938375786558353 -0.8048305168439707 -0.328026360338165 0.14036323910317727 0.19724572994209555 0.5435772922017192 -0.4834967011318043 -0.7432723530011587 -0.585094335952457 0.27802013410283033 0.4313420417886833 -0.318270299881265 -0.6886143372182485 -0.9461522588919355 0.8656313244893834 0.044635164684213136 0.5552683753067489 0.7330010665093893 0.4478416174442099 0.3966037396397757 0.893089425750347 0.326991471815125 0.5191395502662655 0.5084264914250334 -0.15908784715009872 -0.9731149089304709 0.0936358072510608 0.912778132411753 0.4684500735052539 -0.4474181654564582 -0.6930753275318702 -0.26393620327885126 -0.23076132280212147 -0.44873927854623785 0.5952416609336442 0.2547907097924704 0.9338972788741848 -0.7331446536179074 0.02522287109042365 -0.6342508368705158 0.5571206288031287 0.6959998572343615 -0.3117711730989414 -0.43804149877826815 0.1502640938815507 0.2546288852554701 -0.6118968176285193 -0.9207567806100398 0.35150311651885513 -0.9026601846785662 0.4803476466966552 0.969533247897455 -0.336508257867727 0.5424299885840562 0.05324865305406856 0.18639979046644473 0.2597134149300395 -0.11404473719562436 -0.4709616911170267 -0.1519466748594931 0.7309046377742803 0.6036600681705289 -0.45637410289541624 0.6477313448749298 -0.22262886223255052 0.10571879924829264 -0.9381918154627702 0.1768305199828204 0.6037166874637556 -0.29715268206192436 -0.8727913339929636 0.2549281753091035 -0.21293715940342572 0.6979193252662117 -0.9402198564293809 -0.8606181291827169 -0.7280859445137664 0.3852550816083278 -0.1458215786211685 -0.492776866591627 0.8188134366512334 0.9980630201317022 0.7411938490647472 -0.42241898998812166 -0.2547789642555196 +63 83 0.46418323658333227 -0.43184290776721745 0.8863255019109937 -0.16743842331172964 0.7179471655635372 -0.747812963996221 0.3636864638994668 0.45303947004294987 0.8034882060891677 -0.6707982650215278 0.7174330796944086 -0.30962742838183654 -0.6160620894940256 0.2772435974072933 -0.21943230407763048 0.9375018585376631 -0.16144873245586733 -0.9675307398793291 0.7055692162843037 -0.9353070605660627 -0.9848491991865929 0.9727325367995441 -0.6337522848977708 -0.12397249938978727 -0.6363368721079321 0.565158344138551 -0.10281651260002267 -0.06364365061881494 -0.47977647291288994 -0.5322190982686752 -0.8077229001475661 -0.2530411387358473 -0.556509298833213 -0.5646128120810938 0.6858678378671632 -0.7908660231004287 -0.6017845770042245 -0.29568549990282156 0.5773677547629521 0.8337106070093585 0.8460219314738713 0.12031851955452821 0.07846668957718039 0.12883857866398873 0.6750385256136029 0.622734367980337 -0.3625956769126859 -0.40874676675545096 -0.7465479798066084 -0.03037763662060744 -0.8132788242434474 0.9410563854214438 0.47389046207481544 -0.07588201127303718 -0.2893396194614657 0.5452375307018578 -0.5208457086702487 0.3207682860325374 -0.5366736938498964 0.7994723391569185 -0.6350085615585765 0.4307138877256296 -0.9649952694993309 0.25509309782850575 0.4786079189958059 0.7917163330593522 0.5109495769589063 -0.17486200297302057 -0.6625774427331919 -0.3546068161216114 -0.0781623867986474 -0.533371572522283 0.3950923871494787 -0.5356241195317732 -0.2006287568153189 -0.3860170196913526 -0.9347237288686048 -0.44576652183586973 0.24713089581818992 -0.5406750638907696 -0.30877225135561814 -0.27760853409446606 0.6116674614048798 -0.9792272760560847 0.12766226103606515 0.8656897542773219 0.047165958463365465 -0.7666363552650146 0.3810081804446055 -0.2598202027735588 0.7719232170533541 0.7424265362146434 0.7783465979916797 -0.9535375614024051 -0.21544509643208287 0.06496648631162483 +63 84 -0.523456427702099 0.6991520241725977 -0.44427767205959534 0.7185502611157306 0.9697063584288084 -0.5919901000141572 -0.10635049471920355 0.6677610105200322 -0.2749144824398133 0.4403150410023402 -0.2758673876159523 0.23600497608173043 -0.13856262114993267 -0.6256026354309245 -0.5888234124029057 0.5803590519797026 0.5573910530829778 0.4636952420095437 0.3092743741572668 -0.10985952843565805 0.8349927088586842 0.9187054501778804 -0.8929827309542058 -0.6532692800102113 -0.2733962628882718 0.19132194167682237 -0.9134368227716085 0.3043409899488472 -0.020541595911831134 -0.34981328854836846 -0.9352739450140113 0.8777908043069582 -0.2794366876463392 -0.10189971485285643 0.9129735923164641 0.8751318826580476 0.6744044781588252 0.2945471239863584 0.06707640622104027 -0.06773478153053203 -0.8697025352291339 0.6619516892660027 0.016098442664566726 0.6107208790393637 0.9402394683837898 0.24143931769474425 0.26190649132623034 -0.12779828072366795 0.5148828266862993 0.3244223027638411 -0.4999513694619606 0.9276440091720934 0.4427515935007371 -0.704248271545121 0.47491490300388195 0.924699012440265 0.3038342374192131 -0.1156439622677814 0.10961616872635238 -0.6957483505662478 0.008466913138924115 0.5978050367266874 -0.3581789985412651 0.8693250985444867 0.6341763429242879 -0.7000737333507074 -0.6031982806765095 -0.9251004923007831 -0.5460627637439466 0.3959891657195722 -0.8284943219032874 -0.34167824119454915 0.9930480257383134 0.3550174353043205 -0.3000404367302618 -0.1108866400384716 0.4615185970426936 -0.7593850474549646 -0.9119202646294782 -0.009865568128431423 -0.4430102907331803 0.9342621112067082 0.23185740106316288 -0.9506675583144162 0.3762466329513552 -0.4738363162205317 -0.3234325066545993 0.5019713844544231 -0.4002024023452253 -0.5387186277199791 0.11201915840557786 0.3652986017150712 -0.7848254266042654 0.8904240826748986 0.9670904536243126 0.296693038625526 +64 43 -0.5599328857247154 -0.9404778359745447 0.992451713235512 -0.498403655712061 -0.7654664680838599 0.7906425323087902 -0.7644801279908482 -0.7152638119157428 0.5578633285753589 0.8041940544785844 0.06680216461668653 0.07652503427979918 -0.5705794151680359 0.6833245685578999 0.9231125313850284 0.284283661753554 -0.6603870652104451 -0.9571750142375344 0.5682614297438695 0.3524449367014737 0.2148718090841919 -0.8079949558431101 0.5005189465078539 -0.10074169687840606 -0.5703841561619165 -0.6550301511827694 0.32324812012528037 -0.1449018880651114 0.63702655810034 0.07277173637450773 0.6055313799189885 0.281387951552178 0.8214390730366026 0.4443617427789899 0.2514024787726461 0.3300385360419267 0.1677661898485725 -0.3235450453857325 0.9231193958902166 -0.25261281862345797 0.3592855109478885 0.03459590884930486 -0.13516684371147614 0.032268204767677444 0.16477563894583902 0.6904978589205846 -0.7011560784921982 0.6758430840813099 -0.3343598130584595 0.3790169333382647 -0.5155045331784158 -0.28821215766612207 -0.2657333094299079 -0.7880347314822198 0.48646596506480266 0.29267653200218513 -0.6009285572758465 0.8199786343416413 0.6822728966094562 -0.8262901804347906 -0.0110405189404843 0.5802587011788047 0.7671284464805381 -0.32474347245566904 -0.910723836455509 -0.21998469929781916 0.47859592726538036 -0.5241339773500164 0.03298685708710014 0.877049746304718 0.0016859466300866988 -0.30562647672460086 -0.1980737399566399 -0.8833787791729022 -0.2646384374406088 0.12240089523445352 -0.9824969674619184 0.5959885758661252 0.18394278006626275 0.09900437935576711 -0.2548310531925113 0.39435088399345863 0.07806945375220531 -0.47055342001851885 0.24172560232416251 0.062645841710953 0.40148359644501963 -0.23629971745576972 -0.34624755868099166 -0.5910866914027242 -0.5876411349141644 -0.5808291928831331 -0.1657320333532557 0.37196275228520936 0.4949278596714708 -0.006958670408016676 +64 44 -0.27637973383638625 0.8512951753728033 -0.7960160249148001 -0.030732599623682022 -0.42372377477542944 -0.24807399965808385 -0.278131398807548 0.8427457405788679 0.7514715858076202 -0.4702932781684246 0.529172019495695 0.07580106098317141 0.626226408696523 -0.9315374719622285 -0.88445280970106 -0.7469889221011603 -0.8073893106351082 -0.7824474507532919 0.2012956736769156 0.7479431126727649 -0.9898007331109224 0.573426471019546 -0.9806566333953914 -0.20931573425223982 -0.5793454035519345 -0.700276631930401 -0.33933356346844334 -0.5443715975143464 0.09095314933691467 -0.14275388686424795 -0.7120596493693514 -0.1414819224199757 0.5155603006966718 -0.026894369475273905 0.8642415001391426 -0.946290437800061 0.5101777589623324 0.5834102531182903 0.775624227815169 0.5339346726230851 -0.5289667836341283 0.4296543441157834 0.7477019803485891 0.6109000369995787 0.9505618557366455 -0.059328275450265755 -0.3708094482209885 0.4422998120778985 0.04856424239990753 0.6114872229324857 0.71166066854912 0.25860724007614944 0.3942452595584811 0.4325766834089666 0.6017374954639214 -0.2922718357173284 0.2743291554756797 0.7907252468283559 -0.868047429963112 -0.8240698583556805 -0.5409530590374132 0.1967254656181916 -0.5340973351667406 -0.7599971841713336 0.27155522771156915 -0.1092804607306821 0.9459197255392693 0.6912147132033468 0.027920045091247347 0.105293675099563 0.1743448870450448 -0.8258218456246742 -0.12783681828340066 0.1487728065788969 -0.3142298064217979 -0.2527707087268678 -0.5608506269160762 0.05829311499467016 -0.7697905411023014 0.3366097355207842 -0.06052617389162407 0.7537414407287844 0.5263010969327102 -0.18810134027433412 0.662987252299448 0.04965793956079745 -0.35403068863478193 -0.6044765487338117 0.9357416905211104 0.1513830644047216 -0.5782622587996533 0.9211994591320853 -0.18794203271040755 0.8487901844887829 -0.2190640423468555 -0.25524946751138433 +64 45 0.17091198940269803 -0.7348793189523513 -0.07622906183490441 -0.493644045401628 -0.05470318664728668 0.41742017965828615 0.1017579074623185 0.9818996020287198 0.9470552119941327 0.6607868941842259 0.18162351998230708 0.7945299116222102 -0.6516532190632336 -0.12128160077499195 -0.46420646953185263 0.4320402316649743 0.6115729193349384 -0.6647059414749703 -0.09261011708146905 -0.6782138928605079 -0.9710134609996748 0.026812273549586596 0.7558210585600402 0.2793968922512964 -0.8815566791487168 0.6114851787969988 -0.5301785220431119 -0.5276197395139295 -0.6665279782501081 0.6750682774867616 -0.07781807586647771 0.19911529934429084 -0.7370944228437861 -0.3959245770672921 0.3147033323211941 -0.7728702425730452 0.44750323195674513 -0.871063519058662 0.18690627951725292 -0.058115373006732085 -0.5783496215295101 0.6052186592308981 -0.5210870019099945 -0.011446732477864874 -0.6981544595315059 -0.721141001114278 0.4947458286382258 -0.9365782319599352 0.9801186706181502 -0.7778242486427582 -0.81783329611156 -0.9933465360490392 0.8880152912796049 0.4362445281229268 0.28497949792181543 0.32929840501558916 0.5302944234861595 0.8117286918699294 0.5359638864216358 -0.7194246496609293 0.1345142973712845 0.11293277029677218 0.42492678373347736 0.4171483085775609 -0.2563101111765522 0.013457176057315445 0.33624622078115474 -0.06818372903335157 -0.7175623482393001 0.09803304246809197 0.5565578035272933 -0.7501778343883831 0.7386570460825599 -0.5048126184898345 -0.26661111774304946 0.7647956074769553 -0.1522236545787623 -0.054861988258650296 -0.9489729815857075 -0.009054722431000917 -0.05688650250898308 0.3628055502987293 -0.7463815734572954 0.4775922700263475 0.6736196224180346 0.2701411729790075 -0.28283267767790554 0.6664381606133558 -0.13157282215956356 0.43841340146832786 -0.21177422607042606 0.47443073893812393 -0.6035218902345745 -0.664704631823333 0.693938283163108 0.042261888120746605 +64 63 -0.9765064948116038 -0.9120207222140913 0.08937883332320018 0.15590573429434063 -0.8813874612924044 0.22285366156954556 0.8948104397365064 0.1554287112977566 0.17128721587360496 0.9296129113003033 -0.744936564951713 0.8983681441334666 -0.9242137656153786 -0.2859177162638389 0.14231425623185334 0.15835059723951406 -0.2932905152237528 0.02453879965197414 -0.5949168335762909 0.5811913295687636 -0.13368545126622977 0.9901209506071249 -0.5050208458074905 -0.8659459956600846 -0.734103681999879 -0.10615015428901531 -0.6875665242896385 0.30335137420338665 0.49654926969724333 -0.030692061990274633 0.806585159869613 0.9282266814365341 -0.5669411093557488 -0.7735103539655617 0.9746988067421425 0.7229658205820746 -0.6283666810603645 -0.8224445620444849 0.17145008999447464 -0.8303302045421601 0.8962575908467991 -0.39307483273533306 -0.4032770629783935 0.9886193397946632 -0.7349683211119473 0.5293281164322203 0.8249563841992189 -0.7199744025122148 0.4368884450210049 -0.30455902737173224 -0.9925323005638196 -0.07675309537513852 0.4022911037447574 -0.7272132812944778 0.41571398517646974 0.4597026348233395 -0.8833491941327047 0.7011187097043823 0.6981574959211567 -0.9385564367462103 0.2993268604996995 0.04756998099395626 0.35956126944211864 -0.21535477673146564 0.3164198519975703 0.4519407989649675 0.6150263461937537 0.8649386418501341 0.40441360530220294 0.4112941496334712 -0.3210203929041844 -0.26363112377371456 -0.5495225505649188 0.3277813259284952 -0.41247719918270453 -0.9295282847716335 0.2679528752896667 0.8515238301240977 0.7878652701381648 0.20074445913111094 0.14015113499627851 -0.31638015835427313 -0.5369583079611595 -0.3945437935588987 0.33276375938290714 0.5756062048814155 -0.675462258062749 0.8450444144625648 0.5397378160340625 0.8037392190636701 -0.7051544811427468 0.6434086387194504 0.0319825130065039 -0.2674494091921855 0.49843436587293133 0.7789099203926555 +64 64 4.348567577019314 5.834711928224639 4.204585231282396 4.321368221397988 4.5668770521891755 4.876778447475452 4.606412167034749 3.9966297184909303 4.628037455929196 5.015803540675683 3.3208580153254648 4.6017143066492405 5.365862303198375 3.726962086762545 4.831072799964829 3.913824818200058 5.348646859884563 4.667356336327508 4.451633191939105 4.575953675664624 5.423632201150321 4.035855316641778 4.594259590091516 3.8222554616096693 4.4944738039506635 5.3545838394582566 4.095790908387886 3.4167615338999413 6.0654934394382884 2.8755784679554646 4.410154082981536 4.265728990381677 5.721707875853641 3.4766211726545526 4.528317057091629 4.994693774418895 5.191049934645262 6.18540842108598 4.667440384111092 4.445745239188389 4.672397344555815 4.182687351152476 4.6995260792896225 4.631652441880476 4.1503606457230795 4.375489073766305 4.145915642731662 5.231545965505495 4.538813553580452 5.109134561584887 5.645649483433369 3.353509614669653 4.9641353950928035 5.452009884183904 4.739400595517619 3.0138487534822453 5.534791892999035 5.487176314535855 4.817500117351791 5.5077874362394175 3.9620170083940587 2.7349612037355726 4.611835746364276 5.312287479613962 3.702359591989792 2.399145914200398 3.7138370814970934 3.5915942977905226 4.380187929219981 4.100021998397192 3.2637791530749194 4.931297381715149 4.02851707800224 3.166151994833719 3.704752016620483 4.153453989348782 4.260499484990037 3.583714377017917 5.21546048747947 2.3833242084955346 2.575031294977628 5.537135593360377 4.359568010215248 3.3693309231003696 4.149578786262585 3.7640427972443637 5.358962210951503 4.524649595198376 4.121320967492684 4.144216000812044 5.714025856257767 4.512248405711278 3.2564860665297832 4.065944672160258 5.18030496513345 4.1687095352334955 +64 65 0.5423082699351276 0.19014042936168973 -0.39470872150008685 -0.6846597946526325 -0.1197099689433827 -0.6409295198449265 -0.21286111216483983 -0.04163285707358333 0.5562381582277434 0.005720703252049875 -0.2045708434391993 0.8527188662441367 0.4548406341657443 0.2591194685902527 0.8369889464681242 -0.08444465521281774 -0.2746384491678191 0.19183631167812654 -0.589653177278346 -0.3221801778593334 -0.4535080479227547 0.12923051628063975 0.04136169726214001 0.6232711783622378 -0.05210053361249978 -0.42161383252239903 -0.6049728666991965 0.17391229573046707 -0.898559337995442 -0.028418662811857898 0.1716744986981531 0.8622628467297977 0.9107850779126252 -0.8329372126214882 -0.09884938379096764 0.9815294439954361 0.976485107337504 -0.5853658804754576 -0.23387604328462208 0.16249181044911998 0.8169278700966685 0.24585182515682047 0.6354987380740242 0.38647885351357036 -0.0241277666360995 -0.1586022811347516 -0.7676552794070091 -0.3576435915771836 0.6081273230352837 0.9131095913936595 0.23570517244812605 0.9005615024549196 -0.457141320208714 0.6767921680320068 0.9458265345652133 0.9037782271417405 -0.8821106594601265 0.19713404319921635 -0.3952203921922146 -0.2840179934324045 0.7709683308025304 -0.7074138837522495 0.39766694805104974 0.5520176301806652 -0.09075888841764601 -0.25005754361571 -0.0039020232131918853 -0.19027237669012442 0.8647091896682455 0.7128432461933778 -0.6096844840044342 -0.5289736230578108 0.8116975049009532 -0.05963965306467656 -0.6113162337298956 0.0695131452476343 -0.3900391345861456 -0.8058501238166556 -0.7444884230686091 0.13426019558384406 0.3668412855524812 -0.7665406591252193 -0.5483880227213009 -0.06805502364879867 -0.7093488229974574 -0.35266931911033916 0.9851308818994233 -0.5102792922459605 -0.925173053384005 0.329187249031514 0.8212197512145643 0.7294576249354474 -0.7640449866941974 -0.18738100701437288 -0.9439912519923432 -0.7480535357765925 +64 83 0.5913029070877609 -0.618037867096006 0.17532528091555455 -0.759533194422817 -0.585035191151146 0.5369243910555208 -0.9194472740503623 -0.31747605683503366 0.01123902475795413 -0.2565392222059988 0.0458949008338847 -0.27742018100660437 -0.3136402553064146 -0.1270073097763904 0.8244767806293445 -0.7090263300255513 0.7144647689536741 0.5012768009597268 -0.8573243517142455 0.17348212020387832 0.5300365952800579 0.14845068060532274 -0.5339044918111706 -0.8862584568896081 -0.0169359089692962 0.29196803258436765 0.5862074946846734 -0.24925604670959456 0.7360135985274128 0.784489064169372 0.3679902952050975 -0.9626976424236255 -0.4799354678646275 -0.47203511544821697 -0.874937294702649 0.4196718115198643 0.7291221569906958 0.8524054191951675 0.1983912189943564 0.012064207084036882 -0.043341522867528015 0.4313231197125773 -0.28802212466954913 -0.9301828987103653 0.1460820656507582 0.6856990802522136 0.13512084807185976 0.9660641595188546 -0.0805759546991327 0.5584009766871618 0.9033127991710501 -0.26790084865988395 -0.614836535473807 0.8696517703806903 -0.5142473035939472 0.2635761523808169 -0.7369753200405051 -0.8936529166896245 0.27502514951807533 -0.516999734449626 0.47642388614097286 0.007372584176881247 -0.5369098927470934 -0.9206015327960753 0.3852381816182817 0.5454906084276003 0.3845966626971673 0.25840553446116643 -0.6459361588180796 -0.6060194301167254 -0.17628443454536225 -0.24476308648556944 -0.4745074770112354 -0.4155261875744023 -0.6637029242687364 -0.7004371492207204 -0.20200463938908553 0.1174941875305735 -0.6772154093325817 -0.9699601768328565 -0.2316314553529415 -0.9478282890565923 -0.21062742991197458 0.16097398167946442 -0.3287161154713083 0.7543299725369934 -0.9406940683471436 -0.6012492946678749 -0.2925613827244671 0.4385928671518835 0.6937404834308423 -0.5162631798154842 -0.348793789553542 -0.3084512226570981 -0.40741407021443043 0.008445179146792547 +64 84 0.3500844302465289 0.32377288252757164 0.3948343016629856 -0.7013163465840426 0.4077980855440839 -0.9855101789566387 -0.7863489408909983 0.2683571812966703 -0.3922816637857116 -0.5930056153055199 -0.524660800533153 0.9804672178252363 0.8937141606015051 -0.9375436620049171 0.026297895334420396 -0.4186092846465215 -0.8678127092742152 0.3666909451185567 -0.7361466541284987 -0.7806523517692405 -0.5007604964634123 0.5116226181755286 -0.30954866840679984 0.11593015458661471 -0.6265221790664832 0.9719682791156428 0.43644178355339047 -0.9213899707090161 0.9929980490016808 -0.5782998206586178 -0.606370174913395 0.17563515426316423 -0.9592104273624473 0.02673888615136466 0.5364632330505525 -0.5125369773863371 -0.7622234115263027 0.16768255499456974 0.8156902348184261 -0.8968116296436881 -0.7224792709755503 0.7978292636439359 -0.6487768412128052 0.6697684649989444 0.21438663085456255 0.030089793195618775 0.20291088957529602 0.5516098456421625 0.8337068346177954 0.35903925834354333 -0.7163655057395013 0.14263590790231584 0.9585226413416801 -0.27164952638116135 0.18327501860125528 -0.07555694780317568 0.9121220334655342 0.5915605973917983 0.684271275578662 -0.014240700713951782 0.705862911085438 -0.013629176047314617 0.874074404328729 -0.8178150508125435 -0.5872573855057786 0.083989857123554 0.19769971419732846 -0.24153816699860808 0.49306984687228406 -0.1683327982339644 -0.7256895489669797 -0.398643049204334 -0.589746794611336 0.16172335643981817 0.4269336324374575 -0.9077073064036463 0.2910117115365398 -0.6849015116799295 -0.08898921830749273 0.39363465116324026 0.13693445649429337 0.29562322443098843 0.5441467256982186 0.3493340321148075 0.3058181017398973 -0.7793721081691176 -0.5166988440855067 -0.004487336010226661 0.30851006766722766 -0.03790766234957266 -0.82440815749657 -0.221378332457701 0.019310028397780066 -0.3664743008150919 0.8199287355374993 0.7853503710588474 +64 85 -0.6088922581877141 0.5989626152859617 0.8532210773298381 -0.17329799286395287 0.8058020745334373 -0.6320626418431545 -0.11440542083844729 -0.03639069163137543 -0.3688876751810817 0.31003166625840906 -0.6400323642920749 0.4870538281153567 0.7761167321772824 0.37816103925205957 -0.3419837446349636 0.543997215921957 -0.5668816667353793 -0.8963337182056836 0.0945776707988355 0.7786463535306709 -0.759302834915325 -0.06529087819378288 -0.7996432029348464 -0.6920845769826021 0.7436349347079876 -0.8333998357583747 0.16837679752671142 -0.29840874556460606 -0.745911603083963 -0.05319041633235444 0.18253919153116205 -0.21566200212977304 -0.49332914204668343 -0.30955139634410433 -0.26753570529010196 0.1879653846981837 -0.7725742539957461 -0.9927240050016761 -0.47637436055558346 -0.9010278565575693 -0.5573194361385274 -0.9725634105606051 0.5292692217912676 0.9722325551539774 -0.526629541226743 0.891824887548001 -0.04254982107677008 -0.2087356529359854 -0.3396898632383807 0.29291645422193757 0.38117855753622853 0.18907228876026516 0.7732532377085017 -0.5856431050668867 -0.8034888226365464 0.08271517941217787 0.49388847516974943 0.41855396661585 -0.20374586591350008 -0.38715948602642825 -0.6616559532510053 0.25342517722622104 0.06648145430293351 -0.5205903895424 0.5291442533317403 0.181146448700102 -0.10108570296959618 0.6851746006849744 0.9368705901399885 -0.2074794463844607 -0.37793782472191917 0.9250862451624169 0.17837599593499887 -0.5146221953880175 0.6192339548591304 0.185922772787237 -0.5126986354923466 0.2308114238504031 0.8593924281220997 0.09960553420890239 -0.4144261242948435 -0.7884549514171133 0.7122723284235375 0.9633612514926955 0.3233605499515453 0.6802684793416689 -0.7640557566413153 0.12480026699886726 0.5710681992820061 0.5789904029511856 -0.3230912921054392 -0.06689355765115068 -0.4984516818058211 0.6101763350889675 -0.9519341434496926 -0.96824284189632 +65 44 0.10183646721421313 -0.5092580549171954 0.03891571412939676 -0.28992763696915924 0.12593397808753037 -0.3317498066604656 -0.9759887446044326 -0.8619800042608121 0.22010196637602997 0.02503402023054213 -0.5382383966093114 -0.6810379817468595 -0.9570363550955105 0.15293135215969111 0.16314511117874364 -0.43834177230166516 -0.44705020423102626 -0.555618470295675 0.9980773480642875 0.16234114436548408 -0.20728955279442562 -0.40630041523146954 0.5829038272523663 0.4589743858796649 -0.36578952766551254 0.19159960179915703 0.3963927426334688 -0.9398252217339218 0.43496871792008784 0.9812056747992695 -0.4192677100359108 -0.4435703908124775 0.7077510538264156 0.4258644806793954 -0.17640380352515428 -0.4784876134447933 0.744114606010772 -0.5309195221732721 0.07649797038380646 0.588818431893877 0.8678672408805157 -0.9349861557907235 0.49255398202460876 0.589677582435383 0.139286271926921 -0.5583772281466641 0.11574581007446816 0.41274104595573835 -0.5964682821376874 0.09006535546580818 -0.533904209295522 0.1490377415960915 -0.4161248685329004 -0.13112443581614186 0.13456524025128647 0.9923684313891918 0.7806512203882485 0.14250185368271717 -0.7742166929399092 0.24241200570644095 0.7966514590893985 0.3445821180003932 0.8485584869395433 0.06310050687395874 -0.3766448778581877 -0.5559696323467143 0.5784446604826985 -0.8893987269443668 0.06440520937539729 0.700117845297771 -0.4236483459188136 0.5886778809369071 0.35591638212528487 -0.39215699646607316 0.57223068473532 -0.9726884337341173 -0.9445799806735817 0.582657877396499 0.7004216570114692 -0.8648958692293411 -0.003943832266964931 0.7352969613233953 -0.30903221407017867 0.702653511614229 0.823507537850293 0.8912856908442963 -0.4081269879769691 -0.8907579902777172 0.1752427457689063 -0.15318746444558973 0.4294566008424301 0.3239330496766035 -0.4491569419042485 -0.24462020022396835 0.7508061847141803 -0.8627467787427301 +65 45 0.6639201652414333 -0.6264376006255397 -0.9804530177892401 -0.3299833462637123 -0.9585356164648693 -0.6792511261226035 -0.6117519182505684 -0.2534918277101408 0.43870672145780243 -0.7991619700006023 0.6883637314748601 -0.004284961811834576 0.5608764660115431 -0.7282094555781178 -0.5840484783617441 0.4041579141443272 -0.9631895806949673 0.8882864014935747 0.16688828093979335 0.3273353409749842 -0.46129467090779386 -0.16467299499180932 0.21265814222351498 -0.5732671120807245 0.6060474473732154 -0.8234560875891854 -0.5000460545621703 0.7814460526058855 -0.655758518214218 0.9875347663697123 0.90843003048325 0.5804963484393106 -0.5324084304803383 -0.5678595621277265 0.13685331922232358 -0.48338264741762704 0.6994424226149052 -0.8291853652889192 0.04781245108088372 0.6108289131844304 -0.264752883816298 -0.21363164084338204 -0.3174023368410208 0.4912211330005227 -0.8055963186804662 -0.35946473415806945 0.7074010065500291 -0.6680462989707678 -0.05118389100161447 0.16308754605964837 0.8640466615056908 0.2550148701012076 0.5022919389826737 -0.5183549693546179 0.8767497002008722 0.5046673093771443 0.8978840783880537 -0.6799209124751524 0.9651567493616455 0.8741032263390467 0.6444648098160963 0.838353181184252 -0.6758163366365504 -0.41324733040870587 -0.7306170749496212 0.0348385466452894 0.8069311291284849 0.9499268355835682 0.8572153530989937 -0.8278716305912586 -0.7480674397888103 0.5250278390593528 0.9052017753337349 0.9890508546745018 0.3576974757359219 0.14282150884076206 0.05964901407735268 0.657860907745025 -0.06040284255138584 0.4328600655473436 0.8542563727339487 -0.8814846922809512 -0.6732658882660905 -0.8568212296646587 -0.8655954163286916 -0.6141399668676122 0.4373636253191271 -0.9862825001497562 0.5395235503179454 -0.9274160820666815 0.5770766419883582 0.15938517522911821 -0.7493029212520057 0.8078848797972116 -0.7189905546811795 -0.0281127885477237 +65 46 -0.2450651734186271 -0.24419871867713794 -0.6049911629036817 -0.7485438503604347 -0.5974424371745533 0.6089071936792572 0.32382814586307895 0.36065158216671245 -0.01175730996307589 0.08164835430947393 0.49457999428313126 -0.9473592840660983 -0.315361552698294 -0.426009785091259 -0.3579241641166573 0.10909838958253526 0.03224768583498694 0.0009114255707152186 -0.27895901605260565 -0.7191656788495138 0.9132359766486113 0.3450043848661757 -0.9774583461088813 0.45340201679034964 -0.5253776791651037 0.24854104098444707 0.25470717324723857 0.3819185921438282 -0.5451446730258012 0.7176485435338349 -0.5125284134645751 0.6154441354960609 0.503049062399535 -0.6044001542987998 0.49495213088437606 -0.7312679671321642 -0.9159831091804198 0.8002241679253468 -0.4093914353574952 -0.3969336761407387 -0.5746867615277651 -0.5774371873653876 -0.644720854542572 0.5032376543812735 -0.9293791810106755 0.6484331785885304 0.7989868428526068 -0.2884313687453124 0.5427499932748108 0.16036655244044673 -0.761905531905505 -0.4801727281559449 -0.6832752932338662 0.9731464888370978 0.06756457113868919 -0.702730806603463 0.5312273079721055 -0.948956113562972 0.7719116792131406 0.28256232727878894 0.5540680711693884 -0.073902915690093 0.2943150768657228 0.7696077659847294 0.019697883271859062 0.713823645174738 -0.14110081301696065 -0.7950554360334616 -0.32442028032727377 -0.8648283636467144 0.6631950664539614 -0.9436517743398574 -0.2144615524019795 0.805648931734144 -0.42036301546488564 -0.057382518344543554 -0.954995273406041 -0.1349128983063257 -0.6951703862438279 0.864450833150362 0.5784451796853058 -0.27260053954871766 -0.6328751728890702 -0.935974734196495 -0.238302511244596 -0.3423948795474159 -0.3513605885898401 0.39812022212054 -0.9866377463263325 -0.3175391999639394 0.855403560764687 -0.37899063909747976 -0.5663816404751161 0.9156480234209146 0.8463149935299483 0.4367591404802764 +65 64 0.5423082699351276 0.19014042936168973 -0.39470872150008685 -0.6846597946526325 -0.1197099689433827 -0.6409295198449265 -0.21286111216483983 -0.04163285707358333 0.5562381582277434 0.005720703252049875 -0.2045708434391993 0.8527188662441367 0.4548406341657443 0.2591194685902527 0.8369889464681242 -0.08444465521281774 -0.2746384491678191 0.19183631167812654 -0.589653177278346 -0.3221801778593334 -0.4535080479227547 0.12923051628063975 0.04136169726214001 0.6232711783622378 -0.05210053361249978 -0.42161383252239903 -0.6049728666991965 0.17391229573046707 -0.898559337995442 -0.028418662811857898 0.1716744986981531 0.8622628467297977 0.9107850779126252 -0.8329372126214882 -0.09884938379096764 0.9815294439954361 0.976485107337504 -0.5853658804754576 -0.23387604328462208 0.16249181044911998 0.8169278700966685 0.24585182515682047 0.6354987380740242 0.38647885351357036 -0.0241277666360995 -0.1586022811347516 -0.7676552794070091 -0.3576435915771836 0.6081273230352837 0.9131095913936595 0.23570517244812605 0.9005615024549196 -0.457141320208714 0.6767921680320068 0.9458265345652133 0.9037782271417405 -0.8821106594601265 0.19713404319921635 -0.3952203921922146 -0.2840179934324045 0.7709683308025304 -0.7074138837522495 0.39766694805104974 0.5520176301806652 -0.09075888841764601 -0.25005754361571 -0.0039020232131918853 -0.19027237669012442 0.8647091896682455 0.7128432461933778 -0.6096844840044342 -0.5289736230578108 0.8116975049009532 -0.05963965306467656 -0.6113162337298956 0.0695131452476343 -0.3900391345861456 -0.8058501238166556 -0.7444884230686091 0.13426019558384406 0.3668412855524812 -0.7665406591252193 -0.5483880227213009 -0.06805502364879867 -0.7093488229974574 -0.35266931911033916 0.9851308818994233 -0.5102792922459605 -0.925173053384005 0.329187249031514 0.8212197512145643 0.7294576249354474 -0.7640449866941974 -0.18738100701437288 -0.9439912519923432 -0.7480535357765925 +65 65 4.238375114007288 4.660616614744013 3.802036875173501 5.731433789600368 3.9016015404356836 5.092234272193294 3.3922891628509957 3.928237736174392 2.680943335745985 3.719182424827845 3.9641865955867663 4.1143749907229115 5.546140769824757 5.058674225967252 4.160050902789843 3.1110003494367584 4.447284489655516 5.530823577540198 4.730206148044478 4.2566569583062215 5.125218737560957 3.7878692057317376 3.605383994741928 4.95130339047868 3.462771815306666 4.525477698661749 4.4233241362838545 4.119640782005854 5.441169183420738 4.917451474608501 4.327455287380566 4.363398245900082 6.166063933905591 4.5676622846753405 3.0564684598362906 3.875636172626483 5.820897488163389 4.7252770716799795 2.9615189680366636 4.361837661455163 5.0150309508177475 4.237100755126431 4.639263885576967 3.8784678691361463 4.529409558990065 5.0237689495507105 5.467721371614183 5.421828412366189 3.949096089157798 4.375607114465868 4.973610935471288 3.834971106806469 3.5752876018173465 4.7259940652674866 4.532265664304992 5.654387547410389 6.165459896792731 3.90919858569686 5.059233255929312 4.587039391542663 5.164093249919008 5.56368567454339 3.6658878754460327 4.136078423488518 4.311910910907772 3.7182360810294517 4.604228930467707 4.566976270903305 3.9768084390822147 6.709512025395062 3.9846855143605895 5.267907907975193 4.4866891472222665 5.640814565784131 3.760498601344202 2.3165279042829234 5.907451416897771 4.991470657253855 5.097497552588127 4.321690490089022 5.088006405848212 5.433853230837221 4.261856104369282 4.154661168317261 4.3950588065072225 4.212970657708059 5.237349335158234 4.3112676811831845 5.896623133321251 4.677999878429675 5.85862290559914 3.7714371246864165 5.014357281158649 4.897642522329475 5.401728528100343 3.4445230679328604 +65 66 0.20701019680822408 0.05274610132883928 0.09414666885270462 -0.8531448296618669 0.4005960442373271 0.4752116042064296 -0.07012685026954957 -0.31070524283242795 -0.3198421259375841 -0.28275035303465024 -0.8595399931313354 0.02329732888392866 -0.1517693751475624 -0.8738784509488693 -0.6263501608676931 -0.3062444442056782 0.771813219577538 0.9765936472915573 0.48781174977632946 -0.45516711007776167 -0.8031062946163217 -0.9628811704070199 0.08534398594628434 0.8239642559247788 -0.9103288437658981 -0.45373261703326695 -0.5924914429640453 0.10360555110295633 0.6338322708077933 -0.1779706525230711 -0.8186047528738287 -0.7606618005437389 -0.9561986573398189 0.3988208141605578 -0.19352254443347272 -0.4344441414355926 0.9404811977377541 -0.037688742151748666 -0.046793115146767095 0.03543577309307233 0.3250629701078507 0.6722891181499806 -0.7279139192364128 0.311771025658488 0.6669882923931096 0.813277462349435 -0.4304988997124264 -0.9462152284132566 -0.6667166493928125 0.9835258967826019 -0.6716009400849736 -0.05718933583417707 0.23933174852262717 -0.1857300072923096 -0.3674424654209749 -0.3567777650698174 -0.847488103598004 -0.3875525343794748 -0.01842195959669346 0.6699094662942204 -0.8240577317922877 -0.9764081181312618 0.10125571284153079 0.9992324262447851 0.8888138635657628 0.11737572136713137 -0.6871505375312283 -0.36976308299711813 -0.5103339951982984 -0.9772090129027795 0.15126875417357977 -0.5031062655483247 0.4942524657070877 0.5311575572483391 0.03939404500460508 -0.09951870131161167 -0.8171259330075844 -0.8443153892381452 -0.8960950130624579 0.3169068315307566 0.718180066055889 -0.1633982157257503 -0.48001294791936866 0.11874703697315092 -0.2612701203782051 -0.8553216431018329 -0.6060553394756154 0.10008521236768053 -0.130058885566122 0.5611344972805772 -0.38384542866454163 0.059545658319245076 -0.2869330042030185 -0.8660602449184465 -0.9033946518968874 -0.3050986676347964 +65 84 0.8580434113500477 0.7506068602651035 -0.3565132268137474 0.3441945264750246 0.479154583311743 0.548114207378122 0.021980627729350832 -0.7864034884942264 -0.032101289087319795 -0.5974666573976104 0.1079811697505253 -0.35679002893585876 0.8719360852964124 -0.413699001337412 -0.459675656468326 0.5800982217712389 0.28680893839070043 0.9647464453224219 0.5058264201179308 0.9545869213131768 -0.7387062706320722 -0.5362428608798604 0.614091772902225 0.2713157445533594 0.018621211130025017 0.7131860136951216 -0.9913880138262663 -0.41061467112764527 0.2775704090847484 0.7886138239853973 0.7198868025357819 0.12366769532325272 0.7775486777083329 0.4600201947234781 0.2363996712174643 -0.003563112624284104 0.6720314966325183 0.6532631755018019 -0.7586099902479162 -0.7034860803987257 -0.5836155808143977 0.254862139369328 -0.46583423517809597 -0.4910780533378192 -0.14647843368768898 -0.8743669649892287 -0.28701260507178716 0.4931954367807101 -0.5722855810587368 0.5570551348145427 -0.5582057702619143 0.45605389693355614 -0.22968532698203603 0.8400345203764099 -0.6782159943182637 0.6408761501843696 -0.8756547845675902 -0.32522544287899 -0.9250585834776215 -0.8627238279041203 0.12678027852601192 -0.9550580311485359 -0.13896870669832673 0.364198025525696 0.21310952059773203 0.42849220794084086 0.5201127976936362 -0.10143582399424345 0.7808146365896393 -0.6311557804813377 0.20233673254585227 -0.6103999197104029 -0.5882058534574071 0.8353296213613577 0.4765918073111266 -0.2812962346205463 0.9756149623504986 -0.20770364104205408 -0.19165968879937956 -0.6043091656263644 -0.41552874276591 -0.8224877786216531 -0.17488888240488687 -0.506720328893749 0.8035215219974614 -0.6218025355293235 -0.4945663244500147 -0.42801838275521176 0.8515256828653655 -0.9647793490663157 0.7649434436410827 -0.500700399106768 -0.3325145413149273 0.5593376223648503 0.08066746108421508 -0.013804776716848322 +65 85 0.8525980290582225 0.4385861116924392 0.13591384829420683 -0.8969753971658805 -0.22292563243969732 0.9294802455059499 0.2686547591331361 -0.04729872699525539 -0.8768594060311621 -0.813923224613148 0.21039434861247375 0.26343938695858293 -0.9026077251943876 0.7762918705421378 -0.10306827822038289 -0.6040762562726865 -0.9376714746098456 -0.8887848447063826 -0.35246393721424774 -0.43173653825562863 0.0390162873986597 -0.6295936884929334 0.5431033018053593 -0.8776285765040852 -0.07676404097170186 0.11699662709925329 -0.08489937901306632 -0.9484250466588857 0.6470735070738576 -0.6568893348349807 -0.3805617714423528 -0.4951845756495017 0.4003609895830318 -0.29860641773202 0.18987366949644469 0.22960438619885726 0.3493484083854135 -0.9294956526741158 -0.22482671230666806 0.8034140769412419 0.16099311135294547 0.2716924895529158 -0.6742222943965532 0.05897893554925826 0.40606500505525767 0.1388016163832193 0.9194091156212769 -0.4784567519609477 0.34127338148708186 0.2905338006749425 -0.5181500506382435 0.6764126605902179 -0.20576007433092602 -0.1556334701127624 0.27894985645283144 -0.2778464892846808 0.8811454319263154 0.35869477313008624 0.3026445696611775 -0.8226174493673455 0.5498684666903921 -0.44649818693823606 0.5260475407384202 -0.7354997385038244 -0.6976937058981083 -0.736737329922291 0.23307895978871418 -0.02968803676826326 0.22926616694485014 -0.898778168721519 -0.7361788989041937 0.7013532434606857 0.09691554618066633 -0.3597573552580713 0.08016470809731557 0.1695245805838277 0.7737979354814155 0.9896290404849053 0.5840140416660411 -0.16408802251643206 0.49230430615364473 0.5003200639561018 0.9116086442395255 0.3728754260159919 0.49651890991204684 -0.032807791843047385 -0.5889200577627876 -0.28117737248401586 -0.9542766857064056 0.48201856666167964 -0.634588592661006 0.4413745124292685 0.5977126535732542 0.8306171563859703 0.3922146318206321 -0.5168377111256146 +65 86 -0.7302543465453222 0.8591034037630179 -0.9238590736417631 0.9609209911799732 -0.7612457025812227 0.8709925831165313 -0.8532681913202169 0.7578302529845515 -0.1350818772217668 0.22043290461567477 0.01312001768709159 -0.4172517407397984 0.9066754565275723 -0.752660975279708 0.2382379878166181 0.12101201644199899 0.06745478543658856 0.6704161473203814 -0.3974327694519728 0.16308752299342988 0.9070619695049977 -0.5213971732881117 0.3412166582206133 -0.41138663860807934 0.46637392506721875 0.7289822201484943 -0.23917380832610347 -0.15987021447575245 0.6047306119055251 0.3005711119126506 0.051834483035987367 0.08053413910856744 0.6718413699118395 -0.6193657553678464 0.5759015706499575 0.011407738507578147 0.14354095057718963 0.17998638831741265 0.8729737877751678 -0.4134265355289457 0.5102658503029924 0.20441566877713058 0.6305099000525436 0.6434935044289882 0.7998669443804802 0.5825630243669271 -0.9436598793942566 -0.9953689172411191 -0.042830299671060335 0.3150912931847083 -0.5373697965763247 0.28368143239690347 0.6511823090660178 -0.6252668144192688 -0.615350917116674 0.7769160209222079 0.0034691116450564774 -0.2842731681280537 -0.41102504295960474 -0.46993436627851626 -0.020450353573614022 0.5681482472208543 -0.1347407660194182 -0.21431706233134196 -0.8303039107858836 0.1129561562891721 -0.6971429015488737 -0.7368005861908935 -0.2735576380428477 -0.1954897114670986 -0.375940535358833 -0.1419206026695019 -0.21952914570012338 -0.9695013680006548 0.4131063634676597 -0.43004430547354877 -0.12360994016679072 0.039643235030860646 0.3940194316114227 0.41779054184347864 0.8482619034845018 0.5650991108822554 0.22594856432453891 -0.5449239759674691 0.01354411160869029 0.2775143624511116 -0.751533927466904 0.7065540282928973 -0.4554317082772035 -0.25425223142778175 -0.4509511531707162 0.40588819332691384 -0.9825186678704565 -0.20189910256999477 -0.536128260757134 -0.04097873168256294 +66 45 0.1961708755464726 -0.6372952333268205 -0.1703592327951946 -0.11579851291190035 -0.4900238220609614 0.711761083116415 0.2567621716913653 0.9755556540155075 0.9021675365979345 0.4245059813448844 0.47047084905893843 -0.6235957367398048 -0.6965153198510194 -0.15090352651936123 0.8330309385423149 0.8179273136677283 0.8896629559701463 0.3458608722883547 0.38568397259835185 -0.751153706499831 -0.40364250406639246 -0.5088651822579466 0.21039025207498208 0.5702426973496897 -0.5799176452801931 0.6275147670449412 0.6129010068325296 0.4860940292134879 -0.20140604345385338 -0.4784854046879927 -0.9704830310043513 -0.05679898812010431 0.261551660036077 0.967439724420627 0.37079153542374743 -0.4320520240878649 -0.00017220936628326022 0.614658084572826 -0.04463018849066347 -0.7635069299185233 -0.4948892206823099 -0.3583768114613701 0.6191276333302524 0.6046048782747551 -0.40478241767190326 -0.00470609148760226 0.8243088269712109 0.02592262450670546 -0.4721558129993424 0.9976247333665376 -0.9302833239715309 0.44532002320193453 -0.6060142901822982 -0.7962581468836869 -0.0758828732147121 0.504699205530216 0.40859934850013446 0.18994701859786423 0.9778984198621965 0.9801691348660326 0.33805190291644793 0.4193454547451394 -0.8071427149696211 -0.1472441753771232 0.2532371668026865 -0.5076646332041554 0.6124850975940719 0.8846608480627589 -0.7126445605185787 0.0036439345034910975 -0.5389021943104562 -0.879428813319181 -0.909646801603422 -0.15604436101366992 -0.4711514777640413 -0.631169036378934 -0.8593382340252314 0.8745107637939884 -0.9343366071989248 -0.40592979357552017 0.47767874707670965 -0.6704246828170384 0.8953512605019307 0.37859217105077536 0.35964623927593875 -0.9478802826118131 0.0672985505236825 0.9757592093168737 0.16967713790093297 -0.6205823183705572 -0.6933202513250003 0.6104855387928172 -0.676033584457187 0.013945442659105689 0.30063344427514305 0.9706904749246985 +66 46 -0.3367021757649946 0.23520584521521437 0.20265095898863184 -0.3275936117134308 0.021590904896445107 0.1013506754440201 0.9941161648545478 0.3098066164192619 0.29882679077842744 -0.9734978952220374 0.1513627634394441 -0.034394916684827415 0.7816132166640155 -0.21161358334966263 -0.5551209937823529 0.33245703454633313 0.33220436489212357 -0.4835334856073832 -0.8903435709093857 -0.028903444855522764 -0.18967689207938232 0.07058941179485823 0.5098637104219148 -0.8278051009306335 -0.9381397342101641 -0.612607649093412 0.6919886238331936 -0.1836090182994583 0.39086173500606547 0.9284673044429088 -0.006113151554820284 0.16089539986662893 -0.9827629073540427 0.9530876306512583 -0.0081140272751421 -0.11276649467340993 -0.6287975155622734 0.9852917612438201 -0.43917506646887094 0.19078909760075957 0.08482429905436994 -0.13569541194621348 0.2588009087717589 -0.09984265403663084 0.40674092735068546 0.18416755823741204 0.8583091782336334 0.9891645427540328 0.7652040753341169 0.10538403055314949 -0.9049484101499272 -0.6797733973810094 0.8365575453289082 0.7151418832102692 0.00359979975004987 -0.585027317348757 0.10548074878218339 0.6910642381887588 -0.8991000569659844 -0.9057356772746226 -0.21214578009174256 0.8884540351764569 -0.6958169610343892 -0.3734148233177479 0.7592531644578118 -0.46437282852083994 -0.6199361485729697 -0.9978395878518773 0.7774196891817717 -0.6692043778957197 -0.11935907299946091 0.22364762026283835 0.09024016723755612 -0.6556561918100294 -0.1304453604284448 0.8179410563975122 0.8897409934286329 0.5547683519083695 0.8340094169865666 0.22936647768614904 -0.1320517330844635 0.8044554801802715 -0.23615154618455536 0.5649361125843662 0.5196146357812852 -0.394607132337391 -0.20725041074159734 -0.7440472780304996 0.3303752747159079 0.3630702910861132 -0.6175440107983501 -0.7394007585020719 0.6729414032648771 -0.9908912208282932 0.07721775066318814 -0.16327016465752497 +66 47 -0.1162574236040228 -0.964930607867583 -0.949972234027656 0.02290036278455454 0.9307986168605642 0.5014946925322155 -0.02103545085157177 -0.825647704700808 0.6924378962095252 0.1414404716926989 0.8247019751082003 -0.19874624364653148 0.6412832126426564 -0.7754263748552459 0.23897769556654058 -0.8887380953284565 0.6191847652291809 0.5615610851786621 -0.9323131863349565 0.018318040436392957 -0.339168689855853 0.7984532980522558 -0.1398948012732797 0.02543755888998711 -0.8529503646235728 0.6998429018701999 0.9306251013525699 0.24615767824628687 0.4391143403357898 0.7136071845951135 0.8432070611122713 0.6605423561843575 -0.8947112953398131 -0.03416823186551832 -0.29308964704964846 -0.5086547605241583 -0.7819943506693678 0.4218523090071722 -0.6895511396235583 0.9234654228381174 0.13559700195532254 -0.12722858933069103 -0.3741801388533983 -0.1075265710924258 0.9038212143341189 0.1953843707980778 -0.6262263770260383 0.42565866875485114 0.3924100876496164 0.6895887679552493 0.01593937311049687 -0.6994908609304527 -0.5655237540497717 -0.9472695042231118 0.061123165278105906 0.08272986507471303 0.733449083904522 -0.45696788511161146 -0.8775218982993112 0.3867116638570749 -0.15157824184438673 -0.5880832939751928 0.19479418132431903 0.7150700213722112 0.9239769805016049 0.6529991512269628 -0.5639520939325497 0.7179997938200235 0.30162986619903087 0.2824459609342269 -0.06911274071416051 0.7010080864064439 0.5014546122553241 -0.018575895401352405 -0.9381892578759259 -0.8205115099511178 0.5585777256059961 0.32267208292114247 -0.4162991360773187 0.3580789092802614 -0.5606394245512694 0.03599689259580363 0.30007525737613006 0.9520959955091179 0.7014643640495408 -0.4137338590777382 -0.9311823063277835 0.02371133241285195 -0.9223619232604361 0.6432157364268338 -0.23389123259977973 -0.28475616246347357 -0.2565554888603072 0.5195486404600289 0.8491331069664869 0.9732360493855561 +66 65 0.20701019680822408 0.05274610132883928 0.09414666885270462 -0.8531448296618669 0.4005960442373271 0.4752116042064296 -0.07012685026954957 -0.31070524283242795 -0.3198421259375841 -0.28275035303465024 -0.8595399931313354 0.02329732888392866 -0.1517693751475624 -0.8738784509488693 -0.6263501608676931 -0.3062444442056782 0.771813219577538 0.9765936472915573 0.48781174977632946 -0.45516711007776167 -0.8031062946163217 -0.9628811704070199 0.08534398594628434 0.8239642559247788 -0.9103288437658981 -0.45373261703326695 -0.5924914429640453 0.10360555110295633 0.6338322708077933 -0.1779706525230711 -0.8186047528738287 -0.7606618005437389 -0.9561986573398189 0.3988208141605578 -0.19352254443347272 -0.4344441414355926 0.9404811977377541 -0.037688742151748666 -0.046793115146767095 0.03543577309307233 0.3250629701078507 0.6722891181499806 -0.7279139192364128 0.311771025658488 0.6669882923931096 0.813277462349435 -0.4304988997124264 -0.9462152284132566 -0.6667166493928125 0.9835258967826019 -0.6716009400849736 -0.05718933583417707 0.23933174852262717 -0.1857300072923096 -0.3674424654209749 -0.3567777650698174 -0.847488103598004 -0.3875525343794748 -0.01842195959669346 0.6699094662942204 -0.8240577317922877 -0.9764081181312618 0.10125571284153079 0.9992324262447851 0.8888138635657628 0.11737572136713137 -0.6871505375312283 -0.36976308299711813 -0.5103339951982984 -0.9772090129027795 0.15126875417357977 -0.5031062655483247 0.4942524657070877 0.5311575572483391 0.03939404500460508 -0.09951870131161167 -0.8171259330075844 -0.8443153892381452 -0.8960950130624579 0.3169068315307566 0.718180066055889 -0.1633982157257503 -0.48001294791936866 0.11874703697315092 -0.2612701203782051 -0.8553216431018329 -0.6060553394756154 0.10008521236768053 -0.130058885566122 0.5611344972805772 -0.38384542866454163 0.059545658319245076 -0.2869330042030185 -0.8660602449184465 -0.9033946518968874 -0.3050986676347964 +66 66 3.1633336805795347 5.275360724784202 4.612943571224224 4.216917363043954 3.8612386704222246 4.646520339353243 3.7480457208180105 3.6382137774045877 4.3712555345198325 3.8287216701792257 4.413437014667658 3.180735489854162 3.913941892811142 4.752780354937405 4.518550817248888 4.059981152657444 5.948405259858843 4.641776789671447 5.912254850392628 4.677117950805355 4.777184316310963 4.483425411709112 2.6913458759226856 4.708849705389967 5.732082451238417 3.857228820536061 3.712349764473174 3.9825937562122267 5.556864805191596 4.187067425513075 5.33790927383576 4.202114095344286 6.109105966729938 4.758790853973627 3.778115636196143 3.5177108207753083 5.617986151439194 5.205508751293747 4.370131856803949 4.4845667359453385 3.4183406485506325 3.037611509425399 4.3067645613794285 3.373287035542949 5.201390624402572 3.591508588496273 5.63979575597601 4.528995204554227 4.270309029122442 5.728438818727805 5.155425002740632 4.3672843671519415 4.4284354589446995 4.7764758382674515 3.4064843811954977 3.7650213085043447 3.367449074755978 4.659312983835806 5.231859636479003 5.4567740106554465 3.4727846924050425 3.6507668659878716 3.514772350884363 4.181192673619371 4.939465250152283 4.641656565646823 4.744943858795556 5.105500792445772 3.6441674635871033 3.7603617431591614 3.4971562687005964 4.651134128223676 3.8979998486976615 4.270608667595743 3.5122592638881267 4.538277375582151 4.263528206675065 4.279380706342286 5.3756314608019755 4.320735339514784 3.645592100489825 4.12446830205181 3.8890251873780888 4.7647279104956075 3.8315698744815965 5.840569169863382 4.576564765051403 3.5192399992676133 4.557149117018401 4.374155609025759 4.690378299590773 5.03833495459108 3.93050634267864 5.18136658352158 4.282332422695061 5.006178527838941 +66 67 0.6659613599372796 -0.952740176816746 0.9809556365264478 0.373895607651477 0.3376504287380335 0.09487310701797225 0.47836008896464866 0.10727608035578484 -0.742373550258782 -0.2445495197242098 -0.1418414131276231 0.4430753423674243 0.09574357571581871 -0.6641028991284537 0.4308839244927041 -0.9903075943824757 -0.9082199071239554 0.059828438160477226 0.9759092132017011 -0.9453019377467968 0.6407533146070585 -0.42408219940127956 -0.14251821889958083 0.18353583723307265 0.8936997395563542 -0.19597003792507262 -0.09994586695728569 0.3538698383434733 0.8657696120238667 0.4690174414325772 0.014986747538861422 0.8165745841792487 -0.9635629049932686 -0.44651812644251465 0.7830976072605658 0.1926077602991405 -0.13862072359429845 -0.602362103511207 0.8741504894833811 -0.3400578965030623 -0.4287132680466934 0.11843326446684332 0.41325898888497736 -0.784434441261461 0.7323556325856388 0.5009478512046952 -0.8125677232786774 -0.1641566033710602 0.7059556243069227 -0.24482892161992642 -0.5945161311019476 -0.23276981210860703 -0.6602736583072069 -0.7195675321548396 -0.7293306239700057 -0.42510879594972595 -0.41873408924305733 0.669059775222665 -0.04573743140982245 0.3590328288105711 -0.28991394584030505 -0.08704069453112617 -0.5373092422087073 0.005740662475856251 -0.7114019292532421 0.6884575874577477 0.3789279672996111 -0.9117885830248389 0.3351726276465081 -0.24807839539481846 -0.23828654803635252 -0.5365351053274205 0.15457763394917157 -0.47282920973066633 -0.3331460803033137 0.13106373031410534 0.15021406034553264 0.944272096357059 0.008534269888402335 -0.41836774974265856 0.15765764506366264 -0.5212983663240585 -0.31738933358937427 0.75390919097664 0.6856982358751484 -0.8079501578860524 0.6313381704154046 0.7486311634911182 -0.909928603217554 -0.9112120108312893 0.3694052997649315 0.3300546349771529 0.24992357505421214 -0.12600877054207982 0.7379454706385464 0.4145969878460347 +66 85 0.5314287593874558 0.29746534287441695 0.903665361804032 -0.9317126599495922 0.7302038431391114 -0.5628952074426314 -0.8168321076322653 -0.2114822357272912 0.3830997913831491 -0.5021864875606237 0.7439835849439076 0.24045700947095283 0.6790687470177581 -0.2455516717374464 -0.7013630166479123 0.16714706060537 -0.22693694788649355 0.24470160333717983 0.9498200863621227 0.9324581715526321 0.9596500435016286 0.8098882256213642 0.42151005968469657 -0.8434028950887338 -0.3250145148784125 -0.3524214183623553 -0.1986444476539022 -0.41229199041173437 0.9036222448819369 0.2023438964435098 -0.9753579833204276 -0.6502950518692496 0.65180794302989 -0.3806000208512972 -0.009401673509273678 -0.6079854300440029 -0.8750648889605439 -0.7667174801890395 -0.6449034461332952 -0.07885343780372533 -0.5649144367868062 -0.8234343390971324 -0.4540206789735943 0.07189364624994754 0.7130063647371556 -0.4978874694020523 0.011148144322708387 0.3430936327392533 0.6547955708991138 0.6855337342976948 0.8132181886351031 0.6770218418382734 0.7358233934232228 -0.8919415059308027 -0.6837785436446824 -0.15541826908084144 -0.13110970907168817 0.8672151202435443 0.7776193269380698 -0.7052410122233019 -0.6996382771866476 -0.2536436330292946 -0.69768737585501 0.548044289022664 0.24612114786267592 0.01657030973755602 0.2940497267400155 0.084903858764249 -0.2570866741940594 0.3786194812198591 0.4159860486115474 -0.6469722996592395 0.3340440738461321 0.7143602847806312 -0.6533639320351652 -0.11027175221638785 -0.1159416569946079 -0.26733400703093757 -0.8097687970928955 -0.9491795540186176 -0.2643181710272884 -0.8962769213728385 0.14227393855577408 0.5949619000796007 0.07975990211933182 0.19797724128445315 -0.3930069084312442 -0.05659308434531085 -0.40642317074951473 0.5389152433070308 0.8728037064873664 -0.7713909227867126 -0.7557162277579146 -0.8122507238845382 0.09520542285818667 0.1942579463225662 +66 86 0.27727563963825674 0.6223728195180651 -0.23668438833069705 -0.5502744765279017 0.5551745454617738 -0.8066964477954326 0.8232475077042525 0.024248931341803726 0.11623819039877903 -0.2577962592657361 0.47508421328654316 0.3960301987215158 0.2987655450417195 -0.7954235878702609 0.26256600481660586 0.22136361370967594 0.736332063591659 -0.13064462309692138 -0.153793082373487 0.23554618136188754 -0.5479194430571204 0.4174791282482073 0.7423622229285929 0.7222910077899585 0.23437917896207772 -0.7234796845817215 -0.22770998910236906 0.5162553237328669 0.6883283967391489 0.08289104969220684 0.6321718827371585 -0.3756937239763283 -0.6398194497050314 -0.6330094171177956 0.6037658294937001 -0.011823161534198157 -0.6822810555282277 -0.9487492613248996 -0.6987224750711793 -0.8288850387512721 0.5018779556440958 -0.0802370324011552 0.6095200640389355 -0.6257439417338879 0.02240883491066925 -0.4883123334543389 -0.8848357172937935 -0.333772025357713 0.22983499747281555 -0.6272571460109866 -0.08199422217475472 -0.5991628115713483 0.4396139968059911 0.19558750630145605 -0.5642205449219051 -0.533678696135993 0.3877257714750628 0.1994248083507555 -0.518183482577091 0.38156129208877765 0.0045811347171857975 0.020893659107090734 -0.18969012521864825 -0.6302016668272172 -0.5955755119690149 -0.9047852490051276 -0.22602117206339445 -0.398872270946512 -0.2861950661602277 -0.31204525983603126 0.9362856805807138 -0.11184078097503924 0.18566881439919802 0.30848814727962304 0.5056164008571111 -0.8149398947334292 0.1840163340727463 -0.2404230772598579 -0.21028753189154759 -0.3373252021722586 -0.3595229241026905 0.2559427459566026 0.6005583200006943 -0.934316168431931 -0.007317913591104119 -0.7463915219148192 -0.6111343614498554 0.36594952348750676 0.7317616692192694 0.15511708221898624 -0.7793328649789457 -0.8314644074560325 -0.6871299280957661 0.5859589647672998 -0.15820747613684372 0.22786958564337256 +66 87 -0.3829807581915263 0.5767286286186517 -0.8669629024974812 0.7342361631068053 -0.3428981282200796 -0.6065363318690342 0.02998348259849548 0.08081510415203041 0.10860570525192648 0.7406130371035486 -0.05789204093498235 -0.23690471843372696 -0.002228260637167523 0.7338218976960484 0.6213035902378126 -0.1381394026212035 0.6664759906418625 0.8568951220576819 0.8051295134058767 -0.6894074953205305 -0.5769376939625472 0.24264107649527622 0.32431274328156867 -0.6790394881931594 -0.058049912654255964 -0.13257279280715428 -0.27014889978628687 -0.7700960557050469 -0.9973087622710244 -0.19610981459500376 -0.38517317019710107 -0.40542559617082286 0.5862420285134569 -0.13810591567817565 0.5579332175887393 0.3200056930498607 0.8525590640531238 -0.24289428249166445 -0.8222419816543514 -0.4249961905914048 -0.564448349228168 -0.5258236831001293 0.25560835672709725 -0.1618569310963882 -0.3610355930461997 0.8600244576851608 0.6249437280673997 -0.3255205838114448 0.056771758210201195 -0.8021472223932025 0.8145954635485233 0.11678443034104924 0.23673267203838466 0.1509679682655487 0.6176649988143099 0.8974587397705227 -0.13939378983883643 -0.9701516444323999 -0.4123374950820762 -0.9316317606883873 -0.08744457105813574 -0.3245472807049299 0.20528732664732385 0.02811300072416656 0.30467138642757696 0.5719442448278309 0.6472129550955825 -0.3584335746179488 0.01014169127625797 0.07060358513196618 -0.18058155398486586 0.2016257090090714 -0.6767518725371842 0.9736205173831665 0.3829466747628196 0.9667230020100077 -0.599520032280153 0.060057140050944424 -0.8307022499042536 -0.527422153341023 -0.17830092325881108 -0.4448775476802338 0.38708077690672393 -0.42281929898657356 0.6877004922771377 0.74550483177429 -0.9981700824258974 0.14533907221588693 0.11133840690004404 0.28386252318707217 0.08411025114638804 -0.7950772554538215 0.3097783794071831 0.8815280590934669 -0.6909738079705452 -0.9736519436709941 +67 46 -0.33890195466750317 0.24981165756231505 -0.28126268973587454 0.48482616539064916 -0.8257202003724187 -0.6292348925031312 -0.5461806367644189 -0.674875808313115 -0.856442042341413 0.11444657188844198 0.03191218751666969 0.5319790017193302 0.054137783680325846 -0.0574709006895604 -0.8537787300949342 -0.660309926652753 0.8121296278379244 -0.6334388931098094 -0.771068118898701 0.057087054425698947 -0.8117127051118047 0.4073234788819562 -0.34995249963496233 0.2267141307442655 -0.7327247107745944 0.3984313119264904 0.16020818116908275 -0.4233180952380544 -0.3572515336738502 0.518896201761297 -0.3117467874621018 -0.4956859110723242 -0.2409682544452283 0.3423572506083079 0.3509780286900872 -0.3135203741375896 0.1775110709748864 0.15634404976175542 0.21547959042645504 -0.31915225928439783 0.9149670824394434 0.918422340287173 -0.3783167485590022 0.5123630530552645 -0.2816219738600143 0.2999652669687489 0.5800425659963242 0.22762399828319402 0.7627245665850926 0.7667465451765623 -0.05519771372549176 0.6141195887150117 -0.6827339485022053 -0.8030590028286195 0.24233221159728613 -0.19145549195648215 0.7519589884682876 0.9324723613033439 0.4897096650346855 -0.28841950877087474 -0.2025851283530351 0.2019230689187952 -0.56539951211849 0.15064866900381935 -0.18645281469905073 0.8090416379264029 0.7719184871412947 0.04969608527885505 0.40718481175002363 -0.5168284898354436 -0.5481820144902536 -0.48057575236486416 0.5758053686401905 0.3712242298411992 -0.8133799670459612 0.8413226000655458 -0.6966670803188684 0.2145257504069682 -0.9661844298991122 -0.7483148787294316 0.22719846849680492 -0.12187479493486864 0.27697897745815037 0.6406105678283138 0.9065394499043704 0.9977549202780573 0.668807912349612 0.838923672823682 -0.6987477587109461 0.9789190558870042 0.664842215772282 -0.28863770495019203 -0.39594815875470735 0.30373927968721315 0.04915409292307382 0.03755971047476603 +67 47 -0.3414752415207214 0.11147564650337771 0.9452796187330383 -0.5759704633394331 0.8613668736670834 -0.0759546351286382 0.5208692110601332 -0.7104178393766514 -0.27525985456528423 -0.040035047575734506 -0.7687382655109056 -0.4261773535864595 0.24716825330645698 0.3329465154960798 -0.9379625669352403 -0.44615807070696256 -0.2068396985041414 -0.947345653868946 0.30079240216715286 -0.1376654491085061 -0.7836731158247459 0.8107402252112632 -0.9765824031907162 0.9478201810872884 -0.8834863472191599 0.6720277716868652 -0.8642359500379413 -0.8610034515445038 -0.9646571839833904 0.0977029474881197 -0.4106906175843006 0.028849948408713688 0.16343409392125574 0.9090766000819719 -0.15876269174062418 0.7730900357608002 -0.4212377354417116 0.6537461193731118 -0.7377871870575676 0.7672114657323803 0.5863353744598752 -0.5974152941202502 0.37521279126079055 0.23719800282235481 0.31608834801411545 0.49671753187635903 -0.2540859200171588 0.07884176944161259 -0.8200523297110518 0.7433302211377684 -0.41038624327956197 0.6725536331998181 -0.19874797108796893 0.1044597320542815 0.4160381036498437 0.8134985214155552 0.48436566532147673 0.5234909871055653 0.050209287188687 -0.17634769175151255 0.8889707559161781 0.4816281320531981 0.4835227510257569 0.022381500041400937 0.0035338430798323994 -0.6044306145866498 -0.045454879747388155 0.7466661876228162 -0.14260802576427212 0.708852929301794 0.5563951405269028 0.024967927472848483 -0.7369795503804364 -0.3843093142678293 0.5999919953549497 -0.4210734613850706 0.8094448848522005 -0.852391049852443 -0.6074692297088875 -0.9613420133137776 0.7854548858338686 -0.6557711975543428 -0.35309294285199644 -0.7985015646833813 -0.5488308058385465 -0.06832155155789565 -0.11541883003986286 -0.6145649995571352 0.2596436128010169 -0.5637057629311695 0.8740953891616958 -0.8536425291307335 0.9202402745084604 -0.25380495608191844 -0.7439341086932865 -0.49144842274143885 +67 48 -0.5185894697562707 0.04435536455486422 0.5668207304926529 0.4628799596861879 0.019342511040999488 -0.3927215044325245 -0.3716620236606136 0.5484825984993902 -0.04850651344053958 0.1493172346424565 -0.8778502209379075 0.1886702454299225 -0.8447854589345494 -0.5276062983838294 -0.7696505463567678 0.49226552263879286 0.09423656190493834 0.34658134372714877 -0.5472841817666261 -0.016662146699283342 -0.9484036325054026 -0.7193470552207857 0.47246650374362575 -0.2350208472062869 0.4249611426254809 0.48071081609690736 0.08144816499945828 -0.48782991316155067 0.6330395361589836 0.765165909611645 -0.8314718247361301 -0.4897191248187216 0.016588801235817296 -0.33934134446116837 -0.6262471354037555 0.9214916071284389 0.04242608904506051 0.9758483890340386 0.08594661636318834 -0.3935265505631411 0.07884602505834248 0.3523086571361955 0.9561687754282906 -0.6147386839115943 0.08425957277463114 -0.11385629824772514 0.4435891476230833 -0.20265808656217277 0.8819499684372423 -0.4628400202125198 0.103947454592211 0.3239772136213679 -0.22179209033459002 0.4367960809041045 -0.46226479507486573 0.009572666224587412 -0.3562551804844931 -0.5200708014550695 0.16507794371708018 -0.15042923731384783 0.7335473926735547 -0.2800767671534774 -0.5565994113939912 -0.39407146721664854 -0.25600357761628745 -0.8106987981320812 0.3077355781850746 -0.2715553208814978 -0.7805915282743243 0.2624313709695525 -0.7963180036853501 -0.7941483742655078 -0.5130731579924814 0.7529359194518732 0.24049586960473412 -0.038288762187444814 0.8270626918070165 0.745699704290036 0.11787618483953888 -0.6313190519067842 0.19253652218835082 -0.567070329104316 0.9175901309769374 -0.9314312942731069 -0.9644629977228454 0.19013549546681197 -0.4728002719260527 0.7120954520331135 -0.44979128548428515 -0.7261239706986344 -0.35528961151664706 -0.31849152964148164 -0.8451102473108236 -0.755073205080518 -0.3283718946139036 0.24903415913511573 +67 66 0.6659613599372796 -0.952740176816746 0.9809556365264478 0.373895607651477 0.3376504287380335 0.09487310701797225 0.47836008896464866 0.10727608035578484 -0.742373550258782 -0.2445495197242098 -0.1418414131276231 0.4430753423674243 0.09574357571581871 -0.6641028991284537 0.4308839244927041 -0.9903075943824757 -0.9082199071239554 0.059828438160477226 0.9759092132017011 -0.9453019377467968 0.6407533146070585 -0.42408219940127956 -0.14251821889958083 0.18353583723307265 0.8936997395563542 -0.19597003792507262 -0.09994586695728569 0.3538698383434733 0.8657696120238667 0.4690174414325772 0.014986747538861422 0.8165745841792487 -0.9635629049932686 -0.44651812644251465 0.7830976072605658 0.1926077602991405 -0.13862072359429845 -0.602362103511207 0.8741504894833811 -0.3400578965030623 -0.4287132680466934 0.11843326446684332 0.41325898888497736 -0.784434441261461 0.7323556325856388 0.5009478512046952 -0.8125677232786774 -0.1641566033710602 0.7059556243069227 -0.24482892161992642 -0.5945161311019476 -0.23276981210860703 -0.6602736583072069 -0.7195675321548396 -0.7293306239700057 -0.42510879594972595 -0.41873408924305733 0.669059775222665 -0.04573743140982245 0.3590328288105711 -0.28991394584030505 -0.08704069453112617 -0.5373092422087073 0.005740662475856251 -0.7114019292532421 0.6884575874577477 0.3789279672996111 -0.9117885830248389 0.3351726276465081 -0.24807839539481846 -0.23828654803635252 -0.5365351053274205 0.15457763394917157 -0.47282920973066633 -0.3331460803033137 0.13106373031410534 0.15021406034553264 0.944272096357059 0.008534269888402335 -0.41836774974265856 0.15765764506366264 -0.5212983663240585 -0.31738933358937427 0.75390919097664 0.6856982358751484 -0.8079501578860524 0.6313381704154046 0.7486311634911182 -0.909928603217554 -0.9112120108312893 0.3694052997649315 0.3300546349771529 0.24992357505421214 -0.12600877054207982 0.7379454706385464 0.4145969878460347 +67 67 3.7596239873974864 3.4186337767360353 6.214451362073928 4.855691148410354 3.3855296351091813 3.5811006886464547 5.629955798604741 4.578245311907162 4.005517160797446 2.819407944739083 4.157473049373195 4.418640247539959 4.702982757209694 3.9047073451248497 5.558980111168847 6.113356264981688 4.377754509074689 3.834672839712397 6.097587671287832 3.8548461289765115 5.77421212957352 3.4810644399277044 3.1022135490257594 4.779670064177699 5.095469614329537 5.174910384884191 3.6300204542671306 4.088444318079006 5.087099925122354 4.067619429798758 5.192350973656031 4.0954935975514255 2.910097170884782 4.018099849944035 4.357010524153049 4.746936741278808 2.5547483553038592 4.0871878177719445 4.167513633840159 3.3770386966857124 4.494145634896737 4.773860507919064 5.251757451378664 5.14110760323696 3.8045400444478408 4.696633394521373 3.966349614677517 3.5568567300048946 6.143870673368386 5.345125422321468 3.471318736198335 5.3521752227796835 4.3584127944747815 5.076325944693435 3.6348188236726964 3.622443244225664 4.685025141132851 4.587169187092133 2.4582112260604454 3.3443627135343146 4.431604674657205 1.958314321440809 4.895843904073509 3.1208941526893224 4.091292851496609 4.886849553242438 4.027244382887146 5.681675589565653 4.272312073897404 3.6523251616758956 4.84880607114775 4.613588740099353 4.950877920627375 5.023585742553797 4.485023346676771 3.6057604742605793 6.02072145351038 5.455415166170907 4.460601279593691 5.993358713290605 2.6840473806634675 4.436918848127122 3.8384811380863484 6.827134336639589 6.440626687964365 4.691101606045472 3.539064815972876 5.274283358374884 4.5093384867777555 5.918311546353861 4.238707702501734 4.811541847796768 4.665380059068922 3.458785053061232 4.299799505166096 2.836609413706867 +67 68 -0.15726287457261523 -0.2665125472587928 -0.9481749358058078 -0.629124811260573 0.4298157646423204 -0.3957363259542017 -0.3885273836838008 0.41866534073369044 -0.47336093812159863 -0.41879429366588083 -0.36892608410063543 0.10319421267803741 -0.9632999680846177 -0.011946174889807981 -0.5734416652957655 -0.8131315802235946 -0.9871781773172723 0.02647992206197025 0.7766115912981604 -0.5171628958224426 -0.34482065337040413 -0.19771327496941637 -0.05592126238064177 0.7203911328932948 -0.44934013237896653 0.27930187406217954 0.8953517765884456 0.18095908120480497 -0.03740078840516614 0.4993542620189544 -0.2867829973283498 -0.5656481203872326 0.9702224346055703 -0.942548370497386 0.2331229920707567 -0.6715005983572027 -0.30480963836514063 -0.03141461982079852 -0.8034448675024659 0.27134523153879786 0.4931201390403388 -0.8953740958454468 0.9152629767120146 0.6412833260867534 0.7136467130288944 -0.6198092488572922 0.08657165103693631 -0.5871629586769576 -0.8617926260911506 0.3508841305230872 -0.33509749186687277 -0.5881052392641517 0.4440702735509776 -0.7009278860734351 0.360578978754432 0.2622711293854132 0.4553069598207302 0.5754714648105006 0.40835526560635604 -0.9084772308845779 0.5188599513380159 0.205909344086864 -0.20515732120904873 0.5002928778823916 -0.021268454091454947 0.674128146090752 -0.1787702377543483 -0.594458194777518 0.6125918206998344 -0.3660738262660319 0.7278277918493599 0.8548144185846669 0.9780189508950792 0.810424845789194 -0.9596336925426834 0.8210663957129392 -0.8391954447772636 0.6222128272191532 -0.6617187460373801 0.8411159376614494 -0.2963327222158989 -0.6060492091685863 -0.35477494152210376 -0.6089367937482097 -0.7692520169042087 -0.9982382791689035 -0.3209384067475407 0.586744796990923 0.3459988363983124 -0.3096851794733535 0.49189499832902084 -0.39455261136784014 0.09709637904247503 -0.9370372827557598 -0.5148770731192551 0.23862529966361934 +67 86 0.042022972579946805 -0.08894109707412334 -0.9118787491367366 -0.3884963020206129 -0.4823035512625726 0.981355923392105 -0.615658888832151 0.2670995283693005 0.6162068169432271 0.4392287428944468 0.292848703300018 -0.35522566165289104 -0.819372918324851 -0.29396222302287334 -0.8180952215298654 -0.4957933156970662 0.04087999689137822 0.03349506065489094 0.8608391986591819 0.6739383608567575 -0.9391076160151746 -0.020025461631166586 0.4351529938305465 0.444013846165918 -0.2720741859343079 -0.7463161331201316 0.17609103097798906 -0.16747700274900712 -0.72703984354985 0.5111270327875637 -0.9653542929881738 0.07663689729829892 0.3585839638977639 0.37029681335939024 0.18590470898311073 0.9125152302137585 -0.27088841315991985 0.21128769941990844 0.21599431150082116 0.5692461217935447 0.5881832841168566 -0.7558833670690284 -0.9914750971892508 -0.9159430034740343 0.269021170859836 0.8961540222056614 0.7206990179585668 -0.08679594185596651 -0.24030718050275923 -0.8797236141962532 0.26059292257635636 0.6883399944858046 0.38108863221230327 -0.20182547688577235 -0.8447880125437424 0.2696848901918094 -0.6268905379446696 0.16782168981643908 -0.777962366328153 0.027495050708541413 -0.8797636886717755 0.19480470677933748 -0.6305964385633713 0.49888212042852675 0.40071230632655674 -0.4985496472841595 0.6550566392392938 0.9866834186986821 0.828965303445172 0.0214992830280738 0.7020620687116046 0.8011547931707292 -0.30920173172154586 -0.18196904128687819 0.4447674049082131 -0.788289234976921 -0.25400793377333075 -0.6352440726727697 0.22263021794739357 0.765185715168778 0.07583775428343764 0.9223746532462203 -0.3061868487638415 0.4190895975271345 0.8370518104735716 -0.036104112387424614 -0.4247146521814318 -0.05848484244197394 -0.13959639226583298 -0.35557961551448747 0.9621260157342799 -0.700847301663482 0.8257343289995105 -0.006082322158198483 0.8621815006866402 -0.038371730964157136 +67 87 0.49072935118276795 -0.02208190526607212 -0.5031077020377488 0.8862739626959202 -0.22197098682668814 -0.5246438894322181 -0.9888777802399065 0.5660036554981078 -0.3258284297398535 -0.6650217336142479 0.9652228333025565 0.9094608585457205 0.4710137217868071 -0.32351307477037494 -0.522628876329388 -0.8051940512461138 0.18267839731927205 -0.957339713105902 -0.5878418049253684 -0.8483866532245934 -0.3691460639195525 0.11094236968376658 0.18348247620864466 0.9860653790555711 -0.10530730446553971 0.8279890092750257 0.5496211236924959 -0.5378380831220662 -0.591966347246403 -0.03236271030251969 0.7298651384477663 0.6480101455797065 0.016649097467304808 0.18503304178023705 -0.9739160066153929 -0.6225590316583658 -0.823329821210004 0.4799396283294868 0.09757513139061214 0.13677783623136341 0.471889231154601 0.9286832670328935 0.768015222486899 0.6392449749711444 -0.16525921117809905 0.9181137273317499 -0.4666395829423997 0.46268035451768297 0.4303225078324291 0.8268117937636754 -0.6006390945607623 -0.4362327310083105 -0.7390795069745153 -0.505655361189332 0.39783070804046283 -0.6616106909013142 -0.6692776216714773 -0.8066787941311329 -0.16188199504760825 -0.906910639101066 0.0014625683374864806 -0.17745508840607327 -0.9976408577213491 0.5073277728438512 -0.8408993772999604 0.21986238692583138 0.29234069181380784 -0.9237696910539004 -0.16840150999607828 0.7387600026725427 0.8900413815474884 0.06336300370595449 0.8282851603760049 -0.7886136673574402 -0.28209758431524756 -0.028198891422938743 0.9233033446793824 -0.8648429064098639 0.8202714612161 -0.5969304750271944 0.11224902524348446 -0.31049238847271443 -0.13349986392393687 -0.7378828444559355 -0.5332139802402911 0.9024145570840059 -0.6290540658216082 -0.5096938333539434 -0.8637690657231838 0.8739055094221659 -0.3381302995060185 0.36741833977030236 -0.7002088917091178 0.8482149696283421 -0.7390860776716521 0.5364987539993842 +67 88 0.7782392975003716 -0.8106313249290462 0.34462064081808297 0.5828004966173561 -0.2048549145818277 0.2798714454986835 -0.9523314782923176 0.834805701540986 -0.007408930656323198 0.010601720982613916 0.29298998672425114 0.7526225897834014 0.31491544106799707 0.941839837117681 0.42131453424532195 0.4337295201950293 0.8166641388061264 0.5644196346363681 0.5713341435500106 0.5499174053882034 0.8997461528103763 0.7143416290956623 0.3620624559080521 -0.6112388302356193 -0.5115499606814771 -0.8474437186232602 0.7574786711926438 -0.6452957290825536 -0.15958756611468994 0.27023622701430905 -0.6526323008853199 -0.9130290046343348 -0.010939094142170536 0.40214710860726344 -0.6745206932804955 0.09652842275467477 0.08253784703161204 -0.4077692030155118 -0.4074085652972168 0.5763158344755652 -0.19320971549739174 0.07193283724502075 -0.18870746822679907 -0.7285166188027403 -0.7314759526841397 0.7775849863404838 0.04601822653182652 -0.7934335540564408 0.5335262155055547 -0.8420071017839375 0.35744397020612295 0.9216333249108037 0.098716126092258 -0.948918330464519 0.1573884050399823 -0.5106819318747575 -0.14868769578998475 0.37777351325547226 0.2881094869248464 0.41698828877705973 -0.7733706228452022 0.028041047533932772 -0.29485897554123985 0.24639403084881906 0.863542224137489 -0.28681787789133883 -0.8251881342907761 -0.2960136685837662 -0.2699265365326873 -0.6084862377223317 0.3060068178477211 0.20592664508393366 0.3402419759223425 0.40247911981849493 0.03936020741072377 0.27476206561182615 0.6600232847786662 -0.15998295849984578 0.4282659978664858 -0.20646377622662482 0.7195950445454482 -0.4751328172193181 0.4380352396879412 -0.9517449040850667 0.21913606057336654 -0.18892991593261432 0.006769435030748117 -0.8548816310483065 -0.022264685249207217 0.24402648245412095 -0.021694709942403634 0.93950015236855 -0.21417791915464424 -0.0838882966497434 0.0647111398604312 -0.6441431850421562 +68 47 -0.21594403479369717 -0.45292131319821416 -0.824454052827222 0.066293605846939 -0.2667153391178434 -0.36087773387533106 0.511403725211447 0.5213880981992967 0.9128251916591956 -0.482422119915181 -0.31514600334978726 -0.5602615565765872 0.9554920629225216 -0.4632096528989613 -0.10048622803022034 -0.9842283090651156 0.6189533044312683 0.2695263477412755 -0.5189984040987896 -0.05983253282476042 -0.03228589450525843 -0.9365133141717801 -0.38790717774147 -0.5852786319221766 0.6955044981527811 -0.25952409307294655 0.6716633800656984 0.7282456222129778 0.7196282207581504 0.9764668354962638 0.7745517380740214 -0.19808779868069815 0.30174880258129866 0.7355133450050169 0.12417802055468341 0.199349309346615 0.44341409321858194 0.6212728668563021 -0.5619702699099545 0.6848618437974268 0.2789831029337977 -0.24050447112715356 -0.4864870923504949 -0.9792530912080877 -0.009623466401053049 -0.4077332524794819 -0.1593362663165354 0.3091797892413557 -0.9933286602812137 -0.0608890729980085 -0.931881505175369 -0.7362229438709593 0.3378512966132401 0.10050099032691939 -0.28976385741348754 0.9866464586735213 0.9757014234355719 0.4050094783372944 -0.5110434902444649 0.7966241327779999 0.7614935440598416 0.12129929244947868 -0.7958731029678674 0.32844745931751995 0.0445363544289481 -0.2283264261281106 0.1438829822299852 -0.7604775665295047 -0.49068405046026986 -0.755434272276351 0.016770148270149665 0.008461534868121401 0.0612005899900836 -0.48137810535382375 -0.514643324104457 -0.12805867449566688 -0.11994126415798911 0.12689381463712857 -0.5455442029625555 -0.9643248335032499 -0.7116303392093204 -0.7157650398011384 -0.639148506862748 -0.9699092063309358 0.49265895195264786 -0.2038589001964377 -0.6472922250785436 0.44360048219820847 0.49545728000243106 -0.5798780042816081 -0.5524802265352293 -0.3260033054924898 -0.8856025738591204 -0.5430103348423736 0.6716414509711095 -0.02356874756272309 +68 48 0.3356820354394421 -0.020037964222537674 -0.02069725096402375 0.7956156196721997 -0.130784810357077 0.5885342658839048 -0.7073665822078716 0.07505694829096132 -0.18962800341638353 0.6813817276967968 0.19525656673746083 0.780916831113966 0.0248698808921497 -0.4779135521528597 -0.8805035562962638 0.8719211395344333 -0.13528744899970735 -0.9011748199072471 0.7779336189773365 -0.3560747154092512 0.9824583044709514 -0.5203557995528509 -0.20811402444147364 0.9765762178033124 -0.13445388212952003 -0.409550320640629 -0.9217786294014512 0.992475693118458 -0.9938736738767757 0.7296583880441716 0.21680467157590466 -0.33002690739337015 0.7621356565882977 -0.9930938561040363 -0.7061959376692699 -0.3183748598102183 0.6738609420726211 -0.24229167557589792 -0.9274444406371711 -0.024692866628988952 0.08952173355830761 -0.7932691024402221 0.06641854929587976 0.5779940669782668 0.9836335583608931 0.32572528372565923 -0.6300741090119808 -0.3615595286182245 -0.43075599208851467 -0.7407653207405482 0.7224942715706661 0.43595133032199884 0.3192997170327292 -0.9429900344763569 0.03361415615644514 0.005689672116210742 -0.07795164721692438 -0.5086355852260063 0.8037784935507271 0.8935018510841384 0.2839778745314028 0.8716252039865238 0.3130800796836226 -0.8580371333671248 -0.7968424387064823 -0.8450197366301426 0.6803224401758785 -0.5856920759260682 0.2684037011401317 0.7870727294324689 0.7287990443800676 -0.9922225936445774 -0.005591506485483233 -0.9885374395753652 0.9269351957968579 -0.7522594638905464 -0.38888892580960754 -0.14260566643918393 -0.8435635639930168 -0.6529592510421414 0.9315809411458169 0.5806558395313746 0.6236104885591465 0.6128299288633912 -0.3395386633269202 0.1489606818882072 -0.35070676553205415 0.4661818817208112 -0.23363096082043833 0.7847423826476818 -0.5332412925043137 0.3603149249421229 0.11212681610644615 -0.1582223182026028 0.9426525877557788 0.05992043735719599 +68 49 -0.5078070292076966 0.33086510865021923 0.01713349660172736 -0.12014973851285848 0.4653414480517786 -0.7147893558223415 0.8049339731438561 0.5137853281763711 -0.8241002161048028 0.6799762641959346 -0.4300632701941558 -0.27498458361859157 -0.5788195465564072 0.3886770076092654 0.1218152823996208 -0.7516897707368637 0.653575244380308 0.17893199119192071 -0.5239298289877452 -0.9332925164794443 -0.8713981812164697 -0.6627827745565813 -0.23252850485590493 0.7679338491913787 0.3512160367404009 0.3399838474599175 -0.6743940969664834 -0.3547048417896159 0.18807008116400792 -0.10828041594059012 0.8645956865928655 -0.515932068103512 0.003482775084581613 -0.46204647383949626 -0.3282327719452971 -0.8681434635407739 -0.12290102114918788 -0.4731223170637613 0.5787945308075493 -0.4153217468833932 0.15868167272838218 0.7987801963262111 0.6740947782304851 -0.42252520138431326 0.9759243046221002 0.017084330366879952 -0.907154357827187 -0.8690987438430064 0.25992249687842195 0.42709477204136803 0.30590516126232625 -0.5088603557408926 0.02957280012232033 -0.8091680487090072 0.4711406606741182 -0.5693927149044493 -0.2182902588447282 -0.038363013237766364 0.7960237451081456 0.23068136735764577 0.9653790791250916 0.9994924508446499 -0.04750179591957049 -0.9628257686765525 -0.7501167485841538 -0.338508857623937 0.7812406552737243 0.8663876159497341 0.01666270125964453 0.30935418201289533 -0.7193697095991767 -0.7305342251397695 0.980167995979855 -0.3446226554406797 -0.17913761691549812 0.2043176647095608 -0.8174341032459278 0.1459076171430278 -0.6716992574932512 0.8110666709020924 -0.6623298477407698 -0.7336685704061083 0.38720052710462993 0.6850727747299474 -0.7638758761834745 0.6727946259614679 0.06687075921808994 0.2933334187685823 -0.3066430387696666 -0.35175310878304855 -0.5524508099215997 -0.9334529695266656 -0.5895720087371299 0.07223319602596123 0.8049622582169584 -0.6840674686422901 +68 67 -0.15726287457261523 -0.2665125472587928 -0.9481749358058078 -0.629124811260573 0.4298157646423204 -0.3957363259542017 -0.3885273836838008 0.41866534073369044 -0.47336093812159863 -0.41879429366588083 -0.36892608410063543 0.10319421267803741 -0.9632999680846177 -0.011946174889807981 -0.5734416652957655 -0.8131315802235946 -0.9871781773172723 0.02647992206197025 0.7766115912981604 -0.5171628958224426 -0.34482065337040413 -0.19771327496941637 -0.05592126238064177 0.7203911328932948 -0.44934013237896653 0.27930187406217954 0.8953517765884456 0.18095908120480497 -0.03740078840516614 0.4993542620189544 -0.2867829973283498 -0.5656481203872326 0.9702224346055703 -0.942548370497386 0.2331229920707567 -0.6715005983572027 -0.30480963836514063 -0.03141461982079852 -0.8034448675024659 0.27134523153879786 0.4931201390403388 -0.8953740958454468 0.9152629767120146 0.6412833260867534 0.7136467130288944 -0.6198092488572922 0.08657165103693631 -0.5871629586769576 -0.8617926260911506 0.3508841305230872 -0.33509749186687277 -0.5881052392641517 0.4440702735509776 -0.7009278860734351 0.360578978754432 0.2622711293854132 0.4553069598207302 0.5754714648105006 0.40835526560635604 -0.9084772308845779 0.5188599513380159 0.205909344086864 -0.20515732120904873 0.5002928778823916 -0.021268454091454947 0.674128146090752 -0.1787702377543483 -0.594458194777518 0.6125918206998344 -0.3660738262660319 0.7278277918493599 0.8548144185846669 0.9780189508950792 0.810424845789194 -0.9596336925426834 0.8210663957129392 -0.8391954447772636 0.6222128272191532 -0.6617187460373801 0.8411159376614494 -0.2963327222158989 -0.6060492091685863 -0.35477494152210376 -0.6089367937482097 -0.7692520169042087 -0.9982382791689035 -0.3209384067475407 0.586744796990923 0.3459988363983124 -0.3096851794733535 0.49189499832902084 -0.39455261136784014 0.09709637904247503 -0.9370372827557598 -0.5148770731192551 0.23862529966361934 +68 68 3.8077700368316547 2.8113985930340792 4.262900840202177 3.1395717358632664 2.6974262130951745 4.59930652862532 4.6765042810556 2.679713021028949 5.561661590498904 4.616290505623335 3.491276996208371 3.8081661222919885 4.238913222811103 4.8791483478546676 4.812187308434189 6.234867453605554 4.609561254775981 4.853127762009392 5.046304213984845 4.2459023039385695 4.8612855298101305 5.124923174587755 2.677317785819527 5.302675435389424 5.404789874076416 3.8748708733329487 5.269375841021289 5.42928973062401 5.700020082348273 4.20565577394371 5.794290073560962 4.405966668075996 5.202960844720124 5.677197353609681 4.419722408389613 3.3231199888842466 4.38869412274718 4.168599274116905 5.7613819217541415 3.6291865261635943 4.532100554006043 5.838224796799252 4.898631863915846 5.3473417501929115 5.730026609288332 4.4004706624335865 4.526147348176508 4.140518316658096 4.10408027838891 3.586844726317114 5.448706224834475 5.755895794037359 2.881026876788866 4.908887764250286 2.822006076805936 4.306639843516287 4.163543574042737 3.7677110033086523 4.227344703642124 5.278756768913754 4.584936937632631 4.699694534330916 5.162436693715334 4.496824955037021 4.176270059553693 3.8458832047918934 4.5558544670562915 5.510570867298018 3.218352876098611 5.667848321194482 4.686325224518467 5.288199381514255 4.617492935647251 5.339469400930588 4.614863768028091 4.982418397044097 5.530654923136159 3.7864186780069704 5.232530774046643 5.620528503288132 5.8007945117771476 6.357587527215174 4.014427078315789 5.051127388840516 4.765445342338603 3.7850443871817436 2.9614080385988784 4.884531834434373 4.653037971696238 4.913641242104414 3.9800393570821013 3.4382936513053792 4.820292036686123 3.5913338525624563 6.1030096741023545 4.564071162724116 +68 69 0.6295510876138484 -0.03711730709025196 -0.8584439674181228 0.5217663762422797 0.44513526675279325 -0.5731098698095882 -0.18105558088235396 -0.8054156042363527 0.47221466903223575 0.808018408636175 -0.3112551016492531 0.5104106622645082 0.1509049670593161 -0.8574149299226197 -0.9336560845969195 0.0353205949593145 0.24206658425985172 0.01965635219554529 -0.26882237467945935 0.30247313708613177 -0.05270093651467089 0.6977261484146611 0.31092144180062586 -0.53592433571401 -0.909681615115328 0.7055211735234486 0.22062465930717923 0.39989614312238086 0.6827362571390558 -0.38559591678017746 0.5007741504867245 0.7168135751241898 0.017848202271636415 -0.5100687718800923 0.0565914059431063 -0.20492045729709663 0.0912390480742995 0.09451766884931323 -0.3182504953947052 -0.3719304849556624 0.4645315005350472 0.9744013386189629 0.3231652154702682 -0.06801713873790938 -0.6986261199417472 0.6141334230593991 0.9355356010225857 0.9001645041096815 0.5376897268474883 0.1889861821108776 0.8944188984389987 -0.9871855613656255 0.19096285933180313 0.5945012708977646 -0.18205521675941494 0.7913472173750009 0.6949723949317446 0.3602712085356494 0.38723154528224657 0.5677098294301957 0.39375272135360895 -0.1496104086897414 -0.6899945474738645 -0.09532704744781162 0.01893582641278302 -0.46031922523340674 0.9972697693828514 0.8480936134516872 -0.6746661609541678 0.9851306603454051 0.16686272173581496 -0.48563212739141015 0.23190236316162283 -0.08269018951504359 0.2987124412606399 -0.8307333034799484 -0.035041061968720255 0.6466380632447741 0.9264725918679697 -0.5561725483972915 -0.9452555890763057 0.5661822237252954 0.6792823765541618 0.2824249735779756 -0.33686560433060886 0.37803664148708016 0.5792353366465659 -0.4967274167147113 0.4251545616000756 -0.6624641888945662 0.2472173039919996 0.2942175841396928 -0.9422500478765812 -0.37368123991998536 0.7492308093189142 -0.544605631527727 +68 87 -0.9368116364670354 0.03833437036188303 0.8490061536952866 0.2475914334068514 0.0066912416009259346 -0.7511357214075816 -0.16060315440000061 -0.030518877034683145 0.7573196129664674 -0.18214939135703734 -0.3423755252993981 0.47802906782511756 0.040841325463323086 -0.7062970886487256 -0.7807897923010843 -0.7383209737748355 -0.6100068707769506 0.962647997508342 0.8219268804130297 -0.2847790581774523 0.8733721248531692 -0.2645532334705918 -0.6250883085762373 -0.8288273449267527 -0.7536123401353723 -0.27392728057971794 -0.441903956982975 0.6326675251574223 0.5907065476387725 -0.02444702265572407 -0.9420915694548357 -0.2961855241979494 0.8688528148198791 -0.6112977677516345 0.915295224096385 0.07519670227089614 0.6188881186487403 0.5828488030165648 -0.7862460171005172 0.895332332897288 0.9534676580528825 -0.7508835413597017 -0.9878241133824148 0.8546830260619926 0.6554915394635688 -0.9353740571834053 -0.3525048451398112 0.8605322139751073 0.06205802315646358 -0.20584334815108973 -0.7836201041379607 0.293454402500789 -0.01096230343317206 -0.8450160193587799 -0.11270132763410756 0.13658241375045876 -0.34639524695994184 0.24021464157596362 0.03746363920911944 0.6350193100483321 0.3286393272044865 -0.003092917569588405 -0.8383555725238523 0.8071991951764685 0.4073768816781931 0.7501351076904388 -0.05069429403923653 -0.3388333086285531 -0.1508075722289295 -0.3730750534867029 0.9443323524872935 -0.486866159325126 0.583718579882937 0.909108909918898 0.046698395170647666 0.9565486870089084 -0.9463744781739309 0.1607089213517119 -0.4269310155953232 0.10045469759073322 -0.7600489843445744 -0.7565933711255537 0.6675702707932967 -0.0971434958515025 -0.4948757697742794 0.33012243220794524 0.357499612626212 0.32252532044584004 -0.7178282077513265 -0.8094439609802448 0.844382035112333 -0.08186828561392123 0.764473842788767 -0.21431934642522865 0.7982256263895449 -0.9509198480103367 +68 88 -0.6781512550816282 -0.7995870209192915 -0.4972953513655185 0.2980213782537531 -0.05570415046929922 -0.027115587571383992 -0.2623162358119526 -0.006426357780353609 0.0019122770248460874 -0.6072205669561537 -0.20959502992842194 0.6380841044162764 0.2871608071265017 0.8899465749602122 0.11154365148176848 0.9561934787431219 0.3527280881218906 -0.9112518845663209 0.5221258945501763 0.46733627694559465 0.6337405613055715 -0.23178589600818067 -0.18482114076870904 0.29017869700827226 -0.9258687251966853 0.5060825932673776 -0.05452748528485052 -0.6978898544049501 -0.6964222345769786 0.5690909619000217 -0.3131984931520211 0.343749240960183 -0.9839427541156238 0.3586928451119422 -0.13965009244489113 -0.1891810894974666 0.48299038599128075 0.5907249621436688 0.26117168093130627 -0.17463429773744732 -0.3357812625066763 -0.13273206333990473 -0.7537140971706611 -0.6282658336053915 0.5993768311413201 0.05753937448333102 0.24363926891035903 0.023506623873956523 0.5794615479368803 0.3298733650083847 -0.8372859421384169 0.8526858653193448 0.7785319477698458 -0.028846668712916967 -0.26499425635699714 0.7790863038832132 0.5202559319941009 0.8676065548314977 -0.31249881623948417 0.4868096824228958 -0.8042909539502687 0.8562049942198917 0.9439670461496217 0.09856521609265667 -0.30394593047101903 0.09226685616446306 -0.6587882521228974 -0.16223214136681152 -0.5405412931226798 -0.8600363218969269 0.536521991101083 -0.3091453309352101 -0.39230921702288923 -0.9674904975985259 -0.9022994385098715 0.17653687048832678 0.9303655913066793 -0.4376111148210824 -0.252934444567225 -0.7700620149992556 0.8179648611037929 -0.5708593161515068 -0.052050445877956264 0.08346149068081599 0.6010586470158557 0.3181799545433728 -0.5124546798593015 -0.873388634935627 0.30231304866238573 0.6623916281403375 0.05432204851646327 -0.4387094901524995 0.7518716529476677 0.94054464153809 -0.7887833266540698 0.38300689107667907 +68 89 0.09667889166015531 0.70006855721563 0.08805302936871406 -0.3925540506916514 -0.8941328440584515 0.3144201379941547 -0.6723188996377047 0.24088900076532194 0.9659744144630229 0.6614133504376474 -0.35941570564168557 0.13075961335297182 0.6912754434943638 0.7179570897869318 0.6915496234837715 0.8015479221564914 0.2384481513994121 -0.8426210324899086 -0.36216367525485627 0.6424693168064795 -0.28252925299119225 0.6539367269637322 0.49519617126748816 0.4404306184668083 0.7136513966135634 0.5470669204244347 -0.4851310002095677 0.9194631688083059 0.8011673040710496 -0.7344211351407772 -0.9174472519289647 -0.7371914836959572 0.6696477206077105 -0.8350360426783974 0.9774541280723856 -0.12784864770657367 -0.7432489716478174 0.7548378331743864 0.5750889178842806 -0.009648450161780397 0.8253692887509787 0.2987555188952049 -0.27094252217377957 -0.1821487394441672 0.3500977576108739 -0.6705404154004329 0.9395632407105334 -0.014527505242217353 0.35846563780368146 -0.6961162327137025 0.03805092390135201 0.5728715958787587 0.3435813646065675 0.8115596158710241 0.686709952024734 -0.46700895438355117 0.8100498682910413 0.6802713613430251 0.25727652732149475 -0.34085679413316305 -0.2193173051349122 0.941157987478406 -0.5392872556544874 -0.5067861626124828 -0.9722014980509697 0.37390723175853857 -0.9967708172579723 -0.8189790027196082 -0.4446407741004552 -0.7053865734865927 0.7230101781100096 -0.9262243023012011 -0.9020564435150917 -0.21775103620194036 -0.5464307422035415 -0.9701559411220113 0.5676362067410345 -0.519854908013369 -0.5642628448933127 -0.25953020194074505 0.5820267506516643 -0.9716995388615741 0.33144894348130816 -0.7583673042486729 -0.09173252955972844 0.5233129290005369 -0.028116741436837955 0.43189640386854244 -0.8757864845592986 0.7262873026895669 0.4833843903670132 -0.528013979322927 -0.020328978313947754 -0.1667663228641385 0.7936852930201219 0.9736232794826674 +69 48 -0.11787005494058289 -0.558272468880137 0.16130038030498728 0.5769067679107027 -0.744955819073184 -0.9556297512519603 0.012670725259409377 0.018684950987701177 -0.5983156449375673 0.7098528770198842 0.4321912251116051 -0.43082148333154313 0.7599217455083667 -0.13265763351545257 0.06026626381691136 -0.9343014756843544 0.13710121128220387 0.7021943859050199 0.0491806002376578 -0.25765830033328396 -0.8930987160530204 -0.11617616216910642 0.5458216673961773 -0.14293359398107874 0.9060064723129961 -0.19470982371112644 -0.10231424929888955 0.4464397339823021 0.24911876463027482 -0.800569402846385 0.3552843034257094 -0.8814900624069448 0.11141645164928726 0.8900416026659141 0.5269996569020945 -0.7554524561856109 0.9082439220344398 0.01908355076348145 -0.681798935511422 -0.3922427403529163 0.8786703065794723 -0.9729996062760082 -0.5300801192971025 -0.16617690733133728 0.9719185677042372 -0.07790884707774803 -0.5437218996576767 0.6841013923087569 0.2748706817243729 0.3674639028163933 -0.08736653166041286 0.60053029098653 0.3968832892295244 0.15695508118051782 -0.9777514439710946 0.6947995051963571 -0.9120923842610991 -0.7409324137883595 0.9822570066930043 -0.7975731712893661 0.15026622142562363 -0.34046636882751335 0.8512006869368365 -0.3841523793079116 -0.5860901740695934 -0.824906098340171 -0.22264679010612398 -0.47015492243810053 -0.12974633310767092 0.09264251212256869 -0.6060615708772032 0.17584899163993284 -0.4952546801190023 -0.41559885157444776 0.6129287442883078 -0.19744791746755896 -0.5821314087010421 -0.6021819728738602 0.2378622345496353 0.6145439750973789 -0.24119392966454023 -0.11017327714860614 0.41802063230771536 -0.5733015605319163 -0.6159992471774993 -0.1159047730853362 0.12052145168324668 0.11991522423060652 0.9826191985239638 -0.3881577689526461 -0.8773476554819299 0.9482708291159088 0.5900201803150842 -0.9167344496595213 -0.5328770525754594 -0.32273596067043453 +69 49 -0.8654134461936094 0.5014199408496263 -0.6388002724344197 0.7016792405633625 -0.09642848083334332 0.2072898721371803 -0.09208043199574645 -0.3414220755255313 -0.1446954362877575 0.39692931665889475 0.945355002799459 -0.5157821481473905 -0.05493158491787686 0.8175688600035704 -0.6486419585901622 -0.19346634795073192 -0.9715688780464156 0.5381100929317637 0.7436090878999373 0.6009750885807661 -0.19725540643870532 0.4763084121098262 -0.8046126289953954 -0.2697846119937961 0.8849851902764212 0.38179277693140135 0.5114797684412715 -0.5940297073945844 0.40285568290693363 -0.20436873918445886 -0.4197579003116889 0.5337976828665314 -0.19470849317060135 0.7049771332917825 0.2507191745552386 0.043613107696488074 -0.368867512560868 0.6889476601329485 0.6954811866750179 0.03232409560816807 0.22428424745012698 0.2711200878756632 0.4894316239228289 0.016144952149875547 0.8881541740941519 -0.9279331445078611 0.049115880375809606 -0.19394448382023577 -0.35339904585814863 -0.7064697588744384 -0.9377734025178373 -0.6036012179001924 -0.36633482815106033 -0.9533661843103483 -0.6890798641459503 0.7971173778595744 -0.16220992235050113 0.2760317349424133 0.111959804754167 -0.6145035169067978 0.7735253171447709 -0.8278587337982697 0.4492585777246587 0.49397181880366636 0.4669357873001849 0.07528330563305752 0.993878625670074 0.05371835681988091 0.36400222748865096 -0.23278273237096903 0.7254441796247328 -0.48427370385953683 0.35815457130233885 0.43968755732010156 0.7165588142443928 -0.11661555940384094 0.6465938865914156 -0.7266760364734994 -0.8371253875104931 -0.470353732681849 -0.12585480419518347 -0.8101518793160067 -0.19808268289221198 -0.16570888804446304 0.055490997128209374 -0.7048938537793483 -0.5693045461579209 0.4458695839184217 -0.06223510398302601 -0.6954794264361763 0.9594201668296249 -0.13653191416743082 0.9365276690964248 0.9188623193003613 -0.3146032538719503 -0.08579849815621365 +69 50 -0.9016912297854232 0.9244626911923386 -0.5911410410895104 0.23680284989387945 -0.7697597601545172 0.3955810011885439 -0.2823874212941051 0.1715815238926941 0.05228859808419428 -0.09555264483626691 0.09455868837280068 -0.4239586175365875 -0.5234458340354051 -0.2828126376025075 -0.7066643585426229 0.3542905834009624 -0.5133641629999275 -0.8773428249066635 0.942432991280215 -0.9478252956357764 -0.5597829626696083 0.7966191280453077 -0.6982063107438383 -0.5873839200476181 -0.5377013112602971 -0.19561310870997817 0.5828851100909267 0.9075376317184312 0.2747242883296477 -0.11452311576519669 -0.7609402226637276 -0.44918559696303695 -0.7532113433411076 0.5944863996246392 -0.8259558016006088 0.7531798000961187 -0.5895276173319122 -0.093061706701697 0.20153135640306652 -0.2866961800439949 -0.5234993759074087 -0.5273279966838933 -0.0610981637713961 0.3763773765765994 0.4038398543170332 -0.9190506080593186 -0.37063244294938036 0.5974398221928272 -0.7285493055863073 -0.1482726763509068 0.044660258427372757 -0.08129270215895068 0.23512667364124273 0.09442817067952936 -0.9367642616154255 -0.4130567751557115 -0.9403198566356854 -0.11945932560009953 0.5944207023532218 0.5089391260308815 -0.4166504883066471 0.9111404237020855 0.12400846645317642 0.7264684733506865 -0.991232011636132 -0.38486202150786486 0.2958758338919325 0.8782771852338749 0.29542209313412227 0.4317513321731079 0.8828299448335486 0.4770780439554885 -0.6965275214633535 -0.3151004003582538 0.6725782742507638 0.46608477014854177 0.4632099813064181 -0.978470116811365 0.009878655267075986 -0.42453071721033586 0.47230705444445875 -0.9493100833844226 0.9247217520623645 0.9449283727259263 0.74553740627576 0.8143250592387721 -0.3603503536016921 0.19155488801006815 0.38742368622139534 -0.9736034758777328 -0.4665361385511333 0.78032287384093 0.5920343458620407 -0.9390316313101397 -0.12892793568050376 0.5687034824885191 +69 68 0.6295510876138484 -0.03711730709025196 -0.8584439674181228 0.5217663762422797 0.44513526675279325 -0.5731098698095882 -0.18105558088235396 -0.8054156042363527 0.47221466903223575 0.808018408636175 -0.3112551016492531 0.5104106622645082 0.1509049670593161 -0.8574149299226197 -0.9336560845969195 0.0353205949593145 0.24206658425985172 0.01965635219554529 -0.26882237467945935 0.30247313708613177 -0.05270093651467089 0.6977261484146611 0.31092144180062586 -0.53592433571401 -0.909681615115328 0.7055211735234486 0.22062465930717923 0.39989614312238086 0.6827362571390558 -0.38559591678017746 0.5007741504867245 0.7168135751241898 0.017848202271636415 -0.5100687718800923 0.0565914059431063 -0.20492045729709663 0.0912390480742995 0.09451766884931323 -0.3182504953947052 -0.3719304849556624 0.4645315005350472 0.9744013386189629 0.3231652154702682 -0.06801713873790938 -0.6986261199417472 0.6141334230593991 0.9355356010225857 0.9001645041096815 0.5376897268474883 0.1889861821108776 0.8944188984389987 -0.9871855613656255 0.19096285933180313 0.5945012708977646 -0.18205521675941494 0.7913472173750009 0.6949723949317446 0.3602712085356494 0.38723154528224657 0.5677098294301957 0.39375272135360895 -0.1496104086897414 -0.6899945474738645 -0.09532704744781162 0.01893582641278302 -0.46031922523340674 0.9972697693828514 0.8480936134516872 -0.6746661609541678 0.9851306603454051 0.16686272173581496 -0.48563212739141015 0.23190236316162283 -0.08269018951504359 0.2987124412606399 -0.8307333034799484 -0.035041061968720255 0.6466380632447741 0.9264725918679697 -0.5561725483972915 -0.9452555890763057 0.5661822237252954 0.6792823765541618 0.2824249735779756 -0.33686560433060886 0.37803664148708016 0.5792353366465659 -0.4967274167147113 0.4251545616000756 -0.6624641888945662 0.2472173039919996 0.2942175841396928 -0.9422500478765812 -0.37368123991998536 0.7492308093189142 -0.544605631527727 +69 69 4.670273982057376 4.384931078342943 4.236048753771383 3.928600180912041 5.243931564950817 4.333812299567052 4.225435999252778 2.964735816184525 3.0340406093358654 3.539647404856655 4.387229848663541 4.463911999989047 4.104126927023568 6.039185678224706 4.765663758353055 2.990617704113699 4.591701269245696 4.823856032327516 4.824583307334359 4.974177347845569 3.731900634347568 4.538041037468443 6.224948388651268 3.7271043323795787 5.699669384276703 3.71618249995785 5.106758660761685 5.295426318246718 4.844605568810353 4.147427533974316 4.864143363969354 5.026227878198465 3.08379989436639 4.860755570219803 3.540285047914324 5.254394006626837 4.616038358818794 2.862519249874812 4.28160141790002 3.961618898531962 4.91058668982423 5.272904403827841 3.9666864390919248 2.876733047040916 3.8592666240850226 5.7070308309600195 4.5692121303281885 4.559633996769352 3.913549805965461 2.9981036881970313 5.647534222825939 4.62952922972919 3.6937547944444358 3.9395837872333956 3.458520292246428 5.3660252467339316 4.735541751343791 5.208022003954424 4.092553403770751 4.254920488492413 4.20252118064626 5.075240717455151 4.696176036901468 4.373498445350904 4.120667751596103 4.4795779672775105 5.594054116810858 6.412839757049833 4.821404245956872 4.8525010996963 5.764989839089935 3.6301710917778744 4.47719510575315 4.643705825566291 5.45116965741929 4.481683052697954 4.2920832590549916 4.936257603802415 5.435132151226153 3.8995767753941295 4.74516933770739 5.089463545306634 5.787182827182698 4.491061047938287 4.529122549806198 5.1359015630593525 4.1044810796433815 3.256138278134073 3.5852767490340156 4.763478863236736 4.538120345483455 4.989765612994086 6.373289016686332 5.927161862957204 4.279137295625776 4.118015537049826 +69 70 -0.17436867324811156 -0.4389089443262453 -0.41344848760031416 -0.08537552901162204 0.4433354670239176 -0.9857023354931262 -0.86030520254914 0.038709964705123 0.10152347391798222 -0.34831840564069494 -0.6936178280964709 0.7670342829702959 0.991679051497746 0.3472996601469933 -0.8496887860283495 0.30166489689499265 0.829679245068996 0.27867988500115604 -0.487613952565916 -0.8361165968907884 0.7571457163724145 -0.4533262559105995 -0.9265009011481835 0.28060232374783856 -0.40385100541604424 -0.7897831903895232 -0.46719078699959904 -0.29709963911436166 0.8707583215095149 -0.4601418739390548 -0.9529301903283642 0.09741272923570099 0.24620545022111018 -0.2235267120319384 -0.3647122448563247 -0.9311975140439626 0.8024345532178152 -0.5828632939481273 -0.5339228229665873 0.19407187257079128 0.3321355432214166 -0.8802765027832744 -0.8016614385672585 0.835532411908855 -0.30437063731775704 0.22495330143151304 0.1945793197145158 -0.6229408090230593 -0.5079464421845685 0.12382610139872963 0.9469679154474275 -0.013695743573578056 -0.057469389077819066 -0.1633759605699785 -0.2598990768342635 -0.568654708650767 0.2847869804933614 0.8516366713411538 -0.3876732303446555 0.43664581606561903 -0.9423364676213788 0.6225855531105138 0.4042076426902752 -0.4770522894720861 0.35474712914517514 -0.39017171809010653 -0.872942043235847 0.9644014746152119 0.08238053163076176 -0.7324055898584116 0.992887361880695 -0.5254559885731636 0.6147354002452343 0.9274367620217459 0.8274964452309603 -0.6709371359562248 -0.3991885286581376 -0.8820756678154695 0.9943119426340943 0.016211679364368736 0.672780043855393 0.12273838796682979 0.9014687717607355 0.5946137768225015 -0.9017774777151635 -0.12378665810793343 0.7650764287286111 0.12008433726848722 0.09248647091585793 0.09612758430637136 -0.34115673663657486 0.49917525416992947 0.9755391585229309 0.6177036533574274 0.7888003038659372 -0.9316268478653877 +69 88 -0.0023488837669292106 -0.5685594221775419 0.2731843337402302 0.45053969414890815 -0.3717935803862109 0.2416734690921869 0.9690368254513764 -0.4161004011342251 0.5345562059224616 -0.23791821450182882 -0.4776614950978433 0.8705716974582305 -0.8439362817483427 -0.6791203243803643 0.2798589762994579 0.35127701919445187 0.1775155325917004 -0.5545480946254564 -0.59195843955103 -0.9612796959465533 0.8444681187030483 0.3215408527936814 0.8578285538267694 -0.40374763794383495 0.6212992807311724 -0.041705172971199245 -0.832915905391806 0.6830026466650265 -0.024892695748367055 0.9613919056497182 0.9229007359830748 -0.9085411797187635 -0.23935449969744105 0.404272311432748 -0.47775122848894713 -0.506290297438758 0.550293963140144 -0.17846458672015997 -0.3944448801765752 0.38139129221365153 0.7873076314874334 0.7531907490198295 0.2855973694048439 -0.399642076409386 -0.18425128858457507 0.34147463142802215 0.37163122502412227 -0.27074388032551666 0.1933693845646849 0.06770766540540718 -0.8480185679826167 0.30136824674663587 -0.9941195261056066 0.15586128650528952 -0.28123443489357247 -0.9886763070505702 0.11293810362603018 -0.8794183878591153 -0.6086916818967929 -0.30466244511063567 -0.4181745815172815 0.42614996698302177 -0.49848853978844865 -0.9456640770763332 0.2507325632364239 0.5702188427649248 0.24087005724440158 -0.872019612957176 -0.8322682148332943 0.39714664000719235 -0.9674358265786125 -0.6662616796996268 -0.9223081074532669 0.6676941533270522 -0.917296357182571 0.3483658428884151 -0.2995813134933816 0.009806050771121289 -0.6882665762809441 -0.44452511115292936 -0.8688125448232689 -0.23183724705451825 0.8951123463837756 -0.3558072324673729 -0.14141625155251658 0.5384207234779297 -0.4459838103523084 0.03812619982860199 0.5496574981206934 0.42991310103521685 -0.24231435857164874 0.3602070709596279 0.5784567053193981 0.025939415675184874 0.8998581176464304 -0.1437183381847542 +69 89 0.8396927044954001 0.8111059859107594 -0.14251079254262478 0.2718126186635965 0.9475968482618211 -0.16554129341015011 -0.5273276007433738 0.36500051894133634 0.8303365845725648 -0.12701952950772677 -0.7368084926571834 0.25333581069900823 0.11358201481124075 0.9478335104236859 0.6624789677919498 0.2556169567381015 0.577447660802771 0.9966322168767343 -0.711598865411138 -0.3586229639098679 0.08515706451518845 -0.6630749997699177 -0.32739926048970314 -0.08024820851558623 -0.47499822544222625 0.047973596908179594 0.7364565338392319 0.8935947392866335 -0.793149299218211 0.3834536423646804 0.493331160205166 -0.6484794930551525 0.5365707665912129 0.1426140455304301 0.09914956703022604 0.5390312626001255 -0.6297365880933716 -0.6076853340344714 0.8691826014429189 -0.3318998277375922 -0.005486228319355746 -0.31913029470518484 0.19901099548467016 0.05413313682555576 0.06838840956460812 0.7748905067704195 0.8515387547278077 0.4594053934983666 0.18330255054834654 0.08299819080611415 0.24080774076294764 0.7004778828072582 0.5095720932762546 -0.708191641572951 -0.004378282546089851 -0.2504985203119263 0.2873723385081819 0.4445470837706087 -0.22323797640034582 0.15709837780954472 0.08280355450257737 -0.752469351684951 -0.7572719715372338 0.11974761169348658 0.5952007444319412 -0.9865802969018127 -0.584597793220164 -0.7663338637372858 0.6787636298645212 0.7905979498292128 -0.7017031815984511 0.15855794369851584 0.3998154224082042 0.6739407682296468 -0.9365410148244935 0.7326630033863342 0.7432808484353106 -0.019639516599465612 -0.12896840821037237 0.7336643285686959 0.560148970853048 0.7575616806000112 -0.7459107892102252 0.2931367143486927 0.7466168803431881 0.9144753799200265 0.16112468763537224 -0.2868614814648698 -0.6052292801129331 -0.3294320565527833 0.4268778135920195 -0.5844430633239124 0.7253868965453336 -0.8384681341603288 -0.15142366574892785 0.7752858803023035 +69 90 -0.5450012970010838 -0.3298193929302129 0.3461807664571517 -0.5705940523849629 0.851261209221782 -0.8052789841007817 0.9726404630573129 0.25882417503479127 -0.25060576705413773 -0.21043045375399272 0.36147211848312377 -0.6327280477737558 -0.3954047549392443 0.9986689359406133 0.15051508443716477 -0.10926810783379826 0.7572620147554059 0.6730003434850151 0.39679515488144834 0.5295973567849499 -0.34028390583101786 -0.46760454640239346 0.7567393036413164 -0.4472650108046379 -0.6471581870704011 0.8391728522581401 0.9621309652011774 -0.4884528809832449 0.721516437062125 0.7634482405439249 0.3907498165947254 -0.4058341929892302 -0.09533367111715396 0.8912371601798368 0.7033953845626941 -0.6717694762420754 0.30799119702907074 0.005415242897668149 -0.06755269601031966 -0.994547586798022 0.7486155111351489 0.21296294255207515 0.5328280211679026 0.5286096433383995 0.19115622897906204 -0.8655951959366828 -0.6963127865075744 -0.026521839869959374 -0.1842662260481951 -0.8255567495164093 -0.7539787401287616 0.7426087205170715 0.8389049306815985 -0.8576209797132124 0.08910086738116885 -0.03515111250486602 -0.6248565681397293 -0.8195182706237891 -0.6683109802090452 0.6828258172561117 -0.6946729102099614 -0.39854913925489743 0.6621595704230616 0.9450329665944612 0.4790653973600598 -0.1656188255494897 -0.6916232415151675 0.6557926278698714 0.8617772209373098 0.9086596999286671 0.029691122511837476 -0.18013059982412782 -0.09659754523515063 0.7679513974013947 0.40004336601933677 -0.486197987553169 0.8511713717345613 -0.7812862840268113 0.6811878428685854 -0.09035859967675774 -0.8482296353623111 0.8796274712973666 -0.16843435821662922 0.41128775263462103 0.08514989894591651 0.9608872526054275 -0.7026501602838058 0.6374820081819734 -0.43237364516891197 0.35040176840633785 0.06232596309774441 0.9883070189484853 0.04912047274018594 0.9220881697469803 0.7027288350469074 -0.3140980455909659 +70 49 -0.820967034789629 0.9712361292144469 0.3507362007473973 0.8544086746317301 0.7757180270751212 0.7883452800457496 0.10315921906517045 0.23876149597706786 -0.7297765042344644 -0.5882604579229513 0.9585905963185795 0.24159815976421983 0.20689945167153811 0.7139682428431824 -0.06552418424740925 0.49141765547200866 0.5585872595821304 -0.4266652555857975 -0.46264941439748397 -0.3213954292331136 0.42884472555757713 -0.5229711014036482 -0.42762667674381794 0.7373413542213629 0.27198817077000315 -0.6494799507393147 -0.055492466765334925 0.35115049129333187 0.2950998333503341 -0.15751045008201103 -0.37997639095335334 -0.08863515425961221 -0.23014081969163813 -0.26433065076461437 0.7268519065944916 -0.5695954317662533 0.6362212534837999 0.4247485800307682 0.7075824713396301 0.38952648352994723 0.42299713871455835 0.35528351361647803 0.2570685418978744 0.4738518227992454 0.7730867304466524 -0.32481122396653483 -0.274437921017751 -0.12527073124621513 0.30027700814681135 -0.2872881634704849 -0.45947867475012205 0.5095177819148144 0.9688812089824073 -0.4695075960828887 0.09280796871030539 -0.19731573844491468 -0.308278928313221 0.10738254204540687 0.5133211638325541 -0.37338757613821505 -0.5250830239825672 0.036348356990610675 -0.4626752740531248 0.5996161822944723 0.8794920548745926 -0.21844023509263666 0.04980355907761225 0.5262111670988101 0.8150417921911721 -0.5442638206488506 -0.356184589193302 0.8692526376050225 0.48833169279279875 0.19118701277397276 0.4577121603742953 0.2589556978777603 -0.7340550172622364 -0.04448005551192358 0.6484505405189349 0.549351055819612 0.28423716263542165 0.11110870236907644 0.9120134592514497 0.3087375579406506 -0.03639024964241311 -0.043318739068983536 -0.96564469220246 0.36309519696989945 -0.9417341284138212 0.47356224933478575 0.49252365482589333 0.9744597872089276 -0.364899281037679 0.9342406949758346 0.5565499510157699 -0.0080676661780954 +70 50 -0.927788169598859 -0.9809189617635317 -0.6704084791503104 0.5776082999985195 -0.20463843898698109 0.3378379484817613 -0.2551445062646711 -0.06083541214595867 0.6543322361347872 -0.06708384910340048 -0.6345105156231297 -0.9847174843477566 0.8250800802704539 0.23338269021666824 0.8805793845877938 0.1854479949358585 0.6951131697445228 0.5641394003821563 0.3698398293131011 -0.7498196327594269 0.8141764312193598 0.48649638014018404 0.3371842730891119 0.2589763738702424 -0.43064538869065916 -0.4757134210028544 0.2930884528361597 0.7399279589161445 -0.9563372663533938 -0.003003515789904432 0.8231844654357596 -0.19290562534179667 -0.5562943301851542 -0.26928962691877123 -0.08086894441648673 -0.7645599986769154 -0.5999496559759796 -0.42107955924913965 0.6628516242949221 -0.263175997501238 0.08596288619861592 0.46487869540651316 -0.42113100758448185 0.5810238672834271 -0.44294215049906627 0.6720869658978874 0.798225842055974 0.6265863434921279 -0.9388432710385879 -0.6573262671231257 -0.058391565520370836 -0.26297471707387254 -0.6362637349919031 0.23129143635291527 0.02401158357223432 -0.7254757809548171 0.2358137581846642 0.5420471323149147 0.589874570639813 -0.19013374656615634 0.6399335210868333 0.9569685117720208 -0.4826756980881972 0.2226530266801947 0.5911533166324134 0.7101735069529092 -0.6887276053115696 -0.08640476072791059 0.8768205880967517 -0.4061547051096588 -0.939062737077405 -0.6817251449342343 -0.3553765854503008 -0.7574553681585292 -0.24938958829313318 -0.03350241578845092 -0.7792734881030123 0.18602063677610015 0.6666819763962979 0.1651751592603674 0.6491943354935505 -0.48327871316084847 0.6700877081459278 -0.053769537064884965 -0.662966572945564 0.3282799230771971 -0.11285755657223895 -0.7685842617253698 -0.35663329459290427 0.8659656847373614 0.19893308845538837 0.17573104000911433 0.2729522467911578 -0.21133597297412243 0.6580677912242736 -0.7729412474119601 +70 51 -0.8937888547976844 -0.5785641344255668 0.9907704777444784 0.20619758204842165 -0.12172359799667665 0.18753145915106173 -0.9999973881331912 0.30877860377098054 -0.844599557291791 0.7187700378863782 0.9853978044159901 0.8308456666439687 -0.2974081946102951 -0.3495296976321094 -0.4243972132748228 -0.16963788014533998 0.14782606990694358 -0.3354901217160473 0.6723325058880516 -0.9505905019425911 -0.030226591679205495 -0.7818035783593287 -0.056437666615391846 0.7964690362685509 0.8757302460494756 0.7762455375602788 -0.9103083673935517 0.4103457360577156 -0.1888792393776635 -0.4147740774537165 0.7078678814133645 -0.32633262874892766 -0.9019322766914677 0.004817907800343857 -0.8645090101597264 -0.37918722203589894 0.8289998747183756 -0.4203005618161191 -0.8126230568652661 -0.7419164817677923 0.15736322527442104 -0.4069188663541765 -0.8136104340295616 0.2951881189277674 -0.3461965478138129 -0.19019688564420245 0.26406212305007704 -0.8681438380684869 0.06879700028549252 0.31446615525912835 0.9819370656358204 -0.6742010500018556 0.29740055844472035 0.16444883658423626 0.6915542966851087 0.5460354613970513 0.3346360513315867 -0.7451438808896085 0.7136760356056295 0.6476160471696495 -0.3150754858978535 -0.43314611076087783 -0.8531135924057787 -0.6353882398309194 -0.1375589783466351 0.5507655180377522 0.44245027801575465 -0.7515362419287401 -0.6586815376521595 0.19836451309061176 -0.8227259550826054 0.2884988908095345 0.1297793869254893 -0.9065500874448538 0.4922573218385533 -0.45542264963316215 -0.23777389709473384 -0.7645614284018247 0.40239398832086226 -0.2824447035808879 -0.8341550034808076 -0.3370967738135273 0.3804335015249074 0.7136069280985349 -0.3472124416082998 0.4946579785217793 0.6600750668525353 0.2800434939979328 -0.9603923587507512 -0.44643854178739883 0.7383318606692926 0.4731810518249526 0.012961983307679503 0.10653003482318812 -0.885711791262817 -0.03067475971398048 +70 69 -0.17436867324811156 -0.4389089443262453 -0.41344848760031416 -0.08537552901162204 0.4433354670239176 -0.9857023354931262 -0.86030520254914 0.038709964705123 0.10152347391798222 -0.34831840564069494 -0.6936178280964709 0.7670342829702959 0.991679051497746 0.3472996601469933 -0.8496887860283495 0.30166489689499265 0.829679245068996 0.27867988500115604 -0.487613952565916 -0.8361165968907884 0.7571457163724145 -0.4533262559105995 -0.9265009011481835 0.28060232374783856 -0.40385100541604424 -0.7897831903895232 -0.46719078699959904 -0.29709963911436166 0.8707583215095149 -0.4601418739390548 -0.9529301903283642 0.09741272923570099 0.24620545022111018 -0.2235267120319384 -0.3647122448563247 -0.9311975140439626 0.8024345532178152 -0.5828632939481273 -0.5339228229665873 0.19407187257079128 0.3321355432214166 -0.8802765027832744 -0.8016614385672585 0.835532411908855 -0.30437063731775704 0.22495330143151304 0.1945793197145158 -0.6229408090230593 -0.5079464421845685 0.12382610139872963 0.9469679154474275 -0.013695743573578056 -0.057469389077819066 -0.1633759605699785 -0.2598990768342635 -0.568654708650767 0.2847869804933614 0.8516366713411538 -0.3876732303446555 0.43664581606561903 -0.9423364676213788 0.6225855531105138 0.4042076426902752 -0.4770522894720861 0.35474712914517514 -0.39017171809010653 -0.872942043235847 0.9644014746152119 0.08238053163076176 -0.7324055898584116 0.992887361880695 -0.5254559885731636 0.6147354002452343 0.9274367620217459 0.8274964452309603 -0.6709371359562248 -0.3991885286581376 -0.8820756678154695 0.9943119426340943 0.016211679364368736 0.672780043855393 0.12273838796682979 0.9014687717607355 0.5946137768225015 -0.9017774777151635 -0.12378665810793343 0.7650764287286111 0.12008433726848722 0.09248647091585793 0.09612758430637136 -0.34115673663657486 0.49917525416992947 0.9755391585229309 0.6177036533574274 0.7888003038659372 -0.9316268478653877 +70 70 4.7698874354964556 5.407648528358935 4.747969175950228 3.6710645317945976 3.3127925082776795 3.837360497134629 3.9194214107611365 3.035043883228848 5.176092773944668 3.678552619277141 5.585706627786154 6.013432856313181 5.217958849979235 3.832041617207504 4.9563437438661335 3.9056380848227197 4.308985320054297 4.352290584708855 4.270760067913121 5.160919626611518 4.835286831824728 4.597785610076986 4.493497974791859 4.563386999087375 3.756137495069992 6.528238640957245 3.6227228167653363 4.394255175766795 3.337229554014931 3.9589616547807323 4.0207656680618005 4.436360201741682 3.604928500437325 2.7298000467618606 4.0056454684140235 5.750867035952874 4.216399013686837 4.498872508404256 5.2812725222036425 3.457544333490466 3.399483331695035 4.604291042215663 5.160763164044189 3.44626622839313 3.4829192854742295 5.271380953015396 3.2902398379561504 4.248771933370345 4.580718165913443 3.1315657415558387 4.178400987368802 3.890255979620071 3.6603131942100906 4.4580396406596785 1.705884269310413 3.9460360968667096 4.0236002012525045 4.596244848393911 4.351365507375467 4.057672953171748 4.339552937757332 3.2409073609477526 4.272481722330916 4.433466951154127 4.586461653292995 4.145711002985083 4.786733748466829 4.909844079447675 3.9506721558991726 4.328452431799613 5.728311940064791 4.5194858718680795 3.9479012122740467 6.039316592488076 5.321770814367849 4.334875679938325 3.805512805020674 4.217929378970857 5.095315398196381 3.4482304452215784 4.234801900478498 4.285780127260277 4.811573212700662 2.875283067030155 4.472284901741315 3.8544463332187178 5.218317809175334 3.150936449900027 4.702202223337329 4.268379996568198 3.594649111879499 4.595541726953691 3.249489510812924 4.075100691099585 6.508173434276787 5.254825167186292 +70 71 -0.6641089517521341 0.7392958501766884 -0.6970658069907913 -0.566235437406128 0.4123671226231509 0.1979272076135592 -0.47708616442114615 0.5220553152424967 0.4937361422463207 0.5303986885015359 -0.6859125302283069 0.8615551312789305 0.16561160499426086 0.047132761512813426 -0.4978965997302165 -0.6519642761396425 -0.451228278221659 0.4064362295181556 0.03936771443072162 -0.7568072690480705 0.3566756062796623 0.4446044328603047 -0.14744454876304602 -0.07454335838729231 0.6170437013437555 0.9786255042738901 -0.5504956159197714 0.06018226563215645 0.16232161336619733 -0.3752979753394381 -0.2661107217124312 0.6585396598338658 -0.330432309864666 0.2621954068348227 0.9660027129899864 0.9386780142218287 0.04926489138703749 -0.9727795591843793 -0.11040812342892803 -0.42389152668946095 0.513999136730217 -0.5032105694720534 0.6275112750089558 0.26327539429180713 0.15396263337313276 -0.8007742162926368 0.6305981426681666 0.6721771949245479 -0.3999041593564243 0.3063979351099173 0.33416987776360996 -0.8007884496101241 0.03350813846117173 -0.5905892184404897 -0.012125273584659091 -0.9720232716528918 -0.7911639828283983 0.04891441744631497 -0.555576647084278 -0.6626871311723708 -0.8353017858904339 -0.3191937165486405 -0.31163539997822576 -0.16065369203016044 0.35374566857890644 0.23744251883791545 0.3419648744885728 -0.9761230758169517 -0.22091845705269675 0.5778125449628109 -0.953158272153118 0.10800252193210436 -0.07292213469568032 -0.5629264152220825 -0.5867799607377511 -0.9328918983550745 -0.15989285036786516 0.17857319938163285 0.7542392440928731 -0.8578350408188729 0.6988938934494102 -0.6365958958503508 0.7482701152170175 0.2128902776680468 0.3727324533816543 -0.9732943014345965 0.24038413829073613 -0.08105572398522809 0.32811607026063894 -0.04367839811796426 -0.5735270793237994 -0.6226747852479895 -0.46164606117096096 0.7060450746584856 -0.9011280663241845 -0.7732091069943294 +70 89 0.13665892257608236 0.4994194179854956 -0.40817003748431424 -0.7970132680915252 0.2405866177711511 -0.13919373830241777 0.6551459597068372 0.4779157085654433 0.3644466692469368 -0.13557830861005793 0.9703028244337857 0.9721274716123696 -0.5423458449604177 0.7598379076843014 0.4651974728665891 -0.5776298714624366 0.008039662417736793 -0.9455260878603073 -0.7086114741425105 -0.19744177037286814 0.2442066947256405 0.9860555208280064 -0.12452165605513321 -0.7609387793562259 -0.7664286338216295 0.5955810032768989 -0.4116382707491797 0.32256898418807434 -0.23540888006686367 0.6653599347092518 0.04612899874648768 -0.7582428373318062 0.41298672303295136 0.30533074567515217 0.06381956632390962 0.5582702336588874 -0.3350506772814619 0.8756287349368017 -0.8159334860460805 -0.5590166954166891 -0.5742303252645768 -0.300114161607574 -0.6162568429771933 0.07256610896968141 0.5901406357360905 0.8704362661576346 0.5373526303129701 0.1576084210930606 -0.9740942886614024 -0.8082030324440166 0.42254403638341587 -0.4183741976341142 -0.18959755337209283 -0.8367316959155797 -0.16822760052918984 0.004178302736609574 0.06023493876994834 0.14792631110716425 0.014158405990005951 0.4132949840762419 -0.11260711050957384 0.34214166673317137 0.2062519270739207 -0.7059134606010391 0.22117481501223502 0.9643821170939924 -0.9627624244737247 0.38051036660155524 -0.3005008653463095 0.08894448823535739 -0.2901280715003367 -0.7997447312283921 0.2032242560823574 -0.7642988248885687 0.3733535766399716 0.5373036929527022 -0.8979335423531725 0.2189688997820025 -0.6297325692174061 -0.3412412647459364 -0.27908088243555573 0.9559142951589243 -0.27170635450972913 -0.5560215739084682 0.737863025944931 -0.05433949543692185 0.740040421559794 0.06219058272872835 -0.47967647059978513 -0.3229936839473959 0.4842805147585636 0.2358296937270945 -0.07785509500513066 -0.014103079536648133 -0.711787111447004 -0.034687472799649566 +70 90 0.31552226084702695 -0.004394056262920776 -0.04711520824693216 -0.3384910317338736 0.32234082961790156 0.19444459946390502 -0.1327664798824526 0.8430985320207272 -0.6331838109018255 0.3895708483484974 0.06239736703106358 0.7110998968721318 0.8677075295021035 0.78400761416202 -0.6520812956189233 -0.3166186298086755 -0.3725798345077824 -0.8555396711939842 -0.22817626775565913 0.5953274129783497 0.9465718415593112 -0.6640101130954033 -0.8976717292981999 -0.8745774978977929 -0.2949469151940822 -0.9390929269031894 0.7701994897294273 0.3653679544442543 0.06659847294469112 0.9369378077767667 -0.5267444418515126 0.9436970716468136 0.2320724309936648 0.5742098626243299 0.6486504709251053 0.630355684997886 -0.7314495720442524 -0.0720891910045478 -0.010022403677436342 -0.5209209345363737 0.5896763593637198 0.678563402112063 -0.5871532495614309 0.3320751686023604 -0.4915081157230441 0.7721634313985755 0.02551559420701288 -0.201601701106652 -0.6473016896567967 0.4201091040001772 0.6299170831802248 -0.10201482860426436 -0.02624245186379337 0.560803694666218 0.004621786791437321 0.1100829498050695 -0.4634595347333419 -0.5875055145242012 -0.6719083665407004 0.12331195328563638 -0.08770744680687859 -0.05015288942240126 0.5625667891471515 0.7781050439417061 -0.7949703427280186 -0.8479834759149074 -0.6443600395998088 -0.5729630483230626 -0.41495050565220404 0.6545437802083256 0.43223884895809594 0.14182995160903844 -0.78884360628855 -0.20182256636290963 0.6664644601838965 -0.11123497973691499 -0.26840042396893415 -0.9840469992492522 -0.18831946389337162 0.04303950284922076 0.6377542221755303 0.7154389515726312 -0.0015076223014820478 0.3258727751172923 -0.6118288822388076 0.8715903984588311 0.28055518739093466 -0.38374674750780846 -0.26670047037354405 0.5191570468010478 0.3649407581381998 -0.685733572798402 0.10213155927763684 -0.74069183403458 0.5711633655621873 -0.9576271770133646 +70 91 0.6794958145026411 0.7111368910990705 -0.8759903931153592 -0.03511325803560128 -0.3074095997181683 -0.03331801814768798 0.281630780613376 -0.3488592738513454 -0.3643090542151233 -0.018892074601364772 0.1928951235119336 -0.02111365570992496 0.6839936034019702 -0.29540044806224564 0.14801483148271344 -0.789483651081913 0.5008213015996257 -0.31764477637044397 0.633673067664908 -0.46044298908345116 0.30357177442160266 -0.1011169468120845 0.5975528085583555 0.7159275470860897 -0.06996330265232276 0.8414211332030168 0.008681167160999426 0.8508543584862405 -0.04828453936076249 0.848771326536643 0.0034487525462958413 -0.5647939739494201 -0.692561270076256 -0.26136435195416086 0.06911484421506442 -0.178017346005225 0.09407074995092368 0.45965220547911145 -0.984079803617603 0.29080726528919065 -0.15088056145671547 -0.7773824725035781 0.06321948953543322 0.1592799607488924 0.18203375464963 -0.8309998303193291 -0.33797669468871505 -0.8493439845460948 -0.23054588209128934 -0.048880326270444474 -0.16908834580639542 -0.40428620184513187 -0.678308869743852 0.9739522436419445 0.15671707749812458 0.12021835061770347 0.7119465641021714 -0.6642995728444765 -0.8808377858993652 0.7565788947687986 -0.16727651110980735 -0.30544156020960056 -0.46574416220286174 0.5813654105840007 0.7334627100829085 -0.19888930087828682 0.1541621519555214 -0.26388298882137273 0.275191555435218 -0.38875577481024903 0.9139842959251767 -0.9339206263410209 0.9033888599891449 0.9560729479449226 -0.8160376684197082 0.3457309962674153 -0.298558210490548 0.8024032763207061 0.7430077002142532 -0.709579987925461 0.12536836843678478 0.2136850186734831 0.28305685602848585 0.04074691976950673 -0.5225995191118702 -0.6901034560879242 0.49513603136173345 -0.09422381934641377 0.5830819004645407 -0.9258386354623545 0.19022074260755972 0.30183403292606337 -0.13873980360789684 0.5797999496372455 -0.8638352164283489 0.9211319825452677 +71 50 0.14904663090741832 0.3594661561451027 0.3616736288446907 -0.7445786670503034 -0.15987445766810215 -0.9236853911156351 0.041460019802099124 0.9417039482570402 -0.7160157357983439 -0.6284613358165811 -0.9394159047465347 -0.8520873335209322 0.2067204496328512 -0.02683066834228831 0.2811841649184901 -0.2073270964629481 0.7163391993956298 0.0839865362236667 -0.9699577865003075 0.9657860152710187 -0.9187971678897688 0.6891935919785264 0.5951825717665384 0.2990697859735636 -0.2570936101634753 -0.6786849366486851 0.7383634895916895 -0.37487588633201874 -0.7239466180932583 0.10493636135233286 -0.19780785954480917 0.5422690607148077 0.5912090088640074 0.11757549717007443 0.5420321279103268 -0.10506930622116117 0.7891623481686096 -0.4334797516261748 0.5084381330496164 -0.795716163469794 0.15344266244446159 -0.9649349760189843 -0.16046373890042664 0.35217512223729597 -0.194082801276648 -0.5777110494044759 0.9823082601736364 -0.4748720089002274 0.16410400916747792 -0.9832246095028312 0.7247559638129313 -0.017584036797133606 -0.17517133071383117 -0.9901983983735807 0.12219649556639145 -0.8538169579607942 0.32437883507721677 -0.2930025873133466 -0.9349570430832725 0.4616114827570297 -0.2553489809646552 -0.33464705799191385 -0.2862775266424691 0.2961791038852153 0.43344676796767856 -0.2392749032714656 0.6240008831957915 -0.689137376236926 -0.4715897441786896 -0.40823005452140304 0.12477514372786946 0.7009196472824832 0.8272116420977009 -0.04873553052045665 0.6947354386570708 -0.11823649766975142 -0.108787389424017 -0.17797471221713668 0.1921859453712167 -0.6156144641915684 -0.46321784839238633 -0.9821971103810592 0.105021822881743 0.15818088852447398 -0.8707639291548488 -0.08929078292564174 -0.5755156301251176 0.04475563185017206 0.28320929976296916 -0.5489900672056516 -0.13500351624108342 0.8898405191147227 0.4944543711465703 -0.37988820120537525 0.935919165263601 -0.002588815946659384 +71 51 -0.11790691725219427 0.8725657131503224 -0.5064507416150925 0.3914723457146656 0.23793474377407464 0.5731237718716693 0.6171970221318974 0.2725980793912488 -0.6885653119354795 0.019578474643591415 -0.12129516178889332 -0.11344558068411459 0.29622611202201754 -0.6104452544168102 -0.695756392207364 0.6927155882785268 0.3100949327637246 -0.2160620078834068 0.9724868636556412 -0.028569168949306833 -0.3956980300243691 0.7175746794251128 0.7073694816672154 -0.8281842630664957 0.6247947223009562 -0.6616802513888149 -0.6835302476220169 -0.16224081473316754 0.1139415671073074 0.9812305993164103 0.9015689244441494 0.9593864810550887 0.8623134833636756 0.5163876241012142 -0.26200106841555115 -0.09154798724630919 -0.8888343400126781 -0.4197619170787341 -0.1540548355889264 0.7388772416209388 -0.3255512488314456 -0.25171467973001205 -0.884868725773013 -0.15477026612739975 0.8843925302795583 0.19079009475069642 -0.9109886084084877 -0.6072363162376055 0.9122846095096591 -0.4009373232007143 0.6198899888768259 -0.3359880402758084 -0.8945874928533881 -0.49956564081001176 0.7588067375512437 0.6511775020316815 -0.21407054691324578 0.6526769646185697 -0.21206901054617933 0.07265628278143432 0.4283748695696141 -0.7043543009988247 0.8709948884895453 0.3256574582152154 0.7043497075853737 -0.8683614406191369 -0.24877154347449348 -0.001426537255348137 -0.13035208885598948 -0.5891322349355956 0.7984608153782522 0.9560931270446127 0.781487446911654 -0.5666122501291457 -0.4551718110122569 -0.4875107117462272 0.07132439013317216 -0.23130219108201477 0.2954237311126957 0.1635109965002166 -0.03385386504110066 0.5052766080794198 0.16701645358311046 0.7989367801291447 -0.25594109652453056 -0.04291196963140731 0.33584281391161386 -0.7695135343950348 0.7301678834805858 0.8880278341136083 0.20547618764726594 0.8949884894508005 -0.6163231792671786 -0.21072643004282487 -0.22474996940948322 -0.6735696853144932 +71 52 -0.39978631186652214 -0.7266129203147056 0.8061453313032376 -0.5074600204995234 -0.34216595824061935 0.6245194695506544 -0.7997406149806443 -0.5470718089486628 0.0841158658199288 0.6561448506730632 0.1795725376203423 0.6137552030273932 -0.7547380914236992 -0.03899929628427423 0.6171574253042731 0.39206712951315503 -0.27605774054504306 0.800422243880268 0.57939024235208 -0.41873865276719924 0.6434100149620046 0.9943677049124957 -0.6208019146188324 -0.49505889391461655 0.5685163732292211 -0.8747979527724752 0.7078053083388178 -0.0657400334271745 0.08147314355184654 0.6161916942044863 0.8652378624832842 -0.972997365706183 -0.09224986008352865 -0.496215487289579 0.25327161675798515 -0.7638118770888807 0.7865294325210772 0.757158628819607 0.4888001693429649 -0.20058463250183722 -0.7743561506985623 -0.695595744021454 -0.43070528833762856 0.45909269837445144 -0.6207201801424134 -0.037035726508540145 -0.7251658737522222 -0.0617352098998758 -0.8046029299753441 -0.7126038774082013 -0.8329009104128786 -0.8341128035387655 -0.07011136234730198 -0.7119749615944446 0.21138739767389825 0.46343299463834375 0.559938052693675 0.5117398566315028 -0.13209863750675188 -0.22038531290062346 -0.8641932844093883 0.4763556580812698 0.22321735740762616 0.89655774548479 0.7238829328858596 -0.04121849285045576 -0.42715330092938864 -0.35756142366307797 0.588743702571837 -0.6260776949562026 0.7598689241040302 0.8953160451581483 0.8950944705946289 0.5338516221255174 0.22670605372077723 -0.7765404733124326 -0.7510226456122995 -0.1726167825825251 0.5610951838851161 0.33847978145615665 0.7606289164954352 -0.7382952312053135 -0.39335082404571464 0.2714060449617812 0.6915069604830757 0.0005097576790473735 -0.9152721729332156 -0.1829092157681944 0.5288361422064491 0.08176161516915492 0.7879779217201612 0.09321881004760502 0.03124475424718609 0.6453789823770872 -0.9171321109199151 0.6464614292291397 +71 70 -0.6641089517521341 0.7392958501766884 -0.6970658069907913 -0.566235437406128 0.4123671226231509 0.1979272076135592 -0.47708616442114615 0.5220553152424967 0.4937361422463207 0.5303986885015359 -0.6859125302283069 0.8615551312789305 0.16561160499426086 0.047132761512813426 -0.4978965997302165 -0.6519642761396425 -0.451228278221659 0.4064362295181556 0.03936771443072162 -0.7568072690480705 0.3566756062796623 0.4446044328603047 -0.14744454876304602 -0.07454335838729231 0.6170437013437555 0.9786255042738901 -0.5504956159197714 0.06018226563215645 0.16232161336619733 -0.3752979753394381 -0.2661107217124312 0.6585396598338658 -0.330432309864666 0.2621954068348227 0.9660027129899864 0.9386780142218287 0.04926489138703749 -0.9727795591843793 -0.11040812342892803 -0.42389152668946095 0.513999136730217 -0.5032105694720534 0.6275112750089558 0.26327539429180713 0.15396263337313276 -0.8007742162926368 0.6305981426681666 0.6721771949245479 -0.3999041593564243 0.3063979351099173 0.33416987776360996 -0.8007884496101241 0.03350813846117173 -0.5905892184404897 -0.012125273584659091 -0.9720232716528918 -0.7911639828283983 0.04891441744631497 -0.555576647084278 -0.6626871311723708 -0.8353017858904339 -0.3191937165486405 -0.31163539997822576 -0.16065369203016044 0.35374566857890644 0.23744251883791545 0.3419648744885728 -0.9761230758169517 -0.22091845705269675 0.5778125449628109 -0.953158272153118 0.10800252193210436 -0.07292213469568032 -0.5629264152220825 -0.5867799607377511 -0.9328918983550745 -0.15989285036786516 0.17857319938163285 0.7542392440928731 -0.8578350408188729 0.6988938934494102 -0.6365958958503508 0.7482701152170175 0.2128902776680468 0.3727324533816543 -0.9732943014345965 0.24038413829073613 -0.08105572398522809 0.32811607026063894 -0.04367839811796426 -0.5735270793237994 -0.6226747852479895 -0.46164606117096096 0.7060450746584856 -0.9011280663241845 -0.7732091069943294 +71 71 2.121674941821129 5.974824928153776 5.006094053438525 5.472236593873841 2.975519925975031 5.026994141277646 4.43565531814245 3.9931153507130164 5.500089013905948 4.084832277870104 3.9333066091298816 3.2720930712085337 3.2383823447867885 4.06536056593361 4.7783068734457235 4.271108392220791 4.162563388419295 3.7237783603598222 4.524113088425366 3.482005482420707 4.3848765164996735 5.309716129109863 4.672203036533669 4.125736219460302 2.926027244216046 6.180481555736181 6.534473869122589 3.3708257420598686 4.548623649328419 5.2673895485723765 4.38489186762133 5.635353727509694 4.8327245402134436 4.90147442672695 5.628920956455376 4.631718362395276 4.718843461058233 5.04581624076878 4.804725017205575 4.78538260896373 3.810926994142765 5.974013758797603 4.808461371287027 3.9576574839935166 4.419969550830087 3.0664805744135393 4.634719805818391 3.6379630849990745 4.5425815296467045 4.366741596691011 4.668780928127873 4.839384221738206 4.520204191570778 6.664610288011804 3.052995003485459 5.471866698941658 3.627310890814547 4.794359761663089 5.057892597196697 3.254690529498572 4.251182182996332 4.974117839854065 4.428993199327566 4.170852830475813 4.660068783521783 4.245226154218887 2.7538549852242094 4.296749967239409 3.354001687051057 5.326962966146004 5.847626925267395 3.8760903728777807 5.675779367023395 4.940229599768096 4.457818285132018 4.8158975055179685 3.169312922234074 3.2057809736965863 3.7456392244826295 3.335761453429805 3.8768670612412275 5.967585543844416 4.180963479509706 4.22286168648249 4.114871287614591 3.8493573591258627 5.534173746158209 3.960539854068844 4.113673232191377 3.73362917364107 4.01800610281914 4.901264873805788 4.849167499223011 4.500393216177807 5.463822562981359 4.438776811903726 +71 72 0.07776805097364736 -0.8967983268485111 -0.5581342844354393 0.482525384463139 0.09670459769289352 -0.3419945717638484 -0.6485966615412491 -0.4239253333084936 0.2171104726234947 -0.5224120205431104 -0.25142579855202807 -0.39241519396927615 -0.2477475592813294 -0.4976111206024836 -0.4905389480824396 0.2514272727149949 0.3007696276953542 0.04517234545128335 -0.019116761782275615 -0.3753144466236742 0.8072528369393777 -0.816829765307322 -0.4642648361183297 0.20871055344819678 0.057725711301090055 0.6889932269315222 -0.6753090075557227 -0.4993011141400463 -0.8745377381437374 0.7975598984988341 -0.009094387755637756 0.7068707654633992 0.6980548045730433 0.6753082832231843 -0.9062091192252959 0.3632538917667736 0.2649233781519196 -0.5693779934810439 0.5294410261469009 -0.901944500519722 -0.7641625814765367 0.9855524634510122 0.9947092292177766 0.6836459991504578 0.6581063392717179 -0.18580203907267867 0.4281740334232349 -0.853397410245567 0.43301928850055704 -0.11751716521507505 -0.6499186227798486 0.9099022203426885 -0.6926471019045872 -0.8285867950680945 0.37725565663809246 -0.8286347600021255 -0.13551596036331381 -0.5294722425979559 0.6254205638189478 -0.38412814870045087 -0.29848055015780006 -0.8201874166567877 -0.40829515841861697 0.5916807618679749 0.24506342185829322 -0.7585869276689452 0.07966933225314587 -0.41879789795455813 -0.42335226437215967 0.8991755203801173 -0.8788522375978669 0.09480801637026137 -0.6111170142323319 0.41653364262315895 -0.41219734434581734 0.4436687606859375 0.3191731957920425 0.4626070336231869 0.6494433348266346 -0.295077274288698 0.8601175092779572 0.9771408962637744 0.26313155023219115 -0.5565361292959681 -0.7927674882244826 -0.697046165187206 0.6696258145710012 0.1691227130802755 -0.6821139808914172 0.1410583538883221 0.7782531693229406 -0.907277642490939 0.7019992483260318 0.27993354455346675 0.2569437010980524 -0.8509577023251602 +71 90 0.14331914980925275 -0.30740104811842217 -0.9811110962841383 -0.667814973021351 0.5342288333000746 -0.9140861403535705 0.23213286893000729 -0.08443999135059488 -0.6257964697457863 0.11121664319500502 0.6300923497175495 0.19890581676697772 -0.5463226046274527 0.5606647999804422 -0.8941458943255405 0.9995718124406474 0.31976391853659436 0.5136759411991276 -0.5740944995610251 0.00260962064937198 -0.29935080397717795 0.5255374490150195 0.8287313175226036 -0.8861211173390946 -0.10424851004946523 0.6595465531433742 -0.7745557436425303 0.36130194673474914 0.7265567895848417 0.7236426135452827 0.7983768412024528 -0.152516487829516 0.7010087201500992 0.6578488183339963 0.7277195136280938 0.3367830905128213 0.8891617326365633 0.34612633572338036 0.36043951677444097 0.12359492877028155 -0.24422324036623233 -0.58886838511367 -0.05272917128898125 -0.24271241559676215 0.4590764006817567 0.3629341794481449 -0.03590371336571341 0.45214958538249017 -0.7973841343585049 -0.4167445253113007 0.34040498354325455 0.32573172523368 -0.6885250723293854 0.9927722756734607 0.29548031679855224 0.8498993188761521 0.597455915881058 -0.5160517838866225 -0.7054799767373441 0.18757475697425785 0.9462658936757289 -0.7673026955561806 -0.3177186906925529 0.33656943471505185 -0.13507863851913648 0.5429814840979121 0.6225804042779586 0.7415813218139449 -0.3407440747604049 -0.2874325022642594 0.6212067740445877 0.08954940798650401 -0.2768863461507216 0.6487638913387663 -0.567644396771142 0.6830307083463445 0.10101886767292112 0.40344888478355223 0.4958276813210558 0.7002852956255863 0.02949111470232957 0.17162596736839486 -0.6444202490318092 -0.16447753677231325 0.5371190454585064 0.47069009901214054 0.08069586215422553 -0.6027405044651399 -0.8706762248093634 0.819665494263552 0.029686818757942213 0.4754350182639211 -0.2985604103162218 0.5199378490791695 -0.8501928810168164 -0.31870473262081167 +71 91 0.004748168926361984 -0.7025937931566475 0.027685832488858253 -0.7136426809834988 -0.2187014175528077 -0.5500427885143315 -0.9859287515875685 0.004363394367035589 0.7453859852549987 0.5518776725012466 0.40193876331965495 -0.039655388730880814 -0.22421870225198437 0.9993007075669802 0.31340709411839196 0.08584326828042355 0.686675345377928 0.1426424980769716 -0.4158577075691474 0.08092534740948998 0.6578474124642617 0.34813229286423075 -0.3540583774141386 0.3777604165748687 -0.2859958410710166 0.6435896527930909 0.47271303631072503 0.9113692978755077 0.3116781070766299 0.5524320709072972 0.773543549634583 0.6702148989370367 -0.6672678702319499 0.7004009013588486 0.4719291401095651 0.8428397006862873 0.38211989808196134 0.8327213548007522 0.8053619302531976 -0.6201688005985113 -0.2860662699366423 0.8150879196777736 0.038502118066079394 -0.0306427118075987 0.0028930563000340026 -0.2592952204860737 0.4527296466240287 -0.21802371393656372 0.1428293704982797 0.6609046989950507 -0.399750976074837 0.5282342904480855 -0.6317428948850208 -0.7417647670703311 -0.32444535268340147 0.2566916952953513 -0.6186417767769963 -0.5243023377624523 -0.8477747257775876 0.4198375715097662 -0.15943608106528484 0.5891462226907254 0.7475258051490383 0.49756703040879735 -0.7464321774454197 0.5792430689287316 0.07919987939261608 0.6746074670024256 -0.8206449084486296 -0.47812914099060855 0.5655953383661836 -0.5512932335488159 -0.6952348272394604 -0.7777670160100894 -0.5667551692383441 -0.6354318287650129 -0.807583707487068 0.5843778248009506 -0.1916562058140412 0.16050238332284716 -0.2666439952529347 0.8616523796384035 -0.8617621236150854 -0.8615398254091715 -0.024676830991027243 -0.47872192064616703 -0.9507535313084048 0.8869874406717908 -0.5221385562834384 -0.49419051696416205 -0.4290562632516397 -0.15256480283221685 0.9005131356380842 0.6364962114078905 -0.17712581053856846 0.10964553897183205 +71 92 0.4731509440749089 0.5948795471772916 -0.4039958781779214 0.8038703765804209 0.7062362886971394 0.6055302920374621 -0.6248552930098787 0.41810593268034224 -0.9574438771820892 -0.7501001708614559 -0.45820047400939923 0.08820452011143631 0.2621968819929905 0.9787684652555562 0.8205189682306719 -0.3133656129194191 -0.3362109107026363 0.8144765032223253 -0.572040308656474 -0.3367185907830006 -0.2796732591658435 0.5379730359254904 -0.29675383020978496 -0.49171816766569654 0.3218672313294788 0.0362472585128184 -0.9342516517988702 0.888980507599124 -0.623063565338392 0.880254044159853 -0.4951162384440897 -0.7950269131486087 -0.45837657408659216 -0.4911390259298354 0.8416113585202232 0.7423840602800997 -0.3199359578410117 -0.4168621584735994 0.9877091309775663 0.89842247990034 -0.009159807376311502 -0.18096105342001056 -0.9224834635183949 -0.992392355298948 -0.5931121152882466 -0.20711862828408178 -0.09919066523797615 -0.25975228472142575 0.7930616406422455 0.3880788598498106 0.04719418542707765 0.24354018313604975 0.954407176326129 -0.8102728864647502 -0.9482120344934029 -0.4608926500549657 -0.07112265509733784 -0.84903399200614 0.5909885157955426 -0.17632735860040394 0.0699835815976313 0.15723989279297124 0.8611128162706094 -0.8576259446127019 -0.9817714323134585 0.26348097269066595 0.2646654373929933 -0.2602436370444481 0.3529614877784215 0.9020852656056719 0.6453381974504229 0.08998006093566424 0.6529898525213484 0.8316148361721443 -0.6458838017579334 0.28473634857398 0.16235032562017127 -0.33782883725114354 0.16474931746058386 0.15191369254468556 -0.5770869447220695 0.9156868753432685 0.3909709036174063 -0.362923902556624 0.14150982730288342 -0.21510239386192853 0.8499494962192438 -0.6516726457047668 -0.16662704685422258 0.643783879618935 0.1720213352833999 0.11183511103168842 -0.6340098549720261 -0.24154828186102106 -0.583524660370391 -0.622954858318115 +72 51 0.03433497825118237 0.5796496733250234 -0.32285511507463105 0.3631970502434416 0.37863245756112374 0.8092361484478823 0.32168960812933034 -0.20602134268981853 -0.9238711131860087 0.1675927904454393 0.47374914699485293 -0.26909843095799 0.3418365635254419 0.7952601401332351 -0.39748455078825295 -0.8896788187909401 0.3559917965894548 0.29694442047994896 0.9122415870696878 -0.9870425456662426 -0.49514896177787837 -0.3748433929029875 0.21120369087669788 0.0612055295803966 0.2896422199829318 0.8443071125605703 -0.033475387175844196 -0.48653717805508645 0.34930570452039333 0.06288368876103512 0.4511157100493237 0.06812049028697742 -0.25309019663661836 0.3031108565841669 0.42599616712512645 0.4588462412865961 -0.4680238481233858 0.30025958213958726 -0.599270350327747 -0.8731322662993839 0.21698911204871285 -0.7815801795846464 0.3902450128762789 0.5724260719941154 -0.16938379084252464 -0.5315406818954573 0.607722822415339 0.480633506235441 0.08476957367429949 0.6414567156859203 -0.031656613246749954 -0.427712775675843 -0.5993046110840365 -0.33492548331260674 -0.7407585688927025 0.8800917627927101 -0.018645915390763435 -0.7545300748455959 0.5524242594469928 0.6102848893575561 -0.8388892299075359 -0.2924244740546391 -0.7363293596702805 -0.899608106484481 0.7415896683750041 0.16617343560437448 -0.12872071974238963 0.7970771785172002 -0.10051458205193486 0.22241867157844908 -0.26885979743516053 0.8937207930475881 -0.861343588864276 0.37637503861056043 -0.9598255648947285 0.11002266751939671 -0.912549728280581 -0.2811641423309761 0.8259865857505215 -0.8040630974008682 -0.7131043680416456 0.10723196884346953 -0.29393550989262796 -0.7716647064001017 -0.06636876745964249 -0.3125521945912524 0.4424499640716517 -0.6594990893635122 -0.24855320613528087 -0.0162955631368642 -0.8039202768100033 0.8367815684351725 0.26733089836365953 0.2451670982507379 -0.10802604306682628 -0.639485954473076 +72 52 0.9409822723015844 0.9679809702352957 0.8478621503173864 0.8247836609512114 -0.6109078479225818 0.31201337270086626 0.43927761173127045 0.7388947539527346 -0.7061489344602976 -0.012821409652923332 0.13338937217750835 -0.9293641021338872 0.3479586220269948 0.24964073446676904 0.63787429096874 0.6167418201685926 -0.9338877052458074 0.7413691759328687 -0.842986592674412 -0.016359280521672792 0.04150752912994049 -0.19712118482137408 -0.6427549778341126 -0.1653551818658363 -0.46809087421108897 0.9013577051226755 0.03654769516316181 -0.9489908218719765 -0.4478388528223114 -0.8938038285134708 -0.730779914836315 -0.04645281734736506 0.5703463219104468 0.3346005194793942 0.4077094552692555 -0.3782389014305203 -0.13758966941646378 -0.8723684888884911 0.3490926815522104 -0.7620557875904994 0.07704989492877656 0.12698699922795686 -0.061452074256249656 -0.3846427723630088 0.39992020720938504 -0.8041799650431849 -0.13539330010259953 0.49910712177563177 0.6250166676064135 -0.31943595158315374 0.6068642628074963 0.675635096770876 0.49697156785754704 0.7274649458464995 0.38897268913038796 0.916935115502177 0.31536420332309656 -0.54305085858331 0.2457294678763544 -0.5235964172265495 -0.08697303241441978 -0.47569431163141385 0.4837362574948296 -0.7699724155054333 -0.02266603202793016 -0.09533047383415605 -0.6026854946682036 0.6132481496040061 -0.9923613252917327 -0.8751405776162615 -0.17124648346492943 0.26026750170018875 -0.4807829506164576 0.7689171272405213 -0.5412228955187504 -0.6631505021021018 0.8089235955382321 -0.25515934945433894 0.7477459918202085 -0.5493813863030779 0.1805519668181894 0.06060757454601551 0.5806575828807554 -0.4124951028347166 0.9054839597325413 -0.33065370003427663 0.7476528420623239 0.03484095598175396 0.821014661134372 -0.10309428065168791 0.8014292394835523 0.7372113791917843 -0.738633891350065 0.7305390181774329 0.8230472642578561 -0.4668137096864662 +72 53 -0.6863753049002197 0.933222934558323 0.6128885081935616 0.2882707218181537 -0.6299337343398563 0.5340463931329569 -0.4599985545150034 -0.04470415865256405 0.38221892316829886 0.11641578845357192 0.9896069000490604 0.14174489120781342 -0.8166894985604332 -0.06512367836600785 -0.7076230044829217 -0.4376831812058468 0.5198435312066876 -0.6258408367019117 0.7415411808113075 0.9241616368145984 0.8112138126014983 -0.06430534152027478 -0.05435697970192899 -0.2468609518422904 -0.15596887527665615 -0.7933667485493483 0.42555273111723135 -0.23112631668411732 -0.6341644464843794 -0.8290807856423317 0.574956634208875 -0.4735248282654647 0.7374781238928512 -0.7911432710925266 0.2315367357591407 -0.6052075139158479 0.9906903839790895 0.27236545623727415 -0.5971000065361851 0.7654776218335639 0.3706689888219674 -0.9697370169600901 0.7778012298199224 0.5537560173797831 0.7841702274329978 -0.3824450426409791 -0.751774565100721 0.05157193540872229 0.729401939857657 -0.24541159941752522 -0.8443370851578873 -0.05543444873028225 -0.06047065767960258 -0.27500267121863176 -0.28545716530953325 -0.776166235520465 -0.5719632926654599 0.3240406824815014 0.20165430204070334 -0.18103189009709997 0.2661092585955658 -0.9891586955969744 0.08822469660507082 -0.5552948056300109 -0.5436273319159113 -0.0465824819260916 0.4278022367254446 0.8603202659682336 0.6426700982217664 -0.8090332535986784 -0.463428380465956 -0.8261205308345685 0.12314991009372234 0.5624517259233432 -0.23589522886839864 -0.7195518337982567 -0.3619458504397235 -0.4718927835057576 0.08051009025872857 0.11400615101762712 0.7329634373150553 -0.8501109637717066 -0.8539573845053907 0.24697038873323707 0.3230494850658432 0.022853065216763113 -0.636353171497896 0.27256876211631975 0.13380864977215934 0.39118278910386994 -0.546987408908167 -0.3167173931600449 0.8457703992979819 0.45106459554489886 -0.49075791660456414 -0.22897290930227565 +72 71 0.07776805097364736 -0.8967983268485111 -0.5581342844354393 0.482525384463139 0.09670459769289352 -0.3419945717638484 -0.6485966615412491 -0.4239253333084936 0.2171104726234947 -0.5224120205431104 -0.25142579855202807 -0.39241519396927615 -0.2477475592813294 -0.4976111206024836 -0.4905389480824396 0.2514272727149949 0.3007696276953542 0.04517234545128335 -0.019116761782275615 -0.3753144466236742 0.8072528369393777 -0.816829765307322 -0.4642648361183297 0.20871055344819678 0.057725711301090055 0.6889932269315222 -0.6753090075557227 -0.4993011141400463 -0.8745377381437374 0.7975598984988341 -0.009094387755637756 0.7068707654633992 0.6980548045730433 0.6753082832231843 -0.9062091192252959 0.3632538917667736 0.2649233781519196 -0.5693779934810439 0.5294410261469009 -0.901944500519722 -0.7641625814765367 0.9855524634510122 0.9947092292177766 0.6836459991504578 0.6581063392717179 -0.18580203907267867 0.4281740334232349 -0.853397410245567 0.43301928850055704 -0.11751716521507505 -0.6499186227798486 0.9099022203426885 -0.6926471019045872 -0.8285867950680945 0.37725565663809246 -0.8286347600021255 -0.13551596036331381 -0.5294722425979559 0.6254205638189478 -0.38412814870045087 -0.29848055015780006 -0.8201874166567877 -0.40829515841861697 0.5916807618679749 0.24506342185829322 -0.7585869276689452 0.07966933225314587 -0.41879789795455813 -0.42335226437215967 0.8991755203801173 -0.8788522375978669 0.09480801637026137 -0.6111170142323319 0.41653364262315895 -0.41219734434581734 0.4436687606859375 0.3191731957920425 0.4626070336231869 0.6494433348266346 -0.295077274288698 0.8601175092779572 0.9771408962637744 0.26313155023219115 -0.5565361292959681 -0.7927674882244826 -0.697046165187206 0.6696258145710012 0.1691227130802755 -0.6821139808914172 0.1410583538883221 0.7782531693229406 -0.907277642490939 0.7019992483260318 0.27993354455346675 0.2569437010980524 -0.8509577023251602 +72 72 4.006711858724325 5.448448848259824 5.772823992822895 5.219591355338936 3.846866088130826 3.8896503637692317 3.6656058974431946 3.8828416669971855 5.106258910903309 4.09526951314163 3.2442422950739456 4.449089697031244 4.026509751326898 3.667074041175565 3.6137656820376893 6.207664478558514 3.8088112451098928 4.409408438090974 4.423608529842975 4.816925767111036 4.388799608018298 3.105594664553613 4.881453996322841 3.724744834559778 3.710383320527631 5.550696359847337 4.1749677161235015 4.173098559080446 5.610613946942999 4.186524858278441 3.9149375034332135 3.4569962465940067 4.247427229410967 4.500488895046792 4.834648157618847 3.537652879554719 2.78598854553509 5.042426850261448 3.4131717124267085 6.37421983795247 4.054865091055136 5.318225036409636 4.467926155239958 5.353600876852074 4.4446495508461705 5.261552572342291 5.2772544868149165 4.424937899200426 3.938131308817172 3.8620892072519624 4.454017297393604 3.9152336700477886 4.4698721344070265 5.068603508393657 4.751961022171324 6.117821881089306 3.2036211391175318 5.662458967418617 4.126924038950197 4.392270967970678 5.55687721435101 5.432106182188884 4.867584652420925 4.667408085031128 4.601455932501958 3.0914268703802006 4.278994880742826 4.687680759083882 3.7954149550834346 4.923935416652144 4.292802274090167 4.161593002635812 4.279100743722514 5.676954070317326 6.121594995372539 4.683901257868678 4.8231335746601705 3.483837304380817 5.1218098796349505 5.116893992810196 4.274059945616935 5.043016035654267 4.429343070567061 3.158595306275053 3.7700965445238612 2.51355312826115 5.149619950568541 3.980918480408278 5.309818784184863 2.65478476591226 6.156605024820202 6.244559730666406 4.463230140594131 2.544169483625347 2.5489863749214225 5.699506219331657 +72 73 0.3560739521766201 -0.2819845176209299 0.7975108813148073 0.6097614036432832 0.33447645133507486 -0.18974204022168029 -0.0506523452095371 -0.867745388136995 0.8410089545784019 0.8904678831527806 -0.29679309707286805 -0.8678726547618318 -0.34741784966409095 0.262443671316952 -0.4340575858676634 0.5487564776083071 -0.31011301807311686 -0.11519128054292227 -0.17652482125906777 0.14732338948358947 0.20952057604570196 -0.7239109092983618 0.8463139439806271 0.657239872190984 -0.7047841917282527 -0.24527791971098778 0.5726154386981326 -0.33132444126943983 0.5352711747251613 0.40575891888307014 0.5063951232790751 0.10031170524252442 0.5401540686962625 0.199834493648541 -0.14444687833420344 -0.25011757800538703 -0.062182070376694876 0.4207305840274216 -0.7224261487160577 -0.2984281274074809 0.9086008005105566 -0.06497524923402742 -0.0374884427069464 -0.3090631528871661 -0.4645511194871563 0.6807724683221956 -0.7130041294414042 0.9775446574302571 -0.7562727330586831 -0.27938691183397313 0.036028098668748676 -0.19212936981363948 0.7681806979074861 0.9141050558980199 -0.5167487442710301 0.2874187973211795 0.6235718501675276 0.6336088060939302 -0.38806233075991514 -0.33962739639556894 -0.6036988716826592 0.9968873814074946 0.48102429954023296 0.9678951722755622 0.3841229632983927 0.7909468131145074 -0.8292493836683121 -0.5625315843489336 -0.12156814849411246 0.20063542469285145 -0.16334650352445768 0.3590500231569578 -0.8341869867683951 -0.9709116698921754 0.8447503447291891 0.9221577173489477 0.08646267573471622 0.3220461359237905 -0.6029014422956378 0.5209267992183431 -0.7002526871562884 -0.8135155939795224 0.9160774728201639 -0.4985817174174152 -0.10427412342822318 0.2064607482939529 -0.5145971385693682 0.23286496056283168 0.8603289045183375 -0.6267320291177305 0.7312892484844087 -0.5149795400159596 0.3742574549822342 -0.02906901819551666 0.18745619621197163 0.9543495670155699 +72 91 0.19005856242244934 0.0626411149730648 0.33656009045990376 0.8904007703171988 0.13266847569946294 -0.7176130316326086 0.20711310110560532 0.11956699020917982 -0.706627823798301 0.9442551657077634 0.29446886052297905 -0.41094552571562226 -0.6054448861182526 -0.7431602897194185 0.19994639659413704 -0.9900970491108976 -0.582567068259094 0.4970538942414209 -0.047193141745705436 0.6159730042270266 0.6921782941829082 0.043186277187356126 0.651931396355113 0.9127460166520136 -0.6061025927781514 0.28828747150409373 -0.3233912829362675 -0.5107846470384012 0.8428361066676266 0.25155091237508476 -0.17875458337883998 0.6586840241500329 -0.08310049575038181 0.9466673455652994 0.538239917530482 -0.3943807715225127 0.11733565746030994 0.9090636219381427 -0.21373212019293697 -0.9635803059293997 -0.8914151647095034 0.9607033811195103 0.013041555663079185 0.977785319657922 -0.5708055992203618 0.8487447828424559 -0.8780376167541428 -0.09970955251649838 -0.5681605076319685 -0.24542594936104134 0.43265763125053036 0.9458422728846783 -0.31384261112708867 0.4885171839270743 -0.51325405171189 0.8504195870954832 0.8656229598115035 -0.4559187298499876 -0.5353870433175538 0.4377607743611043 -0.8833404428736837 0.7456226222868081 -0.70616248385059 -0.027926765984685353 0.4147527620586715 -0.05916210927126375 -0.8772562836725786 0.8805800311176659 0.03208359004254735 -0.3435120209433833 -0.4983233150895743 -0.862787663873795 0.2261460390647818 0.6317299737348574 0.623707846734034 -0.5420901481749112 -0.8484882366837814 0.2329549299461502 0.1923708107727029 0.8582050914791095 -0.03095719637874872 -0.16157765724871687 0.4127620368579099 0.22705460578803227 -0.39413941952697895 0.37874860400937815 0.4916220845291135 0.2477096240981056 -0.3602554197514436 0.8605296528886681 -0.7850486582887244 0.9761450401076386 -0.1746737720339513 -0.3854754621486314 0.04486640815911702 -0.8888447627303633 +72 92 -0.7544612628938769 0.6600941748495512 0.4981661510914497 0.702812153158531 -0.10017002360911298 -0.29683660901450426 -0.06149377991871141 0.5086048120849831 0.42377360047971435 0.29241413442561615 -0.022841520191615672 -0.17387067825909974 0.5092906157900565 -0.7346586505709365 0.27315394226256684 -0.6389623961745674 -0.07960185299763478 0.9962000492730796 -0.37755563977032836 -0.8170145178437502 0.04892267565711683 0.37834973734308885 0.4403699480183081 -0.17388551897470883 0.29086439674366993 -0.8146451165833386 0.7845712430956415 0.7681721157357926 0.7975399998083113 0.6581751485211764 0.5706003040939753 -0.8121665666008617 -0.5503426445162285 0.10637394689800139 -0.9550999973387511 -0.6306048137895124 0.11798542439531401 0.8923538295297515 -0.007764746333916328 0.9033290256451076 -0.24678969492413616 -0.5676187051809873 -0.6492820808792157 0.2435720523576712 -0.9968833320063437 0.33747365693886944 -0.1252981530583086 0.6839033357609943 0.30570336034251144 0.8650075550304412 0.3403394509361872 0.08795587403015115 -0.1702554683311608 0.04834810362250952 0.5468196798792384 0.28606755123612726 -0.5562775772536221 -0.9061711420842107 -0.21796290275079322 0.27211818786776165 0.625025709783958 0.441939762043855 0.7588663581930453 0.3094888714342583 0.5133349728205501 -0.4504536261161245 -0.3946192523482348 -0.13632679729889663 0.2811201588550307 0.8576762916587353 -0.03209855025545827 0.4907476246400877 0.2814557334612309 -0.3850790037169516 -0.9850059059727536 0.11070178613844406 0.7755762670680082 0.3203604442173804 0.7185429844119704 0.40575139271443916 -0.11257523571699557 -0.6359667680715169 0.012927072590263933 0.22708321100453577 -0.07972481132361797 -0.09252642365061403 -0.5430282822343164 -0.8908845386194808 -0.6424436609031765 0.2143712843268859 0.5921678565555737 -0.6776178648964013 -0.27557494711336616 -0.2884701857994245 -0.11700432593579135 0.8377996823765006 +72 93 -0.45741468471810887 -0.38240263989481305 -0.8108539937133858 0.09134716815341859 0.7078396509214335 -0.01284377802245773 0.998221889003936 -0.7279552551786193 -0.5395068566854797 0.8079283959628671 -0.31421999278146906 0.4973701109071198 0.037019761425016506 -0.251024617672138 -0.07095434269941703 0.9009967291328083 -0.6106018906942177 0.19394406791216734 -0.9561973850772667 0.655238945912217 -0.7859071413762695 -0.13665470316531425 0.6696060637496839 -0.7059271756915562 -0.6135971199431096 0.1626037569807144 0.7511580641984648 -0.06914487802134972 0.15556525267315457 0.20614110523470974 0.5457998039764693 0.2409060715459974 -0.38779053046417866 0.414522990783903 0.8858573361519484 0.35049360556567466 0.5434996718042795 -0.02162536930509762 0.17096112778827033 -0.13164147757307232 0.47878487853477925 -0.0077414171809755405 -0.8392333160340766 0.71373084236999 0.379998528138767 -0.7571453846794765 -0.756355768168842 -0.4576221724960443 0.1367980565399327 0.8217083929030145 0.8775638322243107 -0.39195937979602213 0.6213951105216624 -0.8199788177868137 -0.4952370587168984 -0.989872017446837 -0.07340337284145693 0.7385284320254393 -0.8573789445724695 0.7398924285538373 0.9609362850265764 0.5688855001313056 0.23843780420647143 -0.5373164327761153 -0.9687232358228492 -0.27127321352716693 -0.7161816477880694 -0.03925605623699835 -0.7794116396036881 -0.3771781646201682 0.8187082848183695 0.19021717028510676 -0.7083637560429845 0.8404978636431961 -0.5371246034765684 -0.26221953293888856 -0.25555401600147576 0.19922564033241463 -0.8639325256994661 0.6770754504235774 -0.8606775188180806 -0.6325958151538331 0.9526460009292579 -0.1209387109774851 0.8705460556005613 -0.09594687425019677 -0.8448442399859779 -0.7640646729485514 -0.8013596664269544 -0.20359464047810616 -0.8938545915492355 0.7841749089821817 0.9308409799944872 0.037063152889657225 -0.013872833959985176 0.781974793601506 +73 52 0.1511870312035084 -0.5013402187187441 -0.11070282935280695 0.5565076021793653 -0.031017179821680063 0.538345738386868 0.9488503354084492 -0.9587646369640328 0.13315182619662624 -0.983316934477309 0.8028305012277437 0.16006421109039293 0.3124204020554766 0.2167411643089483 0.7985060828744726 0.21883765396246613 -0.5597913963871632 -0.597377358135567 -0.5599299002201914 0.9347113015579822 -0.5619419154268486 0.32624157392569986 0.26152453981645496 0.4883606457921943 0.5758193290889202 -0.7489399317676637 0.9043491187570591 0.03560792015442882 0.7079948293665639 -0.4109232581210964 -0.02603075013301792 -0.7280706047977412 0.13467755635300116 0.15990930857369023 -0.9281467740277647 0.7215447362777911 0.16655424715070466 0.40249193724512766 0.8457415476847225 0.11605564414330516 -0.8870209340815258 -0.7297985498552477 -0.25732251460003996 -0.4091936299261807 -0.4345250797994775 -0.4532215418662142 -0.3704842547329965 -0.0965832226629868 -0.9024305248684832 0.4444681181214376 0.30154090559533 -0.13860777931167778 -0.3093498709957341 0.5196759714173258 0.3092731381427929 -0.8752822613221065 -0.8432533941694815 0.675247295219936 0.722634165213198 -0.21717014948495694 -0.22224413211296423 -0.9784085772291999 -0.24420405534613576 0.9581468595469258 0.36197048568346823 -0.8063904765590932 -0.7667242214079484 -0.7792676747437703 -0.21263067052177975 0.4245117009572559 -0.14191528615068827 0.11105853608118799 -0.9804275134895288 0.024969338720222334 0.1846418323225516 -0.9712280382180982 0.79242070685755 -0.4715345077845996 0.22121182739801815 -0.24576132407917983 -0.1462360419044073 -0.6370797628948637 0.46797059667884233 0.8608450021502989 0.12172750261553289 0.7333369964880054 0.1621541686149004 -0.1074892685539961 -0.22004484091284904 0.12602080289346618 0.29646218753290077 0.4116369385830323 0.3562828571041383 -0.502826215003195 0.3801475392040188 -0.6494658837842844 +73 53 0.878014417440808 -0.38384316983902367 -0.23384837638348643 0.9660543362201004 -0.12194876775681607 -0.5878346468461046 -0.6269150053142261 -0.3852422103285673 0.6872180421655398 -0.37015490568103715 -0.013851333595134241 -0.3843901633783271 0.028725109274122307 0.8402736426835276 0.630476912734147 0.517997210691014 0.8384460003313843 0.6604757572831392 -0.3878149767194885 0.29395244755700123 0.026492150366586698 0.9235050113269021 -0.7327469984361794 0.2151831584758459 -0.0011435297720463478 -0.994243520837286 -0.965606946585635 -0.2593847578920796 -0.8269691908650614 -0.39408787490562536 -0.7848899623004704 -0.24062092844384964 -0.07361245759916835 -0.47828643830916073 -0.34934914060148947 -0.9909028996949594 -0.12682623944732208 0.03190785541903107 0.8818407209984294 -0.9534970825611384 0.7612220903290219 0.27791857029782263 -0.9573097511403386 -0.41733559744928184 0.9678061200374495 -0.3022866648168714 0.761658651884584 0.2337651485012573 0.2289480799373096 -0.21415175543087406 -0.16495606196255896 0.02293109440225205 0.42888794903597693 0.8349840323216349 -0.23627768979918584 0.7699520996619342 -0.7798871891809385 0.3260355405849473 -0.4028383332115659 0.8070988570920643 -0.4088199662546188 -0.6948570640615277 -0.12866631894675207 0.4624163996395385 -0.5873187668839595 -0.4635881102277657 -0.42792049281765454 -0.6789057442013435 0.9259051118797172 0.37633216134581726 -0.6335820551457589 0.12318501578235974 -0.465203329412073 -0.03299105227750587 -0.663102089618572 0.137040594234199 0.9244414121754478 -0.6719483480385935 0.080998461388061 -0.6094255400078747 -0.6534389501091462 0.35119467814174077 0.72314192620393 -0.17906896053111332 0.44740127747701486 -0.25007115860398765 -0.9426736636540418 0.7484662240149149 0.5032947906973579 0.18276669228556996 0.5455084303115545 -0.2501222494887123 0.07094108952032818 -0.3009062996752181 0.6140374014349708 0.650157033981726 +73 54 -0.8520866231920938 0.0722241605522973 -0.05737173461288059 -0.2517378816046416 0.43359535222398105 0.38751799720317415 0.106329354859237 0.14895801994160385 0.4520797250067703 -0.06336151082944075 -0.2897002517870233 -0.327885964259123 0.5938713552283361 0.959896113921453 0.15365184939586718 -0.752474785714371 -0.7822683459935529 -0.8306568115720676 -0.20711424921893573 0.3211117732839748 -0.022707787844741256 -0.11013708331726013 0.8809281907380251 -0.3227614054554888 -0.32583193036112745 -0.6867740583194812 -0.6619408144865151 -0.0011762355817903636 0.7622770327750696 -0.48556729954540145 -0.024119130654486787 0.32518730248143557 -0.7991321059256964 -0.9377620419592203 0.4434567918052186 -0.4011569999480271 0.7995337959938555 0.18954631566574576 0.7503490986945232 0.5523857402238463 -0.7294382852653922 -0.6690297003915207 0.6865675052630305 0.9886431954977448 0.25478283164172755 0.11488415035635868 -0.8133113050647265 -0.9479468275659786 -0.998974136367268 0.9895453658050637 -0.6208597057892324 0.7747375581568134 -0.27864718733094684 0.2785494798780763 -0.9440256750253468 -0.25540821760982624 -0.21679633807924903 0.4548573719324982 -0.07254421057119065 0.8948904833697906 0.5963723918550332 0.74870200870146 -0.8054138288341461 -0.05712090462367514 -0.6354525351385854 0.5516611371120084 0.5386506357873533 0.988795857959269 -0.10236490190858172 -0.9721053056932183 -0.9474386324549178 -0.4725020032239724 0.31823517618966024 0.6527864115823032 -0.023221777435814328 0.762002390899033 0.06778892389917579 -0.5112706834144709 0.1330750031120187 -0.8518466310804922 0.23087130126488997 0.5876871235299896 -0.39633046521321247 -0.6915511944862187 -0.7395344792115679 -0.6904664263383444 0.8047786591326851 0.4806262288233327 -0.4921762650840249 0.08752102536735662 -0.5524230362008911 -0.13759815957571164 -0.6638138999964207 -0.3083832231113921 0.6347481283766332 0.0596612816912383 +73 72 0.3560739521766201 -0.2819845176209299 0.7975108813148073 0.6097614036432832 0.33447645133507486 -0.18974204022168029 -0.0506523452095371 -0.867745388136995 0.8410089545784019 0.8904678831527806 -0.29679309707286805 -0.8678726547618318 -0.34741784966409095 0.262443671316952 -0.4340575858676634 0.5487564776083071 -0.31011301807311686 -0.11519128054292227 -0.17652482125906777 0.14732338948358947 0.20952057604570196 -0.7239109092983618 0.8463139439806271 0.657239872190984 -0.7047841917282527 -0.24527791971098778 0.5726154386981326 -0.33132444126943983 0.5352711747251613 0.40575891888307014 0.5063951232790751 0.10031170524252442 0.5401540686962625 0.199834493648541 -0.14444687833420344 -0.25011757800538703 -0.062182070376694876 0.4207305840274216 -0.7224261487160577 -0.2984281274074809 0.9086008005105566 -0.06497524923402742 -0.0374884427069464 -0.3090631528871661 -0.4645511194871563 0.6807724683221956 -0.7130041294414042 0.9775446574302571 -0.7562727330586831 -0.27938691183397313 0.036028098668748676 -0.19212936981363948 0.7681806979074861 0.9141050558980199 -0.5167487442710301 0.2874187973211795 0.6235718501675276 0.6336088060939302 -0.38806233075991514 -0.33962739639556894 -0.6036988716826592 0.9968873814074946 0.48102429954023296 0.9678951722755622 0.3841229632983927 0.7909468131145074 -0.8292493836683121 -0.5625315843489336 -0.12156814849411246 0.20063542469285145 -0.16334650352445768 0.3590500231569578 -0.8341869867683951 -0.9709116698921754 0.8447503447291891 0.9221577173489477 0.08646267573471622 0.3220461359237905 -0.6029014422956378 0.5209267992183431 -0.7002526871562884 -0.8135155939795224 0.9160774728201639 -0.4985817174174152 -0.10427412342822318 0.2064607482939529 -0.5145971385693682 0.23286496056283168 0.8603289045183375 -0.6267320291177305 0.7312892484844087 -0.5149795400159596 0.3742574549822342 -0.02906901819551666 0.18745619621197163 0.9543495670155699 +73 73 4.66301773616853 3.31866618232951 3.946719732626633 3.869612639705407 3.4191273947212633 5.459926730196584 3.4651872151191405 4.958104211034569 3.7283583904275526 5.363697414672995 3.3996646330788165 4.137698459422821 4.9815591466062035 5.243006464526627 4.515869250802755 4.088608489974311 5.141644736723591 4.758692668238365 3.6208583572825397 4.764784163349932 3.2822382679431312 4.364210309209496 5.16513260586065 3.1383001812234657 4.697594388275359 4.748893950870935 5.594772529640193 2.548819136099879 5.280562837317263 3.595223732104208 3.831312388021658 4.060254718396812 4.870492730692528 3.9221845593594526 4.598637025894147 4.088322373960338 4.425250131891254 3.588862642779638 6.07092099871894 5.190201169634253 4.81708476822717 2.8861512051640634 5.172920398439689 4.610861986834156 5.015640497435264 4.329288557614366 5.6770898518957535 3.511170396380532 5.414016951879574 4.7084983314742495 3.5204136054441793 2.636283032460315 4.702278765141298 4.968825214714385 5.821632609419663 5.606542884570987 4.487310291018333 5.107175456415005 3.689205655700314 5.648995834875116 5.210583582771756 5.3707488414515705 4.511936361291463 4.741616287370603 4.553763947168015 4.565550685970225 5.536903378737222 5.491716745268345 5.060637760235416 5.226136857516482 4.079826041423579 3.2147036595071246 5.499398752994342 4.432966326021557 4.179832251264276 5.164256672211642 3.759730363816568 5.113666885288033 1.9448826112315263 4.916390617226417 4.747410953750027 5.784930725282769 6.019929604279877 4.515685937504319 4.021252527288198 3.420494026316194 4.523433246151049 4.746250457737555 3.9185659183375003 4.204718310631405 4.611243340154106 4.153825628445915 4.429963336676808 2.9753381860688517 4.158386263275747 5.456827341819343 +73 74 -0.5212384232877743 0.22408683043027833 0.03738759791236812 -0.556101844055862 0.3946127793354379 -0.10372284751134253 -0.38456491768211687 0.6225092546408173 -0.25713210890997074 -0.33772709735744555 0.618850141454822 0.2667689610883839 0.6832726111733409 -0.6247994443747935 -0.011432301074078222 -0.4524214770184247 0.8001655106473913 -0.6138970749908765 -0.2820283289159542 0.4576724921300972 -0.2351061667391856 0.24376132146667717 0.7059742734790915 -0.10069612672947947 0.37750291650144074 -0.28236773392614944 0.5717930759339589 -0.3906637398150248 0.8854589339505206 -0.021958872915252003 -0.35782155591031706 -0.28928909243953194 -0.657391563772272 -0.2248410917827457 0.2167426750530952 -0.26096738255118357 0.06882287383510377 0.5976516477563103 -0.008337179273322226 0.3707775931294799 -0.10983293676142591 -0.2518695115082725 -0.8830082959114454 -0.17861248555019826 -0.20500564910192298 -0.6775306567426966 0.32062404208808504 -0.6308490913937363 -0.7037817737039225 -0.2673216720343876 -0.942055520316466 -0.1261689720135739 -0.2379166375891646 0.8654909415123164 0.6230383372783526 0.64003759700699 0.3193945466187098 0.3552759378128256 -0.6550940623156969 -0.22654606946202072 0.4768386854826161 -0.24758550523797362 0.7228248304961737 -0.055175188557599286 0.03873532903841781 -0.09970746871289693 0.02705942943219375 0.10338571264772756 0.9749787598451054 -0.8513086348842032 0.40165762363077206 0.4844312705861926 -0.9442077075254072 0.8670704074035496 -0.8793699759945113 0.5987200117754652 -0.04168970678647588 -0.9624576973734724 0.06562379056108592 0.5739943746300464 0.6378910497193988 -0.7283111128408073 0.9755449894523553 -0.46575699182984365 -0.3364743211452734 -0.28544590105933754 -0.14615351642857632 0.8252287136062129 -0.41762882951175073 -0.3720231432982446 0.9558023448306554 -0.8478496767032386 -0.8110097628808752 -0.39021738175761356 0.7251714817797186 -0.7483281641422184 +73 92 -0.5409430208882509 -0.9168861737613259 0.8788404554128355 -0.5538206405946111 -0.1608012124190008 -0.9431346106772338 0.3521495737548468 0.7082647823652288 -0.6446071052193969 0.6402793157075213 -0.10511114614812689 -0.7055041178536399 -0.9886307713541673 0.7704472603640027 0.6636182119703502 -0.221889487137511 0.47715972232490755 0.27140293362907286 0.07664059519843303 0.9071449695376206 -0.24872266628852024 -0.6939679498454014 -0.3361338070455617 0.014686705674502587 0.5660401770563206 -0.3089344379591319 -0.16977986335572748 0.3897423156721951 -0.15386381873342359 -0.366482304932928 0.5531904325268204 -0.6506521885275078 -0.7415443635092784 0.36688059951848473 -0.35749491787399834 -0.5824726931836184 0.5187178955325749 -0.38455429813075015 0.41017837078166997 -0.8433167505644754 0.5170994850454012 -0.09187866021126223 -0.46772927541602605 0.9166591145757661 0.039363026262347445 -0.8280657646532177 0.9591173954529906 -0.04631587986615204 0.5184392087781011 -0.5297585457860903 -0.13604512208945496 -0.1130951852362101 0.7390237527566486 -0.37837874011531625 -0.7486094327117161 -0.4951641669837372 -0.6975359192517157 0.732778909677654 -0.01034760998409845 -0.7148370977088632 0.5512233268225843 -0.5043866998807287 0.6465505484228922 -0.7523571417962367 -0.5740739714334824 -0.9031683625292088 -0.4424585358240476 -0.5010305686868617 -0.9637852929575557 -0.9668997908588128 -0.8212468701042133 0.661098418633999 0.23215031835494826 -0.9490524634356525 -0.5680747920333498 0.4904341052160843 -0.3879767776936327 0.9846021042069457 0.21435600927295106 -0.850767356350387 -0.19193745437344378 0.1586293646433432 -0.4821688453826425 -0.4233652039632596 -0.8892523675100239 -0.40681480194026776 0.2814445616272918 -0.7518522914654941 -0.4866212168380786 -0.252507082932657 0.46715477309925335 0.2687585121139564 0.26025759162795703 0.3014855538648278 -0.9600958907025847 -0.0007447103975644076 +73 93 -0.7915762389021144 0.6987427768953103 -0.14804220115615152 -0.20682729142730483 0.5307472151560357 -0.9332708059835397 -0.3849966304983039 0.4390588439006309 0.2942525997368821 -0.8924434842078204 0.8043392030969216 -0.5902876983304925 0.92308913515983 0.43139633175140335 0.7506704160320563 0.007831121332937396 0.3371159134401396 0.9114569534604964 -0.6605664850472064 -0.8395481419476123 -0.985694222009807 0.6379383073818443 -0.4269882285323525 -0.3124742522870114 0.4338688669535411 0.6476034508881143 0.8577755170924786 -0.12339275485665824 0.5378903338144438 0.4496048241123132 0.6569562921094863 -0.7091912545356789 0.7987341517566835 -0.7096554276094491 -0.8997353723149122 0.3200079300248464 0.9655132067278527 0.7495858249316676 -0.7421513630521517 -0.6042875040762974 0.3765158476581667 -0.21862685847743069 -0.38672465651697374 -0.08655053248161582 -0.9032758533454412 0.06794124174842753 -0.5979934154184949 -0.16490535539393214 0.3016177468383243 0.8612809037014952 0.37090048506176343 -0.33182296818327384 0.9301663519387526 0.40656684810573074 -0.6994374310188014 0.8068012479603643 0.23937642075074406 0.8209649072834537 -0.9849147890928951 0.7943915360465039 0.4694966292095901 -0.22076685023541742 0.12291764355654311 0.2812800214074922 0.3604967861436439 0.3606015376299925 -0.7819380046967919 0.5958962661028726 -0.2855286896526541 -0.16566698913919575 0.013824218364839158 0.22301951488524718 0.6816569411255189 -0.13014967976424985 0.44910654803135097 0.44721034676310456 -0.5808906234865197 -0.5360129856553364 -0.4116401798764544 0.13079151921850962 -0.8398067769348911 0.62981506352325 0.347959254465368 0.8854649341217076 0.30392115075890547 -0.12267793038599595 0.4725645049196696 -0.2783141373661968 0.20751542519774047 -0.9887898435087319 0.18414912397158667 -0.6339642151911471 0.9995837433636798 -0.21072781989802358 0.07447105585953695 -0.9422258007457898 +73 94 -0.2799593006674981 -0.07141645464385404 0.7935662271400792 0.019181465622810867 -0.9477587662978377 0.8215935574488855 0.08967788555010103 0.05606640283284481 -0.20560169107696558 -0.4654429461300347 -0.4001600473764946 0.08651972018069354 0.4130387341245396 -0.7743082827154806 -0.8740950169013717 0.746119792312717 -0.19495918746937613 -0.6986988176617999 0.6193543449376826 -0.6146232201723327 -0.8551604425899031 -0.689047226735507 0.9185985259058289 0.5204007837364253 0.8869639199004713 -0.2695916159270171 0.2878768570116479 0.2689009131482869 0.1179795282510041 -0.17830970628385323 0.18615756600169675 -0.4963778841317239 0.5102978928652337 0.09071666498765096 0.630932805604314 -0.2719502675439238 0.7772069539496957 0.01835554572244824 0.7919385151132552 0.930494912830448 -0.23822096613542976 -0.5224510521874601 -0.7862568993192578 -0.3500617386591167 -0.9942611627517937 0.30014035201486244 0.34080938809988925 0.1376459128572709 0.39164660437525867 0.2822397712831646 0.6912186893702978 -0.42793982010210185 -0.024740652717918588 -0.45954755443194917 0.9199371767527333 -0.9893399782682197 -0.21575545094120474 0.23799252788707892 0.04698492010250188 0.7266561467677572 -0.8986132708036008 -0.5602209353864114 0.7684336140436847 0.9542186795577197 0.9501609590770064 0.48066552061589873 0.8436501217480035 0.8285873035364268 -0.9107302335589496 0.5749402729908502 0.37342482599408355 -0.6769771792314891 0.2850267089508274 -0.3636608410497517 -0.4997592208106352 0.6692985496548598 0.04888404799199875 0.645125342029335 -0.024539739243579106 0.3723548598921904 0.8530972015890756 -0.9169232514525756 -0.8399623424000209 0.13083852675498897 0.30895734976445555 -0.7131203085724338 0.7203312328338773 -0.7846189889811506 -0.12228869746880267 0.9805215030771381 -0.07366948295833398 0.31743700172477984 0.3466640941885917 -0.0013940786152619733 -0.22090480320713612 0.46390269236971626 +74 53 -0.07960692747819298 -0.5288566340117509 -0.6571654842337771 -0.590888132520752 0.015030578218563573 0.2546821675616142 0.9713114594151082 -0.7708857449313959 -0.043110167179621905 -0.25705851301155414 0.8688519627520244 0.8837240950979144 0.7479742210874687 0.7558645984375121 0.8265086147206848 -0.9600659767711441 0.001442482197213879 0.8531886592560971 0.7602110460912845 -0.5573413343204663 -0.42399501167934095 -0.725140890276321 -0.13578538373973803 0.08124411484929328 0.9988262686701632 -0.1847539805736622 0.2568404030818139 -0.22834921145329634 0.3753538235451672 -0.20604642987342214 -0.5871932887892568 -0.9500549480127736 0.6133992114820701 0.8734408954786601 -0.14723621582698954 -0.3104324875981088 -0.21174276773254586 0.3392737419943379 -0.7811471116828932 0.9987364660666893 -0.5792522059137866 -0.1911922088094551 0.12513400533041108 0.9257949936017016 0.5685692787589247 -0.4215433709506913 -0.18797852614406962 0.6346156630458046 -0.6498945552770783 0.29762824399107957 -0.6078719817158649 -0.43797398039462876 0.5521631467623793 -0.1080991129880986 0.9160808309924653 -0.2854396227191225 0.4912591797107215 0.638672989172028 -0.6930183612583032 0.5994144581344998 -0.5249221109431634 0.7414882255956488 -0.7185017980374819 -0.8509957798871775 0.06368990264642771 -0.840870956407676 0.42241965973911966 0.20192294200826355 -0.8369889669989745 -0.9922353017649059 -0.1496799494024439 0.7352528670906495 0.2558934044524286 0.8465399150321928 -0.7232687264575566 -0.47668109083597665 -0.44558075425905996 0.420778745278761 0.40256929024090926 -0.4976200127721728 -0.09197125641670278 0.958017600544864 -0.7159035182649482 -0.2758139551559633 -0.25243367385257187 0.5173215422205923 -0.32182606907856703 -0.6989522136606838 -0.2118671156215297 -0.5555232687828979 0.5120907392084053 0.2219858236520309 -0.4177692142375684 0.14989080894173434 0.4257996844425649 -0.6151056311029668 +74 54 -0.2621580027156212 -0.9552615674966103 0.5618718993828162 -0.1185580894250815 -0.7108876590548203 0.9397060582801786 0.7305371256950075 -0.5782122391951727 -0.10165706013610643 0.7648227259138793 0.7396569956456889 -0.443080592962531 0.3634711803257247 -0.08546310257541978 0.06072964786355439 0.42420281696690143 -0.28422172585538275 0.986693327338291 0.5983990349009272 0.8483568122114082 0.3221516229008028 -0.26435343181249404 0.3444749516125585 -0.11817607989281576 -0.7823892487256576 0.6560143860471266 -0.6645925094304328 -0.9270180469538853 -0.9656409023061108 -0.8476618661685276 0.6197716941807674 -0.1349651270193306 0.872779876957388 -0.2231548782928141 -0.5301025801996471 0.21499924239494517 -0.43728335445396094 0.4065385222925626 -0.010453377863265612 0.4154439937113372 -0.6312526153151874 -0.3364105112066711 -0.8106891365794908 0.7771797745498612 -0.38705534644555795 0.16610022224881416 -0.9264647079687067 -0.7288771495917479 -0.011171248102302744 -0.10646452753549607 0.2074804574503546 -0.996283728025293 0.7418828116947636 0.2788699859840229 0.5108450591620124 0.3801520142717223 -0.1789028338339076 -0.8700872233345707 0.1782773187666471 -0.0800725031429772 0.525670703000892 0.765505594989365 0.5479688948019477 -0.321775666100949 -0.0821710441903667 0.09798409377104389 -0.8364329530319319 -0.35515877214173774 0.14260077992272668 0.645633513394487 0.23594435309726736 0.38878625401141553 0.5213644499308046 -0.171972818633924 -0.6935020671737635 0.23708293685803206 -0.4839836456302049 -0.6334613876027189 -0.11139336603203787 0.4300805149768223 -0.6148665657394121 0.5436519151158428 -0.955550568836754 -0.2068520037570225 -0.1481061200136904 0.4951537566911466 -0.780004732803228 0.8874723662763202 -0.14759610480797147 -0.46693919653515836 0.1877267385557686 0.42084731628986405 -0.8576548520348803 0.39817644185014345 0.8008254419365075 -0.5386995387693443 +74 55 -0.6947116772841821 0.5144123299800227 -0.4297465211333755 0.5275080731358162 -0.26819103765665964 0.09202075414726152 -0.5613741871406535 0.3249919760109983 -0.16230466357832363 -0.9088354194893757 0.15579856639145273 0.5678962793167137 -0.7073476054109922 -0.6519378715070341 0.8318795346058077 0.7337546632374532 -0.5262287201771194 -0.9050574953327586 0.8298609571082081 0.713166919204695 -0.9885836987110939 0.9405073659705532 -0.849172335288572 -0.29419061102211397 0.755261219042711 0.8660377843033344 -0.060780223201523764 0.6752274183373979 -0.11651636747181526 0.39858602309727087 0.7333230858530468 -0.42498308218861247 -0.7276777036058646 -0.8616669438335556 0.9672763956921306 0.15809959627581294 0.6313472415505321 -0.21153704563880016 0.12629472995760294 0.06724916413089188 -0.8370105758039383 -0.4095585376420918 -0.822564950507432 0.360979487304413 0.09870463378415217 -0.16291010138764372 -0.3337034439909705 0.2680268198559337 0.6417618244612198 -0.33810002928059424 -0.32492153321157735 -0.4744163505072265 0.5140000638071691 -0.4844971217442109 0.8852077000091052 0.8579246740934334 -0.5018829755375236 -0.7822405922880904 -0.35053363832526063 -0.15392465766106112 -0.682271591468292 0.6822168620154623 -0.5907177705352773 -0.824175828349385 -0.9659429683730827 -0.4437044691337497 0.7355506200821031 0.8752514556263762 -0.3456072690783669 -0.18910118898326855 -0.383045997165699 -0.3101761231225406 -0.3898833547408542 -0.07769178203014726 0.12437134685541285 -0.0763116107373829 -0.3084793192535771 0.568195436890621 -0.5037287750986197 -0.06469421857489843 -0.6488159866355012 0.0808965446928891 0.27669119160320177 0.33642272637581083 -0.703388519808168 0.8951306740305343 -0.31035657584694953 0.7589407584099592 0.5858810927124234 0.4715487681144337 -0.8915333075592311 0.44902380636006667 0.3160415127072025 0.512689704278869 -0.9440928136616356 -0.4220710437857724 +74 73 -0.5212384232877743 0.22408683043027833 0.03738759791236812 -0.556101844055862 0.3946127793354379 -0.10372284751134253 -0.38456491768211687 0.6225092546408173 -0.25713210890997074 -0.33772709735744555 0.618850141454822 0.2667689610883839 0.6832726111733409 -0.6247994443747935 -0.011432301074078222 -0.4524214770184247 0.8001655106473913 -0.6138970749908765 -0.2820283289159542 0.4576724921300972 -0.2351061667391856 0.24376132146667717 0.7059742734790915 -0.10069612672947947 0.37750291650144074 -0.28236773392614944 0.5717930759339589 -0.3906637398150248 0.8854589339505206 -0.021958872915252003 -0.35782155591031706 -0.28928909243953194 -0.657391563772272 -0.2248410917827457 0.2167426750530952 -0.26096738255118357 0.06882287383510377 0.5976516477563103 -0.008337179273322226 0.3707775931294799 -0.10983293676142591 -0.2518695115082725 -0.8830082959114454 -0.17861248555019826 -0.20500564910192298 -0.6775306567426966 0.32062404208808504 -0.6308490913937363 -0.7037817737039225 -0.2673216720343876 -0.942055520316466 -0.1261689720135739 -0.2379166375891646 0.8654909415123164 0.6230383372783526 0.64003759700699 0.3193945466187098 0.3552759378128256 -0.6550940623156969 -0.22654606946202072 0.4768386854826161 -0.24758550523797362 0.7228248304961737 -0.055175188557599286 0.03873532903841781 -0.09970746871289693 0.02705942943219375 0.10338571264772756 0.9749787598451054 -0.8513086348842032 0.40165762363077206 0.4844312705861926 -0.9442077075254072 0.8670704074035496 -0.8793699759945113 0.5987200117754652 -0.04168970678647588 -0.9624576973734724 0.06562379056108592 0.5739943746300464 0.6378910497193988 -0.7283111128408073 0.9755449894523553 -0.46575699182984365 -0.3364743211452734 -0.28544590105933754 -0.14615351642857632 0.8252287136062129 -0.41762882951175073 -0.3720231432982446 0.9558023448306554 -0.8478496767032386 -0.8110097628808752 -0.39021738175761356 0.7251714817797186 -0.7483281641422184 +74 74 4.849012121461888 4.665115968897393 3.941775560645409 4.858782428384742 5.541645243464806 3.6425019941475747 4.7399978174272075 3.4302391880079757 3.437449173228038 4.6782614433545096 6.090244846266232 3.7792556947528366 4.887616372948331 5.093118566757578 4.9319559510856 4.359953856110836 4.6236683167742045 5.807204328024978 4.592553814166041 5.380836285962534 4.47604974001211 5.362124535817477 4.24384879729083 3.689851501382077 5.008881505644015 3.7246621408974763 3.880549471822328 5.504427461507632 4.149475714720959 3.2792149639947903 4.843728802500289 4.493548919701853 5.95048081473667 5.468132628398319 5.620052717806065 4.283966396855797 3.138786802655002 3.1202905931018634 4.652103689905804 5.30892880468525 4.353840901119744 3.1549613609958245 5.2643051956798015 4.807481621661514 3.5336742144496256 3.3423606007065114 5.1799297201970385 4.05600484634036 4.400967589091604 2.4153650381754996 4.111652125554254 5.518573653291708 4.335393088489189 4.072543576384365 4.645756433520576 4.302768872048 4.288766891546366 5.379830506736392 4.980258297666435 2.476960288432656 6.4838466717915795 3.6284196547050134 4.433314673536748 4.852797679832333 3.007249286342498 2.8737042925128584 4.47957811242186 4.120068691183384 5.533707192737625 3.9892464314362193 3.1391037036047784 4.847056157060727 5.001648633401617 5.283939018896103 4.916008858810275 3.7158030349890065 3.564138247111499 5.1165176937204055 4.03521819149947 4.0947305289735185 4.0227422394848364 5.632881210572784 4.667466409621055 3.0385677493216203 4.296440907968921 4.674691982789484 4.6445421453976685 5.837115134150457 3.9075726979821424 3.9783204485417976 4.742727128433479 5.57102442247145 5.743718653471063 4.960494161365629 5.117648194870786 4.854941574652168 +74 75 -0.5091750561740813 0.9679307638360428 -0.29760775155312036 0.3580111334952054 0.859912031128188 0.4192387937004969 0.39174281133019995 -0.3801745798951237 0.008691211104210561 0.365777966430737 -0.850742397005521 -0.2820955465170789 0.17511835539931386 0.3604612796078497 0.7212335236769258 0.13793749070835148 0.6137688244941539 0.3233611727386807 -0.6428465568195492 0.5491801550085229 0.8092355128248603 -0.9535679806218704 -0.11738710571012922 -0.9780251492605345 -0.7551592320258713 -0.049356844788877474 -0.47040480523833716 -0.6732805267396342 -0.672263472438432 -0.018883451682407904 0.28500751034986527 0.6916572701617691 0.5842766387216989 -0.6113548127503508 0.569383785423448 -0.29647650200677966 0.04493524998644016 -0.02710272272492964 0.9728377912287778 -0.8538664793580437 -0.152000100945211 0.034604377358635974 -0.3448150584718397 0.152950816668171 0.05910403044028478 -0.4953139644048048 -0.7511301886024302 0.7670772406263233 -0.6175212810275483 0.08358342127224683 0.7202065708647791 0.9062281565829131 -0.12326480895723924 -0.07219971881591625 -0.5788886390546513 0.6193383516665745 0.7022790087372397 -0.5833055139743797 0.6962303278078199 0.2731978211386519 -0.8785457290514451 -0.4847640363860397 -0.7690935138049766 0.8161802605456949 0.9250308953253541 0.21057328436263956 -0.8648783707363581 0.8320228126177929 0.8192166110621251 0.08794356082600241 0.9080385748257527 0.14489433366417237 -0.4574002011236835 0.8901266551616946 -0.3136973659053015 -0.517581818926194 -0.1651029228906038 0.28877401538403236 -0.46959390364281317 0.8345536525807296 0.8034942534717637 0.8455999853485401 -0.24002547206010072 0.3021865790863032 -0.6629613391062921 0.518692693775749 0.9759977475623103 -0.582191719067543 0.29474756949373426 0.37990079958075906 -0.7581803517965227 -0.8731203227256334 -0.9353651785188113 0.9241106702290764 -0.2817040636118908 -0.8369810449902908 +74 93 -0.9335544124735209 0.10307917927537313 0.6847079861480669 -0.706137091839047 0.6789861234303902 0.16322651744505556 -0.10559787696108258 0.2524222814915713 0.29927757021624646 0.7360993843106103 0.8832650368183816 -0.16867784733054103 0.7557983631720879 -0.3505943586534148 -0.4385106806047214 -0.7027614720131605 0.6640350638767842 -0.04032732817640139 0.7076316645532317 0.270482043657307 -0.3474003459954036 0.5551118013083194 0.3609667605183695 -0.32345160342655155 0.3082562951565193 0.47616031556273364 -0.6792225871873001 0.9773353861694816 -0.17201247398013142 0.2861743857378207 0.4186402955520587 0.19266806171741746 -0.9339759786074937 -0.9994023083171646 -0.7240617093510726 0.7912230666870927 -0.13509889762838068 0.010353090758491446 -0.585000967438797 -0.8007835719334946 0.8296683745400977 0.4038197296537771 -0.2629619633100393 0.9209996065542387 -0.686877038325072 -0.05826586058100047 0.8694130469813977 -0.39225834999415476 0.41022133194701005 0.30925210608882825 -0.07432558265578626 -0.15605247658719268 0.8797454206315856 -0.8540413418538046 0.2452527945397942 0.6815473463975295 -0.2693009095530703 -0.813486991249218 -0.7993379631059165 -0.1841264205643982 0.9386912207879299 0.06501169215247504 -0.8190765385085426 0.7650882000756896 0.15001279006137747 0.6288836508852902 -0.5009850283448181 -0.7654413369482262 -0.026103122697194836 0.4215782344191583 -0.43027463360006335 -0.683371019251358 -0.5921251065692557 0.39693761913749426 0.4771311568925303 -0.5781344359118195 -0.2860499282737281 -0.955642897984404 0.27696246874140384 -0.7213760663208648 0.030431578025535533 0.9953994257410381 0.2774049832232959 0.4884527671205865 -0.7540249082119719 0.2778765986859246 0.41292197700018884 -0.8342789478762123 -0.4020076029054449 0.6683406708303268 0.5131828341491689 -0.8214929136647449 0.7674708891728281 0.3650949479794774 -0.36354045164831694 -0.3639593280997957 +74 94 -0.6818078840342519 0.6280389983006842 -0.2371082376495297 0.8282322379418339 -0.9601654936739132 0.6193829486207565 -0.7330104949839542 0.24133113182586485 0.9898601299462928 0.45077243643863807 -0.9561458506783684 -0.04120766106697005 -0.2449805012922217 0.7440985247385472 0.9377900204092615 -0.4990933180290342 -0.4462157220790408 -0.8954482934463364 0.050846973570437104 0.7641946376257474 0.418767044050379 -0.663270527890317 -0.446750728832912 -0.8854657816038738 0.2309608748588854 -0.16013517771560126 -0.17026328554502101 -0.4876903536169508 -0.07638942578954278 -0.545936023907551 -0.883731452917303 -0.2130694023881312 -0.05621556592866961 0.8702364517335834 0.9887950937668715 -0.6483361827445995 -0.1435607002407122 0.4620764405174327 0.581820422208944 0.4338223498140066 -0.037937504791000665 -0.23089110397819157 0.5160362447862481 -0.8676880401573603 0.5948889974214353 -0.32138941564409307 0.44830035217313124 0.3081334797587698 -0.5390074726382268 0.028565273586238504 0.21019334974922277 0.7623204866175897 0.09539144490034768 -0.8182301604837214 0.43532818046284727 0.7386190496797034 0.6519081623608802 -0.4333961410150611 0.508271913689285 0.08548733240937945 0.7938852613755654 -0.2774451808274283 -0.04252306297814368 0.2886768247529694 0.5466503930014694 0.14690823104076434 0.4217615976097313 -0.48113194486441846 0.7688823525047197 -0.04306953306448058 0.22284395718366468 -0.6379992375657053 -0.11387881364626273 0.6953324641631029 0.6349692413281831 0.35027017406960126 -0.009910245005811502 0.5485533381314933 0.6476208963559285 0.21818801698171342 -0.4922308651732046 0.11736081983070634 -0.28898230514454815 -0.35150511686338937 -0.10663645271788269 0.8833808516376607 -0.9229151701061453 -0.9741126738307766 0.5293930945400331 0.8738114303876061 0.44198039481613893 -0.9330654520577926 0.2846490603470355 0.5047322764485609 0.7753466687731272 0.4936267870329065 +74 95 -0.40414548827383134 -0.6073852464278027 0.7416538073905707 -0.8641576930539345 0.7126298604471539 -0.34983466170647004 0.8541946054932239 0.2552045598805657 -0.6467348014367531 -0.15507586773072402 0.8296256457504538 -0.2453146803919941 0.34892208241222233 0.6090856656200947 -0.13316639727878887 -0.43051698618540746 0.9061257515763816 0.642107073932449 -0.6705478645876211 0.3605178506574409 -0.17091080033216688 -0.7630841219188522 -0.4249719235793974 -0.8889406181749766 0.3024138590559131 -0.5348695861154231 -0.6442474394511939 -0.1962270679479894 -0.684807806036043 0.10581778676666231 -0.2599071455732769 0.87267133147595 0.6189921748754013 -0.2345800702198848 -0.8504020539381505 -0.764058212484751 0.48263509778467517 -0.8067551464019138 -0.8492582974036575 -0.6048436468391019 0.2305882529869263 -0.5203464299411409 -0.8533664453629066 0.14825030292902808 0.568716941833679 0.15695146988337516 -0.833399694129253 0.004162139514872321 0.3415219957010822 -0.5180241966594465 0.44377958929955863 -0.9910504565030822 -0.5358748650074419 -0.3660622296127045 -0.3966020226945377 0.00810100599479413 0.5729021371808611 -0.2405628324307032 -0.8341959593716008 -0.6088621940306174 0.926845525407155 -0.1943669710584306 -0.0727524393641572 0.8793317162286598 -0.23325910946586426 0.3652896993969019 0.2549436716711564 -0.059461370369688016 0.8567795878633626 -0.5836194511340538 0.40461619534051674 -0.5935325335792545 0.7367743625715759 0.9252920166922065 -0.0811701518296617 -0.5115275066671376 0.8989504606460617 -0.6315974590407472 -0.8413561027790515 0.0015940055598064884 -0.5236353145174557 -0.9166853164041255 0.077649833169118 -0.526191335582495 -0.7212540632398696 0.3847412131022345 -0.5426317841558057 -0.19147368319663705 0.7740521003371661 0.08062893891703227 -0.052657614165180444 -0.021146827213150532 0.5435573715756923 0.8564851190197986 -0.31940466363681375 0.4114903238133658 +75 54 -0.22406517575869067 -0.4137383808689221 0.408456287125875 -0.8275629846526635 -0.5951889375415835 0.8882658369827934 0.9947073505614861 0.5303081821425824 0.4737578540148024 0.9097938224980107 0.8209493094417359 -0.6284128986272985 0.9451173087864742 -0.35028785045746336 0.7176215775833172 -0.1961254305872313 -0.8683535539264964 0.5341510087804124 -0.8802662816148996 0.6917159582578081 0.050795800216559606 -0.0741431658007008 -0.4931700672594952 -0.8460972137606759 0.24072529198043968 -0.2592352957579498 0.3848327140791614 -0.09757806047529471 -0.44563375821126106 -0.5899118920960347 0.0875870502346281 0.7947825278896687 0.29087852317205387 0.8249430410343801 0.6093577527397978 -0.3494763494693591 -0.2216195714043636 -0.43916100572854977 0.15754540309784582 0.3540163963372418 -0.8531806636448156 -0.4670141960808549 0.902996124227434 -0.0018185404708044306 -0.9090992170906458 -0.345053078694898 -0.021466612981563493 -0.9350547170735015 -0.0648229060399701 -0.08046046580791155 0.3528250909163291 -0.7092501368757882 0.5783893907962274 0.7514565190812914 0.7482760072275454 -0.1110744404777888 0.33061394491772655 0.9532827467504628 -0.8793269651529558 -0.25940565056943 -0.3792230539596466 0.8821689354861499 -0.975445548905262 0.7946640600801322 -0.37859643541460053 0.8452403525922112 -0.07640333488037254 0.3405765371020595 0.2602131187023313 0.23165211679393738 -0.26385714855408837 -0.7083818162584681 -0.28320884561283477 -0.6442878430614571 0.156272335594986 -0.24086363313073988 0.7755816560185096 -0.012017991592574662 0.9643508967991776 0.10048823172539523 -0.328810069614778 -0.9658959286766704 -0.4789967673719182 -0.1706762943996687 0.13884064485215108 -0.030912506895047098 -0.516430987296947 -0.4304728294092508 -0.10358291236050055 -0.7572605066829232 0.9423282352198978 -0.6016016666691828 -0.7226355143813468 0.001693009095214748 -0.6132199256191146 -0.920559944134951 +75 55 0.8704533560916703 0.6770505531370834 0.5793523089196837 -0.06141581903229976 0.6957724480324508 -0.8155189621308991 0.2890089940034837 0.09887015294886825 -0.6096473548929908 0.7682890891296188 0.5587233907151734 0.5429669289057142 0.7221536293623703 0.7257849802390992 -0.908247271066611 0.8666841148921041 -0.11120647243648918 0.9424227183022131 -0.6146209227783084 -0.0682077049904839 -0.6872309012117763 0.5770639957666657 -0.19901317627826076 0.9431005633400027 0.4538710844306344 0.008730811501491242 -0.8695398421040985 -0.24885341528992022 0.6309099187059206 -0.8365536533518525 -0.5924946184517894 -0.05889609228755899 -0.6970103597646866 -0.3686790995671805 0.8824316525676676 0.3450695639676826 -0.8349483061104712 0.8811844175093 0.6582582211309929 0.6777602342096305 0.09752471509549854 0.7535688911824883 0.35457952390832226 0.3557519314161641 0.7144496394203876 -0.5535348325080824 -0.3838565475850071 0.8913880922852655 -0.5610260338371058 -0.6445598100251915 0.41146771032298 -0.30963645668600237 -0.9963655229129174 -0.023997107444316823 -0.9361030970506299 -0.6063410536694027 -0.719488303120241 0.39983450908972995 0.07648957565074732 -0.5071686445909698 -0.5979089032681122 -0.49667464761224545 0.8120406206394883 0.04238855621502302 -0.7200754215804539 -0.30371649910785625 -0.3707376772644426 -0.5563048170542215 0.34057149333718395 -0.7203645748811944 -0.3417156186534269 -0.8806644858355679 0.41776667103527965 -0.8302332339319303 -0.4660504709487798 0.9052981784171956 -0.23660379524295916 -0.1336481067171158 0.45927058262856524 0.5582334062042758 -0.3230960261806055 -0.8859792606697958 -0.532086808849153 -0.18599962379105972 0.006323108431030233 0.1705853154673922 -0.009647440929050122 0.15954964729361687 -0.7451179129947669 -0.22643779716554313 -0.24886238034562158 0.3361084935481722 -0.01309519505997958 0.46303986654095475 -0.20705457972785202 -0.44578738135533813 +75 56 0.9957150893141635 -0.16156245786607126 -0.2165146889714178 0.025005605086539928 0.23958590167007965 -0.1858037380013451 0.06098738309874108 0.6347939371770324 0.7076133656593195 0.5014554732079646 -0.4485196430205043 -0.5168146389862578 0.5859856163678234 0.05608382926969435 0.34823491307451726 -0.1367513994819758 -0.9247023872723783 0.27014643847304765 0.7526978945425502 0.47866758645357965 -0.672932454340746 -0.5136524835131806 0.30426453984056656 -0.3109171639294612 -0.7488830716470019 0.23749126241376417 -0.8654942526846316 -0.12035376533991227 0.6658605366866035 -0.5292402512641201 -0.48490378520218713 0.1880245795226707 0.23959867586683758 0.1427893704527552 0.4118387420872509 0.18923517945733703 -0.15471883327372815 0.035028537713410524 -0.4307498560318812 0.7772432340920963 -0.22947496331015382 -0.8842336714330585 -0.22927451645447472 0.2958840427376703 -0.9773322891412124 0.1589878217572307 0.013537706762522195 0.5853041149274023 0.009132897117569039 0.79343165841531 -0.2955488620963962 0.6827001175710334 0.9472621391450469 -0.8272587148027861 -0.13081038794556532 -0.05822330896038541 0.9067546641329414 0.6907246795722952 0.1649034296973042 0.07680148726475577 -0.9023326939234189 -0.2849319472728655 0.5412585202861535 0.4508807262418859 -0.9684163553184779 0.8586193234914892 0.8981009506715649 0.9366561154551718 -0.20623916196195102 0.012028726120418609 0.3787374622709787 -0.3703690550991394 -0.6175289880850212 -0.2669552495025611 0.3741087675320849 0.9810235040515389 0.09738282737611259 -0.08014148429281276 -0.9185574150668403 -0.05205811181069686 0.20895998904609248 0.6382130459680759 -0.8404835270345643 -0.01572016908603313 0.008897033999928583 -0.08306036195897559 0.12027340068335302 0.6033241008466586 0.46143891706108553 0.19602793510987526 0.18512359453388805 -0.7337600767039323 0.07861653030358196 -0.7083735198277916 0.360077006211309 -0.48673904946747437 +75 74 -0.5091750561740813 0.9679307638360428 -0.29760775155312036 0.3580111334952054 0.859912031128188 0.4192387937004969 0.39174281133019995 -0.3801745798951237 0.008691211104210561 0.365777966430737 -0.850742397005521 -0.2820955465170789 0.17511835539931386 0.3604612796078497 0.7212335236769258 0.13793749070835148 0.6137688244941539 0.3233611727386807 -0.6428465568195492 0.5491801550085229 0.8092355128248603 -0.9535679806218704 -0.11738710571012922 -0.9780251492605345 -0.7551592320258713 -0.049356844788877474 -0.47040480523833716 -0.6732805267396342 -0.672263472438432 -0.018883451682407904 0.28500751034986527 0.6916572701617691 0.5842766387216989 -0.6113548127503508 0.569383785423448 -0.29647650200677966 0.04493524998644016 -0.02710272272492964 0.9728377912287778 -0.8538664793580437 -0.152000100945211 0.034604377358635974 -0.3448150584718397 0.152950816668171 0.05910403044028478 -0.4953139644048048 -0.7511301886024302 0.7670772406263233 -0.6175212810275483 0.08358342127224683 0.7202065708647791 0.9062281565829131 -0.12326480895723924 -0.07219971881591625 -0.5788886390546513 0.6193383516665745 0.7022790087372397 -0.5833055139743797 0.6962303278078199 0.2731978211386519 -0.8785457290514451 -0.4847640363860397 -0.7690935138049766 0.8161802605456949 0.9250308953253541 0.21057328436263956 -0.8648783707363581 0.8320228126177929 0.8192166110621251 0.08794356082600241 0.9080385748257527 0.14489433366417237 -0.4574002011236835 0.8901266551616946 -0.3136973659053015 -0.517581818926194 -0.1651029228906038 0.28877401538403236 -0.46959390364281317 0.8345536525807296 0.8034942534717637 0.8455999853485401 -0.24002547206010072 0.3021865790863032 -0.6629613391062921 0.518692693775749 0.9759977475623103 -0.582191719067543 0.29474756949373426 0.37990079958075906 -0.7581803517965227 -0.8731203227256334 -0.9353651785188113 0.9241106702290764 -0.2817040636118908 -0.8369810449902908 +75 75 5.567059607191625 4.374433070343681 6.085288384088089 2.7798481595607734 4.731100574478245 4.046588655695374 4.480555945131706 4.946354783968191 4.282023979391292 5.413365203852877 4.497998907302221 3.777937765077257 4.259014707243444 3.6288345745191197 4.694812343881494 4.137220899532672 5.540540072924048 5.313441026057298 4.9359621603364605 3.7348751297690077 4.587729887398037 3.948586850305283 2.905546262639542 4.996155101633497 4.8320054045424055 2.688661569582111 4.45807391592299 2.916012217033794 5.138012550862199 4.894934621153966 4.335351974869819 3.4182974317261596 4.2617374147932 5.056629511069334 4.512135864178836 3.2922573445103778 4.045210359558776 3.6137713736970243 5.62345404939745 5.605087700243696 3.4976500107177144 4.974507312525239 4.797931196016987 2.9143428276592216 4.417258409685486 4.045790897138837 3.5614390876269804 5.535426659164269 2.8780675301080123 2.4512098285375337 3.6462565768783732 6.063372668460908 4.077451466863066 3.9516757759762458 6.550912159028961 4.0509111343551005 3.9733638093751447 5.710094286486951 4.00274156649333 3.8612347529807955 3.840665382286881 4.181019707743646 5.284030902221451 5.424855546273928 5.7920962334632815 4.709897390430651 4.179202343256922 6.136367720099799 4.177577637136176 3.397130530808209 4.5456185019791215 4.145079818422205 4.771468279609878 4.411691866400194 3.7323437231187886 5.517450009088016 4.301365624291096 2.801308149736439 5.4855981120556745 4.11474025609065 3.914301300748363 4.824666181741358 3.961548710348812 2.6143178777848854 3.555259190427881 4.049857164090982 4.425282267316613 5.507318722373749 4.446945687894571 3.7323578424098542 4.36660509114902 5.541369763895461 4.437988326500685 4.780130310101219 3.513381978139021 5.691260547278173 +75 76 -0.9692422948067372 -0.17171136555919908 0.9819490642371502 -0.419846488364632 -0.1940989350425799 -0.6314270840018621 -0.6989388447770695 -0.8785290164952166 0.535182674204246 0.6605061617820149 0.2446467436104851 -0.2109847575476873 -0.14967986701942104 -0.06382679997208629 0.20955623450653227 0.813252445236895 -0.09550503075010974 -0.9381038320891399 -0.06310916300533975 -0.29018950189716275 -0.6352155719746104 -0.2828152584421273 -0.040545727057119896 0.18438409036572678 -0.5969585404952682 -0.24819419735280523 -0.28082482330694547 0.15071183450524783 -0.8193126211440227 -0.08609720480585237 0.4271482870724539 -0.5811768974035776 -0.12932266189539465 -0.9685936241882065 -0.44453524323019855 -0.23467452210444084 0.7560727728857723 -0.29330188183925543 -0.6740921855060185 0.41196867910470725 0.10987574641804554 -0.8649796373330416 0.9556148906135122 0.5785637197686553 0.12991260729748433 -0.8736977058196083 -0.382570562090087 0.5460735347219354 -0.11481398442550605 0.14262194724256916 -0.5773728070255932 -0.9277117786350966 0.10308051632313564 -0.26468842550752925 -0.628908072153036 -0.3917231459633035 0.03624974247781876 0.9152120214995654 0.015028499529254002 -0.8199381592096031 0.3523687206860391 0.81401041548877 0.8142949118501728 -0.9812018284234902 0.8946817701278198 -0.486707725987894 0.14486856777233537 0.9576469077330763 -0.056794475125958366 0.672289561199445 -0.9016546228426674 -0.6748213781524355 0.6520169439886501 -0.4653204567113798 0.9386130618200479 0.5214398414612391 -0.5395130371804095 0.06275961446206701 -0.9224417707601349 -0.4069079379429015 0.6493665844705117 0.10933996867372464 -0.39547282853375054 0.07744421731304185 0.43238106169449164 0.6120765713065295 0.45249091329717106 0.46640960101259044 0.5333120033893126 -0.7622641228749016 -0.813826175229057 0.006877929449272457 0.44161244725946536 -0.4569321078664059 -0.5948601399496443 -0.9322050239163124 +75 94 0.8592317793485944 -0.9363008581799559 0.9286115156032257 -0.40218245341559045 -0.2016685031079528 -0.06108405803577388 -0.9672602378533115 -0.17907301175112256 0.5428517174092709 -0.5346194504315256 0.38721909923875364 0.3401596574356036 -0.501927831813247 -0.5190864230726291 0.7292143906503628 -0.6959485666315748 0.7587917114215144 -0.6787161981557401 -0.6956711526735051 -0.4030074546831386 0.1975946515134135 0.14532475520725185 -0.221227688687621 -0.31496677400477746 -0.728185622130989 0.20251518908582766 0.3723946763348751 -0.21681305513999605 -0.12882563066868302 0.8379449703498303 0.7607530599444281 0.12594874246634435 0.6723347798387478 -0.9513144796949438 0.15858507578724734 0.40298283447644256 0.8821175998076582 -0.607083675707192 -0.2484230989834335 -0.9518634681635296 0.2881907422573191 -0.5128370292988078 0.11030203568772423 0.5414387750963696 -0.027644265665169865 -0.03986792773164827 -0.5133279057865554 0.6271076555142927 -0.14937598820873177 -0.15437871282005178 -0.0775653763109323 -0.36474028364228683 -0.12489276302733843 -0.7833495492394105 0.9717071193649489 -0.8571772416963175 0.2907554145183717 0.74495972980487 0.47323997680422614 0.19864605316093953 -0.07505987268873926 -0.14251689566539394 -0.053210959119303736 -0.5155581569567393 -0.6243469499038934 -0.9852557776049595 0.10145946704462316 -0.8945805742296615 -0.2538175559613298 0.17268102269883778 0.6724062498979124 -0.14255332151557343 0.808423190611208 0.16655147659548097 0.022686847314775882 -0.5235295178869048 -0.862174466471531 -0.3166326136296054 -0.1748475133982179 0.4993596892269099 0.7631139603185564 0.7017420849957117 0.1008380246784657 0.3466998354513604 -0.13966869414153082 0.3182064959663877 -0.5001798213778463 0.996110893973857 -0.20250020343472674 -0.3251625411966861 -0.10573594408040288 -0.8403065285074838 0.6496454429945684 -0.3343044064874736 0.5062388190467608 -0.03684765546732649 +75 95 -0.08128323645778024 0.5518607075321023 -0.7853405131048914 0.3555211751560816 -0.6549180011257498 0.23941946710873907 -0.4010393875670877 0.8573276289083132 -0.22384222961861777 0.7908932488648011 0.1693596537291997 0.13727976623174176 -0.2875418896178632 0.026765946517300687 -0.010795653439852115 0.10213303846101152 -0.5503598021951042 0.2367605466552236 0.4390482640544744 0.39940816010330416 0.8917706742060583 0.3721585453938858 0.06263949531535729 0.42108132538988197 -0.31312392861775784 -0.5967813460472755 -0.2947278824030053 0.6446338177051882 -0.9044406582546081 0.14211391836244291 -0.9452898917729189 0.2521986123113442 -0.989545485420106 0.26272429666510466 0.2843540941074778 0.6987344142546716 0.1406959334120077 0.022890280987749367 0.9456683390851064 0.5048426113656463 0.5537056331030323 -0.416367506071339 -0.41960788754940803 0.6454643115143031 -0.5681262768913171 -0.10148376984354268 0.793110102721561 0.7301013562501648 0.5066803852581931 0.2400691662841472 0.2007389751703721 -0.8543322716442543 0.2291534447502388 -0.7479005267703172 -0.8887851668865425 -0.5966630855820567 0.3379224049648262 0.5455904883829084 -0.6201624384280577 0.01632720758089512 -0.12172544974809507 -0.01927016463492426 -0.1715862397813943 0.7953739012644383 0.46702427839067795 -0.6124084771709506 -0.14906336871261616 -0.6366517162634835 -0.7327193078953547 0.2248503368281365 -0.08799841962652089 -0.03969892491854399 -0.6581903826663655 -0.7290866124534476 0.6389552231244411 -0.7089828124716733 0.8005195089474832 -0.8489261218565896 0.6552940178203568 -0.36760669571232496 -0.5413945183592874 0.09793660174494456 0.24072143151016134 0.8157651959144738 0.9422028723570015 0.6864207541179421 0.8900363272164047 0.9074974662800415 0.9351690127047336 -0.29070545873538567 -0.6706048074859017 -0.8791915507415715 0.4757678274561523 -0.20636024749929893 0.15394726078474275 0.917323894166538 +75 96 -0.4529332714258145 0.38901906443567325 0.9602540230673551 -0.25775662633560525 0.5336583918949136 -0.044303279608884916 -0.047575610677975 0.5369312654555696 -0.5381757349775738 0.5742841151437834 0.7778012701545254 0.21199402293144076 0.5004862598667232 -0.6523683547321555 -0.38065526071886846 -0.35701769801679406 -0.7730336488178793 -0.9093387592083866 0.49974698866831035 0.18453186155135093 0.11830046153369023 -0.28146044428968375 -0.8163565578734633 -0.758560964884271 0.5794888275854171 0.5905950327670226 -0.5640038306953836 -0.024398918427355643 -0.6494175987489923 0.9101328198393934 0.2534640382551736 -0.3647282161540315 -0.6149993942708307 -0.44170525642991043 0.34390012083908594 0.2715886011317463 -0.14413940237394507 0.800269235350765 0.8620450355496783 -0.4739610064227655 -0.38333458295064693 -0.11137515809415954 0.7374445019575431 -0.0029452003810195304 0.12410581569915591 0.7540396389794528 0.18106685700016878 -0.2356151769828878 -0.2066763402905949 0.23392044803485712 0.4266689748753163 0.6178859423922587 -0.9222303850409554 0.35240595384523443 -0.7411020397000958 -0.6087519790661942 -0.6140725973569621 -0.27951588054379295 -0.3526703867066263 -0.8585707932205862 0.14106851879476134 0.4142587060609544 -0.25190498556213514 -0.7008386270665101 -0.4807221079760178 -0.3899645779191925 0.6768324904088359 0.5404431532593275 0.608750729550483 0.40520027162432015 0.6025236065325152 0.9883866399078072 0.8657393783635516 -0.05881818423993024 0.242438032489813 -0.7000755960281997 0.06646099116964743 0.13608963162179588 -0.7972198381161308 -0.8326764387721326 -0.1558045196011293 0.19551956952776028 -0.3275997932925363 -0.013490244728225464 -0.9392025648934041 -0.7703962045165951 0.21584062395287873 0.46534237283936886 -0.27014200014182466 -0.6673868701076717 0.3396047803540352 0.5652956499074362 0.6748578167655079 -0.9450040430171662 0.17604644414161807 -0.5114831878483186 +76 55 0.251583136768619 -0.517088456149774 0.1151618387795148 0.41908281760153976 0.7432704919151265 0.5855100269464621 -0.3558010319036675 -0.7517727118213342 -0.5176628945727126 -0.1261149215832873 0.7742723688594386 -0.28142659982785867 0.4081502432751465 0.7799448367223152 -0.912346363804819 -0.4970870979801283 0.867647765687932 -0.021005771826224873 0.06433430384410666 0.38151379589426626 0.1539915229599722 -0.8450667504267695 0.917385386373248 0.4147793652101859 0.7662379747451478 -0.8827202880660154 0.28492411062983614 -0.9963933571147932 -0.4480855546421745 -0.0773025864389214 -0.5477253087291365 -0.8268283439584996 0.951857738207081 -0.2911886618052981 -0.0971032262405509 -0.42496043744816236 0.5772846590664318 -0.7439774603924312 0.8708746037967781 -0.3796105542663375 -0.883304566414246 0.8985250094561643 -0.5874996792880602 0.9065862029974996 -0.7899003800313966 0.22931580558578246 0.07280663211990568 0.16557899901200313 -0.23233295164510714 -0.3147524942735067 -0.5712191157016078 -0.6431373715137301 0.36603645187999456 -0.2503626647019699 0.11874863842867667 0.3347294497762199 0.9865952308309778 0.32966144376746276 0.6179333716136592 -0.4874991154762036 0.9438595325621417 0.12344873595599948 -0.8125900605862881 -0.3257499248842455 -0.9254007920646168 -0.8370381699018448 0.10618852203093132 0.5240887772724143 0.13642178408146943 -0.5175057745790093 0.9998107153156668 0.10570937790131452 -0.02330241908295627 0.6031768440544736 -0.14338646272787714 0.8799845141422398 0.36083801894700707 -0.6640873516652019 0.9641214955122455 0.4270141917772241 0.7597542820133707 0.6650547193833325 0.3709296401423421 0.8477460600845204 0.7417102456342435 0.24073799716822464 -0.7757074840754794 0.029097198699186144 0.9578002996773378 0.3035542735311394 -0.3159208332658825 0.656075586647606 -0.5866029354612048 -0.11270467411824381 -0.8538409643677927 0.6694091487594289 +76 56 0.21784341019743025 0.596764696758542 -0.2944215555270062 0.8795512872653239 -0.9690116609955497 0.3555070576982662 0.11284049037879673 -0.9320445104187627 -0.4800805216764674 -0.02484144739425198 -0.11121948471072152 0.4130449612566047 -0.19001863742437664 -0.43403441335475335 0.8559029478922513 0.6987083410759962 0.294436884696899 -0.9420624934123865 0.6077462581546333 -0.7356825965854408 -0.818301267590813 -0.07671582609254068 0.31643981558717726 0.4875811072407894 -0.3332196179632896 0.7679856187194545 -0.7033265671671407 -0.7393925740966656 -0.10753730070949974 0.5130924819682541 -0.11709670686831508 -0.9900489845024287 0.7519752726490847 0.577683556847695 0.3034987576655066 0.31180271875918253 -0.5381428059749318 0.8381860809533312 0.1642489758829131 0.7253306214380171 -0.4473281505216038 -0.8369805299032544 0.5143746447102586 0.9698911615121184 0.12490876108405913 0.4156372526971197 -0.7972344974225223 -0.587881263026989 -0.16793813397517376 -0.8517379294368432 0.61363693987243 -0.9859998458512182 -0.7297254611159891 -0.03316856588032935 0.6129410677948439 -0.44609881930624495 -0.5723030370210145 -0.30170402073418745 0.4516818627071377 -0.5187547849713998 -0.06631377419994 -0.31300455034996055 0.7606377909827151 -0.023987726392411535 -0.37122559743300165 0.32289700038082736 0.9678672005913569 0.4234953925045175 -0.43072793956259714 0.3241875610894258 -0.01208743726448036 0.5124865030195696 -0.5923399964437657 0.9279955933296968 -0.8294718695547589 0.2908988027496522 -0.4495971553494118 -0.4258828356088342 0.2772768121001712 -0.20071960935884658 0.08098123274145452 -0.6219612621478199 -0.7217908622012945 0.5490019821362722 -0.44641562057533535 0.17372506920469521 0.08155807023673645 0.6853097971941846 0.241932448668573 0.042756113927509 -0.2794390622731677 0.0039041387701308494 -0.6310743254106446 0.40423963890858494 0.7516415163306782 0.07750438230524503 +76 57 0.05148215667312228 -0.27951398755382306 -0.826131583093189 -0.640686477158138 0.06485163454888454 0.1413619813780529 0.5512798930683847 0.8911306883642267 -0.7493731569345432 -0.07389957739756015 0.49381911546042967 0.6019302582486707 -0.778003780034993 0.8939228518302569 -0.4965546707651731 -0.3179489613298503 0.6557511761398387 -0.8820474281130637 -0.7262382470894715 -0.8146075023047612 -0.4638430342758164 0.9630119441895606 0.1268736571747422 -0.06065241983913272 -0.1942926120212951 0.8049697565833549 0.8342317407598017 -0.12225044797210538 0.8525116991818036 -0.1103355103710848 0.17611588973335013 -0.7101184206939326 -0.31171257275690634 0.8630859257498109 0.506805899676833 -0.16506816877124453 -0.9173024848661966 0.3398681046732426 0.1937238329710822 -0.9736419931348774 -0.2403146393072444 0.9961284692583947 0.5542743467240494 -0.7221113721793779 0.19790639440471325 -0.48063327660086563 0.862983882606053 0.15947553975146 -0.12867174805424098 0.5589622477029763 0.6768810750261576 -0.4384675594496401 -0.9402751731903556 0.003192169012177226 -0.5845314901039469 -0.9736901580869262 -0.6115657734747102 0.19134671922745516 0.7467114675156634 0.9446086672860625 -0.20100236979522834 0.37480294420007687 -0.9745453306731919 0.8706307373504656 0.6381254802045209 0.07453071398762257 -0.719237274382412 -0.9881012805800591 0.22876714173237933 0.38654257891647514 0.6818105676951012 -0.7762055674354114 0.6810830905172209 0.8806792168363533 -0.8948722306558372 0.048702029759558396 -0.3973738320101121 0.3341265613840061 0.8896138309709811 0.4106091871245141 -0.6955042473156963 -0.1879234500626885 0.23822829542745572 0.13742968573198477 -0.00041257107603853704 -0.8657002504857154 -0.9051364901727907 -0.9559768242381745 0.3853462392426312 -0.6561932414038136 -0.296968919881601 0.5595915023603197 -0.5783681186770995 0.21123245214448172 -0.1912136775238027 -0.06571899170465567 +76 75 -0.9692422948067372 -0.17171136555919908 0.9819490642371502 -0.419846488364632 -0.1940989350425799 -0.6314270840018621 -0.6989388447770695 -0.8785290164952166 0.535182674204246 0.6605061617820149 0.2446467436104851 -0.2109847575476873 -0.14967986701942104 -0.06382679997208629 0.20955623450653227 0.813252445236895 -0.09550503075010974 -0.9381038320891399 -0.06310916300533975 -0.29018950189716275 -0.6352155719746104 -0.2828152584421273 -0.040545727057119896 0.18438409036572678 -0.5969585404952682 -0.24819419735280523 -0.28082482330694547 0.15071183450524783 -0.8193126211440227 -0.08609720480585237 0.4271482870724539 -0.5811768974035776 -0.12932266189539465 -0.9685936241882065 -0.44453524323019855 -0.23467452210444084 0.7560727728857723 -0.29330188183925543 -0.6740921855060185 0.41196867910470725 0.10987574641804554 -0.8649796373330416 0.9556148906135122 0.5785637197686553 0.12991260729748433 -0.8736977058196083 -0.382570562090087 0.5460735347219354 -0.11481398442550605 0.14262194724256916 -0.5773728070255932 -0.9277117786350966 0.10308051632313564 -0.26468842550752925 -0.628908072153036 -0.3917231459633035 0.03624974247781876 0.9152120214995654 0.015028499529254002 -0.8199381592096031 0.3523687206860391 0.81401041548877 0.8142949118501728 -0.9812018284234902 0.8946817701278198 -0.486707725987894 0.14486856777233537 0.9576469077330763 -0.056794475125958366 0.672289561199445 -0.9016546228426674 -0.6748213781524355 0.6520169439886501 -0.4653204567113798 0.9386130618200479 0.5214398414612391 -0.5395130371804095 0.06275961446206701 -0.9224417707601349 -0.4069079379429015 0.6493665844705117 0.10933996867372464 -0.39547282853375054 0.07744421731304185 0.43238106169449164 0.6120765713065295 0.45249091329717106 0.46640960101259044 0.5333120033893126 -0.7622641228749016 -0.813826175229057 0.006877929449272457 0.44161244725946536 -0.4569321078664059 -0.5948601399496443 -0.9322050239163124 +76 76 4.90351915568991 4.579783292947451 4.821912549619359 4.260224989144687 5.33126836578125 3.4312879352521524 5.750799147119499 5.634002677258525 3.737708453890967 3.6674602120907354 5.532284540759676 3.9943817351781137 2.8097211505823605 5.365770315716248 4.208269290900915 5.4372939861274725 4.322613442738489 5.893967668170718 4.322919681076109 4.909433073121702 4.613907690165471 5.299494964016905 5.246689832867263 4.66840112769867 4.497519418039527 5.858406230572351 4.443113045445621 4.714073863425249 4.212071001156351 3.6762104770184534 3.8835765298667697 5.849680431163719 4.516367881925887 5.425117013982551 2.722698448673058 3.334925339391922 5.28797098944106 4.8110501551462095 3.288748634765719 5.804253644916711 4.339415343754958 5.858272086698165 5.4843443722649186 5.893381092901124 4.574358404594941 5.3222629127274725 3.883200902794866 3.4576508532988033 3.3849571592192875 4.499782793153079 4.898770662767688 5.500742631085789 3.6452354007839185 2.3212567342568518 4.357884655958191 4.439593051865906 5.35062966114578 4.321263169370292 4.580866849659646 5.751032860392531 5.077537869688925 4.689688607291803 4.826132719207557 3.980888767159394 5.888379367627701 3.6464495858170176 4.232843474092231 5.50890394461087 3.7710415607210557 3.3902915357291783 4.507464378859704 4.829574138385225 4.4981979312185825 5.4953617459872675 5.130866870712701 4.759493664099591 4.323101091977939 3.123857974897348 5.667179168449007 2.7457598043375144 3.5416967203443273 3.63810164483791 4.699149274329528 4.001581076399643 4.346334584107691 3.752698857704174 4.392891183370441 5.69826518914586 5.358159735511823 4.743058015832821 4.821277767827762 3.800477608627847 4.016839630935854 3.5433210917513374 5.421415033621272 5.655833566285691 +76 77 -0.9668055481009459 0.5546666882789533 -0.9528743855881088 0.2835085006293798 -0.8533415781173561 -0.19430399856049396 0.6522511042183825 -0.39189831258211316 -0.948667379536972 -0.9958436352978877 0.2946680672120441 0.5816901947966202 0.4661292777130712 0.8968325245063795 -0.08809314950477587 -0.7086851568405079 -0.5420744712385883 -0.09106036720400179 -0.8108310798107505 0.7643200636960776 -0.20037591292414914 -0.604255020874453 -0.7960229286437503 0.9406097372847229 0.6607743589327479 -0.6146340251336908 -0.4449804451468644 0.8127348115444974 0.7211501908908102 0.12534265146253354 -0.21351965610158552 -0.08155896682579811 0.27161431443290396 0.4317897681546379 -0.40390466688430515 -0.37350465126210897 0.2915583431581872 -0.8878863722206181 0.34875419766333127 0.5703579198945656 0.34209997395351754 -0.688578530719951 -0.8679737054671324 -0.9716795978880137 -0.5236603992903226 0.9148656032677891 -0.952702213084917 -0.3341039921077258 -0.1866913509945114 0.18358557812226062 -0.04309865153030712 0.12072150954383631 0.28271677451371313 0.26373314517019586 -0.5914997791061656 0.49495115104711784 -0.06482724302452114 -0.6687073453412702 0.5853131186201661 -0.7099343493558015 -0.38758052109686125 -0.10793371229431692 0.14238892303382134 0.09548138349259094 0.7760553682091971 -0.8569772632782255 0.6853660095771275 -0.18303858378260096 -0.8940279290948729 -0.5149506158516399 0.5084024442472874 -0.2006154378185654 -0.6752551342303035 -0.5286528388260727 -0.07331106926989461 0.7018361667035222 0.35815928990470614 0.11630974964992169 -0.8575429845774225 -0.004926591246454448 -0.13660086734184373 -0.35921058428727126 0.4332291228441223 0.3970022826543227 -0.7186509700664532 0.18505890376154044 -0.23114110175386648 0.7979840335247832 0.8629703063901133 -0.8302142411106499 0.9922598546352974 -0.320030017442096 0.519374184200496 -0.15519315804808698 0.037136384878888595 -0.9434265237949431 +76 95 -0.8732316906956079 0.8521726917174679 -0.5545941911688055 -0.2996695424460081 -0.6408443681663749 -0.31761422745993695 -0.9049888624683429 -0.07337145811981105 -0.062444099511544726 0.5910843429991661 0.9786762528883488 -0.9654964633029723 0.621751047639959 0.9993297614570824 0.4634043940415744 0.8850644597380439 -0.556226134274866 -0.49287692298255537 -0.5719162451864357 -0.7414180070993326 -0.4862097113185819 -0.46564071777674276 -0.8003536945238203 0.36581272868178094 -0.4006828423961468 -0.10849359720407592 0.2508940035987357 -0.595684465556285 0.18801745419761295 -0.8089249701941683 0.2800418716226569 0.8937664673759695 0.5135042303249704 0.9474455980752752 -0.15802348162552482 0.287989572697112 0.00719627998877681 -0.06538521419732568 -0.08054972144838346 0.4438805893831399 -0.1785948596150324 -0.7451986026195603 -0.5498552555801859 -0.5378131928774765 -0.9599472237240316 -0.6304898846648812 0.7768775145872713 0.3392685837251408 -0.6459739153702484 0.22199996646146203 0.7121605435106415 0.8861274454245867 0.5197248751425914 0.39861653273149367 0.23819136699675814 -0.6127053030948035 0.8487185738377458 -0.44488643968084185 0.9544416662875541 -0.657713344819413 0.763842005791223 -0.5148468676269404 -0.5813268953474566 0.22282079218111184 0.49202898770474235 0.1921131571972421 -0.052530194908877226 0.0011929629328952807 0.6793552080477507 0.4205693883497357 -0.7908581925634592 0.930356649097867 0.2244192831646552 0.8348471448551085 0.4713881024759692 0.5930280799585692 -0.09140277741521041 0.12309519960281023 0.16095938312487856 0.1087060330766525 0.6863231930300784 -0.14663748351500017 0.4327998208857873 0.14450374661865295 -0.2688939063807576 0.7868636563521549 0.6075515368656357 0.9006251823933524 -0.7495278852623237 -0.3752542070868601 0.8987222593747579 -0.5773645709331843 0.23974289107170277 0.4325449029344106 -0.9946038454100086 0.5086091648417559 +76 96 0.3465584831617976 0.5609053187816677 0.9818744891062758 -0.19996311060290695 0.815720245735656 0.33559728959681556 -0.9871862696692137 0.711486781107346 0.04348980962087001 0.1867165894042635 -0.8076669910778203 0.0813990870678658 0.04860999542644184 -0.7225691907291218 -0.7489427861192692 -0.003919631374734944 0.5980484529399424 -0.9235982045770166 0.7715156787753881 -0.6833535880624781 -0.9704622442383641 0.6317036405117109 0.9951011868555613 0.7875201599995127 -0.3125236619737941 -0.5223764097313954 0.6552526281409323 -0.542646086648646 0.1676483280058887 -0.359626890244342 -0.7070127783908127 0.9022494596091646 -0.03276915713169415 -0.5181476969616954 0.03830221078530438 0.35354012010865343 0.8629955341469986 -0.06624564968433932 -0.15934041727589388 -0.9781033058293367 0.5180119792509188 0.5721001149926834 0.6114530990138072 -0.18956622460335915 -0.2659564714488678 -0.7485823590357208 0.017952722405214505 -0.48221563249493316 0.356019563907491 0.5978134187043431 -0.0012048849241061976 -0.41206399856377374 -0.15396286476511567 0.42170908405589413 -0.4401027735777969 0.3782691332630703 0.9780701376026504 0.7791481880928322 0.26482845956785583 0.49757475179302313 0.6675841417846498 0.4845459799263214 0.0032914043853644603 0.19988593845926195 -0.43658232724933277 -0.12955531000388332 -0.10233160422660381 -0.6783368185590719 -0.5450853714187458 -0.14740574278462804 -0.41565653276948633 -0.6151424005432533 -0.8553914542236867 -0.2573706646709786 0.9472846660589631 -0.8244603982671825 0.43046365516253826 0.26409538725947357 0.2896321069632295 -0.3084174938822659 0.3383210369716463 -0.29169331148700905 -0.5743672403729092 -0.2557918321299999 -0.23959954256445082 -0.15150305918460605 0.9992546229275814 -0.28871751245206934 0.694947897135662 0.6534760544139271 -0.3827134865967563 0.08658445129091041 0.15349077969121128 -0.47198937176077815 0.6309093239407992 0.9532460225878812 +76 97 -0.6034524227094609 -0.9446562318512752 0.09874958141842627 -0.37522221994529303 0.5919154907832138 -0.2388762906060471 -0.774083773691504 -0.5986671838809818 -0.2661680936143236 0.8400648324607063 -0.9327403706040602 -0.626345407237096 0.13427701413580828 0.5376353318620017 0.1541943900034295 0.6988165543643763 -0.5968701629230189 0.9911443579403845 -0.5680069359985629 0.07982691164896272 -0.8575422163556956 0.6569322767149688 -0.3791374729764636 0.5566516384197027 0.820837727315227 0.9454420761073636 -0.2640739524357998 0.009375556416702624 0.32470265743405813 0.7592281151224107 -0.5260893780954161 -0.20118344236172736 0.9133925168274111 -0.3685428658215333 -0.11243570814543613 0.799804316850522 0.5257364970992353 0.8535918697667342 0.1780725650037842 0.663934700498116 0.6395133319363002 -0.25102136037973555 0.06518762516217635 -0.48462405176940515 -0.8493582617863078 0.3485807587981493 0.013106332162342804 -0.29440685221856433 -0.7828312452775392 -0.9259474432511121 0.8187696629310981 0.5100994085105712 0.5288069949244232 0.1544736684318071 -0.5448217215391677 -0.36238313814617285 0.9563504054554162 -0.5778569800554285 -0.5110449263279302 -0.6025496169581364 0.9980043571739419 0.9590913415173057 0.19045436407947336 0.6480750000492881 -0.7120580177651417 0.7203799059853533 0.7689107359527698 -0.987945130883418 -0.676901478200761 0.2820314020764947 -0.15742376286907867 -0.26962577410689637 -0.07616163450130964 -0.2959490316064328 -0.7623318084550894 0.6128713772090701 -0.8314774329473624 -0.46477483983737966 0.7631053697288883 -0.32927740668230787 0.13827699473522048 -0.40064309291445643 -0.7817864931021001 -0.8126379777672865 0.5862317245475852 0.33354085063054995 -0.13065259909808336 -0.7298704464988539 0.7486439044248765 0.5887310202807272 0.4538123252559496 0.9561116546751394 -0.18635148185318062 0.8342036015671073 -0.8219153276788369 0.8932901975165866 +77 56 0.27230904702320724 0.09057261130688232 0.1442304367415801 -0.13784406543683247 0.31244786353279497 -0.1033865978705828 -0.3107239520701264 0.4982468364712067 -0.06947062149101768 0.8390189077277641 0.20665422910986164 -0.8299564395007566 0.34297216261566943 -0.14101769614647286 0.659737811363805 -0.2722664129804049 -0.20685020496548168 0.31439434772034724 -0.36585950139739687 0.34506964149442054 0.23387837023198754 0.33745333694228874 -0.6337550916716685 0.03501542559521087 -0.9314517742536008 0.1917960191619279 0.607394607338879 -0.8041966721147646 0.21878459609494483 -0.529843220447892 -0.6376411053075997 -0.4980573726970392 -0.8126905949564458 0.34032512929406433 0.7102287294258387 0.5107859777330348 0.6182717435640324 -0.30732267515238765 0.4270334980767285 0.5421542122526148 0.8919266284572853 0.21496207828771197 -0.02359432216752677 0.00713983076153335 0.7115087846326482 -0.08285133323093397 -0.36626336080186994 0.9108413591768643 0.6982549946468408 -0.09852860854812184 0.8094330937128722 0.03288509651298588 0.6807104653784681 -0.8330948827073905 -0.6662516023991829 -0.9379310911077727 0.2872865675623879 0.04674736716838557 -0.9423058513839595 -0.2862431263625662 0.48875218328473347 0.5380851916322158 0.46546631132629557 0.45011290579245244 0.42868975519983277 -0.004644306110070939 -0.3687469237196226 -0.5586095632841253 -0.642930992462017 0.33550032110739747 -0.21677004754961016 0.8910219514819264 0.13380433543432502 -0.03226870223555833 0.9673141583935763 0.8796322037706019 0.5973452021759329 -0.9217858787623339 -0.7735943905870808 0.525869384242428 -0.6451637942481079 -0.874399694902692 0.1019979892284073 -0.13188016964630522 0.16523507910343604 -0.009683392741727914 0.7839106596920538 -0.9132690822087655 -0.07494541631051788 0.5197482994479383 0.6415850453279839 -0.5352436506783358 -0.8776755084591348 -0.7899724867211007 -0.713642389303945 -0.9230617182869221 +77 57 0.5524209783843717 -0.044283245129506765 -0.29949828923548116 0.4469866779492693 -0.4784210824617685 0.6049827116934701 0.628414587247818 0.32534190181001255 -0.09208438810579644 0.7272660537222659 0.6540528184135619 0.43661536811701684 -0.4226015858753336 -0.0813860046734145 -0.06194218603117796 -0.23541283156971993 -0.11699458534066642 0.3661235444848112 0.7407289615913561 0.746565121521851 0.10461173808642088 -0.269644615773625 0.9074585547705751 -0.06666454210026007 -0.3657709134124172 0.5853944435481837 -0.8145121329676523 0.16567960936524284 -0.7452862101281665 0.9175557034667723 -0.5739056266575566 0.9266558290950802 0.7385715367847598 0.7351647846195375 0.9742878861958484 -0.1908221957233074 -0.44097178430162276 -0.894017214762042 -0.12174305060497481 0.14328580240326882 -0.2026734972790758 0.22118547268113065 -0.9472799641450762 -0.051358414905450234 0.653281060600847 -0.39008346313199405 -0.8852366879571427 -0.8055025630764634 0.6728850264708328 -0.6284046238417083 0.23758009832755556 -0.23860904343367895 0.9021409222256929 0.18558436572035086 -0.5385812473135407 0.639763379948975 0.41785758776381354 0.7375934523127659 0.36344134462233435 -0.15703818543601722 0.9084183866481723 -0.12689978018466253 0.6039987108471472 -0.14492897814951644 0.6810911762476053 0.44473159554376873 0.420300650383975 0.7165405377753082 -0.6829504810251086 -0.07078395898314005 -0.5812513406389774 0.7567300828386012 -0.05398912887066798 -0.0477371120665524 -0.2969430834250315 -0.6167714559571182 0.557005707223784 0.008386661783833294 -0.10826164124801974 -0.5128326935577356 -0.9760938822452003 -0.6621447493634962 -0.5880945259786052 0.5456791703307928 0.05035817180063629 -0.1293420118526558 -0.47357086047925256 0.6148360092096878 0.31945354550119465 -0.07517555905186946 -0.8863011621197303 0.32197831683214795 0.37717889522682313 0.8530948215291041 0.40874524179579197 -0.19118890588569593 +77 58 -0.7123203378920508 0.858326382475773 0.7089434201760729 0.5220320857708594 0.7716318788786147 0.2765337291804457 -0.3013392072086145 -0.23432137469117986 -0.9934381192974169 -0.12718346227963462 0.4349138358901212 0.7714165204829071 0.17652752060213306 -0.07047768358235396 0.3205629352391024 0.6530402182608752 0.31681644089754535 0.7641028237249041 0.9074542249661679 0.8892133703182037 0.6841899731134369 0.013115101267502371 -0.2770776547122773 -0.9521336291808664 -0.6974945413235147 0.4166385407156097 -0.963422314820128 0.6196794418668474 -0.7921020197065951 0.7375189836841676 -0.5846212868971621 -0.08748098239255131 -0.8941292727978862 -0.7412668181993949 0.24928461141546165 0.021386928376733394 -0.2616171705944841 0.08011111661729742 -0.874440283634726 0.5124024048937035 -0.07026668075180109 -0.15588231750878379 0.04569612942873991 -0.8810553961908014 -0.6551098225727874 0.7638213488218155 -0.3251242669675516 -0.32634520009570056 0.41060914443831154 0.3300845765251239 -0.664489919213979 -0.13036597725660481 0.5159016294951186 -0.23643233362354366 0.19837680486816645 0.062021054727224856 0.30510628125417893 -0.3845149422766392 0.020424990943078036 -0.6497397635167348 0.5920828781083936 0.846499705665221 -0.5928967287716322 -0.22544163053748534 0.3691237167126493 -0.8783927183992586 0.5202625883648346 -0.6339685651266191 -0.8116835234767938 0.2925785822108673 -0.08328495525801438 -0.5014693237670329 0.46977997558615847 -0.6810245983847611 0.3587440096886465 -0.6737345637997822 0.8200780829587251 -0.7800993402937071 0.38019313542250255 0.9849057403584918 0.41828682443015563 0.11706694974979848 -0.08434365786922138 0.8215390317238298 0.09014153233428579 -0.610201799167418 -0.3234823559407274 -0.27485363627313797 0.2647243969051418 -0.8470775786716198 0.4695740697658537 -0.34811198451864644 0.017177526448895808 -0.6653487605587798 -0.5275587237046189 -0.3487993180495841 +77 76 -0.9668055481009459 0.5546666882789533 -0.9528743855881088 0.2835085006293798 -0.8533415781173561 -0.19430399856049396 0.6522511042183825 -0.39189831258211316 -0.948667379536972 -0.9958436352978877 0.2946680672120441 0.5816901947966202 0.4661292777130712 0.8968325245063795 -0.08809314950477587 -0.7086851568405079 -0.5420744712385883 -0.09106036720400179 -0.8108310798107505 0.7643200636960776 -0.20037591292414914 -0.604255020874453 -0.7960229286437503 0.9406097372847229 0.6607743589327479 -0.6146340251336908 -0.4449804451468644 0.8127348115444974 0.7211501908908102 0.12534265146253354 -0.21351965610158552 -0.08155896682579811 0.27161431443290396 0.4317897681546379 -0.40390466688430515 -0.37350465126210897 0.2915583431581872 -0.8878863722206181 0.34875419766333127 0.5703579198945656 0.34209997395351754 -0.688578530719951 -0.8679737054671324 -0.9716795978880137 -0.5236603992903226 0.9148656032677891 -0.952702213084917 -0.3341039921077258 -0.1866913509945114 0.18358557812226062 -0.04309865153030712 0.12072150954383631 0.28271677451371313 0.26373314517019586 -0.5914997791061656 0.49495115104711784 -0.06482724302452114 -0.6687073453412702 0.5853131186201661 -0.7099343493558015 -0.38758052109686125 -0.10793371229431692 0.14238892303382134 0.09548138349259094 0.7760553682091971 -0.8569772632782255 0.6853660095771275 -0.18303858378260096 -0.8940279290948729 -0.5149506158516399 0.5084024442472874 -0.2006154378185654 -0.6752551342303035 -0.5286528388260727 -0.07331106926989461 0.7018361667035222 0.35815928990470614 0.11630974964992169 -0.8575429845774225 -0.004926591246454448 -0.13660086734184373 -0.35921058428727126 0.4332291228441223 0.3970022826543227 -0.7186509700664532 0.18505890376154044 -0.23114110175386648 0.7979840335247832 0.8629703063901133 -0.8302142411106499 0.9922598546352974 -0.320030017442096 0.519374184200496 -0.15519315804808698 0.037136384878888595 -0.9434265237949431 +77 77 4.676870824952212 4.67035268739145 5.035955825363851 4.41608316099047 5.404838720193871 3.9894167847397672 5.076217143666584 4.823511122099224 5.230464804640697 5.114797130903411 4.358271105581979 4.788572124604769 2.888035005520525 4.119775702888666 3.772090589778305 4.537853532671235 5.029843163192039 4.089941857569595 5.254309178220334 4.556016590484532 3.3661515105483213 4.591047184649895 4.926436859861022 4.112946529161329 5.819876210095207 4.790795337254035 5.0014744781782055 4.6951202999973995 4.392954577766417 3.9554156319987817 4.928997263912747 2.6268551382057947 5.384330677510345 4.397203727833883 5.743953015034013 3.3464324041974853 4.090748352511399 5.252010975089158 4.004426317310695 5.026258586092749 2.13101283129403 4.232239796148346 3.348351430773615 4.21815314920669 6.095725605812089 5.031509617231286 5.864060799650389 5.0211536923598254 5.153447971944194 4.025691000844963 3.4135315450691146 2.72327155945698 4.273011228740676 3.2709311521816766 3.9475248079065968 5.248770184931009 2.8221239996011294 5.122669035925793 4.216720299946571 4.6234248689975885 5.095403872171024 4.334218147761528 3.5311258155035676 3.407097389292815 4.136615256390106 5.179174846712121 4.088193030727462 4.404610520251824 6.595024336816269 2.0066743099531363 4.120724040773819 4.550336017105888 4.471383276822141 3.345386265459477 5.005182329102981 5.123329259931399 4.284553580792265 4.032451242606917 4.377865745351126 4.254478560795494 5.632732402512171 4.887573955005666 2.9296211934514726 3.0163390814188666 3.6361669424938627 3.511987346512166 4.125817896172821 4.075285724866858 3.258385946566478 5.235439481793028 4.655867616697126 3.6491094152774943 3.9778815633016933 5.354728039159107 4.519182125014049 5.743758798456824 +77 78 0.40431517120592453 -0.9401252947962171 -0.9613516603834236 -0.8508633481269381 0.8108313228426645 -0.936864125098918 0.8347389063548529 -0.4417309923899 -0.9647779840507755 -0.1345349512557814 0.8846093137876798 0.051832804273356015 -0.19167796527813596 -0.9692298112954896 0.6485923946484582 -0.2570384795861804 0.9499286562665308 0.8459579541358611 0.49175208522241753 0.8390721237620467 -0.06742862872400668 0.8404062337730949 0.018165461581978404 -0.8197770177479948 0.9658031938301432 0.553399649750776 0.8596410873891605 -0.7492222225422038 0.3454669978719549 -0.34019711801684305 0.8701093323884719 -0.2548710099928748 -0.36836546590230435 -0.4291022746513089 -0.6766785101423216 -0.1943632226467651 -0.12780856326664658 -0.7383209639259061 0.2919457727355743 -0.4960545182213738 -0.20479571218938575 -0.5920788186323893 -0.1254211538437009 0.1025282933787992 0.7211759975337158 0.6814030617726792 0.8332586607356613 0.1653236997950307 0.6605230550943058 0.9111512367964845 -0.22107251482377777 0.225840034136916 -0.041909736598319425 -0.6050488756307746 0.7595514239736578 0.8937536864959832 0.1714106248547398 0.6382612892098429 -0.2977487510341561 0.2294337147824439 -0.9438643987320716 -0.19001850396123343 0.6994746035846806 0.10205801202035425 0.1817700160964535 -0.4847803700372262 0.87202739053389 0.39776860969798866 -0.7616038814634474 -0.07566957752389003 0.44367069372963885 0.8854666668864084 -0.25908443754438526 -0.47574679294210553 -0.23925159211923663 -0.32563835875947467 -0.1511336456884702 0.6805122218984838 -0.5168652732318255 -0.24080621256368606 0.8808592366853634 0.22330739416013778 0.19991099572254 0.026021073062419964 -0.8029806542764033 -0.224249040030696 0.1300808124156423 -0.09895736959178913 0.4122719258487817 -0.4582233423260138 -0.07299801415967155 0.18725182856347788 -0.355258697489893 0.9756083289207154 0.42798134622328377 0.6717779408160851 +77 96 0.9320531585197829 0.3407548597544343 -0.44518228554476114 0.8302468188835854 -0.6869815376266466 -0.4416971223727484 -0.3018814987104319 0.9415617956698152 -0.4495762938305947 -0.39689782260237627 -0.39727356151146886 0.30748076862700624 0.24347703882465055 -0.8782117251712946 -0.5595228528660632 -0.6802754329659082 -0.802851002172156 0.37592852579071634 0.49413229311007756 -0.5284392549236467 -0.25266663993605687 -0.5521279477416081 0.4780938499756531 0.39353013823523364 0.340113944406196 -0.9227747245285096 -0.42719258028521967 0.2606674332492309 -0.4367817148983639 -0.2708606634554309 0.29337244749232383 0.0479157022390988 0.7165216910000256 0.5900927229234776 0.8878260561895239 0.5707278537688918 -0.9453345583730044 0.6236853037913201 0.22680309181298575 0.7487519578442299 0.21599958275126263 -0.5354220140007537 0.22467941233089928 -0.1799405017884126 0.6776640822212212 -0.6243733571313386 0.8393461732057843 0.33616128536736656 0.7387678007419327 0.16695940068426496 -0.3167961469381837 -0.3167392631928043 0.7378809501116181 -0.22038072120144747 -0.015765578017956416 -0.8621102378315166 -0.09865875260556822 -0.8818851026789736 0.5132669334277828 0.571012689819103 0.044406483565398114 -0.48737246427186 -0.19870189808554573 0.16838075509541928 -0.31771795095554145 0.5177550330586054 -0.04549446082650288 0.4456248198064614 -0.4982417417418512 -0.18374025935744576 -0.5505025599300968 -0.027304172931975623 -0.835962273037725 -0.40046199646700864 -0.8893591135261558 -0.5980153658089267 0.7250196423872786 -0.09575741579264485 -0.8740697673230609 0.2882836245188034 0.16981406275005995 0.8110253558767249 -0.5124618059003214 -0.056487671152269936 -0.46698580936904666 -0.6737571887769622 0.5415441567075343 0.18098282722890957 -0.04487432953107673 -0.3991662708382211 -0.6265274878339195 0.1696035403891174 0.4475512503863479 -0.6566894294151977 -0.947112805267722 -0.9147982404931436 +77 97 0.25480551540024443 -0.8221035214334094 0.7714705703534956 -0.1826497824632678 0.03572397355239176 0.8033049467614057 0.3612307237915562 -0.6029927303468217 -0.4630614725037945 0.9184637803733882 -0.2256467927200867 -0.2331629626606151 0.19903659422085673 0.9481133230760985 0.24179904982366618 -0.8730299124550702 0.9470750969422672 -0.7107561691376647 0.27713930908870976 -0.20865836435202367 -0.7718739240976511 0.8881702456512504 0.6985551663457314 -0.25110765555896153 -0.39878176136108734 -0.6401983002050544 -0.6688711609421358 -0.11736175045385244 -0.10674930672503535 -0.37134737807042795 -0.30882289003607677 -0.023322358269061816 -0.2730302110497045 -0.7114579841182822 -0.32230925980118963 -0.4678983130437844 -0.9404478774361431 -0.8408430451490541 -0.6715478929928762 0.8923690791230185 -0.0945713238071515 0.2995647554269181 -0.9625119275847269 0.7116042974265182 0.8022331062246428 0.9932191299339641 0.743283806287454 -0.6646533104774848 -0.6297308871011891 -0.5804334334835017 0.2657096263712455 0.49955932083582755 0.06557966413161886 -0.011895261343704888 0.5326666348308071 -0.6525434690768348 -0.4130848557417859 0.6359668783148262 -0.5403166646524833 -0.5634634960686173 -0.8453066573895702 0.28184619032433944 -0.15912006930163747 0.6771417977618301 0.5937073854524604 -0.8233314385998298 0.7335302913402362 0.03102501572177596 -0.6530277664503081 0.0785177287642882 0.32257653281541976 -0.3771964975222526 -0.47031362080829475 -0.1193579786308554 0.9570893722946838 -0.3491842866985 0.9187308230900406 0.7699373687697662 -0.01739468996489668 0.3139983656007126 0.9893381568183888 -0.3509927856316206 0.12408540714244753 -0.44599837790768904 0.5892256702739276 -0.5874451717160176 -0.793694642589583 -0.10304345217425981 -0.04862039465775725 0.8543645013612637 0.08103431668524097 0.1562610333724801 0.1221347893212732 0.010307020557181135 -0.6037814976197216 -0.7184597375096551 +77 98 -0.2731094166677275 -0.24192178350668625 -0.3889560413945541 -0.278237936546212 0.7229758153427532 -0.5018772824467352 -0.7521077808898222 0.5417518495310611 0.3592629825384521 -0.7328496725854075 0.9201034327489899 0.7485976769681824 -0.3269062935763669 -0.08729053064476311 -0.7104162797049778 -0.767649956026401 -0.8473930042450306 -0.17909008876076893 0.5220689589625265 0.17131695758582444 0.7562362520075319 0.9291819443605784 -0.18992680767580383 -0.5315203965254471 -0.950605358128807 0.2403312215692026 -0.09093283324897539 0.9439460776499964 0.7854884952014913 0.4299580868534094 -0.48919897409677215 -0.3365443641777994 0.6197106875039868 -0.34751185259698514 0.7202538728541101 -0.8844999382139995 -0.3754782129703138 -0.6064809081985343 0.4626917376640254 0.1639307999416546 0.08525477120738412 -0.9002475229760152 0.10985653945051199 0.5499577578089436 -0.7442926263987666 -0.13079101849024322 -0.2936160837930404 -0.6988892790847545 -0.7531485275333794 0.8619605316182544 0.3720485321389062 0.8359791251902176 -0.36151796554909743 -0.11201525407606194 -0.24351660219925142 0.47246033091358086 0.7666226723342675 -0.20826506607268747 0.8242859177061477 0.7137377519711163 -0.5994517763700453 -0.8533378205952713 0.006866945581622819 -0.6624007395606897 -0.08309153021025195 0.5159226954030081 0.03272951802563906 -0.7758128310303534 0.7158432760797775 -0.07798593281531607 0.4185854034947367 -0.2101026558594541 0.7370130051049122 0.6596122227193033 -0.8056445146453586 -0.07724244497180077 -0.07131094240680524 -0.6591412329519597 -0.8357497403927454 0.710576913822971 -0.888716145085751 -0.7352724197568614 0.3175821800317433 -0.17414412811424884 0.4199968212507228 0.951420744054253 -0.3754990195735082 -0.2629747801788047 0.37119355397937115 0.42360166034299973 0.21475468068751313 0.9250057832259182 0.9340197658641227 -0.7738503313431317 0.4776177205724581 -0.1899225882973934 +78 57 0.1986700930768821 0.4670769178282901 -0.14119893683474127 0.4761731961642306 -0.4533253074021315 -0.024261637943916003 0.5441906844813291 0.7446454203539865 -0.7600418495857333 -0.872230800225265 -0.34300600472399245 0.9399425547991573 -0.7956790044562834 0.6604740457279146 -0.504862270890466 -0.8935627062898535 0.7996741372321046 -0.9592631454931748 -0.2366353450599139 -0.2141241711506141 0.2946281582526302 -0.4546174824697189 0.4765372424488947 -0.7348829951816582 0.25723421833355187 -0.7723101304784588 0.33818996491443176 -0.1500655562318287 0.11570867777509664 0.1410894920273673 -0.22604039275874555 -0.7965639940357849 -0.07352102667390703 0.22216037659612797 0.05249656438391659 -0.1346935744342157 -0.6597823905821445 0.2264180753175018 -0.19142084971243345 -0.8860234455238076 -0.5087573779879822 0.0894030196340454 0.7003941715106072 0.7373499289566361 -0.902229804874563 0.6918209403022617 0.630141782674569 -0.9211366914178942 0.1657350698309088 0.6589222302283686 0.5384492785457438 0.8196333159422355 0.22761587367234704 0.34567767043459896 -0.6971784349742371 0.30598122286778473 0.08181785460590052 -0.030494012247435087 0.8340546069385124 -0.042387262403496884 -0.8704839762646124 -0.5629038824887436 0.7695255578749904 -0.6967341130367535 -0.11350761565949452 -0.9889102514558215 0.6388189835021671 -0.1820665651064446 0.5611319042558629 0.1943266778713839 0.7430565440998811 -0.16686883606254144 -0.7492634121004935 0.47061367682126565 -0.7992282154281127 -0.49923790509685095 0.29097396668771736 -0.9523904067013169 -0.8564791297062866 -0.25650017380291623 -0.40284375446416787 0.46192711388639096 0.012541055673476631 0.6902641799508529 0.20127779452904626 -0.5171764147896087 -0.4954411799928571 -0.28480209152432745 0.5667507621056718 -0.24695514087846604 0.4380296829531032 0.4928192912619216 -0.7223232517269347 -0.3521760626444923 -0.7553389905495085 0.6324363067333696 +78 58 -0.6815314676991238 0.43254981500457856 -0.9212677017022697 0.37017306385675375 -0.9868635816195908 -0.6457664921517556 0.30016415221202064 0.3821079851454561 -0.42324900826316614 0.9798784891645937 -0.8547755428036476 -0.045735006319438165 0.8870504763624172 0.7137238740783773 -0.0034362231922748787 0.8418047372743596 0.5432772310067204 -0.008577187187207347 0.9354953939305752 -0.45086537591214304 -0.8791167463024665 0.3616166309758231 -0.2046206227656857 -0.28077637454052007 0.789976047197807 -0.09256548670737152 0.4368051894969802 0.7875184135985507 -0.7833280280433499 0.4570380781219685 0.07703224839340694 -0.7455668341005965 0.47428986738720247 0.38326200243790565 0.7670171713998266 0.8727260140041735 -0.19771402128472193 0.13950647984890407 -0.49105498726139896 -0.5139421707066534 0.6019096685372791 -0.6471156796846109 0.1527980574080885 -0.6003522472679503 0.6967757990834091 0.0759322454103315 -0.48128954574025773 -0.6822288824599201 -0.4395695285039112 -0.9765794176474913 -0.766845647255413 0.7325666917652591 -0.07596527061089686 -0.34209915738827745 -0.28020057399179166 -0.4340154291735294 0.8682395378554799 -0.6890538139213047 0.5413951900669491 0.9107274898181932 0.7778567324869485 0.6641869248208585 0.30974402405727663 -0.23233891321997535 -0.32020060911208237 0.5660091369866971 -0.38720976847093636 0.36921781842663215 -0.43838669780169215 -0.030760251630715052 -0.5526130270229073 0.5811585036305389 -0.0333513912303125 -0.2225181189572576 -0.9392952759886002 -0.7972257106235403 -0.1797997530850517 0.7931394448590172 0.4466284826948592 0.30674283996340135 0.1693145991735705 0.44260468314955514 -0.7166673083530373 0.7229795636367378 -0.361616427694178 0.9686640736161436 0.17046756742805824 -0.851971078079111 -0.22960991788115015 -0.4519721559772827 -0.2828682167977081 -0.001344585930222797 0.9952294232016039 -0.9588767517894445 0.8153299751884517 -0.38815178508425063 +78 59 0.7470634838879149 0.21223848973722648 0.7376836377479914 0.23826169647387507 -0.8415702474539266 0.9453164091607049 -0.41673374352591863 -0.017931232931964525 0.5558447877648904 -0.5856077948146752 0.005746780563484766 0.5299001095880116 0.43580326579146944 0.08135905806375865 0.5342053203274855 -0.37302800799226943 -0.5829550785916153 0.4510842626167022 0.9115842912157481 -0.6054807617021392 0.2020261395233356 0.12114020856644614 -0.7839142143491276 0.8191534177375528 -0.9739896155008614 0.06086143318013448 0.6444319825063487 0.20882593240123803 -0.9427138180881818 0.1829590887794066 0.759742044261843 0.8437336043429684 -0.3980439772770312 -0.4867856057453235 0.19769541284947234 0.360047437229416 -0.6285852643190597 -0.15763674730490895 -0.5029077917075224 0.7384780423741417 -0.5564940542949204 -0.01785668981580013 0.8229970735987115 -0.021925699923801334 0.3096709577619887 -0.3142636507418801 -0.5949196134487291 -0.07734935895680417 -0.9937153954028004 0.8323138025029584 0.5598014258566539 0.7714162514667713 0.5838004442889715 -0.3243076267051026 -0.77414597737986 0.5289157674072689 -0.43226791250161023 -0.8708867347768428 -0.9727835370790168 -0.23750041766481877 0.5815139379773582 -0.6292734734927485 0.743905148767662 0.6419124339354176 -0.775384711478218 0.5345957716120056 0.03767040680627609 -0.2321484712069104 -0.3860511230027943 0.944304965483246 0.7181300145638874 0.23994625176117768 -0.8468547025419093 0.000452303860276837 0.024296832088084086 0.3721994176621437 -0.4653010701198037 -0.16786410952665443 0.43338869194402174 0.0786051063821549 -0.28149625673931 0.17150271008583062 0.05625559772623023 0.5997224110704917 -0.6875375598579161 -0.4924924933538237 -0.16330861807742392 -0.791210320925601 0.04524945228910937 -0.5727367096192728 -0.010177749879234144 -0.7058905166503491 0.6918108565231302 -0.5302054188108078 -0.7209745740608147 -0.6880140920532041 +78 77 0.40431517120592453 -0.9401252947962171 -0.9613516603834236 -0.8508633481269381 0.8108313228426645 -0.936864125098918 0.8347389063548529 -0.4417309923899 -0.9647779840507755 -0.1345349512557814 0.8846093137876798 0.051832804273356015 -0.19167796527813596 -0.9692298112954896 0.6485923946484582 -0.2570384795861804 0.9499286562665308 0.8459579541358611 0.49175208522241753 0.8390721237620467 -0.06742862872400668 0.8404062337730949 0.018165461581978404 -0.8197770177479948 0.9658031938301432 0.553399649750776 0.8596410873891605 -0.7492222225422038 0.3454669978719549 -0.34019711801684305 0.8701093323884719 -0.2548710099928748 -0.36836546590230435 -0.4291022746513089 -0.6766785101423216 -0.1943632226467651 -0.12780856326664658 -0.7383209639259061 0.2919457727355743 -0.4960545182213738 -0.20479571218938575 -0.5920788186323893 -0.1254211538437009 0.1025282933787992 0.7211759975337158 0.6814030617726792 0.8332586607356613 0.1653236997950307 0.6605230550943058 0.9111512367964845 -0.22107251482377777 0.225840034136916 -0.041909736598319425 -0.6050488756307746 0.7595514239736578 0.8937536864959832 0.1714106248547398 0.6382612892098429 -0.2977487510341561 0.2294337147824439 -0.9438643987320716 -0.19001850396123343 0.6994746035846806 0.10205801202035425 0.1817700160964535 -0.4847803700372262 0.87202739053389 0.39776860969798866 -0.7616038814634474 -0.07566957752389003 0.44367069372963885 0.8854666668864084 -0.25908443754438526 -0.47574679294210553 -0.23925159211923663 -0.32563835875947467 -0.1511336456884702 0.6805122218984838 -0.5168652732318255 -0.24080621256368606 0.8808592366853634 0.22330739416013778 0.19991099572254 0.026021073062419964 -0.8029806542764033 -0.224249040030696 0.1300808124156423 -0.09895736959178913 0.4122719258487817 -0.4582233423260138 -0.07299801415967155 0.18725182856347788 -0.355258697489893 0.9756083289207154 0.42798134622328377 0.6717779408160851 +78 78 5.27898896127615 4.857102369304584 5.61408352551824 5.161020615800239 5.582517920597347 4.846048090927094 4.432584798618762 4.4539135838723025 4.78800415792916 5.8275378263401425 5.463793448955274 4.8898477559965094 3.7878265275157412 3.8571721527949423 5.6546328972316715 4.2087301312913965 5.043785282874145 5.820034372714572 5.951058181619864 5.038732613435129 3.4213289867704857 4.338027902433734 4.706017788051669 4.945657231353687 4.608956349069987 4.118956256950964 4.529084054949388 3.8144252236740908 4.725772593861179 4.423260818604949 4.593227882773844 5.447028577338263 3.345021648020989 3.3096051298290226 4.702391972115041 3.734900510792915 5.414367688824738 4.574985356203427 3.714042953142606 5.3929036667648615 4.433569161589715 3.4301625001291116 4.229626854885157 3.8395569723934058 5.308945026276116 3.622231380056065 5.726315781892617 4.320766162381679 3.343448904173782 5.494028621022095 5.109511686662814 6.293251454103017 3.6271291090628237 5.463288378090168 4.391046939995921 3.965655928395311 4.730105349258852 6.255751226446081 5.033100351431329 4.501513234594588 6.160297541498945 3.813321595760714 5.3476725910915786 4.596246414611546 4.590123514431722 5.404563714706024 5.017068535373132 2.9246175263823924 5.4820177722909 2.282376519693501 4.603083645037409 4.975411817098837 3.328257586700203 3.1445161656615763 4.724527155075866 4.236126143189735 3.249934138133943 4.526268491722462 4.768181279208454 3.7103741731216773 5.204625272834299 3.778417022063748 3.7894047644928954 4.532035129014028 5.005832963677014 5.273393791493721 3.7584747023625433 5.465942196796359 4.169995475995496 4.7349537228978384 3.3580944227559937 4.263676203424772 6.468269484227371 5.798257655204682 5.672414168593572 4.957348787045717 +78 79 -0.836580564216012 0.7240024388374691 -0.1713366064014279 0.658171230817238 -0.7339308621460401 -0.2796640928913485 -0.5353378449217361 -0.6325412641964121 -0.372617224091762 -0.5124225342960991 -0.8334894726181776 0.4019528870057112 -0.19573033336191092 0.9081117421488472 -0.8100534575001113 -0.5085604836217099 -0.7026022049415979 -0.27812727707234686 0.3227734463070202 0.1683365593322157 0.25497878071785673 0.6861042463520277 -0.6357544828187158 0.5659043325276449 -0.3773270145447072 0.35433631690727374 0.012453930472545505 0.13529856998865175 -0.9840820146364238 -0.7036752235074379 -0.9733078050474946 -0.6596077378800591 -0.9716231260327477 -0.04276625532056655 -0.37938732613999004 -0.41730928550401636 0.3961901493954767 0.5044918282581168 -0.9994440299825027 0.01740064109833317 -0.6735022424752133 -0.5147242610033014 0.26730179519171826 0.19702785742050044 0.1741619452516172 -0.9677017724438197 0.74004577866712 0.34330176421335556 -0.12317903357590487 0.023208362406817784 0.35360904475318033 0.9604994361858039 0.26525944009527636 -0.7110482099993485 0.21151603155886822 0.36316545998155103 0.9818300343812587 -0.8473236671430664 0.697596976593094 -0.9085650152051448 0.32177187513926975 -0.2410190789786124 -0.8721701223799838 0.4874982530762588 -0.6598722952793663 -0.5984280028950808 -0.6541899492035805 -0.4771653725385028 0.4180622503678135 0.2616356233629964 -0.07791295260428721 0.566973327758203 -0.15051436709314037 -0.3479317221752831 -0.7255498161976601 -0.09897166042744776 -0.948512821396637 0.09361364753690071 0.16283501440999948 0.9122159354885366 0.9618030921938299 -0.40364577813191493 0.6962153612836088 0.6827811478056234 -0.9751194310276003 -0.7945229670152496 0.5767926810017212 -0.5068790091735278 -0.5262711238441431 -0.9284098081810945 -0.7137304280749857 0.6334117012058149 0.9988783757163133 0.17259539509152244 -0.9807918179765414 -0.48217220605048916 +78 97 0.6655903477968232 0.12221628620302094 -0.5513242906979476 -0.6220450436064264 0.49799012534018483 -0.8472912703309587 -0.34290080046817595 0.1629808892023321 0.42634555362333804 -0.05762000706324 -0.389532257541914 0.5632545704635523 0.22473059926695393 -0.024999975527649987 -0.9717006322287816 -0.46938525601550274 -0.6982606941440774 -0.9386076803511818 -0.7767247871124796 0.9099134985667214 -0.7546083656008482 -0.4804539182119205 -0.4958789266347583 0.4125472429600774 0.29702863312216277 0.631386019266799 0.4582594494657324 0.48311372038287104 -0.38062825508258924 0.5905172112951667 0.5587311448885843 0.2835382232958754 -0.22805737103555623 0.12347343907650798 -0.5800555043408231 -0.6081191078920409 0.6012165705670807 -0.7071629396973083 0.4205156828008958 0.25714467230730675 0.7603090850505951 -0.3437726383063422 -0.38437850115497985 -0.8119862668036533 -0.6413476755074663 -0.06733599091887976 0.7744768250978811 -0.44627923961885174 0.1234047947217023 -0.5106535711692577 -0.587990804841352 0.6866334274383579 -0.09830971172987035 -0.851601046559668 0.3322977679353334 0.2476864554806839 0.9074842197703052 -0.7212984079242217 0.9319632977046508 0.9090473950254652 0.643206256126756 -0.8022658517412746 -0.49815861494974834 -0.09339762918701267 0.8557311624115795 -0.8450136787169473 0.6868365192899772 0.14570695869975503 -0.837120131819932 0.2579758317700289 0.9925740664902154 -0.8047497681427855 0.2798750526594689 0.473570890961716 -0.9296581617186974 0.18072838845644412 -0.5931247389810879 0.8892902348523057 0.5108150399970399 -0.6802602996243245 0.9872568188456343 0.6243132101203062 0.9035753386121979 -0.20636418145579727 -0.10240183809399062 0.33953967358394554 0.6707122369804193 0.5230114105909462 -0.7416490662259001 -0.47893754066150196 -0.7866764914980111 0.09170421468255796 0.7169828049193996 -0.9023123269456768 0.7458884268934047 -0.7983536734962275 +78 98 -0.7402266754403659 0.6809486158805473 0.8075209005697848 0.9320520328726427 -0.03534059817846158 0.47462306615770467 0.955739704899329 0.7476876110752928 0.5730772981370094 -0.8004385542085162 0.6304534285101695 0.8400235703401147 -0.4927610332310408 0.03379975161638127 0.40958119773874846 -0.3586626620288824 0.4622335213157476 -0.7144886441260034 -0.6795196691898628 -0.5250511632468025 -0.10961543323007605 -0.505376994236103 0.6149104089759618 0.07998946691038111 0.27104442168983733 -0.5667659704294428 0.40079225219113823 -0.29338579377352136 -0.19227241011158824 -0.9723893161980828 0.2905379128428274 0.8599757210191514 -0.29317169654129915 0.8236783458208639 -0.30476513310735953 -0.23374631094213516 -0.9705445567149016 0.9858445554717807 0.29874394854847885 -0.8717859781461963 -0.3887550140584606 -0.6806110038596249 -0.22453120006850802 0.6826705917713365 -0.8730352925735827 -0.010441577907204236 0.5233645374177622 0.029908171560360408 -0.5709759246422703 0.4647767194417962 -0.9400210194182161 0.31590519278000007 -0.8498412310153152 -0.892391367543278 -0.8835036216308758 0.07281795443183392 0.48206143621482545 -0.9150578703462762 0.02905084593186058 -0.6457803962852704 -0.5630027137651754 -0.5947704224955062 0.43748918080377375 -0.9285798876172575 -0.5604146905236256 0.4470524634826416 -0.8552011820400942 0.12137229331545196 0.6811086455013682 -0.32711026968580037 -0.5685709446759546 -0.40960451486562577 0.12522919332733506 -0.9022379006786603 -0.34052950590693576 -0.5474005340529204 -0.24176611145625237 0.03280804791033787 0.7511724114982485 0.3911856494079047 -0.11014180130099538 0.8032259691531827 -0.16760988030082125 -0.7854478256667876 -0.7435656027459565 0.7774310547766006 -0.880498384340868 -0.8514169699376064 -0.5978555077245453 0.2473568925861349 0.9162774353728751 0.798858797753148 0.23995093645751675 -0.7721312820366497 -0.12707890095617058 0.08283577329693959 +78 99 0.04037251389203744 -0.7499388295935532 0.3903441994545822 -0.9848161526002273 0.5417618915429634 -0.34926980666833707 -0.33705085984089966 -0.5163831058914099 -0.4591424304061391 0.9180304543670268 0.8527616000912457 0.6937418460123772 -0.10827360865656876 -0.009751090909746019 0.871927965253964 -0.31111946763335707 -0.08645560275160058 -0.6671408223196751 0.9542201966129742 -0.39895424166517723 -0.7377492532712171 -0.6844841005800932 0.5221752132889457 0.4611857529668515 -0.18281344157498136 -0.4560581388195737 0.4753901658748114 -0.35541617546934723 0.4625630041026507 -0.5488806108139483 -0.0943880358110829 0.21251546001563004 0.47312000927857567 -0.3284843860000155 -0.8472110709612783 0.6507313665468981 -0.841253544471313 -0.6836200297475925 0.3263827675495832 0.6393319444593788 0.7332937562555912 0.017521510474883817 0.6174661460039979 0.484337158900888 -0.7868599778321945 -0.6806248029216142 -0.4277049245876767 -0.9523599544542336 0.2385308430999591 -0.5591340786780457 0.4394768746342914 -0.8824205683916861 0.8935380247832407 0.44981782758843036 0.031046890233499935 0.3229301487849312 -0.6904824811357999 -0.6734239654554568 -0.5196361005772436 0.3901207163391509 0.49976343368451936 0.06947280039104187 0.26633665255893724 0.60061185270435 -0.8082073426201506 -0.42621712708355775 -0.15422327416751092 0.29590332160757016 0.5638674551760208 -0.1303764193350776 -0.4306551165029082 0.7932865721978921 -0.8449346708380145 -0.12511440085775605 -0.45914213848636964 0.9981118427530296 0.13028734874621994 -0.24518153724929448 0.19948715357043012 0.6417293873199124 0.5041162159843235 -0.12019940938146112 -0.05901911953837091 -0.71784983773882 -0.5488889004947688 -0.7772218033066522 0.5323076646314848 -0.9980968055880317 -0.5420449159695533 0.8039926122899417 0.12221813219455413 -0.45067916916519635 0.9482084149567307 -0.7859299024857991 0.9911250981124544 -0.9160216717983027 +79 58 0.09545018775349767 -0.08452898796058617 -0.4247170931981883 -0.5677518764879645 -0.7464165143809371 -0.9398966824529325 0.07471490853254381 0.5357071578882384 0.8633029110802077 -0.6295323836213274 0.7489901186375267 0.14597981616346178 0.13461847938594174 -0.698209224320768 0.9148118689980789 0.015698863840029276 -0.49837141142101316 0.8967571115047608 -0.7108841788382443 0.4536631997146654 0.4535758021283687 -0.08096937875105281 -0.1604326035478294 -0.19478226298775292 -0.9027910561969259 -0.4737186394171946 0.8322149180628453 -0.6859996721354513 0.2309272858930147 0.6762678530940014 0.1033799064957206 -0.4166479356982862 -0.002054759995931299 -0.2561129319433493 0.9957615539595848 -0.6277788175846428 0.19768083087589972 -0.039343205120257574 0.07852169949728194 -0.9966957333612674 0.20678571694157077 0.26888610456466444 -0.9674121721910545 -0.7696035047444574 -0.7954042927987155 -0.6888927802564544 -0.7255950101132584 0.3750871492843135 -0.12444595292532967 -0.12947403465004448 -0.39516339738687334 -0.9487834878069588 0.807403042809294 -0.49868415846308856 0.9016848668131765 0.8941908123069029 -0.8868213773375679 -0.09952998031872462 0.17130015978547353 0.14350044761165837 -0.46512590698560885 0.51960602102476 0.6317458533711626 0.5154661504194424 -0.3222513321194922 0.8157979463044422 -0.30950117874510497 0.38766821540317964 0.4456432515098221 0.19708591194957026 0.9578863581013644 0.6110611632328589 0.14861504758292088 0.2763808662138556 -0.7997546011085377 -0.26228515384716355 -0.9454860961054852 -0.6531474335773879 0.7660692698231621 0.28978623557142247 -0.33945193554976694 -0.6940253124145159 0.1215890710003209 -0.2789214214042224 0.4695944688201399 -0.02074485439692375 0.8233705112887704 -0.003785848423072835 -0.17090074514711984 -0.11037740598799517 0.7535822779258528 0.9299250278275952 -0.5630565676278876 -0.7584269106796662 0.6329480055229386 0.4647329775992459 +79 59 -0.6862383632891447 0.763933042686787 -0.5035229677976689 0.7604734543448104 -0.9434246999750953 0.25510057943174846 0.3250043020065536 0.24628336267682882 0.5340528129941648 -0.9105673494166036 -0.3920954337044722 -0.6449487074851359 0.3768190642785918 -0.10938779904477358 0.05079420687536618 -0.31436820396617504 0.9246875746796592 -0.654132284024445 -0.028957295408173378 -0.7719231890589924 -0.8891295880769781 -0.7483410079260526 0.20446338307156275 -0.3123537372480194 -0.29628325416794987 0.6487645329402223 0.1867275940359625 0.878222760011689 -0.33273603814823605 -0.6915336480562666 0.31948388309290743 0.2553868468576135 -0.15966161012994684 -0.9163038987586685 0.056574805904471726 -0.5671146601505539 0.4482057609302865 0.9128220452908811 -0.35676408238606605 0.2144103110737996 -0.5531044036001669 -0.6436560701720877 -0.9178789962235019 0.9233769085806756 0.9708323876525784 -0.5138283944519306 -0.21298780560166097 0.258102276859808 -0.5714176689309534 0.3874978705013936 0.13465167699931424 -0.24324271762002203 -0.20454229236878985 0.1296839674305117 -0.3974884781689394 -0.6256322834215038 0.013883938645010474 -0.6378058092326595 -0.285150488203862 0.44803764287715264 0.34349243860238343 0.5844801434266365 0.1671831428392958 -0.9691993039990638 0.3030675166583281 0.691085202399621 -0.5561817856540381 -0.4598328707312558 0.8695525038117966 -0.07625971523484232 0.47301260298130954 -0.765659122361044 -0.49070719127168694 -0.51663507745966 -0.6996801576743787 -0.12808774269878742 0.4422399743712959 0.597607277063676 0.963238707297573 -0.20324031022750777 -0.12521334299328135 -0.35606787621424174 -0.190121934778831 0.332305856727549 0.75477472946831 -0.6383783857789302 -0.5380743181806718 0.11458655924844896 0.6643362134943225 -0.02945045034828131 -0.8046417710736951 -0.7513752877374937 0.3847383861397484 -0.4226947629547717 0.4610595471613701 -0.8027941488764707 +79 60 0.7938375138799685 -0.8138888603739645 -0.5082963685972133 0.8588104483173986 0.7762560168721797 -0.4478331700452107 0.4141760970366488 0.4609984992076217 -0.5266743438100103 -0.5191071021442821 -0.07053036360102105 0.7412696145117903 0.31044366522725264 -0.792864013424877 0.06548088476598712 0.4916108025792931 0.6697441188117141 -0.5723082306925193 0.768718310424841 -0.8776554655983875 -0.7357819224641398 0.0044406765480800026 0.42639344119768374 0.00020647239677851204 0.2875076737399791 -0.00014503339750171484 0.2758501226472405 0.18750884773075915 -0.7559967803025089 0.5997693694876958 0.5576594756567514 0.5907226447712424 -0.5510598615878868 0.13517717751562852 0.1902660224959809 -0.03426074305552551 -0.15745565753276525 -0.3883245233526751 -0.5717899514972395 -0.43475434953288383 0.3661742796313441 -0.44198880742039304 -0.2736629588424184 0.37352569946595016 0.4261562576638025 0.8266634794479764 0.2188270425880836 -0.8634050002483056 -0.808714302253325 -0.14412155497161927 -0.8039665761190886 -0.9546989524405489 0.17686671197143955 -0.013771049226674714 -0.8489574079467146 -0.9461958634622727 -0.37778314490795517 -0.7260603924575908 -0.2859704376937384 -0.4350881883056883 -0.7081208069004632 0.7708794766935383 0.6773744979428755 -0.6864731650934945 -0.18498717456697777 0.13582156110470267 -0.1259976812670931 -0.6919352135405512 0.7983444182989587 0.9628428777674649 0.1028677814165797 -0.6285391631149491 0.8505587804537835 0.32811262193229185 -0.793550896378092 0.7192408881459613 0.5009420746698967 0.21962145385323883 0.4624406774767198 0.9525288437322041 0.3467807131959473 0.23595044545813093 0.09356866281398335 0.13262610872079295 0.7430848467548838 0.47424714409040347 -0.37300080540670555 0.5700854394029842 0.9471470717604575 -0.9733887198907196 0.7306872598384098 0.4934133126585998 0.08253949870828281 -0.352443186144465 0.8131655234730983 -0.0021236300250564444 +79 78 -0.836580564216012 0.7240024388374691 -0.1713366064014279 0.658171230817238 -0.7339308621460401 -0.2796640928913485 -0.5353378449217361 -0.6325412641964121 -0.372617224091762 -0.5124225342960991 -0.8334894726181776 0.4019528870057112 -0.19573033336191092 0.9081117421488472 -0.8100534575001113 -0.5085604836217099 -0.7026022049415979 -0.27812727707234686 0.3227734463070202 0.1683365593322157 0.25497878071785673 0.6861042463520277 -0.6357544828187158 0.5659043325276449 -0.3773270145447072 0.35433631690727374 0.012453930472545505 0.13529856998865175 -0.9840820146364238 -0.7036752235074379 -0.9733078050474946 -0.6596077378800591 -0.9716231260327477 -0.04276625532056655 -0.37938732613999004 -0.41730928550401636 0.3961901493954767 0.5044918282581168 -0.9994440299825027 0.01740064109833317 -0.6735022424752133 -0.5147242610033014 0.26730179519171826 0.19702785742050044 0.1741619452516172 -0.9677017724438197 0.74004577866712 0.34330176421335556 -0.12317903357590487 0.023208362406817784 0.35360904475318033 0.9604994361858039 0.26525944009527636 -0.7110482099993485 0.21151603155886822 0.36316545998155103 0.9818300343812587 -0.8473236671430664 0.697596976593094 -0.9085650152051448 0.32177187513926975 -0.2410190789786124 -0.8721701223799838 0.4874982530762588 -0.6598722952793663 -0.5984280028950808 -0.6541899492035805 -0.4771653725385028 0.4180622503678135 0.2616356233629964 -0.07791295260428721 0.566973327758203 -0.15051436709314037 -0.3479317221752831 -0.7255498161976601 -0.09897166042744776 -0.948512821396637 0.09361364753690071 0.16283501440999948 0.9122159354885366 0.9618030921938299 -0.40364577813191493 0.6962153612836088 0.6827811478056234 -0.9751194310276003 -0.7945229670152496 0.5767926810017212 -0.5068790091735278 -0.5262711238441431 -0.9284098081810945 -0.7137304280749857 0.6334117012058149 0.9988783757163133 0.17259539509152244 -0.9807918179765414 -0.48217220605048916 +79 79 5.29653088445674 5.985125129488497 2.7617480514360953 5.406370268684558 6.499141381166064 3.3574928451853454 4.423309251627228 5.253903000816745 4.998826008420967 5.358760443703596 5.138561009285324 3.721275251681814 3.27151056881522 4.735004843406579 3.7071927151043575 3.616754359210474 4.997575450573745 4.602567478877049 5.864395858399139 5.230243179446091 5.699080703048096 4.51711970031796 5.181006340073019 4.314830109541159 4.890359991468896 4.4928162484698815 2.7071739918930455 5.732715891797637 3.2613338265820535 4.128340163151009 4.569315669463009 5.274905050306524 4.7626040419164895 3.3430184372619265 3.661390047841971 4.8129374958977165 4.61118125086633 4.295135888583085 5.140465817139861 4.441715235125727 5.158956892430968 3.938495887198214 5.664410220072161 4.284874949288521 5.4718184548240725 5.85578938192685 4.488829094153889 4.099946636551212 5.35180700322912 2.8256463969419334 3.724152355431824 5.117466026440115 4.006874027176008 4.2125705806624625 4.311480182974311 5.566118020774414 5.480390812569243 5.069353889969802 3.58641294638542 3.9520496722823717 4.716468581682428 4.554482955994786 5.8312244391305565 5.432157595499564 4.322215990778468 3.5258545697408414 5.17321876175739 4.36608458448672 5.588235140201693 3.9366559980111377 4.093925810537632 4.5967449734076276 5.107854722137187 4.030606446020648 4.81396244159159 2.6921108045241144 5.1075061005158435 2.6373107171588335 5.530131530034502 4.1312296866079965 4.571290908420959 4.112939022148206 2.43578790719233 3.289694381857819 6.386633005911907 5.230067777543649 5.08398962350928 3.3966726966963554 4.682064466157563 4.380190663263854 5.12658052707362 5.031519789198535 3.6856408912701033 3.183633493941187 5.346661398027216 4.118357889875954 +79 80 -0.9952462174637253 -0.9539008945811438 -0.4388570113921788 0.6144971832737129 -0.7925821414196503 0.24435849646142582 -0.6653268892244337 -0.9903941863105059 -0.2756531640047004 0.7661017424012868 -0.3436717532209357 -0.07700364345927624 0.22825805260939025 -0.9320085079461959 0.779052419394751 0.032141048234286096 -0.9279032481939873 -0.6767215032416123 -0.9749879192074309 0.9887326408243768 -0.6056596933432208 -0.8017362747138885 0.9335125281324395 0.4955754141286204 -0.8189303197456403 -0.6554236107319669 -0.38641356918290803 0.6839852270338227 -0.05077073573599167 0.028091934856280254 0.4267909758690589 -0.9117426384359137 0.996441288423723 0.35567140947026976 -0.27332606889968125 0.23505050320902465 0.7029834801225512 0.8002308149670836 0.5958436362609276 -0.5960297779615655 -0.3370839978174096 -0.9722721329305315 0.8594954095182745 -0.36746251258866036 0.7006303133323715 -0.6084910037240974 -0.5192478540969592 0.42570206149907674 0.5622015854413414 0.2573995718800983 -0.485716572213599 -0.4156208274930471 -0.05174003488567114 -0.5125887843981756 0.9797892218410877 -0.6878700764298158 0.9491924838222789 -0.6802637297998038 0.29142857571123715 0.6976733783084796 0.389193780609169 -0.6365564543834241 -0.6336989454469337 0.4242829935496293 0.08101192893823606 0.2735678526214671 -0.659330770268582 -0.38910488426067635 0.5678072188935053 -0.7919202840834203 0.5065168006282295 0.4714624976386643 0.9573854575271581 0.33025986954106834 -0.19548489315417594 0.0036799640609854745 0.4614872788711879 -0.293458471152114 -0.578744159803197 0.006465543474552415 -0.7120723979079939 -0.9829619818437225 0.40691066004117293 -0.25908361550881587 0.8320600374289002 -0.7421002278989692 0.699628193128329 -0.7613395759880301 0.353234290327328 0.26769399390702175 0.2410136413235089 0.5452382373839151 -0.20926840094679 -0.14844571509900817 0.013249889959232375 0.9656766293297645 +79 98 -0.8173833464994971 0.7539327467765438 -0.15873816165200783 -0.2970925190936544 0.9593962675971446 -0.024341435649646304 0.6478706578792983 0.7813558672489063 0.98639532163675 -0.14250458411997435 0.8680277136126007 0.7124797612465281 0.8755870211441275 0.3143204984150052 -0.26093070571545307 -0.6219607603964288 -0.03940684099384839 -0.5934633450210298 0.9101286629772165 -0.06839942538313504 0.8757100629010552 0.6739232822443522 0.9278144999849656 -0.9198155261156196 -0.09228943131239697 -0.06471547860281968 -0.3203865157003696 0.44554999788940575 0.12018661403006226 -0.20155042286405878 -0.2461107465114134 0.619627297333438 -0.6622276795412685 0.3730414130479436 0.7512725738330865 0.7442210901072028 0.823615882921088 0.8955355187694829 -0.3827265733415486 -0.16026858426067792 0.5901230668010964 0.0464134534007985 -0.9619935154159283 0.5777944466357907 0.8954917462598144 -0.909463215910226 0.4522726225288858 0.3790103241721323 0.6996606184282685 -0.4573642826401645 0.343118621520871 0.019530527898701022 0.2368469983607766 -0.71227205484035 0.18074493538576863 -0.4018219933919034 0.8255435464289413 -0.23672966324896727 -0.8273136830956325 -0.046902079959410425 0.7067845973286759 -0.5345526022651133 -0.7349419508506876 0.8727074991117962 -0.5070161795854491 0.05065775468103717 -0.7735624890836545 -0.15567604591090878 -0.7927891348650473 0.4793561153255499 0.09273549511833457 0.19071810503765896 -0.2582724441937856 -0.6043688210031555 -0.4144315509207659 -0.026035222688425952 0.1905945975988641 0.2997541056144317 0.15647519890904715 0.9480239680488376 0.13956627111813313 0.7226746986593537 0.0042331000320179335 0.006225633913647277 0.03557573725306007 -0.7811638609683915 0.8850750949011588 0.5842625985811771 0.8887053826416806 -0.518097311960692 -0.04191709649088993 -0.8175125128998766 0.2341460124741841 0.45948078312042573 -0.9773925568270712 0.3772326438140625 +79 99 0.027256233273574404 0.5452967360448584 -0.0642927711114698 0.1830004122017841 0.23754897032064526 -0.5494669649650663 -0.7813103494073246 -0.4969964053027398 -0.8927607242339926 0.6158533868786182 -0.3566807078885341 0.04276624058238787 -0.5456021470682049 0.23301820139110618 -0.4263073378910318 -0.0989769623147363 0.24071145214392375 0.03634114027282154 -0.7838406988872546 0.9723052708265145 0.7196968126168559 -0.5534454535719544 0.6513371552157199 0.6191389404570318 0.764756300543505 0.4264410645590302 0.0233261507426481 -0.9946835314050815 -0.45341351813096864 0.4374520999367939 -0.9656917227982493 -0.9408844637989275 0.3217071317107312 0.680990555498717 -0.3107323494979055 0.36207908466960204 0.3499434196139892 -0.003243715126250102 -0.25439293020492904 0.7431053675254031 0.8325069052571465 0.5740184795720911 -0.13796150843103927 0.5907892058578577 -0.48747367594880275 -0.21729049183142268 -0.7947564322954841 -0.7322409137170371 0.7011592954564096 -0.712166557000699 -0.3030930817746964 -0.3873952950743633 0.5437211049471387 0.6716120542494153 0.030982906663424847 -0.6430522833605585 0.895046363382048 -0.7165525849122925 -0.2366725452479037 -0.11879024036698027 0.4529138502507901 -0.48676552955332664 0.8205008638261122 0.8849536768520221 -0.6346541571291651 0.44532583634530165 0.8023300551751484 0.16982144061758753 -0.8641705399012996 0.959439510177825 -0.40539586930858906 0.4925623237705281 0.6621888862202894 -0.38568170852780637 0.3496556414866592 -0.2061040488493222 -0.4237450331552888 0.16327408853974656 0.9868901321152805 -0.5192238663115858 0.23204552501264586 -0.26409568691006635 0.5437417734357051 0.35807793272064736 0.9638922018797238 0.4777172833479897 -0.5412521934000105 -0.5467511203240418 -0.7119389614965341 0.031755161445443214 -0.7551297886792039 -0.4219743453412197 -0.0016065989363378552 -0.2121178412907001 -0.237346368946439 0.2877593655992654 +79 100 -0.5089739047561443 -0.5089018649238695 0.014217560677588503 0.49281658026069586 -0.7700363392705234 0.07305156362234744 -0.021495119375594784 -0.23189443269816423 0.04356207394859091 0.9288939919845716 -0.8676783664234962 0.8428033188704274 0.14414758889802792 0.4532465728155024 -0.01986534532238471 -0.6053906401065452 -0.6595743261180957 -0.06370873106153163 0.8204356717960739 0.6448589580033521 -0.7964541919477555 -0.6403727061459001 0.44374537285481974 0.41976076374019167 0.9443437762956901 0.8937600096657423 -0.5383744608204397 0.9114875913995257 -0.22030972754347333 -0.4541065882060633 -0.48301969850252924 -0.7753090314297855 0.8078920436507735 0.15583056304778653 -0.38556408220898475 0.9104617430610937 0.7528680848365159 0.09360201203537066 -0.9520698589825434 0.8306352202251133 0.6603365754965012 -0.27155806308223984 0.332295719673817 0.2438852060307355 0.9196221544141623 0.9523411327624645 -0.2943721701910609 -0.5813784228067111 -0.8535128583775162 -0.5240386579110952 0.4149120135292419 0.280735065652707 -0.9525693674683127 0.16539404205423236 -0.10442871749262927 -0.4844017340043818 0.22431964223627254 0.5539005188294743 0.2500392943893295 -0.3361380703738599 -0.8911717257183682 0.5151764912243555 0.43919665308592926 -0.2008395293691836 0.6313436012825724 0.12043185027445924 -0.7690909934418244 0.7053091246566321 -0.6414744606908787 0.19523263587833983 0.8800187910687383 0.8514782957871381 -0.6087635200413166 -0.7706597366079422 0.19292910041171019 0.5829228257915149 -0.5592525382539526 -0.08001585908693754 -0.9405031446508083 0.2588965916093273 0.8922991632602395 -0.19127426437055917 -0.3705829072399438 -0.7850582445717595 -0.7681128519460922 -0.564550963043152 -0.5680771417738704 0.20495942328668293 0.035478003728831364 -0.6673902775286404 0.9555127331954434 -0.34625890239385093 0.6189757500995288 -0.275216006831122 0.4915645539961342 -0.2599959454848335 +80 59 0.20479604076981262 -0.46635292796608807 -0.26178836470026545 -0.4057442174489607 -0.9236555726093993 0.4146781288285579 0.7352559614693388 -0.21365875044351057 0.22291150109828584 0.9610408683361042 -0.4795884739415177 -0.6476182121979923 -0.9253644452432257 0.5389289483018995 0.6368187393147668 -0.12450680108870449 -0.8703275770657697 -0.30609521453813193 0.826016900506104 0.871909377671642 -0.612616055158494 0.6350428069337479 -0.9779744319897037 0.40597098930993347 -0.8430401453148797 -0.597887067627888 0.8244392343769178 0.4931758314607615 0.5816101221734491 -0.1094889211597252 -0.3845834160103361 0.3509206801105291 -0.3281276335932626 0.26087228793939077 -0.3883945636127002 0.41513922168960526 -0.5335364732603285 -0.8257988395512732 0.9499921339647606 -0.8342840877134343 0.35208681314386037 0.7964124767705105 0.6274209614004025 0.7026906762488436 0.02598465503713987 -0.013141039190745607 0.055518609435627475 0.5546463125132854 0.9137098274290616 -0.22621402727465423 -0.3888349193850744 -0.05251258939009973 -0.9474135832781094 -0.7802638068569199 0.8474711891930666 0.8372848998154419 -0.8676318509614991 -0.3787178506072688 0.10880166913976752 -0.5344385123856066 0.30575527570166305 0.8211242397798719 -0.8771524050283714 0.258936993967229 -0.9055987178540095 0.554529818930289 -0.9792083886525689 0.5908059264564178 -0.561475982341697 0.8507221875040516 -0.253579365768668 0.06157746691799426 0.7220434958954887 -0.9335025823780994 0.6048512253851608 -0.38614382174261475 -0.5640537775885179 0.6957570411192395 0.3032522007527956 0.39566601153168746 0.13236698531757796 0.8447742281551638 0.8904711759931521 -0.4025209345925549 0.461539239299231 0.41628514039448183 -0.2314046014991784 0.16727659871972422 0.43658351340986834 0.40984003054697826 -0.2742688647392535 -0.23770549700171273 0.7108756305982367 -0.704917677311343 0.9749200428423197 0.453912219807711 +80 60 0.9560050906482256 0.5304319204288197 -0.28277973970280357 0.9359530572099453 0.9078278743836108 -0.6404787458353303 -0.40790144614304547 -0.10909015636561059 0.7790005543072365 -0.3886927285466766 -0.0377128877530335 0.30327257011025655 0.7564646157850794 -0.4986423936401063 0.08769944793211626 -0.42807736177786615 0.16834378025908614 0.688182971481593 -0.27977885898459 -0.13504699688620914 -0.672720151203891 -0.03175660334955377 0.19919540132805125 0.8177521611923357 0.7018667813929294 -0.02346888322041152 0.11462924171863165 -0.9900615524893501 0.7762467567094988 -0.8942064494238566 -0.3260967587184864 0.3155050622680493 -0.2831785005990637 0.9887260965399793 0.9292187998613082 -0.8400740560461457 0.09332928957862885 -0.8086920813706684 -0.7546360567633132 0.1967492790158223 0.7587220050647423 -0.8127889455568889 0.22114968417833714 0.6707988983991273 -0.38557468004953943 -0.5097222628920566 -0.031489093527685474 -0.41869798343357667 0.6991476470195892 -0.21820107958559443 0.7733565170982302 0.8824250444061119 0.8720736384135037 0.490559453576195 -0.9704030546236806 -0.5174962160747529 -0.4942469509373977 -0.23594015657161949 0.5668805275527806 -0.10529006032958321 0.5581346664821887 0.19949077510038804 -0.43399167487671053 -0.29522069831134456 -0.33898357832245485 0.3664728682665588 0.012560552834862015 -0.8589420602744882 0.23184348709449765 -0.8031483934962602 -0.9545965591163668 -0.4755977046154929 0.8124284786749507 0.49348612975320294 -0.48859776791242604 0.3409014192078059 0.7128135704040495 -0.46006147352642146 0.0665523745080927 0.9170207707704425 -0.6012879010154943 -0.9660003795181533 -0.16885732628057637 -0.9764096984740165 -0.28821823592446805 -0.9838968423641203 0.7410367989390563 0.25433580688803636 -0.6535319937972879 -0.28827778820890226 0.6475950204064802 0.8446469026337342 -0.5487208026139134 0.8000789499663745 0.3257966253516462 -0.6847556725790567 +80 79 -0.9952462174637253 -0.9539008945811438 -0.4388570113921788 0.6144971832737129 -0.7925821414196503 0.24435849646142582 -0.6653268892244337 -0.9903941863105059 -0.2756531640047004 0.7661017424012868 -0.3436717532209357 -0.07700364345927624 0.22825805260939025 -0.9320085079461959 0.779052419394751 0.032141048234286096 -0.9279032481939873 -0.6767215032416123 -0.9749879192074309 0.9887326408243768 -0.6056596933432208 -0.8017362747138885 0.9335125281324395 0.4955754141286204 -0.8189303197456403 -0.6554236107319669 -0.38641356918290803 0.6839852270338227 -0.05077073573599167 0.028091934856280254 0.4267909758690589 -0.9117426384359137 0.996441288423723 0.35567140947026976 -0.27332606889968125 0.23505050320902465 0.7029834801225512 0.8002308149670836 0.5958436362609276 -0.5960297779615655 -0.3370839978174096 -0.9722721329305315 0.8594954095182745 -0.36746251258866036 0.7006303133323715 -0.6084910037240974 -0.5192478540969592 0.42570206149907674 0.5622015854413414 0.2573995718800983 -0.485716572213599 -0.4156208274930471 -0.05174003488567114 -0.5125887843981756 0.9797892218410877 -0.6878700764298158 0.9491924838222789 -0.6802637297998038 0.29142857571123715 0.6976733783084796 0.389193780609169 -0.6365564543834241 -0.6336989454469337 0.4242829935496293 0.08101192893823606 0.2735678526214671 -0.659330770268582 -0.38910488426067635 0.5678072188935053 -0.7919202840834203 0.5065168006282295 0.4714624976386643 0.9573854575271581 0.33025986954106834 -0.19548489315417594 0.0036799640609854745 0.4614872788711879 -0.293458471152114 -0.578744159803197 0.006465543474552415 -0.7120723979079939 -0.9829619818437225 0.40691066004117293 -0.25908361550881587 0.8320600374289002 -0.7421002278989692 0.699628193128329 -0.7613395759880301 0.353234290327328 0.26769399390702175 0.2410136413235089 0.5452382373839151 -0.20926840094679 -0.14844571509900817 0.013249889959232375 0.9656766293297645 +80 80 3.3604747211126136 3.723409360456131 3.7036704191612952 3.824851407946035 4.461240514268005 3.0792248401827766 3.8593919522416655 2.485707735552327 3.5144143098625285 3.3625090437399825 2.285931308025332 2.027768796544485 3.2642588061104205 3.910836659397283 3.21074692835872 2.55053084119932 3.9255237776229386 3.1246110477044917 4.216558421641863 3.3269192437849844 3.135945991176268 2.3296257701387377 2.5037448207241484 3.3637302681775836 4.717712893759252 2.7340894871512083 2.50777251321491 4.308672588499012 2.9684711480216186 2.2672412612684205 2.6707126368758276 3.143721245198577 3.8593725644330896 3.472248199301899 3.029515294209445 2.670242646022647 3.576064456797648 3.2699013131524284 3.6523130793482954 3.166266566151597 3.319907378856792 3.422740922318109 2.992480895295179 3.521680774584866 2.35343889518977 2.5524469929955327 2.579697148932534 2.2974207280872814 3.758320998627253 2.6914093805087056 3.8633858354330446 3.58513229342939 4.414925462508551 3.8101361758674335 5.147475501089708 2.571954221972631 4.507884961175056 2.940727043489039 3.2750338306480495 3.2289853214812956 1.8965645389926022 3.1147287627501647 3.9496243476918336 3.0033925985921845 2.15223073449142 2.9228947646780035 3.5182311222127054 4.45907273233145 2.2743564419792426 4.11785346566182 3.68398314011531 2.5975815211816515 4.701698379412463 3.4850104322874182 2.100592417476647 2.6253737964483967 4.470850358178862 2.2276837083010204 2.1198393015133403 3.48392586372787 2.7141500500596374 5.183380621979119 3.222015038067765 2.4815473664555885 2.5038259960833558 4.175385276526947 3.85319042922264 3.0961481546637057 3.6940988343713648 1.7020556290078832 2.313220979194197 3.3493142435088332 4.152139326655679 3.687459188492566 2.9416877614790624 3.0149671869895482 +80 99 0.19712981634317184 -0.3176910438583773 -0.9506636676509526 -0.9064359618287354 -0.6890437341902151 0.8697003057910797 -0.8668553189595845 0.0779497819299495 -0.8778947108213131 -0.45077280429488686 -0.3744733022340945 0.43477377413882934 -0.30201565108839756 0.2019005705081267 0.3723280297681224 0.7700733760898308 0.914146734990813 0.6507504732158305 -0.6889441644920558 -0.7901884372407584 0.1329774324651598 -0.3555687619468608 0.14546300334730256 0.24829679775091718 0.9252837106195122 0.7132898361886342 0.07705750793982569 -0.6423865708387198 -0.6656989048181758 -0.2956858022777502 0.8294251404513615 -0.8426613251710078 0.3261240220476227 -0.3939269110769801 0.7420729013869785 0.10036814386064896 -0.8850770708458304 -0.3988338233657449 -0.1450366015391562 0.39806899487221226 -0.6413372412704379 0.1858026715353378 -0.8305892366885297 0.37134740918718157 0.37717084161784564 0.9129525033943127 -0.5428996719176815 -0.4337369792076955 0.6063684436422312 0.8340006704456047 0.8021653984551222 -0.581337443345953 0.9763705515498295 0.2181116192899697 0.7081614104893719 -0.3671193122835492 -0.8831527104781505 -0.748755923014458 0.9652308162001586 0.4801517945883216 0.35853130555028545 -0.7266886627746667 -0.9083762642488831 -0.9188711989466465 0.05253761515056743 -0.34290631891302503 -0.4972058031441633 -0.9233122538050844 0.6019753608020832 0.7056644466122253 -0.7279992791607137 0.8360198309637288 0.5695463432037324 0.8194754428936075 -0.057378080009315324 0.6176554551561795 0.9508982740875052 0.3221482611512665 -0.7422299671036341 -0.33270742183071755 0.5985414737942358 0.6778951649753331 -0.4922313133910903 -0.1394006270586563 0.37550279084263205 -0.9900123007781545 0.5491667214416696 0.8412073373623024 -0.9113710481279256 -0.2164559525551688 0.33705219341390547 0.03517059365937669 -0.8233276567112762 -0.835016775485458 0.42566118343736536 -0.3257451322628142 +80 100 -0.5584868466375181 0.9296505149673868 0.8136863834222932 -0.14295647916579113 0.7187644912927131 -0.500206182671725 0.4964617600587451 0.6399092200964838 0.9704346204927616 -0.5985289866259549 0.44955074169439735 -0.32090606815042144 0.9638903812079875 0.827903405403106 -0.7541045726701239 0.8107900412306421 0.07340754689593498 0.04787631660360092 0.8047990225968766 -0.40401904196197913 -0.6733874274460159 0.18849529841520307 -0.013208507168230854 0.46090707672919273 -0.4906587628931207 -0.6318199422616833 -0.18608322955828593 0.6440547600353268 0.6040917877878815 -0.842070358366336 -0.5396442223319082 0.11046935194974172 -0.9325613813120142 -0.9384330985151939 0.5647143651618309 -0.6380653080090661 -0.8424118369231395 -0.13923361274013257 0.2574105532876123 -0.6437800824032063 0.9314788669699678 0.09168531050616235 -0.3541939022826748 -0.5904210779690775 -0.6515258740445169 0.13451010142094533 -0.8252622303982406 0.30991584543918993 -0.8605250956827548 -0.5877495870151579 0.500993487173101 0.8733440403811914 0.5679971931095356 -0.9517426227498593 0.8755072263892398 -0.05076524610406663 -0.8043411491666814 0.856754801874309 0.9560230218004697 0.8600266486527055 -0.2079671674348933 -0.7077357340647972 0.10707952275988197 0.9174274430725937 -0.34629568121841436 0.49148517151388615 -0.8884127064457794 -0.9170571661344682 -0.2815636085254083 -0.0026917323348116806 -0.9757639461418257 0.5660064471128856 -0.8502517938858054 -0.5568523778356604 -0.49722285371547703 -0.7939623566429161 0.9527183604217633 -0.10079419131561429 -0.3700123558210118 0.920343867474529 -0.2986930576391693 0.7201108050084715 0.33335124935278304 0.5673025126677325 0.15152447073686437 -0.7069980928119064 -0.845921898414294 -0.5710650811618612 0.9065513318584029 -0.41596069138879677 0.6906203987560251 -0.9249371379467506 -0.969781750855019 0.3028199597562802 -0.25566105618480917 -0.07618412438499567 +81 61 0.6969074635495811 -0.44513137406767256 0.28763202928551346 -0.6325905922773607 -0.0018132691358427877 -0.7891279474956592 -0.4621924030422011 0.4174734259770905 0.11181241981228629 0.36868501280771815 0.615956487927714 0.7615776632121141 -0.9653815255770617 0.14473399329339776 -0.7565800258060817 -0.5343219054207649 0.09308366686724812 0.21879583834735272 0.8726697156624887 0.7185538583256319 -0.608273150066313 0.6978826175991821 0.24934795485209782 0.28690192248577717 -0.33761037088136203 0.0007580288393833623 0.5054802579265492 -0.3235513830325405 -0.2031204128042654 0.04925017387460162 -0.5924213794998174 -0.051239322815034516 0.2671330727497452 -0.31724964583874327 -0.0956147708006081 0.26616284451321204 0.32555666434201624 -0.8919423506748694 -0.08804970913880728 0.9025487344458696 -0.9581890051877426 0.5467046344803854 -0.206786534706906 -0.20890955164986758 0.4905057878036747 -0.6938714780539359 0.19063115615972337 -0.8680741755019425 -0.9645592429439798 0.5332214805098716 0.22453184180073227 -0.5735524100544784 0.6148186389887538 0.43182993340091036 -0.9692057583063982 -0.7993151744913329 -0.6892169306413942 0.33599490899186346 0.8159271541930253 -0.9725923577970712 0.4114832034306155 0.49514597692753703 0.04399803395017177 0.19099939421941814 0.3697692859968691 0.45364766580402693 -0.012886951377592215 -0.5928036555301381 -0.06628286812581674 -0.631376482056117 0.22085466858382774 0.9091121784157741 0.555803513684556 -0.07908150139241488 -0.690002226192955 0.9261779401116397 -0.4623852431440152 0.16138178013142412 -0.5637376962150533 -0.7539759912123825 0.6744671498735635 -0.78163757638566 -0.4316823825203666 -0.8358406126162921 -0.9890620448778951 -0.20766516873527618 -0.23847138869802498 -0.6313148368205646 -0.10869610446665012 -0.8422266762722466 0.19721980952717555 0.5822991411088785 -0.7457059779145325 0.14516867131027866 0.2108872521875209 0.653031876294359 +81 62 -0.847578553694657 0.6084998805121866 -0.11231575392179627 -0.8237255559958405 0.6815280006152789 -0.33817597384944764 0.7983514352996965 -0.873588809255109 -0.3790990103026244 0.6326790841727181 0.033371078061856796 -0.6746792926016942 -0.21928527182771318 0.2226367025502145 -0.5087995573589221 -0.42975742665714844 -0.35540370417777 -0.2855192409961482 0.3510263669189533 0.6890327065257693 0.8436915595896102 0.7002162335763933 0.7766043279834234 0.97485431413687 0.19580297497017618 0.7813541556431371 -0.08415316278263907 0.06046299252031151 0.65193365126664 -0.576360900375686 -0.7308656748092273 0.525527730608532 -0.713509760650183 -0.5033774703683489 -0.48237033710002786 -0.03837381804590767 -0.6032987042382827 0.11075159565002868 0.4985425814638773 0.06891577235660273 -0.9025335079385652 -0.11772274207082556 -0.07527851324728241 0.08122799069259257 -0.7599458653024944 0.5324002420036344 0.5833700826050658 0.6723604187100252 0.43920484575717444 0.6574551413894847 0.7932003375295325 -0.7538499588661687 -0.5600999531914341 -0.8073061478644974 -0.5359199570648727 0.3146417291362049 0.31867388799265606 -0.8629287549713311 0.8671582766752581 0.04876465776376304 -0.25157753772633673 -0.552814598082761 -0.9999680991011595 0.7890612647715636 0.2855263703561135 0.9457876954007911 0.4032824257938097 0.16836767671731745 0.30891127105695304 0.33579829269579853 0.307930444334632 -0.8293717982650972 0.8054107876052807 0.5589550056095034 0.4610438590487813 0.672562075977359 -0.8911064253026257 0.8810302759983766 0.6883243259567602 0.4641008808259617 0.9199489201666031 -0.7781568836234523 0.10291453089325242 -0.9491256296363646 -0.6431887660587694 0.5089014630696636 0.5340006034702505 -0.838700529622004 0.6748804818709788 0.41671659905571623 0.31989768065931745 0.8943300152313767 0.031136113163134027 -0.11788546002522549 0.42588271192683536 0.7707579029338925 +81 81 4.2687477381969785 2.2055764233180133 2.4583350709513 4.004235057414099 2.1130470939615043 3.7334495103347116 3.055987274545059 2.731470550185702 1.730011469365375 3.0024510792005508 2.6561565483526994 3.459865655537371 3.752653587702806 4.115047924509762 4.179574020615203 2.5316075294635834 3.0504267025318654 3.3178050865963105 3.5791761526820096 3.2120896131792804 4.27509169460212 3.235290591782422 3.3910574066787733 3.165606118193952 1.858169504979052 3.249230919519974 3.305683523968286 2.4097205526408514 3.264828117773404 2.311593529593897 2.6970513969859287 3.0412506924464306 3.400821250818547 2.695913040691231 2.6595992482669555 2.4295520008221625 3.6997814477460174 2.0750358796817614 3.0640145582345344 2.9940673125189976 3.4804638947633153 1.7945495828804188 2.947812620783993 2.4958334545625216 3.619680087780988 3.398846213068974 2.4761273705203957 4.7612480086367786 2.9852958169834745 3.5160577028663624 2.6917508840695925 3.904716124911283 2.9164190929210907 2.6705053830936243 3.420360276656523 2.6896575119410953 2.3792356719375443 2.5930368107216424 3.296802010693038 2.712527160656627 1.9822162527698255 3.8968010272978293 1.9609843083548733 3.231914105976288 4.005433071590062 2.7668553831608884 2.4790045416891386 3.0726599203439404 1.363159868672224 3.5253903400160578 3.076794457518341 3.6070853303773416 3.4900394562750527 1.777830169160496 3.5018399150119848 3.426768763536419 3.926242549929039 2.3255693181409294 4.987657870467323 3.3020301383227038 2.864456658427095 3.740260978946986 3.3647410345431767 3.684789912460051 4.141607174362159 2.663121289349534 1.5619760815100785 4.344769934019922 1.9413025568274425 3.3216247420454907 2.685453850429517 3.45467387173673 1.7954820635552255 2.859287409507517 2.1046278812896873 3.8561966910784222 +81 82 -0.8637686950374015 -0.32266892682646 0.2905409779782855 0.6133561838543584 0.5120984170764935 -0.5141702786289364 0.7858565978205574 -0.34157807887042213 -0.5835834369932511 -0.029939446514609447 -0.2360520176778047 -0.04320842630646715 0.9972457952250451 -0.9304519137520506 -0.781767410352032 0.3259507750151416 -0.6582314251932444 -0.9527586731633864 0.652795418391813 -0.09129994477962455 -0.5824013143320979 0.6064273631640511 -0.470130731561218 0.5999530469775947 -0.26105702056386426 0.683847249531244 0.22065370026585862 0.4268822173928044 -0.9228384931962839 -0.49502750156905684 -0.18524653024676296 0.9998413441021989 0.6002175652429873 -0.46623567650023023 0.6922853807866842 -0.09009789067101326 -0.7599121034117053 0.17341201578479692 0.4123546785190839 -0.5495084302005968 -0.24550143162502258 0.34521840362913503 -0.7171530261966568 0.5500728423816981 -0.29372305839694635 -0.9473070723250088 0.2574590726681225 0.9476280731877864 0.17255269371083193 0.4602751718334972 -0.6261732588093247 0.4661493998355488 -0.35643452843263956 0.1723547828824974 -0.11153199320326168 0.48278963331563274 0.10075622570434017 0.05149548324220787 0.5587122002695892 -0.41539030827674384 -0.17181169647994787 0.6189782102265864 -0.18050729538462185 -0.686271267351011 -0.83595039391096 -0.3801938506963398 -0.13392976291440584 0.4569567842590312 0.263908996060924 0.29892966516801645 0.8395734072444148 0.2998017499660608 -0.3921818012907792 0.2522048214113777 0.022815142119312126 -0.4145255314713403 -0.9639225864241587 0.2082901450911505 0.9864348390204083 -0.39479849702877456 -0.6892082297079267 -0.2235834687482392 0.9295238185537795 0.6319423602236849 -0.019710128249091907 0.9732872076045298 -0.05779589388262263 -0.46369251737019646 -0.23909704312486735 -0.2168645707991841 -0.5967819755475661 -0.1982383695826766 -0.166932823421027 0.5231677422988485 -0.8129421604541467 -0.879482934374602 +81 101 0.9195881001616826 0.14110096219186574 0.8429320656030099 0.9589299072127646 0.06275153688245805 -0.6506771931879323 -0.01949909302523256 0.15554291527480713 0.4124967446737058 0.19507988291327805 -0.6770172488707014 -0.9579671711113691 0.0434082314589066 -0.9077995738472633 0.6626177138130005 0.3833132332119966 -0.7090815779426218 0.9969939062997086 0.9332462944935871 0.02765213387696419 -0.518890099693933 -0.018581449392753635 0.6811539536609055 0.12030421572154082 0.2114030313079207 -0.3815761156775024 0.6635538987793135 0.6772080168926695 0.21417132696427976 0.06738892225050774 0.32571599696893294 -0.07198898098305473 0.013188484173116244 0.06636596606851808 -0.3489344876104459 0.9899748317749246 0.9717370327990733 -0.4680409447106424 0.8409848837223894 0.5449470045573359 0.5824714633278341 0.20513259828298658 0.8347512204512468 -0.016128815462498336 -0.320738282424327 -0.12327808917718541 0.37116756171977094 0.991529286157377 -0.15707174486269815 -0.9109364484236528 0.12749534113121896 0.9808750754967384 0.3884024463254747 0.6467845657953935 -0.38578807379386104 -0.18989242374540338 0.5146927255470217 0.4575196532361545 0.008332851038949762 -0.9148338563165797 0.15984637757516196 -0.6700597143248055 -0.24591974640347236 0.28087850829373306 -0.8760564788912784 0.31289075657298193 0.5136255954886877 -0.8915515176235398 -0.19756187568304617 0.512693521263611 0.713289457260659 0.7088526079540207 0.2863013594351058 -0.13597923426797354 0.7510209469843847 0.9331667369933743 -0.20437548833835328 -0.40261010288345034 -0.8055132311561366 -0.7594939114060042 0.05053190492969262 0.46961592447758793 0.9933271216149997 -0.14449466031831637 -0.802194986994196 -0.19818245873749096 0.19027002797352943 -0.6306797565046169 -0.3193190559413517 0.5960349685815907 -0.9271604089053342 0.5114440678971903 0.5347371224727626 0.604253866233023 0.21516700186041948 0.513255181506854 +81 102 -0.2477669904974511 0.5445541279553869 -0.05561774495899541 0.9744381257482664 0.38745619541885734 -0.9793167652196999 0.9693640710203604 -0.83584705911528 -0.14102704786970222 0.8379898213884225 -0.12910916457643085 0.2336544088087702 -0.5332896664010691 0.9351733445646531 -0.647213756821847 0.5291794840454775 -0.4946551909598347 -0.5693341371046847 0.46043936338351465 0.7197475966969868 -0.7790381812501637 0.6180859063585853 -0.5106506473336496 0.9892067849134847 0.7929021610251912 -0.4739660105392669 -0.9733283392691372 -0.39622500516810266 -0.7389124835594298 0.572968938687203 0.6515710091493823 -0.41611171018904813 0.9973332092940141 -0.7978422590002416 0.28870117266281903 0.7513294386383143 0.19244627343134857 -0.018410574343470376 -0.43862368892079684 0.07120151438408207 -0.6845258118781399 -0.03385239800066553 -0.7864428860737147 0.971385251845194 -0.867925914076884 -0.7987933495178545 -0.8376578951312257 -0.91192928164603 0.424403212536012 -0.8542420841322207 -0.0819991048116282 -0.761149919136507 -0.16093874473561876 0.4083138426536399 0.4977858293301409 0.36939491093607235 0.023187905428916356 0.10683183205828173 -0.5927255646945604 -0.2827720880396596 0.347548014569355 0.8788828576942653 -0.2822288057709039 0.5471104804790954 -0.9456780791965251 -0.3548114032841514 -0.6545667933401547 0.564418462949559 -0.03958764837379669 -0.8713190470146277 0.6449270734557562 0.34421325774454825 0.4703995616025871 0.25076912426592757 -0.6950560466400779 0.423951566084378 0.973930395646375 0.4392924560300928 -0.956023978263089 -0.7093657782412546 -0.44070191244543677 -0.7892044585614133 0.2917039510493322 0.28043454913821697 0.7106500174696913 0.7277145388504689 0.3435294343040858 -0.8565113339575559 0.09476167598181262 -0.4459190964881241 -0.3064916081379856 -0.8358525803145738 0.001982137049818755 -0.7823938633253256 0.09300916296037509 -0.7129883232948644 +82 61 -0.7771288027379586 0.20327352085390316 0.8251813900682123 0.649922557503319 -0.92481851637829 0.44519201327728286 0.1288046616943399 -0.561236774829637 -0.47013007364746273 -0.3821039462377964 -0.7862601437085766 0.7317542419890526 0.4023578768482994 0.5023355225481392 0.6114303569147292 0.4958554485327866 -0.6639755126324105 -0.3878010294380747 -0.10871698447143618 -0.40531230538075436 -0.9538034714380947 -0.17416259834074665 -0.04536100781992847 0.4970252876145853 -0.7343863875005303 -0.8401996798039362 0.908238964064449 0.866259434957964 0.38966605766553575 0.7357830048178979 -0.0036789594389106117 -0.9242568802682036 -0.27335285907486306 -0.6465109311473993 0.2351514424514045 0.17634260401560353 -0.015372203300390908 0.21985266381205903 -0.554369916909685 0.7983971500672573 0.02680992371559454 -0.06940892338609905 -0.9092095282267396 -0.005441624045060545 0.9050087800092363 0.3924770629740624 -0.785243326900217 0.50737906809292 0.3351336924099326 -0.7858158483441098 0.03449833789089962 -0.47340081130581857 0.8232396506487318 0.46067973465211676 -0.5317234650747782 -0.9546805631173538 0.3772745342473851 -0.9215922216661003 0.6845669786946003 -0.3618535814395456 -0.9300479889085527 -0.33519179157315926 0.9368658050107292 -0.6210793857281915 -0.06844832509577348 -0.373713643305315 0.9203764545353224 -0.841225278039955 0.40018120435028814 -0.19458502466602967 -0.042649545041032244 0.7339529967286718 0.21680059417697284 0.8769510922119277 0.45449773965022966 0.1936678721132863 0.9585319536506658 -0.1559868945971019 0.5838249835119675 -0.39322603806918144 -0.23358067904148294 0.18745886671558787 0.6683356015318962 -0.06708751310647498 0.7041168672256923 0.6397838201650048 -0.8938416298292879 0.34069116466099847 -0.28016493132360076 0.9465398657860855 0.5645361047238837 -0.4805754261230304 -0.4474716070265934 0.9662138199520953 -0.3917279897714956 0.17456398473923485 +82 62 0.26156314879150067 0.14994396730782378 -0.1765262184466565 -0.7661048748705195 0.8270014542267616 0.42753673765794553 0.40118401556131 -0.19445463909119542 0.017443407194237093 0.1428885848131214 0.12370687771062117 0.4461105443078024 0.6785958354625992 -0.9460850936325766 0.8829972097003902 -0.05378114887419905 0.07701333302750024 0.847554303897994 -0.16163436038534407 0.086622866033355 -0.3895223694968921 0.637786447481189 -0.0703405381606581 -0.3637316833263562 -0.09713092162619308 0.4379092890567331 -0.007953854282510608 -0.4109712809643846 -0.9892651570797264 -0.7597306251290992 0.8404226336470157 -0.869652643500507 -0.48771750326614915 -0.21282679873559274 0.17394236943514563 0.07312671902655521 0.8821592796620761 0.3538395782893311 0.2009799143799813 -0.49397784019310187 0.3847588727606486 0.48682896206138815 -0.679278361291894 0.9872072725340999 -0.9689169354640714 -0.9059696444315519 -0.3402231592206306 -0.0407462263871996 -0.23887503697673274 0.564529799217373 -0.7724876256481517 0.5053795164909787 0.4356146888286354 0.16108366396088747 0.8098576135508628 -0.38625091327727445 -0.03314832284233993 -0.47400454729601416 0.9239858819575211 0.09029885134655324 0.07671007831900734 0.7498825884881508 0.23608618799688608 -0.22029426898367466 0.0651668564320671 -0.9841162055881967 0.32673763284662916 0.3611339618573026 0.19381042568893592 -0.584818476599837 -0.6640140376506536 0.7020490139089348 0.5538860933069316 0.188437886321126 -0.013452004606679058 0.6590642369675093 -0.062385918508627736 -0.6671452952965469 0.811147810090032 0.9863421309602738 -0.9625681081309292 -0.8436802536537096 0.30985149616224894 -0.24410637996434148 -0.8276505973094828 0.5452910525584198 0.606363300230051 -0.43066940910859963 0.9957792650384061 0.5157609375466579 -0.8323054397334837 -0.7580348986624541 0.6631046101342803 -0.6892848823157345 0.6407754208557994 -0.2983185404836639 +82 63 -0.30980612371837224 0.8659300945377921 0.3007833870295802 0.015696047749508946 -0.3991861574642215 0.5997771546035 0.6835914185559462 -0.7447985063849429 0.3850025813781617 -0.8073416229261663 -0.6242167265878726 -0.24938375786558353 -0.8048305168439707 -0.328026360338165 0.14036323910317727 0.19724572994209555 0.5435772922017192 -0.4834967011318043 -0.7432723530011587 -0.585094335952457 0.27802013410283033 0.4313420417886833 -0.318270299881265 -0.6886143372182485 -0.9461522588919355 0.8656313244893834 0.044635164684213136 0.5552683753067489 0.7330010665093893 0.4478416174442099 0.3966037396397757 0.893089425750347 0.326991471815125 0.5191395502662655 0.5084264914250334 -0.15908784715009872 -0.9731149089304709 0.0936358072510608 0.912778132411753 0.4684500735052539 -0.4474181654564582 -0.6930753275318702 -0.26393620327885126 -0.23076132280212147 -0.44873927854623785 0.5952416609336442 0.2547907097924704 0.9338972788741848 -0.7331446536179074 0.02522287109042365 -0.6342508368705158 0.5571206288031287 0.6959998572343615 -0.3117711730989414 -0.43804149877826815 0.1502640938815507 0.2546288852554701 -0.6118968176285193 -0.9207567806100398 0.35150311651885513 -0.9026601846785662 0.4803476466966552 0.969533247897455 -0.336508257867727 0.5424299885840562 0.05324865305406856 0.18639979046644473 0.2597134149300395 -0.11404473719562436 -0.4709616911170267 -0.1519466748594931 0.7309046377742803 0.6036600681705289 -0.45637410289541624 0.6477313448749298 -0.22262886223255052 0.10571879924829264 -0.9381918154627702 0.1768305199828204 0.6037166874637556 -0.29715268206192436 -0.8727913339929636 0.2549281753091035 -0.21293715940342572 0.6979193252662117 -0.9402198564293809 -0.8606181291827169 -0.7280859445137664 0.3852550816083278 -0.1458215786211685 -0.492776866591627 0.8188134366512334 0.9980630201317022 0.7411938490647472 -0.42241898998812166 -0.2547789642555196 +82 81 -0.8637686950374015 -0.32266892682646 0.2905409779782855 0.6133561838543584 0.5120984170764935 -0.5141702786289364 0.7858565978205574 -0.34157807887042213 -0.5835834369932511 -0.029939446514609447 -0.2360520176778047 -0.04320842630646715 0.9972457952250451 -0.9304519137520506 -0.781767410352032 0.3259507750151416 -0.6582314251932444 -0.9527586731633864 0.652795418391813 -0.09129994477962455 -0.5824013143320979 0.6064273631640511 -0.470130731561218 0.5999530469775947 -0.26105702056386426 0.683847249531244 0.22065370026585862 0.4268822173928044 -0.9228384931962839 -0.49502750156905684 -0.18524653024676296 0.9998413441021989 0.6002175652429873 -0.46623567650023023 0.6922853807866842 -0.09009789067101326 -0.7599121034117053 0.17341201578479692 0.4123546785190839 -0.5495084302005968 -0.24550143162502258 0.34521840362913503 -0.7171530261966568 0.5500728423816981 -0.29372305839694635 -0.9473070723250088 0.2574590726681225 0.9476280731877864 0.17255269371083193 0.4602751718334972 -0.6261732588093247 0.4661493998355488 -0.35643452843263956 0.1723547828824974 -0.11153199320326168 0.48278963331563274 0.10075622570434017 0.05149548324220787 0.5587122002695892 -0.41539030827674384 -0.17181169647994787 0.6189782102265864 -0.18050729538462185 -0.686271267351011 -0.83595039391096 -0.3801938506963398 -0.13392976291440584 0.4569567842590312 0.263908996060924 0.29892966516801645 0.8395734072444148 0.2998017499660608 -0.3921818012907792 0.2522048214113777 0.022815142119312126 -0.4145255314713403 -0.9639225864241587 0.2082901450911505 0.9864348390204083 -0.39479849702877456 -0.6892082297079267 -0.2235834687482392 0.9295238185537795 0.6319423602236849 -0.019710128249091907 0.9732872076045298 -0.05779589388262263 -0.46369251737019646 -0.23909704312486735 -0.2168645707991841 -0.5967819755475661 -0.1982383695826766 -0.166932823421027 0.5231677422988485 -0.8129421604541467 -0.879482934374602 +82 82 4.628628128816976 4.021848640295956 3.5596099492481903 4.195850314186698 4.404813078785843 4.343907469360293 5.063894210153336 4.408859313755803 3.5833852292564665 4.4875177855377295 4.041153130563784 3.8752606582904323 5.22627994240702 4.70943926437767 5.475211131394003 3.8225968382855395 4.683322431186071 5.130043599997627 5.056259368414254 4.370341170018695 5.259740028521372 4.471723942901665 2.055887854484369 5.1071376107712965 5.318134646209903 3.8599604402830074 4.312991738633587 3.8381200153146198 5.605467704390338 4.934901637753123 3.4634444234821067 5.361398275752143 3.6308158835859468 2.9949942831583103 4.165499941442644 3.067439564452438 5.434499649083735 3.5949331446148842 4.155766003409811 5.039739697985281 3.6415274849948602 4.647740722061911 5.259184281679087 4.475448976775674 5.194478068506296 5.243760522381764 4.5416405149408705 4.6455897108558375 2.9190387439577665 4.67143175174899 4.272549152955338 5.347776555018129 5.409209395340243 3.399494730392 5.2830884130504 4.805975296945612 2.5607200148545077 4.902691156478666 6.05482736936929 3.0707537634511444 4.867349906222782 4.177618488072039 5.32915096955093 4.45479094306639 3.4907065938340205 4.436700520358382 3.4149918877997374 4.609580086518439 2.6768477224010905 3.221476107921367 3.1170457226874975 5.812915784323206 3.7876991448381183 4.161783307009491 3.987893521411567 5.524820915608053 4.455855240627959 4.456893259028245 5.181774201923689 5.394527861607522 5.10919924650988 4.591343951341843 4.355225996302796 2.9721313929019804 5.156297131211588 5.55529799030159 6.119427973002726 3.8083531935855213 4.463962747852246 4.090230194398292 4.521120921618936 4.799490657274333 4.510263155098595 6.323538614478618 4.865716461320384 3.9407334407965253 +82 83 -0.008116617527466952 -0.5657420023056001 0.031162180213104573 0.6231948065825021 0.40392979160018117 -0.79941278378451 -0.7352165876089061 -0.7322140545305869 0.3142279493155822 -0.4322773467190899 0.6172263509033624 -0.9671539998375223 0.7158836678800915 -0.7000642218526458 -0.5608761674293077 -0.14068416259764205 0.9749654924489395 -0.8961303360031887 0.7208152012381293 -0.9763397765485144 -0.69677761084936 -0.23536719627378777 -0.24448471895670365 -0.09586754175676093 0.6706770014707357 0.5448482855116215 0.5945874925051273 -0.927011599179081 -0.8311742147135652 0.5548272749893817 -0.9487842509712643 0.19691343131187367 0.3764618190303708 0.15879502567440462 -0.40961263545515125 0.3445153798797327 0.6553276209049212 -0.6786275683256742 -0.2766169189662484 -0.48624399256157225 0.06927742219933708 -0.4009300487053682 0.7540714349833884 -0.7405535069946207 -0.06626255913033252 0.8721626831459051 -0.9884432890575139 -0.36457366855202533 -0.7206354451909895 -0.41264534105062367 -0.4215134374501297 0.24252072352789433 0.12947229760791878 -0.6857873522881932 -0.4745410711932714 0.7279933830026963 0.24695868564180024 0.8162210203992635 -0.6813453175686479 0.20113539327627805 0.0862155866103067 -0.35149248500934016 -0.18575298836369303 0.2831033367063136 -0.02387852948257163 -0.5492667255449251 -0.4809614825517743 0.9936389424304235 -0.6660918000402811 0.5097267788020563 -0.4065825905947156 0.9467010284070632 -0.26432054213592804 -0.9818690748364431 0.5616188597516554 -0.5741193571819261 -0.4315387879869492 0.6699712617159097 -0.5014125857872542 0.1760925136890672 0.32748915030705406 0.710762570114402 0.021065262822898667 -0.16391626680504423 0.8549635215879525 0.13680633640779338 0.6494737402496611 0.10578057002362629 -0.8596430440201819 -0.41508714520440204 0.7034325814407811 0.95528012429576 0.45530976388995237 0.7784889162393764 0.3923718919384829 -0.528489587804313 +82 101 -0.9880872271786911 -0.1610719067342956 -0.5556569741541983 -0.5152187019171748 0.2956495794274163 -0.06092202134871694 0.674718494907548 0.12939353826114108 -0.13977281471680003 -0.9144193213367169 0.2583109350342383 0.02566969135903885 0.9207187999323447 0.27851935883908285 -0.46695323540617295 0.4790011848868818 -0.11644106420190803 0.9736820271228348 -0.49977708182422864 -0.4827458703150156 -0.3405317011485829 -0.8205956124870428 0.40442626702127704 -0.8989795620823244 -0.25831752219674264 0.32978975361300633 0.1292295256491347 -0.024218068296133488 -0.49785582740453393 -0.8643704105890628 0.09346400342453376 0.19405459003305547 -0.03681800409941771 -0.46155580779898786 -0.9035356021212488 -0.9783302401882545 0.6874035555496414 0.8095923553503828 0.4336032959922953 -0.45599413117805554 -0.5400858974202907 -0.9345807190800517 0.0410886441145657 0.31331264075435694 -0.21878260970230778 -0.6755864471610165 -0.019161897009825513 -0.30233013917180385 0.29762566017366576 -0.19885228094712049 0.002660428160121242 0.8614384802761641 0.8267846530964518 0.09216241037441453 0.740778713228377 0.13085000079080666 0.15958258200637676 0.9661052096946516 0.8433926336227047 0.023136164047804275 0.81039461814406 0.18393082286435658 -0.8507456626464449 0.8100956945591054 0.163014938463522 -0.5001038444384269 -0.3095489224021011 0.8040015111729035 0.2795763523755461 0.13264969622935463 0.41250869621696085 -0.591882623665146 0.3725475565022289 -0.22169520919791097 -0.8312330724114783 -0.9029327869440624 0.8826283962492993 -0.8733090165592801 0.046798536996321305 -0.6826427571358396 0.10587540920452332 -0.176400741843169 0.9935562502121371 0.5429911320939211 -0.8479799207930288 0.33330237087856895 -0.9005322698296061 0.24030101198731724 -0.3920093923102723 0.3631274416201329 0.19054488105423872 -0.31266597740874524 -0.9286248232730641 0.6189238350037234 0.7709753017496539 -0.04139517350231814 +82 102 -0.8591222688251929 0.6454920616337125 0.3848547396958937 0.06937962152947552 0.44050153888703925 -0.6958669861735132 -0.564702311149823 -0.21727004301924402 0.6174499440465246 0.4808454321477511 0.26807331856863437 -0.7673367613974258 -0.1193269216082753 -0.05883062847062437 0.932232015691369 -0.67650327123588 0.20648859524297203 -0.01602127192239755 -0.7485285031914763 -0.1576196380262891 -0.526856907205492 -0.42635892865643465 -0.2801394666299697 -0.726900199893991 -0.7524380832880746 -0.040413191203611865 -0.670750460049949 -0.2124455927591764 0.757460309246206 0.15457304549537598 -0.3861139031514935 0.44044817789059354 -0.8266987581526011 0.25464098122081635 -0.5114632836186166 0.1321730575999691 0.3615667189917746 0.5939288615051133 0.7575012265648193 -0.9346215413076577 -0.4180330936533654 -0.5636452376621133 0.5121063375038957 -0.34659421178894845 -0.6620578113053988 -0.16023943315393918 -0.5034014322574776 0.739757131870955 -0.035082664308347944 -0.8150358266425028 0.6060762743901684 0.5094666437866715 -0.6419296383074042 0.25163787793437153 -0.4490140764664321 0.33880394421360527 -0.43553056797136924 -0.21223436331952383 0.9198216380845059 0.9464767313565707 0.7649658073974499 -0.11803128181871947 0.8323043595291109 -0.49908727366369754 -0.23395211961191964 0.2982019728537415 -0.46436381087119316 -0.026135659714144666 0.4336921342514417 0.32329072113669777 -0.030731241230526507 -0.4934347242690338 -0.07006185149684097 -0.1548719095009612 0.7597297535092746 0.9713702831015745 0.07187357028190156 0.5140175677951937 0.8972443270943977 0.9315483217776213 -0.9304281577923783 -0.5646538919654371 0.2732096144699283 0.6779087420428223 -0.45709037064795477 -0.9495615214597024 -0.8218418082159238 0.03729592384715308 -0.543526967229703 -0.6696612245602933 -0.21529079285286779 0.08581208764381465 -0.5592673399196535 0.5878120000708444 -0.7865001923579662 0.09734505668913407 +82 103 -0.0561454766086642 0.45963392660412716 0.9231368219928262 -0.7912866439942898 -0.47176447928091814 0.33300354416143096 -0.5806547916917342 -0.591643885735609 0.8025627250926979 0.7847936831975137 0.5018863869841927 -0.25633113393186857 -0.32064527504938267 0.3305240638119167 0.21472203132356804 0.466047406299511 0.6263712700300992 -0.21879664503159724 0.8059787900317792 -0.6765146486514111 0.49488231149494166 -0.5546970357728933 0.04801743375866496 0.5283532384758849 0.6003602632854033 0.08275285185304893 -0.9824839732955579 0.23448812165875244 0.48326366966776124 -0.4212871735626482 -0.4120199756582643 -0.319674997605065 0.3495607234350968 0.19436478385865397 -0.06688049025607845 0.896371473691137 0.6241488484224493 0.10384652374400316 0.2611719911721988 0.5938980386828323 -0.7524150934659695 -0.7752547515963333 -0.9806299379842844 -0.7317205518915113 -0.8297840248945401 0.02960180817913205 0.6551523711475784 -0.6619905108347055 -0.22859716264145868 -0.659145298971985 0.43511635111223623 -0.9841427658799 -0.5329789297563914 0.591139149087383 0.8427966766804662 0.7587387349583838 -0.02326020640520432 -0.06693999901946124 0.09889817825368818 0.640576604908921 0.5539058229349623 -0.786711598015337 0.5357747500589447 -0.7496265381818485 0.9780309058711085 -0.8146446299936656 -0.5637666115372582 0.14228806748937584 -0.28712417900707243 0.2940711206153186 0.4046386225765741 -0.6232871075388839 -0.6990343352894328 0.5805979395560783 0.5777741126947156 -0.7447890930790959 0.6055033651760635 0.17118419180066025 -0.6284930958223569 0.9392536641303948 -0.9028316675821528 -0.4238778656712747 0.3713208714231164 0.06549679736169733 -0.20107894225100842 0.784460249517364 0.3981317477263342 0.6413858606194178 -0.20621712983193108 0.5553072346838215 -0.3579490364518585 -0.6192055565948298 0.23559000010570275 0.5774347290525763 0.2627468747701909 -0.9890529016399965 +83 62 -0.9111532898394026 0.31729320925083004 -0.1395085010596966 0.6158168030009556 -0.7037795057965441 -0.1215873777840939 0.623756975119601 0.11779128300251829 0.899380577194109 0.8344122397999338 -0.1094110410464908 0.47020238909075274 -0.8713205780823989 0.5446254751130819 0.08032759111630372 -0.40405526950494797 0.1473807927566504 -0.8345124278103659 -0.037278068976860146 -0.993586767808373 0.8719764492526563 -0.3251085473429869 -0.7646822346743805 -0.59207600713885 0.9835739910986923 0.43321945027346564 -0.6806785523817431 -0.7886876471602582 -0.28271477560894875 0.7113059951819396 0.5351473659163908 -0.10756460140558333 0.757669118602732 0.6599149401448152 0.09841227124278884 -0.06671987304794769 -0.39900544496975376 0.19354408641648146 0.8164007478036219 -0.7656064923523347 0.4249042887463301 -0.2346976276900652 -0.22295091708741044 -0.4857724600529574 0.03951539833435547 0.9130705479337948 0.6649689422567986 -0.5385361318547413 -0.9819519509706591 0.19009439631076575 -0.6619395207321566 -0.3974252691873488 0.810027639022604 -0.13551001269500795 -0.7404814976418623 -0.7028290907512933 0.13425781876829213 -0.41120936430908195 -0.8958846076799005 0.6191123609059865 -0.09525861097464627 -0.9388358793842433 -0.7707153528463264 -0.17798494427753808 -0.45741321613259567 0.26103124971372393 0.6167270434987395 -0.7742299478471324 -0.2990708067576755 -0.40701697681800586 0.6986901283911973 0.38892113289500574 -0.11898432871951248 -0.7608030760206861 0.0646411283653816 0.27826173469458326 -0.7766447176918312 -0.004684059184354217 -0.661352417984413 0.08433007625749633 -0.3996603493000319 0.43410232641302815 -0.3276803837553661 0.01018299939875189 0.0372114567253059 -0.46395357841431717 -0.016375181360625213 0.8754497859132728 -0.7828680901458762 0.7468582108960624 -0.09036986675048597 0.5956162223692096 -0.5836975918098846 -0.17033203665823216 -0.49724485694525256 -0.1850849597103319 +83 63 0.46418323658333227 -0.43184290776721745 0.8863255019109937 -0.16743842331172964 0.7179471655635372 -0.747812963996221 0.3636864638994668 0.45303947004294987 0.8034882060891677 -0.6707982650215278 0.7174330796944086 -0.30962742838183654 -0.6160620894940256 0.2772435974072933 -0.21943230407763048 0.9375018585376631 -0.16144873245586733 -0.9675307398793291 0.7055692162843037 -0.9353070605660627 -0.9848491991865929 0.9727325367995441 -0.6337522848977708 -0.12397249938978727 -0.6363368721079321 0.565158344138551 -0.10281651260002267 -0.06364365061881494 -0.47977647291288994 -0.5322190982686752 -0.8077229001475661 -0.2530411387358473 -0.556509298833213 -0.5646128120810938 0.6858678378671632 -0.7908660231004287 -0.6017845770042245 -0.29568549990282156 0.5773677547629521 0.8337106070093585 0.8460219314738713 0.12031851955452821 0.07846668957718039 0.12883857866398873 0.6750385256136029 0.622734367980337 -0.3625956769126859 -0.40874676675545096 -0.7465479798066084 -0.03037763662060744 -0.8132788242434474 0.9410563854214438 0.47389046207481544 -0.07588201127303718 -0.2893396194614657 0.5452375307018578 -0.5208457086702487 0.3207682860325374 -0.5366736938498964 0.7994723391569185 -0.6350085615585765 0.4307138877256296 -0.9649952694993309 0.25509309782850575 0.4786079189958059 0.7917163330593522 0.5109495769589063 -0.17486200297302057 -0.6625774427331919 -0.3546068161216114 -0.0781623867986474 -0.533371572522283 0.3950923871494787 -0.5356241195317732 -0.2006287568153189 -0.3860170196913526 -0.9347237288686048 -0.44576652183586973 0.24713089581818992 -0.5406750638907696 -0.30877225135561814 -0.27760853409446606 0.6116674614048798 -0.9792272760560847 0.12766226103606515 0.8656897542773219 0.047165958463365465 -0.7666363552650146 0.3810081804446055 -0.2598202027735588 0.7719232170533541 0.7424265362146434 0.7783465979916797 -0.9535375614024051 -0.21544509643208287 0.06496648631162483 +83 64 0.5913029070877609 -0.618037867096006 0.17532528091555455 -0.759533194422817 -0.585035191151146 0.5369243910555208 -0.9194472740503623 -0.31747605683503366 0.01123902475795413 -0.2565392222059988 0.0458949008338847 -0.27742018100660437 -0.3136402553064146 -0.1270073097763904 0.8244767806293445 -0.7090263300255513 0.7144647689536741 0.5012768009597268 -0.8573243517142455 0.17348212020387832 0.5300365952800579 0.14845068060532274 -0.5339044918111706 -0.8862584568896081 -0.0169359089692962 0.29196803258436765 0.5862074946846734 -0.24925604670959456 0.7360135985274128 0.784489064169372 0.3679902952050975 -0.9626976424236255 -0.4799354678646275 -0.47203511544821697 -0.874937294702649 0.4196718115198643 0.7291221569906958 0.8524054191951675 0.1983912189943564 0.012064207084036882 -0.043341522867528015 0.4313231197125773 -0.28802212466954913 -0.9301828987103653 0.1460820656507582 0.6856990802522136 0.13512084807185976 0.9660641595188546 -0.0805759546991327 0.5584009766871618 0.9033127991710501 -0.26790084865988395 -0.614836535473807 0.8696517703806903 -0.5142473035939472 0.2635761523808169 -0.7369753200405051 -0.8936529166896245 0.27502514951807533 -0.516999734449626 0.47642388614097286 0.007372584176881247 -0.5369098927470934 -0.9206015327960753 0.3852381816182817 0.5454906084276003 0.3845966626971673 0.25840553446116643 -0.6459361588180796 -0.6060194301167254 -0.17628443454536225 -0.24476308648556944 -0.4745074770112354 -0.4155261875744023 -0.6637029242687364 -0.7004371492207204 -0.20200463938908553 0.1174941875305735 -0.6772154093325817 -0.9699601768328565 -0.2316314553529415 -0.9478282890565923 -0.21062742991197458 0.16097398167946442 -0.3287161154713083 0.7543299725369934 -0.9406940683471436 -0.6012492946678749 -0.2925613827244671 0.4385928671518835 0.6937404834308423 -0.5162631798154842 -0.348793789553542 -0.3084512226570981 -0.40741407021443043 0.008445179146792547 +83 82 -0.008116617527466952 -0.5657420023056001 0.031162180213104573 0.6231948065825021 0.40392979160018117 -0.79941278378451 -0.7352165876089061 -0.7322140545305869 0.3142279493155822 -0.4322773467190899 0.6172263509033624 -0.9671539998375223 0.7158836678800915 -0.7000642218526458 -0.5608761674293077 -0.14068416259764205 0.9749654924489395 -0.8961303360031887 0.7208152012381293 -0.9763397765485144 -0.69677761084936 -0.23536719627378777 -0.24448471895670365 -0.09586754175676093 0.6706770014707357 0.5448482855116215 0.5945874925051273 -0.927011599179081 -0.8311742147135652 0.5548272749893817 -0.9487842509712643 0.19691343131187367 0.3764618190303708 0.15879502567440462 -0.40961263545515125 0.3445153798797327 0.6553276209049212 -0.6786275683256742 -0.2766169189662484 -0.48624399256157225 0.06927742219933708 -0.4009300487053682 0.7540714349833884 -0.7405535069946207 -0.06626255913033252 0.8721626831459051 -0.9884432890575139 -0.36457366855202533 -0.7206354451909895 -0.41264534105062367 -0.4215134374501297 0.24252072352789433 0.12947229760791878 -0.6857873522881932 -0.4745410711932714 0.7279933830026963 0.24695868564180024 0.8162210203992635 -0.6813453175686479 0.20113539327627805 0.0862155866103067 -0.35149248500934016 -0.18575298836369303 0.2831033367063136 -0.02387852948257163 -0.5492667255449251 -0.4809614825517743 0.9936389424304235 -0.6660918000402811 0.5097267788020563 -0.4065825905947156 0.9467010284070632 -0.26432054213592804 -0.9818690748364431 0.5616188597516554 -0.5741193571819261 -0.4315387879869492 0.6699712617159097 -0.5014125857872542 0.1760925136890672 0.32748915030705406 0.710762570114402 0.021065262822898667 -0.16391626680504423 0.8549635215879525 0.13680633640779338 0.6494737402496611 0.10578057002362629 -0.8596430440201819 -0.41508714520440204 0.7034325814407811 0.95528012429576 0.45530976388995237 0.7784889162393764 0.3923718919384829 -0.528489587804313 +83 83 4.4623082559619025 3.3679555256699216 3.3486088920483716 5.833135708556201 5.247553860695624 5.244494002118629 4.449289114436709 4.007077765850446 4.485597985056759 5.580482181710161 3.962278325891151 3.6695823820525537 4.736222987833247 4.504213080990269 3.8091675047938933 4.7185226164034715 3.989812098862055 5.2980764688499775 4.599267361419923 6.1702332734687895 5.830265373023292 5.4442392579074745 4.053012750468806 4.100634209606531 5.08046592059968 4.843266919059905 4.93549948795195 4.653797399678027 4.8942074787819 6.547169306873585 5.405023446814138 3.972906284552389 5.008736108167751 3.671688262809651 5.415266462559445 3.9760646586855897 5.9105117701467975 5.516313562635015 4.802349562308593 5.300813323697902 4.250860690073021 2.8087915145486875 4.782562059246413 4.260635902580343 2.4365593796634704 4.221239835025455 4.223148315410577 5.045687044052288 4.233525135041749 2.595824128988485 5.299173505442203 4.399966306064556 4.535176728755508 4.566785826330159 5.843886207952608 5.925449838268743 3.7519532229256276 4.450169336918979 5.540099045299874 4.1407560801283445 4.705768022407806 5.019510296587468 4.572858854924325 4.0129834281299175 3.770277661382414 4.026219837404812 4.493619609491722 4.265492710552239 3.728341843714333 4.851005020351478 3.4171888095067047 4.589079042650483 3.457059487607337 3.8955017464293835 3.7124006143908286 5.143698408628677 5.283643198549482 3.4168384042035984 4.552723687894041 3.6831786677856666 4.774060917898505 5.075215589938707 3.014905024273059 3.860345670139675 5.123411221044996 5.419907645910548 3.731695824575682 4.385673791075494 4.2258446180809335 5.350234915789649 4.799302568764515 4.6527291921670635 5.254437448925688 4.946613751156395 2.922866107479363 3.9172415771126317 +83 84 -0.2994205622870285 0.3905922902079053 -0.4243956671035589 -0.7217240081963578 -0.7750940173690137 -0.8127807834153542 -0.15475659937392616 0.18394101710592037 0.399566056076035 0.9817370960454601 -0.9653185771828106 -0.3984909849002085 -0.7311620068731934 -0.7754093168557219 -0.9909964425755002 -0.9722218265850813 0.4743954482955912 -0.20484474952890852 0.563297912127483 -0.29794044480390935 -0.8606093932961705 -0.8069704527003341 -0.46147682473547014 0.26422277610536415 0.5593638287584741 0.44398624171767853 0.783859491203112 0.9515111619819119 0.7758016786048418 0.8252091015850203 0.6100137107516463 0.3500136043173103 -0.3426151418532901 0.5547400785662326 0.9458632650000343 0.8553754280140531 -0.5276690563799862 0.8308438022734674 0.4311172170496622 0.22947678758904644 0.7084914572669982 -0.42285589209744257 -0.7371351282074243 -0.5810807172801149 -0.47808452044253524 0.21100970406177377 -0.8959711939527939 0.8357850392751955 0.10364206441657897 0.964297706863362 -0.14454638754202764 -0.28648211385216493 0.9879374062039941 0.6787177973121077 0.836584188888297 -0.47258655314368636 0.8303467133138192 0.34599188234404066 -0.9852654164274592 -0.02149187025314392 -0.584790622406858 -0.43678386339538533 0.8243117802111251 -0.6873773021797063 0.5964455665941968 0.3197692070005671 0.06008075656901912 0.4191449086720964 0.5851742151230912 -0.30192015337073785 0.21459140216462025 -0.6664246246843526 0.26469770241910706 -0.3286063651628963 -0.5836792673558893 0.8933483576895582 -0.46788880083479034 -0.7606582051032191 -0.6992196207469592 -0.6149428125155316 0.85956053693854 0.8381248443744411 -0.443711234162822 -0.5517302002680018 0.9961107196438295 0.901393370907918 -0.5508250311879346 0.6834532158950983 0.0057325503093352825 0.6308361619089584 -0.7119396673511103 0.15420700503354223 0.7461835122096896 -0.9507180991720001 -0.261432655522426 0.6823366871174235 +83 102 0.6908994310758954 0.18444352159508703 0.31372046635195305 0.7062120933203431 0.6891907018376524 0.44336128138066 0.20842307127460757 0.8969525988245917 0.7513738359625144 0.4081138789966752 0.05150808816434216 -0.15635344999458223 0.6531475683178558 0.19597689135490914 -0.12025636887884783 0.39208981029951606 -0.36974505017852644 -0.6031103415916341 0.7644400428965246 0.715431440206088 0.6895895786936606 0.5215089572078575 0.20042123714224447 -0.6989381225946936 0.7221099832608939 0.24961087635812707 -0.6236004700864475 -0.37980118521179285 -0.48941741513378556 0.8699938667221161 -0.27379498723710083 -0.4068337976231817 -0.9951388202345224 0.30754429967273267 0.880736422093054 -0.12273080196458541 -0.6339530569661611 0.6307245645948001 -0.7355563667407035 0.6254554349441497 0.5682017497683913 0.32654345901958215 0.421061881843116 0.9210313527711729 0.40788336016793436 0.06337738666722048 0.22639859137875584 0.684362269716136 0.3100822533364276 0.34341174487002113 0.6702554606015119 -0.9509954466942796 0.043093120712116795 0.6724769344822608 0.6031888601663509 0.9390304786294401 0.9446369969764297 0.45205983877136835 -0.6344899382953524 0.7705283945675463 0.597850032436875 -0.7814308288591802 -0.3163481657445908 -0.6881578225466689 -0.9251267232239875 0.23611895530504334 -0.8813643507803155 0.023219063606424672 0.06130011933819346 0.9985227515308612 -0.7179779536648294 0.7099603459301351 -0.9319793278573336 -0.24342221063870317 -0.5523467809103093 0.44991049019184715 0.8062511066373839 -0.5884585940428311 0.6533519887120909 0.7212371835549853 -0.6858210924315713 -0.5032782135047829 -0.3299892339378525 -0.15581772489850487 0.8294021991476173 0.6275237436011794 -0.38071097068752247 0.053593859208391104 -0.5438565982457007 0.8353176967800457 0.9035054508598062 -0.12523507007985435 -0.5397195801887822 0.7343980874575657 0.630757092047423 -0.0487568372185867 +83 103 0.9252558841213083 -0.6321191201059406 -0.2983127107868633 -0.8824727557435306 0.8986843859633356 -0.8567926999922129 0.4230069207079763 0.3397262527587275 0.5160808122849432 0.9748842764151249 0.12140272397058793 0.4007542640714423 0.008080324629929247 -0.9989450463152592 -0.5190564277598391 -0.45003163857356654 0.47909820709954243 0.6854727289500859 -0.2606488666391631 -0.6316677234394064 0.542578370409843 0.8954495197554377 -0.9452087096404505 -0.351832111880362 0.8724136665317728 0.9446580121577604 -0.3126039799675795 -0.7809295709788331 0.1088922748000225 -0.5555686605942876 -0.7886912837083648 0.6582874013978655 0.2304501982821976 -0.07418867545602281 0.9969554736324537 0.15186531809605497 0.6021885506054645 -0.8226060691910069 -0.41676343673926675 -0.4289891512967119 0.23872892868148066 -0.35144693026852747 -0.7738683689285517 0.22360487416711328 -0.00888774072900933 0.3285866507175754 -0.5167699194857966 0.2536242380297711 -0.2937157145490763 0.07625471233606773 -0.7338543607155701 -0.6389971300931585 0.2769985007333784 -0.7803136135408086 0.6798829102831758 0.7846041996001085 0.040956907906437134 -0.7793470516844418 -0.6395644198003894 0.7147837945681357 0.6099978474227217 -0.8673526669910507 -0.38757942602633944 -0.07690310099265552 -0.18128303285169256 -0.7847435805229461 0.659658673735602 -0.8681460067783027 0.4772238975322525 0.19692592625718808 0.6936513426428668 -0.010960256168288662 -0.669467705659363 0.4055737129745931 -0.7179488362601492 0.5983698079505217 0.34017726040450946 0.034273086004591 0.5397257970469946 -0.4636007709569643 0.8012302618163936 -0.6344975018878678 0.07577408373586536 0.11199987812333445 -0.9185523761140195 -0.010739469767057086 0.09085283116297571 0.1577385586658917 0.4557157638500169 0.7681334792615475 -0.29349807864904887 -0.8126073254570083 0.6277845491705119 0.6973441665280187 -0.0259562267209128 0.593857213424962 +83 104 -0.4085486004839274 0.1839843594741244 0.8235746503501804 0.6501728215038238 0.44430005176333087 0.7733053828750052 0.043185767362263316 -0.47228187770113705 0.5206501642940928 0.4570178145576833 -0.913824083516813 -0.3142549786360518 -0.72111769220916 0.3497034967966215 0.19918524750928746 -0.08605580705585836 0.3054051140542484 -0.5866792353484898 -0.6106831986942329 -0.6141645101860236 -0.22877413909391975 0.6459558744483054 0.2684523589328722 0.6620801564960093 -0.3555528713395857 0.7718696521599249 0.7586079406986064 0.15846526372314784 0.5055895258339884 0.9438439406284735 -0.4641183828282005 -0.10172313802525945 0.4016419557836439 0.4665240236019794 -0.12136033617729769 0.5696234187849794 0.9311429823484194 -0.28821547081807286 -0.5178669028422076 -0.9452908313109336 0.813954008104584 -0.15825667197423487 -0.828458227028642 0.09001488941007385 0.19706341991980003 -0.2762795870336492 -0.005023331249107477 0.1429873081519859 -0.6142585190377763 -0.010926847867498202 -0.9420817048699941 -0.5734461949996414 -0.3409758422370821 -0.3288916426273063 -0.829897910602768 -0.6579532039554203 0.16648622725737838 -0.34754508597745426 -0.6081756862047514 -0.03269344711160138 -0.8448236727371492 0.8563328192398996 -0.4909627394976286 -0.02291629606664758 0.4838210439907631 0.5202458364613414 -0.20436828129601214 0.6751494941838341 0.13950740543669626 0.5245026805711654 0.2645624033007392 -0.6401868939336526 0.010650798863328204 -0.11492444674877533 -0.04098220153141896 -0.6165227046120263 0.7336919738088314 0.18094923761513515 -0.3654955218160696 0.04169629079757331 0.47165429042769436 0.47023688552956977 0.08914165754130132 0.940196623615225 0.544232775389971 0.9302774591438032 -0.4518609696432083 -0.6440337646727954 0.8459040632316295 0.36528692344577074 0.27423205831220754 -0.43207859859718156 -0.34701643509213476 -0.1368646850061217 0.1808375211535278 0.9312040945492499 +84 63 -0.523456427702099 0.6991520241725977 -0.44427767205959534 0.7185502611157306 0.9697063584288084 -0.5919901000141572 -0.10635049471920355 0.6677610105200322 -0.2749144824398133 0.4403150410023402 -0.2758673876159523 0.23600497608173043 -0.13856262114993267 -0.6256026354309245 -0.5888234124029057 0.5803590519797026 0.5573910530829778 0.4636952420095437 0.3092743741572668 -0.10985952843565805 0.8349927088586842 0.9187054501778804 -0.8929827309542058 -0.6532692800102113 -0.2733962628882718 0.19132194167682237 -0.9134368227716085 0.3043409899488472 -0.020541595911831134 -0.34981328854836846 -0.9352739450140113 0.8777908043069582 -0.2794366876463392 -0.10189971485285643 0.9129735923164641 0.8751318826580476 0.6744044781588252 0.2945471239863584 0.06707640622104027 -0.06773478153053203 -0.8697025352291339 0.6619516892660027 0.016098442664566726 0.6107208790393637 0.9402394683837898 0.24143931769474425 0.26190649132623034 -0.12779828072366795 0.5148828266862993 0.3244223027638411 -0.4999513694619606 0.9276440091720934 0.4427515935007371 -0.704248271545121 0.47491490300388195 0.924699012440265 0.3038342374192131 -0.1156439622677814 0.10961616872635238 -0.6957483505662478 0.008466913138924115 0.5978050367266874 -0.3581789985412651 0.8693250985444867 0.6341763429242879 -0.7000737333507074 -0.6031982806765095 -0.9251004923007831 -0.5460627637439466 0.3959891657195722 -0.8284943219032874 -0.34167824119454915 0.9930480257383134 0.3550174353043205 -0.3000404367302618 -0.1108866400384716 0.4615185970426936 -0.7593850474549646 -0.9119202646294782 -0.009865568128431423 -0.4430102907331803 0.9342621112067082 0.23185740106316288 -0.9506675583144162 0.3762466329513552 -0.4738363162205317 -0.3234325066545993 0.5019713844544231 -0.4002024023452253 -0.5387186277199791 0.11201915840557786 0.3652986017150712 -0.7848254266042654 0.8904240826748986 0.9670904536243126 0.296693038625526 +84 64 0.3500844302465289 0.32377288252757164 0.3948343016629856 -0.7013163465840426 0.4077980855440839 -0.9855101789566387 -0.7863489408909983 0.2683571812966703 -0.3922816637857116 -0.5930056153055199 -0.524660800533153 0.9804672178252363 0.8937141606015051 -0.9375436620049171 0.026297895334420396 -0.4186092846465215 -0.8678127092742152 0.3666909451185567 -0.7361466541284987 -0.7806523517692405 -0.5007604964634123 0.5116226181755286 -0.30954866840679984 0.11593015458661471 -0.6265221790664832 0.9719682791156428 0.43644178355339047 -0.9213899707090161 0.9929980490016808 -0.5782998206586178 -0.606370174913395 0.17563515426316423 -0.9592104273624473 0.02673888615136466 0.5364632330505525 -0.5125369773863371 -0.7622234115263027 0.16768255499456974 0.8156902348184261 -0.8968116296436881 -0.7224792709755503 0.7978292636439359 -0.6487768412128052 0.6697684649989444 0.21438663085456255 0.030089793195618775 0.20291088957529602 0.5516098456421625 0.8337068346177954 0.35903925834354333 -0.7163655057395013 0.14263590790231584 0.9585226413416801 -0.27164952638116135 0.18327501860125528 -0.07555694780317568 0.9121220334655342 0.5915605973917983 0.684271275578662 -0.014240700713951782 0.705862911085438 -0.013629176047314617 0.874074404328729 -0.8178150508125435 -0.5872573855057786 0.083989857123554 0.19769971419732846 -0.24153816699860808 0.49306984687228406 -0.1683327982339644 -0.7256895489669797 -0.398643049204334 -0.589746794611336 0.16172335643981817 0.4269336324374575 -0.9077073064036463 0.2910117115365398 -0.6849015116799295 -0.08898921830749273 0.39363465116324026 0.13693445649429337 0.29562322443098843 0.5441467256982186 0.3493340321148075 0.3058181017398973 -0.7793721081691176 -0.5166988440855067 -0.004487336010226661 0.30851006766722766 -0.03790766234957266 -0.82440815749657 -0.221378332457701 0.019310028397780066 -0.3664743008150919 0.8199287355374993 0.7853503710588474 +84 65 0.8580434113500477 0.7506068602651035 -0.3565132268137474 0.3441945264750246 0.479154583311743 0.548114207378122 0.021980627729350832 -0.7864034884942264 -0.032101289087319795 -0.5974666573976104 0.1079811697505253 -0.35679002893585876 0.8719360852964124 -0.413699001337412 -0.459675656468326 0.5800982217712389 0.28680893839070043 0.9647464453224219 0.5058264201179308 0.9545869213131768 -0.7387062706320722 -0.5362428608798604 0.614091772902225 0.2713157445533594 0.018621211130025017 0.7131860136951216 -0.9913880138262663 -0.41061467112764527 0.2775704090847484 0.7886138239853973 0.7198868025357819 0.12366769532325272 0.7775486777083329 0.4600201947234781 0.2363996712174643 -0.003563112624284104 0.6720314966325183 0.6532631755018019 -0.7586099902479162 -0.7034860803987257 -0.5836155808143977 0.254862139369328 -0.46583423517809597 -0.4910780533378192 -0.14647843368768898 -0.8743669649892287 -0.28701260507178716 0.4931954367807101 -0.5722855810587368 0.5570551348145427 -0.5582057702619143 0.45605389693355614 -0.22968532698203603 0.8400345203764099 -0.6782159943182637 0.6408761501843696 -0.8756547845675902 -0.32522544287899 -0.9250585834776215 -0.8627238279041203 0.12678027852601192 -0.9550580311485359 -0.13896870669832673 0.364198025525696 0.21310952059773203 0.42849220794084086 0.5201127976936362 -0.10143582399424345 0.7808146365896393 -0.6311557804813377 0.20233673254585227 -0.6103999197104029 -0.5882058534574071 0.8353296213613577 0.4765918073111266 -0.2812962346205463 0.9756149623504986 -0.20770364104205408 -0.19165968879937956 -0.6043091656263644 -0.41552874276591 -0.8224877786216531 -0.17488888240488687 -0.506720328893749 0.8035215219974614 -0.6218025355293235 -0.4945663244500147 -0.42801838275521176 0.8515256828653655 -0.9647793490663157 0.7649434436410827 -0.500700399106768 -0.3325145413149273 0.5593376223648503 0.08066746108421508 -0.013804776716848322 +84 83 -0.2994205622870285 0.3905922902079053 -0.4243956671035589 -0.7217240081963578 -0.7750940173690137 -0.8127807834153542 -0.15475659937392616 0.18394101710592037 0.399566056076035 0.9817370960454601 -0.9653185771828106 -0.3984909849002085 -0.7311620068731934 -0.7754093168557219 -0.9909964425755002 -0.9722218265850813 0.4743954482955912 -0.20484474952890852 0.563297912127483 -0.29794044480390935 -0.8606093932961705 -0.8069704527003341 -0.46147682473547014 0.26422277610536415 0.5593638287584741 0.44398624171767853 0.783859491203112 0.9515111619819119 0.7758016786048418 0.8252091015850203 0.6100137107516463 0.3500136043173103 -0.3426151418532901 0.5547400785662326 0.9458632650000343 0.8553754280140531 -0.5276690563799862 0.8308438022734674 0.4311172170496622 0.22947678758904644 0.7084914572669982 -0.42285589209744257 -0.7371351282074243 -0.5810807172801149 -0.47808452044253524 0.21100970406177377 -0.8959711939527939 0.8357850392751955 0.10364206441657897 0.964297706863362 -0.14454638754202764 -0.28648211385216493 0.9879374062039941 0.6787177973121077 0.836584188888297 -0.47258655314368636 0.8303467133138192 0.34599188234404066 -0.9852654164274592 -0.02149187025314392 -0.584790622406858 -0.43678386339538533 0.8243117802111251 -0.6873773021797063 0.5964455665941968 0.3197692070005671 0.06008075656901912 0.4191449086720964 0.5851742151230912 -0.30192015337073785 0.21459140216462025 -0.6664246246843526 0.26469770241910706 -0.3286063651628963 -0.5836792673558893 0.8933483576895582 -0.46788880083479034 -0.7606582051032191 -0.6992196207469592 -0.6149428125155316 0.85956053693854 0.8381248443744411 -0.443711234162822 -0.5517302002680018 0.9961107196438295 0.901393370907918 -0.5508250311879346 0.6834532158950983 0.0057325503093352825 0.6308361619089584 -0.7119396673511103 0.15420700503354223 0.7461835122096896 -0.9507180991720001 -0.261432655522426 0.6823366871174235 +84 84 5.714401950851667 5.304772103939697 4.608915663713315 5.374962061530811 3.7610399342569583 5.413089493067292 2.295895300098196 4.518734634026231 4.757941420803247 5.774670000405443 3.8352130690090105 4.90759252825948 4.877529272160723 5.208330338925371 5.315622339461094 4.9456413099062555 4.3608727390140665 4.089970673785786 4.873181821630053 3.8438863081707026 5.492305159507466 5.717298832804591 4.586647704194862 3.755326154860745 3.074908756553043 4.118373994161013 5.81745879361353 5.745936901041045 4.286013636376613 3.9528725624521392 5.716781218582645 4.262755225077665 5.433941788335362 4.734138212237672 4.504779073912674 5.484071664084288 6.418304014442901 4.401740824838835 5.5948214958487075 3.4170877140456737 4.685376498574407 5.03633780655137 5.713600183601039 4.494861019801991 3.4757130900580915 3.1517179092704977 4.042563854681318 3.6678666869954064 3.7391747139496574 4.36367941209003 3.9743349848895786 4.959912840274296 5.428474876765597 4.271070976935644 4.459770159447341 4.006597706387161 6.335142767857306 4.246701762412008 5.748209799378542 3.6092897265396573 3.3397388428601653 5.580973242715222 4.806106220481559 4.1459135863206225 5.20745874731149 3.9140449708812746 4.011854715562563 5.08435763116063 4.855113586974844 4.266914115302603 3.974882053097037 4.092390865013224 3.903127247003984 4.147256810107216 3.6542376923624156 4.987854596015424 4.613053164750884 4.256355747921915 4.394975113616974 4.203859939830942 3.7331972910995797 3.865606114363774 3.9199455304893984 5.161972325566806 5.391433920050796 5.274846455795683 4.402034929242564 3.786523436138685 4.423834287219957 5.1665833662193315 5.494352921407361 4.472159845266302 3.8881124148745125 5.763541417036702 5.522433346056404 3.325139014446917 +84 85 0.7528127522221164 -0.8054433337757636 -0.8006667850568452 0.08860400137842817 -0.4859257610099521 -0.4222940972732483 -0.16183642506914087 -0.7848289526503085 0.6550022295136726 0.7051235699642078 0.030416565051767375 0.7024986397747768 0.0935030828322665 0.8619188155586692 0.5641377341627813 0.932651999743837 0.4442183686922798 -0.41756050859212235 -0.9357433595291311 -0.3840046655141207 0.5422534156871954 -0.517857264053442 0.42553553409771583 0.055357959351191255 0.004301681944252289 -0.6033807885108282 -0.5981170280754509 0.9192652014382257 -0.5938369361478288 -0.26334431927860047 0.5021208657835039 0.8532220970008095 0.9541567211140656 0.9554362929783735 -0.4472184761664124 0.8114877507667628 -0.7472268345769506 -0.5763782932262649 0.3308574559202304 0.43269926432813177 -0.3564041166296503 0.5050437158206798 -0.7431869888627647 -0.230758750290315 0.2868780867844116 -0.5321379086712128 -0.24446591595992784 0.43879045068735945 -0.025119281064152954 0.23253539019788194 -0.39673907178128975 -0.4248266105423024 0.32017454205643037 0.20386980546816824 0.42676718134666114 -0.2115582028843186 -0.737844557172932 0.5417460997093495 -0.03828465599198183 -0.37764258423390995 0.62916212156171 0.6771367689187378 0.7174189575074492 -0.3443862664755124 0.3542285441411046 0.41371795506934217 0.43039789900594894 0.9330565672862767 -0.6033540486894635 0.9628579024370527 0.00861274046727134 -0.5044293493440495 -0.24046126468052287 0.7892676569272945 -0.20474495265559134 0.8302853089420372 -0.7002122447575099 -0.5922119707138638 0.8543937487528517 -0.27591705411294276 0.020492187965467146 -0.05137005115492399 -0.9563573117447857 -0.5855769821920354 0.26311548092289194 -0.8541462379636755 -0.918767872187354 0.5148581243132295 0.47698552288084173 -0.09763369306975189 0.95588094086557 -0.8437320817448672 -0.6618995988526564 0.40027693861335667 0.8039780854772709 0.2547404734283798 +84 103 -0.7830506865719149 0.5168651206230719 -0.053781407220000466 0.885672715249191 0.30507372373932506 0.5613078983273785 -0.012675221392299374 -0.9746575034134168 0.4703040901609319 0.24180512446505076 -0.504186259344487 -0.6013033225477633 -0.44624789838485746 -0.5901525974246031 -0.09316270536315274 0.5030616632066249 0.2785494822143397 -0.08521061158971444 0.7655307910905771 -0.28838424735476664 0.182429719066735 0.4940833562695057 -0.23056466875129566 0.9690230618398472 0.7473232940006347 0.7580388976895798 0.23392969874115765 0.11700273871249744 -0.6369913558829177 0.16739620076165407 -0.821365993018232 -0.5936204827200349 -0.2954332060421543 0.5421903896076552 0.36519240018029375 0.22761293822145978 -0.9652726240024967 -0.24922159271899136 0.9443010621582715 0.4865215204491182 0.4079963703839935 0.8742119712010896 0.8232167204377963 -0.940712125121292 -0.24169800641973072 -0.8091641880938141 0.7132300292976603 0.11269829194898384 0.2722241845654598 0.49535653102408395 -0.15839698323315932 0.788159342689335 -0.23236279821115313 -0.46679862740940115 -0.3903553206967878 -0.8997929995321723 -0.9984479647903388 0.7048996389263622 0.9763763362447351 0.11346930150573864 -0.3664224170152628 0.8793477457572296 -0.6348066429858359 0.46705170660825424 -0.43258010844006933 0.46144461371891654 -0.5116617112715169 -0.871298607098125 0.8421669447728088 0.5695880972028626 -0.17667100430265248 0.07314752042627992 -0.14354831290390213 0.6571016383453983 0.773216485165692 -0.7029652805839928 0.1125066312592542 -0.09377205862747195 0.7599375593266646 0.8850394871926213 0.030255029948262457 0.0010734106701095758 -0.07510825508119967 0.5168056352718471 -0.25246702966278134 -0.35388647029413467 -0.2874471725818215 0.29007015290007687 0.0492402379654997 0.8967547773589613 -0.25766055628909745 0.7001483136247337 0.17408334488250765 -0.793647879197289 -0.7036418287633028 0.04878846980071727 +84 104 0.2521211893275668 0.48814647355482 0.4126299573687513 0.8076149024174561 0.20135039130716526 0.6250952974894488 -0.3951713656649083 0.014680593872320014 -0.64712489753576 -0.8321577528956692 -0.028867445453451657 -0.7588764428336785 -0.7096441901890287 0.09473021206005106 0.7907024269468845 0.3939380234756391 -0.374080451101928 -0.5410478811825825 -0.37944798249992084 -0.1912878703481118 0.8878306701564813 -0.7156020946645345 -0.8367881657809155 -0.8920731667324953 -0.5022943894611849 -0.15528956296773844 -0.3319013570322651 -0.6955764185654612 -0.016026663972838806 -0.1876758798663023 -0.9252096365384488 -0.8240489903360488 0.6689962715234292 -0.9347498171851123 -0.21100304509393109 -0.4844457650044067 -0.466479792472422 0.530785457857951 0.4234463277831071 -0.12941774866354394 -0.10571298684724884 0.48949571986860496 0.5984513550284414 0.4713288150402799 0.39673786980646564 0.22962395091803844 -0.1665867565022554 0.6648667199796723 0.2916666960921779 -0.343233722774851 0.712756557739038 0.5891216323722646 0.8869058116887942 0.44113072523371866 -0.23890602184071463 0.29791990279884395 -0.4359934695714929 0.49427906633033447 0.7862914417535283 0.645906637608076 0.6659469837826717 -0.5101643289909197 0.09747348474787243 -0.020944237740067484 0.9737532842710848 0.14860463776323884 -0.4688443563329818 0.4038505565365411 0.2723588929918843 0.34612054814638293 -0.8506778485759798 -0.3119469956232299 0.05157856789570614 -0.6890305746816845 0.3398338334098874 -0.016835881032996713 0.3545034598900567 0.2073112131640935 0.026063561481536546 -0.5307076172501228 0.7943399659734236 -0.06637010736462323 0.9165748499848696 -0.2955046198300466 0.5664816187803736 -0.5433653496952648 -0.758564682770416 -0.8811681334599748 -0.9810743567616773 -0.793559952268823 0.4100312762975049 0.5235147743876394 0.290448099045268 -0.5550519251557906 -0.8234015828881134 0.5126752763545006 +84 105 -0.9223849922846492 -0.4321180983693711 -0.8066541718423139 0.4031705377650754 0.12405423133165683 -0.20533216767748663 0.5780509405667402 -0.4907210466114189 0.951280662288744 0.5019588941757109 0.488883550969744 -0.006857957120521174 0.17015021121077067 0.04993279519970084 -0.9981506093054071 -0.201757216663756 -0.21723176145430956 -0.06615490237259536 0.118145719174225 -0.12127178642485315 -0.03846399380818322 -0.8631012452848565 0.362535054726427 -0.22447354840624323 -0.2280807559300555 0.1711353282580892 0.6288816386667309 0.6657294454513514 -0.6329805285622705 0.1089423237990248 0.20256627116127146 0.100167825823676 0.8540662122705274 0.5935930088015369 0.5625949534259389 0.7209884822390538 0.7577004946354562 -0.5930188977200817 -0.8289918336870312 0.014025698465321534 -0.410651050307852 -0.5785082590248842 -0.911566165568833 -0.3777712870379779 -0.09348343410088766 -0.19966472942212476 0.7737999171435945 0.13395248201856114 0.6100723861283548 -0.5591906052847182 -0.28713946594931206 -0.5149865233528934 0.5795761242641504 -0.30808593097018866 -0.5296635402081693 -0.07081252188736031 -0.8932969194466227 -0.7959963809399886 0.8833147885274266 0.559814130559773 0.02744160747240243 0.6695836571310063 0.5656106044203313 -0.12291021718239348 0.4473142903897094 -0.6180045461995387 0.828995065064374 -0.7091804693257353 0.14239677776551862 -0.0332619821641007 0.16369561215750417 -0.5142188388406714 0.6094217336324113 0.14104112531380153 -0.19991138617940862 0.40518064514328467 0.7819544202889945 -0.5277645630999619 0.728426918163734 -0.0009202775537462404 0.572706829919273 -0.5324448435431517 -0.2670711344306238 -0.7576684438996095 -0.9610384817119004 0.47467040961553475 0.12129460537018533 0.014128997139453814 0.41014972855627274 0.5513057355221886 0.472733626247958 -0.3299875514590347 -0.2707969187531276 -0.6851754922269602 0.9126024488335001 -0.010554193899037667 +85 64 -0.6088922581877141 0.5989626152859617 0.8532210773298381 -0.17329799286395287 0.8058020745334373 -0.6320626418431545 -0.11440542083844729 -0.03639069163137543 -0.3688876751810817 0.31003166625840906 -0.6400323642920749 0.4870538281153567 0.7761167321772824 0.37816103925205957 -0.3419837446349636 0.543997215921957 -0.5668816667353793 -0.8963337182056836 0.0945776707988355 0.7786463535306709 -0.759302834915325 -0.06529087819378288 -0.7996432029348464 -0.6920845769826021 0.7436349347079876 -0.8333998357583747 0.16837679752671142 -0.29840874556460606 -0.745911603083963 -0.05319041633235444 0.18253919153116205 -0.21566200212977304 -0.49332914204668343 -0.30955139634410433 -0.26753570529010196 0.1879653846981837 -0.7725742539957461 -0.9927240050016761 -0.47637436055558346 -0.9010278565575693 -0.5573194361385274 -0.9725634105606051 0.5292692217912676 0.9722325551539774 -0.526629541226743 0.891824887548001 -0.04254982107677008 -0.2087356529359854 -0.3396898632383807 0.29291645422193757 0.38117855753622853 0.18907228876026516 0.7732532377085017 -0.5856431050668867 -0.8034888226365464 0.08271517941217787 0.49388847516974943 0.41855396661585 -0.20374586591350008 -0.38715948602642825 -0.6616559532510053 0.25342517722622104 0.06648145430293351 -0.5205903895424 0.5291442533317403 0.181146448700102 -0.10108570296959618 0.6851746006849744 0.9368705901399885 -0.2074794463844607 -0.37793782472191917 0.9250862451624169 0.17837599593499887 -0.5146221953880175 0.6192339548591304 0.185922772787237 -0.5126986354923466 0.2308114238504031 0.8593924281220997 0.09960553420890239 -0.4144261242948435 -0.7884549514171133 0.7122723284235375 0.9633612514926955 0.3233605499515453 0.6802684793416689 -0.7640557566413153 0.12480026699886726 0.5710681992820061 0.5789904029511856 -0.3230912921054392 -0.06689355765115068 -0.4984516818058211 0.6101763350889675 -0.9519341434496926 -0.96824284189632 +85 65 0.8525980290582225 0.4385861116924392 0.13591384829420683 -0.8969753971658805 -0.22292563243969732 0.9294802455059499 0.2686547591331361 -0.04729872699525539 -0.8768594060311621 -0.813923224613148 0.21039434861247375 0.26343938695858293 -0.9026077251943876 0.7762918705421378 -0.10306827822038289 -0.6040762562726865 -0.9376714746098456 -0.8887848447063826 -0.35246393721424774 -0.43173653825562863 0.0390162873986597 -0.6295936884929334 0.5431033018053593 -0.8776285765040852 -0.07676404097170186 0.11699662709925329 -0.08489937901306632 -0.9484250466588857 0.6470735070738576 -0.6568893348349807 -0.3805617714423528 -0.4951845756495017 0.4003609895830318 -0.29860641773202 0.18987366949644469 0.22960438619885726 0.3493484083854135 -0.9294956526741158 -0.22482671230666806 0.8034140769412419 0.16099311135294547 0.2716924895529158 -0.6742222943965532 0.05897893554925826 0.40606500505525767 0.1388016163832193 0.9194091156212769 -0.4784567519609477 0.34127338148708186 0.2905338006749425 -0.5181500506382435 0.6764126605902179 -0.20576007433092602 -0.1556334701127624 0.27894985645283144 -0.2778464892846808 0.8811454319263154 0.35869477313008624 0.3026445696611775 -0.8226174493673455 0.5498684666903921 -0.44649818693823606 0.5260475407384202 -0.7354997385038244 -0.6976937058981083 -0.736737329922291 0.23307895978871418 -0.02968803676826326 0.22926616694485014 -0.898778168721519 -0.7361788989041937 0.7013532434606857 0.09691554618066633 -0.3597573552580713 0.08016470809731557 0.1695245805838277 0.7737979354814155 0.9896290404849053 0.5840140416660411 -0.16408802251643206 0.49230430615364473 0.5003200639561018 0.9116086442395255 0.3728754260159919 0.49651890991204684 -0.032807791843047385 -0.5889200577627876 -0.28117737248401586 -0.9542766857064056 0.48201856666167964 -0.634588592661006 0.4413745124292685 0.5977126535732542 0.8306171563859703 0.3922146318206321 -0.5168377111256146 +85 66 0.5314287593874558 0.29746534287441695 0.903665361804032 -0.9317126599495922 0.7302038431391114 -0.5628952074426314 -0.8168321076322653 -0.2114822357272912 0.3830997913831491 -0.5021864875606237 0.7439835849439076 0.24045700947095283 0.6790687470177581 -0.2455516717374464 -0.7013630166479123 0.16714706060537 -0.22693694788649355 0.24470160333717983 0.9498200863621227 0.9324581715526321 0.9596500435016286 0.8098882256213642 0.42151005968469657 -0.8434028950887338 -0.3250145148784125 -0.3524214183623553 -0.1986444476539022 -0.41229199041173437 0.9036222448819369 0.2023438964435098 -0.9753579833204276 -0.6502950518692496 0.65180794302989 -0.3806000208512972 -0.009401673509273678 -0.6079854300440029 -0.8750648889605439 -0.7667174801890395 -0.6449034461332952 -0.07885343780372533 -0.5649144367868062 -0.8234343390971324 -0.4540206789735943 0.07189364624994754 0.7130063647371556 -0.4978874694020523 0.011148144322708387 0.3430936327392533 0.6547955708991138 0.6855337342976948 0.8132181886351031 0.6770218418382734 0.7358233934232228 -0.8919415059308027 -0.6837785436446824 -0.15541826908084144 -0.13110970907168817 0.8672151202435443 0.7776193269380698 -0.7052410122233019 -0.6996382771866476 -0.2536436330292946 -0.69768737585501 0.548044289022664 0.24612114786267592 0.01657030973755602 0.2940497267400155 0.084903858764249 -0.2570866741940594 0.3786194812198591 0.4159860486115474 -0.6469722996592395 0.3340440738461321 0.7143602847806312 -0.6533639320351652 -0.11027175221638785 -0.1159416569946079 -0.26733400703093757 -0.8097687970928955 -0.9491795540186176 -0.2643181710272884 -0.8962769213728385 0.14227393855577408 0.5949619000796007 0.07975990211933182 0.19797724128445315 -0.3930069084312442 -0.05659308434531085 -0.40642317074951473 0.5389152433070308 0.8728037064873664 -0.7713909227867126 -0.7557162277579146 -0.8122507238845382 0.09520542285818667 0.1942579463225662 +85 84 0.7528127522221164 -0.8054433337757636 -0.8006667850568452 0.08860400137842817 -0.4859257610099521 -0.4222940972732483 -0.16183642506914087 -0.7848289526503085 0.6550022295136726 0.7051235699642078 0.030416565051767375 0.7024986397747768 0.0935030828322665 0.8619188155586692 0.5641377341627813 0.932651999743837 0.4442183686922798 -0.41756050859212235 -0.9357433595291311 -0.3840046655141207 0.5422534156871954 -0.517857264053442 0.42553553409771583 0.055357959351191255 0.004301681944252289 -0.6033807885108282 -0.5981170280754509 0.9192652014382257 -0.5938369361478288 -0.26334431927860047 0.5021208657835039 0.8532220970008095 0.9541567211140656 0.9554362929783735 -0.4472184761664124 0.8114877507667628 -0.7472268345769506 -0.5763782932262649 0.3308574559202304 0.43269926432813177 -0.3564041166296503 0.5050437158206798 -0.7431869888627647 -0.230758750290315 0.2868780867844116 -0.5321379086712128 -0.24446591595992784 0.43879045068735945 -0.025119281064152954 0.23253539019788194 -0.39673907178128975 -0.4248266105423024 0.32017454205643037 0.20386980546816824 0.42676718134666114 -0.2115582028843186 -0.737844557172932 0.5417460997093495 -0.03828465599198183 -0.37764258423390995 0.62916212156171 0.6771367689187378 0.7174189575074492 -0.3443862664755124 0.3542285441411046 0.41371795506934217 0.43039789900594894 0.9330565672862767 -0.6033540486894635 0.9628579024370527 0.00861274046727134 -0.5044293493440495 -0.24046126468052287 0.7892676569272945 -0.20474495265559134 0.8302853089420372 -0.7002122447575099 -0.5922119707138638 0.8543937487528517 -0.27591705411294276 0.020492187965467146 -0.05137005115492399 -0.9563573117447857 -0.5855769821920354 0.26311548092289194 -0.8541462379636755 -0.918767872187354 0.5148581243132295 0.47698552288084173 -0.09763369306975189 0.95588094086557 -0.8437320817448672 -0.6618995988526564 0.40027693861335667 0.8039780854772709 0.2547404734283798 +85 85 6.029313559717445 4.005617762431735 5.923970206621326 3.155845319327838 4.625226868066026 4.4478490977438225 4.226833282996461 2.947199391960191 5.383084164428553 4.7250414768779345 3.215491550890224 4.82103384898247 4.249295957483794 4.772800777079569 4.233316334841685 4.93045605141474 5.727129720389956 4.04797372857195 4.691271235200633 4.697095812905716 4.350660519374255 2.910791970687492 4.031658911592763 5.543995814235019 3.381833558813729 4.155072501044969 4.61026611781606 6.652537067370853 6.203298045478806 3.425794896507961 5.188331007264738 4.528279018595551 4.093216735298338 5.120903976878166 3.1157959300010294 3.2974698854688924 4.6102515015651635 5.563691212053039 3.218497689541992 4.960926476061035 4.068080514153257 5.328922787588512 5.1400494160831425 3.938560326528341 3.5876879897220526 4.544038096267167 3.17213756846047 4.5385274045005515 3.555496943560329 5.211768684063959 4.087789166439646 4.579683592039627 4.592235897976931 4.133469097296029 3.9147001923551725 4.508881209406436 6.002752456571422 4.439253650680003 2.8982548020551233 5.312041724335286 4.569302288245165 3.2151736189178974 3.933344852895109 5.084249986487291 3.856899621623309 3.7816359704681997 3.345880852029695 3.9134248967130834 2.6448720851096263 4.217832415745684 4.257479574876337 4.409070338404117 2.335890958122529 5.262187379680489 5.059625644135233 3.9987929009348244 3.8222055573818943 4.980854372591771 4.121021187328822 3.9396439976595294 3.625358978021281 3.5328185620307515 5.019067646685376 5.912454834148254 5.091261156157001 3.9666563912433572 5.767015198609188 4.322739862587483 6.247091220386632 4.95387781331968 6.305685515803359 5.048148018940007 4.642306618242555 5.405835666737468 3.819992200460593 4.782934272872314 +85 86 -0.9082546472803734 -0.07278848134226434 0.5896469423184172 0.04495382863784303 -0.720228655326558 -0.7217005486043786 -0.22725118023847957 -0.7018144580586723 0.7796210903111533 -0.4984510279758416 -0.20067757003451692 -0.5813335026734541 0.48256900843559314 -0.3171725352150727 0.4976178758940901 0.09022904603686022 0.9223867952975457 0.6901061531023929 -0.5753048030049417 -0.15766910868356843 0.03183948460524211 -0.2544753397069326 -0.3207030643914066 -0.8121204712606005 -0.5119344362928475 -0.19797527973718632 0.9110688694945066 0.9513905215858924 0.5461827160767581 0.3664803112267201 -0.9797611983995556 0.1708507616922319 -0.49232269174895826 -0.8023490128115327 -0.3449033770180232 0.445666221810324 0.6186217756096737 0.8038924345282457 -0.21197630616664043 -0.2158244189905194 -0.9349907886336954 0.8580490519717017 0.9926605101950929 -0.5362642301365688 -0.8362766704353422 -0.7751527034809162 0.2026335081942494 -0.9553431884899672 0.5763358562346046 0.9916516159331539 -0.2831321186669231 -0.18259084143525328 -0.12527080730079332 -0.9483031735533258 -0.09944367873437443 0.7269493945858605 0.846945599949066 -0.6136771223590909 0.6763662879334538 -0.11130036576474622 -0.3355079812459334 -0.7569410149587226 -0.00980254591427765 0.34747354783510853 0.12417379810213713 -0.5121456602647185 -0.8753922380022854 -0.2749824949738535 -0.003438829705499913 0.09201058841898768 -0.11337349727943669 -0.4674529845721265 0.22031626605507282 0.3487883792667572 0.14920027474595643 0.7325069434135065 0.6984785123389152 -0.9158793048095599 0.09682289668389288 -0.9870885045267417 0.34319873485442165 -0.3671962233598005 0.08508611638129682 0.8052334558921452 0.7848114973844313 0.10028468175746763 0.5411541155537087 0.16764976822298805 0.7175638588140967 0.8528221271613963 -0.9730235648864187 0.15158449882002123 0.5567420695401257 -0.3687588214781554 0.31181533854141996 0.34405601821961485 +85 104 0.5444860862379681 0.6448868749125107 -0.7660401551181999 0.031733161994594195 -0.5820089940224056 -0.16525861705773015 0.7375180792355629 0.26218689853557176 -0.8489996870082763 -0.48740382178203046 -0.33380753871721747 -0.9703459161062795 0.08711527314499445 0.8155629539243792 0.09478361323112616 -0.7825053441332437 0.8809850415129701 -0.22774975652208274 0.4382710334042672 -0.46867916168689705 0.5442438192802366 -0.14822459105686403 -0.49122069662019974 -0.9119753320089437 0.35628289499283095 -0.9702342465452485 0.8238809278143706 -0.7721658550878112 0.8528452565992628 -0.08433665809165736 -0.5000578586329523 0.7877237888792163 -0.1431358411008743 0.12523473472944047 0.9231618110024229 0.12621771886219846 0.7192556404050634 -0.6805627771594793 -0.2454775882916913 -0.8650321659045337 -0.6224938011193901 -0.3147335335581476 -0.6794725889078084 -0.6317472848017684 -0.7473859205802698 0.11963759967551724 0.531933892888808 -0.25248752213710035 0.03297576834988525 0.7414912051240365 0.35009131318531095 0.06363485573279704 0.6039445319073711 -0.2839418619873926 -0.8650144166863001 0.5929698657791691 -0.6724659172823206 0.8896733740516278 -0.43172963358297034 -0.8948718501193611 0.6884808714094275 0.01722125244649675 -0.4691819519259559 0.6167934083442486 0.7187617818240155 0.44503272111581693 -0.34930966473526737 -0.04329149287069578 0.02967777329599741 0.31649107676575916 0.5080997660789581 -0.0215547979518933 -0.31528507182779086 0.9424961767833862 -0.934702570163052 -0.015039295659826868 -0.07330397941185329 0.5715233714294701 0.14184117448630906 0.4642449825087476 0.27058304242955966 -0.3522843935094553 -0.45155426278737587 0.22620497477461 -0.9440820325324204 0.8881191518382292 0.9817606313095202 0.2581341982608689 0.9993721778213969 -0.6245922229196836 0.5274679652609577 -0.7973330793542839 -0.14438494902724686 0.44022642032808124 -0.18915662570752767 -0.2423006654766211 +85 105 0.8642141865955768 -0.07445640698377876 0.8163811213756031 0.3599210263921915 -0.47954320329001576 0.07849795343223454 -0.9324471950498325 -0.5263935994226354 0.21808702842201266 0.8672154195030701 0.5898779617634953 0.3639904600580277 0.35951351486281413 0.6205418383030481 -0.900478310505975 -0.9073459001015869 -0.7149003448842115 0.33656007083389783 0.031229051770096605 -0.4724154050909519 -0.1078640296275104 0.21453107208166222 0.2057372183495365 -0.7117817489193186 -0.46473697943108383 -0.5650015142292992 -0.8621185563949976 -0.8533833528167709 -0.9151540110355028 -0.6602139275101768 -0.7255206435267858 -0.5926417166541755 0.3697077491243068 -0.8972444811336038 0.16796561397049858 -0.083638865352748 -0.03829122170721755 -0.12117481791695006 -0.273367478362589 -0.9109178451592692 0.08023054719259881 -0.5282698902032359 0.4170994784351003 0.5379656552781342 0.022316421811249487 -0.446709840052969 0.3452508705016113 -0.7512132110507412 0.9433862606173011 0.6254046388666814 0.7028545057129243 -0.9998356589409414 0.5475266435928476 0.5640545606261158 -0.27110492467449565 -0.9105859215599454 -0.8233323530940284 0.47019180254599324 -0.14764972273350496 -0.8488112067407758 0.009892420339300934 0.40112857650409195 0.7976144940887682 -0.598377973364447 0.3941993782779316 0.41695376941883144 -0.9017352281321915 -0.8033651458320559 0.45143064782751874 -0.03636687644633296 -0.3418228643057879 -0.7689522913475249 0.11766748666711613 0.30759101918405407 -0.9588906166630755 0.6729964616219388 -0.4135228632842858 0.126320019597165 0.27564756528461687 0.44058966733369664 -0.47243812779937855 -0.07527423748750528 0.819959013252533 0.6518574074427121 0.7296337813024953 -0.5985279885613115 -0.8031603547600892 -0.9783643246818301 -0.7905549502213369 -0.3334901569049924 0.6606518446206635 -0.40774190850711434 -0.5323922916663897 -0.6569356711207563 0.12036390096182403 -0.7631902339955725 +85 106 0.45831557081325847 0.5660821311797275 0.31094276910358576 0.4706221397358292 -0.381370352291976 -0.6466624877465912 0.7115929195519237 0.3009133609468424 -0.4290193296800251 0.08884642928135622 -0.20991464686973305 -0.2697688886227838 -0.0012227068156556165 0.44797330189545037 -0.6316051628324053 0.7517228563786158 0.47226824876647133 0.29636753728654064 0.5262279827176939 -0.976077069284395 0.3918160938738493 -0.19219171303091298 0.6019707526304334 0.4321652389423887 -0.006233053862519933 0.08348998261302643 0.04259043125243278 -0.9032566952682699 -0.6697283126634774 -0.5895127053710587 -0.445568628589345 -0.043140536244100414 0.43735702004323684 -0.569127210722326 -0.2199688701232012 0.47091560753372463 -0.3292967650210248 0.0067711213264805 0.16702376014341658 -0.4198594279468524 0.5254016178530798 0.404306220998111 -0.2615184941915154 0.6931177736412109 0.010107626330022823 -0.6229169386360676 -0.18481497273383796 -0.2837001472235665 0.36278732236001066 -0.8909097355713955 0.23184882759435266 0.6529618107530162 0.36659749839258016 -0.021919622383778314 0.357023146737218 -0.9935407102519349 -0.9760918637913076 0.015885877494026257 -0.19431086656309193 -0.31087206903304887 -0.6300211885235074 0.16998369241387246 -0.001393140786304814 -0.8338414506808691 -0.2388107605299452 -0.2617345158801634 -0.12213226809599309 -0.080673096932937 0.011874653796831725 -0.6506463165277745 0.9912993802930328 0.006312161773040836 0.21261369802795538 0.3422902543946085 0.7107776603433962 -0.3945070193903235 -0.43207685392244155 -0.8825034898764226 -0.20145586509308022 0.5337112371831392 0.8792523929904221 -0.4981579925014381 0.05431568624981442 0.9509975866693781 0.7260363526912514 -0.15074211457529096 0.3777754037056671 0.9426162890732683 -0.564462940608373 0.5886336831835155 0.6835801898146421 -0.5934203879447866 0.84682526106978 0.3643371924285532 -0.6167296917969571 0.902923045602902 +86 65 -0.7302543465453222 0.8591034037630179 -0.9238590736417631 0.9609209911799732 -0.7612457025812227 0.8709925831165313 -0.8532681913202169 0.7578302529845515 -0.1350818772217668 0.22043290461567477 0.01312001768709159 -0.4172517407397984 0.9066754565275723 -0.752660975279708 0.2382379878166181 0.12101201644199899 0.06745478543658856 0.6704161473203814 -0.3974327694519728 0.16308752299342988 0.9070619695049977 -0.5213971732881117 0.3412166582206133 -0.41138663860807934 0.46637392506721875 0.7289822201484943 -0.23917380832610347 -0.15987021447575245 0.6047306119055251 0.3005711119126506 0.051834483035987367 0.08053413910856744 0.6718413699118395 -0.6193657553678464 0.5759015706499575 0.011407738507578147 0.14354095057718963 0.17998638831741265 0.8729737877751678 -0.4134265355289457 0.5102658503029924 0.20441566877713058 0.6305099000525436 0.6434935044289882 0.7998669443804802 0.5825630243669271 -0.9436598793942566 -0.9953689172411191 -0.042830299671060335 0.3150912931847083 -0.5373697965763247 0.28368143239690347 0.6511823090660178 -0.6252668144192688 -0.615350917116674 0.7769160209222079 0.0034691116450564774 -0.2842731681280537 -0.41102504295960474 -0.46993436627851626 -0.020450353573614022 0.5681482472208543 -0.1347407660194182 -0.21431706233134196 -0.8303039107858836 0.1129561562891721 -0.6971429015488737 -0.7368005861908935 -0.2735576380428477 -0.1954897114670986 -0.375940535358833 -0.1419206026695019 -0.21952914570012338 -0.9695013680006548 0.4131063634676597 -0.43004430547354877 -0.12360994016679072 0.039643235030860646 0.3940194316114227 0.41779054184347864 0.8482619034845018 0.5650991108822554 0.22594856432453891 -0.5449239759674691 0.01354411160869029 0.2775143624511116 -0.751533927466904 0.7065540282928973 -0.4554317082772035 -0.25425223142778175 -0.4509511531707162 0.40588819332691384 -0.9825186678704565 -0.20189910256999477 -0.536128260757134 -0.04097873168256294 +86 66 0.27727563963825674 0.6223728195180651 -0.23668438833069705 -0.5502744765279017 0.5551745454617738 -0.8066964477954326 0.8232475077042525 0.024248931341803726 0.11623819039877903 -0.2577962592657361 0.47508421328654316 0.3960301987215158 0.2987655450417195 -0.7954235878702609 0.26256600481660586 0.22136361370967594 0.736332063591659 -0.13064462309692138 -0.153793082373487 0.23554618136188754 -0.5479194430571204 0.4174791282482073 0.7423622229285929 0.7222910077899585 0.23437917896207772 -0.7234796845817215 -0.22770998910236906 0.5162553237328669 0.6883283967391489 0.08289104969220684 0.6321718827371585 -0.3756937239763283 -0.6398194497050314 -0.6330094171177956 0.6037658294937001 -0.011823161534198157 -0.6822810555282277 -0.9487492613248996 -0.6987224750711793 -0.8288850387512721 0.5018779556440958 -0.0802370324011552 0.6095200640389355 -0.6257439417338879 0.02240883491066925 -0.4883123334543389 -0.8848357172937935 -0.333772025357713 0.22983499747281555 -0.6272571460109866 -0.08199422217475472 -0.5991628115713483 0.4396139968059911 0.19558750630145605 -0.5642205449219051 -0.533678696135993 0.3877257714750628 0.1994248083507555 -0.518183482577091 0.38156129208877765 0.0045811347171857975 0.020893659107090734 -0.18969012521864825 -0.6302016668272172 -0.5955755119690149 -0.9047852490051276 -0.22602117206339445 -0.398872270946512 -0.2861950661602277 -0.31204525983603126 0.9362856805807138 -0.11184078097503924 0.18566881439919802 0.30848814727962304 0.5056164008571111 -0.8149398947334292 0.1840163340727463 -0.2404230772598579 -0.21028753189154759 -0.3373252021722586 -0.3595229241026905 0.2559427459566026 0.6005583200006943 -0.934316168431931 -0.007317913591104119 -0.7463915219148192 -0.6111343614498554 0.36594952348750676 0.7317616692192694 0.15511708221898624 -0.7793328649789457 -0.8314644074560325 -0.6871299280957661 0.5859589647672998 -0.15820747613684372 0.22786958564337256 +86 67 0.042022972579946805 -0.08894109707412334 -0.9118787491367366 -0.3884963020206129 -0.4823035512625726 0.981355923392105 -0.615658888832151 0.2670995283693005 0.6162068169432271 0.4392287428944468 0.292848703300018 -0.35522566165289104 -0.819372918324851 -0.29396222302287334 -0.8180952215298654 -0.4957933156970662 0.04087999689137822 0.03349506065489094 0.8608391986591819 0.6739383608567575 -0.9391076160151746 -0.020025461631166586 0.4351529938305465 0.444013846165918 -0.2720741859343079 -0.7463161331201316 0.17609103097798906 -0.16747700274900712 -0.72703984354985 0.5111270327875637 -0.9653542929881738 0.07663689729829892 0.3585839638977639 0.37029681335939024 0.18590470898311073 0.9125152302137585 -0.27088841315991985 0.21128769941990844 0.21599431150082116 0.5692461217935447 0.5881832841168566 -0.7558833670690284 -0.9914750971892508 -0.9159430034740343 0.269021170859836 0.8961540222056614 0.7206990179585668 -0.08679594185596651 -0.24030718050275923 -0.8797236141962532 0.26059292257635636 0.6883399944858046 0.38108863221230327 -0.20182547688577235 -0.8447880125437424 0.2696848901918094 -0.6268905379446696 0.16782168981643908 -0.777962366328153 0.027495050708541413 -0.8797636886717755 0.19480470677933748 -0.6305964385633713 0.49888212042852675 0.40071230632655674 -0.4985496472841595 0.6550566392392938 0.9866834186986821 0.828965303445172 0.0214992830280738 0.7020620687116046 0.8011547931707292 -0.30920173172154586 -0.18196904128687819 0.4447674049082131 -0.788289234976921 -0.25400793377333075 -0.6352440726727697 0.22263021794739357 0.765185715168778 0.07583775428343764 0.9223746532462203 -0.3061868487638415 0.4190895975271345 0.8370518104735716 -0.036104112387424614 -0.4247146521814318 -0.05848484244197394 -0.13959639226583298 -0.35557961551448747 0.9621260157342799 -0.700847301663482 0.8257343289995105 -0.006082322158198483 0.8621815006866402 -0.038371730964157136 +86 85 -0.9082546472803734 -0.07278848134226434 0.5896469423184172 0.04495382863784303 -0.720228655326558 -0.7217005486043786 -0.22725118023847957 -0.7018144580586723 0.7796210903111533 -0.4984510279758416 -0.20067757003451692 -0.5813335026734541 0.48256900843559314 -0.3171725352150727 0.4976178758940901 0.09022904603686022 0.9223867952975457 0.6901061531023929 -0.5753048030049417 -0.15766910868356843 0.03183948460524211 -0.2544753397069326 -0.3207030643914066 -0.8121204712606005 -0.5119344362928475 -0.19797527973718632 0.9110688694945066 0.9513905215858924 0.5461827160767581 0.3664803112267201 -0.9797611983995556 0.1708507616922319 -0.49232269174895826 -0.8023490128115327 -0.3449033770180232 0.445666221810324 0.6186217756096737 0.8038924345282457 -0.21197630616664043 -0.2158244189905194 -0.9349907886336954 0.8580490519717017 0.9926605101950929 -0.5362642301365688 -0.8362766704353422 -0.7751527034809162 0.2026335081942494 -0.9553431884899672 0.5763358562346046 0.9916516159331539 -0.2831321186669231 -0.18259084143525328 -0.12527080730079332 -0.9483031735533258 -0.09944367873437443 0.7269493945858605 0.846945599949066 -0.6136771223590909 0.6763662879334538 -0.11130036576474622 -0.3355079812459334 -0.7569410149587226 -0.00980254591427765 0.34747354783510853 0.12417379810213713 -0.5121456602647185 -0.8753922380022854 -0.2749824949738535 -0.003438829705499913 0.09201058841898768 -0.11337349727943669 -0.4674529845721265 0.22031626605507282 0.3487883792667572 0.14920027474595643 0.7325069434135065 0.6984785123389152 -0.9158793048095599 0.09682289668389288 -0.9870885045267417 0.34319873485442165 -0.3671962233598005 0.08508611638129682 0.8052334558921452 0.7848114973844313 0.10028468175746763 0.5411541155537087 0.16764976822298805 0.7175638588140967 0.8528221271613963 -0.9730235648864187 0.15158449882002123 0.5567420695401257 -0.3687588214781554 0.31181533854141996 0.34405601821961485 +86 86 4.894714640237745 3.8153457297938793 4.676013716659721 4.238229868791756 4.982752694701939 5.913457601255034 4.903676266530988 4.220199623444438 3.7970177019751485 3.494175029835121 3.6889605344194667 4.7541487222183045 4.594725735250197 4.065838291603071 5.250424691128272 3.33115805067352 4.2499983325861015 4.652334551951223 5.50768469606511 3.756502988398715 5.212107636630073 3.6422610541842326 4.058947509188078 4.961995882232975 4.483484747108121 4.4377286683409505 4.348384031171996 3.514285444873769 5.050575324756247 3.6641389891515574 4.896910510452416 2.5205565486264616 5.239150208715658 4.956846533436573 4.10029874894834 3.5925602296355894 5.23252605661652 4.554716441236188 5.883813679953397 5.322641297237409 3.753621474915498 4.095483565171335 5.854029714989941 5.329367284137195 3.9769304220945934 5.732070707488439 4.649118018364314 5.807682780152226 3.7260250399132335 5.352440126048492 3.3813269437764326 3.8825513358048123 4.2192369863850665 3.9105211482642757 3.4081350947459965 6.072927812419939 3.561088660476812 3.0348403036382514 5.209634226110557 3.2697070833048922 3.750605278665061 4.366956518814943 4.062277948852772 3.6655844407743405 3.9262574404613337 3.2794694483771334 4.253079476548844 4.359143914801217 4.7364323589373285 2.6455780782777656 5.426470095161249 3.671411021612548 1.777070071458803 4.131924080314874 4.907495239446279 4.862006151077008 4.2864526851856475 4.482167941435243 4.632640951561561 5.0267565369105505 4.922437901458902 4.131451351286959 4.130775597432068 5.073497875332371 2.7477419428054306 3.881841369145338 3.0977130005053275 4.20947005250761 4.516264488750121 3.6343866825258297 4.703297593686045 4.810521324395508 6.1433233734453605 3.3813590215019866 4.915590399282973 2.950709221076453 +86 87 0.41767351878820724 -0.6333737569150117 0.8857065673906073 0.037967321164121604 0.13903617456731232 -0.8721663097113386 -0.4581624821054211 0.27383132357895246 -0.8253587816508612 0.08013687341510112 0.8072341483470009 -0.8943119240406348 -0.11669151346942708 -0.043722353083605725 -0.835956581130427 -0.8112625567315204 -0.04162617083743636 0.24336067024831998 -0.6895037017140979 0.9200899479395224 -0.3539452050603633 -0.6807039983783916 0.6787215703642835 -0.5885411970315546 -0.8775902876168922 -0.02457823328690445 0.7710613045486101 0.3056885748482516 0.09230143170433025 0.2109024015394203 0.8251341035695452 0.22389447097572668 -0.8843806608940332 0.2611892594029961 -0.6261184629866154 -0.3203984444362842 -0.9851404585072967 0.3887362798414076 -0.7622833027890543 -0.4860035815983528 0.08793983944985784 -0.009067407164826013 -0.43212267697856577 -0.6416838908870568 0.2282946031125388 0.44637927725803084 0.5577130672698853 -0.9310320309896358 0.6769635371815736 -0.17749936922183207 0.032383464497734105 -0.15528477307132893 0.9847495983310739 0.8818379107243799 -0.07541276085409265 -0.9846453557684627 0.227745598219532 -0.4401195305593315 -0.8757407232699375 -0.4607318986144302 0.23024275943649464 0.2382156667607791 -0.9257603657294862 -0.036507944019970484 -0.42867082436313897 0.371258694231664 0.5635358218456974 -0.03854147574122191 -0.5674837130469106 -0.09596779716524595 0.7433813501792614 -0.05060390975122342 -0.06722845839190872 -0.5559190164834922 -0.9730206447877012 -0.6923769294530029 0.5266110554947856 -0.783295817767095 0.447894528713622 0.6599638568696737 -0.9699282730879593 -0.46598636401962845 0.4286280342754516 0.08459687482720635 -0.19924382190630285 -0.6756221795482407 0.07621660630887206 -0.6596821541035229 -0.617165603741848 0.2800225399568519 -0.2077939518442118 -0.8991520228351655 -0.5323910524889559 -0.7065929590278592 -0.6948914714763905 -0.1647827308707135 +86 105 0.356267846201753 -0.20839243458650403 -0.09630114153703384 0.41024828230273713 -0.8614551778037915 0.6307741800141375 -0.4821881203222331 0.8304080678837131 -0.13587061452061877 -0.7023814897446441 -0.5019378388352056 -0.7029241964290254 -0.31334116762713315 0.4280913577225227 0.3555789487565022 -0.5694220878353555 -0.9158674405826805 0.27112916219584515 0.8756724459241141 -0.3239860427657322 0.8980511289394446 -0.407555816298242 -0.04758850463033881 -0.6801159298969848 0.6557455318441427 0.32434662132733805 -0.5891873597567137 -0.31357430896633187 0.9683398609457134 -0.08156736374183393 0.15322099623282126 0.04332029809240456 0.9971830054987176 -0.3721051939782103 0.08599772329614264 -0.1494568253490487 0.1381568739053396 0.5753585733707913 0.5756062791824741 0.41333229397185756 0.43109189749723664 0.687608232528206 0.2808907901497626 -0.8594216724041079 -0.8198802117135799 -0.21279305955336447 -0.21800568609673365 -0.6806403885746362 0.47658713552030774 -0.3055842849136181 0.17967964591314933 -0.8504710442577907 -0.0960968639794122 0.027594570720703038 -0.18529599049994605 -0.5018701933733296 -0.08095951159267822 -0.331326550965783 -0.46823073432908524 0.23936713288574052 0.035995986636835786 0.9185588048210487 0.7893928465251856 -0.4071770076032255 0.4877235617889375 -0.04862973726200748 -0.8828818553590243 -0.32595632134154573 -0.9193048969116804 0.9058520490843711 -0.10451219728825167 0.11394783061652358 -0.12169796209625439 -0.15140948472909121 0.295982758199443 0.3362829635066942 0.24271159621237204 -0.6135814697688022 -0.890300183530073 0.5135737264329527 0.2696046687535778 -0.44537520187296087 0.7198814682053969 0.3049583031997747 -0.28191221694276725 0.8047107907683158 -0.24081286301048443 -0.7909772524533807 -0.058444948224926296 0.15791535228537112 0.3684059869368006 -0.48943642959955036 0.5265755213166585 -0.6097800065107186 -0.625621363499115 0.4686027976840714 +86 106 -0.876716784873554 0.6410411076276907 -0.2538397626424447 0.4380712181871864 -0.5827119973979233 0.6448101668622719 -0.1643644011403731 0.9714727700649834 0.28452344129067586 0.43292371558316267 -0.4304646017582563 -0.6100800622067755 -0.7544712744339193 -0.6734915264895047 -0.6986545876703185 -0.08218988296624397 0.6979134074321505 -0.691052056500393 0.6065478138615463 -0.1792017440990763 -0.13321681511690509 -0.6604912508768814 -0.0440341397781745 -0.9010091490080434 0.18223706759757818 0.7012654517443528 0.4896045613906743 -0.3851770197514224 0.9865165600405936 0.7892308947731064 -0.7934231840895525 -0.36102295134575657 -0.9939367804054609 -0.9707917648282631 0.17252691453103308 0.7080699663656007 -0.888290897266268 -0.5879495431272659 0.8355125506501342 -0.7960412845196039 -0.08953676579310366 -0.745703134714538 -0.6033578178235703 -0.6730540249859158 0.19844271515503298 -0.853159633300286 -0.4958088401648473 -0.8447859087448328 -0.20040723133374172 0.5592835804019374 -0.8221607684633883 0.11201289119849878 0.08731018677303615 -0.13341212241937206 -0.155193199902673 0.9224743436407072 0.5532159368462393 0.2602058295178793 0.1360462357336336 0.044760099370025674 0.5242653653637026 -0.1387390876418635 0.4089997830460401 -0.7054975124901302 -0.05475763719296589 0.541971458700508 -0.042806881810651065 -0.294807133245786 -0.46684184053385014 0.22460074620489978 -0.9952397026541386 -0.28674937999103145 -0.15868689721858265 -0.9489992095103195 -0.9024711986380338 -0.43938734979545657 -0.4524582826256591 0.15982289239690295 0.6839344632449627 0.8482448843214612 -0.9582111778506974 0.7721588217605937 -0.4888101033099106 -0.9544334208529293 0.004889453159170776 -0.7912688231390046 0.21661597561849666 0.6348263825788567 0.8703667496747838 -0.8090196993652397 -0.37814424964156834 0.21033141047677928 -0.9940774632386367 0.623017334089109 0.7711515734697785 -0.3042933304072244 +86 107 -0.6967137502702323 0.38197645914491507 0.7150041513998497 -0.6246180383130209 -0.7663989013191046 0.14858873797057814 -0.9476378651046078 -0.3531665148216532 -0.1459399517768205 -0.12840594485964463 0.22019747505891463 0.7228382784104859 0.7285135978791761 -0.22616863396788656 -0.7601114529503836 -0.6639597393536594 -0.36290005942531844 -0.9277635283803034 -0.5684394843492335 0.16569816172578355 -0.5730447057364645 -0.11415678136318985 -0.6466182412890003 0.3726550116391212 0.3879776405185529 -0.11754783168650507 -0.08024143650264137 0.5606809720077077 0.30126136087973365 -0.9006045206915427 0.08941778555575253 0.20142162769796346 0.03936517817403562 -0.685616866655409 0.7804712313882662 0.40533601447250667 0.6227007460195224 -0.0056954736453345145 0.926986501088235 0.6960747682572461 0.4333732059563957 0.3041836028297564 0.5490325202242152 0.14561299007051187 0.3207148036405807 0.8950185293707316 -0.006852595799172301 0.7058830158353377 -0.541338596851006 -0.6297709726959457 -0.19671051631968406 0.14593155563139115 0.5191993562281112 -0.3241142476707626 0.056210233717921776 0.9832733289676829 -0.27979204055004514 0.382846162112199 -0.9106337646471334 0.6508887422522964 0.9321587470108359 -0.9405018569979027 -0.694592535299986 -0.5401953539504898 -0.49885771747598606 -0.014747554367223747 -0.041711378999044424 0.4597653771529333 0.7431926816092786 0.4914359070988277 -0.9317657770678032 -0.9339052857220833 -0.44380827087580244 -0.5940765591971793 -0.3485130782146444 0.34160594024889535 -0.8505971948097839 -0.44548888273786535 -0.9027770566498439 -0.20424477440539568 -0.4124377498466598 -0.13140049884664684 -0.5376308208320897 -0.4686871188670365 0.13104777794049638 -0.11114470723703906 0.01722215383955117 -0.7219469940295649 0.7796448298138374 -0.6873595343143855 0.04994538253113712 0.6288411333406205 -0.7556465049840269 0.22369532914399026 -0.051964786289918186 0.766293499884805 +87 66 -0.3829807581915263 0.5767286286186517 -0.8669629024974812 0.7342361631068053 -0.3428981282200796 -0.6065363318690342 0.02998348259849548 0.08081510415203041 0.10860570525192648 0.7406130371035486 -0.05789204093498235 -0.23690471843372696 -0.002228260637167523 0.7338218976960484 0.6213035902378126 -0.1381394026212035 0.6664759906418625 0.8568951220576819 0.8051295134058767 -0.6894074953205305 -0.5769376939625472 0.24264107649527622 0.32431274328156867 -0.6790394881931594 -0.058049912654255964 -0.13257279280715428 -0.27014889978628687 -0.7700960557050469 -0.9973087622710244 -0.19610981459500376 -0.38517317019710107 -0.40542559617082286 0.5862420285134569 -0.13810591567817565 0.5579332175887393 0.3200056930498607 0.8525590640531238 -0.24289428249166445 -0.8222419816543514 -0.4249961905914048 -0.564448349228168 -0.5258236831001293 0.25560835672709725 -0.1618569310963882 -0.3610355930461997 0.8600244576851608 0.6249437280673997 -0.3255205838114448 0.056771758210201195 -0.8021472223932025 0.8145954635485233 0.11678443034104924 0.23673267203838466 0.1509679682655487 0.6176649988143099 0.8974587397705227 -0.13939378983883643 -0.9701516444323999 -0.4123374950820762 -0.9316317606883873 -0.08744457105813574 -0.3245472807049299 0.20528732664732385 0.02811300072416656 0.30467138642757696 0.5719442448278309 0.6472129550955825 -0.3584335746179488 0.01014169127625797 0.07060358513196618 -0.18058155398486586 0.2016257090090714 -0.6767518725371842 0.9736205173831665 0.3829466747628196 0.9667230020100077 -0.599520032280153 0.060057140050944424 -0.8307022499042536 -0.527422153341023 -0.17830092325881108 -0.4448775476802338 0.38708077690672393 -0.42281929898657356 0.6877004922771377 0.74550483177429 -0.9981700824258974 0.14533907221588693 0.11133840690004404 0.28386252318707217 0.08411025114638804 -0.7950772554538215 0.3097783794071831 0.8815280590934669 -0.6909738079705452 -0.9736519436709941 +87 67 0.49072935118276795 -0.02208190526607212 -0.5031077020377488 0.8862739626959202 -0.22197098682668814 -0.5246438894322181 -0.9888777802399065 0.5660036554981078 -0.3258284297398535 -0.6650217336142479 0.9652228333025565 0.9094608585457205 0.4710137217868071 -0.32351307477037494 -0.522628876329388 -0.8051940512461138 0.18267839731927205 -0.957339713105902 -0.5878418049253684 -0.8483866532245934 -0.3691460639195525 0.11094236968376658 0.18348247620864466 0.9860653790555711 -0.10530730446553971 0.8279890092750257 0.5496211236924959 -0.5378380831220662 -0.591966347246403 -0.03236271030251969 0.7298651384477663 0.6480101455797065 0.016649097467304808 0.18503304178023705 -0.9739160066153929 -0.6225590316583658 -0.823329821210004 0.4799396283294868 0.09757513139061214 0.13677783623136341 0.471889231154601 0.9286832670328935 0.768015222486899 0.6392449749711444 -0.16525921117809905 0.9181137273317499 -0.4666395829423997 0.46268035451768297 0.4303225078324291 0.8268117937636754 -0.6006390945607623 -0.4362327310083105 -0.7390795069745153 -0.505655361189332 0.39783070804046283 -0.6616106909013142 -0.6692776216714773 -0.8066787941311329 -0.16188199504760825 -0.906910639101066 0.0014625683374864806 -0.17745508840607327 -0.9976408577213491 0.5073277728438512 -0.8408993772999604 0.21986238692583138 0.29234069181380784 -0.9237696910539004 -0.16840150999607828 0.7387600026725427 0.8900413815474884 0.06336300370595449 0.8282851603760049 -0.7886136673574402 -0.28209758431524756 -0.028198891422938743 0.9233033446793824 -0.8648429064098639 0.8202714612161 -0.5969304750271944 0.11224902524348446 -0.31049238847271443 -0.13349986392393687 -0.7378828444559355 -0.5332139802402911 0.9024145570840059 -0.6290540658216082 -0.5096938333539434 -0.8637690657231838 0.8739055094221659 -0.3381302995060185 0.36741833977030236 -0.7002088917091178 0.8482149696283421 -0.7390860776716521 0.5364987539993842 +87 68 -0.9368116364670354 0.03833437036188303 0.8490061536952866 0.2475914334068514 0.0066912416009259346 -0.7511357214075816 -0.16060315440000061 -0.030518877034683145 0.7573196129664674 -0.18214939135703734 -0.3423755252993981 0.47802906782511756 0.040841325463323086 -0.7062970886487256 -0.7807897923010843 -0.7383209737748355 -0.6100068707769506 0.962647997508342 0.8219268804130297 -0.2847790581774523 0.8733721248531692 -0.2645532334705918 -0.6250883085762373 -0.8288273449267527 -0.7536123401353723 -0.27392728057971794 -0.441903956982975 0.6326675251574223 0.5907065476387725 -0.02444702265572407 -0.9420915694548357 -0.2961855241979494 0.8688528148198791 -0.6112977677516345 0.915295224096385 0.07519670227089614 0.6188881186487403 0.5828488030165648 -0.7862460171005172 0.895332332897288 0.9534676580528825 -0.7508835413597017 -0.9878241133824148 0.8546830260619926 0.6554915394635688 -0.9353740571834053 -0.3525048451398112 0.8605322139751073 0.06205802315646358 -0.20584334815108973 -0.7836201041379607 0.293454402500789 -0.01096230343317206 -0.8450160193587799 -0.11270132763410756 0.13658241375045876 -0.34639524695994184 0.24021464157596362 0.03746363920911944 0.6350193100483321 0.3286393272044865 -0.003092917569588405 -0.8383555725238523 0.8071991951764685 0.4073768816781931 0.7501351076904388 -0.05069429403923653 -0.3388333086285531 -0.1508075722289295 -0.3730750534867029 0.9443323524872935 -0.486866159325126 0.583718579882937 0.909108909918898 0.046698395170647666 0.9565486870089084 -0.9463744781739309 0.1607089213517119 -0.4269310155953232 0.10045469759073322 -0.7600489843445744 -0.7565933711255537 0.6675702707932967 -0.0971434958515025 -0.4948757697742794 0.33012243220794524 0.357499612626212 0.32252532044584004 -0.7178282077513265 -0.8094439609802448 0.844382035112333 -0.08186828561392123 0.764473842788767 -0.21431934642522865 0.7982256263895449 -0.9509198480103367 +87 86 0.41767351878820724 -0.6333737569150117 0.8857065673906073 0.037967321164121604 0.13903617456731232 -0.8721663097113386 -0.4581624821054211 0.27383132357895246 -0.8253587816508612 0.08013687341510112 0.8072341483470009 -0.8943119240406348 -0.11669151346942708 -0.043722353083605725 -0.835956581130427 -0.8112625567315204 -0.04162617083743636 0.24336067024831998 -0.6895037017140979 0.9200899479395224 -0.3539452050603633 -0.6807039983783916 0.6787215703642835 -0.5885411970315546 -0.8775902876168922 -0.02457823328690445 0.7710613045486101 0.3056885748482516 0.09230143170433025 0.2109024015394203 0.8251341035695452 0.22389447097572668 -0.8843806608940332 0.2611892594029961 -0.6261184629866154 -0.3203984444362842 -0.9851404585072967 0.3887362798414076 -0.7622833027890543 -0.4860035815983528 0.08793983944985784 -0.009067407164826013 -0.43212267697856577 -0.6416838908870568 0.2282946031125388 0.44637927725803084 0.5577130672698853 -0.9310320309896358 0.6769635371815736 -0.17749936922183207 0.032383464497734105 -0.15528477307132893 0.9847495983310739 0.8818379107243799 -0.07541276085409265 -0.9846453557684627 0.227745598219532 -0.4401195305593315 -0.8757407232699375 -0.4607318986144302 0.23024275943649464 0.2382156667607791 -0.9257603657294862 -0.036507944019970484 -0.42867082436313897 0.371258694231664 0.5635358218456974 -0.03854147574122191 -0.5674837130469106 -0.09596779716524595 0.7433813501792614 -0.05060390975122342 -0.06722845839190872 -0.5559190164834922 -0.9730206447877012 -0.6923769294530029 0.5266110554947856 -0.783295817767095 0.447894528713622 0.6599638568696737 -0.9699282730879593 -0.46598636401962845 0.4286280342754516 0.08459687482720635 -0.19924382190630285 -0.6756221795482407 0.07621660630887206 -0.6596821541035229 -0.617165603741848 0.2800225399568519 -0.2077939518442118 -0.8991520228351655 -0.5323910524889559 -0.7065929590278592 -0.6948914714763905 -0.1647827308707135 +87 87 4.399947294727503 3.2952635406499935 6.6635617464445485 3.2663244878301247 4.021407862257749 4.831311505369876 3.571981928169298 4.3501067195640335 4.772395327199971 3.2429489682683297 5.873987036413038 4.067814905535405 3.773236508276879 3.541411983631715 4.796411641895798 5.518922734055847 4.139144061066166 6.245190979980556 5.9322734874014635 4.665441982596633 4.028504497825784 2.735379456413873 3.5058346104077405 4.880738101533474 5.343637425075537 3.320420172472213 4.643219486079736 5.046963320811512 5.245243499856555 3.443333506975055 6.08148037588606 4.586889769616261 5.822996843496969 4.080360378407315 6.340780330140131 4.980509850184698 6.340780619613566 3.7979965205758255 4.940839892207864 4.0240113422853305 4.433390027094477 4.585788634742879 4.396131980130896 4.06614271650076 3.213298351517474 5.180638067784349 3.729400668717266 3.6411427486919643 4.145739641159223 5.287617445219034 6.008890170446158 2.621727207036712 4.3455204580423334 5.422408143781994 3.7168453675548667 5.321649607159973 3.0071828968384153 4.349662556085111 3.6714997207012106 5.068019026792077 3.249601786028199 3.0886441719043463 5.438943920216673 3.5955646025307546 5.166933152181721 3.286746907013068 4.318315992101374 5.050755232225607 3.981904419554774 4.744903546373873 5.284682301465983 2.689283967531539 5.002045421119187 6.593998764548744 5.802044648758839 5.381544218386013 5.685483181752012 5.1160428749693025 5.893191517965437 4.097444387050411 3.820727541503137 4.17701553744902 3.644739098495848 4.608532840484916 4.004263611204431 5.491739412268814 4.224340841455938 3.52389611634605 5.181754385991329 4.966836074176962 4.955559551683379 4.459716384280881 4.6469955593754415 4.953632392524873 5.5857567024885535 5.580543766871917 +87 88 0.724227652174412 -0.30105031640553026 -0.9250295590621129 -0.4557022884401787 0.5584433854883388 0.8294819501979716 0.27287592616270295 -0.030593959520478275 0.5526843272944253 0.7320407207052384 -0.6312258048400243 0.38855123927421187 0.49462048845534157 -0.6756571427181906 -0.7679278242795209 0.8553336068832504 -0.435505182546313 0.6300824676376011 -0.7305808618409975 -0.10238994630473641 -0.4430097348058144 -0.904220563465997 0.8059034554878013 0.21433384719602677 -0.7991674426045019 0.03252055400050313 0.5214359666755852 0.8758080713313425 -0.618519303326114 0.8270562240838741 0.9265395740138174 0.8664504321478685 0.872426835277978 0.9069801186940085 0.8543148204677744 0.6192691943214079 0.4795618103154464 0.06997489804752166 0.3653061029680993 -0.7328374576469883 -0.7677690065300267 -0.35425838418470446 0.2521313342652334 -0.20585022484000692 0.048208316449793065 0.34709009540099034 -0.017685890761497625 0.04871889823613529 0.8682623277992554 0.8168611717617276 0.8081354313188396 -0.8037647072042207 -0.23257068941508807 0.8079732120344918 0.21693898275539536 0.8493708431191316 -0.0336666325048558 0.15937895480184805 -0.4812868782736921 0.33553910339170034 0.9541589220620845 -0.7026678671017204 -0.37401560493874997 -0.4204925304530942 0.6955928049766156 0.29621203056459433 0.06495479319449649 0.8798262057350907 0.37768344000705767 -0.5548509568984352 -0.9309763052839828 -0.21749447910828357 0.4275439455914789 -0.8960011016431324 0.9221935793412956 -0.16010816265910566 -0.9631004027959358 0.28984440628555275 -0.3415641676750316 -0.9867509377674291 0.45738073316657135 -0.5617366851874837 0.27544212603766116 0.8046805746733108 0.15064871091020127 0.8056683933420667 -0.6410338505441395 0.4153578609416342 -0.5642636839967368 0.909976419916174 0.8413839010743194 -0.945653378618249 -0.819252796925751 0.00826243015633299 0.9722933378857732 -0.4862657038249678 +87 106 0.4389120186026527 -0.0014858087350846372 0.8622215511665354 -0.051631595251051765 0.8175730820866476 0.346340142523323 0.48425486692731834 -0.5349450191128204 0.4823776218724134 0.30966600819599144 0.9193297412225141 0.5300032535578985 -0.6100699167155761 -0.2873673077495147 0.0539350793533695 -0.8013079619086343 0.591852303410354 0.7117048999803663 -0.27182368567755044 0.2995345700525074 -0.09685314660368682 0.0395322400828404 0.3647707281911794 -0.06669635586881517 -0.7862994497318587 -0.8434284243196646 0.6928817393439601 -0.0786085382095072 -0.6107001447249925 0.8628752859747528 0.8525749270209966 -0.46752472206286044 0.8344672846219179 -0.7431114951570781 0.934583401456218 0.9831322592253 0.5345517008749132 0.9939696819817803 0.4971513680446069 -0.1867526996144857 0.0448729821704994 0.08956270756260132 -0.3781778518419101 0.013574221176443801 0.22673829588465444 0.2092335387302824 0.9780296799762924 0.46765202074688395 -0.27982251777026446 -0.6495064723423642 -0.9077969708718947 -0.025924792052109957 -0.6729720067706646 -0.3730380350150204 0.6360310650871188 0.13127856456615006 0.7109632596308502 -0.2719143044445491 0.11433461276107293 -0.012947804814003039 -0.6758778456280754 0.3951787323226814 -0.7263882349721711 -0.08052805418225595 0.9584487185300381 -0.058180669885251834 -0.9221394849530793 -0.6010804411349715 -0.8407180953286795 -0.94939259343726 -0.5310890220175895 -0.8523496161587396 -0.26752042818419164 -0.9395335844926922 -0.5968695183243586 -0.7628093475056008 0.6326954805929075 -0.9223254674667707 -0.9284741968222034 -0.32196703153361117 -0.19194531602690268 -0.43339915400041473 -0.7909633598852905 -0.47134060762919217 -0.6772602981863343 0.06126821451252629 0.5501107362278208 -0.4712545387895415 -0.9797498197302605 0.5302748907237294 -0.5960131869829204 -0.6794739447056035 -0.20014522476539076 -0.008470568612664708 0.2780639658169073 0.5862169841386051 +87 107 0.08769493055805189 0.2603157478757372 0.2803767002051136 0.21060520167225683 -0.35569600720909755 -0.07315991554641577 -0.42377212147860877 -0.9972953178389932 0.13076931755495624 0.011949437104817884 0.35564167476582864 -0.021882713300329648 0.9552297028278764 0.15306735576568165 -0.5804231300785208 0.0870135424053271 -0.5591610223228343 -0.2267919831757943 0.5783539324934128 -0.5914422520888156 -0.6002612902588693 -0.06985203066879886 -0.4733196868026257 0.4409059846156618 0.7550140816255404 -0.7587407030858591 -0.4253412017341356 -0.4422317484987359 -0.5993572735717623 -0.7899889813492673 0.29180452347281105 -0.028186263325113536 0.27561592146135316 0.22992693031285794 -0.10720026550204387 0.9042346973663056 -0.6695926300800745 0.4928313806770941 -0.2329208938465961 0.40884740436844913 -0.3726569362214407 0.9177137692305373 0.3940344835193321 -0.5133319244578645 0.2564257158858252 0.9483631067778606 -0.1236409737651889 -0.1129784624123038 -0.7131327001732126 0.9333891355728472 -0.8232546299532995 0.0963478478307791 -0.012247180001361935 0.5899372722213878 -0.6436701966312595 -0.9345004452186367 -0.06768166427573652 -0.3873007885836799 -0.5761134548554931 0.8992192449687242 -0.27863069730857126 0.056387109260817914 0.10113976404476066 0.7784560258808568 -0.6651552610332012 0.5883813713849957 0.725511237046716 -0.9121017920499512 -0.6210443645830415 -0.3134255545354079 0.07977478390103276 0.16622333090571328 0.465090525593578 0.19978977284907495 0.9893915366924 -0.8375652868979393 0.3989242195985159 0.6532065239028482 -0.6595783476855344 0.13633374183990754 -0.13398185245092842 -0.48070715328775093 0.66874417852346 0.6966380674416093 0.9574337851094927 -0.9941906211222433 0.22029299946302294 0.3851975808128323 0.30233634794988595 -0.624506968048032 0.6623454602736736 0.05697699508808207 -0.16854453303130534 -0.700641713947816 0.907837975725575 -0.8459577861714129 +87 108 -0.5814487166015485 -0.5448245358611543 -0.8176253903428718 -0.32355453932062317 0.8874345710146774 -0.4847652610040063 -0.021079451370317637 -0.8396807773414001 -0.6419820794368307 -0.2758352798367225 -0.8514877700304693 0.480495829477424 0.8345977023009492 -0.034913747914939064 -0.27000744644692665 0.3082749112700829 0.31899476161010054 0.7195838991838659 0.5169935892200797 -0.23253843239191285 -0.36810135183812953 -0.021044450693411987 -0.019871569547248447 0.2593212017833255 0.3417100181258248 -0.39825597211962904 -0.8166681652567382 -0.4833821981655755 0.6197979033145735 -0.4881844190360989 0.1630878337174264 0.9795234911274671 -0.8273796239889792 -0.40767862257887333 -0.8209819142847723 0.959662252183592 -0.9314781154777703 0.29903529547409224 -0.5722517443983384 0.15677324069215404 0.3798831904282469 0.16586801470106582 -0.9018586369494153 -0.4110438424747782 0.310194069370487 0.15180177966589326 0.4755023216992784 0.2845458892389874 0.399213635221779 -0.8055116286863724 0.3088598284388724 -0.04744277355098525 -0.7589232015199905 0.30917798475668334 0.460218208776636 -0.2089342490500219 -0.07102258639218317 -0.6355923008615822 -0.3411131838788608 0.05197066191274402 0.3954220490727467 0.23320422114455286 -0.6094509425365175 -0.501542467334158 0.5054949395037884 -0.15382862205832426 -0.24845942625569384 0.9809945568879244 -0.321366368884231 0.963585474930301 -0.7149749027402712 0.03585048377920397 0.8822686540387419 0.75178566021295 -0.9306862608967021 0.8975104798651563 -0.5294261530824227 -0.9402169094983166 0.6594852993269278 0.5842741321307514 0.9063603403023037 -0.7161939022344292 -0.06632938558896528 0.41920279535114324 -0.27064892078398395 -0.6659407684253127 -0.28053152219399924 -0.6141466380334177 0.5428311326824402 0.3205862311843297 0.8231649300061061 -0.5782136122952841 -0.6596783697338011 0.645300855562964 -0.2750868218849778 -0.3281736999770437 +88 67 0.7782392975003716 -0.8106313249290462 0.34462064081808297 0.5828004966173561 -0.2048549145818277 0.2798714454986835 -0.9523314782923176 0.834805701540986 -0.007408930656323198 0.010601720982613916 0.29298998672425114 0.7526225897834014 0.31491544106799707 0.941839837117681 0.42131453424532195 0.4337295201950293 0.8166641388061264 0.5644196346363681 0.5713341435500106 0.5499174053882034 0.8997461528103763 0.7143416290956623 0.3620624559080521 -0.6112388302356193 -0.5115499606814771 -0.8474437186232602 0.7574786711926438 -0.6452957290825536 -0.15958756611468994 0.27023622701430905 -0.6526323008853199 -0.9130290046343348 -0.010939094142170536 0.40214710860726344 -0.6745206932804955 0.09652842275467477 0.08253784703161204 -0.4077692030155118 -0.4074085652972168 0.5763158344755652 -0.19320971549739174 0.07193283724502075 -0.18870746822679907 -0.7285166188027403 -0.7314759526841397 0.7775849863404838 0.04601822653182652 -0.7934335540564408 0.5335262155055547 -0.8420071017839375 0.35744397020612295 0.9216333249108037 0.098716126092258 -0.948918330464519 0.1573884050399823 -0.5106819318747575 -0.14868769578998475 0.37777351325547226 0.2881094869248464 0.41698828877705973 -0.7733706228452022 0.028041047533932772 -0.29485897554123985 0.24639403084881906 0.863542224137489 -0.28681787789133883 -0.8251881342907761 -0.2960136685837662 -0.2699265365326873 -0.6084862377223317 0.3060068178477211 0.20592664508393366 0.3402419759223425 0.40247911981849493 0.03936020741072377 0.27476206561182615 0.6600232847786662 -0.15998295849984578 0.4282659978664858 -0.20646377622662482 0.7195950445454482 -0.4751328172193181 0.4380352396879412 -0.9517449040850667 0.21913606057336654 -0.18892991593261432 0.006769435030748117 -0.8548816310483065 -0.022264685249207217 0.24402648245412095 -0.021694709942403634 0.93950015236855 -0.21417791915464424 -0.0838882966497434 0.0647111398604312 -0.6441431850421562 +88 68 -0.6781512550816282 -0.7995870209192915 -0.4972953513655185 0.2980213782537531 -0.05570415046929922 -0.027115587571383992 -0.2623162358119526 -0.006426357780353609 0.0019122770248460874 -0.6072205669561537 -0.20959502992842194 0.6380841044162764 0.2871608071265017 0.8899465749602122 0.11154365148176848 0.9561934787431219 0.3527280881218906 -0.9112518845663209 0.5221258945501763 0.46733627694559465 0.6337405613055715 -0.23178589600818067 -0.18482114076870904 0.29017869700827226 -0.9258687251966853 0.5060825932673776 -0.05452748528485052 -0.6978898544049501 -0.6964222345769786 0.5690909619000217 -0.3131984931520211 0.343749240960183 -0.9839427541156238 0.3586928451119422 -0.13965009244489113 -0.1891810894974666 0.48299038599128075 0.5907249621436688 0.26117168093130627 -0.17463429773744732 -0.3357812625066763 -0.13273206333990473 -0.7537140971706611 -0.6282658336053915 0.5993768311413201 0.05753937448333102 0.24363926891035903 0.023506623873956523 0.5794615479368803 0.3298733650083847 -0.8372859421384169 0.8526858653193448 0.7785319477698458 -0.028846668712916967 -0.26499425635699714 0.7790863038832132 0.5202559319941009 0.8676065548314977 -0.31249881623948417 0.4868096824228958 -0.8042909539502687 0.8562049942198917 0.9439670461496217 0.09856521609265667 -0.30394593047101903 0.09226685616446306 -0.6587882521228974 -0.16223214136681152 -0.5405412931226798 -0.8600363218969269 0.536521991101083 -0.3091453309352101 -0.39230921702288923 -0.9674904975985259 -0.9022994385098715 0.17653687048832678 0.9303655913066793 -0.4376111148210824 -0.252934444567225 -0.7700620149992556 0.8179648611037929 -0.5708593161515068 -0.052050445877956264 0.08346149068081599 0.6010586470158557 0.3181799545433728 -0.5124546798593015 -0.873388634935627 0.30231304866238573 0.6623916281403375 0.05432204851646327 -0.4387094901524995 0.7518716529476677 0.94054464153809 -0.7887833266540698 0.38300689107667907 +88 69 -0.0023488837669292106 -0.5685594221775419 0.2731843337402302 0.45053969414890815 -0.3717935803862109 0.2416734690921869 0.9690368254513764 -0.4161004011342251 0.5345562059224616 -0.23791821450182882 -0.4776614950978433 0.8705716974582305 -0.8439362817483427 -0.6791203243803643 0.2798589762994579 0.35127701919445187 0.1775155325917004 -0.5545480946254564 -0.59195843955103 -0.9612796959465533 0.8444681187030483 0.3215408527936814 0.8578285538267694 -0.40374763794383495 0.6212992807311724 -0.041705172971199245 -0.832915905391806 0.6830026466650265 -0.024892695748367055 0.9613919056497182 0.9229007359830748 -0.9085411797187635 -0.23935449969744105 0.404272311432748 -0.47775122848894713 -0.506290297438758 0.550293963140144 -0.17846458672015997 -0.3944448801765752 0.38139129221365153 0.7873076314874334 0.7531907490198295 0.2855973694048439 -0.399642076409386 -0.18425128858457507 0.34147463142802215 0.37163122502412227 -0.27074388032551666 0.1933693845646849 0.06770766540540718 -0.8480185679826167 0.30136824674663587 -0.9941195261056066 0.15586128650528952 -0.28123443489357247 -0.9886763070505702 0.11293810362603018 -0.8794183878591153 -0.6086916818967929 -0.30466244511063567 -0.4181745815172815 0.42614996698302177 -0.49848853978844865 -0.9456640770763332 0.2507325632364239 0.5702188427649248 0.24087005724440158 -0.872019612957176 -0.8322682148332943 0.39714664000719235 -0.9674358265786125 -0.6662616796996268 -0.9223081074532669 0.6676941533270522 -0.917296357182571 0.3483658428884151 -0.2995813134933816 0.009806050771121289 -0.6882665762809441 -0.44452511115292936 -0.8688125448232689 -0.23183724705451825 0.8951123463837756 -0.3558072324673729 -0.14141625155251658 0.5384207234779297 -0.4459838103523084 0.03812619982860199 0.5496574981206934 0.42991310103521685 -0.24231435857164874 0.3602070709596279 0.5784567053193981 0.025939415675184874 0.8998581176464304 -0.1437183381847542 +88 87 0.724227652174412 -0.30105031640553026 -0.9250295590621129 -0.4557022884401787 0.5584433854883388 0.8294819501979716 0.27287592616270295 -0.030593959520478275 0.5526843272944253 0.7320407207052384 -0.6312258048400243 0.38855123927421187 0.49462048845534157 -0.6756571427181906 -0.7679278242795209 0.8553336068832504 -0.435505182546313 0.6300824676376011 -0.7305808618409975 -0.10238994630473641 -0.4430097348058144 -0.904220563465997 0.8059034554878013 0.21433384719602677 -0.7991674426045019 0.03252055400050313 0.5214359666755852 0.8758080713313425 -0.618519303326114 0.8270562240838741 0.9265395740138174 0.8664504321478685 0.872426835277978 0.9069801186940085 0.8543148204677744 0.6192691943214079 0.4795618103154464 0.06997489804752166 0.3653061029680993 -0.7328374576469883 -0.7677690065300267 -0.35425838418470446 0.2521313342652334 -0.20585022484000692 0.048208316449793065 0.34709009540099034 -0.017685890761497625 0.04871889823613529 0.8682623277992554 0.8168611717617276 0.8081354313188396 -0.8037647072042207 -0.23257068941508807 0.8079732120344918 0.21693898275539536 0.8493708431191316 -0.0336666325048558 0.15937895480184805 -0.4812868782736921 0.33553910339170034 0.9541589220620845 -0.7026678671017204 -0.37401560493874997 -0.4204925304530942 0.6955928049766156 0.29621203056459433 0.06495479319449649 0.8798262057350907 0.37768344000705767 -0.5548509568984352 -0.9309763052839828 -0.21749447910828357 0.4275439455914789 -0.8960011016431324 0.9221935793412956 -0.16010816265910566 -0.9631004027959358 0.28984440628555275 -0.3415641676750316 -0.9867509377674291 0.45738073316657135 -0.5617366851874837 0.27544212603766116 0.8046805746733108 0.15064871091020127 0.8056683933420667 -0.6410338505441395 0.4153578609416342 -0.5642636839967368 0.909976419916174 0.8413839010743194 -0.945653378618249 -0.819252796925751 0.00826243015633299 0.9722933378857732 -0.4862657038249678 +88 88 5.430308555429992 3.7420936017170736 2.8630703575813667 2.966423537761813 3.419939243007473 3.5124421570019138 6.164988915573409 3.811300800195061 3.458568849358591 3.855750329505097 3.7794022715839644 5.788273589122583 4.6431815919190305 5.2066321933849915 3.025515923207294 5.308693724794159 4.5329958234779175 4.710704436636107 6.383558671371356 3.9324714911798666 5.3986939425819 4.816968215615031 4.51455495352465 4.451663847815239 4.989608261912483 4.6337741951499805 4.811554936715861 5.053829840248087 4.335643943789835 5.034031181100364 4.641243954031967 6.309541961428312 5.647669749301226 4.9522326939888455 4.903597889232063 2.7204091931680487 3.626283801330093 3.516826185221471 3.669992651229629 5.230803513780404 3.358360987852187 3.213632302875267 4.602757229917463 3.9556731387144275 4.973601064315329 4.856405809445169 2.5188889516268063 3.7385600710495543 3.681017238194527 5.008722701187968 5.331558449159914 6.424892786737843 3.9003165021967825 4.045572156557794 3.157273701359319 5.215528962076295 3.6027587730010726 4.995214005464398 4.85575683507734 5.250394579005038 5.077041757520786 4.132401036597832 3.999199749226145 3.216493622345404 4.134388140395002 4.423151460684022 3.7965670770269355 4.769261705672745 5.007965161546917 5.387465986825279 5.151309577946501 4.344055868769611 4.232485081421376 5.758854378368053 4.841299019874146 3.173531197342946 4.821763735524792 3.8817873863801404 3.671641535822682 4.195601123076968 5.754418024497331 4.295769230942341 3.9370552780862305 4.92403165861109 3.3107349172333977 4.910458787768666 3.516340440316462 4.521814829663225 5.068400877813784 5.702667978780877 3.3415046099840735 5.352995110389981 5.35931615461318 3.495997377040279 4.943748638638618 3.6411088028008214 +88 89 0.955511640256405 -0.05276720269654622 0.030196044748337814 0.08410615881431083 0.9701223428957924 0.31717134827867866 -0.6309915297547841 0.6393003989543316 -0.7174838791438896 0.9560097648347072 0.977370416878734 0.611488225542764 0.9617157260445004 -0.8632666834596947 0.968887088873722 -0.6556244562356914 0.43120397822963086 0.3643092884413883 0.6468580414345504 -0.5934312510477648 -0.16315681266553583 0.10363135791676004 0.7429920278777293 -0.7170716425026757 -0.6316733647460033 -0.5425568873164299 0.740974669289302 -0.28574727387445176 0.002245701997841465 -0.5295689883918198 -0.2079027845767496 -0.8707856751664673 0.5531508776863721 -0.7243749460011282 0.2742283557590599 0.2511163975125592 -0.32862045968927567 0.40682279273210953 -0.2499523044648515 -0.927188666010943 0.3649265067341665 -0.6208898659250075 0.4671319045015714 -0.13261527682707341 0.9163017118262402 -0.4832436640409481 -0.1640239238850545 0.4826017583377158 -0.048110861332836485 0.9235958494534604 -0.5525410881719788 0.5710555201718832 -0.7511605525349754 0.6798252086757064 -0.5835936942049582 0.6894061380484755 0.37588091614852415 -0.6517741840372839 -0.7695103165106469 0.9070310491963276 -0.7322258017392962 -0.9375028054404126 0.6592057166662462 0.3335871413095126 0.6031332436489638 0.7087445798970817 -0.89256627218283 -0.8507091938002784 -0.6740504202005448 -0.10681295940237123 -0.546295004022529 0.21601132268031686 0.23197893521322355 -0.8590828040336351 -0.5672706691243019 -0.11812518821651419 0.4406061830822787 -0.9931329272773401 0.5035996732419352 0.21658626843867967 -0.9629375642094602 0.12496547177429496 -0.9084518000783743 -0.5014349466408006 -0.584217437170186 -0.6471832276347014 0.7759337510145565 -0.9771287983570098 -0.4761611620793982 -0.4252338154701947 -0.42914372707963233 0.6883998659322648 0.5665117718234762 0.0036759649973143738 0.10434829748312491 -0.8664482872901043 +88 107 0.9065080876482092 -0.569178871366443 0.15740070838437759 0.636788601035192 0.03619416076795878 -0.41512933484920955 -0.7710402571242545 0.8936737582353893 0.8996211795611184 -0.04610986896695857 -0.3447135884231236 -0.9976341148402006 0.7224128417845035 0.06258556277264726 0.013280454713245016 0.49819252769677846 -0.7812196661866306 0.42129912440861483 -0.8921219635164284 0.8726803997874233 -0.3215230147069099 0.4775510087413255 0.7082440717410166 -0.6609917265897616 0.10243300956806722 0.9132972542906852 -0.9512831017875902 -0.33556899872291 0.9016713113748223 0.60545272708339 0.22406128755776478 0.9361456052654655 0.8844977942397441 0.34433799275736376 0.23326260410300304 -0.4934334041611079 -0.11569867470302664 0.6063166525693493 -0.34750533675181416 -0.12708856066036178 -0.11522276689646205 0.20584998462135395 0.818507028398159 0.37741695702217837 0.8339393806783553 -0.5782798402401397 0.7931849020529325 -0.8990263034607002 -0.27305269316095204 0.5199302704621607 -0.7501706360836955 0.2789585601697824 -0.08812039805864824 -0.12127479789011208 -0.8287243882183577 0.6439749558302807 -0.6467657431397813 0.24737973341409103 0.02941970447336595 0.516162391259199 0.20690191428681803 0.46223292610900923 -0.1436038218674942 0.4188601862734891 0.4175708948612311 -0.8477908038442781 -0.03396861136391971 0.2614913038451776 0.4757984234846373 0.3358156934641652 0.5559796112079414 0.383130360819651 -0.6983407751967687 -0.7505495439391923 -0.54163110855894 -0.8792193893647418 0.6860362765169716 -0.7060914311983844 -0.2370835635139359 -0.09204239216641974 0.9879715485338245 0.9772745470972053 -0.1300714715180904 0.11917283337481033 -0.4028819579963141 0.8596733387930786 0.2864305999788055 -0.7774199416080887 0.8198875484830574 -0.8092025026079872 -0.759799246716673 -0.48042353890710165 -0.3656157729185452 0.21378675983815776 -0.8584927737440069 -0.6849338530975821 +88 108 0.10628955251328365 0.013352687675570296 -0.08890231216534272 -0.36342068855626186 -0.5051077927011935 0.450912518099408 -0.6140773125239991 0.07567344739593085 -0.5136886127810323 -0.23578906026351754 0.18599997072686403 -0.575962609881391 -0.6473677129931097 -0.4487254685885811 -0.20800439089191802 0.7999525695776919 0.6835829761299836 0.5392687656413355 0.9196414652333913 -0.2651151903756115 -0.45198371741234067 -0.9997344297733826 0.1594867471416468 -0.8571397507434704 -0.28807959545752504 -0.7887630082383013 -0.34392288096427426 -0.47272675183022916 0.9530290512142512 0.08310807420614386 0.6406619724818985 0.531505220058268 -0.9486665537145447 -0.25259197128355226 0.6781465894847805 0.009038373058516624 -0.15174424056896374 0.42389583447540957 0.08341882743311047 0.8912350413168555 0.4888865755237075 0.1462529892176605 0.5644179189196514 -0.5226762902127169 -0.590291020924768 -0.7940453051158787 0.166541280443252 -0.03551661503380976 -0.6932697973270745 -0.560468202075818 -0.7600858180175509 -0.9326961661894706 0.3844881371772475 0.4302308174689724 -0.19830805401734364 0.18600869096604744 -0.26750865215939634 0.3591440553676475 0.7586089102545615 0.5491373351724436 -0.4533377680466155 -0.1954668178127026 -0.3676480055763769 -0.05743123694411412 0.2814045828683698 -0.4165667831402178 -0.32754103665824874 0.054485790343272944 0.2681403857761342 0.9659597233887709 -0.5077998863092132 0.9368875404097092 0.3542841663135301 -0.19239199345428526 -0.31814416222156994 0.4732602327591837 -0.2383878463880853 0.38418188150839505 -0.26745051680111565 -0.4674197071478474 -0.2792909547298099 0.018683142556742416 -0.5753724581415123 0.8906820400072122 -0.8857844454006851 0.5778213942333237 -0.0028799819456992726 0.04004199315917223 0.762394003928575 0.8239294420855134 0.07652227123054645 -0.3735821260108072 0.8919402228421611 0.7030686735002898 0.44322375945987735 -0.31315676590011443 +88 109 0.6501807089438629 0.1517941103515592 0.15702488769392264 -0.08097920410199322 0.26270365751225366 0.34145754214467394 -0.8197206736701521 0.30014932188326826 -0.15604314573302158 0.09625340094810175 0.3657052945867705 -0.0866934025176318 -0.05007423014679868 -0.12271776748949215 -0.06976715049491133 -0.017996566702587424 -0.4370827265716848 -0.041873354371846805 0.7494051861080211 0.04473987917067124 -0.9214900506712067 0.8555002462229075 0.1320177692657909 0.6297266564242168 0.3617056302518462 0.4620459199865865 -0.3885412269833841 -0.35879502700910515 -0.16779560214879985 -0.7325104961476243 0.03210235010034568 -0.6636847508152337 0.8739429456043799 -0.6408485296209505 0.7914680637726388 -0.09093255980214998 0.8314801902372888 -0.38077244809672917 0.7163897044908605 0.5354431691220969 -0.2584272124019389 0.6346360211403224 0.9914678654348239 0.4873093608848478 0.2668246768836069 0.7652455139328818 -0.5240494171684829 0.44877968057638307 0.2871201241855601 -0.30121639411160483 -0.2469190994371384 -0.9808512734166879 0.2851097766200792 0.8406766431904771 -0.04248248678890043 -0.16001200609601973 -0.5852501540612467 0.5461515163733601 -0.9712361554355817 -0.8985235312804973 -0.6946274546276048 -0.1902947255755938 -0.2292110508867493 -0.6668665595565968 0.366958103780183 0.35206293509626563 0.161428285098155 -0.9185390339992578 0.8665562999466607 -0.719878923546176 0.39218933106234233 -0.43599733632194404 0.5508990565024574 0.0781185083154623 0.08386061350882312 -0.4404687590671734 0.04490914141044411 -0.039380958667379895 -0.6342219586289972 0.2572134222453908 0.06140850330439496 0.9177761843762888 -0.3806288892905545 -0.6884620294769432 0.02124812355068406 0.2372553984323582 -0.6928032251189753 -0.19331569113077385 -0.6199129991494499 -0.4935921111334147 0.6577080477466668 -0.14646220761847495 -0.48061441628100243 -0.849630166062612 -0.6270351924836772 0.1016355995472169 +89 68 0.09667889166015531 0.70006855721563 0.08805302936871406 -0.3925540506916514 -0.8941328440584515 0.3144201379941547 -0.6723188996377047 0.24088900076532194 0.9659744144630229 0.6614133504376474 -0.35941570564168557 0.13075961335297182 0.6912754434943638 0.7179570897869318 0.6915496234837715 0.8015479221564914 0.2384481513994121 -0.8426210324899086 -0.36216367525485627 0.6424693168064795 -0.28252925299119225 0.6539367269637322 0.49519617126748816 0.4404306184668083 0.7136513966135634 0.5470669204244347 -0.4851310002095677 0.9194631688083059 0.8011673040710496 -0.7344211351407772 -0.9174472519289647 -0.7371914836959572 0.6696477206077105 -0.8350360426783974 0.9774541280723856 -0.12784864770657367 -0.7432489716478174 0.7548378331743864 0.5750889178842806 -0.009648450161780397 0.8253692887509787 0.2987555188952049 -0.27094252217377957 -0.1821487394441672 0.3500977576108739 -0.6705404154004329 0.9395632407105334 -0.014527505242217353 0.35846563780368146 -0.6961162327137025 0.03805092390135201 0.5728715958787587 0.3435813646065675 0.8115596158710241 0.686709952024734 -0.46700895438355117 0.8100498682910413 0.6802713613430251 0.25727652732149475 -0.34085679413316305 -0.2193173051349122 0.941157987478406 -0.5392872556544874 -0.5067861626124828 -0.9722014980509697 0.37390723175853857 -0.9967708172579723 -0.8189790027196082 -0.4446407741004552 -0.7053865734865927 0.7230101781100096 -0.9262243023012011 -0.9020564435150917 -0.21775103620194036 -0.5464307422035415 -0.9701559411220113 0.5676362067410345 -0.519854908013369 -0.5642628448933127 -0.25953020194074505 0.5820267506516643 -0.9716995388615741 0.33144894348130816 -0.7583673042486729 -0.09173252955972844 0.5233129290005369 -0.028116741436837955 0.43189640386854244 -0.8757864845592986 0.7262873026895669 0.4833843903670132 -0.528013979322927 -0.020328978313947754 -0.1667663228641385 0.7936852930201219 0.9736232794826674 +89 69 0.8396927044954001 0.8111059859107594 -0.14251079254262478 0.2718126186635965 0.9475968482618211 -0.16554129341015011 -0.5273276007433738 0.36500051894133634 0.8303365845725648 -0.12701952950772677 -0.7368084926571834 0.25333581069900823 0.11358201481124075 0.9478335104236859 0.6624789677919498 0.2556169567381015 0.577447660802771 0.9966322168767343 -0.711598865411138 -0.3586229639098679 0.08515706451518845 -0.6630749997699177 -0.32739926048970314 -0.08024820851558623 -0.47499822544222625 0.047973596908179594 0.7364565338392319 0.8935947392866335 -0.793149299218211 0.3834536423646804 0.493331160205166 -0.6484794930551525 0.5365707665912129 0.1426140455304301 0.09914956703022604 0.5390312626001255 -0.6297365880933716 -0.6076853340344714 0.8691826014429189 -0.3318998277375922 -0.005486228319355746 -0.31913029470518484 0.19901099548467016 0.05413313682555576 0.06838840956460812 0.7748905067704195 0.8515387547278077 0.4594053934983666 0.18330255054834654 0.08299819080611415 0.24080774076294764 0.7004778828072582 0.5095720932762546 -0.708191641572951 -0.004378282546089851 -0.2504985203119263 0.2873723385081819 0.4445470837706087 -0.22323797640034582 0.15709837780954472 0.08280355450257737 -0.752469351684951 -0.7572719715372338 0.11974761169348658 0.5952007444319412 -0.9865802969018127 -0.584597793220164 -0.7663338637372858 0.6787636298645212 0.7905979498292128 -0.7017031815984511 0.15855794369851584 0.3998154224082042 0.6739407682296468 -0.9365410148244935 0.7326630033863342 0.7432808484353106 -0.019639516599465612 -0.12896840821037237 0.7336643285686959 0.560148970853048 0.7575616806000112 -0.7459107892102252 0.2931367143486927 0.7466168803431881 0.9144753799200265 0.16112468763537224 -0.2868614814648698 -0.6052292801129331 -0.3294320565527833 0.4268778135920195 -0.5844430633239124 0.7253868965453336 -0.8384681341603288 -0.15142366574892785 0.7752858803023035 +89 70 0.13665892257608236 0.4994194179854956 -0.40817003748431424 -0.7970132680915252 0.2405866177711511 -0.13919373830241777 0.6551459597068372 0.4779157085654433 0.3644466692469368 -0.13557830861005793 0.9703028244337857 0.9721274716123696 -0.5423458449604177 0.7598379076843014 0.4651974728665891 -0.5776298714624366 0.008039662417736793 -0.9455260878603073 -0.7086114741425105 -0.19744177037286814 0.2442066947256405 0.9860555208280064 -0.12452165605513321 -0.7609387793562259 -0.7664286338216295 0.5955810032768989 -0.4116382707491797 0.32256898418807434 -0.23540888006686367 0.6653599347092518 0.04612899874648768 -0.7582428373318062 0.41298672303295136 0.30533074567515217 0.06381956632390962 0.5582702336588874 -0.3350506772814619 0.8756287349368017 -0.8159334860460805 -0.5590166954166891 -0.5742303252645768 -0.300114161607574 -0.6162568429771933 0.07256610896968141 0.5901406357360905 0.8704362661576346 0.5373526303129701 0.1576084210930606 -0.9740942886614024 -0.8082030324440166 0.42254403638341587 -0.4183741976341142 -0.18959755337209283 -0.8367316959155797 -0.16822760052918984 0.004178302736609574 0.06023493876994834 0.14792631110716425 0.014158405990005951 0.4132949840762419 -0.11260711050957384 0.34214166673317137 0.2062519270739207 -0.7059134606010391 0.22117481501223502 0.9643821170939924 -0.9627624244737247 0.38051036660155524 -0.3005008653463095 0.08894448823535739 -0.2901280715003367 -0.7997447312283921 0.2032242560823574 -0.7642988248885687 0.3733535766399716 0.5373036929527022 -0.8979335423531725 0.2189688997820025 -0.6297325692174061 -0.3412412647459364 -0.27908088243555573 0.9559142951589243 -0.27170635450972913 -0.5560215739084682 0.737863025944931 -0.05433949543692185 0.740040421559794 0.06219058272872835 -0.47967647059978513 -0.3229936839473959 0.4842805147585636 0.2358296937270945 -0.07785509500513066 -0.014103079536648133 -0.711787111447004 -0.034687472799649566 +89 88 0.955511640256405 -0.05276720269654622 0.030196044748337814 0.08410615881431083 0.9701223428957924 0.31717134827867866 -0.6309915297547841 0.6393003989543316 -0.7174838791438896 0.9560097648347072 0.977370416878734 0.611488225542764 0.9617157260445004 -0.8632666834596947 0.968887088873722 -0.6556244562356914 0.43120397822963086 0.3643092884413883 0.6468580414345504 -0.5934312510477648 -0.16315681266553583 0.10363135791676004 0.7429920278777293 -0.7170716425026757 -0.6316733647460033 -0.5425568873164299 0.740974669289302 -0.28574727387445176 0.002245701997841465 -0.5295689883918198 -0.2079027845767496 -0.8707856751664673 0.5531508776863721 -0.7243749460011282 0.2742283557590599 0.2511163975125592 -0.32862045968927567 0.40682279273210953 -0.2499523044648515 -0.927188666010943 0.3649265067341665 -0.6208898659250075 0.4671319045015714 -0.13261527682707341 0.9163017118262402 -0.4832436640409481 -0.1640239238850545 0.4826017583377158 -0.048110861332836485 0.9235958494534604 -0.5525410881719788 0.5710555201718832 -0.7511605525349754 0.6798252086757064 -0.5835936942049582 0.6894061380484755 0.37588091614852415 -0.6517741840372839 -0.7695103165106469 0.9070310491963276 -0.7322258017392962 -0.9375028054404126 0.6592057166662462 0.3335871413095126 0.6031332436489638 0.7087445798970817 -0.89256627218283 -0.8507091938002784 -0.6740504202005448 -0.10681295940237123 -0.546295004022529 0.21601132268031686 0.23197893521322355 -0.8590828040336351 -0.5672706691243019 -0.11812518821651419 0.4406061830822787 -0.9931329272773401 0.5035996732419352 0.21658626843867967 -0.9629375642094602 0.12496547177429496 -0.9084518000783743 -0.5014349466408006 -0.584217437170186 -0.6471832276347014 0.7759337510145565 -0.9771287983570098 -0.4761611620793982 -0.4252338154701947 -0.42914372707963233 0.6883998659322648 0.5665117718234762 0.0036759649973143738 0.10434829748312491 -0.8664482872901043 +89 89 4.272922587138111 4.835621003988961 3.7433191031157 3.950113994759902 5.663216072553128 3.595628018092132 5.101426607217857 2.9851416692157495 5.244571280655523 4.483895598224321 4.8854164336765 4.544177647176872 4.591777450581354 5.769042939606794 5.1642764016306515 5.407359075994343 3.14263490125503 6.475380368960878 5.750018487164703 4.150155861369353 2.558046200119163 3.9683842775378966 4.296723942179305 4.737439360508804 4.283281980316893 4.887404171505798 5.147765533970628 6.539101832304231 3.6001268530408255 5.841304640426525 4.604060169720448 5.880187251791184 5.064459868577812 3.8414532344819716 3.8274975224203476 2.9637813204862153 4.797310180044901 5.369961557517033 5.276169538311267 3.7273352727421547 5.034291380270016 3.9696180715387417 4.8625919721086035 3.014349875934936 4.6301923060814065 5.212282840206546 5.535062013525007 3.627002010748009 4.793765087157708 6.025591954135438 3.4390675193036433 4.7572631994006755 3.584434708681672 5.437233510611634 4.5036221802229095 4.443225465236546 5.243296206877062 3.346945831235569 3.5002447566098294 3.9421492785478636 4.432678787182712 5.599049342130493 5.170429399650692 4.79198067973555 4.087187571913742 5.91581530354562 6.779708207705113 5.6037735278925975 4.568599778429206 4.368329585329846 4.590817409399121 4.357726505725351 3.5057664393277 4.9826952387590095 5.3477990253629475 4.576443190067027 4.380140775881279 4.838581490926996 3.7274404682674684 3.121216011681364 4.173150189577129 6.277989994645636 6.088196879304217 4.378260188749051 4.971997790891407 3.28878340652863 4.057443715140979 4.4532002594991695 5.789126053411435 4.464759251073277 4.364824209233243 5.5322567918646985 2.8879876746737487 3.157409003199028 3.5852487662391237 5.19434404724114 +89 90 0.47604906163820315 -0.20623876687617893 -0.5116216011252364 0.9027126101739806 -0.27247340524043717 0.6993125108510589 -0.5277973931976687 0.293323857343051 -0.9870749615721903 0.495258530438327 0.02500962607830748 -0.372897012612055 0.7449038013119869 -0.9299825127234504 0.596374444136385 0.6051147577671168 -0.7189338699261896 -0.33974371711016915 -0.7270688283757609 0.5649593428156978 -0.007272800779006383 -0.0510541860347169 0.8774387814372291 0.68512224779901 0.2723708012073247 -0.9517084517172854 0.21691263966674912 -0.9705488299547242 -0.5250354707766867 -0.4727035237978783 -0.4249971990893826 -0.2712922095798773 0.514401334759276 -0.11947658536544736 0.6455247716736412 -0.540789467396817 0.647307941786921 -0.759343121045307 0.7788341634341336 0.21086227482970532 0.7133113017988875 0.7885764521013927 0.9386312491256208 -0.22328583346542774 0.8687987730922073 -0.7979552321518399 -0.3404294205311873 0.6142554932024065 0.8382661951078021 -0.22338859073623163 0.19611500212763744 0.39153724741739504 -0.33676751138944994 0.9486882546606543 -0.7497068427587315 0.8857923028345671 0.6211159600470921 -0.43483586442317534 -0.1954751313504992 0.2471756740446227 0.1586431476507406 -0.382102287071751 0.9158892407514632 -0.7269958866422241 0.08949873575554212 -0.40730738464786787 -0.6735372433149867 0.2152493451714621 0.5510260794590021 0.5665374584907552 0.8480173460629137 -0.777633532883911 0.08287659792714597 -0.9175668896849496 -0.024134404592484726 0.10317719790649393 0.8200790461107266 -0.6401452173951558 -0.12885678311756354 0.18575052320999363 0.5983840516381578 0.9875081685137244 -0.6922777872117887 0.44660742522113983 0.43725920475290536 -0.08118499509314692 -0.4877914194688009 0.5165981710500402 -0.22679055403281412 -0.4764616799325494 0.28831126609679614 -0.6225550060874152 0.602051509603668 -0.7353813781214504 -0.812511784221964 0.1995357566967122 +89 108 0.5880698021259105 -0.34944600969444295 -0.63530059194352 0.13537527845023778 -0.5523584929859335 -0.22711457500978227 -0.6089294356897819 -0.22267064476931764 0.04783195121469719 0.18656955868055802 0.8724874768743469 0.5168695974895319 -0.23577138833513311 -0.08305849282470978 0.026378137167124116 0.9043807237974981 0.5208346497379055 -0.6867501948183552 -0.13393573739256603 0.4546583041032679 0.34594288154254005 -0.4753756364937993 0.40319566700622755 0.2561319334434857 0.17630311771643403 0.03322222932352381 0.9971938612783262 0.820029682120528 0.34527953445554593 0.8796843803634624 0.32051858809110256 -0.5631148580134402 -0.7179090374555679 0.16426494255428592 0.8972318121986012 -0.203377738211024 -0.9877163803438174 0.5286131464956827 -0.43622416034434464 -0.4177537161719589 0.5760356617462175 0.6933039935258714 0.5663029434948141 0.6784448724185277 0.24872527848178172 0.48084536371091824 -0.7717054764955817 -0.603229899216684 -0.7167795988659604 -0.7393198147726712 0.5616517400545225 -0.8979392736655127 0.1482655741118939 0.7357402725456235 -0.6885585145643154 0.5298806955626687 -0.8302263954505129 0.048682768912751584 -0.829769761477269 0.2992290793034147 -0.45617163511424974 -0.17159264545642516 0.6995689169735961 -0.26602519139550185 -0.12204216654203726 -0.8401979645135818 -0.6832258695517841 0.27450556339340415 -0.8363302487164546 0.8949670300921144 -0.2003167688415468 -0.5770406370660288 0.4369903885024651 0.43727957952546026 0.9911816944720719 -0.40813710815504134 0.023015598349722888 0.9344514603692087 0.8664519051062738 0.0705993202744779 -0.37962034751424323 0.916315286113321 -0.9313398898347252 0.5668085495387489 -0.9596916306277099 -0.2555494175413715 0.3333769972728102 0.14517752592404265 0.6567291372641557 -0.995393764787595 -0.5743205525935646 -0.6383354101400496 0.744019069694762 0.18460575204217888 -0.27736685164010266 -0.8521816009836121 +89 109 0.18645201321564464 -0.8760313068281571 0.19604659187262485 0.36928441402326584 0.5265576176846603 -0.4109781382234472 0.5976850492270678 0.11017874204628386 0.5227915695949819 -0.29705693931163557 -0.6431160860066734 -0.9084262582731621 -0.07975773226313132 0.5819085637247203 -0.9448079794745408 -0.07106007909946355 -0.5139960111206987 0.8214498076750814 -0.9610544287174545 0.5685130696673273 -0.27206978526435344 -0.3801761631678391 0.27137349411593825 -0.9474768392289159 -0.237631470786686 0.7460573706696236 -0.46375158909437775 -0.7291514388804088 -0.5030306398901541 -0.8732942016456344 -0.9769078133221725 -0.49831633649793705 -0.7573305307929874 -0.414981731656467 0.532635396085791 -0.030005461195434346 0.03990382362046874 -0.13791557061908555 0.638423069812551 -0.5390354729535491 -0.5910481957873766 0.4425867217080566 -0.577835600302014 -0.6288005592491928 -0.8523475382914658 0.30660650986706917 0.2713005137866418 -0.17731338733973234 0.8917223930265219 -0.7998241577109759 0.9702447294555379 0.8035909405186743 0.380443574206329 0.1851074474770904 -0.2014972853621595 -0.019633031545255086 0.5471758571899907 0.29004110365478475 0.5917083966243613 -0.64974034279968 0.9539452074395949 0.2953117573426962 -0.28099909551937063 0.4739831814991611 -0.11011912677915925 -0.8158630039611805 -0.8867336660899257 0.6338883304178389 0.40867496277208204 -0.29738791543369136 0.9067190862895469 -0.35805941535795416 -0.056523629281812315 0.7381205165205618 0.727549492827241 -0.4243919977274615 -0.027899700016286832 -0.06161692880214131 -0.4635374774095873 0.025241966820588102 0.5422203581117491 -0.6860710810143749 0.5149278897768255 0.7136966150097579 0.17568456039718794 0.10031898509106862 0.7579136505762387 0.7605068393056276 -0.4963936198437251 0.8817231914564447 -0.9687615871636011 0.9163040204419368 0.08510214541610961 -0.30517953386017904 0.4254189835430584 -0.9971100011320468 +89 110 -0.24503169542829628 -0.7890970185199604 -0.9096761759900667 0.5559859386957784 0.7104443354855847 -0.9212789556666559 0.7324792697723919 0.31201335866811775 -0.1428646161635887 -0.8269889788199749 -0.29437327903102295 -0.7412474569925727 0.8840328578118355 0.5047521456260775 0.21094501965432988 0.606927031957543 0.10776271628559875 0.7318272985314909 0.7896217388422337 0.7026336976988004 -0.27618535424692703 0.1809682979877274 0.2344310870213051 -0.14342757004875906 -0.32113894942769017 -0.525676825603709 -0.38721778510658544 0.5982853863038886 0.3223773623099677 0.985584901681676 -0.41157178634785296 0.615503241721779 0.45286155500652625 -0.6368586601323392 -0.08942055030009 0.1797480293714966 0.8393783825855039 0.7957350997090147 -0.4873325500510075 -0.5449138605838422 -0.4368294805262869 0.3819970456003805 -0.8719569690118663 0.4782040712357625 0.6959136205187051 0.10545349080510147 -0.9605620290904109 0.5208352221073578 0.4633674106645298 -0.8610511898483293 0.024828872706882832 -0.19974539819010428 -0.4061675024661011 -0.46686590994814114 0.6991860351902865 0.9142028708590122 0.9098946612398504 -0.3465381247803323 -0.030342157451813234 0.6228717970257813 -0.9257371767122564 -0.9846007571919344 -0.5044365997405029 -0.9388511339192389 0.8993704056371856 0.1823558864868009 0.5519873774124338 0.7320802292708124 0.4152371307603706 0.29477412640931133 0.15813942472921405 -0.4634132177477268 0.8723721421057533 -0.025498989725817545 -0.2557270331008885 -0.4082209320274801 0.7010735387288503 0.5974750770154602 -0.3425701851209939 -0.45388163843546003 0.14945130079152946 -0.08339615628366737 0.7096657031711147 -0.5061612300614668 0.9542693995456233 0.10144275792655821 -0.005820847960019027 0.9764765804392246 -0.9830153308991054 -0.30572119812829923 -0.511656508370776 0.9547322590672809 0.00037453143351151574 -0.6945844465710225 0.16277671395934146 0.3496048007781849 +90 69 -0.5450012970010838 -0.3298193929302129 0.3461807664571517 -0.5705940523849629 0.851261209221782 -0.8052789841007817 0.9726404630573129 0.25882417503479127 -0.25060576705413773 -0.21043045375399272 0.36147211848312377 -0.6327280477737558 -0.3954047549392443 0.9986689359406133 0.15051508443716477 -0.10926810783379826 0.7572620147554059 0.6730003434850151 0.39679515488144834 0.5295973567849499 -0.34028390583101786 -0.46760454640239346 0.7567393036413164 -0.4472650108046379 -0.6471581870704011 0.8391728522581401 0.9621309652011774 -0.4884528809832449 0.721516437062125 0.7634482405439249 0.3907498165947254 -0.4058341929892302 -0.09533367111715396 0.8912371601798368 0.7033953845626941 -0.6717694762420754 0.30799119702907074 0.005415242897668149 -0.06755269601031966 -0.994547586798022 0.7486155111351489 0.21296294255207515 0.5328280211679026 0.5286096433383995 0.19115622897906204 -0.8655951959366828 -0.6963127865075744 -0.026521839869959374 -0.1842662260481951 -0.8255567495164093 -0.7539787401287616 0.7426087205170715 0.8389049306815985 -0.8576209797132124 0.08910086738116885 -0.03515111250486602 -0.6248565681397293 -0.8195182706237891 -0.6683109802090452 0.6828258172561117 -0.6946729102099614 -0.39854913925489743 0.6621595704230616 0.9450329665944612 0.4790653973600598 -0.1656188255494897 -0.6916232415151675 0.6557926278698714 0.8617772209373098 0.9086596999286671 0.029691122511837476 -0.18013059982412782 -0.09659754523515063 0.7679513974013947 0.40004336601933677 -0.486197987553169 0.8511713717345613 -0.7812862840268113 0.6811878428685854 -0.09035859967675774 -0.8482296353623111 0.8796274712973666 -0.16843435821662922 0.41128775263462103 0.08514989894591651 0.9608872526054275 -0.7026501602838058 0.6374820081819734 -0.43237364516891197 0.35040176840633785 0.06232596309774441 0.9883070189484853 0.04912047274018594 0.9220881697469803 0.7027288350469074 -0.3140980455909659 +90 70 0.31552226084702695 -0.004394056262920776 -0.04711520824693216 -0.3384910317338736 0.32234082961790156 0.19444459946390502 -0.1327664798824526 0.8430985320207272 -0.6331838109018255 0.3895708483484974 0.06239736703106358 0.7110998968721318 0.8677075295021035 0.78400761416202 -0.6520812956189233 -0.3166186298086755 -0.3725798345077824 -0.8555396711939842 -0.22817626775565913 0.5953274129783497 0.9465718415593112 -0.6640101130954033 -0.8976717292981999 -0.8745774978977929 -0.2949469151940822 -0.9390929269031894 0.7701994897294273 0.3653679544442543 0.06659847294469112 0.9369378077767667 -0.5267444418515126 0.9436970716468136 0.2320724309936648 0.5742098626243299 0.6486504709251053 0.630355684997886 -0.7314495720442524 -0.0720891910045478 -0.010022403677436342 -0.5209209345363737 0.5896763593637198 0.678563402112063 -0.5871532495614309 0.3320751686023604 -0.4915081157230441 0.7721634313985755 0.02551559420701288 -0.201601701106652 -0.6473016896567967 0.4201091040001772 0.6299170831802248 -0.10201482860426436 -0.02624245186379337 0.560803694666218 0.004621786791437321 0.1100829498050695 -0.4634595347333419 -0.5875055145242012 -0.6719083665407004 0.12331195328563638 -0.08770744680687859 -0.05015288942240126 0.5625667891471515 0.7781050439417061 -0.7949703427280186 -0.8479834759149074 -0.6443600395998088 -0.5729630483230626 -0.41495050565220404 0.6545437802083256 0.43223884895809594 0.14182995160903844 -0.78884360628855 -0.20182256636290963 0.6664644601838965 -0.11123497973691499 -0.26840042396893415 -0.9840469992492522 -0.18831946389337162 0.04303950284922076 0.6377542221755303 0.7154389515726312 -0.0015076223014820478 0.3258727751172923 -0.6118288822388076 0.8715903984588311 0.28055518739093466 -0.38374674750780846 -0.26670047037354405 0.5191570468010478 0.3649407581381998 -0.685733572798402 0.10213155927763684 -0.74069183403458 0.5711633655621873 -0.9576271770133646 +90 71 0.14331914980925275 -0.30740104811842217 -0.9811110962841383 -0.667814973021351 0.5342288333000746 -0.9140861403535705 0.23213286893000729 -0.08443999135059488 -0.6257964697457863 0.11121664319500502 0.6300923497175495 0.19890581676697772 -0.5463226046274527 0.5606647999804422 -0.8941458943255405 0.9995718124406474 0.31976391853659436 0.5136759411991276 -0.5740944995610251 0.00260962064937198 -0.29935080397717795 0.5255374490150195 0.8287313175226036 -0.8861211173390946 -0.10424851004946523 0.6595465531433742 -0.7745557436425303 0.36130194673474914 0.7265567895848417 0.7236426135452827 0.7983768412024528 -0.152516487829516 0.7010087201500992 0.6578488183339963 0.7277195136280938 0.3367830905128213 0.8891617326365633 0.34612633572338036 0.36043951677444097 0.12359492877028155 -0.24422324036623233 -0.58886838511367 -0.05272917128898125 -0.24271241559676215 0.4590764006817567 0.3629341794481449 -0.03590371336571341 0.45214958538249017 -0.7973841343585049 -0.4167445253113007 0.34040498354325455 0.32573172523368 -0.6885250723293854 0.9927722756734607 0.29548031679855224 0.8498993188761521 0.597455915881058 -0.5160517838866225 -0.7054799767373441 0.18757475697425785 0.9462658936757289 -0.7673026955561806 -0.3177186906925529 0.33656943471505185 -0.13507863851913648 0.5429814840979121 0.6225804042779586 0.7415813218139449 -0.3407440747604049 -0.2874325022642594 0.6212067740445877 0.08954940798650401 -0.2768863461507216 0.6487638913387663 -0.567644396771142 0.6830307083463445 0.10101886767292112 0.40344888478355223 0.4958276813210558 0.7002852956255863 0.02949111470232957 0.17162596736839486 -0.6444202490318092 -0.16447753677231325 0.5371190454585064 0.47069009901214054 0.08069586215422553 -0.6027405044651399 -0.8706762248093634 0.819665494263552 0.029686818757942213 0.4754350182639211 -0.2985604103162218 0.5199378490791695 -0.8501928810168164 -0.31870473262081167 +90 89 0.47604906163820315 -0.20623876687617893 -0.5116216011252364 0.9027126101739806 -0.27247340524043717 0.6993125108510589 -0.5277973931976687 0.293323857343051 -0.9870749615721903 0.495258530438327 0.02500962607830748 -0.372897012612055 0.7449038013119869 -0.9299825127234504 0.596374444136385 0.6051147577671168 -0.7189338699261896 -0.33974371711016915 -0.7270688283757609 0.5649593428156978 -0.007272800779006383 -0.0510541860347169 0.8774387814372291 0.68512224779901 0.2723708012073247 -0.9517084517172854 0.21691263966674912 -0.9705488299547242 -0.5250354707766867 -0.4727035237978783 -0.4249971990893826 -0.2712922095798773 0.514401334759276 -0.11947658536544736 0.6455247716736412 -0.540789467396817 0.647307941786921 -0.759343121045307 0.7788341634341336 0.21086227482970532 0.7133113017988875 0.7885764521013927 0.9386312491256208 -0.22328583346542774 0.8687987730922073 -0.7979552321518399 -0.3404294205311873 0.6142554932024065 0.8382661951078021 -0.22338859073623163 0.19611500212763744 0.39153724741739504 -0.33676751138944994 0.9486882546606543 -0.7497068427587315 0.8857923028345671 0.6211159600470921 -0.43483586442317534 -0.1954751313504992 0.2471756740446227 0.1586431476507406 -0.382102287071751 0.9158892407514632 -0.7269958866422241 0.08949873575554212 -0.40730738464786787 -0.6735372433149867 0.2152493451714621 0.5510260794590021 0.5665374584907552 0.8480173460629137 -0.777633532883911 0.08287659792714597 -0.9175668896849496 -0.024134404592484726 0.10317719790649393 0.8200790461107266 -0.6401452173951558 -0.12885678311756354 0.18575052320999363 0.5983840516381578 0.9875081685137244 -0.6922777872117887 0.44660742522113983 0.43725920475290536 -0.08118499509314692 -0.4877914194688009 0.5165981710500402 -0.22679055403281412 -0.4764616799325494 0.28831126609679614 -0.6225550060874152 0.602051509603668 -0.7353813781214504 -0.812511784221964 0.1995357566967122 +90 90 3.3814442246253567 3.7822203803183756 4.488891346103604 4.295701352777747 5.295123784965903 5.380619521022347 3.36288719725072 4.516561099634381 5.247388580205666 3.3860621148761814 3.8812099296291294 4.659300017674014 4.811753677309545 6.647161822180832 4.799907990148283 3.6361749024534555 3.544196314311589 4.709924336091192 5.153493089870862 3.640145272187894 4.6950242466208465 4.3385385419072255 5.115029197112456 5.4909293331012625 2.927196465144025 4.901827400952172 5.891854586119273 5.419686845823348 4.88248442140251 6.257769863382634 4.089122798147599 4.245370880864731 4.513888263987551 4.578484768976982 5.022709799280027 4.541836423898293 5.044625733246542 3.1909796034844917 3.4155977546294496 4.0742853116486994 5.800999803443386 4.031715422939209 4.629707016735719 3.574464969733856 4.8306879928256405 5.076832719629563 3.688502005676818 3.216088213545575 5.553652162991541 4.057260065546477 4.685807261549958 4.186705650790528 4.7342884993546495 6.292174050451541 4.131962390207562 4.245580074953432 5.077423005603501 4.924987448313956 4.89413590726957 3.113138487711062 2.9366077033787583 3.5072036037029712 5.366399799422281 4.437286501466116 3.4227759207308073 5.987828184925008 4.41898287995758 4.677720880330563 4.971363579688604 4.801123007038261 4.551638293619433 3.3673383347923145 3.681577205763197 5.397963460163108 3.384706133975274 4.701734681952866 5.017485365455045 5.27625219857025 4.5486527269452175 4.026019938629057 5.376661526408438 6.730822360999147 3.624758502166325 3.511272708787452 3.6588815701630146 4.027593690808509 3.7731862486247056 4.72748677558786 3.5383957926361065 4.291153283920181 2.4867611372581493 4.913331518068642 4.014927659021079 5.906319801808841 5.320084237176987 4.941652464556471 +90 91 0.6539904208591067 0.5081728419463747 -0.6549471591494658 0.12727444665699772 -0.7999087216541774 -0.09175002166890511 -0.4185647147792244 0.8236957063683776 0.18715797253931798 0.6239576883586833 -0.8622870677043208 0.3438423561430415 0.29079779721731813 -0.9737120164305177 -0.6825677001667574 0.054858325686470755 0.19751897159023768 0.5346959482550557 -0.8717382529993678 0.37050780120880256 -0.6979174493594029 -0.2620603376525821 -0.42409708933665646 0.6766979471771102 0.46446461737770406 0.2648656666998146 0.9463044273991721 0.7371304482739589 -0.9156875595026672 -0.7796723391453382 0.34215080718878443 0.8425346343857167 0.8257735274380682 -0.9417191693565077 -0.7968630998817603 0.11514418448961639 0.7631230700316263 0.2858726628113373 -0.3274878684768847 0.22579695496079588 0.8244111563298424 0.03505726045487667 -0.6722047706392764 -0.21866255519894295 -0.5726663697952243 -0.45671839935076686 0.5501083190894509 -0.14508684124130533 -0.25841824276617986 0.7862656303461415 0.6678137437375402 0.5282148388282359 -0.050570415072131114 -0.9248977576971444 0.5204388390194581 -0.37400702309157263 -0.8375647642809803 0.493542898350245 0.9580405544532109 -0.1471328754579011 -0.5334088588861465 -0.29834678073730414 0.5286582286858532 -0.3432547992946364 0.9076577019901215 0.8992596842952023 0.32386033244562507 -0.8166260286940721 -0.4163115349672173 0.14914587828125803 -0.4608170800299334 -0.5062850611639371 -0.3260085657958247 0.47199221529620505 0.0024447423822862024 0.3764647266700549 -0.9226093235221957 -0.16243241773037154 -0.3136243874908755 -0.2668499046829875 -0.8325538564691015 -0.9384863489439694 0.5857444320508058 -0.5527727106479181 -0.6247717984990171 -0.1703426758989388 0.030940395932657072 0.5098979340208674 0.35694527546178056 0.6071563861931384 0.21944403107696941 -0.7300262131209949 -0.15415212493341457 -0.8450044979474294 -0.0627856494711947 0.3801383909798588 +90 109 0.44327635734463944 0.8614195295941356 0.45756442002158115 0.021862584245536665 -0.47200006860419896 -0.8069849812328047 0.397887657916963 -0.7098074519613049 -0.7827778727475572 -0.07017076322218152 0.30553026367657643 0.8781371863433189 0.511419512943573 -0.9223081036941805 0.8164116532756172 -0.18056056578711344 -0.007795639118263198 -0.20731806746470327 0.5938689959308177 0.1248709649455666 0.18144092465620565 0.6240243624390929 -0.1414561463550983 -0.05039618917509614 0.7364695086717805 -0.7551380336475984 -0.18065650502908115 0.8809308559875471 0.5281574886635394 0.6476474580160823 0.5929555678251337 -0.05320966599743704 0.24039623848551783 0.4769486987550522 -0.009695825138485992 0.9057953584868568 0.24063644968647435 0.22392291904196782 0.656206119195273 -0.8721603309961088 -0.9979443889892778 -0.25238020087376767 0.1863210358185774 0.9349549350384203 0.43413493638341416 0.7439950607493797 0.24315183819625208 0.9220541119903598 -0.9728867228951199 0.709208005134828 0.22191426702453776 0.473547474983254 -0.2558311013503556 0.47799743002941564 -0.7388327038402644 -0.6203792264209793 -0.7332374692503314 -0.25273406822056277 -0.5026879340022865 0.03584186668216138 -0.03699035732836764 0.26917002888809094 -0.47344675530031854 -0.10237837240609937 -0.8370273698929087 0.9152936108320149 0.7600850404858388 -0.63464103518474 -0.6022026839373735 0.2878590605921132 0.9237424959177567 0.40412062352675937 -0.08742085226805973 0.2074553647036128 -0.7188803116899227 0.8502999299574767 0.5327742467463774 0.8532357486774296 0.6032045377451409 -0.9192448931498645 0.4277354316096791 0.8129956296023262 0.19789208461144447 -0.6062585047222271 0.3136484265974613 -0.6523930652004426 -0.25150625361200407 -0.20406363695687668 -0.10320670612848204 -0.4591176395205028 -0.11739031893822238 0.029648742899658576 -0.27606401848661255 -0.5494566754083903 -0.24480781393408835 0.7321397455653766 +90 110 -0.26684729426073517 0.8366780228595259 -0.5141802910533726 0.2624332216120442 -0.23036624775491998 -0.5568881597816813 0.1865930103801301 0.3237934928161619 0.6644252102977617 -0.6082847880283242 -0.28864365182267404 0.06727500173636769 -0.47108302395916346 -0.8121002308427507 -0.062244791984843895 0.31105922979865475 -0.29752067885112865 -0.35334685960442136 0.7636300931419076 0.5638672974707157 -0.7500134357575876 -0.9835624733718709 0.3212635378394437 0.8960155886115919 0.24207046783959352 -0.08181199463435651 -0.6488798455084996 0.6134887783812843 0.5036330511791458 -0.40510951905233283 0.14290224111550565 -0.7572341307866473 -0.18566000612457167 -0.015144534941246901 0.7777470321166253 0.6294336554230366 -0.5665801340130283 -0.36875095743674224 0.5657309674986875 -0.4924938473839078 0.25309662591359294 -0.27001124911812946 -0.26484876948565006 -0.7190357017973197 -0.6320157785326717 -0.36056199300113656 -0.8383211969747246 0.7115056867151719 0.34790587355939673 0.39174761747189657 0.5303521219871798 0.25298062108265196 0.6898042641174198 0.45060674815449264 -0.9898940073739382 0.22278931702459936 -0.4184757050897512 -0.7397529010123423 -0.41752702920094453 0.7776782915191107 0.026027325386400513 -0.04182667589461886 0.3818281785730797 0.7672866836764778 -0.06294011918060916 0.691189617625037 0.1851519900226164 0.19704786449898504 0.5460417505960764 0.9578235087172844 -0.08868910784189143 0.376725711242047 -0.3808243904451283 0.7843537575398638 0.5923599652364158 -0.5666563079838736 0.6890253457360052 -0.3344672025480031 0.27493750455643107 -0.8519666119570135 -0.847035415590891 0.9579588862194954 -0.36501360457187015 0.2719885169726013 -0.2085159972594588 -0.6274448468749678 0.8377949772011228 0.05047229550124066 0.43247615130868233 -0.6541784141449178 0.12980704844656388 0.168587269745325 -0.9517268177362483 -0.29675800093661087 -0.6561046530776089 0.7904797890960478 +90 111 -0.46214738470731054 0.5877301207533627 0.47631190630064757 -0.8190773349898315 -0.9233059313483827 0.3806113505350994 -0.3251321624828232 0.7256566282199426 -0.16553870770859946 0.6596602846795414 0.4004406994009895 0.564661504007951 -0.3647477256697065 -0.29629738934893113 -0.041345711889527736 0.5666634229287402 -0.3884267815294318 -0.6139252978566043 0.2362156426289428 -0.4264492509960318 0.5163273276998983 0.4488591095129335 0.7244219246106689 -0.6332258042030219 0.09028044473821217 0.29415569523039875 0.7086088224544862 0.5752733737616516 0.04022535515109982 0.7476474367849517 -0.03731655953846813 0.20111782108004905 0.9427325553956913 -0.4110682316017129 0.07369757109325081 -0.17309060502927465 -0.6400868379016638 -0.1451143878683312 -0.36708775287125994 -0.054153408379886026 0.8996704659560202 0.8705717517647307 -0.6142844670145091 0.33404886811155166 -0.7943232270506977 0.36291755540261206 -0.8214389310711747 -0.0405725697515662 0.8112281951010683 0.28061234670504764 0.984972611261079 -0.6849135425662645 0.9589028215066273 0.43337901087481456 -0.6658985736244183 0.16474451334669138 -0.21204095947352242 -0.8435254310633182 0.04484484674097233 -0.09822519768741533 -0.1881759715393041 -0.8275235043145126 -0.6717440627545725 -0.14997534219950714 0.0586456295863389 -0.5845638865624696 -0.47898837368044633 0.3029784476770976 -0.4061313809991296 0.7708233024432964 0.6861632212733346 0.16763133577400335 -0.9521747573209924 -0.6512249564262844 0.20565942191365183 -0.834460987893511 -0.15386460057330953 -0.8337707530939789 0.9134591643909697 -0.44721382733624004 -0.7509853461297089 -0.7703008870231918 -0.6395941557374543 0.3997682382500569 0.5101021370539713 -0.15452151604613462 -0.9225523433992924 -0.8881870056660557 -0.22615829474631988 0.29113715221412795 -0.9940246869967417 -0.5331574399525485 0.795370437719636 0.6144053525989699 0.42375836087757124 0.567975143447327 +91 70 0.6794958145026411 0.7111368910990705 -0.8759903931153592 -0.03511325803560128 -0.3074095997181683 -0.03331801814768798 0.281630780613376 -0.3488592738513454 -0.3643090542151233 -0.018892074601364772 0.1928951235119336 -0.02111365570992496 0.6839936034019702 -0.29540044806224564 0.14801483148271344 -0.789483651081913 0.5008213015996257 -0.31764477637044397 0.633673067664908 -0.46044298908345116 0.30357177442160266 -0.1011169468120845 0.5975528085583555 0.7159275470860897 -0.06996330265232276 0.8414211332030168 0.008681167160999426 0.8508543584862405 -0.04828453936076249 0.848771326536643 0.0034487525462958413 -0.5647939739494201 -0.692561270076256 -0.26136435195416086 0.06911484421506442 -0.178017346005225 0.09407074995092368 0.45965220547911145 -0.984079803617603 0.29080726528919065 -0.15088056145671547 -0.7773824725035781 0.06321948953543322 0.1592799607488924 0.18203375464963 -0.8309998303193291 -0.33797669468871505 -0.8493439845460948 -0.23054588209128934 -0.048880326270444474 -0.16908834580639542 -0.40428620184513187 -0.678308869743852 0.9739522436419445 0.15671707749812458 0.12021835061770347 0.7119465641021714 -0.6642995728444765 -0.8808377858993652 0.7565788947687986 -0.16727651110980735 -0.30544156020960056 -0.46574416220286174 0.5813654105840007 0.7334627100829085 -0.19888930087828682 0.1541621519555214 -0.26388298882137273 0.275191555435218 -0.38875577481024903 0.9139842959251767 -0.9339206263410209 0.9033888599891449 0.9560729479449226 -0.8160376684197082 0.3457309962674153 -0.298558210490548 0.8024032763207061 0.7430077002142532 -0.709579987925461 0.12536836843678478 0.2136850186734831 0.28305685602848585 0.04074691976950673 -0.5225995191118702 -0.6901034560879242 0.49513603136173345 -0.09422381934641377 0.5830819004645407 -0.9258386354623545 0.19022074260755972 0.30183403292606337 -0.13873980360789684 0.5797999496372455 -0.8638352164283489 0.9211319825452677 +91 71 0.004748168926361984 -0.7025937931566475 0.027685832488858253 -0.7136426809834988 -0.2187014175528077 -0.5500427885143315 -0.9859287515875685 0.004363394367035589 0.7453859852549987 0.5518776725012466 0.40193876331965495 -0.039655388730880814 -0.22421870225198437 0.9993007075669802 0.31340709411839196 0.08584326828042355 0.686675345377928 0.1426424980769716 -0.4158577075691474 0.08092534740948998 0.6578474124642617 0.34813229286423075 -0.3540583774141386 0.3777604165748687 -0.2859958410710166 0.6435896527930909 0.47271303631072503 0.9113692978755077 0.3116781070766299 0.5524320709072972 0.773543549634583 0.6702148989370367 -0.6672678702319499 0.7004009013588486 0.4719291401095651 0.8428397006862873 0.38211989808196134 0.8327213548007522 0.8053619302531976 -0.6201688005985113 -0.2860662699366423 0.8150879196777736 0.038502118066079394 -0.0306427118075987 0.0028930563000340026 -0.2592952204860737 0.4527296466240287 -0.21802371393656372 0.1428293704982797 0.6609046989950507 -0.399750976074837 0.5282342904480855 -0.6317428948850208 -0.7417647670703311 -0.32444535268340147 0.2566916952953513 -0.6186417767769963 -0.5243023377624523 -0.8477747257775876 0.4198375715097662 -0.15943608106528484 0.5891462226907254 0.7475258051490383 0.49756703040879735 -0.7464321774454197 0.5792430689287316 0.07919987939261608 0.6746074670024256 -0.8206449084486296 -0.47812914099060855 0.5655953383661836 -0.5512932335488159 -0.6952348272394604 -0.7777670160100894 -0.5667551692383441 -0.6354318287650129 -0.807583707487068 0.5843778248009506 -0.1916562058140412 0.16050238332284716 -0.2666439952529347 0.8616523796384035 -0.8617621236150854 -0.8615398254091715 -0.024676830991027243 -0.47872192064616703 -0.9507535313084048 0.8869874406717908 -0.5221385562834384 -0.49419051696416205 -0.4290562632516397 -0.15256480283221685 0.9005131356380842 0.6364962114078905 -0.17712581053856846 0.10964553897183205 +91 72 0.19005856242244934 0.0626411149730648 0.33656009045990376 0.8904007703171988 0.13266847569946294 -0.7176130316326086 0.20711310110560532 0.11956699020917982 -0.706627823798301 0.9442551657077634 0.29446886052297905 -0.41094552571562226 -0.6054448861182526 -0.7431602897194185 0.19994639659413704 -0.9900970491108976 -0.582567068259094 0.4970538942414209 -0.047193141745705436 0.6159730042270266 0.6921782941829082 0.043186277187356126 0.651931396355113 0.9127460166520136 -0.6061025927781514 0.28828747150409373 -0.3233912829362675 -0.5107846470384012 0.8428361066676266 0.25155091237508476 -0.17875458337883998 0.6586840241500329 -0.08310049575038181 0.9466673455652994 0.538239917530482 -0.3943807715225127 0.11733565746030994 0.9090636219381427 -0.21373212019293697 -0.9635803059293997 -0.8914151647095034 0.9607033811195103 0.013041555663079185 0.977785319657922 -0.5708055992203618 0.8487447828424559 -0.8780376167541428 -0.09970955251649838 -0.5681605076319685 -0.24542594936104134 0.43265763125053036 0.9458422728846783 -0.31384261112708867 0.4885171839270743 -0.51325405171189 0.8504195870954832 0.8656229598115035 -0.4559187298499876 -0.5353870433175538 0.4377607743611043 -0.8833404428736837 0.7456226222868081 -0.70616248385059 -0.027926765984685353 0.4147527620586715 -0.05916210927126375 -0.8772562836725786 0.8805800311176659 0.03208359004254735 -0.3435120209433833 -0.4983233150895743 -0.862787663873795 0.2261460390647818 0.6317299737348574 0.623707846734034 -0.5420901481749112 -0.8484882366837814 0.2329549299461502 0.1923708107727029 0.8582050914791095 -0.03095719637874872 -0.16157765724871687 0.4127620368579099 0.22705460578803227 -0.39413941952697895 0.37874860400937815 0.4916220845291135 0.2477096240981056 -0.3602554197514436 0.8605296528886681 -0.7850486582887244 0.9761450401076386 -0.1746737720339513 -0.3854754621486314 0.04486640815911702 -0.8888447627303633 +91 90 0.6539904208591067 0.5081728419463747 -0.6549471591494658 0.12727444665699772 -0.7999087216541774 -0.09175002166890511 -0.4185647147792244 0.8236957063683776 0.18715797253931798 0.6239576883586833 -0.8622870677043208 0.3438423561430415 0.29079779721731813 -0.9737120164305177 -0.6825677001667574 0.054858325686470755 0.19751897159023768 0.5346959482550557 -0.8717382529993678 0.37050780120880256 -0.6979174493594029 -0.2620603376525821 -0.42409708933665646 0.6766979471771102 0.46446461737770406 0.2648656666998146 0.9463044273991721 0.7371304482739589 -0.9156875595026672 -0.7796723391453382 0.34215080718878443 0.8425346343857167 0.8257735274380682 -0.9417191693565077 -0.7968630998817603 0.11514418448961639 0.7631230700316263 0.2858726628113373 -0.3274878684768847 0.22579695496079588 0.8244111563298424 0.03505726045487667 -0.6722047706392764 -0.21866255519894295 -0.5726663697952243 -0.45671839935076686 0.5501083190894509 -0.14508684124130533 -0.25841824276617986 0.7862656303461415 0.6678137437375402 0.5282148388282359 -0.050570415072131114 -0.9248977576971444 0.5204388390194581 -0.37400702309157263 -0.8375647642809803 0.493542898350245 0.9580405544532109 -0.1471328754579011 -0.5334088588861465 -0.29834678073730414 0.5286582286858532 -0.3432547992946364 0.9076577019901215 0.8992596842952023 0.32386033244562507 -0.8166260286940721 -0.4163115349672173 0.14914587828125803 -0.4608170800299334 -0.5062850611639371 -0.3260085657958247 0.47199221529620505 0.0024447423822862024 0.3764647266700549 -0.9226093235221957 -0.16243241773037154 -0.3136243874908755 -0.2668499046829875 -0.8325538564691015 -0.9384863489439694 0.5857444320508058 -0.5527727106479181 -0.6247717984990171 -0.1703426758989388 0.030940395932657072 0.5098979340208674 0.35694527546178056 0.6071563861931384 0.21944403107696941 -0.7300262131209949 -0.15415212493341457 -0.8450044979474294 -0.0627856494711947 0.3801383909798588 +91 91 3.4081655192432807 4.984006026250499 5.149026338047556 4.682184166422831 3.5356941039897176 4.596150468893594 3.683205316181507 3.288552711534697 4.2780459480148645 4.066262223342902 4.872605140186846 2.9751936514060224 4.184395320875538 6.28843287702848 4.472053197495884 5.148357618426581 5.2135072317375215 2.622211893068752 4.33967272165345 4.248664203182924 4.778854097304243 3.067250438678313 5.87614209577485 5.367865762216828 3.7514147790680044 4.756057297296518 4.821523991286586 5.893982147191154 4.54463726487383 5.31217433939838 4.227151742083704 5.557384505723667 4.705167920649038 5.8833880740117905 3.723465499945952 3.0116171962399507 3.3056461799110073 5.969070023024532 5.35204043017645 4.492704681726986 4.640089243591869 4.676580278507236 2.3697738667296124 3.863171787984455 3.9148881137108047 4.0577933417701315 3.9806453854944963 4.578244731978373 2.832495514771564 3.404189562781326 4.998874727582425 4.496508917902591 4.0788275303939825 5.3728793300948645 3.222255121026073 4.52147149618389 3.7569208828528406 4.298119929882352 6.0635685099411685 3.5481912045645423 3.380556253297457 3.4781677842664007 4.999478574537558 2.9666167486190806 5.79327373528694 4.10216346220062 5.41883871606355 6.453195448191936 3.868330076857226 4.311469511230247 4.695769653031667 5.1050293303947445 4.995036713961493 5.38324387112139 5.229494631196602 4.175548477493462 5.84894914317819 4.359893109418856 3.591438100844489 4.831761577649125 4.3096022415746 3.781945207183089 5.228283707744733 4.496044323045125 3.5475279699584634 4.303808585473294 5.0305682252122095 3.317416757088303 4.736676797512746 5.846244711145429 2.3980258223344793 5.381089413594356 3.7343102804996393 4.415297536026101 3.3830506708201042 5.227779123282161 +91 92 0.5484922526648084 0.1265510332863895 0.6257051743768551 0.9336245558419218 -0.014591346935100002 0.7311348781090912 0.18502080930081943 0.7419690624619695 0.5358105253617718 -0.0030393519684641657 -0.7302230729988708 0.7009727424946708 0.5043588331520681 -0.7019144312321501 -0.9162983529618989 -0.4671562480249718 0.9261378991936178 -0.19139888156898044 0.5661355884153856 -0.0300871930421287 0.0707711806480904 -0.24030364803564552 0.5767880912584797 -0.9727780899303158 0.12270307237163092 -0.9868428656601236 0.7110988148858557 -0.6598200482824694 -0.4386755836839098 -0.40974067836101113 0.764544156430023 0.8206644717736327 -0.018271902808762563 0.27312906023444006 0.10762855406745953 0.44865779698144026 -0.08072038885347266 0.8270548791460333 -0.8926892088057696 -0.4393129182210651 0.9927645564592005 0.9859904335627097 0.4340298097121238 0.3557993949195881 0.8830377143660526 -0.01911035349559076 0.37950573063306936 -0.39900390997612245 0.5931099037118783 0.6444956808156046 0.2583305203752617 0.1876397457935497 0.3635854831680416 -0.15280457487319632 -0.36804988871626243 0.37629805008496864 0.30307163302195583 -0.10009756916138035 -0.6828549604288887 0.47372603051331064 0.4179050806052258 0.2577727039483715 0.37872139038299313 0.7598235849969917 -0.8570570504272652 -0.5148455738306716 0.7084275924675609 0.8152575836627161 -0.4327219314787103 0.8437869759325092 -0.05675634399794016 0.3441045007683541 -0.16908173101447543 0.520700492165175 -0.8231618220990351 0.9313536201986767 0.9915886030379559 0.7859755464770015 -0.02791453046315273 -0.4828182875013016 -0.4205134635147949 -0.05933755030330734 -0.9598978341145228 -0.35651439811100993 0.22226329894868946 0.3821482274545067 0.49002000103914756 0.0009001728010535892 0.456963479399227 0.6152403257288703 0.07836384677595998 0.784804317883318 -0.6135630642742373 0.8491590389662032 0.2775700538900805 -0.7565882109158768 +91 110 -0.7057984596064772 -0.3824673944872523 0.9609643542328143 0.8199716934951942 -0.08445827205476752 -0.5258309092736373 -0.6772370998756447 -0.0820368158553797 -0.46682768639049876 0.40390756474023126 0.40380139231265955 -0.009945859138096536 -0.8307777769243294 0.09014833200774697 0.9298125932882766 0.7896343070447929 -0.3374820673347376 0.1831877341952075 -0.2511141662535672 0.9603932769098575 0.7387132627119937 0.6588510712074833 0.9431631304412957 -0.6904385678791918 -0.4212151510171642 -0.2562485786877786 -0.772511046359021 -0.7431483806433088 -0.5969369631451875 -0.48076831908493545 0.09506433921082214 -0.34718262463196714 -0.5393961926344524 -0.7447479597284095 -0.24393901539045038 0.02254088930020748 -0.6391978783695431 0.8469311923333078 -0.7906690850251548 0.2787982566594833 0.6412518678748511 0.11675159347891317 0.0957757633540377 0.5109101321443967 -0.12121199749717881 0.004021629240940072 0.3649250673098705 0.9459766100780846 0.7073698917437139 0.39700795937472577 0.5939865021968045 0.7090503235054177 0.7490091077106409 0.8102880239074708 0.13131681609117862 -0.09307393145137643 -0.13168374689039108 0.9677847635686077 -0.47887702571260604 -0.4730517624566728 -0.46242292161013787 0.0015893475358281783 -0.9966867663313812 0.061267106286277295 0.618251006782147 0.5920028446399681 -0.6016419552723202 -0.7764440617324602 0.012994302270259439 -0.6531704200233366 0.6583030163071086 -0.1916105349284325 -0.3839155707564499 0.6805281572474782 -0.26670754326210977 -0.7275020876428564 0.45590362790910977 0.3904890560712584 0.6708253082778535 -0.42196286554647133 -0.7298745847185288 0.7299320485172835 0.24633728858725434 -0.7454852954514937 -0.25944952848615466 0.6043614161862072 0.8655678003336467 0.7073476407633228 -0.9780231982230867 -0.6975342752788485 -0.10997879545710587 -0.9826830703164866 -0.19859985022059878 -0.22672511145623853 -0.28931819674109316 0.8080640020205352 +91 111 0.1051626226896516 0.7927756751141339 0.6266164612280725 0.16876170755593844 0.2988612097587171 0.5816653843569393 -0.147401377992469 0.1376494726267068 0.33230093055974175 0.8599998179823711 0.629629722951708 -0.43882382218134586 0.15718566336228212 0.9032903180416694 -0.3614173203479072 0.9553412094699754 -0.9779756214831758 -0.29752140207912303 0.1331984520267806 0.6803524757913257 -0.7530768206440404 0.40160861293728756 -0.9724461056863674 -0.41058278652209435 0.9647338706584885 0.14938788339062148 0.237631233576012 0.5559126380540911 -0.5134559181847729 -0.4714431701541164 0.958942214950816 -0.6063178393566893 -0.7223477453079703 0.6613999620548294 -0.5903848999811454 -0.06311723469736985 0.4893659494499971 -0.943800981761203 -0.6842127620869602 -0.4743876295118503 -0.5173511421171328 -0.2048862276131087 -0.44685482171317936 0.11254842992273839 0.3673373418566559 0.18334621981257349 0.8412173754752028 -0.822509797432206 -0.061915440925019105 -0.04266699833217458 0.8078040686360948 -0.19817401689074665 -0.4878184427073935 -0.30646066504174274 0.35943151075099644 -0.9786816587909009 -0.005447188945833847 -0.5888184404439452 0.6370387702664757 -0.46113694760044655 0.09611398150341244 -0.5909680885008661 0.017308114366726635 0.14273988734439103 0.27987485463268236 0.7008896909600995 0.8144816501032204 -0.89403643541659 0.12492535487877077 0.12347526547025112 0.6219022015833446 -0.8178542872767944 0.6821039209694095 -0.8837771037613167 -0.5317843763175518 -0.29185925863498197 0.010351972475367788 -0.9062499128295769 -0.47539452563171736 0.6549851611409883 0.805337825826046 -0.056697969344623456 -0.7135877904809464 -0.5633800510972842 0.2262481488451451 -0.5528200853814633 -0.816160598894031 -0.23466402181275559 0.7445973642241381 -0.8757717140171319 -0.1252619167299729 0.12879050827121263 -0.9690171420222509 0.8004634430322066 0.15437940247438808 -0.37130636166175623 +91 112 0.16394035379639682 -0.77844089698757 0.26128080585394575 -0.42267730591869523 0.793267887057205 -0.7885211525426219 0.5004617400759959 0.4818528461799061 0.2786826190660461 0.5278089028400641 -0.8048039516159324 -0.18560183619555448 0.47319192206826255 -0.7553939454126495 -0.8565452453316751 0.23432951547104963 0.8366884403391448 0.1469618847302394 -0.833500222172912 -0.9615552291688134 0.3317788356463707 -0.7705625712290123 0.7935230907112618 -0.18176167499325713 0.27151417003006806 -0.5520868447765854 0.44103946752381695 -0.3684102132944611 -0.25890222962283116 0.6085808489685571 0.46465075616120943 0.5774681104157142 0.5263773743051388 0.501145027049757 0.004038112941057381 0.4829100692043611 0.41650478922830536 -0.5194119028690538 0.6362102394874198 0.6266603205814196 -0.21780448528556628 -0.49440245288855245 0.22366385185305004 0.7184395912943782 -0.7991875537283697 -0.9864894976242686 -0.04638085241812062 -0.2707837049790842 -0.2215874418194883 -0.027395889443300625 0.9127269549518267 0.17198134832244416 0.49160425304292077 0.6785067656729464 -0.13306779539616054 0.7456120634325809 -0.13485584159872976 -0.2692799160566117 -0.919721168878255 -0.32479944784056936 0.3168332229722941 0.5371708607678234 -0.481082021332252 -0.09747969334794582 0.46119539523243835 -0.4009191388449016 -0.9032402462001548 -0.7128450413457783 -0.8359600644330825 0.36145338773912594 -0.0011934933861492691 -0.43257104535034907 0.6366127734763833 -0.08200644089193787 -0.7722044222432451 0.15523013477867686 0.9688453031631767 -0.01749259878495657 -0.8730281889851743 0.7607532543088655 0.9491105851071353 0.5220853415360176 -0.4545336444593677 0.7747590725367131 -0.3623245419315755 -0.3357743263947548 0.43839192206952116 -0.3989497601886385 0.28512378655190407 0.04540823375899117 0.2796013408142304 -0.5969551761858758 0.30478955066552227 -0.08538459550168409 0.709389934720609 -0.022945559020289163 +92 71 0.4731509440749089 0.5948795471772916 -0.4039958781779214 0.8038703765804209 0.7062362886971394 0.6055302920374621 -0.6248552930098787 0.41810593268034224 -0.9574438771820892 -0.7501001708614559 -0.45820047400939923 0.08820452011143631 0.2621968819929905 0.9787684652555562 0.8205189682306719 -0.3133656129194191 -0.3362109107026363 0.8144765032223253 -0.572040308656474 -0.3367185907830006 -0.2796732591658435 0.5379730359254904 -0.29675383020978496 -0.49171816766569654 0.3218672313294788 0.0362472585128184 -0.9342516517988702 0.888980507599124 -0.623063565338392 0.880254044159853 -0.4951162384440897 -0.7950269131486087 -0.45837657408659216 -0.4911390259298354 0.8416113585202232 0.7423840602800997 -0.3199359578410117 -0.4168621584735994 0.9877091309775663 0.89842247990034 -0.009159807376311502 -0.18096105342001056 -0.9224834635183949 -0.992392355298948 -0.5931121152882466 -0.20711862828408178 -0.09919066523797615 -0.25975228472142575 0.7930616406422455 0.3880788598498106 0.04719418542707765 0.24354018313604975 0.954407176326129 -0.8102728864647502 -0.9482120344934029 -0.4608926500549657 -0.07112265509733784 -0.84903399200614 0.5909885157955426 -0.17632735860040394 0.0699835815976313 0.15723989279297124 0.8611128162706094 -0.8576259446127019 -0.9817714323134585 0.26348097269066595 0.2646654373929933 -0.2602436370444481 0.3529614877784215 0.9020852656056719 0.6453381974504229 0.08998006093566424 0.6529898525213484 0.8316148361721443 -0.6458838017579334 0.28473634857398 0.16235032562017127 -0.33782883725114354 0.16474931746058386 0.15191369254468556 -0.5770869447220695 0.9156868753432685 0.3909709036174063 -0.362923902556624 0.14150982730288342 -0.21510239386192853 0.8499494962192438 -0.6516726457047668 -0.16662704685422258 0.643783879618935 0.1720213352833999 0.11183511103168842 -0.6340098549720261 -0.24154828186102106 -0.583524660370391 -0.622954858318115 +92 72 -0.7544612628938769 0.6600941748495512 0.4981661510914497 0.702812153158531 -0.10017002360911298 -0.29683660901450426 -0.06149377991871141 0.5086048120849831 0.42377360047971435 0.29241413442561615 -0.022841520191615672 -0.17387067825909974 0.5092906157900565 -0.7346586505709365 0.27315394226256684 -0.6389623961745674 -0.07960185299763478 0.9962000492730796 -0.37755563977032836 -0.8170145178437502 0.04892267565711683 0.37834973734308885 0.4403699480183081 -0.17388551897470883 0.29086439674366993 -0.8146451165833386 0.7845712430956415 0.7681721157357926 0.7975399998083113 0.6581751485211764 0.5706003040939753 -0.8121665666008617 -0.5503426445162285 0.10637394689800139 -0.9550999973387511 -0.6306048137895124 0.11798542439531401 0.8923538295297515 -0.007764746333916328 0.9033290256451076 -0.24678969492413616 -0.5676187051809873 -0.6492820808792157 0.2435720523576712 -0.9968833320063437 0.33747365693886944 -0.1252981530583086 0.6839033357609943 0.30570336034251144 0.8650075550304412 0.3403394509361872 0.08795587403015115 -0.1702554683311608 0.04834810362250952 0.5468196798792384 0.28606755123612726 -0.5562775772536221 -0.9061711420842107 -0.21796290275079322 0.27211818786776165 0.625025709783958 0.441939762043855 0.7588663581930453 0.3094888714342583 0.5133349728205501 -0.4504536261161245 -0.3946192523482348 -0.13632679729889663 0.2811201588550307 0.8576762916587353 -0.03209855025545827 0.4907476246400877 0.2814557334612309 -0.3850790037169516 -0.9850059059727536 0.11070178613844406 0.7755762670680082 0.3203604442173804 0.7185429844119704 0.40575139271443916 -0.11257523571699557 -0.6359667680715169 0.012927072590263933 0.22708321100453577 -0.07972481132361797 -0.09252642365061403 -0.5430282822343164 -0.8908845386194808 -0.6424436609031765 0.2143712843268859 0.5921678565555737 -0.6776178648964013 -0.27557494711336616 -0.2884701857994245 -0.11700432593579135 0.8377996823765006 +92 73 -0.5409430208882509 -0.9168861737613259 0.8788404554128355 -0.5538206405946111 -0.1608012124190008 -0.9431346106772338 0.3521495737548468 0.7082647823652288 -0.6446071052193969 0.6402793157075213 -0.10511114614812689 -0.7055041178536399 -0.9886307713541673 0.7704472603640027 0.6636182119703502 -0.221889487137511 0.47715972232490755 0.27140293362907286 0.07664059519843303 0.9071449695376206 -0.24872266628852024 -0.6939679498454014 -0.3361338070455617 0.014686705674502587 0.5660401770563206 -0.3089344379591319 -0.16977986335572748 0.3897423156721951 -0.15386381873342359 -0.366482304932928 0.5531904325268204 -0.6506521885275078 -0.7415443635092784 0.36688059951848473 -0.35749491787399834 -0.5824726931836184 0.5187178955325749 -0.38455429813075015 0.41017837078166997 -0.8433167505644754 0.5170994850454012 -0.09187866021126223 -0.46772927541602605 0.9166591145757661 0.039363026262347445 -0.8280657646532177 0.9591173954529906 -0.04631587986615204 0.5184392087781011 -0.5297585457860903 -0.13604512208945496 -0.1130951852362101 0.7390237527566486 -0.37837874011531625 -0.7486094327117161 -0.4951641669837372 -0.6975359192517157 0.732778909677654 -0.01034760998409845 -0.7148370977088632 0.5512233268225843 -0.5043866998807287 0.6465505484228922 -0.7523571417962367 -0.5740739714334824 -0.9031683625292088 -0.4424585358240476 -0.5010305686868617 -0.9637852929575557 -0.9668997908588128 -0.8212468701042133 0.661098418633999 0.23215031835494826 -0.9490524634356525 -0.5680747920333498 0.4904341052160843 -0.3879767776936327 0.9846021042069457 0.21435600927295106 -0.850767356350387 -0.19193745437344378 0.1586293646433432 -0.4821688453826425 -0.4233652039632596 -0.8892523675100239 -0.40681480194026776 0.2814445616272918 -0.7518522914654941 -0.4866212168380786 -0.252507082932657 0.46715477309925335 0.2687585121139564 0.26025759162795703 0.3014855538648278 -0.9600958907025847 -0.0007447103975644076 +92 91 0.5484922526648084 0.1265510332863895 0.6257051743768551 0.9336245558419218 -0.014591346935100002 0.7311348781090912 0.18502080930081943 0.7419690624619695 0.5358105253617718 -0.0030393519684641657 -0.7302230729988708 0.7009727424946708 0.5043588331520681 -0.7019144312321501 -0.9162983529618989 -0.4671562480249718 0.9261378991936178 -0.19139888156898044 0.5661355884153856 -0.0300871930421287 0.0707711806480904 -0.24030364803564552 0.5767880912584797 -0.9727780899303158 0.12270307237163092 -0.9868428656601236 0.7110988148858557 -0.6598200482824694 -0.4386755836839098 -0.40974067836101113 0.764544156430023 0.8206644717736327 -0.018271902808762563 0.27312906023444006 0.10762855406745953 0.44865779698144026 -0.08072038885347266 0.8270548791460333 -0.8926892088057696 -0.4393129182210651 0.9927645564592005 0.9859904335627097 0.4340298097121238 0.3557993949195881 0.8830377143660526 -0.01911035349559076 0.37950573063306936 -0.39900390997612245 0.5931099037118783 0.6444956808156046 0.2583305203752617 0.1876397457935497 0.3635854831680416 -0.15280457487319632 -0.36804988871626243 0.37629805008496864 0.30307163302195583 -0.10009756916138035 -0.6828549604288887 0.47372603051331064 0.4179050806052258 0.2577727039483715 0.37872139038299313 0.7598235849969917 -0.8570570504272652 -0.5148455738306716 0.7084275924675609 0.8152575836627161 -0.4327219314787103 0.8437869759325092 -0.05675634399794016 0.3441045007683541 -0.16908173101447543 0.520700492165175 -0.8231618220990351 0.9313536201986767 0.9915886030379559 0.7859755464770015 -0.02791453046315273 -0.4828182875013016 -0.4205134635147949 -0.05933755030330734 -0.9598978341145228 -0.35651439811100993 0.22226329894868946 0.3821482274545067 0.49002000103914756 0.0009001728010535892 0.456963479399227 0.6152403257288703 0.07836384677595998 0.784804317883318 -0.6135630642742373 0.8491590389662032 0.2775700538900805 -0.7565882109158768 +92 92 5.26077234068004 5.695301283188421 5.11985874004269 6.478657188215739 3.4540349779599726 5.717607225586706 3.5854388226616303 6.591094936524059 5.534590836986605 3.820421474888474 4.776666968311058 4.363576461497048 5.07390159515818 5.716198603863398 5.551031752710588 3.975764599475624 3.307026923788185 4.967026470531397 4.0617794415313035 4.713993600062744 2.624797902569555 4.8110473568064975 5.130105145798482 3.836816859133856 3.8966157554489764 5.092651771491904 4.530888883866092 5.392913423166586 3.7257976397094814 4.44169048900194 4.963654387697969 6.755214036748848 5.043115107200649 2.968200189069607 4.491453765020889 4.88504749670762 3.5457703473478235 4.949925469949655 4.465608481881974 4.478526791517447 3.8357827183358784 3.9517443707133086 5.073767752595973 3.508735753029783 4.815723141373685 4.484670862919347 4.9983452795361085 4.386534724592519 4.659574345201374 4.790177656304369 3.203224545362877 2.363885823907573 4.850321366446224 3.6687560590394703 5.2241742190431495 4.815004670985797 3.3821163819478652 4.53339183858695 3.639825953043947 5.211359380116981 3.085493432593622 4.260509734941098 5.065180964202516 4.404643998127582 5.673894041581166 4.060291352339698 4.4626325369374245 3.4763130716847863 4.453995054271862 6.308896763960032 3.8232105629770725 3.9623788163516913 4.384233014656843 3.860472233460493 5.619797454405645 3.4665783200091136 4.943111282339181 4.606643951976204 3.188251221412882 4.7531163820381055 4.338238836352522 4.653725742219254 5.132068835994226 4.189451386097842 4.355187923014751 3.9559549925932718 4.969229596331857 3.7937277164320493 4.842016401999173 4.720993234588171 3.2574420193006013 3.870097420576236 3.5439839618161035 3.589410240213245 3.7513034606859117 3.594695048435609 +92 93 -0.87809265945721 0.9821850523913018 0.44451271276543913 -0.04636008175238793 -0.5105813644327948 0.27590706660519926 -0.858043952288063 0.9032869696873926 -0.7379056374322586 0.591989399266428 -0.6948926523339991 0.00665896459161841 0.9106279254343808 0.16701757366602243 0.052976584176894326 0.9899011861178173 0.34799762140471824 0.3549027476330242 -0.09550480503663938 0.6908062337620058 0.7090806930305784 0.3637139453474383 0.9355755469401159 -0.362226425368287 0.4462337857427432 -0.2795633505902093 0.1336098864012929 -0.6565074716800727 -0.2715435979376666 0.8975462847192439 -0.030029500743084636 0.8796799890291105 0.8934547015115926 0.6709924769065574 0.7201320376971931 0.12100796111957468 -0.3596247267785999 -0.8603448107739968 -0.29374504476435237 0.2828680809570412 -0.40152502953982827 -0.3937484848388706 0.8203492816423699 -0.08665551506480185 0.36456666087766965 0.6637841744838111 -0.9183040361933847 0.7140799282415193 -0.5613056249995318 0.021743583274434153 -0.8129881426702261 0.7294364268339137 0.16578587998975403 0.4145400520486746 0.6523474463436498 -0.8546425833478708 -0.1679482358067692 -0.5335848291319909 0.28524390671854083 -0.8736330382935171 -0.12261995754530597 -0.9423455869282469 -0.2922307106530888 0.23824516014688668 0.24433819439724158 0.1541126674111697 -0.14950054720782124 0.7259053391815138 -0.38891864050738856 -0.6944013622895056 -0.5561800008623723 -0.4120315097238856 -0.72294532753632 0.22400544923638122 0.37773578454292367 -0.39824642395598975 -0.38481865998466835 0.3851100704111421 -0.19314935796914123 0.7329433649514647 -0.9609717976610719 -0.9329291968276692 -0.8214981910548533 -0.9745980405753751 0.8433670044534851 0.7055104095101479 0.9355142253727196 0.5862611000113929 0.8114604367999947 0.9653995775267226 0.8192478138333732 -0.36351225856858616 0.46562391549221105 0.10796037269664516 0.2597136461685319 -0.12325646077961072 +92 111 0.2812901366177021 -0.5520333316854356 0.3980509241818475 0.9187574259954678 -0.9070543132806479 -0.5459900790362919 -0.13521146813621088 -0.9440763313510703 -0.5855426180909373 -0.5106223432159656 -0.8997572973767569 -0.49547935412592103 -0.8742544441333999 0.33962764616013996 -0.8157769315837697 -0.2507659631342789 -0.07774805403679852 -0.4364769492779865 0.8197776939160253 -0.9624532421178373 -0.060816910434942084 0.6746371454055473 -0.4114437060015985 -0.5088996148367344 -0.8717790472634375 0.9949383644366097 -0.45259312124264195 0.7867665906226242 0.07656287627204361 0.027478344532318344 -0.6526218778810398 0.5494779465187729 0.5252068487708408 0.3703999354411398 0.7673524851480162 -0.37023659698905353 0.24926381111467788 0.17736052539377312 0.05010783441993105 0.03532466403293366 -0.3403463496655188 -0.6179058622242715 0.7038560714499424 0.18482211317302233 0.30370505111390234 -0.06262692922972057 0.529872189255242 -0.9515523464998517 -0.09542236429414919 -0.9861509395266654 -0.21246390264846826 0.00897784183218131 -0.7974427740275316 0.18298245785987644 0.03960378495230921 -0.44769531776191007 0.5012749498045113 0.13999722842435003 -0.14315879726355019 -0.603942128441695 0.17122593215832693 0.09037876568905179 0.7796450890209459 -0.26908585527234496 -0.32237604185966884 0.5921342624948298 0.7759555590718541 0.44756533510399965 -0.47244935042985214 0.3443399045964435 -0.3839924980698697 0.7121222778237417 -0.1651004148049473 0.10574974099389056 0.7776508030227289 0.19727146506301652 0.8054632859056501 -0.12678719947025918 0.2208105094520918 0.9302664812023878 0.9682192787807753 -0.6219047263373259 -0.37577405862415314 0.6897295122336538 -0.41224469670072295 -0.8701396974545519 0.7832570825858647 0.012788787296527993 0.6152597133934317 0.45879363383423777 -0.5470748517349415 -0.5373165499870389 -0.39345370460976237 0.885505031518232 -0.7478125756933525 -0.7165770141482597 +92 112 -0.6535583384829979 -0.7636685231576203 -0.19632799709728088 0.8796176808057516 -0.7004367125494262 -0.7793542989041309 -0.5509297832505711 0.6660177940676875 0.8706348411602025 0.2235262408862515 -0.8946766844351794 -0.8839011151962881 0.16354636228071695 0.9250283956295406 0.5950810780603022 -0.2938735050017445 0.40769377164109 0.7659931619146232 0.6551239474962336 0.5417695372858402 -0.10026350612712309 -0.5510180728106757 0.6116528123153528 0.4847633065655428 0.9204540034166553 -0.5052044758749568 0.7859926058162219 0.35916864476450927 0.019076342520370826 0.5167796036773737 0.6947640220693088 -0.8899915122709983 -0.8641579908726944 0.5240372977892591 -0.009603163301752149 0.3300905021582816 -0.4346434418593328 -0.7160890860859959 -0.9456560910293093 0.10662936141783552 -0.29026868362027414 0.7708471393528635 0.4238544780739708 -0.5336428253405221 0.6695296744862436 -0.5476479839553516 -0.4743589080441186 -0.953721938904605 -0.7899738780782828 -0.6248895109368071 -0.26251718178505756 -0.06936656135424646 -0.8384982018333895 -0.7663238056864157 0.8728837912985303 0.7382773856625158 -0.019226082254256704 -0.36162694341580637 -0.906348858479312 0.9600686351146741 0.19175711638882498 0.6441440378399381 0.3496186799629597 0.4277054120010553 -0.8698632738451832 -0.8512439810870565 -0.40166559965414184 0.10139371874014169 -0.36758063256093365 0.8714430946808358 0.46549743076525707 0.3275822721191586 -0.9547324174215908 -0.6768259696492294 0.09699085606834545 -0.18480407172095736 -0.43215675100771733 0.6090255917540928 -0.8938578275549185 0.19258059089319257 0.41320751375102405 -0.3037149524784255 -0.517998574169801 -0.2940762819085885 0.6127506257679205 0.9625040880799423 0.5848485116293745 -0.4156215662585141 0.5605472519490153 -0.012083050540997231 0.43938227169095034 0.7486865933430662 -0.21694422445854333 0.7515177482078517 0.6754722236286237 0.11772395702374405 +92 113 0.747029544822208 -0.9275766547085911 0.7731978647038273 -0.7895035900339302 0.28862578192006083 -0.7880178367632964 -0.18391529901340165 0.8654513741356207 0.7152708388579603 0.5585500010937754 -0.18235161772999153 0.9707865102462698 -0.6377867152824785 -0.6026097200955487 0.49522476450034336 -0.7461645526309808 -0.6268144915429052 -0.18708214184879846 -0.6160142509228079 0.09293866115371863 0.321408197175332 0.6544428853911923 -0.9428917906836469 -0.13283810168596055 -0.35126490477217587 0.5678782950800683 0.2919339359522952 -0.11946593151131268 0.5258587434482527 0.10170556504955797 -0.6595855522942589 0.3988144257471029 0.12442315810169502 -0.08806720733497775 0.370749228174742 -0.802584846826562 -0.9831625524309828 -0.48435622616153795 -0.27421898966186165 -0.9458676475533869 -0.9120401759264278 0.06930513238827984 -0.5426032833287171 -0.07711910499412755 -0.586733915519603 -0.9582263442265759 0.7298961457952469 0.19845339159144104 0.40425255146436534 -0.6273013294748648 0.8599131211898456 -0.4160238490927899 0.011789747526681715 0.17668589626301956 -0.13780407927417881 0.44122487416906453 -0.9037328445568882 0.42290391253863624 0.47098596425003225 -0.30029371531244564 0.006376090059621697 0.23559155926594144 -0.058448803654978176 -0.30220893946232796 -0.625965316674489 -0.26893693509723415 -0.8444723131993712 -0.46689815190969974 -0.36270626984882637 0.03681740486230067 -0.5389888461227808 0.1444898390956233 0.8087648611730327 0.0838320186100252 0.7874439267392888 -0.6247203678847542 -0.24007698395665633 -0.560374473486325 0.5185643314048731 0.4141925986968926 -0.27861227382925824 0.191619761357112 0.994826580004122 -0.6370181245025166 -0.30995279298684975 0.04879168522295063 0.44261049878420033 -0.09999216589396243 -0.2525311384468789 0.7219890904078574 -0.010748930930199352 0.350150902229442 -0.025295526717920236 0.13602611662712527 -0.10332113992427105 0.07133510608301097 +93 72 -0.45741468471810887 -0.38240263989481305 -0.8108539937133858 0.09134716815341859 0.7078396509214335 -0.01284377802245773 0.998221889003936 -0.7279552551786193 -0.5395068566854797 0.8079283959628671 -0.31421999278146906 0.4973701109071198 0.037019761425016506 -0.251024617672138 -0.07095434269941703 0.9009967291328083 -0.6106018906942177 0.19394406791216734 -0.9561973850772667 0.655238945912217 -0.7859071413762695 -0.13665470316531425 0.6696060637496839 -0.7059271756915562 -0.6135971199431096 0.1626037569807144 0.7511580641984648 -0.06914487802134972 0.15556525267315457 0.20614110523470974 0.5457998039764693 0.2409060715459974 -0.38779053046417866 0.414522990783903 0.8858573361519484 0.35049360556567466 0.5434996718042795 -0.02162536930509762 0.17096112778827033 -0.13164147757307232 0.47878487853477925 -0.0077414171809755405 -0.8392333160340766 0.71373084236999 0.379998528138767 -0.7571453846794765 -0.756355768168842 -0.4576221724960443 0.1367980565399327 0.8217083929030145 0.8775638322243107 -0.39195937979602213 0.6213951105216624 -0.8199788177868137 -0.4952370587168984 -0.989872017446837 -0.07340337284145693 0.7385284320254393 -0.8573789445724695 0.7398924285538373 0.9609362850265764 0.5688855001313056 0.23843780420647143 -0.5373164327761153 -0.9687232358228492 -0.27127321352716693 -0.7161816477880694 -0.03925605623699835 -0.7794116396036881 -0.3771781646201682 0.8187082848183695 0.19021717028510676 -0.7083637560429845 0.8404978636431961 -0.5371246034765684 -0.26221953293888856 -0.25555401600147576 0.19922564033241463 -0.8639325256994661 0.6770754504235774 -0.8606775188180806 -0.6325958151538331 0.9526460009292579 -0.1209387109774851 0.8705460556005613 -0.09594687425019677 -0.8448442399859779 -0.7640646729485514 -0.8013596664269544 -0.20359464047810616 -0.8938545915492355 0.7841749089821817 0.9308409799944872 0.037063152889657225 -0.013872833959985176 0.781974793601506 +93 73 -0.7915762389021144 0.6987427768953103 -0.14804220115615152 -0.20682729142730483 0.5307472151560357 -0.9332708059835397 -0.3849966304983039 0.4390588439006309 0.2942525997368821 -0.8924434842078204 0.8043392030969216 -0.5902876983304925 0.92308913515983 0.43139633175140335 0.7506704160320563 0.007831121332937396 0.3371159134401396 0.9114569534604964 -0.6605664850472064 -0.8395481419476123 -0.985694222009807 0.6379383073818443 -0.4269882285323525 -0.3124742522870114 0.4338688669535411 0.6476034508881143 0.8577755170924786 -0.12339275485665824 0.5378903338144438 0.4496048241123132 0.6569562921094863 -0.7091912545356789 0.7987341517566835 -0.7096554276094491 -0.8997353723149122 0.3200079300248464 0.9655132067278527 0.7495858249316676 -0.7421513630521517 -0.6042875040762974 0.3765158476581667 -0.21862685847743069 -0.38672465651697374 -0.08655053248161582 -0.9032758533454412 0.06794124174842753 -0.5979934154184949 -0.16490535539393214 0.3016177468383243 0.8612809037014952 0.37090048506176343 -0.33182296818327384 0.9301663519387526 0.40656684810573074 -0.6994374310188014 0.8068012479603643 0.23937642075074406 0.8209649072834537 -0.9849147890928951 0.7943915360465039 0.4694966292095901 -0.22076685023541742 0.12291764355654311 0.2812800214074922 0.3604967861436439 0.3606015376299925 -0.7819380046967919 0.5958962661028726 -0.2855286896526541 -0.16566698913919575 0.013824218364839158 0.22301951488524718 0.6816569411255189 -0.13014967976424985 0.44910654803135097 0.44721034676310456 -0.5808906234865197 -0.5360129856553364 -0.4116401798764544 0.13079151921850962 -0.8398067769348911 0.62981506352325 0.347959254465368 0.8854649341217076 0.30392115075890547 -0.12267793038599595 0.4725645049196696 -0.2783141373661968 0.20751542519774047 -0.9887898435087319 0.18414912397158667 -0.6339642151911471 0.9995837433636798 -0.21072781989802358 0.07447105585953695 -0.9422258007457898 +93 74 -0.9335544124735209 0.10307917927537313 0.6847079861480669 -0.706137091839047 0.6789861234303902 0.16322651744505556 -0.10559787696108258 0.2524222814915713 0.29927757021624646 0.7360993843106103 0.8832650368183816 -0.16867784733054103 0.7557983631720879 -0.3505943586534148 -0.4385106806047214 -0.7027614720131605 0.6640350638767842 -0.04032732817640139 0.7076316645532317 0.270482043657307 -0.3474003459954036 0.5551118013083194 0.3609667605183695 -0.32345160342655155 0.3082562951565193 0.47616031556273364 -0.6792225871873001 0.9773353861694816 -0.17201247398013142 0.2861743857378207 0.4186402955520587 0.19266806171741746 -0.9339759786074937 -0.9994023083171646 -0.7240617093510726 0.7912230666870927 -0.13509889762838068 0.010353090758491446 -0.585000967438797 -0.8007835719334946 0.8296683745400977 0.4038197296537771 -0.2629619633100393 0.9209996065542387 -0.686877038325072 -0.05826586058100047 0.8694130469813977 -0.39225834999415476 0.41022133194701005 0.30925210608882825 -0.07432558265578626 -0.15605247658719268 0.8797454206315856 -0.8540413418538046 0.2452527945397942 0.6815473463975295 -0.2693009095530703 -0.813486991249218 -0.7993379631059165 -0.1841264205643982 0.9386912207879299 0.06501169215247504 -0.8190765385085426 0.7650882000756896 0.15001279006137747 0.6288836508852902 -0.5009850283448181 -0.7654413369482262 -0.026103122697194836 0.4215782344191583 -0.43027463360006335 -0.683371019251358 -0.5921251065692557 0.39693761913749426 0.4771311568925303 -0.5781344359118195 -0.2860499282737281 -0.955642897984404 0.27696246874140384 -0.7213760663208648 0.030431578025535533 0.9953994257410381 0.2774049832232959 0.4884527671205865 -0.7540249082119719 0.2778765986859246 0.41292197700018884 -0.8342789478762123 -0.4020076029054449 0.6683406708303268 0.5131828341491689 -0.8214929136647449 0.7674708891728281 0.3650949479794774 -0.36354045164831694 -0.3639593280997957 +93 92 -0.87809265945721 0.9821850523913018 0.44451271276543913 -0.04636008175238793 -0.5105813644327948 0.27590706660519926 -0.858043952288063 0.9032869696873926 -0.7379056374322586 0.591989399266428 -0.6948926523339991 0.00665896459161841 0.9106279254343808 0.16701757366602243 0.052976584176894326 0.9899011861178173 0.34799762140471824 0.3549027476330242 -0.09550480503663938 0.6908062337620058 0.7090806930305784 0.3637139453474383 0.9355755469401159 -0.362226425368287 0.4462337857427432 -0.2795633505902093 0.1336098864012929 -0.6565074716800727 -0.2715435979376666 0.8975462847192439 -0.030029500743084636 0.8796799890291105 0.8934547015115926 0.6709924769065574 0.7201320376971931 0.12100796111957468 -0.3596247267785999 -0.8603448107739968 -0.29374504476435237 0.2828680809570412 -0.40152502953982827 -0.3937484848388706 0.8203492816423699 -0.08665551506480185 0.36456666087766965 0.6637841744838111 -0.9183040361933847 0.7140799282415193 -0.5613056249995318 0.021743583274434153 -0.8129881426702261 0.7294364268339137 0.16578587998975403 0.4145400520486746 0.6523474463436498 -0.8546425833478708 -0.1679482358067692 -0.5335848291319909 0.28524390671854083 -0.8736330382935171 -0.12261995754530597 -0.9423455869282469 -0.2922307106530888 0.23824516014688668 0.24433819439724158 0.1541126674111697 -0.14950054720782124 0.7259053391815138 -0.38891864050738856 -0.6944013622895056 -0.5561800008623723 -0.4120315097238856 -0.72294532753632 0.22400544923638122 0.37773578454292367 -0.39824642395598975 -0.38481865998466835 0.3851100704111421 -0.19314935796914123 0.7329433649514647 -0.9609717976610719 -0.9329291968276692 -0.8214981910548533 -0.9745980405753751 0.8433670044534851 0.7055104095101479 0.9355142253727196 0.5862611000113929 0.8114604367999947 0.9653995775267226 0.8192478138333732 -0.36351225856858616 0.46562391549221105 0.10796037269664516 0.2597136461685319 -0.12325646077961072 +93 93 4.821525360739216 5.488119980876731 5.045022174428622 3.495537062154164 4.35842568960558 3.549186360762776 5.09635997518812 4.155005567177965 4.531715218276774 5.686940330695078 5.6844134575692795 4.809131756740342 4.583087733338241 4.1167139555495105 3.506502008259131 4.803629800951587 4.858581946089616 4.644082561061639 4.18068877979596 3.888689712349672 4.7746055461175505 4.082091720043057 5.950523523494501 2.822082596431315 5.153858567043106 4.08080344381592 4.5389016828333695 5.858773310031345 3.87578987518522 4.885369901891973 4.3427525592813225 5.0916705703745135 5.113173352584001 5.999488239111957 5.9046856177452725 3.9534189190096924 4.044789074944877 4.4170892102118255 5.411990239859684 4.744595409854904 4.246139876224602 3.765854358845607 5.384709095639981 3.8592899636949896 4.383467950757622 3.514873940259553 5.283866746846755 3.898512683247242 4.90214657836638 3.687963831316501 4.92326562240401 3.710869550574844 5.12941029817002 3.805611355483058 4.857327773455452 6.679068218466277 3.955366356609256 5.5623920354446375 6.018598541794158 4.563128487812039 4.462456349808166 3.392429517773937 5.742730642052605 3.802630716759884 4.821018848794971 4.066041546323472 4.548143831626518 4.478880505383907 2.899369860281973 4.781177117129107 5.252139723614868 3.91346151909403 4.6615423817048365 4.7231732720838 4.072434072605804 3.9368231004034264 3.2400429922860456 4.8911594967886725 3.8210159587126817 4.901600311517007 4.662512937457051 5.601366858276574 4.2825874821196885 4.922674052132046 5.947314410593021 4.418559287396912 4.811747757150702 4.984276523349765 5.458441312502988 5.893513845863106 5.249609149222323 4.59139904849362 5.744564538914796 3.0461779201146464 4.1884762652628265 6.197833925877535 +93 94 0.32076135177450227 -0.8408686522861293 0.5043562168568041 -0.3477981412419935 0.7822669306213128 -0.233653681943099 0.18186630975681273 -0.6283753382978332 0.32747785989528233 0.6552222132389158 0.4298029410987081 0.8878390718447697 -0.2804055815566675 0.46014437160904476 -0.662575134099088 0.3716770493442436 -0.3153309460530951 0.9556831136926962 0.013670242143838607 -0.4872792751628008 0.8480677266492758 0.46925156191607686 -0.8748480851771532 -0.4912927988677638 0.855044189734202 -0.5204314632092046 0.229247650755249 -0.9031479752846294 -0.6727660188128963 0.24672536896700392 -0.9380089700055585 0.3093054257829204 0.5272404267293467 -0.33064475049224495 -0.6211392794686603 -0.42575447949877154 -0.9012731783619059 -0.7709361056960156 -0.834201985532677 0.21024842756916606 -0.674611872066728 -0.551305657809845 0.9222409631096977 0.07393524909743054 -0.01312055769469711 -0.35861375120044725 -0.009649605160852559 -0.23611752568804323 -0.7414227848833415 -0.11085726354301273 -0.39337358775729947 0.029700885625590256 0.9323912747979612 -0.18780317585968143 0.13872981297717124 0.3462179802263057 0.9115641652595703 0.296608328414228 0.3439444101035689 0.49613238471797083 0.23401657351893212 -0.3221552345606409 -0.9639539446304017 0.6558231877937464 -0.5368289804661017 0.05581199160078043 -0.47059477613265477 0.399714149242387 0.7594667640694257 0.5591748881136758 -0.7269297374834394 0.26070572557373395 0.2855894665340335 0.6365522972889452 0.5077034983912183 -0.31213116528204377 0.03470715309696426 -0.4565776932211645 -0.4322200372894631 0.753880491774471 -0.9869374053855806 -0.6182433798101443 -0.20465129243721347 -0.8794956845317128 -0.8449411297232348 -0.8615951783751401 0.010537925956268346 -0.1192848352368403 -0.918688790034978 0.7239824133876887 0.1023974545835391 -0.4398887305294714 -0.5209108586867237 -0.015167249561451213 0.41951811001257067 -0.5370232522947664 +93 112 0.5025890459343085 -0.3280353485060796 -0.8522479296897671 0.9272307078411866 0.14326759612810935 -0.7415918945409876 -0.6344455546504197 -0.09467083259517373 0.9593294920505051 -0.5420386633051519 0.45401854404291253 0.5816704718278771 0.721516848313823 0.27304289726770037 0.391474494224175 -0.1866927953037525 0.5014757976348352 -0.5473364668907372 0.16342758820384806 0.22412967477631907 0.2600474077580801 -0.5523031172584514 0.4145531243354428 0.1684955373286947 0.6368399384064212 0.30784912278959675 0.12999646894926475 0.5479249721516031 -0.374595629179858 -0.6948825395054719 0.038962002752265246 -0.7897355301651108 0.25963323384200887 0.8217130137932149 0.8791584254171323 -0.06990592027871378 -0.5178396262111999 -0.3815651877029813 0.9505493398266207 -0.5589893265917947 -0.7760841758456649 0.843976172856391 -0.10787939025104909 0.8295908567811583 -0.8440071220164937 -0.1090250831830537 0.725694127487813 -0.7345655354038074 -0.6888385444836969 -0.09655094670127307 0.31944061883439234 -0.7714123537611961 -0.8535861482359648 0.12553025873286505 0.46909435223991647 0.8582750630509957 0.8880076559807597 0.5800205514942667 0.9079443734548578 0.3152882187242496 -0.39689769419990073 0.08164780757260948 -0.6478186438630316 0.5496260833333453 -0.27795215128414674 0.1236129116653899 0.42504238137656647 -0.47055466457180084 -0.0992335357105052 -0.23657646960365364 0.9626801074306353 -0.006991263241182377 -0.4297733095266789 0.2360952288089435 -0.04023216322367418 0.8154079157666942 -0.9443500705271008 0.21798323385916296 -0.5469150707508912 0.26187493307232024 -0.37767775880802756 0.031697811098308826 -0.32818955773560843 -0.7101266268710402 -0.3132234407548917 -0.5692416091617469 0.09167807713117115 -0.5855275748946318 0.42031232272842756 0.8953016848719024 0.8363170480772704 -0.43787312373419396 -0.07069135023583639 -0.9395911572873012 0.9268600337854791 -0.8351265791920324 +93 113 -0.5551903854197597 -0.36559437997472743 0.7175755944400679 0.15464008646593808 0.453988188063978 -0.3788765337805702 0.8469253138933903 -0.12577841737046347 0.2436254433341536 0.31890000263381424 -0.7258845274852275 0.9948423879079176 0.07072301221742738 0.7856929011974392 0.38941477344594166 -0.2728724317350084 0.7216323051368418 0.6837652429092955 -0.8157327084626811 -0.29902785511588914 0.06697510599729961 -0.5136045108350331 -0.7395693650082966 0.11091838315351588 0.49772952743340926 -0.5882778122302132 -0.6219281302607718 0.891009505625685 0.8753199620443024 -0.3961153403503592 0.4313858808675668 -0.9900224502973805 -0.8288388145826442 0.9847690921715417 -0.997022093798831 -0.8798757068960879 -0.25878143397835474 -0.6130185649754738 0.848609178759246 -0.6554165573917359 0.5368023174437655 0.976918405789841 -0.8931416648630375 0.2349553125249575 -0.4320274810570599 0.26573415263433997 0.22746368267899553 -0.8032409635466529 0.5734620283066556 -0.4048583496574414 0.8719908523680038 -0.7299931177732146 -0.38384190067700574 0.2575651410873845 0.8887952748157097 0.9874696744870579 -0.45886791256279835 -0.7583369067200463 0.7126122519754807 -0.2156321185417065 0.9713202427689882 -0.9311181079871587 0.9773952686437049 0.031009279716166516 -0.5568887491978578 0.9339436396518965 -0.15390477898341293 0.8943185900809361 -0.53449579898352 0.4654063110910778 0.7407477233911115 -0.44868815284664954 0.5947905692078603 -0.49257231896155607 0.9990468677784095 0.13420469690004055 -0.08191054938842268 0.5329372327069883 -0.1716095326840421 -0.5245809138068696 0.3536140657074005 -0.8974186275576854 -0.3425596796018293 0.17460586214505414 0.28870853739328917 -0.25053422244227264 -0.7900633078162795 -0.10620125928124935 0.8178124756018759 0.9096064004293567 0.3939519667446474 0.0727647755796137 0.8486584164224678 -0.3475682556612607 0.8915541348567504 0.9464916956021052 +93 114 0.3393761150886745 0.842125065793625 -0.6422248469700835 -0.060633859943965085 -0.26639105720308187 -0.5008524328901005 0.7819753661150246 0.7562083310365402 0.6997995735761571 -0.3632215270351482 0.8816205163864719 0.987634229374645 -0.17584622368482306 -0.7686258886839881 -0.22711392283314735 0.4465008032080182 -0.4478984044246985 -0.1398378758227543 -0.04950361318127072 0.019368752554999702 -0.20568214126630147 0.20377726176989452 -0.5377352039556615 -0.24650688662014875 -0.9194800334591637 -0.8633482453052737 -0.74716185253347 0.7437273392539365 -0.23226076964321019 0.845189925878457 -0.8184698581750465 0.8830193869262193 -0.16005076986783218 0.1401964314753732 0.11781146171382728 -0.8075342787940496 0.060044429420601286 -0.5204407564260556 -0.16838426753960412 -0.6973946569981675 0.03208553492078847 -0.13070086493081456 0.3029406305591831 -0.7054217546712311 0.6411394166951905 -0.8044508422784884 0.7223060876846952 -0.3130208701992123 -0.7826345927738343 0.06365510031526811 -0.7449576922197392 -0.5431566392084912 0.10361781268851411 -0.4462315850807861 -0.5784362189318213 -0.5985743311395904 0.6858839333194826 -0.5789033488739264 0.5620353871674848 -0.7488524213228531 -0.33808399766270014 0.1035860147907477 0.8612454590305763 -0.6670590051420009 0.7705891281296469 -0.6460094218157759 0.5168030949689719 0.07453066903470384 -0.018849617758938786 0.9999364299630906 0.5182490695031818 -0.8747533074846077 -0.0714772661213059 -0.838449299081335 -0.4886916888289221 0.33730076102532824 0.649829777687573 -0.6819715206902344 -0.7712650873964331 -0.34584519555556503 0.12206719627201412 0.5096182006485306 0.37148581209157006 -0.1516764524345069 0.7290223963069062 -0.7239203958932674 0.6418776239983202 -0.9943501031918056 0.2645465659459172 0.4413140011692911 -0.8450476073851736 -0.18053439472768962 0.8520520967764833 0.2937562670730336 0.848740960423642 0.7151735805525758 +94 73 -0.2799593006674981 -0.07141645464385404 0.7935662271400792 0.019181465622810867 -0.9477587662978377 0.8215935574488855 0.08967788555010103 0.05606640283284481 -0.20560169107696558 -0.4654429461300347 -0.4001600473764946 0.08651972018069354 0.4130387341245396 -0.7743082827154806 -0.8740950169013717 0.746119792312717 -0.19495918746937613 -0.6986988176617999 0.6193543449376826 -0.6146232201723327 -0.8551604425899031 -0.689047226735507 0.9185985259058289 0.5204007837364253 0.8869639199004713 -0.2695916159270171 0.2878768570116479 0.2689009131482869 0.1179795282510041 -0.17830970628385323 0.18615756600169675 -0.4963778841317239 0.5102978928652337 0.09071666498765096 0.630932805604314 -0.2719502675439238 0.7772069539496957 0.01835554572244824 0.7919385151132552 0.930494912830448 -0.23822096613542976 -0.5224510521874601 -0.7862568993192578 -0.3500617386591167 -0.9942611627517937 0.30014035201486244 0.34080938809988925 0.1376459128572709 0.39164660437525867 0.2822397712831646 0.6912186893702978 -0.42793982010210185 -0.024740652717918588 -0.45954755443194917 0.9199371767527333 -0.9893399782682197 -0.21575545094120474 0.23799252788707892 0.04698492010250188 0.7266561467677572 -0.8986132708036008 -0.5602209353864114 0.7684336140436847 0.9542186795577197 0.9501609590770064 0.48066552061589873 0.8436501217480035 0.8285873035364268 -0.9107302335589496 0.5749402729908502 0.37342482599408355 -0.6769771792314891 0.2850267089508274 -0.3636608410497517 -0.4997592208106352 0.6692985496548598 0.04888404799199875 0.645125342029335 -0.024539739243579106 0.3723548598921904 0.8530972015890756 -0.9169232514525756 -0.8399623424000209 0.13083852675498897 0.30895734976445555 -0.7131203085724338 0.7203312328338773 -0.7846189889811506 -0.12228869746880267 0.9805215030771381 -0.07366948295833398 0.31743700172477984 0.3466640941885917 -0.0013940786152619733 -0.22090480320713612 0.46390269236971626 +94 74 -0.6818078840342519 0.6280389983006842 -0.2371082376495297 0.8282322379418339 -0.9601654936739132 0.6193829486207565 -0.7330104949839542 0.24133113182586485 0.9898601299462928 0.45077243643863807 -0.9561458506783684 -0.04120766106697005 -0.2449805012922217 0.7440985247385472 0.9377900204092615 -0.4990933180290342 -0.4462157220790408 -0.8954482934463364 0.050846973570437104 0.7641946376257474 0.418767044050379 -0.663270527890317 -0.446750728832912 -0.8854657816038738 0.2309608748588854 -0.16013517771560126 -0.17026328554502101 -0.4876903536169508 -0.07638942578954278 -0.545936023907551 -0.883731452917303 -0.2130694023881312 -0.05621556592866961 0.8702364517335834 0.9887950937668715 -0.6483361827445995 -0.1435607002407122 0.4620764405174327 0.581820422208944 0.4338223498140066 -0.037937504791000665 -0.23089110397819157 0.5160362447862481 -0.8676880401573603 0.5948889974214353 -0.32138941564409307 0.44830035217313124 0.3081334797587698 -0.5390074726382268 0.028565273586238504 0.21019334974922277 0.7623204866175897 0.09539144490034768 -0.8182301604837214 0.43532818046284727 0.7386190496797034 0.6519081623608802 -0.4333961410150611 0.508271913689285 0.08548733240937945 0.7938852613755654 -0.2774451808274283 -0.04252306297814368 0.2886768247529694 0.5466503930014694 0.14690823104076434 0.4217615976097313 -0.48113194486441846 0.7688823525047197 -0.04306953306448058 0.22284395718366468 -0.6379992375657053 -0.11387881364626273 0.6953324641631029 0.6349692413281831 0.35027017406960126 -0.009910245005811502 0.5485533381314933 0.6476208963559285 0.21818801698171342 -0.4922308651732046 0.11736081983070634 -0.28898230514454815 -0.35150511686338937 -0.10663645271788269 0.8833808516376607 -0.9229151701061453 -0.9741126738307766 0.5293930945400331 0.8738114303876061 0.44198039481613893 -0.9330654520577926 0.2846490603470355 0.5047322764485609 0.7753466687731272 0.4936267870329065 +94 75 0.8592317793485944 -0.9363008581799559 0.9286115156032257 -0.40218245341559045 -0.2016685031079528 -0.06108405803577388 -0.9672602378533115 -0.17907301175112256 0.5428517174092709 -0.5346194504315256 0.38721909923875364 0.3401596574356036 -0.501927831813247 -0.5190864230726291 0.7292143906503628 -0.6959485666315748 0.7587917114215144 -0.6787161981557401 -0.6956711526735051 -0.4030074546831386 0.1975946515134135 0.14532475520725185 -0.221227688687621 -0.31496677400477746 -0.728185622130989 0.20251518908582766 0.3723946763348751 -0.21681305513999605 -0.12882563066868302 0.8379449703498303 0.7607530599444281 0.12594874246634435 0.6723347798387478 -0.9513144796949438 0.15858507578724734 0.40298283447644256 0.8821175998076582 -0.607083675707192 -0.2484230989834335 -0.9518634681635296 0.2881907422573191 -0.5128370292988078 0.11030203568772423 0.5414387750963696 -0.027644265665169865 -0.03986792773164827 -0.5133279057865554 0.6271076555142927 -0.14937598820873177 -0.15437871282005178 -0.0775653763109323 -0.36474028364228683 -0.12489276302733843 -0.7833495492394105 0.9717071193649489 -0.8571772416963175 0.2907554145183717 0.74495972980487 0.47323997680422614 0.19864605316093953 -0.07505987268873926 -0.14251689566539394 -0.053210959119303736 -0.5155581569567393 -0.6243469499038934 -0.9852557776049595 0.10145946704462316 -0.8945805742296615 -0.2538175559613298 0.17268102269883778 0.6724062498979124 -0.14255332151557343 0.808423190611208 0.16655147659548097 0.022686847314775882 -0.5235295178869048 -0.862174466471531 -0.3166326136296054 -0.1748475133982179 0.4993596892269099 0.7631139603185564 0.7017420849957117 0.1008380246784657 0.3466998354513604 -0.13966869414153082 0.3182064959663877 -0.5001798213778463 0.996110893973857 -0.20250020343472674 -0.3251625411966861 -0.10573594408040288 -0.8403065285074838 0.6496454429945684 -0.3343044064874736 0.5062388190467608 -0.03684765546732649 +94 93 0.32076135177450227 -0.8408686522861293 0.5043562168568041 -0.3477981412419935 0.7822669306213128 -0.233653681943099 0.18186630975681273 -0.6283753382978332 0.32747785989528233 0.6552222132389158 0.4298029410987081 0.8878390718447697 -0.2804055815566675 0.46014437160904476 -0.662575134099088 0.3716770493442436 -0.3153309460530951 0.9556831136926962 0.013670242143838607 -0.4872792751628008 0.8480677266492758 0.46925156191607686 -0.8748480851771532 -0.4912927988677638 0.855044189734202 -0.5204314632092046 0.229247650755249 -0.9031479752846294 -0.6727660188128963 0.24672536896700392 -0.9380089700055585 0.3093054257829204 0.5272404267293467 -0.33064475049224495 -0.6211392794686603 -0.42575447949877154 -0.9012731783619059 -0.7709361056960156 -0.834201985532677 0.21024842756916606 -0.674611872066728 -0.551305657809845 0.9222409631096977 0.07393524909743054 -0.01312055769469711 -0.35861375120044725 -0.009649605160852559 -0.23611752568804323 -0.7414227848833415 -0.11085726354301273 -0.39337358775729947 0.029700885625590256 0.9323912747979612 -0.18780317585968143 0.13872981297717124 0.3462179802263057 0.9115641652595703 0.296608328414228 0.3439444101035689 0.49613238471797083 0.23401657351893212 -0.3221552345606409 -0.9639539446304017 0.6558231877937464 -0.5368289804661017 0.05581199160078043 -0.47059477613265477 0.399714149242387 0.7594667640694257 0.5591748881136758 -0.7269297374834394 0.26070572557373395 0.2855894665340335 0.6365522972889452 0.5077034983912183 -0.31213116528204377 0.03470715309696426 -0.4565776932211645 -0.4322200372894631 0.753880491774471 -0.9869374053855806 -0.6182433798101443 -0.20465129243721347 -0.8794956845317128 -0.8449411297232348 -0.8615951783751401 0.010537925956268346 -0.1192848352368403 -0.918688790034978 0.7239824133876887 0.1023974545835391 -0.4398887305294714 -0.5209108586867237 -0.015167249561451213 0.41951811001257067 -0.5370232522947664 +94 94 3.3892148562854274 4.686563082168426 5.6659926347879646 4.793189179145894 5.348308902246059 3.902937704136935 4.55329964830875 4.006378374527169 4.717349839711772 5.114386706879515 3.700938710005569 3.7105328025575863 2.9207366060338797 5.0371852335264125 5.094515375620613 4.275628997916456 4.877676443161737 5.7990980439012425 3.5109446169836604 3.8807330299862244 4.6394670559086 5.3101903021672685 4.387308189953789 4.0943537486591985 4.806996420432396 4.431661078070249 3.9445223964984386 5.692950318773917 3.059080055458635 3.809142454313615 3.9512117780269023 4.615558205945187 4.553109538409245 4.4989328919874705 4.677092815571857 4.873565642773803 4.708569539821756 4.310492839039581 5.140144488994536 5.453871943440366 4.802071637404318 3.6193268381407115 4.131651985385732 3.4668919018126623 3.47574057052395 4.231881972818762 3.1577825264788615 3.7521630102629406 4.391731241423666 3.341003291363589 3.7078369097649144 4.119672642709887 4.520351587408412 5.379292083152003 4.819607600233016 5.325168564844735 4.493072329042243 4.381211989561164 3.6709334611997924 4.246726628047876 5.434808005162939 4.708372386282225 3.9651259824859575 4.624800534018526 5.030605039279091 3.711466866139642 3.949609904112448 4.311253626527796 5.375380539646514 3.97020671738364 5.664513887297261 4.623601842859071 4.997920074576498 4.581714495547788 2.8402805923084435 3.648680284620497 2.7623298614286087 4.353772923982694 4.190527736017729 4.541977019386504 5.011419803781644 4.448761400016939 4.0728084141852525 4.835932583509913 4.457036397223472 5.540553965102412 4.00899947338684 5.1499667946137055 5.383448198063786 6.5732996280163 3.9543236335003042 4.969504029877546 4.029189848057772 3.37202818377414 4.452566828418659 4.7750467229162155 +94 95 0.30659017400349775 0.6652201894534326 0.9172989697948153 0.2763761910935456 -0.021593850357077837 -0.8845785577831373 -0.5799143874451089 -0.3817474124892499 0.32966510331826093 -0.28860479795067606 -0.2414792634586278 -0.27521257683451483 0.28632026833326796 -0.6996661033304261 0.8336885422775846 -0.6465641234928092 0.803514854930834 -0.9016574586652599 0.17854749374379075 0.7620591363019349 0.6403017285066857 0.9755296731071179 -0.7658209055479239 0.4210819160712145 0.6030886986397868 0.4243591144671457 0.26590727036995765 -0.49603203389702744 0.058272659733818566 -0.04602815017168482 -0.5403783058112008 0.9905915640965748 0.9682130054165929 0.28070799252094947 0.8605058658039295 -0.8591703427132154 0.47880366240455285 0.5441965795445116 -0.7549236313139911 -0.9231878397498825 -0.9141891167594121 -0.07442259388446892 0.45319853884256145 -0.22793367961396105 -0.3833651048337845 0.5684557427706705 0.07265350275902249 -0.39007468940816814 0.016680535027514765 -0.44269050182432923 0.38862732805702294 -0.7482481367913913 0.00795817423928935 -0.3000246665982782 -0.7385580066745632 -0.24412754271116488 0.8637115543135447 -0.4955100041471159 -0.9253918833919272 -0.9116635727124451 0.7780036923792011 -0.8222742077100256 -0.5857280578837047 -0.6748038825613798 -0.26076905002923656 -0.6500736222302961 -0.31628117233122577 0.2166244270842257 -0.1437342353571085 -0.25454956177844346 -0.1961438913525273 -0.42293310442283727 0.8648499784794728 0.7262641708301005 -0.019885663807575282 0.4370289335162991 0.5439348146195111 0.8516635687614904 0.806834743711732 -0.6480316467048945 0.1276696272726381 0.7264978908653885 -0.9314739965922272 0.9401982024258451 0.14666752116551107 -0.7848905581813497 -0.44766567430630655 0.027536890276612436 -0.7054744912117235 -0.620200074199097 0.8132954046063983 0.09474555325436729 0.6921204550409807 0.2868175332685854 -0.5278486123547559 -0.5497723966525851 +94 113 -0.040109545268143254 -0.3095462033417493 0.524391427586016 -0.9327769289363144 -0.832793908729206 -0.572398566280709 -0.4500799455142963 0.43091812664702744 0.8982178884748808 -0.8520015094544771 0.21205421890377107 0.05727651815590673 -0.3913806544550562 -0.5078187624789865 -0.44929514288154837 0.7699947100538451 -0.877564741444633 -0.5245808513311592 -0.2795604276409076 -0.14434551147694252 -0.4229420441489786 -0.971285996306146 0.40656293947980937 0.011450879315754392 0.10791638989390684 -0.9062512747622646 0.5140850929774157 0.8553044198369306 0.12103813831617782 0.14910749446465354 -0.2510259792747884 0.5155981505117828 0.43850149631236324 -0.05800029629169012 0.028824644955445677 0.2722911148907099 -0.783257044380141 -0.07627887810044398 0.21315472092175725 -0.1901205693640431 0.8163403357020569 0.9603517993428758 -0.985897853457619 -0.06659771366165423 -0.7593584918456564 -0.6514060139661726 0.5208454757855769 0.245172661367147 0.5566967693634832 0.8960074613933537 0.4538128170959317 -0.1709283106307955 -0.9277000589064726 -0.8417249728611351 -0.23125248191307946 -0.5929874412456428 -0.22124770754582124 -0.0726815006793946 0.2871993925140792 0.9402599906931794 -0.31373323966155153 0.7694648960656585 -0.1318306297448424 0.07089781507648185 0.2997021342308974 -0.39782356755542003 0.21155214442219972 -0.1125629526115095 0.903973491520687 0.755088913309341 0.8107843196543811 -0.22085360561926604 -0.8630212982469976 0.8860632261503918 0.1139208447512623 0.4045866152966011 0.05988531077491088 -0.18812115142662922 -0.6043329947246678 -0.958254079204854 0.27501183659968165 0.33155598370506123 -0.7887839733931861 0.24870739369229033 0.46279713438184844 0.07048356683222234 0.2964914591699812 -0.43605068460198715 -0.6335077505667941 -0.6492516572346227 -0.6093947804471225 0.5676312079604964 -0.08768103883559242 0.3484906212549499 0.6956772413536518 -0.7741945824256953 +94 114 0.18648801006049087 0.05305445408976328 -0.4990435270896143 0.8652428708277045 -0.7616505208062709 0.2288430315139014 -0.6166874725266165 -0.49269584159017477 0.8160036160548323 0.5662480803473906 0.5680679098701282 -0.9379328208551214 0.15376408767844962 -0.41764384469730165 -0.08268086730116142 0.3906379740053887 0.5279254468468135 -0.9277021635422731 -0.4546128105752565 -0.02826111294399314 -0.610605497647803 0.5381702842316773 -0.35610870561250096 -0.26086848435429477 0.47216280416357814 0.732243607323118 -0.3138978655793543 0.806005159839559 -0.40592601652943294 -0.7088922435224709 -0.0037823727407024776 -0.9430775808798082 0.6530716587072112 0.9513721596562597 -0.9903501904918144 0.28685040501019143 -0.08244629438957429 0.7840826345369698 -0.797672290108072 0.6068059953918503 -0.5720583713907808 -0.5630913940826219 0.1304936962402059 -0.3857652543422805 -0.6381542774844025 -0.11841568997159202 -0.2337727255920632 0.6770438378731269 -0.20278477502664405 -0.7354746691866925 -0.3069146774842437 0.3110574700374449 0.7096949237130272 -0.574308482575153 0.35705933715108884 0.6713377234408102 -0.6696368904197445 0.11554152277186036 0.3697725842577846 0.6562761542293354 -0.8743806570048398 0.4216608854814885 -0.6010248575295667 -0.9253970346358644 -0.7814550817661672 -0.12365721544266228 0.36306878275000964 0.3506292344228652 -0.880001002243805 0.37870784564226634 0.9395039175272408 -0.9933149015026255 0.3084090002459903 -0.07519089469883 -0.14053071897686187 0.6485678253690201 0.09010211179432726 0.7222062472417412 0.675712000100728 0.10090218051246724 0.5977698556229827 0.887690335571258 0.7516528562194611 0.7601194640674818 0.6844987862962688 0.7280582546814334 0.5370241055853788 -0.4519414620658784 0.989734593056443 -0.9924966276524332 -0.8378607489204377 -0.7489388193192721 0.522747368596072 -0.9786494875995224 -0.3787301065250761 -0.993629614042878 +94 115 0.22762934882717167 0.7114080605877064 -0.4473557859374768 -0.3055784337965506 0.30350989161427044 0.1725997696250563 0.03618482310748594 -0.6894050894545203 0.40893678415245627 -0.6495746210882245 0.2141433742349046 0.7138330555023209 0.38138084925010074 -0.4191963134345471 -0.034423153746716784 0.12671163175279165 -0.015197311021047932 0.11243000065101483 0.3883525999745632 0.045801119513677824 0.505121029097209 0.7046114954937035 0.13301000673224284 0.4797229325566872 0.8142625112935884 -0.8370202266728946 -0.9464790236393363 -0.8429193209016104 -0.8956419846900452 -0.4307880044780972 0.22510732075159035 0.5363344519108046 -0.4987243238400558 -0.1469288554839947 0.005366093163870822 -0.8329044103667569 0.42373121436611894 0.6719984517292144 -0.42305610231652335 -0.4153683434152875 0.34619113950529257 0.0513341900350337 -0.22030124225584413 -0.8727871170446104 0.015954229402456832 -0.9577257020540482 -0.730154680734086 -0.8937799000298585 -0.7980162671963769 -0.49836113601869214 -0.21761842559327804 -0.7296729925818752 -0.7207604408890531 0.9190787693624705 0.1680966445173686 -0.3364851364899719 -0.19517900422337076 -0.9966415686264072 0.3969447377704669 0.09050181394593504 -0.6713470160664372 -0.7261369034424601 -0.4469831548912757 0.3218165282125913 0.3878899765437698 -0.10478939383809971 -0.31503453254102576 -0.1772447891797122 -0.5809019597732525 0.5765018679483616 -0.7449983672720255 -0.9934370916968798 0.8549960986202325 -0.7565978570581979 -0.2034784042648634 0.10564678476904676 0.3321613176225122 -0.06751771696073083 0.634393159266134 0.9806979731760452 -0.813645933641034 -0.0542531112552993 0.14114627625057996 0.6280738225736717 0.879058336541098 -0.3428007130159052 -0.1805428470288577 -0.42116878395607515 0.7758983657384517 -0.8508847583810393 0.5012085382378044 0.33834719655197754 -0.32877983718984183 0.690200563003099 0.8565386959746235 -0.3035828951482604 +95 74 -0.40414548827383134 -0.6073852464278027 0.7416538073905707 -0.8641576930539345 0.7126298604471539 -0.34983466170647004 0.8541946054932239 0.2552045598805657 -0.6467348014367531 -0.15507586773072402 0.8296256457504538 -0.2453146803919941 0.34892208241222233 0.6090856656200947 -0.13316639727878887 -0.43051698618540746 0.9061257515763816 0.642107073932449 -0.6705478645876211 0.3605178506574409 -0.17091080033216688 -0.7630841219188522 -0.4249719235793974 -0.8889406181749766 0.3024138590559131 -0.5348695861154231 -0.6442474394511939 -0.1962270679479894 -0.684807806036043 0.10581778676666231 -0.2599071455732769 0.87267133147595 0.6189921748754013 -0.2345800702198848 -0.8504020539381505 -0.764058212484751 0.48263509778467517 -0.8067551464019138 -0.8492582974036575 -0.6048436468391019 0.2305882529869263 -0.5203464299411409 -0.8533664453629066 0.14825030292902808 0.568716941833679 0.15695146988337516 -0.833399694129253 0.004162139514872321 0.3415219957010822 -0.5180241966594465 0.44377958929955863 -0.9910504565030822 -0.5358748650074419 -0.3660622296127045 -0.3966020226945377 0.00810100599479413 0.5729021371808611 -0.2405628324307032 -0.8341959593716008 -0.6088621940306174 0.926845525407155 -0.1943669710584306 -0.0727524393641572 0.8793317162286598 -0.23325910946586426 0.3652896993969019 0.2549436716711564 -0.059461370369688016 0.8567795878633626 -0.5836194511340538 0.40461619534051674 -0.5935325335792545 0.7367743625715759 0.9252920166922065 -0.0811701518296617 -0.5115275066671376 0.8989504606460617 -0.6315974590407472 -0.8413561027790515 0.0015940055598064884 -0.5236353145174557 -0.9166853164041255 0.077649833169118 -0.526191335582495 -0.7212540632398696 0.3847412131022345 -0.5426317841558057 -0.19147368319663705 0.7740521003371661 0.08062893891703227 -0.052657614165180444 -0.021146827213150532 0.5435573715756923 0.8564851190197986 -0.31940466363681375 0.4114903238133658 +95 75 -0.08128323645778024 0.5518607075321023 -0.7853405131048914 0.3555211751560816 -0.6549180011257498 0.23941946710873907 -0.4010393875670877 0.8573276289083132 -0.22384222961861777 0.7908932488648011 0.1693596537291997 0.13727976623174176 -0.2875418896178632 0.026765946517300687 -0.010795653439852115 0.10213303846101152 -0.5503598021951042 0.2367605466552236 0.4390482640544744 0.39940816010330416 0.8917706742060583 0.3721585453938858 0.06263949531535729 0.42108132538988197 -0.31312392861775784 -0.5967813460472755 -0.2947278824030053 0.6446338177051882 -0.9044406582546081 0.14211391836244291 -0.9452898917729189 0.2521986123113442 -0.989545485420106 0.26272429666510466 0.2843540941074778 0.6987344142546716 0.1406959334120077 0.022890280987749367 0.9456683390851064 0.5048426113656463 0.5537056331030323 -0.416367506071339 -0.41960788754940803 0.6454643115143031 -0.5681262768913171 -0.10148376984354268 0.793110102721561 0.7301013562501648 0.5066803852581931 0.2400691662841472 0.2007389751703721 -0.8543322716442543 0.2291534447502388 -0.7479005267703172 -0.8887851668865425 -0.5966630855820567 0.3379224049648262 0.5455904883829084 -0.6201624384280577 0.01632720758089512 -0.12172544974809507 -0.01927016463492426 -0.1715862397813943 0.7953739012644383 0.46702427839067795 -0.6124084771709506 -0.14906336871261616 -0.6366517162634835 -0.7327193078953547 0.2248503368281365 -0.08799841962652089 -0.03969892491854399 -0.6581903826663655 -0.7290866124534476 0.6389552231244411 -0.7089828124716733 0.8005195089474832 -0.8489261218565896 0.6552940178203568 -0.36760669571232496 -0.5413945183592874 0.09793660174494456 0.24072143151016134 0.8157651959144738 0.9422028723570015 0.6864207541179421 0.8900363272164047 0.9074974662800415 0.9351690127047336 -0.29070545873538567 -0.6706048074859017 -0.8791915507415715 0.4757678274561523 -0.20636024749929893 0.15394726078474275 0.917323894166538 +95 76 -0.8732316906956079 0.8521726917174679 -0.5545941911688055 -0.2996695424460081 -0.6408443681663749 -0.31761422745993695 -0.9049888624683429 -0.07337145811981105 -0.062444099511544726 0.5910843429991661 0.9786762528883488 -0.9654964633029723 0.621751047639959 0.9993297614570824 0.4634043940415744 0.8850644597380439 -0.556226134274866 -0.49287692298255537 -0.5719162451864357 -0.7414180070993326 -0.4862097113185819 -0.46564071777674276 -0.8003536945238203 0.36581272868178094 -0.4006828423961468 -0.10849359720407592 0.2508940035987357 -0.595684465556285 0.18801745419761295 -0.8089249701941683 0.2800418716226569 0.8937664673759695 0.5135042303249704 0.9474455980752752 -0.15802348162552482 0.287989572697112 0.00719627998877681 -0.06538521419732568 -0.08054972144838346 0.4438805893831399 -0.1785948596150324 -0.7451986026195603 -0.5498552555801859 -0.5378131928774765 -0.9599472237240316 -0.6304898846648812 0.7768775145872713 0.3392685837251408 -0.6459739153702484 0.22199996646146203 0.7121605435106415 0.8861274454245867 0.5197248751425914 0.39861653273149367 0.23819136699675814 -0.6127053030948035 0.8487185738377458 -0.44488643968084185 0.9544416662875541 -0.657713344819413 0.763842005791223 -0.5148468676269404 -0.5813268953474566 0.22282079218111184 0.49202898770474235 0.1921131571972421 -0.052530194908877226 0.0011929629328952807 0.6793552080477507 0.4205693883497357 -0.7908581925634592 0.930356649097867 0.2244192831646552 0.8348471448551085 0.4713881024759692 0.5930280799585692 -0.09140277741521041 0.12309519960281023 0.16095938312487856 0.1087060330766525 0.6863231930300784 -0.14663748351500017 0.4327998208857873 0.14450374661865295 -0.2688939063807576 0.7868636563521549 0.6075515368656357 0.9006251823933524 -0.7495278852623237 -0.3752542070868601 0.8987222593747579 -0.5773645709331843 0.23974289107170277 0.4325449029344106 -0.9946038454100086 0.5086091648417559 +95 94 0.30659017400349775 0.6652201894534326 0.9172989697948153 0.2763761910935456 -0.021593850357077837 -0.8845785577831373 -0.5799143874451089 -0.3817474124892499 0.32966510331826093 -0.28860479795067606 -0.2414792634586278 -0.27521257683451483 0.28632026833326796 -0.6996661033304261 0.8336885422775846 -0.6465641234928092 0.803514854930834 -0.9016574586652599 0.17854749374379075 0.7620591363019349 0.6403017285066857 0.9755296731071179 -0.7658209055479239 0.4210819160712145 0.6030886986397868 0.4243591144671457 0.26590727036995765 -0.49603203389702744 0.058272659733818566 -0.04602815017168482 -0.5403783058112008 0.9905915640965748 0.9682130054165929 0.28070799252094947 0.8605058658039295 -0.8591703427132154 0.47880366240455285 0.5441965795445116 -0.7549236313139911 -0.9231878397498825 -0.9141891167594121 -0.07442259388446892 0.45319853884256145 -0.22793367961396105 -0.3833651048337845 0.5684557427706705 0.07265350275902249 -0.39007468940816814 0.016680535027514765 -0.44269050182432923 0.38862732805702294 -0.7482481367913913 0.00795817423928935 -0.3000246665982782 -0.7385580066745632 -0.24412754271116488 0.8637115543135447 -0.4955100041471159 -0.9253918833919272 -0.9116635727124451 0.7780036923792011 -0.8222742077100256 -0.5857280578837047 -0.6748038825613798 -0.26076905002923656 -0.6500736222302961 -0.31628117233122577 0.2166244270842257 -0.1437342353571085 -0.25454956177844346 -0.1961438913525273 -0.42293310442283727 0.8648499784794728 0.7262641708301005 -0.019885663807575282 0.4370289335162991 0.5439348146195111 0.8516635687614904 0.806834743711732 -0.6480316467048945 0.1276696272726381 0.7264978908653885 -0.9314739965922272 0.9401982024258451 0.14666752116551107 -0.7848905581813497 -0.44766567430630655 0.027536890276612436 -0.7054744912117235 -0.620200074199097 0.8132954046063983 0.09474555325436729 0.6921204550409807 0.2868175332685854 -0.5278486123547559 -0.5497723966525851 +95 95 4.789866610416798 5.1796865871700275 5.900292446830306 3.7372051191814375 5.053063469184942 5.0636418498168325 3.6930972531984816 3.353126991089707 3.674309213755305 5.083093766719459 4.743254765709838 4.8387761059434755 3.9212713294456307 4.743677466102639 4.523466883879478 5.285231053391916 5.487052859416355 5.1503032461443015 4.030861178281372 4.256074990889456 4.376837450597653 4.278125275412957 4.384614828792218 4.987786720834364 5.498498900620394 4.111839485559599 4.763619977218054 4.82220291145377 3.4333842055330694 3.2672873577898587 4.865003179871862 6.6029571962401405 6.759601134747146 5.349443783598091 5.733407044871726 4.863292156837353 4.263377594519325 4.142907512419729 5.51601356119664 5.491326897816879 3.6295829369085686 3.247836756223606 4.89010405293288 5.0986770118933 5.000398120130415 4.976277312509487 5.448956248243132 4.711309679287643 4.90429020927533 4.332643604954445 3.8170476601131673 6.393721304460005 3.0018861128015812 4.087252164408927 5.110439028105398 3.9185599367794284 3.8235723641282604 4.149030595570293 6.438618610344516 4.960033056297439 4.67328411689004 3.3643501467003913 2.6530210314012246 5.12246671834796 3.7960238869276397 4.857859682435959 2.6482063580911905 3.719778042070277 4.861383674763198 4.718977909544099 4.886552065103596 3.60515805484053 4.705832175655353 6.241927109411383 4.431794776423588 3.815044672776703 4.315581673921024 5.241440087782613 4.878734841533801 4.512882509839875 5.300288511300277 3.9341503583616966 4.100011250751563 5.601402574058859 4.463326686443626 5.35411432908098 5.25989756325084 3.6703853925687744 5.67844460355279 4.069906191184508 4.90977799583914 3.199099579451536 4.5682640934890895 4.517053758191881 4.8089430759572975 4.438493258571521 +95 96 0.7556155545352197 0.756795184903208 0.0009105230703472245 0.4520537482053075 -0.8631149671149188 0.7811396864007525 0.17887016699584524 -0.13910248342426623 0.8082235033232934 -0.9695627147309689 0.9441287541370973 0.7700595468845155 -0.7806581175061376 0.7254345982308206 -0.2732445656049778 -0.6557496742434248 0.05163919359616931 -0.8413831272612686 0.46886375262039226 0.07518693775680019 0.5785941630591023 0.3508082029148136 -0.2051567444117215 -0.31916885814414453 -0.78639206898706 -0.5352096920871316 0.867789128699092 0.7644913403574296 0.24174121807426419 0.0032259884165057873 -0.8537470183270419 0.9623745493030749 0.8260942283343702 -0.9833188506201664 -0.8213581802205645 0.6116001558649742 -0.8760233794830412 0.1963674045919015 -0.32100303818282727 -0.7707730782967988 0.08944152300130681 -0.015258809556739195 -0.458029691239749 -0.5018465071047455 -0.6726755196043506 -0.802992013299461 -0.7380263791358324 0.5584521575003853 0.5676963327559903 0.5803607035721507 -0.6229093020573802 0.0959359978111558 0.024020775992588117 0.7945093329065809 -0.857818025088759 0.4256631673200939 -0.2161317212687548 0.30266879728598095 0.5610527835716754 0.7408478433439643 0.12662417078883048 -0.7250221420585827 -0.31948016959908254 0.06576181244994328 -0.43591288927202787 0.40799275428644943 -0.7825397808206744 -0.7578505097096124 -0.2141697804973981 0.8152546342314504 -0.9923601671723921 -0.032285307610363745 -0.47817694816390066 -0.9025557071896373 0.5032091938202732 0.35804049257985215 -0.6618816219347603 0.5638703010940684 -0.3088271482906737 -0.8440018075435394 0.883924640865897 0.6302939229409992 0.329135413910292 0.007549313743716146 0.12726997176503896 0.548577020102085 0.09306812576628731 0.07700988623394611 -0.8112432412412902 0.3347067678697402 -0.21490934614589663 -0.3929373718070164 -0.43283701355957493 0.9074859678720157 0.8579630158578615 -0.7144761282782681 +95 114 0.2588616711310514 0.5828599932166953 0.7411570391645008 -0.9738082302698254 0.8915624494639158 -0.16756542448573453 0.2593412745248185 0.11504454315151502 0.33746107507938605 0.6300376347822856 0.9518870724303483 0.03296783011351945 0.2876905858736878 0.2263263176109005 0.611988073008435 -0.9982735143808608 -0.7399799489311079 -0.2919544837787398 0.42451321994556634 0.7692769508743214 -0.24495872820109454 0.4430416486722002 0.17341216680574068 0.9307925457023958 -0.6490720594559221 -0.744923100598621 -0.7710381661707775 -0.5154673442852924 0.21915885038484184 0.123297620182927 0.5094669212928604 -0.6353269710209537 0.4106280294165716 -0.6135041179945788 -0.2690893427127625 -0.23944338682321886 0.7060966489497549 0.831298812656863 -0.9948620594505526 0.6425840446791309 -0.8971272834244848 -0.09460812094223225 0.7878275526124789 -0.8120543034168717 -0.06654865761095374 -0.8720249831158753 -0.5465787387207719 0.733735230774317 -0.8670508513160406 0.5887626336432872 0.7790855120973892 -0.8496019328838953 0.2579315923008745 0.1513759547863578 -0.5110124050241007 0.287467696200733 0.4031720060015105 0.5596910486176283 0.9438783231555596 0.48987770199616976 0.6517082843891975 0.2978559484004317 -0.5508497219464981 -0.9196429040963625 0.2466125551292011 -0.7264127753798992 0.42320474307187284 0.14997708430595225 -0.3327254734931011 -0.48752791000184903 0.6209272717779828 -0.49634135409023394 0.7110054092359834 0.9306748252721737 0.8660284711189612 0.34657542300905364 0.3501185104319444 0.6224862148892609 0.25483555784502565 -0.8225184791993605 -0.4858022228026124 -0.33607903791500293 -0.39841235679780507 0.8961057513109505 -0.10898632979269052 -0.8177001773223207 -0.7590542682083448 -0.5791953341161407 -0.27855876340239494 0.9664901663110752 0.8819203347920566 -0.061463932391330856 0.3514277764428284 -0.1394148039101235 -0.5602771096157007 -0.5763479443703696 +95 115 -0.4452157246062276 0.5015707108121661 -0.35391355789727075 0.029487255676273083 -0.5911458226698443 0.9562978334864662 -0.051894078218850836 0.6939622132397276 -0.022196284856699 -0.29761826848946793 -0.37069499355271884 0.9791305178545227 0.5848784748697791 -0.46704932452897086 -0.7196875832884064 -0.3868707167661598 0.7705709578228095 -0.7393709243462805 -0.6775948004453374 0.39646601943659365 0.7834925279334364 -0.06938353544864806 0.5760442369560934 0.7857823895997664 0.6286403759068124 -0.0843556608370688 -0.6234254567848188 0.3574362723978275 0.11429765982175577 -0.7918962706731036 -0.5152474512570968 -0.9953332167333349 0.736872318214709 -0.9920648401274597 0.7262334255091847 -0.835789009790946 0.4649020707281819 0.33586030073497763 -0.7593521397385186 0.3607140350514393 0.5408577581169995 -0.4344825443664788 0.20911495483654496 0.8827610481015438 0.858754812484342 -0.5027842585896865 0.22035597888111447 -0.11235396697947575 -0.888811565958088 -0.9319118337589392 0.10145327093232726 -0.805666454525507 -0.05336389334952729 -0.6036990954952952 -0.9448117462473737 0.7771528578881912 -0.0007332085464881732 -0.7460261586608281 0.9504051944983392 -0.9449783288176836 0.15449764422832013 -0.03488300233024222 -0.1777442013341044 -0.8544755795847612 -0.7897047854419148 -0.8654414909726185 -0.16131560795990496 0.506118967771219 -0.9768664840630439 0.5846234442316722 -0.33683635479672924 0.754972154698885 -0.32840273113012075 0.29467367392148236 -0.28659804566718816 -0.25201020440952315 -0.13128620449005957 0.3524467698893081 -0.2041650402446249 0.3147565500710061 0.8342470604170247 -0.27175245004217685 -0.57130456623538 0.8671906786995316 0.8126583633873368 -0.37553053398126046 0.9381576490056216 0.5403344934945011 -0.4478160872117509 0.7666558385312765 0.09578737778522695 0.2694163696301046 0.509557265750727 0.5008630405188879 0.3817821476289458 0.17063098624425277 +95 116 -0.849404924316578 0.008298397331647278 -0.9075867461770224 0.38440769876708125 -0.4857908907467161 -0.507870998506736 -0.36165468096077347 0.4744182198627398 0.922705302406986 0.9192186285031618 0.1683832434746524 -0.8981494732360775 -0.21238791722479777 0.45164223477586907 -0.6274759792438009 0.39762926484067007 -0.7586184049959539 -0.9344304305850037 -0.0957642786661359 0.6136756460156474 0.5258899365257665 -0.8083591624706061 -0.623485880513478 -0.8539032962634581 -0.944208254229431 0.36794613902747253 0.18396517180785854 0.5187281429322141 0.07036463615510202 -0.6352487082599687 0.21658600687184304 -0.7657653687470816 0.7528740854433795 0.8702720473633088 -0.9522609059124623 0.4394057353988483 0.8608461879826548 0.9733152061185602 -0.526387924906891 -0.8020920243692324 0.18542438302523512 0.5472779137772035 -0.18724715750057364 -0.7638652968312829 0.7572057199889695 -0.784086110143563 0.6406509305355785 0.9449701491249052 0.9353273297202822 0.32610926615226 0.053163883138319434 0.6318878630324549 0.4750628401878332 -0.2150644524360692 0.36060572839385574 0.6658204101663987 -0.3144798155737716 -0.2926040196568356 -0.38970801153363066 0.16708419235880223 -0.3864581745657847 -0.47251639797083533 0.18007956948663661 0.34019989416293606 0.5150139398569296 0.11890189275058649 -0.3350693011469861 -0.6521145568868065 0.11889798960667397 -0.7819134156278433 -0.772793375806178 0.1184330548556285 -0.6396919537046195 0.8113116383420351 0.8684101085101641 -0.17345279876519126 0.25512497848255977 -0.9340629000255916 0.6522501057734995 -0.5278730901452486 0.6770770166409386 -0.5418545068840588 -0.49583592122184306 -0.5578446069957539 0.3415788638098405 -0.5443819717162786 -0.7355628266941376 -0.3767291897986045 0.06394775085440152 0.22720441562384552 0.7885348995645456 -0.41467356698806856 0.8486808385486386 -0.25388157054713023 -0.4033037311351608 -0.4727603107196703 +96 75 -0.4529332714258145 0.38901906443567325 0.9602540230673551 -0.25775662633560525 0.5336583918949136 -0.044303279608884916 -0.047575610677975 0.5369312654555696 -0.5381757349775738 0.5742841151437834 0.7778012701545254 0.21199402293144076 0.5004862598667232 -0.6523683547321555 -0.38065526071886846 -0.35701769801679406 -0.7730336488178793 -0.9093387592083866 0.49974698866831035 0.18453186155135093 0.11830046153369023 -0.28146044428968375 -0.8163565578734633 -0.758560964884271 0.5794888275854171 0.5905950327670226 -0.5640038306953836 -0.024398918427355643 -0.6494175987489923 0.9101328198393934 0.2534640382551736 -0.3647282161540315 -0.6149993942708307 -0.44170525642991043 0.34390012083908594 0.2715886011317463 -0.14413940237394507 0.800269235350765 0.8620450355496783 -0.4739610064227655 -0.38333458295064693 -0.11137515809415954 0.7374445019575431 -0.0029452003810195304 0.12410581569915591 0.7540396389794528 0.18106685700016878 -0.2356151769828878 -0.2066763402905949 0.23392044803485712 0.4266689748753163 0.6178859423922587 -0.9222303850409554 0.35240595384523443 -0.7411020397000958 -0.6087519790661942 -0.6140725973569621 -0.27951588054379295 -0.3526703867066263 -0.8585707932205862 0.14106851879476134 0.4142587060609544 -0.25190498556213514 -0.7008386270665101 -0.4807221079760178 -0.3899645779191925 0.6768324904088359 0.5404431532593275 0.608750729550483 0.40520027162432015 0.6025236065325152 0.9883866399078072 0.8657393783635516 -0.05881818423993024 0.242438032489813 -0.7000755960281997 0.06646099116964743 0.13608963162179588 -0.7972198381161308 -0.8326764387721326 -0.1558045196011293 0.19551956952776028 -0.3275997932925363 -0.013490244728225464 -0.9392025648934041 -0.7703962045165951 0.21584062395287873 0.46534237283936886 -0.27014200014182466 -0.6673868701076717 0.3396047803540352 0.5652956499074362 0.6748578167655079 -0.9450040430171662 0.17604644414161807 -0.5114831878483186 +96 76 0.3465584831617976 0.5609053187816677 0.9818744891062758 -0.19996311060290695 0.815720245735656 0.33559728959681556 -0.9871862696692137 0.711486781107346 0.04348980962087001 0.1867165894042635 -0.8076669910778203 0.0813990870678658 0.04860999542644184 -0.7225691907291218 -0.7489427861192692 -0.003919631374734944 0.5980484529399424 -0.9235982045770166 0.7715156787753881 -0.6833535880624781 -0.9704622442383641 0.6317036405117109 0.9951011868555613 0.7875201599995127 -0.3125236619737941 -0.5223764097313954 0.6552526281409323 -0.542646086648646 0.1676483280058887 -0.359626890244342 -0.7070127783908127 0.9022494596091646 -0.03276915713169415 -0.5181476969616954 0.03830221078530438 0.35354012010865343 0.8629955341469986 -0.06624564968433932 -0.15934041727589388 -0.9781033058293367 0.5180119792509188 0.5721001149926834 0.6114530990138072 -0.18956622460335915 -0.2659564714488678 -0.7485823590357208 0.017952722405214505 -0.48221563249493316 0.356019563907491 0.5978134187043431 -0.0012048849241061976 -0.41206399856377374 -0.15396286476511567 0.42170908405589413 -0.4401027735777969 0.3782691332630703 0.9780701376026504 0.7791481880928322 0.26482845956785583 0.49757475179302313 0.6675841417846498 0.4845459799263214 0.0032914043853644603 0.19988593845926195 -0.43658232724933277 -0.12955531000388332 -0.10233160422660381 -0.6783368185590719 -0.5450853714187458 -0.14740574278462804 -0.41565653276948633 -0.6151424005432533 -0.8553914542236867 -0.2573706646709786 0.9472846660589631 -0.8244603982671825 0.43046365516253826 0.26409538725947357 0.2896321069632295 -0.3084174938822659 0.3383210369716463 -0.29169331148700905 -0.5743672403729092 -0.2557918321299999 -0.23959954256445082 -0.15150305918460605 0.9992546229275814 -0.28871751245206934 0.694947897135662 0.6534760544139271 -0.3827134865967563 0.08658445129091041 0.15349077969121128 -0.47198937176077815 0.6309093239407992 0.9532460225878812 +96 77 0.9320531585197829 0.3407548597544343 -0.44518228554476114 0.8302468188835854 -0.6869815376266466 -0.4416971223727484 -0.3018814987104319 0.9415617956698152 -0.4495762938305947 -0.39689782260237627 -0.39727356151146886 0.30748076862700624 0.24347703882465055 -0.8782117251712946 -0.5595228528660632 -0.6802754329659082 -0.802851002172156 0.37592852579071634 0.49413229311007756 -0.5284392549236467 -0.25266663993605687 -0.5521279477416081 0.4780938499756531 0.39353013823523364 0.340113944406196 -0.9227747245285096 -0.42719258028521967 0.2606674332492309 -0.4367817148983639 -0.2708606634554309 0.29337244749232383 0.0479157022390988 0.7165216910000256 0.5900927229234776 0.8878260561895239 0.5707278537688918 -0.9453345583730044 0.6236853037913201 0.22680309181298575 0.7487519578442299 0.21599958275126263 -0.5354220140007537 0.22467941233089928 -0.1799405017884126 0.6776640822212212 -0.6243733571313386 0.8393461732057843 0.33616128536736656 0.7387678007419327 0.16695940068426496 -0.3167961469381837 -0.3167392631928043 0.7378809501116181 -0.22038072120144747 -0.015765578017956416 -0.8621102378315166 -0.09865875260556822 -0.8818851026789736 0.5132669334277828 0.571012689819103 0.044406483565398114 -0.48737246427186 -0.19870189808554573 0.16838075509541928 -0.31771795095554145 0.5177550330586054 -0.04549446082650288 0.4456248198064614 -0.4982417417418512 -0.18374025935744576 -0.5505025599300968 -0.027304172931975623 -0.835962273037725 -0.40046199646700864 -0.8893591135261558 -0.5980153658089267 0.7250196423872786 -0.09575741579264485 -0.8740697673230609 0.2882836245188034 0.16981406275005995 0.8110253558767249 -0.5124618059003214 -0.056487671152269936 -0.46698580936904666 -0.6737571887769622 0.5415441567075343 0.18098282722890957 -0.04487432953107673 -0.3991662708382211 -0.6265274878339195 0.1696035403891174 0.4475512503863479 -0.6566894294151977 -0.947112805267722 -0.9147982404931436 +96 95 0.7556155545352197 0.756795184903208 0.0009105230703472245 0.4520537482053075 -0.8631149671149188 0.7811396864007525 0.17887016699584524 -0.13910248342426623 0.8082235033232934 -0.9695627147309689 0.9441287541370973 0.7700595468845155 -0.7806581175061376 0.7254345982308206 -0.2732445656049778 -0.6557496742434248 0.05163919359616931 -0.8413831272612686 0.46886375262039226 0.07518693775680019 0.5785941630591023 0.3508082029148136 -0.2051567444117215 -0.31916885814414453 -0.78639206898706 -0.5352096920871316 0.867789128699092 0.7644913403574296 0.24174121807426419 0.0032259884165057873 -0.8537470183270419 0.9623745493030749 0.8260942283343702 -0.9833188506201664 -0.8213581802205645 0.6116001558649742 -0.8760233794830412 0.1963674045919015 -0.32100303818282727 -0.7707730782967988 0.08944152300130681 -0.015258809556739195 -0.458029691239749 -0.5018465071047455 -0.6726755196043506 -0.802992013299461 -0.7380263791358324 0.5584521575003853 0.5676963327559903 0.5803607035721507 -0.6229093020573802 0.0959359978111558 0.024020775992588117 0.7945093329065809 -0.857818025088759 0.4256631673200939 -0.2161317212687548 0.30266879728598095 0.5610527835716754 0.7408478433439643 0.12662417078883048 -0.7250221420585827 -0.31948016959908254 0.06576181244994328 -0.43591288927202787 0.40799275428644943 -0.7825397808206744 -0.7578505097096124 -0.2141697804973981 0.8152546342314504 -0.9923601671723921 -0.032285307610363745 -0.47817694816390066 -0.9025557071896373 0.5032091938202732 0.35804049257985215 -0.6618816219347603 0.5638703010940684 -0.3088271482906737 -0.8440018075435394 0.883924640865897 0.6302939229409992 0.329135413910292 0.007549313743716146 0.12726997176503896 0.548577020102085 0.09306812576628731 0.07700988623394611 -0.8112432412412902 0.3347067678697402 -0.21490934614589663 -0.3929373718070164 -0.43283701355957493 0.9074859678720157 0.8579630158578615 -0.7144761282782681 +96 96 4.714213931582492 4.513005168602542 5.296320707115866 4.8829986939271 5.372026293719713 3.2420146316806853 4.727469675661609 3.9907240258912733 3.845139331936324 4.091420316573885 5.488000178207774 5.2795471183160245 4.169126213312207 6.159839922226591 4.758142908467291 4.136455064013927 5.405164311455142 4.204979744296127 5.108181126423323 4.184987920137378 4.156416051546875 4.5699658828057395 4.952283618841926 5.178818686605925 4.57895810781551 6.061279040494182 4.690305441475014 3.9234987229308236 4.096080935117972 3.660005258198984 4.772607633391351 4.584959997451696 5.048435024511995 6.1139878590126955 4.085600988360833 3.903753179558304 4.584694106905669 4.256029410877401 4.823795965964279 5.615885644459871 4.749732385202762 2.7406289963936166 3.891929021500257 3.7675863979666726 4.617446637398329 5.555080630032037 3.3702830262010828 4.234611236306928 4.665721589053784 3.571666453937042 4.058842833046819 4.920382870983917 4.0710982864389385 3.7940863162664167 5.185011925033992 4.802232324420956 3.333362301621082 5.115470613282113 2.8263656107388693 5.047501460684782 4.468883639503865 4.803233248286656 3.3118022648020427 4.074157026575225 5.043623377811015 4.830675803036882 3.0258073300385044 3.8736104495273604 4.128387504413531 4.437623856377343 4.722501062176952 4.321659315200867 5.008066886260727 3.698341531898122 4.537832144671842 4.583055610714625 4.937059720500233 3.272327212071206 4.843770478010379 6.026071317980852 4.396997939914217 3.841075025191199 3.588035430655454 2.315321331205146 4.583176897491647 3.9872929529485193 4.97056322841579 4.321529485221562 4.7704840049107515 4.96740873026248 3.8156190002252752 2.7197463542026403 4.609581338857595 5.702030248272889 4.89983862372279 5.720986762582566 +96 97 -0.7773283832790507 -0.6583249425077595 -0.542356413666949 0.6783601269709014 0.16396811281995638 -0.14267768810958703 0.9185621290704242 -0.5637672773112201 0.6781362482769946 0.09777056209258683 -0.28310269519756637 0.9335457746339106 -0.3822275075465029 -0.8462061200538264 -0.8616342263897367 -0.5560613877727696 -0.6840272264899467 0.13666483358726156 -0.07372522040351726 0.5212745594504209 -0.4781183518841301 0.0899794032181569 0.17987594870816004 -0.7718535753463132 -0.015261092192268455 -0.48676412881661957 0.16479186411765645 -0.15637591992254674 0.2840521322491638 -0.4831704820068321 -0.5967007415784324 0.9747642780007821 0.7189790282577135 -0.7751830908627912 -0.5154870173522399 0.3977307566628807 -0.08745918651838847 0.4777479389694912 -0.7254732763255882 -0.2828684527625924 0.05938685956669887 -0.3646843418777528 0.2296264782767854 -0.5927999992453912 -0.2639546604876666 0.02515822038889537 0.3421450798600876 -0.6323650208608407 0.11921907838506063 0.17286213721755606 -0.11999690017159836 -0.4135379071374796 -0.3070296577510052 0.6185943167579337 0.1550937584685883 -0.46884353333859696 -0.380464039324677 -0.26318401376199696 -0.08335780718050922 0.8948698321865087 -0.5937113168309696 0.943127460007519 0.15907285979846342 -0.3655649719787124 -0.5490266077659132 -0.9441714374959125 0.06407164984226554 -0.35214283392920054 -0.008845548010492532 -0.6902847574649533 0.8624023438344794 -0.1370887628203441 0.6591776453742275 0.34174669618501685 -0.3713257703264532 0.009236058441415729 -0.5133157920274853 0.23220482958386368 0.3421685119524369 -0.5375863019301304 -0.5286636491791616 0.6159281546072848 -0.5396276507435582 0.05727871823077435 -0.7273452135602998 -0.5259941248515703 -0.6133083015227592 0.38050463783942123 -0.14425517272516197 0.6296925508694857 -0.47831032709907384 0.6726364489031307 0.9277968082554071 -0.9284280618083363 0.23674212040406273 0.6674489781262314 +96 115 0.21239480550174172 0.7949341909030463 0.4127984044133115 -0.7757528737708732 -0.0011313584277381494 -0.2668911072994813 0.9044179684115523 -0.5541603495143168 -0.09355672940022597 0.6070580536430743 0.7938662566118442 -0.8720972568695833 0.5656563970293271 0.8817026808761341 0.148603317717797 0.7762298595460437 0.5555105327578578 -0.07545036523369553 0.9772937136560427 -0.0011100862696200586 -0.5317602579342497 0.4873353954806674 0.7015349114384801 0.9306784482510375 0.8752742065896773 0.47785880445691853 -0.09238500146001694 0.2600857271594459 -0.8171051209757045 -0.45849853092321036 -0.43943217297645676 0.05475903708861707 -0.6045128637234936 0.6759001713010622 -0.1420193036590185 -0.6272352556312835 -0.029948875473288172 -0.9597095628921501 0.3412543044816321 0.9142645636535889 -0.9454869998445676 0.11737977294864099 -0.8480218253578296 -0.01142295135661242 0.3189435472659998 -0.5052851156767653 0.032791124443011466 -0.9647589978324516 -0.35684653105111264 0.7746014987385172 0.658662084527087 -0.8748811987771936 -0.1532035185135916 0.2377198668947509 0.7809473673486225 -0.7923031035700361 -0.0001820202948528138 0.5321372716391586 -0.6246955667220486 0.7088709869112648 0.7804662920537133 0.23850586675683405 0.8254967640019508 0.48777122356956126 0.40341170338257637 0.6522429721480636 0.41855203618848424 -0.32449180986202597 -0.9234006533723484 0.9132967721241272 0.049821437422351345 0.08636686369742264 0.47019332519681467 -0.44156186398262776 0.11024231712402677 0.2135193752111968 0.27477760620037484 0.5408267922719927 -0.8844848884259024 -0.9474174216710749 -0.7658030203441994 0.04342891194689358 0.4365505542053205 0.21400349725323609 -0.783627618147664 0.6670942559500823 0.5133112264435324 -0.44496721801891814 0.9973824882554763 -0.6672720269998558 0.40223373430155673 0.61708130448454 -0.3869660388631475 0.2562681457380389 -0.5531784320890176 -0.22451356045108772 +96 116 0.12997805234198911 0.38016289490780175 0.9513094018580386 0.557883883121884 0.9950779296707994 -0.3191656562441858 -0.2903208977123011 0.15592040875360302 0.3575426777671069 -0.4788350211083703 0.8804505847900246 0.985762871132368 -0.7431789775241999 0.14858397706779325 -0.6895544267727374 -0.19346701118037157 0.7127798589033734 -0.0239506645366363 0.5412100961392132 0.7903469914018584 0.47613283812966234 0.4739869287174092 -0.5293443607787951 -0.6652791817775732 -0.550920559192972 -0.9352499186889864 0.8855654112665927 -0.24242421055798946 0.7275311229619259 -0.08064634383500557 0.8268651991966245 0.0017819681094244366 0.354424984254877 -0.7557452526286363 -0.11913440084502902 0.008902922916713463 -0.9525906730376612 -0.018844611131707545 0.7447781948189229 0.32992171732046605 -0.8837779759227324 -0.0948526378103618 -0.5915423216520659 -0.7351244258549547 0.8612450245227128 -0.6919416947958048 0.19872487725210886 0.35215601038422406 0.7761898846935233 0.04766780145397287 -0.7749365301606739 0.4846597447504337 0.8260480917388453 -0.31909335853440757 0.7717093275838973 0.3612948366248172 0.5919838598608886 -0.5491019706824192 -0.21539106492165905 -0.015931023636048147 0.5848072837489393 -0.8679463580215363 0.17277704479539935 -0.8467597147860262 0.7557038175036874 0.8077118124008844 -0.06192591502644862 -0.46742815036738694 0.07586910886155773 0.3723679005750786 -0.8964373702687434 -0.9285553541641793 0.15464060324389184 0.024113426531378268 0.39339995510535064 -0.5634800859866462 -0.5643309761392303 0.8062920929534536 0.4396740591976418 0.8981548720095525 -0.8730675354848294 0.129897448627881 -0.024508103499377265 0.13906397918351643 0.3774552447884798 -0.1409518087120556 -0.8998938233738127 -0.7193293503159941 -0.7327478418737403 0.385557203397189 -0.4277213104886264 0.013176835683329502 0.2969776712936665 0.21970516085714453 -0.9236027389432084 -0.541994871164986 +96 117 0.1964440537673977 0.5375679460402685 -0.7127662945790412 -0.8262207734358682 0.7960912195525771 -0.16697741843464753 -0.434734711414934 -0.26427165763974325 0.2000614029362322 0.3472726314475312 -0.24084707462024535 -0.7618711791113626 0.8544548447456053 -0.7718107337452009 0.8701476536244326 -0.6097269492806874 -0.2970490667559238 0.6351764901431629 0.5233724877259942 -0.7464828592890143 -0.39879159071505144 -0.8119383755640983 -0.8306196107901593 0.34205913423867673 -0.9226482365238946 -0.9130914880222203 0.8676383510363268 0.9226365336061959 -0.04409875384800199 -0.6426758114093849 0.08018701259083727 0.2980630467173404 0.582340218910766 0.6727848446017959 0.4841266069464705 -0.24098318329646728 0.3427187419324884 0.1154870726409647 0.8361317413572955 -0.13859843340659883 -0.8455565110718619 -0.10879267173246698 -0.16582785355868035 -0.784431160278334 0.9510255406598542 -0.5396053632670359 0.4253626905478285 -0.07478296801872086 0.7658980594938998 -0.46631350331812627 -0.6055906033358376 0.9231701044562335 0.5677436474364372 -0.18346711387737913 -0.6878106094438503 0.6918010520186093 -0.36564526777929296 -0.7669568251244787 -0.01567424521542149 0.5925119630172857 0.7097493410095614 -0.5142974970633512 0.9136570438757059 0.48845305809428385 0.9714666520518014 -0.6928864394366545 0.09362263335632992 0.10120502926890484 0.858613351841234 0.509207128582859 -0.30080218376878354 -0.9505453197937297 -0.5310612149247593 0.4795695942857978 0.7996028891651883 -0.7649629958687707 -0.7821218790487374 0.15546691309217353 0.1800975761211745 -0.6706240031905952 0.6391156965345581 0.7566831002936181 0.10267704512686571 0.7737853700639465 -0.6672164787475947 0.34817710760818876 0.43990260322720376 0.8577953481683922 0.2487300700697439 -0.8943661630400233 -0.3784206510998138 -0.10162439573057558 -0.5687677224161831 0.7425737511896713 0.2867456161390842 0.4910665988404723 +97 76 -0.6034524227094609 -0.9446562318512752 0.09874958141842627 -0.37522221994529303 0.5919154907832138 -0.2388762906060471 -0.774083773691504 -0.5986671838809818 -0.2661680936143236 0.8400648324607063 -0.9327403706040602 -0.626345407237096 0.13427701413580828 0.5376353318620017 0.1541943900034295 0.6988165543643763 -0.5968701629230189 0.9911443579403845 -0.5680069359985629 0.07982691164896272 -0.8575422163556956 0.6569322767149688 -0.3791374729764636 0.5566516384197027 0.820837727315227 0.9454420761073636 -0.2640739524357998 0.009375556416702624 0.32470265743405813 0.7592281151224107 -0.5260893780954161 -0.20118344236172736 0.9133925168274111 -0.3685428658215333 -0.11243570814543613 0.799804316850522 0.5257364970992353 0.8535918697667342 0.1780725650037842 0.663934700498116 0.6395133319363002 -0.25102136037973555 0.06518762516217635 -0.48462405176940515 -0.8493582617863078 0.3485807587981493 0.013106332162342804 -0.29440685221856433 -0.7828312452775392 -0.9259474432511121 0.8187696629310981 0.5100994085105712 0.5288069949244232 0.1544736684318071 -0.5448217215391677 -0.36238313814617285 0.9563504054554162 -0.5778569800554285 -0.5110449263279302 -0.6025496169581364 0.9980043571739419 0.9590913415173057 0.19045436407947336 0.6480750000492881 -0.7120580177651417 0.7203799059853533 0.7689107359527698 -0.987945130883418 -0.676901478200761 0.2820314020764947 -0.15742376286907867 -0.26962577410689637 -0.07616163450130964 -0.2959490316064328 -0.7623318084550894 0.6128713772090701 -0.8314774329473624 -0.46477483983737966 0.7631053697288883 -0.32927740668230787 0.13827699473522048 -0.40064309291445643 -0.7817864931021001 -0.8126379777672865 0.5862317245475852 0.33354085063054995 -0.13065259909808336 -0.7298704464988539 0.7486439044248765 0.5887310202807272 0.4538123252559496 0.9561116546751394 -0.18635148185318062 0.8342036015671073 -0.8219153276788369 0.8932901975165866 +97 77 0.25480551540024443 -0.8221035214334094 0.7714705703534956 -0.1826497824632678 0.03572397355239176 0.8033049467614057 0.3612307237915562 -0.6029927303468217 -0.4630614725037945 0.9184637803733882 -0.2256467927200867 -0.2331629626606151 0.19903659422085673 0.9481133230760985 0.24179904982366618 -0.8730299124550702 0.9470750969422672 -0.7107561691376647 0.27713930908870976 -0.20865836435202367 -0.7718739240976511 0.8881702456512504 0.6985551663457314 -0.25110765555896153 -0.39878176136108734 -0.6401983002050544 -0.6688711609421358 -0.11736175045385244 -0.10674930672503535 -0.37134737807042795 -0.30882289003607677 -0.023322358269061816 -0.2730302110497045 -0.7114579841182822 -0.32230925980118963 -0.4678983130437844 -0.9404478774361431 -0.8408430451490541 -0.6715478929928762 0.8923690791230185 -0.0945713238071515 0.2995647554269181 -0.9625119275847269 0.7116042974265182 0.8022331062246428 0.9932191299339641 0.743283806287454 -0.6646533104774848 -0.6297308871011891 -0.5804334334835017 0.2657096263712455 0.49955932083582755 0.06557966413161886 -0.011895261343704888 0.5326666348308071 -0.6525434690768348 -0.4130848557417859 0.6359668783148262 -0.5403166646524833 -0.5634634960686173 -0.8453066573895702 0.28184619032433944 -0.15912006930163747 0.6771417977618301 0.5937073854524604 -0.8233314385998298 0.7335302913402362 0.03102501572177596 -0.6530277664503081 0.0785177287642882 0.32257653281541976 -0.3771964975222526 -0.47031362080829475 -0.1193579786308554 0.9570893722946838 -0.3491842866985 0.9187308230900406 0.7699373687697662 -0.01739468996489668 0.3139983656007126 0.9893381568183888 -0.3509927856316206 0.12408540714244753 -0.44599837790768904 0.5892256702739276 -0.5874451717160176 -0.793694642589583 -0.10304345217425981 -0.04862039465775725 0.8543645013612637 0.08103431668524097 0.1562610333724801 0.1221347893212732 0.010307020557181135 -0.6037814976197216 -0.7184597375096551 +97 78 0.6655903477968232 0.12221628620302094 -0.5513242906979476 -0.6220450436064264 0.49799012534018483 -0.8472912703309587 -0.34290080046817595 0.1629808892023321 0.42634555362333804 -0.05762000706324 -0.389532257541914 0.5632545704635523 0.22473059926695393 -0.024999975527649987 -0.9717006322287816 -0.46938525601550274 -0.6982606941440774 -0.9386076803511818 -0.7767247871124796 0.9099134985667214 -0.7546083656008482 -0.4804539182119205 -0.4958789266347583 0.4125472429600774 0.29702863312216277 0.631386019266799 0.4582594494657324 0.48311372038287104 -0.38062825508258924 0.5905172112951667 0.5587311448885843 0.2835382232958754 -0.22805737103555623 0.12347343907650798 -0.5800555043408231 -0.6081191078920409 0.6012165705670807 -0.7071629396973083 0.4205156828008958 0.25714467230730675 0.7603090850505951 -0.3437726383063422 -0.38437850115497985 -0.8119862668036533 -0.6413476755074663 -0.06733599091887976 0.7744768250978811 -0.44627923961885174 0.1234047947217023 -0.5106535711692577 -0.587990804841352 0.6866334274383579 -0.09830971172987035 -0.851601046559668 0.3322977679353334 0.2476864554806839 0.9074842197703052 -0.7212984079242217 0.9319632977046508 0.9090473950254652 0.643206256126756 -0.8022658517412746 -0.49815861494974834 -0.09339762918701267 0.8557311624115795 -0.8450136787169473 0.6868365192899772 0.14570695869975503 -0.837120131819932 0.2579758317700289 0.9925740664902154 -0.8047497681427855 0.2798750526594689 0.473570890961716 -0.9296581617186974 0.18072838845644412 -0.5931247389810879 0.8892902348523057 0.5108150399970399 -0.6802602996243245 0.9872568188456343 0.6243132101203062 0.9035753386121979 -0.20636418145579727 -0.10240183809399062 0.33953967358394554 0.6707122369804193 0.5230114105909462 -0.7416490662259001 -0.47893754066150196 -0.7866764914980111 0.09170421468255796 0.7169828049193996 -0.9023123269456768 0.7458884268934047 -0.7983536734962275 +97 96 -0.7773283832790507 -0.6583249425077595 -0.542356413666949 0.6783601269709014 0.16396811281995638 -0.14267768810958703 0.9185621290704242 -0.5637672773112201 0.6781362482769946 0.09777056209258683 -0.28310269519756637 0.9335457746339106 -0.3822275075465029 -0.8462061200538264 -0.8616342263897367 -0.5560613877727696 -0.6840272264899467 0.13666483358726156 -0.07372522040351726 0.5212745594504209 -0.4781183518841301 0.0899794032181569 0.17987594870816004 -0.7718535753463132 -0.015261092192268455 -0.48676412881661957 0.16479186411765645 -0.15637591992254674 0.2840521322491638 -0.4831704820068321 -0.5967007415784324 0.9747642780007821 0.7189790282577135 -0.7751830908627912 -0.5154870173522399 0.3977307566628807 -0.08745918651838847 0.4777479389694912 -0.7254732763255882 -0.2828684527625924 0.05938685956669887 -0.3646843418777528 0.2296264782767854 -0.5927999992453912 -0.2639546604876666 0.02515822038889537 0.3421450798600876 -0.6323650208608407 0.11921907838506063 0.17286213721755606 -0.11999690017159836 -0.4135379071374796 -0.3070296577510052 0.6185943167579337 0.1550937584685883 -0.46884353333859696 -0.380464039324677 -0.26318401376199696 -0.08335780718050922 0.8948698321865087 -0.5937113168309696 0.943127460007519 0.15907285979846342 -0.3655649719787124 -0.5490266077659132 -0.9441714374959125 0.06407164984226554 -0.35214283392920054 -0.008845548010492532 -0.6902847574649533 0.8624023438344794 -0.1370887628203441 0.6591776453742275 0.34174669618501685 -0.3713257703264532 0.009236058441415729 -0.5133157920274853 0.23220482958386368 0.3421685119524369 -0.5375863019301304 -0.5286636491791616 0.6159281546072848 -0.5396276507435582 0.05727871823077435 -0.7273452135602998 -0.5259941248515703 -0.6133083015227592 0.38050463783942123 -0.14425517272516197 0.6296925508694857 -0.47831032709907384 0.6726364489031307 0.9277968082554071 -0.9284280618083363 0.23674212040406273 0.6674489781262314 +97 97 5.015164279197387 5.115509310257929 3.746896619447507 5.014812569990709 3.787862660714873 5.2473567940027825 4.590181320056412 4.35235525495205 4.116963223387702 3.6567119982838463 3.8427569279475886 4.829741987586089 2.0394050932482815 6.039950170363426 5.96510399169243 4.556411215100197 5.856125346685642 5.121063110423793 3.1249503735268886 4.296768620435519 5.908197961793593 4.4121874883209955 4.764745086635996 5.509872799310217 4.3836494417789735 5.359883777434793 4.112072560956215 2.84378715292093 3.748858758795385 4.2680825904490005 4.863774881898817 5.43571508042662 4.7430616536735295 4.972996982695353 4.769446626033876 5.94109610432014 5.410629513831168 5.644377709240335 4.80521037770556 4.942034616267085 4.725361344758758 3.035146002278362 3.0594941887230087 4.623939648425677 5.681311240874913 3.5269435264602165 4.5058328548683155 5.276701320649268 4.7259092960897515 5.042375377851962 2.7108449498217966 3.6522006712621087 3.68714358982938 3.4105546000798546 4.861388332826223 4.456817628257847 6.283541546797854 4.148566631256613 4.440319583616164 6.63266116965867 4.514115476740651 4.780483822980561 4.571086743734144 3.4805743732481975 4.243449335852504 4.894316518694277 5.781040624174807 3.9784640217849745 4.212855465922737 3.5876064295133343 4.631548388348667 4.850145409768886 3.6900239474018814 3.340360888966362 5.78691672742775 3.566059090477838 5.754705451278744 4.60462144620007 3.4186995193914633 4.012586823275209 5.630073184457823 4.047778403684022 6.443739232086523 4.049458449994759 5.3427876120125015 4.830232682179799 3.886958587354811 3.759184232950081 4.549889911381268 4.307863955154172 3.8938937819718458 5.331851900221782 5.971095291283 4.489674809933555 4.264594472698899 5.511514735645662 +97 98 -0.015408603611752225 0.6446075611125901 0.14642225925594277 -0.7636193933562969 0.1194818576729697 0.5723497868257275 -0.3825927277760339 -0.657602104972848 -0.12256146150061009 -0.35686879110088765 -0.05978104813095819 0.08524823995890185 -0.06622072913557675 -0.8065229635545603 0.9971153102632959 0.3224475324258713 0.13452111610599427 0.5582889388870635 0.21355553892750656 0.9550741180964015 0.7091490907108728 -0.15965156275103665 0.7377383780644737 0.582199760384897 0.15168650677862017 0.9518394631296359 0.5867032518879016 0.4464631873958278 0.7470784244694633 0.5310046138117037 0.4322470920213475 0.7359912427896196 -0.9991377739885257 0.6996392681171637 0.6535622761344992 0.8376098813724033 -0.5896447256454809 -0.051750922919629794 -0.9670361877537368 -0.2238264592286101 0.697319947789323 -0.2611434647174389 -0.02502273882159045 0.3218519005271925 -0.8302591777361028 -0.18389182419471117 0.2956578849751186 -0.8329417541163593 -0.9580938332079725 0.4554020023736416 0.3488782413514171 -0.39798984830879824 -0.39337847709408447 -0.08046496609720877 -0.1535883693053961 0.5264759547209423 -0.7441655826149056 -0.508874502994624 -0.09850726953797473 -0.9915622795309624 0.41661202250870133 0.34667453592367403 -0.9082453818961975 0.0700055360395857 -0.1160283612546289 0.8468023559494293 0.9732729465314836 0.8759695910574552 0.34059799569235616 0.3772343877572848 0.4753996480170022 0.05817920527102172 0.8442413340443229 0.07137167005407541 0.9112710497777272 -0.4197132550279621 0.5654814620551483 -0.3168764901696832 -0.7916360423918472 -0.5498199669959352 -0.5863164073957625 -0.15004541568550422 0.7155533095685602 -0.27038019060167273 0.3746927050998907 -0.6790597976256927 -0.18172469245798317 -0.7429630109906873 -0.12667314442165156 0.05605945278554891 -0.28583107650992123 -0.7809088985803143 -0.8783525076476519 0.6762714477313367 -0.29846142687813826 -0.71252095695516 +97 116 -0.36113631707611615 -0.343780636888541 -0.1690396674511243 -0.9883733578982694 -0.6322990818399044 -0.9563998377143006 0.20061964909329633 -0.8815542518797075 -0.6174562034545203 0.6159936583425087 0.500538247278042 -0.10515308807691337 -0.3733645241962624 0.43805607974707983 0.6456099806124367 0.412701649673757 0.3270220750667805 0.5519144864901762 0.11465780583121044 -0.2525570923422482 0.8881279754723677 0.08408513206835866 0.8838206623200746 0.5506476405709158 0.7605734681973502 -0.7087833338786951 -0.7487824142010362 -0.4255255885679119 -0.20145358808945568 -0.11511242271198197 0.7838198280531996 0.8522392293509968 -0.15092399791240685 -0.60298634287856 0.926999992048541 0.7878504492590119 -0.6744583329023139 -0.8052952491399397 -0.35047594396236126 -0.8301274504566016 0.9118991140459534 -0.8119202472086793 0.4974825690017155 0.7608394187041057 -0.6913577968193889 -0.7400203865179693 -0.7974094396716005 -0.9421179740079959 0.8002925431548147 0.7972768122766589 0.014630955613220031 -0.03368015908962896 -0.7794928184912171 0.2363108493513344 0.8887383798743851 -0.35604070248871333 0.7498175570828891 -0.19970266451424168 0.8205989511806644 -0.22992947845282963 0.2210301139679829 0.43115609216144124 -0.9033414183573145 -0.4691402977317929 0.11405141549058606 -0.045167428379140784 -0.4630188242694826 -0.13436635446234435 0.8205280978526892 -0.3837954880088956 -0.783970491481845 0.7593964414357255 0.4218002116992958 0.30965828149939467 -0.3838046879721193 -0.6951140416264858 -0.7660666370790141 0.29796609315811384 -0.11767477719411201 0.6116439374270595 -0.8409893208763939 -0.18229861721453688 0.8503329762657963 -0.5324260010276545 0.8322246057275111 -0.8031083527536456 0.4350199539760242 -0.024890962132509298 0.3921441024281933 0.5107079424441576 0.49720619382461084 0.4094592747954602 -0.4421453637525008 0.4390742525784055 -0.3023758528275369 -0.5047922473117838 +97 117 0.8764738024534282 -0.11475862743022569 -0.781629252873389 0.9042859734550635 -0.7952776920520488 0.08068684929251346 0.9642454053453404 0.35537627485977796 0.4439351856009639 -0.04368899942185944 0.6774334022389872 0.9218154015365796 -0.4295333167838038 0.6161039253638498 -0.7800634346714601 -0.42169470339994897 0.871634816658539 -0.5106108593361018 0.807125685524108 0.7913517623516475 -0.00935951965434545 0.47073840004962353 -0.39470566698019915 -0.44441089599923056 -0.7650659472659207 -0.4739262942733158 0.4944842264965652 -0.39258175965851216 -0.02721859146209149 -0.2834695480484808 -0.13367501757182088 -0.5970385899152515 -0.8879987437236125 0.3589195219847878 0.6790250279596819 0.41894324975652086 -0.43237196762767605 0.9505276109142033 -0.2669621949768852 0.7796231455333817 -0.6281457869262412 -0.506518630565876 0.4232268395873575 0.2306344732017649 0.41604410521176916 -0.016820347065373387 0.7483588163460124 0.4235323472451893 0.00039913133519320354 0.6769133193044541 0.255051246456518 -0.6664500257694097 0.32168483703172557 0.675689414261077 -0.7149356820341082 -0.3431506847169179 -0.7307602718795636 -0.5414496573840226 0.5316231793270574 -0.9715994038450271 -0.364447245379498 -0.5894641543000763 -0.9310033178372517 0.17413261213566988 0.060744650864058114 0.06317866143319417 0.5410680573093125 0.4454263895728461 0.5483008166162744 0.8608568971091688 -0.2778069112926378 -0.9326549123829857 -0.31137912437707227 0.24148468846976168 0.8458860400354526 -0.08088457352173206 -0.12626557279049377 0.6025593820156534 -0.09912308823246807 -0.20942740106950275 0.5063679609494622 -0.40802686539029076 0.9309716897491778 -0.7787248667788083 0.24108220990327522 0.5188591718575719 -0.6840093971664722 -0.6401901862838566 0.7127538472281401 0.5962257804871156 -0.4115820169810016 -0.3563371221930387 0.9993486339654645 0.04884319772365919 -0.6288882496621708 0.11920677228799637 +97 118 -0.8251143310877516 -0.5083382428082941 -0.2867302881886822 0.3496208244969654 -0.3728025187121795 0.9459110822623025 0.32252038122959914 0.17584823561079643 -0.9605162863976071 -0.652753678721629 -0.1769261415374177 0.8654538530884892 -0.12044688470551979 0.9797380251949457 -0.5263807913013083 -0.4127681247251125 0.720386969857906 -0.19835019949143096 -0.07269036333570189 -0.392061687267798 -0.4927109008703454 -0.9953316431895662 -0.6994343746128693 0.9925983475645239 0.7551299788233639 -0.44820558598656235 -0.5705244931566502 0.10397108746242623 -0.8921935104462004 0.9232890756286751 0.8846953994920363 -0.9852242395484945 -0.5108008000635558 0.6118060702910366 0.3508483837153027 -0.7414884733032128 0.9042812642365958 -0.5416028555754435 -0.42008732659698333 0.8418245892150631 0.2420443254722584 -0.152511432064093 -0.3844587824076229 -0.6791675594673219 -0.23796841276699765 -0.7933165537777884 -0.6906910925662351 0.8054491180972145 0.5698480375818225 -0.2152478671617406 0.2574992497248618 0.4030201148227073 0.8506211906320458 0.25458556180464975 0.6964896689815145 -0.83477053555852 -0.8869224760439678 -0.18118366419376009 -0.019694711354950822 -0.6148448050347046 0.28756903465891837 -0.3880151644284773 -0.747110463471089 0.009426042014103242 -0.9085707263478513 -0.20797565658631978 0.8853478322188937 0.9245052004324217 0.1149440994894031 0.4343791077204229 -0.15601259347639806 -0.8294946523335225 -0.08405764264303284 -0.6299877839396504 -0.38630851271805033 -0.4395866304979057 0.7100284923474245 0.5325470787509854 -0.42914025575515224 -0.3281702458566629 0.8116046165026929 -0.33488303719150014 0.875269658420825 0.28940263588385684 0.9141190060678985 0.5739049391335225 0.17425100708217767 -0.5573737704533042 0.7393087863216259 -0.08829676896764593 -0.17402967564430294 -0.9125655016076948 -0.8905299629141252 -0.34579718361838574 -0.19374619427480622 -0.5227272945000394 +98 77 -0.2731094166677275 -0.24192178350668625 -0.3889560413945541 -0.278237936546212 0.7229758153427532 -0.5018772824467352 -0.7521077808898222 0.5417518495310611 0.3592629825384521 -0.7328496725854075 0.9201034327489899 0.7485976769681824 -0.3269062935763669 -0.08729053064476311 -0.7104162797049778 -0.767649956026401 -0.8473930042450306 -0.17909008876076893 0.5220689589625265 0.17131695758582444 0.7562362520075319 0.9291819443605784 -0.18992680767580383 -0.5315203965254471 -0.950605358128807 0.2403312215692026 -0.09093283324897539 0.9439460776499964 0.7854884952014913 0.4299580868534094 -0.48919897409677215 -0.3365443641777994 0.6197106875039868 -0.34751185259698514 0.7202538728541101 -0.8844999382139995 -0.3754782129703138 -0.6064809081985343 0.4626917376640254 0.1639307999416546 0.08525477120738412 -0.9002475229760152 0.10985653945051199 0.5499577578089436 -0.7442926263987666 -0.13079101849024322 -0.2936160837930404 -0.6988892790847545 -0.7531485275333794 0.8619605316182544 0.3720485321389062 0.8359791251902176 -0.36151796554909743 -0.11201525407606194 -0.24351660219925142 0.47246033091358086 0.7666226723342675 -0.20826506607268747 0.8242859177061477 0.7137377519711163 -0.5994517763700453 -0.8533378205952713 0.006866945581622819 -0.6624007395606897 -0.08309153021025195 0.5159226954030081 0.03272951802563906 -0.7758128310303534 0.7158432760797775 -0.07798593281531607 0.4185854034947367 -0.2101026558594541 0.7370130051049122 0.6596122227193033 -0.8056445146453586 -0.07724244497180077 -0.07131094240680524 -0.6591412329519597 -0.8357497403927454 0.710576913822971 -0.888716145085751 -0.7352724197568614 0.3175821800317433 -0.17414412811424884 0.4199968212507228 0.951420744054253 -0.3754990195735082 -0.2629747801788047 0.37119355397937115 0.42360166034299973 0.21475468068751313 0.9250057832259182 0.9340197658641227 -0.7738503313431317 0.4776177205724581 -0.1899225882973934 +98 78 -0.7402266754403659 0.6809486158805473 0.8075209005697848 0.9320520328726427 -0.03534059817846158 0.47462306615770467 0.955739704899329 0.7476876110752928 0.5730772981370094 -0.8004385542085162 0.6304534285101695 0.8400235703401147 -0.4927610332310408 0.03379975161638127 0.40958119773874846 -0.3586626620288824 0.4622335213157476 -0.7144886441260034 -0.6795196691898628 -0.5250511632468025 -0.10961543323007605 -0.505376994236103 0.6149104089759618 0.07998946691038111 0.27104442168983733 -0.5667659704294428 0.40079225219113823 -0.29338579377352136 -0.19227241011158824 -0.9723893161980828 0.2905379128428274 0.8599757210191514 -0.29317169654129915 0.8236783458208639 -0.30476513310735953 -0.23374631094213516 -0.9705445567149016 0.9858445554717807 0.29874394854847885 -0.8717859781461963 -0.3887550140584606 -0.6806110038596249 -0.22453120006850802 0.6826705917713365 -0.8730352925735827 -0.010441577907204236 0.5233645374177622 0.029908171560360408 -0.5709759246422703 0.4647767194417962 -0.9400210194182161 0.31590519278000007 -0.8498412310153152 -0.892391367543278 -0.8835036216308758 0.07281795443183392 0.48206143621482545 -0.9150578703462762 0.02905084593186058 -0.6457803962852704 -0.5630027137651754 -0.5947704224955062 0.43748918080377375 -0.9285798876172575 -0.5604146905236256 0.4470524634826416 -0.8552011820400942 0.12137229331545196 0.6811086455013682 -0.32711026968580037 -0.5685709446759546 -0.40960451486562577 0.12522919332733506 -0.9022379006786603 -0.34052950590693576 -0.5474005340529204 -0.24176611145625237 0.03280804791033787 0.7511724114982485 0.3911856494079047 -0.11014180130099538 0.8032259691531827 -0.16760988030082125 -0.7854478256667876 -0.7435656027459565 0.7774310547766006 -0.880498384340868 -0.8514169699376064 -0.5978555077245453 0.2473568925861349 0.9162774353728751 0.798858797753148 0.23995093645751675 -0.7721312820366497 -0.12707890095617058 0.08283577329693959 +98 79 -0.8173833464994971 0.7539327467765438 -0.15873816165200783 -0.2970925190936544 0.9593962675971446 -0.024341435649646304 0.6478706578792983 0.7813558672489063 0.98639532163675 -0.14250458411997435 0.8680277136126007 0.7124797612465281 0.8755870211441275 0.3143204984150052 -0.26093070571545307 -0.6219607603964288 -0.03940684099384839 -0.5934633450210298 0.9101286629772165 -0.06839942538313504 0.8757100629010552 0.6739232822443522 0.9278144999849656 -0.9198155261156196 -0.09228943131239697 -0.06471547860281968 -0.3203865157003696 0.44554999788940575 0.12018661403006226 -0.20155042286405878 -0.2461107465114134 0.619627297333438 -0.6622276795412685 0.3730414130479436 0.7512725738330865 0.7442210901072028 0.823615882921088 0.8955355187694829 -0.3827265733415486 -0.16026858426067792 0.5901230668010964 0.0464134534007985 -0.9619935154159283 0.5777944466357907 0.8954917462598144 -0.909463215910226 0.4522726225288858 0.3790103241721323 0.6996606184282685 -0.4573642826401645 0.343118621520871 0.019530527898701022 0.2368469983607766 -0.71227205484035 0.18074493538576863 -0.4018219933919034 0.8255435464289413 -0.23672966324896727 -0.8273136830956325 -0.046902079959410425 0.7067845973286759 -0.5345526022651133 -0.7349419508506876 0.8727074991117962 -0.5070161795854491 0.05065775468103717 -0.7735624890836545 -0.15567604591090878 -0.7927891348650473 0.4793561153255499 0.09273549511833457 0.19071810503765896 -0.2582724441937856 -0.6043688210031555 -0.4144315509207659 -0.026035222688425952 0.1905945975988641 0.2997541056144317 0.15647519890904715 0.9480239680488376 0.13956627111813313 0.7226746986593537 0.0042331000320179335 0.006225633913647277 0.03557573725306007 -0.7811638609683915 0.8850750949011588 0.5842625985811771 0.8887053826416806 -0.518097311960692 -0.04191709649088993 -0.8175125128998766 0.2341460124741841 0.45948078312042573 -0.9773925568270712 0.3772326438140625 +98 97 -0.015408603611752225 0.6446075611125901 0.14642225925594277 -0.7636193933562969 0.1194818576729697 0.5723497868257275 -0.3825927277760339 -0.657602104972848 -0.12256146150061009 -0.35686879110088765 -0.05978104813095819 0.08524823995890185 -0.06622072913557675 -0.8065229635545603 0.9971153102632959 0.3224475324258713 0.13452111610599427 0.5582889388870635 0.21355553892750656 0.9550741180964015 0.7091490907108728 -0.15965156275103665 0.7377383780644737 0.582199760384897 0.15168650677862017 0.9518394631296359 0.5867032518879016 0.4464631873958278 0.7470784244694633 0.5310046138117037 0.4322470920213475 0.7359912427896196 -0.9991377739885257 0.6996392681171637 0.6535622761344992 0.8376098813724033 -0.5896447256454809 -0.051750922919629794 -0.9670361877537368 -0.2238264592286101 0.697319947789323 -0.2611434647174389 -0.02502273882159045 0.3218519005271925 -0.8302591777361028 -0.18389182419471117 0.2956578849751186 -0.8329417541163593 -0.9580938332079725 0.4554020023736416 0.3488782413514171 -0.39798984830879824 -0.39337847709408447 -0.08046496609720877 -0.1535883693053961 0.5264759547209423 -0.7441655826149056 -0.508874502994624 -0.09850726953797473 -0.9915622795309624 0.41661202250870133 0.34667453592367403 -0.9082453818961975 0.0700055360395857 -0.1160283612546289 0.8468023559494293 0.9732729465314836 0.8759695910574552 0.34059799569235616 0.3772343877572848 0.4753996480170022 0.05817920527102172 0.8442413340443229 0.07137167005407541 0.9112710497777272 -0.4197132550279621 0.5654814620551483 -0.3168764901696832 -0.7916360423918472 -0.5498199669959352 -0.5863164073957625 -0.15004541568550422 0.7155533095685602 -0.27038019060167273 0.3746927050998907 -0.6790597976256927 -0.18172469245798317 -0.7429630109906873 -0.12667314442165156 0.05605945278554891 -0.28583107650992123 -0.7809088985803143 -0.8783525076476519 0.6762714477313367 -0.29846142687813826 -0.71252095695516 +98 98 5.047594923613934 4.8633083452173365 3.1195654548336895 5.426394592090793 4.794939310259942 3.1988895151360035 4.2519297702373535 4.923875419952166 5.513349548022483 3.468121679395776 6.490930934071426 4.614699466501668 4.828148218199434 2.804421070478522 5.4923018906812855 4.683651061704702 3.2076316722074205 4.950110665721116 5.42348116693417 3.6801779307753053 5.531240639617996 3.754862685429793 4.693063700826931 4.655461764480318 3.188321918964657 5.2033281925733 4.000173895798798 4.652752468042708 4.963887541568539 4.154576152438983 3.4204096728219593 6.160259793275687 5.108115280568771 4.269935912450932 6.348204240956578 6.210770784203137 5.522194463658359 5.648793665496221 4.626850688365238 3.3324796375285746 4.41320934831916 4.458264689456547 3.276718312216577 3.8996708846180166 4.891234627025172 3.4481843535591006 2.813601742698025 4.070774365556533 5.421808617529435 5.397152460546461 4.185315426566567 4.974151879061923 4.495114930149996 4.398190087030943 3.3563353690956474 4.601865414296613 5.628324407497267 4.3177829216988215 5.0734131918765994 5.040729098888699 3.7349108341233865 4.110208311173796 3.882968910168395 4.560320463464821 4.781499007484791 5.208157278145613 4.728937763296241 4.690564900662858 5.475658894744271 3.1180870025397627 3.9936457757311894 3.7829685174159016 5.014357224905115 4.109852143701034 5.89274057204521 4.175648507323831 3.3920488959003103 4.144959392272723 5.952404770059057 4.724866096953475 4.1522764440210995 6.014199542223458 3.5613508195396317 3.791598359315424 3.998951356291702 5.919246436542793 5.538057910675151 5.603429428371582 5.796503606021325 4.373964050565357 3.3940831085583514 6.083222564247388 5.796611690933763 5.937552841094938 4.05450787940367 3.3534059771173004 +98 99 -0.9285246998034038 -0.4563348957251989 0.41300410747329885 -0.3240317846881293 -0.4172539557788548 0.5760481884630713 -0.14234120680500495 0.1075626724025498 0.9675874805191285 0.3190876833250602 -0.7295207266828037 0.35771209629676815 0.2985033208930241 0.04774205161946332 -0.462371802384582 0.08862795271436719 0.7076471355665177 0.8806217666994991 -0.35503959737668067 0.5893853154005386 -0.7856836694616236 -0.04994983287453891 0.3167031439575525 -0.04722563977988403 -0.10460322063971628 -0.9915992515798608 0.7783209255957084 -0.4205295865989471 0.4862530721613836 0.2911414105113843 -0.21873795826861864 -0.9577129447022334 0.23172953913743344 -0.39204490535050374 -0.6814746490812242 0.8389340758204498 0.6820748904168576 -0.603386193656507 0.49008392754789054 -0.35457860243478256 0.5495495955767928 0.2727750749714415 -0.6447447877050829 0.644041175616916 -0.6729199568534405 -0.5648384622325127 0.2829662959255477 0.8880356057649423 0.16191998618999381 0.9062231313060862 -0.02056141417968349 -0.1821724066842798 0.5611237774059219 0.05638460193689521 0.2684325394657143 0.6988847023600244 -0.33519573856040363 -0.04256603206627463 -0.5325401243374936 0.15115642979661392 -0.3765463141702132 -0.21167941386630829 0.5904117923560028 0.07852525612791683 -0.4547179789393043 -0.751094508424619 0.2661553707175355 -0.8703712632826639 0.9528790939659311 -0.7852621292766178 -0.7084836260593839 -0.1133108235253577 -0.885165079990343 0.7601993577108674 0.6197645315109204 0.8812232074825703 -0.38236046135682034 0.9995961150522443 -0.9126366379735014 0.8237097218113663 -0.1184340958033856 -0.9399900359380295 -0.3832361398769024 0.22148997260160663 0.42703267921358945 -0.14154497869925042 0.8460322946957404 -0.5327620686638583 -0.7214516694542255 -0.9497294377779699 0.965815460418092 0.2570167526062579 -0.5730683978869457 0.5450187914652342 0.24476734933961342 0.2052494006313077 +98 117 0.8527235174199612 -0.8044695173693417 -0.3013383642415892 -0.8354932468890397 0.9647171298363713 -0.22574441399257217 0.5215329627932104 -0.7718843805385907 -0.9769831417851791 0.10337721161091995 0.8565937643359007 -0.061120466725652856 0.7346745787288926 0.7573552805226071 -0.6575567128386406 0.9968727782775888 0.2848658247339013 0.2676867272931056 0.8389902650756762 0.37828961393373284 0.37559583232477256 0.394506952251761 0.04825479479546568 0.3479217703953712 0.5259270377122525 -0.4599793230450737 -0.05019876072469742 -0.8100231120228165 -0.6627323109888126 -0.7178084589671971 -0.23613734101941986 0.30423267577194624 -0.5685426276466918 -0.28578862227471147 -0.9242557190896279 0.9924001980620447 -0.23899869255626105 -0.7505219999369706 -0.7910805911302399 -0.10956413854067115 0.9806119622380771 0.362195400340928 0.20464992459739317 -0.32800424173914866 0.3045850407229045 -0.2111301170100568 0.21182648539753157 0.17899962677044212 -0.6921596509782681 -0.6610433124389119 0.7660975773523651 0.6609589259660591 0.04952230351582121 0.8338581437447152 0.22450734116029714 0.607075820111175 -0.16737075234746324 -0.2657138788064628 -0.9166580591754121 0.31935488745981355 -0.7853012547648763 -0.7497702596971505 -0.12762237721090286 0.2593015542060777 0.21486337815991186 -0.764246311116614 0.24390045693977958 0.9267828289268767 -0.7998193015706319 -0.27480079077832587 -0.15971855093039422 0.19505652908422544 -0.24486575008428857 -0.045175406523904726 0.639561872815716 0.6103225855046561 -0.2050400642004837 -0.8718541589319369 -0.3794033067283349 -0.12402238256895748 0.7786945569132842 0.07227885874773254 -0.69595041536646 0.19769719431283916 0.6035097845781328 -0.65553229605932 0.5595527635817483 -0.9564142922061241 0.9934736178792469 -0.43764505973271595 -0.17162360029068857 0.15788079431651902 0.3097307530164075 0.9630076821472902 -0.051012341087542046 0.5565313031494141 +98 118 -0.2937935184440217 0.8195736715043214 0.6575603539164054 -0.3639719909707755 0.05578702903960853 0.3135315601359052 -0.46945941946127134 -0.3244194575264914 0.006896038615831657 0.34236448503264016 -0.964850111768464 -0.7488365447437131 -0.9423316751090807 -0.4100345146931019 -0.6923496205943576 0.18409905695967277 0.29711661185296045 -0.9336352806512462 0.3952941973712123 0.10235357144786694 -0.5873774804438587 0.3543535012241563 -0.5054163777573517 0.9955255885050873 -0.663170213891674 0.49260583454624296 -0.8162898131736576 -0.29980949077147834 -0.7766781366459512 0.26244970499748543 0.9809883486998758 0.9170987160354556 0.18136367565285072 0.37669114775265977 -0.956725154225115 0.28343523952489447 -0.8709614494641931 -0.8212991458402557 0.766501275449363 -0.7599920051364562 -0.09941816814801752 0.848904952235173 -0.14854298168792668 -0.20895678469495227 -0.3764565028914688 -0.17552074458780464 0.2518259498702069 0.2126113387787547 0.20822727796118334 -0.4624931377234889 -0.6729659042882057 0.8812859980014427 0.9758621386331625 -0.9452714615425937 0.44009238355499236 0.42666759045184266 -0.8916629356697452 0.25933116974244874 0.8708705795970104 -0.464740049348888 0.23412947401354378 0.04582652113822494 0.5253405393846464 0.6494664860168438 -0.9726886741908178 0.9309628228464495 -0.46084900708356114 -0.6047219133951645 -0.04155665444278189 0.33495090849703146 0.3099388443218358 0.8215445031416468 -0.8617507222509921 -0.7689016917260183 -0.7585912301532063 0.10582130812266621 -0.9279286831367364 -0.1636429994326789 0.9056034808823721 0.15415589735476454 0.9192811305942663 0.9940931211253046 -0.3365776453727951 0.41945575780896016 0.7609867641621817 0.3210991635530325 0.040017728436093636 0.4291525198083106 0.9136879673201861 -0.7687444271158617 -0.056010665565928486 0.9672676394652007 -0.7877990257847494 -0.2672826348227213 0.9513868534215513 0.13930652002594224 +98 119 0.2662719518107337 0.4240863872396845 -0.06547034731980972 -0.8280442047279055 0.809548607791956 0.0006520450096705321 -0.2693460118141602 0.0021540256216028286 0.7606527575916748 0.4649578175981959 0.5861938718735615 0.8719177589761002 -0.28266471519419856 0.18456493885777103 -0.3838191325684406 0.8002101961772481 0.08034645029871257 0.03009260362847299 -0.8630260924688571 0.18054923558389468 -0.8018501651445338 0.08296275865684444 -0.3907114175356341 0.394821114014718 -0.1782899326319476 0.6569363450732542 0.3699534623273555 -0.5638447847599863 0.21778900737587725 -0.08172362349471451 -0.46261278564636066 0.9203920534341952 -0.896141246738936 -0.30498654278089865 0.6808374790639051 0.761555326955613 -0.38414300175048655 0.5719007856449019 -0.20144894108914846 -0.42684763646460544 0.9244143898416368 -0.17640533673374437 -0.2684782071585208 -0.3467168277181141 0.1611462733575888 -0.2946056672591275 -0.04039480772573589 -0.3201382526412586 0.6276104928903861 -0.6293982126980355 0.08965925233949812 0.7212742617460768 -0.6562740118715398 0.7235431305949216 -0.8313576744476996 0.5502897591589466 0.7344939176051737 -0.9569916921518558 0.3272549331497343 0.9978704578050412 0.009541357545164608 0.7121630737227123 0.3927991337768162 0.5131848044186724 0.9801992317458712 0.10438870132399414 -0.4529428021250932 0.030149945787177668 -0.46772746533377485 0.08380373687048026 0.6933840429371825 -0.8666981753640641 0.5696556809161621 -0.2160345008582183 0.8103212078021338 -0.6124307252995622 -0.6047993441046493 -0.4284678927971619 -0.4363810390643972 -0.7179760962280113 0.19334614636781255 0.5983846630329828 0.6207838546142481 0.9655873974838562 0.0744382904546459 0.8774448884059696 -0.8632368866331224 -0.35124372728859177 0.5186133143674294 -0.49019692005285465 -0.08847986792098661 -0.8653214427894995 0.9051825094640373 0.6169905512238658 0.04835554840605005 -0.5507490506380863 +99 78 0.04037251389203744 -0.7499388295935532 0.3903441994545822 -0.9848161526002273 0.5417618915429634 -0.34926980666833707 -0.33705085984089966 -0.5163831058914099 -0.4591424304061391 0.9180304543670268 0.8527616000912457 0.6937418460123772 -0.10827360865656876 -0.009751090909746019 0.871927965253964 -0.31111946763335707 -0.08645560275160058 -0.6671408223196751 0.9542201966129742 -0.39895424166517723 -0.7377492532712171 -0.6844841005800932 0.5221752132889457 0.4611857529668515 -0.18281344157498136 -0.4560581388195737 0.4753901658748114 -0.35541617546934723 0.4625630041026507 -0.5488806108139483 -0.0943880358110829 0.21251546001563004 0.47312000927857567 -0.3284843860000155 -0.8472110709612783 0.6507313665468981 -0.841253544471313 -0.6836200297475925 0.3263827675495832 0.6393319444593788 0.7332937562555912 0.017521510474883817 0.6174661460039979 0.484337158900888 -0.7868599778321945 -0.6806248029216142 -0.4277049245876767 -0.9523599544542336 0.2385308430999591 -0.5591340786780457 0.4394768746342914 -0.8824205683916861 0.8935380247832407 0.44981782758843036 0.031046890233499935 0.3229301487849312 -0.6904824811357999 -0.6734239654554568 -0.5196361005772436 0.3901207163391509 0.49976343368451936 0.06947280039104187 0.26633665255893724 0.60061185270435 -0.8082073426201506 -0.42621712708355775 -0.15422327416751092 0.29590332160757016 0.5638674551760208 -0.1303764193350776 -0.4306551165029082 0.7932865721978921 -0.8449346708380145 -0.12511440085775605 -0.45914213848636964 0.9981118427530296 0.13028734874621994 -0.24518153724929448 0.19948715357043012 0.6417293873199124 0.5041162159843235 -0.12019940938146112 -0.05901911953837091 -0.71784983773882 -0.5488889004947688 -0.7772218033066522 0.5323076646314848 -0.9980968055880317 -0.5420449159695533 0.8039926122899417 0.12221813219455413 -0.45067916916519635 0.9482084149567307 -0.7859299024857991 0.9911250981124544 -0.9160216717983027 +99 79 0.027256233273574404 0.5452967360448584 -0.0642927711114698 0.1830004122017841 0.23754897032064526 -0.5494669649650663 -0.7813103494073246 -0.4969964053027398 -0.8927607242339926 0.6158533868786182 -0.3566807078885341 0.04276624058238787 -0.5456021470682049 0.23301820139110618 -0.4263073378910318 -0.0989769623147363 0.24071145214392375 0.03634114027282154 -0.7838406988872546 0.9723052708265145 0.7196968126168559 -0.5534454535719544 0.6513371552157199 0.6191389404570318 0.764756300543505 0.4264410645590302 0.0233261507426481 -0.9946835314050815 -0.45341351813096864 0.4374520999367939 -0.9656917227982493 -0.9408844637989275 0.3217071317107312 0.680990555498717 -0.3107323494979055 0.36207908466960204 0.3499434196139892 -0.003243715126250102 -0.25439293020492904 0.7431053675254031 0.8325069052571465 0.5740184795720911 -0.13796150843103927 0.5907892058578577 -0.48747367594880275 -0.21729049183142268 -0.7947564322954841 -0.7322409137170371 0.7011592954564096 -0.712166557000699 -0.3030930817746964 -0.3873952950743633 0.5437211049471387 0.6716120542494153 0.030982906663424847 -0.6430522833605585 0.895046363382048 -0.7165525849122925 -0.2366725452479037 -0.11879024036698027 0.4529138502507901 -0.48676552955332664 0.8205008638261122 0.8849536768520221 -0.6346541571291651 0.44532583634530165 0.8023300551751484 0.16982144061758753 -0.8641705399012996 0.959439510177825 -0.40539586930858906 0.4925623237705281 0.6621888862202894 -0.38568170852780637 0.3496556414866592 -0.2061040488493222 -0.4237450331552888 0.16327408853974656 0.9868901321152805 -0.5192238663115858 0.23204552501264586 -0.26409568691006635 0.5437417734357051 0.35807793272064736 0.9638922018797238 0.4777172833479897 -0.5412521934000105 -0.5467511203240418 -0.7119389614965341 0.031755161445443214 -0.7551297886792039 -0.4219743453412197 -0.0016065989363378552 -0.2121178412907001 -0.237346368946439 0.2877593655992654 +99 80 0.19712981634317184 -0.3176910438583773 -0.9506636676509526 -0.9064359618287354 -0.6890437341902151 0.8697003057910797 -0.8668553189595845 0.0779497819299495 -0.8778947108213131 -0.45077280429488686 -0.3744733022340945 0.43477377413882934 -0.30201565108839756 0.2019005705081267 0.3723280297681224 0.7700733760898308 0.914146734990813 0.6507504732158305 -0.6889441644920558 -0.7901884372407584 0.1329774324651598 -0.3555687619468608 0.14546300334730256 0.24829679775091718 0.9252837106195122 0.7132898361886342 0.07705750793982569 -0.6423865708387198 -0.6656989048181758 -0.2956858022777502 0.8294251404513615 -0.8426613251710078 0.3261240220476227 -0.3939269110769801 0.7420729013869785 0.10036814386064896 -0.8850770708458304 -0.3988338233657449 -0.1450366015391562 0.39806899487221226 -0.6413372412704379 0.1858026715353378 -0.8305892366885297 0.37134740918718157 0.37717084161784564 0.9129525033943127 -0.5428996719176815 -0.4337369792076955 0.6063684436422312 0.8340006704456047 0.8021653984551222 -0.581337443345953 0.9763705515498295 0.2181116192899697 0.7081614104893719 -0.3671193122835492 -0.8831527104781505 -0.748755923014458 0.9652308162001586 0.4801517945883216 0.35853130555028545 -0.7266886627746667 -0.9083762642488831 -0.9188711989466465 0.05253761515056743 -0.34290631891302503 -0.4972058031441633 -0.9233122538050844 0.6019753608020832 0.7056644466122253 -0.7279992791607137 0.8360198309637288 0.5695463432037324 0.8194754428936075 -0.057378080009315324 0.6176554551561795 0.9508982740875052 0.3221482611512665 -0.7422299671036341 -0.33270742183071755 0.5985414737942358 0.6778951649753331 -0.4922313133910903 -0.1394006270586563 0.37550279084263205 -0.9900123007781545 0.5491667214416696 0.8412073373623024 -0.9113710481279256 -0.2164559525551688 0.33705219341390547 0.03517059365937669 -0.8233276567112762 -0.835016775485458 0.42566118343736536 -0.3257451322628142 +99 98 -0.9285246998034038 -0.4563348957251989 0.41300410747329885 -0.3240317846881293 -0.4172539557788548 0.5760481884630713 -0.14234120680500495 0.1075626724025498 0.9675874805191285 0.3190876833250602 -0.7295207266828037 0.35771209629676815 0.2985033208930241 0.04774205161946332 -0.462371802384582 0.08862795271436719 0.7076471355665177 0.8806217666994991 -0.35503959737668067 0.5893853154005386 -0.7856836694616236 -0.04994983287453891 0.3167031439575525 -0.04722563977988403 -0.10460322063971628 -0.9915992515798608 0.7783209255957084 -0.4205295865989471 0.4862530721613836 0.2911414105113843 -0.21873795826861864 -0.9577129447022334 0.23172953913743344 -0.39204490535050374 -0.6814746490812242 0.8389340758204498 0.6820748904168576 -0.603386193656507 0.49008392754789054 -0.35457860243478256 0.5495495955767928 0.2727750749714415 -0.6447447877050829 0.644041175616916 -0.6729199568534405 -0.5648384622325127 0.2829662959255477 0.8880356057649423 0.16191998618999381 0.9062231313060862 -0.02056141417968349 -0.1821724066842798 0.5611237774059219 0.05638460193689521 0.2684325394657143 0.6988847023600244 -0.33519573856040363 -0.04256603206627463 -0.5325401243374936 0.15115642979661392 -0.3765463141702132 -0.21167941386630829 0.5904117923560028 0.07852525612791683 -0.4547179789393043 -0.751094508424619 0.2661553707175355 -0.8703712632826639 0.9528790939659311 -0.7852621292766178 -0.7084836260593839 -0.1133108235253577 -0.885165079990343 0.7601993577108674 0.6197645315109204 0.8812232074825703 -0.38236046135682034 0.9995961150522443 -0.9126366379735014 0.8237097218113663 -0.1184340958033856 -0.9399900359380295 -0.3832361398769024 0.22148997260160663 0.42703267921358945 -0.14154497869925042 0.8460322946957404 -0.5327620686638583 -0.7214516694542255 -0.9497294377779699 0.965815460418092 0.2570167526062579 -0.5730683978869457 0.5450187914652342 0.24476734933961342 0.2052494006313077 +99 99 4.256885944271886 5.520614415975283 3.924317428882082 5.453707814648269 4.664401588499164 3.812389430639039 4.126929490137986 3.392159585405097 5.3396150651025485 5.272784656615266 3.7949524687818226 3.401191940615206 3.334079334342446 3.6641799718689083 5.926514604724228 3.729748842538449 4.415918706333896 3.8616417436604475 4.783663107185216 5.355474337151656 5.177941665096779 4.280267328352213 4.670440155547615 3.6978501377501978 4.518795043225303 4.7361700361570165 3.4462828949819015 4.786988097986044 5.309234215844536 3.5663211918656392 4.805117775100315 4.14120153740297 2.751584533276014 4.925583581533053 5.010087455286451 3.732412081854959 5.598549023013295 3.9731366935565866 4.763147710820535 3.919583622982043 6.128104610333266 4.428877649538669 5.191047295689191 5.292252349395119 5.145659545035023 5.128547523471832 4.198539541646195 4.3563359153876515 4.656892595485371 6.474739491469612 3.8749862195709435 4.577624084451279 4.616810086732638 2.0853416459235308 3.895523892910419 4.152252848915885 7.235339572789074 4.506421407752761 4.42397894331608 2.4915466739486067 5.365859028529839 3.6369262334934938 4.631101896640171 3.458969131792272 4.195038605670931 4.89873933732019 5.075700338067389 4.903511441436143 5.411018347667038 5.0175822021310115 4.989361732070715 5.3679257903920226 5.233653246126318 5.363892481708 2.704985185818776 5.645096187411474 4.810779786698392 4.486287483642953 5.640345460015621 3.726353269324947 4.643807590491465 4.778592673379713 4.032261655982039 2.6389391418569472 5.575073251313041 5.122558595600207 4.724126642888203 5.091258144031256 5.246786717878396 3.789140268430307 5.357011683405711 3.3056421993240774 4.685228758545737 4.620116216136809 2.5075779979969317 4.434334727100483 +99 100 -0.5379872733822535 -0.7618482038244292 0.1266775819244661 0.42971472566293323 0.6039915956983957 -0.18025796000141825 0.07334910125687233 0.28768083837232283 -0.9641412736556525 0.769748099039659 -0.5874890485920643 -0.5469965087426922 0.5175564167314888 -0.598362342190883 -0.8293917879757395 0.9496467517801013 0.6584180448161796 0.3254406353194075 -0.2952793735449417 -0.6066475954676516 0.30782246004493663 -0.6878592309151397 0.4187078737061256 0.021295158877875586 0.06714171779751332 0.7081363641466658 0.23067339467004055 -0.9208770327862477 -0.28115839312146496 0.5421319614278943 -0.5784450365083176 0.2646938029336301 -0.22224601467234373 0.9226369160427224 -0.04417237423998577 0.3163603137095319 0.952456321364056 -0.8800660978523629 -0.32386817799962975 0.008298083916981946 0.6517589668791031 0.4050253853434931 -0.8613825734526781 -0.23091623620896606 0.28841477622559064 -0.5306670188316307 0.37338279273848163 0.017551602027636726 0.24493235848875394 -0.5353457873861571 -0.40975991396643763 0.0655471445550837 -0.28868314272587914 -0.14587627381985202 -0.24368714064565955 0.9515194032419281 0.8383094699059732 -0.7777868082770276 0.12628668946406418 0.58434681616752 -0.6722270895616067 0.5944614442693075 0.1501849116355749 -0.0022717726225762735 0.3290469532584146 -0.9680853677536021 -0.524458718890775 -0.8833206662378841 0.9161147391864575 -0.5904355784702784 0.3293786303787085 0.928407175427802 -0.7778709006691555 0.4982402269228794 -0.6927578406596855 -0.7940488440073181 -0.05256547905761577 0.7902728548756548 -0.8058282891379753 -0.20128429018985838 -0.2080680240466828 0.7163518618485312 0.8856451164846812 -0.1221077029993416 -0.6502331585700423 0.8494137870133736 -0.552873708818606 0.8366099429063616 -0.7788569752363759 0.07941721403945046 0.8132209782146682 0.7019183716992006 -0.3526740247822364 0.4926264881985196 0.10254801620989129 0.2636006592653548 +99 118 0.12666093303377512 -0.9053826932159297 0.21468658960791953 -0.2991048814840136 0.6485789098229753 -0.5586757143929917 0.5213698099597133 0.449001481970668 -0.05248075778092187 0.5108788568851439 -0.017988602067812387 -0.14243188573467758 -0.17590521162992934 0.6487678655147902 -0.6666227642831 0.08579621860703757 0.17932959324594488 0.7810592830043213 0.9257479015296894 0.6388400345604397 -0.9322053149951466 -0.1144629152740182 -0.7105675314292925 0.5123960996603671 -0.18316356714035242 0.6283839977740855 0.2901939212244278 -0.035492711796669685 0.7411854253211261 0.24055915677982487 0.06249491946960073 0.3404136299242422 -0.2083779101677612 0.8719756196298534 0.393767123704585 -0.8275768818264762 -0.005767353997875979 0.29252074497070213 0.5354781339418841 0.6209389124030626 0.713683708320306 -0.5102160313334356 0.5582100108543946 -0.9505340563771019 0.8840229331514011 0.746652762701641 -0.040717392323115 -0.4496143249179114 0.7107586755054498 0.7020275594631082 -0.06572912820795995 -0.3742065841001314 -0.7263996246399758 0.15352649121811313 -0.3761505690531608 -0.11104817979368597 0.8395207712758896 -0.8082836312182333 0.0794904421996998 0.10202053302224545 -0.7336309351939916 0.21731767581946482 0.36613208275792797 -0.2420925212675884 -0.8465933485319146 0.2472100005617901 0.6886672622237351 0.11962386806678937 0.08097377310816634 -0.7177835344866808 -0.7530072143166657 -0.8663760417783806 0.3552015365681338 0.8035332960110111 -0.0535865124381647 -0.6911439453426493 0.7462804885670473 0.3566851568492142 -0.46975328362070945 -0.3253903868637358 -0.4364604639582388 0.989684811228277 0.1726714048655087 -0.013686404433850274 0.5465683882705592 -0.7533436129638305 -0.16559235675150852 -0.1955830623165007 0.10541496958036412 -0.3013522637928987 -0.40947011971837477 0.09361977913668551 -0.7583720306584785 -0.6262509737534065 0.335642068418025 -0.865257736868249 +99 119 0.6177304485132549 -0.16383209167482127 -0.59681108840693 0.8218026288618048 -0.8272518025418842 0.03253911855414504 0.00752421316185603 -0.7705035083022587 0.5159160649889063 -0.9758425324760014 -0.3806197919986454 -0.3981149790471281 -0.48327050792612414 0.28737131866601295 0.5625650507477797 0.7483465536431555 -0.31985413502243465 -0.08576780366332115 0.05909972851399692 -0.18353733385514936 -0.8069454363279418 -0.5429976892758508 0.6438645764508628 0.30843816015065206 0.9612969425294959 -0.30747948321374596 0.7307534626253489 -0.2879792814268691 0.5848364708932752 0.8975597331154253 -0.8917773483330709 -0.3653695182485548 -0.12432954114160544 0.2996599238531985 -0.761032943171079 0.14779388666170012 0.8522070407830902 0.528776144476101 0.8654390101834093 -0.16601553952337555 0.7927823441030748 0.9890979539640867 -0.09283526598073899 0.49938528312957087 0.49548389983091856 -0.3382632098727436 -0.8926631809304908 -0.380221232604798 -0.5082244709008654 -0.7108523764398942 0.6854084165906318 0.420450526548533 0.3528854435748401 0.1526000186379639 0.7494783151342881 0.6275682805536411 0.8496217520314748 0.39947406024075205 -0.839094623442026 -0.1312074216308745 0.856597384208075 0.34042591256550625 -0.721904593335281 -0.31396895187566476 0.03784693217670898 0.09145832989092662 0.43618627753933414 -0.6093699829408625 -0.8258109735693477 -0.05731902061502181 -0.6353125261025108 -0.06873792161105574 -0.04630295491634673 -0.9603977610265155 -0.24028208495050496 0.08857562086522575 -0.8933756096659269 0.6411980779075936 0.9259108949332244 0.17972260514444982 -0.9580718818739269 -0.35825653086505227 0.2576234023513455 -0.7248945995519867 0.8240628284437816 -0.24934284442429977 -0.6110956954485007 0.4544221046870789 -0.5598176959151231 0.576213604830659 0.5393498326293769 0.35424199194365813 -0.6203110887605052 -0.7507840470186122 0.10946942155403039 0.6886164206562357 +99 120 -0.9367792431337194 -0.8643208229378732 0.91059226956157 -0.6591715956997259 -0.0069344803867199545 -0.6874927934178854 -0.47889295781556807 0.26131170592954556 -0.5290816060968007 0.42889379732950506 0.135829391909704 -0.2397570884095206 -0.2010083186409115 -0.7771437958592999 0.8189818720653996 0.18203435823468084 -0.839696897964711 -0.42785053213432556 0.10444492847455988 0.2458691586232915 -0.2123144961960366 0.8158686121185292 0.733376030766614 0.5732848678148736 -0.4437189137751405 0.48956034901223733 0.4607538318323079 0.2682274152604329 0.8142928945452572 -0.24386439351521427 -0.9728018895729251 -0.21543701847247498 -0.6582104523724401 -0.11118573061593984 0.8154111422799235 0.3670765451440481 0.2427673992704693 -0.2994812349696827 -0.9353417836465576 0.6193142332237194 0.8738042278927829 0.5507800522541275 -0.7969474977268824 0.989141655509779 0.7805212309567653 0.7394797644632267 -0.26630117916403595 -0.2090279044687695 0.9565384246377577 -0.8341592510938474 -0.9405129713126759 0.9434488937042849 0.2223959095266428 -0.05976849771426229 -0.9084228716578369 -0.4009503344087513 -0.9153962043337251 0.17606608316955397 0.2737851676029106 -0.36211744068984153 0.7046513267056131 0.4906020498242576 -0.40896920938372894 0.339211210461583 -0.20070724525043615 0.9812319600794155 0.770846927903752 0.7086874096772631 0.27193376824582227 0.4947181790941624 0.8716089382269354 -0.2881214924185107 -0.6748441465844126 -0.9027583647303339 0.018507577673893216 -0.5151169851105262 -0.616940606190717 0.3059263738764395 0.4758709700954207 0.30234294686616514 -0.8032944535781601 0.21047942165644273 0.974069429146748 0.19551466164486464 -0.6967532930799016 0.00939787440788642 -0.8942060976823256 0.14412293803298004 0.008664833805007932 -0.5473754225196596 -0.8775349332201903 -0.7986740623904001 0.1532496360720863 0.15162868557301468 0.032955733926126385 0.14127182015386852 +100 79 -0.5089739047561443 -0.5089018649238695 0.014217560677588503 0.49281658026069586 -0.7700363392705234 0.07305156362234744 -0.021495119375594784 -0.23189443269816423 0.04356207394859091 0.9288939919845716 -0.8676783664234962 0.8428033188704274 0.14414758889802792 0.4532465728155024 -0.01986534532238471 -0.6053906401065452 -0.6595743261180957 -0.06370873106153163 0.8204356717960739 0.6448589580033521 -0.7964541919477555 -0.6403727061459001 0.44374537285481974 0.41976076374019167 0.9443437762956901 0.8937600096657423 -0.5383744608204397 0.9114875913995257 -0.22030972754347333 -0.4541065882060633 -0.48301969850252924 -0.7753090314297855 0.8078920436507735 0.15583056304778653 -0.38556408220898475 0.9104617430610937 0.7528680848365159 0.09360201203537066 -0.9520698589825434 0.8306352202251133 0.6603365754965012 -0.27155806308223984 0.332295719673817 0.2438852060307355 0.9196221544141623 0.9523411327624645 -0.2943721701910609 -0.5813784228067111 -0.8535128583775162 -0.5240386579110952 0.4149120135292419 0.280735065652707 -0.9525693674683127 0.16539404205423236 -0.10442871749262927 -0.4844017340043818 0.22431964223627254 0.5539005188294743 0.2500392943893295 -0.3361380703738599 -0.8911717257183682 0.5151764912243555 0.43919665308592926 -0.2008395293691836 0.6313436012825724 0.12043185027445924 -0.7690909934418244 0.7053091246566321 -0.6414744606908787 0.19523263587833983 0.8800187910687383 0.8514782957871381 -0.6087635200413166 -0.7706597366079422 0.19292910041171019 0.5829228257915149 -0.5592525382539526 -0.08001585908693754 -0.9405031446508083 0.2588965916093273 0.8922991632602395 -0.19127426437055917 -0.3705829072399438 -0.7850582445717595 -0.7681128519460922 -0.564550963043152 -0.5680771417738704 0.20495942328668293 0.035478003728831364 -0.6673902775286404 0.9555127331954434 -0.34625890239385093 0.6189757500995288 -0.275216006831122 0.4915645539961342 -0.2599959454848335 +100 80 -0.5584868466375181 0.9296505149673868 0.8136863834222932 -0.14295647916579113 0.7187644912927131 -0.500206182671725 0.4964617600587451 0.6399092200964838 0.9704346204927616 -0.5985289866259549 0.44955074169439735 -0.32090606815042144 0.9638903812079875 0.827903405403106 -0.7541045726701239 0.8107900412306421 0.07340754689593498 0.04787631660360092 0.8047990225968766 -0.40401904196197913 -0.6733874274460159 0.18849529841520307 -0.013208507168230854 0.46090707672919273 -0.4906587628931207 -0.6318199422616833 -0.18608322955828593 0.6440547600353268 0.6040917877878815 -0.842070358366336 -0.5396442223319082 0.11046935194974172 -0.9325613813120142 -0.9384330985151939 0.5647143651618309 -0.6380653080090661 -0.8424118369231395 -0.13923361274013257 0.2574105532876123 -0.6437800824032063 0.9314788669699678 0.09168531050616235 -0.3541939022826748 -0.5904210779690775 -0.6515258740445169 0.13451010142094533 -0.8252622303982406 0.30991584543918993 -0.8605250956827548 -0.5877495870151579 0.500993487173101 0.8733440403811914 0.5679971931095356 -0.9517426227498593 0.8755072263892398 -0.05076524610406663 -0.8043411491666814 0.856754801874309 0.9560230218004697 0.8600266486527055 -0.2079671674348933 -0.7077357340647972 0.10707952275988197 0.9174274430725937 -0.34629568121841436 0.49148517151388615 -0.8884127064457794 -0.9170571661344682 -0.2815636085254083 -0.0026917323348116806 -0.9757639461418257 0.5660064471128856 -0.8502517938858054 -0.5568523778356604 -0.49722285371547703 -0.7939623566429161 0.9527183604217633 -0.10079419131561429 -0.3700123558210118 0.920343867474529 -0.2986930576391693 0.7201108050084715 0.33335124935278304 0.5673025126677325 0.15152447073686437 -0.7069980928119064 -0.845921898414294 -0.5710650811618612 0.9065513318584029 -0.41596069138879677 0.6906203987560251 -0.9249371379467506 -0.969781750855019 0.3028199597562802 -0.25566105618480917 -0.07618412438499567 +100 99 -0.5379872733822535 -0.7618482038244292 0.1266775819244661 0.42971472566293323 0.6039915956983957 -0.18025796000141825 0.07334910125687233 0.28768083837232283 -0.9641412736556525 0.769748099039659 -0.5874890485920643 -0.5469965087426922 0.5175564167314888 -0.598362342190883 -0.8293917879757395 0.9496467517801013 0.6584180448161796 0.3254406353194075 -0.2952793735449417 -0.6066475954676516 0.30782246004493663 -0.6878592309151397 0.4187078737061256 0.021295158877875586 0.06714171779751332 0.7081363641466658 0.23067339467004055 -0.9208770327862477 -0.28115839312146496 0.5421319614278943 -0.5784450365083176 0.2646938029336301 -0.22224601467234373 0.9226369160427224 -0.04417237423998577 0.3163603137095319 0.952456321364056 -0.8800660978523629 -0.32386817799962975 0.008298083916981946 0.6517589668791031 0.4050253853434931 -0.8613825734526781 -0.23091623620896606 0.28841477622559064 -0.5306670188316307 0.37338279273848163 0.017551602027636726 0.24493235848875394 -0.5353457873861571 -0.40975991396643763 0.0655471445550837 -0.28868314272587914 -0.14587627381985202 -0.24368714064565955 0.9515194032419281 0.8383094699059732 -0.7777868082770276 0.12628668946406418 0.58434681616752 -0.6722270895616067 0.5944614442693075 0.1501849116355749 -0.0022717726225762735 0.3290469532584146 -0.9680853677536021 -0.524458718890775 -0.8833206662378841 0.9161147391864575 -0.5904355784702784 0.3293786303787085 0.928407175427802 -0.7778709006691555 0.4982402269228794 -0.6927578406596855 -0.7940488440073181 -0.05256547905761577 0.7902728548756548 -0.8058282891379753 -0.20128429018985838 -0.2080680240466828 0.7163518618485312 0.8856451164846812 -0.1221077029993416 -0.6502331585700423 0.8494137870133736 -0.552873708818606 0.8366099429063616 -0.7788569752363759 0.07941721403945046 0.8132209782146682 0.7019183716992006 -0.3526740247822364 0.4926264881985196 0.10254801620989129 0.2636006592653548 +100 100 2.4115769959153166 3.7268283732450826 1.8113276302460481 2.0266515440823056 2.8490440476197456 2.7679798646343556 2.6064713821085004 2.6558523845284165 3.6879913235423576 4.353817544462063 2.9548135527829444 3.405413343790297 3.5272333053135716 2.8692969308082814 3.234413115032096 4.048199677147759 3.5655636840961975 1.8231331851261707 2.7471632286422434 2.8403557494338636 2.448979867196151 1.9654772153243782 1.7913517343091623 2.0872868484371314 3.1983779935467433 3.355841555022363 2.2075887472371907 3.930035640119915 2.5266171305467564 4.4802805904520735 2.5198451612178703 2.7861480431683145 2.8011008273953895 3.5777638085260133 2.842326891694669 2.8841555998939556 3.1553687883555313 3.9127293306468527 3.269029747762847 2.3642357720399314 4.559600127199787 3.436740645292089 3.20082148022628 2.721199866597151 3.683755645418865 3.8189299701239374 2.9206765846719565 2.149930796006072 2.9780032332563025 3.4380419689862336 2.6628288365742865 2.194712186764437 3.2833330109640437 3.27549700675632 3.408058617796852 2.7731591098956048 3.679804184672019 3.7383602781805254 1.9306880163583322 3.1148190405211027 3.2731550572949937 3.8054265948190906 2.5688110483231874 3.2477422254035644 3.238606296221695 2.7776873452013406 3.9542098198571547 4.728322761669969 3.1047096868082824 2.027090597893012 3.2051267973614346 3.0063584249840907 3.0280721095308722 3.464152438213087 2.405629386957379 3.543291289667678 3.758272862605073 2.927218602452367 3.2741619638445734 3.6476031475988098 3.743858808931093 3.4952489712100254 4.216451360911332 2.9101812504180806 3.829814833002956 4.012571545974279 2.540611762073225 3.5524246951716036 2.991854184805934 2.712890259175947 3.691522649853187 3.899899822247678 2.874527851941113 3.0331521856801684 2.3144157164791777 2.8208734413959338 +100 119 -0.36089001654992847 -0.2600629871327895 0.5173887396620598 0.028894478843649818 -0.6611106919558074 0.8903313432592039 -0.2794489259750388 0.7112780576836046 -0.6607413935252353 -0.6314985518009997 -0.03156797805629297 0.639535942786126 0.8453070979922228 0.24950667216595712 -0.4404332764795449 0.07163034972456939 -0.7219871086263947 -0.11663528828999259 -0.5883112937536248 0.03137463998457646 -0.2717831487261173 0.023826538889879068 -0.2757401965024264 -0.06901336466299446 -0.5307348917842238 -0.4832619442415744 0.6628603849463564 0.8375464313641754 0.4969300025105612 -0.9102536042436309 0.034166221302494915 0.6099275190819715 -0.3687013529373999 0.7218690662314258 0.9314002491892643 -0.06757515200340114 0.11825224162669512 0.9513060277019796 -0.8526897751119202 0.04151823317924408 0.9071018839033842 0.8242748131473914 -0.10523224321706892 -0.7215906511945036 0.7123737160592256 -0.940336383361144 0.17692422247812356 0.2843275688743139 -0.03728526828106804 0.10524502171115135 0.19204084765988694 0.04919579824512654 0.811590975553595 0.7338702023700878 0.26257565885959777 -0.3567774918368136 0.467506148040463 0.35617983944896614 0.19402625504084892 0.2975282192888071 -0.42354969392136765 -0.26692346528716016 -0.40332046977561653 0.672746796715674 -0.6239050079865993 -0.6924660141411993 0.8425803311839675 0.632142919348819 -0.6649809686375239 0.012316825105820994 -0.638359341031842 -0.3528100408316319 -0.1635790346511261 0.3520710146497017 -0.7207225112310027 0.06563975017552837 0.774523877985388 0.984819650912109 0.24029636136176236 -0.8378851876905509 0.7831393189258415 0.7710791472509486 -0.9678282993194973 -0.789858840311674 -0.8323484328105522 -0.10470113323069663 0.08964466594762777 -0.6155380536348414 0.753063139616662 -0.778370140164717 0.8593743662834288 0.2974126529201049 -0.36510635139326175 -0.8085682112420749 0.38520637457918716 -0.924165089644341 +100 120 0.27565450639304623 -0.3980584085546961 0.2267888311722599 0.33892998260419316 0.005719323992305236 0.9006402581108688 -0.9832717225125811 0.4404672643257399 -0.931087955126207 -0.8075828133097807 0.4904721745121776 -0.253301940876945 -0.7367800256117432 -0.44362089828468143 -0.4704195657771997 -0.8554054953898789 0.7397649391629173 -0.3277983597766665 -0.12616516707754433 0.799968954380637 0.1034796608640356 -0.30475913537342847 -0.23851040179257255 -0.4242414922084896 0.5655111254877683 -0.4781113599211615 0.2327467258516629 0.19318154754744254 0.7378399768939972 0.8509065192784999 0.8021843025159765 -0.5531704961394026 -0.2841491854107394 -0.4430951144081845 0.12843340070083897 0.0846853120369977 0.049901907907705434 0.8607208714131802 0.7696362926922558 0.1490622400192656 0.6178452439546358 -0.9970627458307795 0.630086653458545 -0.3859706108491161 -0.14782311237872348 0.8848564353391819 -0.9655457973919432 -0.20513743793586992 0.13767824167989517 0.9235042186348936 -0.58613542405893 0.5252319975976547 0.2572569673474494 -0.9128827990778743 -0.9961411826487523 0.415201014959365 0.6227721227772605 -0.8644032055383781 0.17613178979148758 0.09366140366224229 0.1718799037512888 -0.8160405226820753 0.6578540857242001 -0.4918431928598257 -0.4213020391286424 -0.43629650932111086 0.6456976348804067 0.9028446684013911 0.08038269677621379 -0.728907321452483 0.3073680427730059 0.23820221367279126 0.2274303806596134 0.8980380518781952 0.14418490906115133 0.500419033343543 0.516221894288249 0.5064545966122034 0.834164284710522 0.4771082980061452 -0.6363785607741359 -0.5400992511623188 -0.9159883992381244 -0.13978312153133388 0.4966940192672302 -0.898445375005561 0.4031890979535262 0.791103042344202 -0.031210630433930797 0.6656029392930376 0.2951952349948668 -0.6711488826824064 -0.39113623410581777 0.16782816314426818 0.7563432713310321 -0.7624467413272036 +101 81 0.9195881001616826 0.14110096219186574 0.8429320656030099 0.9589299072127646 0.06275153688245805 -0.6506771931879323 -0.01949909302523256 0.15554291527480713 0.4124967446737058 0.19507988291327805 -0.6770172488707014 -0.9579671711113691 0.0434082314589066 -0.9077995738472633 0.6626177138130005 0.3833132332119966 -0.7090815779426218 0.9969939062997086 0.9332462944935871 0.02765213387696419 -0.518890099693933 -0.018581449392753635 0.6811539536609055 0.12030421572154082 0.2114030313079207 -0.3815761156775024 0.6635538987793135 0.6772080168926695 0.21417132696427976 0.06738892225050774 0.32571599696893294 -0.07198898098305473 0.013188484173116244 0.06636596606851808 -0.3489344876104459 0.9899748317749246 0.9717370327990733 -0.4680409447106424 0.8409848837223894 0.5449470045573359 0.5824714633278341 0.20513259828298658 0.8347512204512468 -0.016128815462498336 -0.320738282424327 -0.12327808917718541 0.37116756171977094 0.991529286157377 -0.15707174486269815 -0.9109364484236528 0.12749534113121896 0.9808750754967384 0.3884024463254747 0.6467845657953935 -0.38578807379386104 -0.18989242374540338 0.5146927255470217 0.4575196532361545 0.008332851038949762 -0.9148338563165797 0.15984637757516196 -0.6700597143248055 -0.24591974640347236 0.28087850829373306 -0.8760564788912784 0.31289075657298193 0.5136255954886877 -0.8915515176235398 -0.19756187568304617 0.512693521263611 0.713289457260659 0.7088526079540207 0.2863013594351058 -0.13597923426797354 0.7510209469843847 0.9331667369933743 -0.20437548833835328 -0.40261010288345034 -0.8055132311561366 -0.7594939114060042 0.05053190492969262 0.46961592447758793 0.9933271216149997 -0.14449466031831637 -0.802194986994196 -0.19818245873749096 0.19027002797352943 -0.6306797565046169 -0.3193190559413517 0.5960349685815907 -0.9271604089053342 0.5114440678971903 0.5347371224727626 0.604253866233023 0.21516700186041948 0.513255181506854 +101 82 -0.9880872271786911 -0.1610719067342956 -0.5556569741541983 -0.5152187019171748 0.2956495794274163 -0.06092202134871694 0.674718494907548 0.12939353826114108 -0.13977281471680003 -0.9144193213367169 0.2583109350342383 0.02566969135903885 0.9207187999323447 0.27851935883908285 -0.46695323540617295 0.4790011848868818 -0.11644106420190803 0.9736820271228348 -0.49977708182422864 -0.4827458703150156 -0.3405317011485829 -0.8205956124870428 0.40442626702127704 -0.8989795620823244 -0.25831752219674264 0.32978975361300633 0.1292295256491347 -0.024218068296133488 -0.49785582740453393 -0.8643704105890628 0.09346400342453376 0.19405459003305547 -0.03681800409941771 -0.46155580779898786 -0.9035356021212488 -0.9783302401882545 0.6874035555496414 0.8095923553503828 0.4336032959922953 -0.45599413117805554 -0.5400858974202907 -0.9345807190800517 0.0410886441145657 0.31331264075435694 -0.21878260970230778 -0.6755864471610165 -0.019161897009825513 -0.30233013917180385 0.29762566017366576 -0.19885228094712049 0.002660428160121242 0.8614384802761641 0.8267846530964518 0.09216241037441453 0.740778713228377 0.13085000079080666 0.15958258200637676 0.9661052096946516 0.8433926336227047 0.023136164047804275 0.81039461814406 0.18393082286435658 -0.8507456626464449 0.8100956945591054 0.163014938463522 -0.5001038444384269 -0.3095489224021011 0.8040015111729035 0.2795763523755461 0.13264969622935463 0.41250869621696085 -0.591882623665146 0.3725475565022289 -0.22169520919791097 -0.8312330724114783 -0.9029327869440624 0.8826283962492993 -0.8733090165592801 0.046798536996321305 -0.6826427571358396 0.10587540920452332 -0.176400741843169 0.9935562502121371 0.5429911320939211 -0.8479799207930288 0.33330237087856895 -0.9005322698296061 0.24030101198731724 -0.3920093923102723 0.3631274416201329 0.19054488105423872 -0.31266597740874524 -0.9286248232730641 0.6189238350037234 0.7709753017496539 -0.04139517350231814 +101 101 4.046581625196411 2.6301292120409805 3.5897904117274546 3.586120078217549 1.689135847656561 2.6692239846578514 1.8755194706497542 2.2529669911930847 1.7389203071021428 2.914615297417514 2.225526075075142 3.027265031877351 3.4644420320747575 3.117414429779628 3.2974037583565567 3.3135374747188893 2.822226387207709 3.9667731169695917 3.7237464992385556 2.018083949030144 3.1079810984288225 2.408372617735292 3.468419724465628 2.2947652308357442 3.3678089313865733 3.2462239721505606 2.097623718462179 3.0093543475208406 3.359502854018975 3.779612085917761 3.163185216628758 3.295427438694074 1.955677331347702 3.0155854210574464 3.4365900542186356 3.928720667181545 4.3275145939106014 3.19617278707838 3.532744968227715 3.856359826768106 2.3619598110422806 3.0275464579163414 3.58003029988679 2.166103705077382 2.1880049765872482 3.0365086476114014 3.073260704083105 3.7964831092866382 2.2573307613981974 2.5835317883585933 2.1650657207484088 2.74324347882895 3.0157396251171993 2.47955251665206 2.024659077580766 3.2344232696825856 1.8320640827662689 3.6575906653865164 2.5455711458873482 3.478772133832072 2.538020770377603 3.3779163573574342 2.877659787668628 3.6579801201269477 3.404373121845529 4.300018829993077 2.400203539514031 3.858171970008029 2.744702394732748 2.768146431578096 2.9649221431950705 3.051315245657505 1.9662069053232116 1.5758375473886421 3.125204637798668 4.456222019247712 2.2520331344002606 3.5536245780805986 3.5669509865517988 2.643498256264424 1.0535945920905754 1.952406930572924 4.529070900052634 2.9812774233288666 3.496636145569837 2.5864543515878657 4.325917765628614 2.739298658362207 2.765789308694342 2.8060324883920598 3.180198746858945 3.079400704075326 2.5804820472219356 3.1605170727717633 2.8937289419685297 3.155016702043338 +101 102 0.5802229116098754 -0.6892925942167274 0.07736616480338365 0.8432630946592943 0.301942899998342 0.9342351967109621 -0.26075896681834587 -0.20762531994458477 0.14923761962409143 -0.4987905678764031 -0.10666563192898737 -0.432571692954858 0.7757116366168253 0.7875540227785462 0.7155441000962983 -0.9397192780044681 0.9915497853938442 0.6990910171265898 0.408267618381672 0.5133337874916619 0.9245675495945485 0.7150084571989856 0.7327913314386933 0.46672757184620095 -0.725502852394996 -0.43933569997775845 -0.06855331343741966 0.7527798106216144 -0.8684477630785561 0.982092443693581 0.6717686386682427 0.8173236513531261 0.48066963624877546 0.60354739155483 0.7882445477003279 -0.9458250898682519 0.5507503940611427 -0.5093728459070304 0.7118277886728135 -0.3329278527221955 0.9517160321680933 0.3810877513729094 0.5484461385486468 -0.8101990879801677 0.3029379451562282 -0.6450561865509168 -0.5033256132155417 -0.9657669976066863 0.9466483800599235 -0.18672226112527013 0.8316024693640085 -0.3364571865523538 -0.34655671412947164 -0.14229663648335467 -0.31416234569521717 0.8943837400538033 0.1751679488363791 0.3990634544768905 -0.7372149366073539 -0.2995894535789234 0.6172529207585224 -0.8979647855915192 -0.2396949373163173 -0.44385731746797363 -0.15055651161865513 0.9547733386573529 -0.38851493304015405 -0.13836253803194976 0.6784664073361766 -0.26954345754339615 0.6012490856196282 -0.2692486374925096 -0.1958188334964044 -0.522032074804196 -0.6359108884137159 -0.8707676124183388 -0.12794249897925503 -0.2926936506422233 0.5728781966211558 -0.1756381414276038 -0.3575337184624492 -0.5598975659567766 -0.836534429011371 -0.09415526330384472 0.3666055405879285 -0.7914999536383007 0.7589587189002462 0.270635640376361 0.22728607889714936 0.9297924933772603 0.1610352597661866 0.6302923765136614 0.9603228922768836 -0.5625093046093477 0.38125941456040224 -0.2383850826039231 +101 121 0.7748382901544866 -0.37215105508522983 0.9374138474458686 -0.07243126357621277 -0.47666713933666505 -0.0955858620762351 -0.2687282030609006 -0.7066682723525093 0.3356450802167519 -0.15483755942572364 0.40449820885475063 -0.7550230366292197 -0.24320948015615285 -0.015072886535041574 -0.060428783171849076 -0.5301503304648274 0.7886188973067874 -0.5269431614535476 -0.4243614755275815 -0.27940814298988115 0.6895536980411816 -0.42146569189633487 0.5629570022690065 0.1750865748465047 -0.8978600713003986 -0.9255148477392017 0.2449640826366437 -0.06594947266481177 0.6053854342360476 0.9171168413858346 0.7483964746784741 -0.6304775242645484 -0.6805713813082623 -0.9548212390810316 -0.5086504350952799 0.3856317553245636 0.7244519260946496 -0.23917108821660116 0.5286231452014047 0.9595593883376794 0.01969816504225541 0.5779142877359611 0.9613759282013552 0.15663781690007306 -0.1350994507647667 -0.4950163809905015 -0.9795457383330128 -0.1397882310571097 -0.4108664762838272 0.607262957314038 -0.12498393342197112 0.24871362542333397 0.5802081965781953 0.5303329568951183 -0.26782907330951744 -0.5828021027616552 0.5376924011826614 0.5991672951477967 -0.346284710760431 0.9605649567477215 -0.6337108205323394 0.7411784426832468 -0.5949277057962064 -0.8776541787374472 -0.7350983346277453 0.7648920266405606 0.6456386845128819 -0.03063315724337934 0.15959215481867406 -0.9588641338473103 -0.09131530671991617 0.7912016346291759 -0.6835677514367284 -0.04255738644443707 -0.24433011991394826 -0.2045840514829882 -0.2731008354610722 0.9719588634912928 0.85034572039751 0.0023186112878434972 0.026229629578004232 0.4041805659058517 -0.9307950311305755 -0.43609085486353494 0.9803562893279154 0.3445022819206631 -0.9714162349142923 -0.5871223555988083 0.33452766288000735 -0.6836881494935794 0.9819778995139836 0.09478832529122805 -0.04973411497299729 0.9091154295823343 -0.5572209297662232 0.9143582163708328 +101 122 -0.3953350504512778 -0.5109382109742422 0.9346126800638148 0.783194373224015 -0.06585732339769312 0.7729948768692956 0.20254098199643833 -0.3068744510758554 0.07349176998147855 -0.34630181461592957 0.33529909929342927 -0.8271639692852264 0.6313902512163172 0.981281676672543 0.8240176096203395 0.6931272664221066 -0.08233135380523748 -0.47027277939783785 -0.7395399331034065 0.18019811689052512 0.3354482648923862 -0.20586493253334348 -0.7481034445913022 0.023645370478688976 -0.3071271820374293 0.733052081723504 -0.6482817182330713 0.6429399250654217 0.41060969874605835 -0.9278979135295051 0.9971885957383686 -0.8679371017425856 0.017443871189893656 -0.2278723281521433 -0.23567302154473535 0.011576027483911622 -0.9611846956070174 0.3063900462782767 -0.7515235591358034 -0.7627433011561326 -0.10723802145514183 -0.4467242474641451 0.8304235476712878 -0.06955360337691108 0.35693629476404043 -0.17714630327984882 -0.4821633583476055 0.7449639006334459 0.17703762584861304 0.3090832833878536 -0.5581251778851584 -0.012814717484284976 0.37335389810492847 0.4937364289566024 0.24110624469637165 -0.6862647042864665 0.40066110178701253 0.8325913703492678 -0.23749333901317504 -0.516348284271335 0.09960597025447515 0.41751835232425516 -0.45313062906628065 -0.5797674772425976 -0.9103735813711831 -0.9868939791286375 -0.18465008909246516 0.9951318486926324 -0.6909245765120804 0.1398915703614798 -0.2649092142885925 0.48919358863811535 0.4261771907634746 0.24145559354121482 0.39985428291469005 0.6998030265727617 -0.003100870896884267 0.03140067325531781 0.8071824028489898 -0.3159221204204048 0.3951295010063003 -0.18081560206539038 -0.15532467828401098 -0.8813369068519961 0.27340847668125434 0.2648724024084719 -0.5301654213681637 0.8959912915703416 -0.8475302640566735 0.21332873173844957 -0.4390414058640224 0.7116511382048816 -0.08157306554093968 -0.23421918844937029 0.7171810453372878 0.8889556169000981 +102 81 -0.2477669904974511 0.5445541279553869 -0.05561774495899541 0.9744381257482664 0.38745619541885734 -0.9793167652196999 0.9693640710203604 -0.83584705911528 -0.14102704786970222 0.8379898213884225 -0.12910916457643085 0.2336544088087702 -0.5332896664010691 0.9351733445646531 -0.647213756821847 0.5291794840454775 -0.4946551909598347 -0.5693341371046847 0.46043936338351465 0.7197475966969868 -0.7790381812501637 0.6180859063585853 -0.5106506473336496 0.9892067849134847 0.7929021610251912 -0.4739660105392669 -0.9733283392691372 -0.39622500516810266 -0.7389124835594298 0.572968938687203 0.6515710091493823 -0.41611171018904813 0.9973332092940141 -0.7978422590002416 0.28870117266281903 0.7513294386383143 0.19244627343134857 -0.018410574343470376 -0.43862368892079684 0.07120151438408207 -0.6845258118781399 -0.03385239800066553 -0.7864428860737147 0.971385251845194 -0.867925914076884 -0.7987933495178545 -0.8376578951312257 -0.91192928164603 0.424403212536012 -0.8542420841322207 -0.0819991048116282 -0.761149919136507 -0.16093874473561876 0.4083138426536399 0.4977858293301409 0.36939491093607235 0.023187905428916356 0.10683183205828173 -0.5927255646945604 -0.2827720880396596 0.347548014569355 0.8788828576942653 -0.2822288057709039 0.5471104804790954 -0.9456780791965251 -0.3548114032841514 -0.6545667933401547 0.564418462949559 -0.03958764837379669 -0.8713190470146277 0.6449270734557562 0.34421325774454825 0.4703995616025871 0.25076912426592757 -0.6950560466400779 0.423951566084378 0.973930395646375 0.4392924560300928 -0.956023978263089 -0.7093657782412546 -0.44070191244543677 -0.7892044585614133 0.2917039510493322 0.28043454913821697 0.7106500174696913 0.7277145388504689 0.3435294343040858 -0.8565113339575559 0.09476167598181262 -0.4459190964881241 -0.3064916081379856 -0.8358525803145738 0.001982137049818755 -0.7823938633253256 0.09300916296037509 -0.7129883232948644 +102 82 -0.8591222688251929 0.6454920616337125 0.3848547396958937 0.06937962152947552 0.44050153888703925 -0.6958669861735132 -0.564702311149823 -0.21727004301924402 0.6174499440465246 0.4808454321477511 0.26807331856863437 -0.7673367613974258 -0.1193269216082753 -0.05883062847062437 0.932232015691369 -0.67650327123588 0.20648859524297203 -0.01602127192239755 -0.7485285031914763 -0.1576196380262891 -0.526856907205492 -0.42635892865643465 -0.2801394666299697 -0.726900199893991 -0.7524380832880746 -0.040413191203611865 -0.670750460049949 -0.2124455927591764 0.757460309246206 0.15457304549537598 -0.3861139031514935 0.44044817789059354 -0.8266987581526011 0.25464098122081635 -0.5114632836186166 0.1321730575999691 0.3615667189917746 0.5939288615051133 0.7575012265648193 -0.9346215413076577 -0.4180330936533654 -0.5636452376621133 0.5121063375038957 -0.34659421178894845 -0.6620578113053988 -0.16023943315393918 -0.5034014322574776 0.739757131870955 -0.035082664308347944 -0.8150358266425028 0.6060762743901684 0.5094666437866715 -0.6419296383074042 0.25163787793437153 -0.4490140764664321 0.33880394421360527 -0.43553056797136924 -0.21223436331952383 0.9198216380845059 0.9464767313565707 0.7649658073974499 -0.11803128181871947 0.8323043595291109 -0.49908727366369754 -0.23395211961191964 0.2982019728537415 -0.46436381087119316 -0.026135659714144666 0.4336921342514417 0.32329072113669777 -0.030731241230526507 -0.4934347242690338 -0.07006185149684097 -0.1548719095009612 0.7597297535092746 0.9713702831015745 0.07187357028190156 0.5140175677951937 0.8972443270943977 0.9315483217776213 -0.9304281577923783 -0.5646538919654371 0.2732096144699283 0.6779087420428223 -0.45709037064795477 -0.9495615214597024 -0.8218418082159238 0.03729592384715308 -0.543526967229703 -0.6696612245602933 -0.21529079285286779 0.08581208764381465 -0.5592673399196535 0.5878120000708444 -0.7865001923579662 0.09734505668913407 +102 83 0.6908994310758954 0.18444352159508703 0.31372046635195305 0.7062120933203431 0.6891907018376524 0.44336128138066 0.20842307127460757 0.8969525988245917 0.7513738359625144 0.4081138789966752 0.05150808816434216 -0.15635344999458223 0.6531475683178558 0.19597689135490914 -0.12025636887884783 0.39208981029951606 -0.36974505017852644 -0.6031103415916341 0.7644400428965246 0.715431440206088 0.6895895786936606 0.5215089572078575 0.20042123714224447 -0.6989381225946936 0.7221099832608939 0.24961087635812707 -0.6236004700864475 -0.37980118521179285 -0.48941741513378556 0.8699938667221161 -0.27379498723710083 -0.4068337976231817 -0.9951388202345224 0.30754429967273267 0.880736422093054 -0.12273080196458541 -0.6339530569661611 0.6307245645948001 -0.7355563667407035 0.6254554349441497 0.5682017497683913 0.32654345901958215 0.421061881843116 0.9210313527711729 0.40788336016793436 0.06337738666722048 0.22639859137875584 0.684362269716136 0.3100822533364276 0.34341174487002113 0.6702554606015119 -0.9509954466942796 0.043093120712116795 0.6724769344822608 0.6031888601663509 0.9390304786294401 0.9446369969764297 0.45205983877136835 -0.6344899382953524 0.7705283945675463 0.597850032436875 -0.7814308288591802 -0.3163481657445908 -0.6881578225466689 -0.9251267232239875 0.23611895530504334 -0.8813643507803155 0.023219063606424672 0.06130011933819346 0.9985227515308612 -0.7179779536648294 0.7099603459301351 -0.9319793278573336 -0.24342221063870317 -0.5523467809103093 0.44991049019184715 0.8062511066373839 -0.5884585940428311 0.6533519887120909 0.7212371835549853 -0.6858210924315713 -0.5032782135047829 -0.3299892339378525 -0.15581772489850487 0.8294021991476173 0.6275237436011794 -0.38071097068752247 0.053593859208391104 -0.5438565982457007 0.8353176967800457 0.9035054508598062 -0.12523507007985435 -0.5397195801887822 0.7343980874575657 0.630757092047423 -0.0487568372185867 +102 101 0.5802229116098754 -0.6892925942167274 0.07736616480338365 0.8432630946592943 0.301942899998342 0.9342351967109621 -0.26075896681834587 -0.20762531994458477 0.14923761962409143 -0.4987905678764031 -0.10666563192898737 -0.432571692954858 0.7757116366168253 0.7875540227785462 0.7155441000962983 -0.9397192780044681 0.9915497853938442 0.6990910171265898 0.408267618381672 0.5133337874916619 0.9245675495945485 0.7150084571989856 0.7327913314386933 0.46672757184620095 -0.725502852394996 -0.43933569997775845 -0.06855331343741966 0.7527798106216144 -0.8684477630785561 0.982092443693581 0.6717686386682427 0.8173236513531261 0.48066963624877546 0.60354739155483 0.7882445477003279 -0.9458250898682519 0.5507503940611427 -0.5093728459070304 0.7118277886728135 -0.3329278527221955 0.9517160321680933 0.3810877513729094 0.5484461385486468 -0.8101990879801677 0.3029379451562282 -0.6450561865509168 -0.5033256132155417 -0.9657669976066863 0.9466483800599235 -0.18672226112527013 0.8316024693640085 -0.3364571865523538 -0.34655671412947164 -0.14229663648335467 -0.31416234569521717 0.8943837400538033 0.1751679488363791 0.3990634544768905 -0.7372149366073539 -0.2995894535789234 0.6172529207585224 -0.8979647855915192 -0.2396949373163173 -0.44385731746797363 -0.15055651161865513 0.9547733386573529 -0.38851493304015405 -0.13836253803194976 0.6784664073361766 -0.26954345754339615 0.6012490856196282 -0.2692486374925096 -0.1958188334964044 -0.522032074804196 -0.6359108884137159 -0.8707676124183388 -0.12794249897925503 -0.2926936506422233 0.5728781966211558 -0.1756381414276038 -0.3575337184624492 -0.5598975659567766 -0.836534429011371 -0.09415526330384472 0.3666055405879285 -0.7914999536383007 0.7589587189002462 0.270635640376361 0.22728607889714936 0.9297924933772603 0.1610352597661866 0.6302923765136614 0.9603228922768836 -0.5625093046093477 0.38125941456040224 -0.2383850826039231 +102 102 5.278146305076204 5.5017299261108015 4.530732034325352 3.99713942235444 4.546549440808285 5.476457477649966 5.436154676941335 4.723318301606824 4.862066697286655 5.829353973700098 2.5164692638947668 3.932610211391637 5.050907437810519 5.349646169837515 5.465792720370144 5.785272851041686 5.813238635675741 3.564733036669608 4.337435499648601 4.138250933458728 5.760898618153117 4.3760391591394825 3.865164264272904 5.108868013710346 5.211690549244587 4.222496903860547 4.915318476874703 3.1388089670535715 5.497639352164286 5.554945499963662 3.5139397133139694 3.388384504049041 6.3913175299447476 3.78101881058215 5.3989565635968155 3.7069555272686214 5.321342507229448 3.285630999659925 5.912375725340381 4.28663210834546 5.168173300198696 3.9872474488626524 5.5407719428627695 6.03007715451266 5.072845701814592 3.918430020949521 4.119289805870512 5.957693336241386 4.178709459345328 3.854948185100376 4.714475204208243 5.652163573567844 3.4993700648365573 4.270793978321946 4.892802728206266 4.524011610288753 4.166519953657563 3.9936453822169535 4.810892322214109 4.401578691717665 4.879472205204982 5.152668056576616 4.166353477556651 5.165933877557634 4.49099735518533 4.503041829979381 4.4731060946353605 4.130282600624975 3.5440367393357475 5.530454278107133 5.008853994662385 4.210004736737577 5.565833361063248 1.8341040671806386 5.0041343837767975 4.565974765546636 3.995253255437027 4.398438504308517 6.5139484185517755 5.3369745320398225 3.490189409733844 5.407417866793576 4.310250060508717 3.8502143701985485 5.637746143675194 6.501256366837338 5.350959274944049 4.053704292481708 3.0029908875633673 5.363984522938293 4.4217631033321965 4.577459396110946 4.200006845025425 5.295998894603838 4.504947865720736 3.276678687172631 +102 103 0.8957180968701257 0.9229408869443476 -0.45879286494927607 -0.8250569653146322 -0.9482007565182407 0.2701666797486564 -0.33937653870820483 0.8355645241032597 -0.50116609084447 -0.9136484115792032 -0.4780061789910479 -0.6369517205457016 -0.05373929279476819 0.8451872237901563 -0.1565172224467164 0.5044058178687987 -0.772028374476095 0.029506500608796005 -0.7279595872011027 0.8991749877144017 -0.7362274274575407 -0.4851615199551029 0.15092585175117867 -0.408686942961471 0.8332126175590622 -0.7585203309509354 -0.08914682281840203 -0.006987199335207306 0.472800379866521 0.9083268476353039 -0.196006005267231 -0.09787785616352096 -0.7815037260645421 -0.7789940499891361 -0.7636332823614689 0.8553307267234589 0.9558278589591349 0.04166318187026796 0.20206830503069084 -0.089340048489712 0.5621076822330151 0.3452455858249692 -0.8895780466015408 -0.6709379663688844 -0.5395228765626052 0.06348600797632487 0.4797760160363249 -0.9465914032559652 0.3415317606483872 -0.6826809941673564 -0.7499049582794477 -0.8677173240881291 0.30468327636773784 0.1387573951088612 0.28609647798364435 0.047403659357805106 -0.8486219591608586 -0.7585035188426332 0.7498116495433031 0.9100011337982381 0.7203505379023492 -0.42758362407162975 -0.1743221639728172 0.782082664547751 -0.5991795458614511 0.2256255775929954 -0.32841886874760373 0.5530173047523259 -0.7250066135081632 -0.3858947447176304 0.7613645318931368 -0.8810999540673363 -0.927365405583191 0.1270616197239114 0.45362808539463306 -0.553202239411559 0.34407434108653034 -0.00617439428578237 0.3298432891674141 -0.7461837786001793 0.6342226092520347 0.01670560333657356 0.9792535192571938 -0.7636257412149561 0.6998821230267613 0.6774051909001315 -0.428738524043466 -0.40450905409604054 0.6462133364961513 0.25963518642515115 0.005030187083579607 -0.7492577577408213 0.42405709813395065 -0.2563160482554021 0.9498994481096634 0.3155139867769132 +102 121 -0.7559058547878756 0.9026498233522788 0.9424081641612829 0.08900494443795237 -0.8579108562719409 0.10904468929811428 -0.9646816577602109 0.20309150740568982 -0.539550707362678 0.6995563127429136 -0.6960173096617992 -0.0858103633831806 0.9621399339061145 -0.4285076072540548 0.43343812791125247 -0.6392529919821424 0.8705850047414978 0.25152831411820475 0.14002504423733297 -0.021095086505964034 -0.9814450002520145 0.18315062549863348 0.7884620024829896 -0.4016385902925501 0.46793802863518197 0.49835778757547855 -0.6100821341064946 -0.5768637317716034 0.30789267316629587 0.9117908426867849 -0.8950659830448409 0.3281081509439763 0.14747521762034776 -0.29540486328819804 0.7366206178775907 0.08879086570555672 0.8591773767354063 0.2537918664993224 -0.8192329796131923 -0.2916604230272093 -0.5797935946840529 0.6751756582146318 0.9477175438571035 -0.914168985771358 0.5129467210668501 -0.6906316417558811 -0.2631303461109866 -0.6098745600938189 -0.6243951406238821 0.5183800969638024 -0.44333815581199576 0.8733576353224719 -0.9656229761418327 -0.9746074513189411 -0.49140687707860575 -0.4737597272953942 0.9509360468442654 0.9621351313494115 -0.6709338580600936 0.11395604366425105 0.7590339523527612 -0.19218746343823923 -0.9564586011927569 0.6992490708310333 -0.2889403501807597 0.47670828239663576 -0.7731523555235822 0.7937516410200685 -0.8270161873684785 0.344467713286047 -0.9711826515376663 0.6041983289609829 0.6455782469613325 0.05585366323723728 0.7518174924523437 0.2774891038469294 0.4760053771994468 0.5336471445931077 -0.957996908047577 -0.753204847322791 -0.032541253611377385 0.9336631602694021 -0.2677543041709891 0.5032541487592406 -0.7972485506002915 -0.7956456133912011 0.15557791517203867 0.5800490136412015 0.37582207655234434 -0.6139550973644097 -0.8602076562372489 -0.8862899108438205 -0.31146825625235564 -0.3066572305715829 -0.688394235261349 -0.9269003237771332 +102 122 0.49543606581657507 0.1184644053858428 -0.9731630582385633 -0.042155335034135266 0.19362420159152038 -0.9482160575829301 0.680642784748066 -0.5408418720407373 -0.4010922417507412 0.937876829219509 0.3857649143630515 -0.5380910592161332 0.7950429731839685 0.8995996781702935 0.882660084072725 -0.798208111285867 -0.837467674549633 0.2535576312920491 0.6963305696532724 -0.9074357085652467 -0.9106442439128635 -0.13139707907292286 -0.3239576430863176 0.3276913242193875 0.2717624127223768 0.6616641284985714 0.5038555751506162 0.014924385813674723 0.909499919567246 -0.33219126544202826 -0.054708030479123426 -0.33510827136864796 -0.733772903389772 -0.37209218623012275 0.6161125398875118 0.38820233800076287 0.12116443433375412 -0.4073743773763263 -0.7353841948304394 0.8401224322819922 0.3780922868816885 -0.4598017311296263 0.16688912720219218 -0.2539204318818946 0.6783787627813052 0.5226385408683014 0.1110361124592798 -0.08042145166281789 -0.14247923940522877 0.2142883490626153 -0.22665483466634462 -0.2453646684400992 -0.345871744197054 -0.1925660529745188 0.7600143223040685 -0.6329109195550957 -0.1624172350334816 -0.7930726001637323 -0.34691646944525734 -0.36730879281217965 0.10754502730535331 -0.9701987028955736 -0.4470493492898546 -0.41032978370192863 -0.5644657768708619 0.4933810427635823 0.006687054765513567 0.5870622087131034 -0.07720834146016409 0.9938765140141257 0.11379169337253137 0.5289414607626572 0.9164865024382027 0.4546087754734578 -0.19262492345214377 0.02225798499393372 -0.5200537933779663 0.30475356061076875 0.4978542509711257 -0.3605950835502434 0.24315978922092785 0.651392155894249 -0.6082874938180343 0.22378433984384127 0.03202214715998508 0.7075580477442067 0.9236146112202579 -0.10624155173032745 -0.060768870144291665 0.7516490032336158 0.9878387292441875 0.2595121950374908 0.6856652061252186 0.6283936098976655 0.1789723005926236 -0.43911661152440473 +102 123 -0.031416166551300195 -0.80923239801199 -0.7315645332030494 -0.17551111203006764 0.4725704678747884 -0.8430605446476886 -0.6714903900766889 0.18256578466557172 -0.9498689535117133 0.8750960595784301 0.13776868602620196 0.7840092385625888 -0.21641716842974557 0.37165930526653956 0.7956793371670274 -0.4984377898919983 -0.9209810434956756 -0.5066189284013105 0.17241191331649852 -0.11148786446519621 -0.029186366871877034 0.4226358203622653 -0.7814750363804412 0.9248272670242987 0.3281092332932518 0.5618600167135968 0.6188538687345442 0.26824672325947474 -0.493438164227064 0.29682393858987455 0.21351743596541306 0.12345023417991108 -0.5003879242499616 0.052532473243953604 0.2814759580103916 0.062327520029054284 -0.9770647139502922 -0.015146676807834991 -0.9708854624743313 -0.6484976797068684 0.5702917123611273 -0.8300321522880605 -0.5543215902620491 0.9816280422867056 0.1158238573004029 0.11242712701132995 -0.5668338584150434 0.6244143340983086 -0.41116033289392595 0.02569636576049006 -0.25944574836332235 -0.3288568406980894 0.1501117292585452 -0.8586222125945435 -0.9123492403407314 -0.8024463189083937 0.329465523405466 -0.22373706087853895 -0.039275615952821585 -0.21654977681123833 0.30772937777512066 0.5054985026477188 0.8715643004109783 0.22633485595669645 -0.7636834369456162 -0.4682464548000911 0.5001724387148374 -0.5370432968008363 0.661112132743308 -0.562016034832219 -0.6762983868350843 -0.10955407481049018 -0.6492889688467252 -0.00810679025000871 -0.08998551599468696 -0.03225678774247531 -0.43738778788348776 0.7436706853520154 -0.670067490293565 -0.886709624355049 -0.09901360589525954 -0.48957184960536626 -0.5353911130871047 0.9532817042127764 0.9209247123533668 -0.4336347038569206 -0.891825326536599 0.8487179513931169 -0.5016273345570161 0.5468869870638853 -0.776135564101138 0.7877219616574216 -0.5113292094271704 0.45551879340086665 0.5555433458034493 -0.4805421376072856 +103 82 -0.0561454766086642 0.45963392660412716 0.9231368219928262 -0.7912866439942898 -0.47176447928091814 0.33300354416143096 -0.5806547916917342 -0.591643885735609 0.8025627250926979 0.7847936831975137 0.5018863869841927 -0.25633113393186857 -0.32064527504938267 0.3305240638119167 0.21472203132356804 0.466047406299511 0.6263712700300992 -0.21879664503159724 0.8059787900317792 -0.6765146486514111 0.49488231149494166 -0.5546970357728933 0.04801743375866496 0.5283532384758849 0.6003602632854033 0.08275285185304893 -0.9824839732955579 0.23448812165875244 0.48326366966776124 -0.4212871735626482 -0.4120199756582643 -0.319674997605065 0.3495607234350968 0.19436478385865397 -0.06688049025607845 0.896371473691137 0.6241488484224493 0.10384652374400316 0.2611719911721988 0.5938980386828323 -0.7524150934659695 -0.7752547515963333 -0.9806299379842844 -0.7317205518915113 -0.8297840248945401 0.02960180817913205 0.6551523711475784 -0.6619905108347055 -0.22859716264145868 -0.659145298971985 0.43511635111223623 -0.9841427658799 -0.5329789297563914 0.591139149087383 0.8427966766804662 0.7587387349583838 -0.02326020640520432 -0.06693999901946124 0.09889817825368818 0.640576604908921 0.5539058229349623 -0.786711598015337 0.5357747500589447 -0.7496265381818485 0.9780309058711085 -0.8146446299936656 -0.5637666115372582 0.14228806748937584 -0.28712417900707243 0.2940711206153186 0.4046386225765741 -0.6232871075388839 -0.6990343352894328 0.5805979395560783 0.5777741126947156 -0.7447890930790959 0.6055033651760635 0.17118419180066025 -0.6284930958223569 0.9392536641303948 -0.9028316675821528 -0.4238778656712747 0.3713208714231164 0.06549679736169733 -0.20107894225100842 0.784460249517364 0.3981317477263342 0.6413858606194178 -0.20621712983193108 0.5553072346838215 -0.3579490364518585 -0.6192055565948298 0.23559000010570275 0.5774347290525763 0.2627468747701909 -0.9890529016399965 +103 83 0.9252558841213083 -0.6321191201059406 -0.2983127107868633 -0.8824727557435306 0.8986843859633356 -0.8567926999922129 0.4230069207079763 0.3397262527587275 0.5160808122849432 0.9748842764151249 0.12140272397058793 0.4007542640714423 0.008080324629929247 -0.9989450463152592 -0.5190564277598391 -0.45003163857356654 0.47909820709954243 0.6854727289500859 -0.2606488666391631 -0.6316677234394064 0.542578370409843 0.8954495197554377 -0.9452087096404505 -0.351832111880362 0.8724136665317728 0.9446580121577604 -0.3126039799675795 -0.7809295709788331 0.1088922748000225 -0.5555686605942876 -0.7886912837083648 0.6582874013978655 0.2304501982821976 -0.07418867545602281 0.9969554736324537 0.15186531809605497 0.6021885506054645 -0.8226060691910069 -0.41676343673926675 -0.4289891512967119 0.23872892868148066 -0.35144693026852747 -0.7738683689285517 0.22360487416711328 -0.00888774072900933 0.3285866507175754 -0.5167699194857966 0.2536242380297711 -0.2937157145490763 0.07625471233606773 -0.7338543607155701 -0.6389971300931585 0.2769985007333784 -0.7803136135408086 0.6798829102831758 0.7846041996001085 0.040956907906437134 -0.7793470516844418 -0.6395644198003894 0.7147837945681357 0.6099978474227217 -0.8673526669910507 -0.38757942602633944 -0.07690310099265552 -0.18128303285169256 -0.7847435805229461 0.659658673735602 -0.8681460067783027 0.4772238975322525 0.19692592625718808 0.6936513426428668 -0.010960256168288662 -0.669467705659363 0.4055737129745931 -0.7179488362601492 0.5983698079505217 0.34017726040450946 0.034273086004591 0.5397257970469946 -0.4636007709569643 0.8012302618163936 -0.6344975018878678 0.07577408373586536 0.11199987812333445 -0.9185523761140195 -0.010739469767057086 0.09085283116297571 0.1577385586658917 0.4557157638500169 0.7681334792615475 -0.29349807864904887 -0.8126073254570083 0.6277845491705119 0.6973441665280187 -0.0259562267209128 0.593857213424962 +103 84 -0.7830506865719149 0.5168651206230719 -0.053781407220000466 0.885672715249191 0.30507372373932506 0.5613078983273785 -0.012675221392299374 -0.9746575034134168 0.4703040901609319 0.24180512446505076 -0.504186259344487 -0.6013033225477633 -0.44624789838485746 -0.5901525974246031 -0.09316270536315274 0.5030616632066249 0.2785494822143397 -0.08521061158971444 0.7655307910905771 -0.28838424735476664 0.182429719066735 0.4940833562695057 -0.23056466875129566 0.9690230618398472 0.7473232940006347 0.7580388976895798 0.23392969874115765 0.11700273871249744 -0.6369913558829177 0.16739620076165407 -0.821365993018232 -0.5936204827200349 -0.2954332060421543 0.5421903896076552 0.36519240018029375 0.22761293822145978 -0.9652726240024967 -0.24922159271899136 0.9443010621582715 0.4865215204491182 0.4079963703839935 0.8742119712010896 0.8232167204377963 -0.940712125121292 -0.24169800641973072 -0.8091641880938141 0.7132300292976603 0.11269829194898384 0.2722241845654598 0.49535653102408395 -0.15839698323315932 0.788159342689335 -0.23236279821115313 -0.46679862740940115 -0.3903553206967878 -0.8997929995321723 -0.9984479647903388 0.7048996389263622 0.9763763362447351 0.11346930150573864 -0.3664224170152628 0.8793477457572296 -0.6348066429858359 0.46705170660825424 -0.43258010844006933 0.46144461371891654 -0.5116617112715169 -0.871298607098125 0.8421669447728088 0.5695880972028626 -0.17667100430265248 0.07314752042627992 -0.14354831290390213 0.6571016383453983 0.773216485165692 -0.7029652805839928 0.1125066312592542 -0.09377205862747195 0.7599375593266646 0.8850394871926213 0.030255029948262457 0.0010734106701095758 -0.07510825508119967 0.5168056352718471 -0.25246702966278134 -0.35388647029413467 -0.2874471725818215 0.29007015290007687 0.0492402379654997 0.8967547773589613 -0.25766055628909745 0.7001483136247337 0.17408334488250765 -0.793647879197289 -0.7036418287633028 0.04878846980071727 +103 102 0.8957180968701257 0.9229408869443476 -0.45879286494927607 -0.8250569653146322 -0.9482007565182407 0.2701666797486564 -0.33937653870820483 0.8355645241032597 -0.50116609084447 -0.9136484115792032 -0.4780061789910479 -0.6369517205457016 -0.05373929279476819 0.8451872237901563 -0.1565172224467164 0.5044058178687987 -0.772028374476095 0.029506500608796005 -0.7279595872011027 0.8991749877144017 -0.7362274274575407 -0.4851615199551029 0.15092585175117867 -0.408686942961471 0.8332126175590622 -0.7585203309509354 -0.08914682281840203 -0.006987199335207306 0.472800379866521 0.9083268476353039 -0.196006005267231 -0.09787785616352096 -0.7815037260645421 -0.7789940499891361 -0.7636332823614689 0.8553307267234589 0.9558278589591349 0.04166318187026796 0.20206830503069084 -0.089340048489712 0.5621076822330151 0.3452455858249692 -0.8895780466015408 -0.6709379663688844 -0.5395228765626052 0.06348600797632487 0.4797760160363249 -0.9465914032559652 0.3415317606483872 -0.6826809941673564 -0.7499049582794477 -0.8677173240881291 0.30468327636773784 0.1387573951088612 0.28609647798364435 0.047403659357805106 -0.8486219591608586 -0.7585035188426332 0.7498116495433031 0.9100011337982381 0.7203505379023492 -0.42758362407162975 -0.1743221639728172 0.782082664547751 -0.5991795458614511 0.2256255775929954 -0.32841886874760373 0.5530173047523259 -0.7250066135081632 -0.3858947447176304 0.7613645318931368 -0.8810999540673363 -0.927365405583191 0.1270616197239114 0.45362808539463306 -0.553202239411559 0.34407434108653034 -0.00617439428578237 0.3298432891674141 -0.7461837786001793 0.6342226092520347 0.01670560333657356 0.9792535192571938 -0.7636257412149561 0.6998821230267613 0.6774051909001315 -0.428738524043466 -0.40450905409604054 0.6462133364961513 0.25963518642515115 0.005030187083579607 -0.7492577577408213 0.42405709813395065 -0.2563160482554021 0.9498994481096634 0.3155139867769132 +103 103 5.022898799915091 6.107848004852154 4.088744801981494 5.147611108718359 4.742343938208897 5.119728986239685 4.490095596853243 4.9836313329734265 4.926018532272388 5.622115881152819 3.364461931493744 4.98973501181985 2.560706113982223 4.666752487317533 2.50976636239111 5.810681913499453 3.5702370097053997 3.7093740110796047 5.528847994896004 4.972471103442146 4.468514253811075 5.320692041609227 4.063698537350205 4.886171205936635 5.70830297459975 4.734829740218345 3.0175429913500156 3.895452705903817 4.425403372574082 4.295085196799942 3.969610321199603 3.7070302394019428 2.954770674302445 3.6655196808082975 4.362809980488198 3.822331015383124 5.186323333981342 4.774081626349448 4.420477862778531 4.463686653377909 4.067102306233116 4.532997119760397 6.784561881417979 5.939382316642159 4.74514743793243 3.4985224331615656 6.0628990197298265 3.9726781495515215 2.627820745868057 3.2105535164918497 5.691754515090596 5.570922182377309 4.2398995926099055 3.53168180518113 4.948358555366445 5.152034150242558 5.456964291502736 4.23309683404317 4.699982579612997 4.253909188435591 5.156346387497507 4.701238174372336 4.549544340077255 4.142419687024578 5.455163580493366 5.349737484793277 4.329618450536167 4.6817765053628415 4.853782505351149 3.246962490243072 5.017065873197346 3.197451232719911 5.001793241639824 4.384607255483672 4.614455481574387 3.7474122384095248 2.651895993772145 3.463731620797824 4.544903760818606 6.051732920731564 4.680235459266655 3.444641460987909 5.079528309058251 4.329726485053032 5.053769907832207 4.196157335747319 3.89152111499887 4.0245135990649885 4.073755503648909 4.709996558498463 4.002288032446649 5.4237315324587225 3.062947731451234 5.785982046887284 4.842820659137069 3.7173649963824937 +103 104 0.252762627971836 0.9959482286717658 -0.09425747184936473 -0.6930188252144596 0.6156883274104703 -0.19149587820548297 0.6957140327282951 -0.38139946278432935 -0.4726716465904337 -0.8063820636759909 -0.020138089865804565 -0.9610053352445598 0.05155700336718594 0.5754467356826489 0.33637663312337174 -0.9536847917477942 -0.1548815147029048 0.7973239025777388 0.4808669415912141 0.3073044653091086 0.523421493369949 0.9460204901763065 -0.8009152109821938 -0.214986494267136 -0.970499405030868 0.42512755606911945 0.017995255406227706 0.5365491509449138 0.6572225219865719 -0.711667091271831 -0.5623812054961048 0.714326894929805 -0.16117104109360492 -0.9385074941129503 0.5192443334413015 0.45123796205293276 -0.4005258972374446 -0.7400979092089139 -0.4254386767909841 0.8132725672903212 -0.22090148112185637 -0.02458855737678456 0.8195509175505196 -0.7549622780902348 -0.8375599975346608 -0.17324546135750518 -0.9542878199052243 0.30759174744246054 -0.05339848439479744 -0.14343404414030636 -0.7413901109537397 0.15175161393074377 -0.1101056413327568 -0.6147116266665036 0.02083804264041822 -0.35651997518751566 -0.7196337742967776 0.1382309319149544 0.6690784633942977 0.5917928954246194 0.9963377642228146 0.23565728717169443 -0.8605438170831949 0.6469428238456347 0.7604594286193638 0.9901628198716597 -0.1678469661872053 0.7703098469119785 0.1774583154057361 -0.18582687980892687 -0.22554808127500836 0.38947481341413304 0.6905165024661388 -0.5172981402025993 -0.11389437731385299 0.8277893444292155 0.33550571045533895 -0.6783636705616207 -0.4401726220536397 -0.31074797215129335 -0.509913316144621 -0.6407573873879795 -0.4837414265585487 0.8880031525633818 0.8848877142294778 0.5804977977381245 -0.05090641322649381 -0.2950051465407597 0.6996864061793517 0.1565146177519814 -0.9494033348325066 -0.9353975463529687 0.15610902404966098 0.6671658694440956 0.07520002142058058 0.09496494641837816 +103 122 0.4804261257217428 -0.9456079924379406 0.3322098028322302 0.06251981270950169 0.21158801816331874 -0.5224055686921647 0.7892477861479057 0.13732291815911846 0.6713511682782562 -0.3159395023439193 0.8795583926894965 0.4156879607652242 0.49196952300903574 0.1822606067820538 -0.18189876562503104 0.8880246678360155 -0.11269295211253905 0.3707749119426982 -0.835278969518416 -0.2917478141435499 0.18622408155233705 -0.5706600427404029 -0.9193993691555806 0.4079276913445946 -0.549515783965699 -0.26607330436384347 -0.49561021485872336 -0.7282351901145183 -0.26517494418235876 0.21379847937575414 0.5139492014750293 -0.3967291688913692 -0.15139334877277077 0.18428369630916053 0.47521859601029326 0.16596850550688735 0.05287665934642627 0.9629929395599528 0.5333439109390219 -0.6164570501596529 0.6450980743766228 0.8022509925343981 0.6974934324757309 0.836738465738736 0.6660560148381076 0.6490539596348985 -0.839661834912532 -0.42256507310182556 0.48348773289388625 -0.38996609306429275 -0.47153176761373694 -0.7085260287764796 -0.9650564732946008 -0.11582917681156912 0.6328922897860312 0.8329713583899536 0.44565462046182924 -0.4489163256301367 -0.5814958262646974 0.14169298783748419 0.7897861089261538 -0.2450194809754731 -0.7697053713499815 -0.3602129909112233 0.7370638626476087 0.06738734807257707 0.40467365182278914 -0.053513463857751686 -0.7132470943771863 -0.6558630057867585 -0.9955562796967252 0.1606102297259373 0.19225786561584912 -0.39185133434671693 -0.7461048260147514 0.047441264753290247 -0.3136948306476055 -0.7950051112781609 -0.28094997137319355 0.6606633937719204 -0.5215518801713439 -0.7405706378502357 -0.7062968073748999 0.8397910862558171 0.7037714308430014 -0.6100709061955298 -0.9407432396927482 -0.8932626006209663 -0.54756033193442 0.35668210325888006 -0.5713785693744204 -0.10829621536684053 0.3485982407380914 0.5532048644288683 -0.6374603236199656 0.48875520816279683 +103 123 0.6989434073206033 -0.3948878242267315 0.7877630780897533 0.15876363965819373 0.06374518664335205 -0.5482007570759815 0.734386840030083 -0.09957630871758316 -0.44796710772116644 -0.7507342741837193 0.6425100811801501 -0.046039419267234205 0.3594437896163958 0.06118156617047421 -0.16697818436755774 0.7574977438212078 -0.6352037053700346 0.06430270993582088 -0.8189975683654533 0.6282465515057343 -0.34331107412540707 -0.4007233001081152 -0.3608283020149161 0.1205498040997508 0.9471067774726296 0.2098284765280416 0.01791652814006861 -0.7279950222957561 -0.4458860769744868 -0.33477613565816977 0.28812086352605504 0.24708106646092753 0.1904092189912181 -0.8027316269957119 -0.33954778086462856 0.08724737267010285 0.32043901543422026 0.0145355275054746 -0.41341168952355556 0.6134349840484077 -0.4357435926817912 -0.12220293937105131 -0.6419868277459579 -0.2038866349768138 -0.0886240318946736 0.5877181411306021 0.7064923352303643 0.2977609211949377 -0.7178093385894488 0.6189964633161869 -0.7275279997599426 -0.43482323900364284 -0.8709260599830162 0.26821748793515665 0.6376745665141081 0.6476662486490015 -0.4158350437731535 -0.031353609556912465 0.07340078120105908 -0.7260680234804289 0.14260832675689028 0.28867291225805936 -0.6146823038579174 -0.40675187312210004 0.8152371481775302 0.5593225322512432 0.8741639325682673 0.9084969281842883 -0.9054683723801435 -0.12919857421505476 0.6237230181560653 0.1965972063006418 0.5252882238301138 0.5560947269829077 -0.016960913611491213 0.036035810091566756 -0.02720145496748616 -0.4985525496970651 0.47511311671192247 0.42574567257297113 -0.5490382643223826 0.0657778898176542 0.8850660905564298 -0.7207388408071398 -0.6034249581715974 -0.568953921634181 -0.9828336397045134 -0.18438605542440922 0.6492876237309577 -0.6023266235725235 0.6429563503581737 -0.06416496171016894 0.4940522837662986 -0.8835908263080436 0.8133333098739313 0.23116292569168162 +103 124 0.7527170682640616 0.671137189828598 -0.17211641100200925 0.2567082828056091 0.7979782750523714 0.8646359165612685 0.2736744690499142 -0.7812403779383235 0.37117288901598045 0.515709231732538 0.043006023084134704 -0.8969852619004788 0.5892944845295693 0.5224893947954139 -0.357971137270263 -0.45270647773088535 0.36882448732255146 -0.7848048014996807 -0.2809631171653948 -0.7260585363850436 0.855117790225348 -0.7241635378124263 -0.2661852926786039 -0.8892347581607309 0.1112222331622541 -0.3985282702739077 -0.3712329067208855 -0.17007085092489516 -0.6144881718731172 -0.048741816163298424 -0.15375041934589273 0.15021124126293017 -0.7649877967118133 -0.013153942515020889 0.4453714830385924 0.38154498319356334 -0.6102790165379064 0.8753844622895237 0.6675275417120781 -0.07449725243312821 -0.4328601422162779 0.6884292953783342 0.5381306152138807 -0.9392876073143761 0.9217828407613828 0.3465547067282906 0.23557657718672087 0.39728204442967674 -0.0019171453205346634 -0.02385176318117921 -0.9362941984041528 -0.6414369687302197 -0.2280706939756525 0.5436541432602531 0.9447269307391326 -0.5497913265545635 0.9826368741790998 0.9857899146882154 0.4543720157201421 -0.17264680188904413 -0.6371183981288364 -0.9556212661545889 0.08263847400635727 -0.21970477552835588 0.011538674797515691 -0.8300414152502209 -0.4786227568956165 -0.3315041949084854 -0.010036466878134531 -0.39513634251191543 0.4336335582450501 0.2912960213206832 -0.7375950995470202 0.7413227949846162 0.7190528679057233 0.16929004416288795 0.16771113177340014 -0.4356787948854477 0.2878608181545079 0.9706254071864617 0.08525168113310899 0.805971231326237 0.9050264166375519 0.27270331731503883 0.23943719694387777 0.2122620591704727 -0.16565937307272804 0.40214965627326293 0.1382835583680586 -0.568832504629488 0.8712670455383966 -0.5890418270722433 0.08307718302663303 -0.46451986428957115 -0.5102956962877057 0.8390262203900916 +104 83 -0.4085486004839274 0.1839843594741244 0.8235746503501804 0.6501728215038238 0.44430005176333087 0.7733053828750052 0.043185767362263316 -0.47228187770113705 0.5206501642940928 0.4570178145576833 -0.913824083516813 -0.3142549786360518 -0.72111769220916 0.3497034967966215 0.19918524750928746 -0.08605580705585836 0.3054051140542484 -0.5866792353484898 -0.6106831986942329 -0.6141645101860236 -0.22877413909391975 0.6459558744483054 0.2684523589328722 0.6620801564960093 -0.3555528713395857 0.7718696521599249 0.7586079406986064 0.15846526372314784 0.5055895258339884 0.9438439406284735 -0.4641183828282005 -0.10172313802525945 0.4016419557836439 0.4665240236019794 -0.12136033617729769 0.5696234187849794 0.9311429823484194 -0.28821547081807286 -0.5178669028422076 -0.9452908313109336 0.813954008104584 -0.15825667197423487 -0.828458227028642 0.09001488941007385 0.19706341991980003 -0.2762795870336492 -0.005023331249107477 0.1429873081519859 -0.6142585190377763 -0.010926847867498202 -0.9420817048699941 -0.5734461949996414 -0.3409758422370821 -0.3288916426273063 -0.829897910602768 -0.6579532039554203 0.16648622725737838 -0.34754508597745426 -0.6081756862047514 -0.03269344711160138 -0.8448236727371492 0.8563328192398996 -0.4909627394976286 -0.02291629606664758 0.4838210439907631 0.5202458364613414 -0.20436828129601214 0.6751494941838341 0.13950740543669626 0.5245026805711654 0.2645624033007392 -0.6401868939336526 0.010650798863328204 -0.11492444674877533 -0.04098220153141896 -0.6165227046120263 0.7336919738088314 0.18094923761513515 -0.3654955218160696 0.04169629079757331 0.47165429042769436 0.47023688552956977 0.08914165754130132 0.940196623615225 0.544232775389971 0.9302774591438032 -0.4518609696432083 -0.6440337646727954 0.8459040632316295 0.36528692344577074 0.27423205831220754 -0.43207859859718156 -0.34701643509213476 -0.1368646850061217 0.1808375211535278 0.9312040945492499 +104 84 0.2521211893275668 0.48814647355482 0.4126299573687513 0.8076149024174561 0.20135039130716526 0.6250952974894488 -0.3951713656649083 0.014680593872320014 -0.64712489753576 -0.8321577528956692 -0.028867445453451657 -0.7588764428336785 -0.7096441901890287 0.09473021206005106 0.7907024269468845 0.3939380234756391 -0.374080451101928 -0.5410478811825825 -0.37944798249992084 -0.1912878703481118 0.8878306701564813 -0.7156020946645345 -0.8367881657809155 -0.8920731667324953 -0.5022943894611849 -0.15528956296773844 -0.3319013570322651 -0.6955764185654612 -0.016026663972838806 -0.1876758798663023 -0.9252096365384488 -0.8240489903360488 0.6689962715234292 -0.9347498171851123 -0.21100304509393109 -0.4844457650044067 -0.466479792472422 0.530785457857951 0.4234463277831071 -0.12941774866354394 -0.10571298684724884 0.48949571986860496 0.5984513550284414 0.4713288150402799 0.39673786980646564 0.22962395091803844 -0.1665867565022554 0.6648667199796723 0.2916666960921779 -0.343233722774851 0.712756557739038 0.5891216323722646 0.8869058116887942 0.44113072523371866 -0.23890602184071463 0.29791990279884395 -0.4359934695714929 0.49427906633033447 0.7862914417535283 0.645906637608076 0.6659469837826717 -0.5101643289909197 0.09747348474787243 -0.020944237740067484 0.9737532842710848 0.14860463776323884 -0.4688443563329818 0.4038505565365411 0.2723588929918843 0.34612054814638293 -0.8506778485759798 -0.3119469956232299 0.05157856789570614 -0.6890305746816845 0.3398338334098874 -0.016835881032996713 0.3545034598900567 0.2073112131640935 0.026063561481536546 -0.5307076172501228 0.7943399659734236 -0.06637010736462323 0.9165748499848696 -0.2955046198300466 0.5664816187803736 -0.5433653496952648 -0.758564682770416 -0.8811681334599748 -0.9810743567616773 -0.793559952268823 0.4100312762975049 0.5235147743876394 0.290448099045268 -0.5550519251557906 -0.8234015828881134 0.5126752763545006 +104 85 0.5444860862379681 0.6448868749125107 -0.7660401551181999 0.031733161994594195 -0.5820089940224056 -0.16525861705773015 0.7375180792355629 0.26218689853557176 -0.8489996870082763 -0.48740382178203046 -0.33380753871721747 -0.9703459161062795 0.08711527314499445 0.8155629539243792 0.09478361323112616 -0.7825053441332437 0.8809850415129701 -0.22774975652208274 0.4382710334042672 -0.46867916168689705 0.5442438192802366 -0.14822459105686403 -0.49122069662019974 -0.9119753320089437 0.35628289499283095 -0.9702342465452485 0.8238809278143706 -0.7721658550878112 0.8528452565992628 -0.08433665809165736 -0.5000578586329523 0.7877237888792163 -0.1431358411008743 0.12523473472944047 0.9231618110024229 0.12621771886219846 0.7192556404050634 -0.6805627771594793 -0.2454775882916913 -0.8650321659045337 -0.6224938011193901 -0.3147335335581476 -0.6794725889078084 -0.6317472848017684 -0.7473859205802698 0.11963759967551724 0.531933892888808 -0.25248752213710035 0.03297576834988525 0.7414912051240365 0.35009131318531095 0.06363485573279704 0.6039445319073711 -0.2839418619873926 -0.8650144166863001 0.5929698657791691 -0.6724659172823206 0.8896733740516278 -0.43172963358297034 -0.8948718501193611 0.6884808714094275 0.01722125244649675 -0.4691819519259559 0.6167934083442486 0.7187617818240155 0.44503272111581693 -0.34930966473526737 -0.04329149287069578 0.02967777329599741 0.31649107676575916 0.5080997660789581 -0.0215547979518933 -0.31528507182779086 0.9424961767833862 -0.934702570163052 -0.015039295659826868 -0.07330397941185329 0.5715233714294701 0.14184117448630906 0.4642449825087476 0.27058304242955966 -0.3522843935094553 -0.45155426278737587 0.22620497477461 -0.9440820325324204 0.8881191518382292 0.9817606313095202 0.2581341982608689 0.9993721778213969 -0.6245922229196836 0.5274679652609577 -0.7973330793542839 -0.14438494902724686 0.44022642032808124 -0.18915662570752767 -0.2423006654766211 +104 103 0.252762627971836 0.9959482286717658 -0.09425747184936473 -0.6930188252144596 0.6156883274104703 -0.19149587820548297 0.6957140327282951 -0.38139946278432935 -0.4726716465904337 -0.8063820636759909 -0.020138089865804565 -0.9610053352445598 0.05155700336718594 0.5754467356826489 0.33637663312337174 -0.9536847917477942 -0.1548815147029048 0.7973239025777388 0.4808669415912141 0.3073044653091086 0.523421493369949 0.9460204901763065 -0.8009152109821938 -0.214986494267136 -0.970499405030868 0.42512755606911945 0.017995255406227706 0.5365491509449138 0.6572225219865719 -0.711667091271831 -0.5623812054961048 0.714326894929805 -0.16117104109360492 -0.9385074941129503 0.5192443334413015 0.45123796205293276 -0.4005258972374446 -0.7400979092089139 -0.4254386767909841 0.8132725672903212 -0.22090148112185637 -0.02458855737678456 0.8195509175505196 -0.7549622780902348 -0.8375599975346608 -0.17324546135750518 -0.9542878199052243 0.30759174744246054 -0.05339848439479744 -0.14343404414030636 -0.7413901109537397 0.15175161393074377 -0.1101056413327568 -0.6147116266665036 0.02083804264041822 -0.35651997518751566 -0.7196337742967776 0.1382309319149544 0.6690784633942977 0.5917928954246194 0.9963377642228146 0.23565728717169443 -0.8605438170831949 0.6469428238456347 0.7604594286193638 0.9901628198716597 -0.1678469661872053 0.7703098469119785 0.1774583154057361 -0.18582687980892687 -0.22554808127500836 0.38947481341413304 0.6905165024661388 -0.5172981402025993 -0.11389437731385299 0.8277893444292155 0.33550571045533895 -0.6783636705616207 -0.4401726220536397 -0.31074797215129335 -0.509913316144621 -0.6407573873879795 -0.4837414265585487 0.8880031525633818 0.8848877142294778 0.5804977977381245 -0.05090641322649381 -0.2950051465407597 0.6996864061793517 0.1565146177519814 -0.9494033348325066 -0.9353975463529687 0.15610902404966098 0.6671658694440956 0.07520002142058058 0.09496494641837816 +104 104 4.097776091484261 4.125819041704807 4.599088639591888 5.426476602451073 4.612382190046008 4.619190875467583 5.483661901575673 4.352270392645712 4.764081374367802 5.178388327689156 3.882044090152203 4.7633437487963555 4.155323349345109 4.573468753634362 4.642681459611364 4.7521660914192525 3.8499786952246358 5.096681344689027 5.45688116171127 4.283609949992787 4.514760061034999 5.034120441388307 5.020032925899317 4.689184192192803 4.242854033774594 4.681341258129246 5.27080568158259 4.521718944626673 4.656590940171982 4.530807093740913 5.484051742923591 4.34314595572572 4.088041741647032 5.015425050728243 4.121460798732059 4.440806910770698 4.14990293767778 5.511296944673968 3.90378024912423 4.540866664865476 4.129898697333415 2.250969830218044 6.349620605749596 3.895425698249956 4.267057981151025 2.8556715092072054 4.829628562181653 4.625382841585399 4.023663139166759 4.882107933418194 4.929642744684701 3.4032368498993044 4.649270397185485 4.216492649713043 5.417449654535037 4.630256919336555 4.4494425546934115 4.063578957558722 5.272058546784845 3.251584081965745 5.8069784895408345 2.932612885382023 3.8575626946880597 4.182291950443378 4.586326181288307 4.435374267370414 4.3005433508975255 4.860110010155043 2.675955284832548 3.124726093848885 4.304190761220421 3.1254739508285745 2.777447051810368 3.6419484989163813 4.90132847833259 3.417223043155496 5.084132633398844 4.683100271190957 4.323093370275686 2.6165694637814956 5.031971794855139 4.47918890165606 4.37999410189509 4.2749421407699915 4.390233942011125 6.27644566946706 5.754937030475623 4.642311875573089 5.089702052790575 5.04275462509468 4.120966369847567 5.4674382008240165 3.927944759502763 4.174412001034691 3.7422047112575942 3.27277984956899 +104 105 0.39317152798735666 0.48083205161292075 0.3380048124029058 -0.9780907551277513 0.9081344821367585 -0.5280564780140835 0.830191782169452 0.9830285094306406 -0.6559376828800756 -0.2710804443511978 0.761916833213635 0.31578694785183314 -0.20715211332511285 -0.675370972155277 -0.7955941833279658 0.2614843051855249 0.4722905405854707 0.9096031314833166 0.5295951213840053 0.6679531588200258 -0.016782865850253348 -0.2258647419077573 0.7806392329057572 -0.15039863706036205 -0.5621660200768237 0.30378820497910586 -0.7302941925977595 0.3895645834806585 0.8066214112641805 0.9628563966844397 0.673548366619267 0.8008451213587966 0.2810326126622005 0.9148431937468784 -0.5470158620517043 0.32888869442519963 0.4727897887505981 -0.6701730511841533 -0.24907527319052392 -0.04626162607511919 -0.47271513348904426 -0.2519754395919731 0.5398882531256124 -0.44679462959043126 0.6227658284292208 0.24403456821544411 -0.48418011074050926 0.5561216012397496 0.7157564120673938 -0.9940626180694749 0.7679032614717018 -0.103045520827584 0.6798876623136936 -0.023706866823645978 -0.7316011193856742 0.01779771861467072 -0.597884525353511 0.08476256240349023 -0.1692161559443499 0.15211905885021748 -0.6619257372863214 -0.5471019390759049 0.7308964372899789 -0.8365751170547067 0.05485779644790023 -0.914517517429241 -0.577130648643676 -0.4073999394455057 0.3184733696343396 0.06004124788925291 -0.46316496889347203 -0.32405975507133755 -0.16152918592203447 0.04011771495099681 0.7770925341551935 0.6198363568589458 -0.9821154040337055 -0.11078666580249452 -0.6468106449871804 0.3841076108504988 -0.79915670826442 -0.5374826103058601 0.22301261773164605 -0.027332222573315468 0.10724527299243891 -0.4879048720005197 -0.9655521640466538 -0.4855162561705795 -0.2290758215560067 0.42399815192894486 0.6066501810903973 -0.31229742458373444 0.9039615780991395 0.5635404987852368 -0.2637257701616671 -0.1407271897726179 +104 123 0.7184664127027967 0.5534868124161831 0.6084634901269639 0.015708784815819277 0.5473075978702024 -0.8846882237241709 0.757362417193197 0.6992867164491732 0.05825610803843562 0.13571793756929496 0.17635596643347262 -0.16796151777598634 -0.8140360114698657 0.1798908444814511 -0.1732885299329232 0.7107755264486151 0.8626968581563279 0.44388089381916207 0.8215462535176186 -0.07333332684026739 -0.9983231401429788 0.7232813072349622 0.11967122938818386 0.3789846547996183 -0.9081125231568701 0.06317002722674503 0.758075442513646 -0.9388048450632687 -0.5469624424363317 -0.3097298210673234 -0.7156956198175952 0.07495753847069464 -0.1916503055828267 0.5934391348072992 0.6236077223688685 0.42354309218940855 -0.003597482057018153 -0.8913049702261469 -0.485594103146072 0.9824470824808289 0.7472390328233336 -0.17153046248679593 0.826093322160923 0.4407546991470659 -0.12229890076450345 0.7113937634872265 0.3884811828293857 0.8151697567432157 -0.7740793699911839 0.8015432517093779 -0.8485646399414468 0.9902741090603635 -0.36085382535816946 -0.11081388866959374 0.8526735206271963 -0.9334409305490319 0.9828008900125993 -0.020058907801061565 -0.3811437134304769 0.00823115651815498 0.7329972309324018 0.37054855657719066 0.12173711716061497 -0.10833151856989098 -0.5442261247692695 0.40991048473356995 -0.7708471407229416 -0.553149402359516 0.3159046762080622 0.2421576274149777 -0.6937436016959635 -0.13672225187188913 -0.15572782662711337 0.0832391021420571 0.8304827078924202 0.6975301151858044 -0.40451818709343557 0.3165352174952354 -0.9102788126026007 0.27340937041749025 -0.6977184559784677 -0.030755207163656095 -0.3342313464002591 -0.8061471010259242 -0.5539015438714974 0.543255748064229 0.6753556198048303 -0.6724104531580033 0.2840756301282559 -0.7396134778418237 -0.4265125362363016 -0.9660747725279033 -0.9632954171024521 -0.9414993112089989 0.9626101852842537 0.07717253112102473 +104 124 -0.3206269806896487 0.19950504646084255 0.24618272179680312 0.7141664098446023 -0.40646305067847854 0.5531370198414456 -0.7979460516481602 0.38713594468972334 0.2872837189818769 -0.432782550965793 0.6949704108384227 -0.30878296034199404 -0.4517268301777084 -0.9552140922454702 0.5464257864046491 -0.40026351581930975 0.1581710595730037 0.11331634434346749 -0.5185643477599671 0.9993940741900726 0.7283319005794198 0.5312189318728271 0.8502093046003776 -0.7718688246876155 -0.3265322705604723 0.913681526649446 -0.7837116705645615 0.41799263776482976 -0.09724149052514441 -0.2901932672047056 -0.7088167943545232 0.2480059556271179 -0.7385861197116645 0.08110067626233985 -0.17513445638348268 0.9297627247151976 0.9862120481197518 0.12531420562467654 0.04358292413766929 0.004566362802921997 -0.13011264666021582 -0.20022034200899919 0.8780405462192713 0.6383332720216024 0.027424148955784045 -0.9004956243239843 0.6041550465099454 -0.401825745721633 -0.5340975437609243 -0.915850891587058 0.18955696700281077 0.2786305535621063 0.37785354944013805 0.6714143437101534 0.6295761994314852 -0.7590373096008312 0.20828617040488395 0.8417532837918984 0.5581228281663817 0.14287445748765482 -0.2910032873673527 0.020262494530507436 -0.5102260625623491 -0.6395252310371196 -0.01532148606213779 -0.27357016675122314 0.6060285726990018 -0.332025055959946 -0.3631921080484064 0.8550096843311232 -0.3297863022083434 0.07248094300475705 -0.840171360594544 0.19745784807058264 -0.9852616831908114 -0.19731473408690414 0.9959104983486251 0.9338119884961917 0.7339453362799426 0.00955334535189234 -0.511906701662455 -0.9626573307317683 -0.8157378797853168 -0.25444094186113664 -0.18023478848545071 -0.38949448423008604 0.7960585385927432 0.2781503338568838 0.49504221703148676 0.4828418666903602 -0.0842537709346809 0.18690181131851968 0.2824308107600657 0.4093654451970261 0.8412023964184867 0.8748161088919093 +104 125 0.9090125376729692 -0.14273130971685033 -0.68200057624093 0.5687488035268464 0.48117593157595584 0.008300083132914082 0.7256708028514944 0.4434945001246169 -0.6923902821957906 0.76541181193388 0.6075201712790448 -0.6056023439490352 -0.5741088032558439 0.7946840022321813 0.7955207686351102 -0.20997103642456683 0.5640617560798931 0.8547059811646245 0.7991303427315033 -0.8985794491050747 0.0944028061621982 0.4259618193428263 0.06239564542022635 -0.24869339050685868 0.1542529290303134 0.9691593482621448 0.21030875166042606 0.2627253198088628 0.7919388032285679 -0.2216202783182153 -0.22075885640705217 0.16389800175461455 0.7295379093844689 -0.8193350157574957 0.8803362458442474 -0.2409795760229012 0.14833915544136067 -0.8661457209243724 -0.7041685670406312 -0.33393189448112226 0.9212761814206276 0.3596345897498632 -0.4238695804035568 -0.2634685009425668 -0.594164371120069 -0.04140348780156633 -0.9957819966751178 0.9178146861551162 0.33451991227825184 0.08123305378446033 0.06589391004788836 0.1636880213601335 0.5776535165608989 0.8391299370514727 0.9006587776582171 0.1454976119773448 0.5576863565871302 0.3631459246504847 0.836246773871121 -0.1942943797707053 -0.8861209664044463 0.011158263208630892 -0.4991779757195687 0.5485247239714295 -0.2718635729537393 -0.36598697847320416 0.7346755471839574 -0.9394123004315744 0.47003855917112713 0.3178405473300001 -0.7593945876643833 0.9787618170076686 -0.13581364249431105 -0.2973110799908165 -0.6030368891750923 -0.08605122278170652 -0.5801536387722164 0.7139870195979712 -0.22246124574221904 0.049286783074691254 0.5426426450058794 0.8030334181441363 0.5766726009090053 0.6753766136876471 -0.3469799950400181 -0.9929163340646565 0.39629706506350826 0.9477638193643698 -0.23035668446359137 -0.5942668988813797 0.24643891159923692 -0.6062685139251509 -0.3937491995201148 0.38807074876426473 0.40118675543622206 0.3971984751874089 +105 84 -0.9223849922846492 -0.4321180983693711 -0.8066541718423139 0.4031705377650754 0.12405423133165683 -0.20533216767748663 0.5780509405667402 -0.4907210466114189 0.951280662288744 0.5019588941757109 0.488883550969744 -0.006857957120521174 0.17015021121077067 0.04993279519970084 -0.9981506093054071 -0.201757216663756 -0.21723176145430956 -0.06615490237259536 0.118145719174225 -0.12127178642485315 -0.03846399380818322 -0.8631012452848565 0.362535054726427 -0.22447354840624323 -0.2280807559300555 0.1711353282580892 0.6288816386667309 0.6657294454513514 -0.6329805285622705 0.1089423237990248 0.20256627116127146 0.100167825823676 0.8540662122705274 0.5935930088015369 0.5625949534259389 0.7209884822390538 0.7577004946354562 -0.5930188977200817 -0.8289918336870312 0.014025698465321534 -0.410651050307852 -0.5785082590248842 -0.911566165568833 -0.3777712870379779 -0.09348343410088766 -0.19966472942212476 0.7737999171435945 0.13395248201856114 0.6100723861283548 -0.5591906052847182 -0.28713946594931206 -0.5149865233528934 0.5795761242641504 -0.30808593097018866 -0.5296635402081693 -0.07081252188736031 -0.8932969194466227 -0.7959963809399886 0.8833147885274266 0.559814130559773 0.02744160747240243 0.6695836571310063 0.5656106044203313 -0.12291021718239348 0.4473142903897094 -0.6180045461995387 0.828995065064374 -0.7091804693257353 0.14239677776551862 -0.0332619821641007 0.16369561215750417 -0.5142188388406714 0.6094217336324113 0.14104112531380153 -0.19991138617940862 0.40518064514328467 0.7819544202889945 -0.5277645630999619 0.728426918163734 -0.0009202775537462404 0.572706829919273 -0.5324448435431517 -0.2670711344306238 -0.7576684438996095 -0.9610384817119004 0.47467040961553475 0.12129460537018533 0.014128997139453814 0.41014972855627274 0.5513057355221886 0.472733626247958 -0.3299875514590347 -0.2707969187531276 -0.6851754922269602 0.9126024488335001 -0.010554193899037667 +105 85 0.8642141865955768 -0.07445640698377876 0.8163811213756031 0.3599210263921915 -0.47954320329001576 0.07849795343223454 -0.9324471950498325 -0.5263935994226354 0.21808702842201266 0.8672154195030701 0.5898779617634953 0.3639904600580277 0.35951351486281413 0.6205418383030481 -0.900478310505975 -0.9073459001015869 -0.7149003448842115 0.33656007083389783 0.031229051770096605 -0.4724154050909519 -0.1078640296275104 0.21453107208166222 0.2057372183495365 -0.7117817489193186 -0.46473697943108383 -0.5650015142292992 -0.8621185563949976 -0.8533833528167709 -0.9151540110355028 -0.6602139275101768 -0.7255206435267858 -0.5926417166541755 0.3697077491243068 -0.8972444811336038 0.16796561397049858 -0.083638865352748 -0.03829122170721755 -0.12117481791695006 -0.273367478362589 -0.9109178451592692 0.08023054719259881 -0.5282698902032359 0.4170994784351003 0.5379656552781342 0.022316421811249487 -0.446709840052969 0.3452508705016113 -0.7512132110507412 0.9433862606173011 0.6254046388666814 0.7028545057129243 -0.9998356589409414 0.5475266435928476 0.5640545606261158 -0.27110492467449565 -0.9105859215599454 -0.8233323530940284 0.47019180254599324 -0.14764972273350496 -0.8488112067407758 0.009892420339300934 0.40112857650409195 0.7976144940887682 -0.598377973364447 0.3941993782779316 0.41695376941883144 -0.9017352281321915 -0.8033651458320559 0.45143064782751874 -0.03636687644633296 -0.3418228643057879 -0.7689522913475249 0.11766748666711613 0.30759101918405407 -0.9588906166630755 0.6729964616219388 -0.4135228632842858 0.126320019597165 0.27564756528461687 0.44058966733369664 -0.47243812779937855 -0.07527423748750528 0.819959013252533 0.6518574074427121 0.7296337813024953 -0.5985279885613115 -0.8031603547600892 -0.9783643246818301 -0.7905549502213369 -0.3334901569049924 0.6606518446206635 -0.40774190850711434 -0.5323922916663897 -0.6569356711207563 0.12036390096182403 -0.7631902339955725 +105 86 0.356267846201753 -0.20839243458650403 -0.09630114153703384 0.41024828230273713 -0.8614551778037915 0.6307741800141375 -0.4821881203222331 0.8304080678837131 -0.13587061452061877 -0.7023814897446441 -0.5019378388352056 -0.7029241964290254 -0.31334116762713315 0.4280913577225227 0.3555789487565022 -0.5694220878353555 -0.9158674405826805 0.27112916219584515 0.8756724459241141 -0.3239860427657322 0.8980511289394446 -0.407555816298242 -0.04758850463033881 -0.6801159298969848 0.6557455318441427 0.32434662132733805 -0.5891873597567137 -0.31357430896633187 0.9683398609457134 -0.08156736374183393 0.15322099623282126 0.04332029809240456 0.9971830054987176 -0.3721051939782103 0.08599772329614264 -0.1494568253490487 0.1381568739053396 0.5753585733707913 0.5756062791824741 0.41333229397185756 0.43109189749723664 0.687608232528206 0.2808907901497626 -0.8594216724041079 -0.8198802117135799 -0.21279305955336447 -0.21800568609673365 -0.6806403885746362 0.47658713552030774 -0.3055842849136181 0.17967964591314933 -0.8504710442577907 -0.0960968639794122 0.027594570720703038 -0.18529599049994605 -0.5018701933733296 -0.08095951159267822 -0.331326550965783 -0.46823073432908524 0.23936713288574052 0.035995986636835786 0.9185588048210487 0.7893928465251856 -0.4071770076032255 0.4877235617889375 -0.04862973726200748 -0.8828818553590243 -0.32595632134154573 -0.9193048969116804 0.9058520490843711 -0.10451219728825167 0.11394783061652358 -0.12169796209625439 -0.15140948472909121 0.295982758199443 0.3362829635066942 0.24271159621237204 -0.6135814697688022 -0.890300183530073 0.5135737264329527 0.2696046687535778 -0.44537520187296087 0.7198814682053969 0.3049583031997747 -0.28191221694276725 0.8047107907683158 -0.24081286301048443 -0.7909772524533807 -0.058444948224926296 0.15791535228537112 0.3684059869368006 -0.48943642959955036 0.5265755213166585 -0.6097800065107186 -0.625621363499115 0.4686027976840714 +105 104 0.39317152798735666 0.48083205161292075 0.3380048124029058 -0.9780907551277513 0.9081344821367585 -0.5280564780140835 0.830191782169452 0.9830285094306406 -0.6559376828800756 -0.2710804443511978 0.761916833213635 0.31578694785183314 -0.20715211332511285 -0.675370972155277 -0.7955941833279658 0.2614843051855249 0.4722905405854707 0.9096031314833166 0.5295951213840053 0.6679531588200258 -0.016782865850253348 -0.2258647419077573 0.7806392329057572 -0.15039863706036205 -0.5621660200768237 0.30378820497910586 -0.7302941925977595 0.3895645834806585 0.8066214112641805 0.9628563966844397 0.673548366619267 0.8008451213587966 0.2810326126622005 0.9148431937468784 -0.5470158620517043 0.32888869442519963 0.4727897887505981 -0.6701730511841533 -0.24907527319052392 -0.04626162607511919 -0.47271513348904426 -0.2519754395919731 0.5398882531256124 -0.44679462959043126 0.6227658284292208 0.24403456821544411 -0.48418011074050926 0.5561216012397496 0.7157564120673938 -0.9940626180694749 0.7679032614717018 -0.103045520827584 0.6798876623136936 -0.023706866823645978 -0.7316011193856742 0.01779771861467072 -0.597884525353511 0.08476256240349023 -0.1692161559443499 0.15211905885021748 -0.6619257372863214 -0.5471019390759049 0.7308964372899789 -0.8365751170547067 0.05485779644790023 -0.914517517429241 -0.577130648643676 -0.4073999394455057 0.3184733696343396 0.06004124788925291 -0.46316496889347203 -0.32405975507133755 -0.16152918592203447 0.04011771495099681 0.7770925341551935 0.6198363568589458 -0.9821154040337055 -0.11078666580249452 -0.6468106449871804 0.3841076108504988 -0.79915670826442 -0.5374826103058601 0.22301261773164605 -0.027332222573315468 0.10724527299243891 -0.4879048720005197 -0.9655521640466538 -0.4855162561705795 -0.2290758215560067 0.42399815192894486 0.6066501810903973 -0.31229742458373444 0.9039615780991395 0.5635404987852368 -0.2637257701616671 -0.1407271897726179 +105 105 4.177236704541983 4.174323784585406 4.078424831574374 5.058625959425817 4.428402857670526 4.293029208449254 5.630467643450147 5.408499451149959 4.796255251298378 4.358458321837846 4.234714566793386 4.140630295566325 3.0989652613561187 5.082084139594382 4.862818219311798 4.058820173590816 4.727060660112585 2.8379073455083335 3.1941910338096275 5.174449772562696 3.833881929691471 5.165153284116842 3.9584733850967444 3.6420443357411143 3.3211657257065563 2.9785838205754382 5.139054012073967 3.4093139771602576 6.156679579332156 4.886568059740949 5.876289853339566 4.435504198508812 4.248302798108993 5.289731964432651 3.4933698866828604 4.898886748879019 3.0259350471482835 3.769954228558057 4.536073982132267 3.1523251784798734 3.0277453300473733 3.077205921309547 2.9322059321119225 5.450649801560791 5.570763985678568 4.973399819441628 2.996882667737519 5.254244011007917 5.743490995704269 5.214737848534372 2.8535469080757148 5.389867693679491 4.209975580765213 2.601070412145867 5.29064168994454 4.136453834198602 5.61622092163934 4.4778387918926565 4.1576645283383975 3.915109098585071 3.8364168746305802 5.411573383770511 5.0604907292769425 3.774944815211032 4.097633993895682 4.768648958672621 5.470228936761914 4.520193539307838 3.783972699507336 3.372839629517561 4.480718681741033 3.8601714204788813 3.50183277939397 2.780507215659066 4.8243587259532035 3.982332885038027 5.839994354426096 3.933434200643643 5.051153139899386 4.564319690956667 4.8005181335224965 3.658738395508293 4.05061374949401 4.1291456222617535 5.021717776904946 4.66742893509632 5.073820591343011 3.9638184597106028 4.124812915586443 3.8718288539405075 4.308254679645353 4.341660136953661 3.9991547202055866 5.047826171658641 4.421538329324957 4.812442536988517 +105 106 0.26908545617784885 -0.21728444697541516 -0.8223565248735647 -0.7348061402141082 0.48237710241982223 0.8884459635755133 -0.4159887309670127 -0.14214539992781017 0.9072071666636994 0.48399900042661215 -0.23125582434604652 0.1702148743207017 -0.6063786747052622 -0.8719204058274721 0.13824516831859124 -0.3386256209818419 0.3391996280251557 -0.14018484537850084 0.21346221840448742 -0.8863785741400392 0.7652211468019088 -0.4832511876635084 -0.32842804238813095 -0.5239230342096632 0.2807615026500805 -0.5308558556617053 0.6374141193202796 0.3429607245726878 0.40294832985007356 -0.8700786399343334 -0.9782586335902304 -0.5624487336411084 0.26793569757883695 0.9900110462407243 -0.4224215277475367 -0.41602587462489593 0.4055846303005086 -0.39238930510557357 0.44901558874707503 -0.06511448400509812 0.6683257249387056 -0.21449487213667617 0.10957995938255527 0.6863652187761107 -0.2923513554241244 0.8787175444472355 0.6340160256454528 0.761482691297036 0.8935383633816898 -0.5713389572029861 0.4341069609547623 -0.3388203953677731 -0.16553710125888177 0.23164408568100625 -0.493119011224592 0.7294111292970866 -0.6278211478542717 -0.45808382222678534 -0.3943680316336391 -0.23338096060905245 -0.2793653747028717 -0.4715020524022151 0.901128039064675 0.7610660727036229 0.048261411296645296 -0.8572038350815865 -0.43867814909759795 -0.8265016127990319 0.6426859927333946 -0.29423888029807066 -0.4783527641866989 0.2135038122379005 0.24771274411516564 0.6732466538167319 0.7767957034935653 -0.07195373687724982 0.6254969687589844 -0.10245875683160088 0.3719768925176439 0.03312352585238254 -0.21698210130989515 -0.16251039183700655 -0.20972747770381361 0.6232856141435255 0.4400584520234927 -0.9025582842795521 0.39955188544872944 0.22694642124259223 -0.5382033867712548 -0.7001178518032465 0.6438374954795192 0.7503977196408149 -0.35878188327876703 -0.4293524339267596 -0.7360661837896998 -0.98932249334023 +105 124 0.09052687321363528 0.8030554154767753 0.38084773106049763 -0.9377102006838529 -0.7172598519710316 0.3863933863140059 -0.5434582087527227 0.9320375455097751 -0.7569777192929843 -0.18839192978311425 -0.33223007779923397 0.3530470515178006 -0.06962695444491618 -0.9623870206978931 0.15495796608277912 0.6290630633889513 -0.6385387092188186 -0.21666224880333007 0.31966165941495905 -0.48061159905270623 -0.18380721796417632 -0.5437077021476169 0.8982424330316032 -0.47651139562714384 0.3176470036320238 0.1012051457745835 0.8510833896903398 0.44352124290144324 -0.6354422452804178 -0.8851275237058551 -0.9159958213549257 -0.8892047342302425 -0.643036525025777 -0.6410147687381083 0.15280324635864018 -0.8235773156727726 0.31050965524904894 0.17040761173209162 0.1877835881837573 -0.05322228552217134 0.4042933403851863 -0.011030694875268532 0.08235004514413302 -0.6601734909943353 -0.8875131940385135 -0.8027567322222651 -0.22592861175986023 0.6825853971837152 -0.003000048907407127 -0.08614767047073113 0.13500207478631365 0.7594360890065 0.7315097319899877 0.33727657315618886 -0.8009115618856582 0.09355037925860676 0.11424709862023885 0.5000001189322749 0.8431258494445837 -0.35976463500987954 -0.9947491114302309 0.5888694789505056 0.5786951361849622 0.5340199765232199 0.3331380238939605 0.7169901121014608 -0.11790612911596976 0.2540583597584134 -0.2751548909157995 0.6988455664612783 -0.935212985850753 0.10276400037554434 0.44706120984323605 -0.1308511399735064 -0.25966228486616805 -0.38270838860375567 -0.529966598568165 0.8911786209489405 0.43642651382559006 -0.8372980606382068 0.866834438893259 0.6437757114408391 0.8901038408851754 0.022934324409389584 0.9249959669730692 0.6111002909127288 -0.15067658807260265 0.22917103413403783 -0.6972496758836733 0.07076462312567022 -0.8567044767590777 -0.5595251792206712 -0.16469928368162834 -0.7143951898328047 0.0562528759439056 0.6116820737941473 +105 125 -0.18578425642027985 0.1947780659700944 0.17730663788402645 -0.6263714534593559 -0.36322566763556563 0.18621778796969268 -0.9430235029610392 0.39153237297333665 -0.10358892152653132 0.19726811354684393 -0.6154028601000441 0.8564306528317203 0.6500820160930116 0.1978338534953401 -0.29337374066636346 0.6542222798459041 -0.2647643148359822 -0.5294314496610009 -0.15414143045999928 0.8693298622216821 -0.8523805931538755 -0.9047222463840456 -0.8090936557369275 0.09142937429412501 -0.3825343613652532 -0.3852065140733292 0.3245124635889074 0.18496973077859624 0.2730323424071066 0.9415663960281471 0.4970707615048877 -0.07533252268336721 0.20775423746367983 -0.14852244521816704 -0.33160135873800667 0.708031609062342 -0.16999537276816667 -0.8675323605035037 -0.8480488578027379 -0.05452257891841761 -0.14116932754865208 -0.1445509978117807 -0.31365634472016857 -0.9633827318399777 0.8811305610749893 0.8506699276312366 -0.02610527476468283 0.8802760435937389 0.9327075535722658 -0.9542886487163762 0.12616962621583339 -0.477156761912501 0.7371180649408446 0.6265884109085813 0.8378720935711776 -0.8364980279324183 0.9663920793665621 0.7066352595491283 -0.27203309891369676 0.7228977375525636 0.29012566318956146 0.5784611561650246 -0.12868550969825776 -0.14783975778869451 0.6409678205410163 -0.49778180493046364 -0.8911158403169017 0.6192033834323449 -0.08021938368044412 0.9323807877667396 -0.4042167741170568 0.37783880054158003 0.8733327849154913 -0.672053649396164 -0.15393543846401836 0.4595087331135912 -0.8783512872768411 0.2585179445455743 0.7044280572034858 -0.8796725755886536 0.11162618460085572 -0.12946706923620943 0.16793033214312492 0.05908219486495492 -0.2883706957373229 -0.050123091300523726 -0.6176433795205831 0.3977236868335874 0.5063896777146673 0.9035772484944047 0.05340912732196501 -0.4418745784695861 -0.41371462642951995 0.4674039120587943 -0.8716917364220151 -0.3048591252069135 +105 126 0.9433663491887805 -0.971069569142845 0.29938187472065847 0.04929585771201794 0.23731307082617725 0.8219610108812054 -0.5704180714870504 -0.25780128329792795 -0.6607473742062058 0.6139987087173873 -0.6523579103668626 0.9852550185031683 -0.6845478275208883 0.4804071381687911 -0.6859402809720887 0.3742164741579479 -0.8747260611369478 0.21081266346915606 -0.7597254901578565 0.7466111047912776 0.03464818055474783 0.7206648797361432 0.43650413596544735 -0.3587431461229882 0.15853078203227566 0.2627255478587449 -0.5107243470294838 0.046793496696807324 0.7116339792345845 -0.2049881403013225 0.7807847811457431 -0.838487534686565 -0.09839156444904296 0.40812779503651564 -0.5997717640425511 0.9388039585173604 -0.5676867024813523 -0.20071142484226612 -0.9188496210318844 -0.8429824602097944 0.3407670372867515 0.5897006352842256 -0.20712934316762532 -0.6865627310687825 -0.9998945547655309 -0.7207873076339271 -0.01079081795989345 -0.011662018825835396 -0.8263924704747594 -0.7378986917193702 -0.12238034594577019 0.838666703152458 0.46063412307225526 -0.3086465490200321 0.787978845970764 -0.15069393085200122 -0.845294052063891 -0.7368003994859511 0.645201296920979 0.6551143918584703 0.6738603506477314 -0.383422558495939 -0.24862514943473557 -0.21159406947579074 0.7401694602009072 0.599707516550382 0.5222238483126755 -0.32310768704346415 -0.9100668335837361 0.26560932910699897 -0.9558009608654516 0.600802535049417 -0.779876612367292 -0.4924134540903222 0.8392798381998274 0.6882876265154643 -0.6608421496735022 -0.5975860179922019 0.35180804442235103 -0.6389328157678589 0.5888326647088293 -0.44296963575568205 -0.00835649382586956 -0.7970656260635989 0.9030058011166979 -0.7252730132784886 0.952524940235943 -0.6204885376090659 0.16937677867290546 0.1554200692240124 -0.5917331800894743 0.8834135936341481 -0.13556928109887223 0.0059309735027983645 -0.13178381686596352 -0.6302076055033998 +106 85 0.45831557081325847 0.5660821311797275 0.31094276910358576 0.4706221397358292 -0.381370352291976 -0.6466624877465912 0.7115929195519237 0.3009133609468424 -0.4290193296800251 0.08884642928135622 -0.20991464686973305 -0.2697688886227838 -0.0012227068156556165 0.44797330189545037 -0.6316051628324053 0.7517228563786158 0.47226824876647133 0.29636753728654064 0.5262279827176939 -0.976077069284395 0.3918160938738493 -0.19219171303091298 0.6019707526304334 0.4321652389423887 -0.006233053862519933 0.08348998261302643 0.04259043125243278 -0.9032566952682699 -0.6697283126634774 -0.5895127053710587 -0.445568628589345 -0.043140536244100414 0.43735702004323684 -0.569127210722326 -0.2199688701232012 0.47091560753372463 -0.3292967650210248 0.0067711213264805 0.16702376014341658 -0.4198594279468524 0.5254016178530798 0.404306220998111 -0.2615184941915154 0.6931177736412109 0.010107626330022823 -0.6229169386360676 -0.18481497273383796 -0.2837001472235665 0.36278732236001066 -0.8909097355713955 0.23184882759435266 0.6529618107530162 0.36659749839258016 -0.021919622383778314 0.357023146737218 -0.9935407102519349 -0.9760918637913076 0.015885877494026257 -0.19431086656309193 -0.31087206903304887 -0.6300211885235074 0.16998369241387246 -0.001393140786304814 -0.8338414506808691 -0.2388107605299452 -0.2617345158801634 -0.12213226809599309 -0.080673096932937 0.011874653796831725 -0.6506463165277745 0.9912993802930328 0.006312161773040836 0.21261369802795538 0.3422902543946085 0.7107776603433962 -0.3945070193903235 -0.43207685392244155 -0.8825034898764226 -0.20145586509308022 0.5337112371831392 0.8792523929904221 -0.4981579925014381 0.05431568624981442 0.9509975866693781 0.7260363526912514 -0.15074211457529096 0.3777754037056671 0.9426162890732683 -0.564462940608373 0.5886336831835155 0.6835801898146421 -0.5934203879447866 0.84682526106978 0.3643371924285532 -0.6167296917969571 0.902923045602902 +106 86 -0.876716784873554 0.6410411076276907 -0.2538397626424447 0.4380712181871864 -0.5827119973979233 0.6448101668622719 -0.1643644011403731 0.9714727700649834 0.28452344129067586 0.43292371558316267 -0.4304646017582563 -0.6100800622067755 -0.7544712744339193 -0.6734915264895047 -0.6986545876703185 -0.08218988296624397 0.6979134074321505 -0.691052056500393 0.6065478138615463 -0.1792017440990763 -0.13321681511690509 -0.6604912508768814 -0.0440341397781745 -0.9010091490080434 0.18223706759757818 0.7012654517443528 0.4896045613906743 -0.3851770197514224 0.9865165600405936 0.7892308947731064 -0.7934231840895525 -0.36102295134575657 -0.9939367804054609 -0.9707917648282631 0.17252691453103308 0.7080699663656007 -0.888290897266268 -0.5879495431272659 0.8355125506501342 -0.7960412845196039 -0.08953676579310366 -0.745703134714538 -0.6033578178235703 -0.6730540249859158 0.19844271515503298 -0.853159633300286 -0.4958088401648473 -0.8447859087448328 -0.20040723133374172 0.5592835804019374 -0.8221607684633883 0.11201289119849878 0.08731018677303615 -0.13341212241937206 -0.155193199902673 0.9224743436407072 0.5532159368462393 0.2602058295178793 0.1360462357336336 0.044760099370025674 0.5242653653637026 -0.1387390876418635 0.4089997830460401 -0.7054975124901302 -0.05475763719296589 0.541971458700508 -0.042806881810651065 -0.294807133245786 -0.46684184053385014 0.22460074620489978 -0.9952397026541386 -0.28674937999103145 -0.15868689721858265 -0.9489992095103195 -0.9024711986380338 -0.43938734979545657 -0.4524582826256591 0.15982289239690295 0.6839344632449627 0.8482448843214612 -0.9582111778506974 0.7721588217605937 -0.4888101033099106 -0.9544334208529293 0.004889453159170776 -0.7912688231390046 0.21661597561849666 0.6348263825788567 0.8703667496747838 -0.8090196993652397 -0.37814424964156834 0.21033141047677928 -0.9940774632386367 0.623017334089109 0.7711515734697785 -0.3042933304072244 +106 87 0.4389120186026527 -0.0014858087350846372 0.8622215511665354 -0.051631595251051765 0.8175730820866476 0.346340142523323 0.48425486692731834 -0.5349450191128204 0.4823776218724134 0.30966600819599144 0.9193297412225141 0.5300032535578985 -0.6100699167155761 -0.2873673077495147 0.0539350793533695 -0.8013079619086343 0.591852303410354 0.7117048999803663 -0.27182368567755044 0.2995345700525074 -0.09685314660368682 0.0395322400828404 0.3647707281911794 -0.06669635586881517 -0.7862994497318587 -0.8434284243196646 0.6928817393439601 -0.0786085382095072 -0.6107001447249925 0.8628752859747528 0.8525749270209966 -0.46752472206286044 0.8344672846219179 -0.7431114951570781 0.934583401456218 0.9831322592253 0.5345517008749132 0.9939696819817803 0.4971513680446069 -0.1867526996144857 0.0448729821704994 0.08956270756260132 -0.3781778518419101 0.013574221176443801 0.22673829588465444 0.2092335387302824 0.9780296799762924 0.46765202074688395 -0.27982251777026446 -0.6495064723423642 -0.9077969708718947 -0.025924792052109957 -0.6729720067706646 -0.3730380350150204 0.6360310650871188 0.13127856456615006 0.7109632596308502 -0.2719143044445491 0.11433461276107293 -0.012947804814003039 -0.6758778456280754 0.3951787323226814 -0.7263882349721711 -0.08052805418225595 0.9584487185300381 -0.058180669885251834 -0.9221394849530793 -0.6010804411349715 -0.8407180953286795 -0.94939259343726 -0.5310890220175895 -0.8523496161587396 -0.26752042818419164 -0.9395335844926922 -0.5968695183243586 -0.7628093475056008 0.6326954805929075 -0.9223254674667707 -0.9284741968222034 -0.32196703153361117 -0.19194531602690268 -0.43339915400041473 -0.7909633598852905 -0.47134060762919217 -0.6772602981863343 0.06126821451252629 0.5501107362278208 -0.4712545387895415 -0.9797498197302605 0.5302748907237294 -0.5960131869829204 -0.6794739447056035 -0.20014522476539076 -0.008470568612664708 0.2780639658169073 0.5862169841386051 +106 105 0.26908545617784885 -0.21728444697541516 -0.8223565248735647 -0.7348061402141082 0.48237710241982223 0.8884459635755133 -0.4159887309670127 -0.14214539992781017 0.9072071666636994 0.48399900042661215 -0.23125582434604652 0.1702148743207017 -0.6063786747052622 -0.8719204058274721 0.13824516831859124 -0.3386256209818419 0.3391996280251557 -0.14018484537850084 0.21346221840448742 -0.8863785741400392 0.7652211468019088 -0.4832511876635084 -0.32842804238813095 -0.5239230342096632 0.2807615026500805 -0.5308558556617053 0.6374141193202796 0.3429607245726878 0.40294832985007356 -0.8700786399343334 -0.9782586335902304 -0.5624487336411084 0.26793569757883695 0.9900110462407243 -0.4224215277475367 -0.41602587462489593 0.4055846303005086 -0.39238930510557357 0.44901558874707503 -0.06511448400509812 0.6683257249387056 -0.21449487213667617 0.10957995938255527 0.6863652187761107 -0.2923513554241244 0.8787175444472355 0.6340160256454528 0.761482691297036 0.8935383633816898 -0.5713389572029861 0.4341069609547623 -0.3388203953677731 -0.16553710125888177 0.23164408568100625 -0.493119011224592 0.7294111292970866 -0.6278211478542717 -0.45808382222678534 -0.3943680316336391 -0.23338096060905245 -0.2793653747028717 -0.4715020524022151 0.901128039064675 0.7610660727036229 0.048261411296645296 -0.8572038350815865 -0.43867814909759795 -0.8265016127990319 0.6426859927333946 -0.29423888029807066 -0.4783527641866989 0.2135038122379005 0.24771274411516564 0.6732466538167319 0.7767957034935653 -0.07195373687724982 0.6254969687589844 -0.10245875683160088 0.3719768925176439 0.03312352585238254 -0.21698210130989515 -0.16251039183700655 -0.20972747770381361 0.6232856141435255 0.4400584520234927 -0.9025582842795521 0.39955188544872944 0.22694642124259223 -0.5382033867712548 -0.7001178518032465 0.6438374954795192 0.7503977196408149 -0.35878188327876703 -0.4293524339267596 -0.7360661837896998 -0.98932249334023 +106 106 3.839598057912022 4.69520327548387 4.4806612640729 5.157619668471569 4.654281034779423 5.334158223848938 4.899292846919353 2.8540524318427254 4.822169105721632 2.186903392154753 4.548198305541246 4.383138092375427 4.023656859549519 5.011270630887799 3.7941294156797203 3.2760878094701624 3.752046987290438 4.068380380635928 4.188106440885022 4.735325297460264 3.8589986689709908 4.737189551734312 4.280825383913889 4.491736500695674 3.482993714516745 5.216550908164759 4.360957671373245 3.8301043674571895 6.207744247841938 6.0507458837495935 6.868475639804686 4.1114833415282845 4.217517256696986 7.1009158811546005 4.69159673673465 5.248087220647832 4.091062867433662 4.446315899740427 3.906678443108964 5.0648097517689195 4.070622262739981 2.9956393900789893 3.9942422899745536 5.161370702447942 3.163841315574451 4.595993667230088 5.776518485121746 3.7644462240124965 3.399928175023356 4.935667889082803 5.868251028571469 3.9662798833850905 3.2639719385853665 2.739146993986462 3.4593921818758036 4.829498108509096 5.742139750693894 3.2744249141226964 3.2943841752774494 2.9607010152197777 4.50873997683778 3.5981439722533537 4.033643197223529 4.590818749172222 3.741900961486155 5.375165005416336 4.154731513003993 4.286806311233141 4.804090279066026 4.742364005876997 5.61011554010641 3.939251342049764 3.319388754092235 5.321383877940445 5.342150794591617 4.17984921988708 4.507664146048833 5.556656590063218 4.946385348146197 4.4469310426324435 4.534811449966743 4.9768559183136345 3.95960704979956 4.218849729048808 4.660866948568711 3.61618905529372 4.0234027443907365 4.706285231550424 4.463693513647103 4.710573251891317 4.477536683083942 4.2156838074353065 6.09224680612403 4.386064223945208 3.926881045501102 5.441546917338322 +106 107 0.09128300380617982 0.10998654267811103 0.22254021199516316 0.9682890909756972 -0.918109124713991 0.48077451712498553 -0.8309700033050684 0.06369133520440995 0.7472700857808818 0.7652332050258168 0.3916815119758119 -0.7458979936888162 -0.8914175846919414 -0.3365406902456667 -0.237996446055188 -0.008962596528191868 0.3706169622368327 0.14657621776992302 0.9845036016097273 -0.180793499414742 0.4170507353636079 -0.9656818904318922 -0.8411582601983738 0.5570919637624234 -0.5652844148792961 -0.798976563269808 0.4884391227696827 0.49540721351902817 0.5321726786451717 -0.6307531798903268 -0.5500673581736248 0.3397116513720049 -0.4760662064678636 -0.7652188415916579 0.635533296874399 -0.28891328787775583 -0.1268292786434253 0.10731581616648289 -0.1740711767609231 -0.767916989605169 -0.6731015763764703 0.20542230610470424 -0.28502169783665643 0.6438709390889341 -0.8291739602309418 -0.26685102961245577 -0.5817904612928657 -0.315182471278294 -0.35380621461507555 -0.3992602071347666 -0.42502494142458325 0.7760253610880992 0.5922611502379247 -0.10007431173155901 -0.5528114143325522 0.11548958584575231 0.8695897045803855 0.18108118928569938 -0.5984385276804636 -0.30428231689140417 0.6995944525333915 0.1478224729119515 0.074058092409379 -0.28101799602556765 0.39704563311539154 -0.41425146576673466 0.8523440208374577 -0.37559891211760155 -0.867723529958067 -0.43208948369142064 -0.7826811932813169 -0.049047654492425874 0.6891930146279401 -0.8048814594377727 0.5135917727913533 0.3318476791765441 0.573805820562213 0.9755709879203946 -0.6574622995475736 -0.7087891420109227 -0.5295873207732036 -0.9212414010767163 -0.9187295575071179 0.44754652796573047 0.9662340591532415 0.024264692560198364 -0.8711974364899353 -0.19549387304364996 -0.3795269285555729 0.393029574189093 0.10827873922429387 -0.4180839445275375 -0.6648170358838337 0.5091997907697461 -0.33801776134666084 -0.9804273466945215 +106 125 -0.03175433870836142 -0.7126996355910618 0.47867537909035596 -0.5301036918153854 -0.7155915855100401 -0.49640139590851695 0.18936246525420053 0.11961830437135901 0.731129892838881 0.022988007594154425 0.652425185539341 0.6813550900552545 0.3734227629483351 -0.9171013072453471 0.9577228534139635 0.04094813030831479 0.0351554062125885 0.5739903492497833 0.1778728883518319 -0.9265429977386366 0.4292412787014932 0.45923585487138574 0.7856124316972046 -0.05411628400598456 -0.3410836302419278 -0.4589017977151726 -0.6854807728624701 0.12521411045647857 -0.8872667159474115 -0.31951800056495006 0.9935175240276277 0.043880197662865994 0.3047051890097885 0.8372208490206992 -0.8361622198686012 -0.796571689934882 -0.7096794260908976 -0.9217978819224395 -0.6974144558865021 0.6537501016553078 -0.20804334896560772 0.34249918387676215 0.9224689525380698 -0.8280922064211906 0.8339655855949866 0.037275100843702 -0.7686055222031056 -0.788327088342458 0.36676482976818736 0.24821959900331003 0.6889352952320051 -0.47056734181672 -0.3175563954961471 0.633608482030185 0.23291685838452936 0.13499149832481017 -0.5269839357973467 -0.01514430383967369 -0.9049477184324568 0.13251822411126235 -0.13004669712146155 -0.545202251371725 0.6676378658650477 -0.5579533532341643 -0.2039422268435649 0.9300538786175641 0.9370206804438619 0.00052839773953961 -0.29029692864575707 0.651492746990207 -0.828610103053466 -0.9829930976145751 -0.47859057301979524 0.023238542519365524 0.8276315717893699 -0.7103365715143684 0.38294899092904466 0.6327935490591212 0.3055002171064207 -0.2655829621994166 -0.24158927982343203 -0.9909143550854158 -0.6680723781363189 0.10975250624679367 -0.9690371046681727 0.5370801397927423 0.401324353792337 -0.43721653664063065 0.8740302681670198 0.7273426921639172 -0.42398065696827314 -0.17102588124320595 0.7495865930550962 -0.29230198016978837 -0.3550328683840078 0.10536040003630931 +106 126 -0.8059836312914093 -0.6772945673921564 -0.684537169857161 0.6710050030314902 0.023721259982203424 0.9086236427206873 0.9375973708993652 0.09403764822578342 -0.3425042995636749 -0.014346456162926291 -0.7532209110591044 0.4391794761555299 0.5847552155250082 -0.9928045723467194 -0.5740343305538929 -0.49541447635729874 -0.788361209027229 0.028293649320223047 0.5693820681695145 -0.22636850875899328 0.2210540677914905 -0.4784459521473592 -0.6176773195991694 -0.9921709219259174 -0.48071815982363186 0.7071120525589154 0.4988930880315552 -0.2256954853303117 -0.9027716983092784 -0.8819562304822206 0.8891742840960226 -0.8111388576852183 -0.2119352493691684 0.5834017110216325 0.9420011462779481 -0.6686871467421316 -0.08687424957297862 0.8524240340585074 0.31717669199334475 -0.9973561935643573 -0.7327392153629415 -0.021951676348473503 -0.7966523199126112 -0.6893294634744263 -0.2674788862724329 -0.21724804721439073 0.5287159490482354 0.0022439382861496604 0.16351136842432368 -0.5384867030342639 -0.5783783370894562 0.8711167904316857 0.01752891012671176 -0.5595791279449918 -0.4709252398315411 -0.3724129767136317 -0.42088612700322137 0.4163796628240435 -0.1351711143393155 -0.7606837626119263 -0.5648458609871139 -0.24495595251645974 -0.2893772893968436 -0.6980217010416443 -0.08570325783832589 0.5871855225897251 0.5760364292641647 -0.8723025029397142 -0.32172736904803445 0.193462677210666 -0.8657541573532688 0.5992822475568942 0.311123589110919 -0.6214739602231374 -0.047396798504324655 0.8899692992380419 -0.4052949451192498 -0.18280675880437935 0.8594771888856589 0.08191114604801752 -0.41325713733911784 0.47580757726332856 -0.22650916186050019 0.17210258389738908 -0.7485187527719634 0.38811322441865026 0.23190019665128414 0.2147615655635895 0.10338849161616337 0.6100039492574398 0.7817924721275022 0.7041227275234414 -0.9561887543351368 0.5672106246507367 -0.1963292796360787 -0.630533353899007 +106 127 0.0014658917251182402 0.8799244378215834 -0.6832065086887344 0.49424271822162313 0.11316012681996113 -0.6216676914434396 -0.6375724833731364 -0.3106935857566038 -0.6660245678659438 -0.06889881253977248 -0.2898394084293754 0.7717567573847888 0.08528976800054022 -0.03426784857947274 0.15870395445746066 0.012392860181630105 -0.446074922147925 0.7050201260705247 0.260027844775371 -0.3493901452070445 0.42433190468787485 0.8391333973871933 -0.3968046665676006 -0.2533217586998415 0.6448012107617409 -0.8120921330267092 -0.07062339425972586 0.6061867195779971 -0.4503598687644612 -0.45756398425371136 0.5976197467141087 0.5510132192983059 -0.34504241917575507 -0.9388813630145025 -0.2150866404489573 -0.9126149688956713 -0.05849377150984458 0.5303594527376998 -0.6029535060512587 0.483651848399683 -0.7316930626470612 -0.2763251802244966 -0.22153888933451937 0.6426277933082636 0.21428058808401973 0.8006273074749086 0.6993120115077287 0.13490169401568552 0.12095067410697058 0.624763987257462 -0.9889328442407741 0.2301644018962823 -0.40246138467615555 -0.06916365364382049 0.019107195372288555 0.5566526285060189 0.19340444677827762 0.6908293674564157 0.30946758854180945 -0.5565796640409995 0.6422175721412235 0.912350695550973 -0.1548900565249769 0.5968931459409021 -0.8708918436893216 -0.9460484319333691 0.23355541685696912 0.264851924541881 -0.5216167123003701 -0.8013310989952565 -0.01927645789750798 0.44556948014787934 -0.541044270589327 0.19453736418091094 0.7497510014150677 0.3328061484253726 -0.6921408341193569 -0.7535896029589844 -0.2150920514221033 0.7310933283078733 0.41039100449641785 -0.34239146115387986 0.5830359636033384 -0.3686164451714944 0.06709109277777014 0.1206968467290539 -0.19517363167145274 -0.9442190720588599 0.024420010020633987 -0.1111254118767957 0.24309003165079068 0.06603038099162828 -0.7208958322519134 0.7861796943074268 -0.6079785202346235 0.7571279664666672 +107 86 -0.6967137502702323 0.38197645914491507 0.7150041513998497 -0.6246180383130209 -0.7663989013191046 0.14858873797057814 -0.9476378651046078 -0.3531665148216532 -0.1459399517768205 -0.12840594485964463 0.22019747505891463 0.7228382784104859 0.7285135978791761 -0.22616863396788656 -0.7601114529503836 -0.6639597393536594 -0.36290005942531844 -0.9277635283803034 -0.5684394843492335 0.16569816172578355 -0.5730447057364645 -0.11415678136318985 -0.6466182412890003 0.3726550116391212 0.3879776405185529 -0.11754783168650507 -0.08024143650264137 0.5606809720077077 0.30126136087973365 -0.9006045206915427 0.08941778555575253 0.20142162769796346 0.03936517817403562 -0.685616866655409 0.7804712313882662 0.40533601447250667 0.6227007460195224 -0.0056954736453345145 0.926986501088235 0.6960747682572461 0.4333732059563957 0.3041836028297564 0.5490325202242152 0.14561299007051187 0.3207148036405807 0.8950185293707316 -0.006852595799172301 0.7058830158353377 -0.541338596851006 -0.6297709726959457 -0.19671051631968406 0.14593155563139115 0.5191993562281112 -0.3241142476707626 0.056210233717921776 0.9832733289676829 -0.27979204055004514 0.382846162112199 -0.9106337646471334 0.6508887422522964 0.9321587470108359 -0.9405018569979027 -0.694592535299986 -0.5401953539504898 -0.49885771747598606 -0.014747554367223747 -0.041711378999044424 0.4597653771529333 0.7431926816092786 0.4914359070988277 -0.9317657770678032 -0.9339052857220833 -0.44380827087580244 -0.5940765591971793 -0.3485130782146444 0.34160594024889535 -0.8505971948097839 -0.44548888273786535 -0.9027770566498439 -0.20424477440539568 -0.4124377498466598 -0.13140049884664684 -0.5376308208320897 -0.4686871188670365 0.13104777794049638 -0.11114470723703906 0.01722215383955117 -0.7219469940295649 0.7796448298138374 -0.6873595343143855 0.04994538253113712 0.6288411333406205 -0.7556465049840269 0.22369532914399026 -0.051964786289918186 0.766293499884805 +107 87 0.08769493055805189 0.2603157478757372 0.2803767002051136 0.21060520167225683 -0.35569600720909755 -0.07315991554641577 -0.42377212147860877 -0.9972953178389932 0.13076931755495624 0.011949437104817884 0.35564167476582864 -0.021882713300329648 0.9552297028278764 0.15306735576568165 -0.5804231300785208 0.0870135424053271 -0.5591610223228343 -0.2267919831757943 0.5783539324934128 -0.5914422520888156 -0.6002612902588693 -0.06985203066879886 -0.4733196868026257 0.4409059846156618 0.7550140816255404 -0.7587407030858591 -0.4253412017341356 -0.4422317484987359 -0.5993572735717623 -0.7899889813492673 0.29180452347281105 -0.028186263325113536 0.27561592146135316 0.22992693031285794 -0.10720026550204387 0.9042346973663056 -0.6695926300800745 0.4928313806770941 -0.2329208938465961 0.40884740436844913 -0.3726569362214407 0.9177137692305373 0.3940344835193321 -0.5133319244578645 0.2564257158858252 0.9483631067778606 -0.1236409737651889 -0.1129784624123038 -0.7131327001732126 0.9333891355728472 -0.8232546299532995 0.0963478478307791 -0.012247180001361935 0.5899372722213878 -0.6436701966312595 -0.9345004452186367 -0.06768166427573652 -0.3873007885836799 -0.5761134548554931 0.8992192449687242 -0.27863069730857126 0.056387109260817914 0.10113976404476066 0.7784560258808568 -0.6651552610332012 0.5883813713849957 0.725511237046716 -0.9121017920499512 -0.6210443645830415 -0.3134255545354079 0.07977478390103276 0.16622333090571328 0.465090525593578 0.19978977284907495 0.9893915366924 -0.8375652868979393 0.3989242195985159 0.6532065239028482 -0.6595783476855344 0.13633374183990754 -0.13398185245092842 -0.48070715328775093 0.66874417852346 0.6966380674416093 0.9574337851094927 -0.9941906211222433 0.22029299946302294 0.3851975808128323 0.30233634794988595 -0.624506968048032 0.6623454602736736 0.05697699508808207 -0.16854453303130534 -0.700641713947816 0.907837975725575 -0.8459577861714129 +107 88 0.9065080876482092 -0.569178871366443 0.15740070838437759 0.636788601035192 0.03619416076795878 -0.41512933484920955 -0.7710402571242545 0.8936737582353893 0.8996211795611184 -0.04610986896695857 -0.3447135884231236 -0.9976341148402006 0.7224128417845035 0.06258556277264726 0.013280454713245016 0.49819252769677846 -0.7812196661866306 0.42129912440861483 -0.8921219635164284 0.8726803997874233 -0.3215230147069099 0.4775510087413255 0.7082440717410166 -0.6609917265897616 0.10243300956806722 0.9132972542906852 -0.9512831017875902 -0.33556899872291 0.9016713113748223 0.60545272708339 0.22406128755776478 0.9361456052654655 0.8844977942397441 0.34433799275736376 0.23326260410300304 -0.4934334041611079 -0.11569867470302664 0.6063166525693493 -0.34750533675181416 -0.12708856066036178 -0.11522276689646205 0.20584998462135395 0.818507028398159 0.37741695702217837 0.8339393806783553 -0.5782798402401397 0.7931849020529325 -0.8990263034607002 -0.27305269316095204 0.5199302704621607 -0.7501706360836955 0.2789585601697824 -0.08812039805864824 -0.12127479789011208 -0.8287243882183577 0.6439749558302807 -0.6467657431397813 0.24737973341409103 0.02941970447336595 0.516162391259199 0.20690191428681803 0.46223292610900923 -0.1436038218674942 0.4188601862734891 0.4175708948612311 -0.8477908038442781 -0.03396861136391971 0.2614913038451776 0.4757984234846373 0.3358156934641652 0.5559796112079414 0.383130360819651 -0.6983407751967687 -0.7505495439391923 -0.54163110855894 -0.8792193893647418 0.6860362765169716 -0.7060914311983844 -0.2370835635139359 -0.09204239216641974 0.9879715485338245 0.9772745470972053 -0.1300714715180904 0.11917283337481033 -0.4028819579963141 0.8596733387930786 0.2864305999788055 -0.7774199416080887 0.8198875484830574 -0.8092025026079872 -0.759799246716673 -0.48042353890710165 -0.3656157729185452 0.21378675983815776 -0.8584927737440069 -0.6849338530975821 +107 106 0.09128300380617982 0.10998654267811103 0.22254021199516316 0.9682890909756972 -0.918109124713991 0.48077451712498553 -0.8309700033050684 0.06369133520440995 0.7472700857808818 0.7652332050258168 0.3916815119758119 -0.7458979936888162 -0.8914175846919414 -0.3365406902456667 -0.237996446055188 -0.008962596528191868 0.3706169622368327 0.14657621776992302 0.9845036016097273 -0.180793499414742 0.4170507353636079 -0.9656818904318922 -0.8411582601983738 0.5570919637624234 -0.5652844148792961 -0.798976563269808 0.4884391227696827 0.49540721351902817 0.5321726786451717 -0.6307531798903268 -0.5500673581736248 0.3397116513720049 -0.4760662064678636 -0.7652188415916579 0.635533296874399 -0.28891328787775583 -0.1268292786434253 0.10731581616648289 -0.1740711767609231 -0.767916989605169 -0.6731015763764703 0.20542230610470424 -0.28502169783665643 0.6438709390889341 -0.8291739602309418 -0.26685102961245577 -0.5817904612928657 -0.315182471278294 -0.35380621461507555 -0.3992602071347666 -0.42502494142458325 0.7760253610880992 0.5922611502379247 -0.10007431173155901 -0.5528114143325522 0.11548958584575231 0.8695897045803855 0.18108118928569938 -0.5984385276804636 -0.30428231689140417 0.6995944525333915 0.1478224729119515 0.074058092409379 -0.28101799602556765 0.39704563311539154 -0.41425146576673466 0.8523440208374577 -0.37559891211760155 -0.867723529958067 -0.43208948369142064 -0.7826811932813169 -0.049047654492425874 0.6891930146279401 -0.8048814594377727 0.5135917727913533 0.3318476791765441 0.573805820562213 0.9755709879203946 -0.6574622995475736 -0.7087891420109227 -0.5295873207732036 -0.9212414010767163 -0.9187295575071179 0.44754652796573047 0.9662340591532415 0.024264692560198364 -0.8711974364899353 -0.19549387304364996 -0.3795269285555729 0.393029574189093 0.10827873922429387 -0.4180839445275375 -0.6648170358838337 0.5091997907697461 -0.33801776134666084 -0.9804273466945215 +107 107 3.970251702099058 4.028731977400189 3.868535959637605 4.922050927018262 5.477454857304318 4.551446563426685 4.062796612699286 4.855431888697403 4.029734617245414 2.9307553965442064 3.856507753068904 4.913879430097522 6.5136392861987495 4.036625817468063 3.6560491083643853 3.692981303546586 3.9932679513295435 4.0487171937362785 5.651571729859832 5.496085982289504 4.6744234329383865 3.7585726711329506 4.454668356629141 5.153513342805515 3.8590958586880246 6.102099469302946 4.899332615649074 5.129664625290822 5.928770411576502 5.198919792602724 3.8298973789970274 4.147149738873194 4.540963758906004 5.14529213273926 4.910856900006074 4.331843111645565 4.663154515638194 3.203413775013085 3.4602635622239752 4.740146100943713 3.9978092142517134 3.8352527405123595 3.965355415765512 3.8433396635130475 5.069026361326922 4.6146863465756915 3.4649198545705815 4.400901902830904 4.196504537623069 5.470955081092492 4.913024880264384 3.692043053192166 3.8435085440056804 4.732418739229443 5.065896248611018 3.885066766695034 3.4686566435126656 3.3635267278477166 5.749402229640105 4.7666061137878115 4.209370444570053 3.8441468805055905 3.1557256620293366 4.402387980945716 4.164346078698918 4.23448486315551 4.420034224015344 3.7380813143445515 5.50827287957513 4.0186720569219005 5.681825658743831 3.492365110933208 5.017024206605938 5.055560427557801 5.278651888681952 5.486733670778195 4.7458201665641555 5.506646282986602 5.292253329726149 3.520770890363102 5.748132052844922 5.2552939017573825 6.179126805490659 5.335951961593 5.310861555163763 4.738544480297054 3.5658725910338305 4.435587866380456 5.817034683702805 5.303299054404683 3.5665715418172903 4.346966123390204 4.021983668095159 4.4320303251069815 5.389178882000871 6.520716120026882 +107 108 -0.07860767472541452 -0.770337715646346 -0.07297314595890603 -0.39039966609998245 -0.74864884445706 -0.764228355663731 0.06311675739619704 0.31283015542655646 0.25015442126886955 -0.4648816199089163 0.6707220290567146 0.18836640604058874 -0.944347100487636 0.4392637803227766 -0.47026895957344506 -0.15885772650262653 0.2326315578190543 0.06117812659805866 0.5367621170145314 -0.3382657452782012 0.34338069067288246 0.8072949627863992 0.20391766108065057 -0.09158953347462151 -0.5551878732753206 0.7894394180644408 -0.7274875070501969 0.9838305002387298 -0.6468386095543088 -0.38965466893879963 -0.7272918646984887 -0.996597714962268 -0.8466723488742507 0.8241335986730918 -0.7346300007234894 0.17971132846609383 -0.9361370799159687 0.6897883170981032 0.11035377602530905 0.14363608946854134 -0.598233471643979 -0.5469448360147142 0.18820893973230457 -0.31823979068978536 0.44896284749325277 -0.14753301651835993 0.5950811332997599 -0.4134970112155747 -0.1418542680153405 -0.9655233248607744 -0.8337772291910863 0.5539253772572981 -0.11564904708769785 0.41578849622147596 0.8954840158623223 -0.224515147750183 0.4110715554308437 0.6523420271823213 0.997765364199718 -0.7393630526680499 0.13171291673496222 -0.29108528705971426 -0.1053938509790151 -0.17189422362584383 -0.055657703589024665 -0.5330929724177595 -0.902692790412335 -0.8316852711528064 -0.38617084697274073 0.3196527744895732 -0.3993409894950122 -0.8767704719160012 0.5658251412389717 0.21166842769553185 -0.22981938827522175 -0.9451212958439306 -0.6637739699124054 0.5679333312054407 0.2896886767731268 -0.019160614838699574 0.5904981386345811 0.9177838164610359 -0.7466770923811994 0.9191133822476671 0.4457065447219455 -0.38359508031002254 0.004146556097676113 -0.5035925170936646 0.9949684500792757 0.08777598389693075 -0.5058911532231933 -0.17845063136918538 0.5899511881687598 0.30204816321942185 -0.009469469521811824 0.6186394957108448 +107 126 0.11785255203445621 -0.537942141035066 0.7015807593855596 -0.8647947072703 -0.6817417121738403 -0.6532758674316106 0.36681465543930614 -0.7171332875239689 -0.5339162402410971 -0.04980019088147958 -0.9014805049294707 0.25611068499928247 0.567719406073949 -0.8154499440650143 -0.4029674306087989 0.8221578545024562 -0.40831743783452934 -0.9103182287165597 0.7516810646697429 -0.78452100730525 0.11063906923513289 -0.3511490706472329 -0.30098361452505307 -0.711506083240969 0.09065489585616437 0.45761570273569885 0.5436454262713146 0.8669441483295981 0.7181366000806195 -0.9619563786521661 -0.6320184338890196 -0.4526419356335989 0.03386266434785745 -0.9272122661134545 0.6861421979845288 -0.9702179979986774 0.026469080915514143 0.1929721087931482 -0.785495358612585 0.7586311875519118 -0.3824762157243622 -0.5011480046978105 0.08952843667861399 -0.5784637292062316 0.39497475493522227 0.2588424399946492 0.5583601312739666 0.2706538929802478 -0.9614696952419883 0.8176493062465804 0.4643130744447508 0.27661441684922505 0.3293019216209183 0.7426801913455612 0.9462705516875585 -0.0808680636703003 0.1849317915525046 0.7560093436482385 0.5045724537619729 0.13185817729672134 -0.5900489995464968 0.962754962332321 -0.9203991002454199 0.012352876160722337 0.7063922499301847 0.2212502813656192 -0.07173491963231737 -0.14991600583750286 -0.9913531695640105 -0.2935027741642815 -0.8421907189255782 -0.028360989586517338 0.7828135367099291 -0.887672968563556 0.6343456981869651 0.8744887613292203 -0.11104457883650487 0.5730959739141188 -0.7795220544755719 -0.6094272811845829 0.46522833559389687 -0.3502188864257161 0.5300607123314804 -0.9254462684570106 -0.2850220362015585 0.7030689868027384 0.42086461846517254 -0.09602687786487829 -0.18370612702652078 0.8315484878935067 -0.5251440217653327 -0.43905556908490206 -0.8862580354570595 0.7995627477297307 0.7303518409608356 0.46492773591882264 +107 127 0.7484421230193279 -0.5398841880100249 0.38262181854665234 -0.4313173274330959 -0.7990675149028044 -0.9620500878078009 0.2876955176769258 0.9217159258327541 -0.561472253408521 0.5165628380508411 -0.8087084693850386 0.3452691263131411 0.28538332696939306 0.9266511554130685 -0.5583731425598906 -0.5878278864704163 0.4143613422275578 0.6774990851272911 0.1320147543027499 -0.7115756099449368 -0.6450064326927725 0.5605227936646948 -0.6797701687757278 -0.9128129427874385 -0.947218019762045 -0.5515113926086923 0.2959950523362682 -0.3634411477336843 0.5371181149544753 0.06245819843103928 0.6641093403836 -0.04221664343435583 -0.987239441698391 0.7100950512661426 -0.7994076026514723 -0.16485870192402796 0.39049495621886776 -0.1291335595783638 -0.4176088542470482 -0.7437518798760434 0.41028913829318214 0.29917760830052065 -0.09277484711017658 -0.34695364042410004 -0.6225673811042962 -0.043413246807984196 -0.319681118855089 -0.004329359398325572 -0.5439687413522565 -0.20134870262924376 -0.3236858048100135 -0.6625831472569219 -0.582508244943371 -0.870178743221065 -0.6476714452699242 -0.3886236317627161 -0.10611086460234787 -0.15127667372568632 -0.6603158466045462 -0.3777634012780442 -0.42736276854366784 0.24001948672450002 0.3658187597746796 0.6146858201423917 0.28524276659677117 -0.7617132752567073 -0.5822706594380456 0.45615809508927363 0.5980518535816621 0.9536628895997479 -0.4544004711452916 -0.17703318344703534 0.7542401386398432 -0.862690986539927 -0.8425188456432362 0.6307798118639893 -0.7364936774339179 -0.6850616296167396 0.050291815970261 -0.5162774368121734 -0.9047630655626271 0.5790229023491409 0.9351594994667567 -0.7933467754569734 -0.6023982960465057 -0.9106644479980419 -0.6224167852281741 0.481075024353778 0.7489131391592756 -0.8518935030245847 -0.1665472092894873 -0.6174816485196752 -0.36452386165661865 -0.5790593066738403 0.8213694368058719 -0.8290910528497077 +107 128 0.648944045976549 0.3854728744387377 0.5826497554978309 -0.24254175583790438 0.8472704190705254 0.45645236999191097 -0.13926296747639055 -0.3177551007060657 -0.09952097638461788 0.32731531060636954 0.13978095794512746 0.769609086160074 0.57385400382747 -0.22476895071244862 -0.2710575260603063 -0.8301001700538424 0.3269686566812593 0.4577669678589289 0.603348767227718 0.9702821494763052 0.7263956530572222 -0.0288744075603522 0.22712165894622505 -0.6016276797370523 -0.2463918667962064 -0.9331179066328377 -0.530455226064179 -0.5424044043598675 -0.988137754371716 0.7452985066324356 0.10819905463836599 0.5599547419592286 -0.9273982730702839 -0.1407772302984922 0.05173747963861097 -0.17638714796471477 0.8720394338573514 -0.38205376683740844 -0.1293265157981638 -0.8997402993611143 0.5871554876706278 -0.48099236838224013 -0.8263367429191986 0.6165071566864924 0.8087648457975367 -0.7062225905479669 -0.003690054197359016 -0.7593805420538109 0.5119424429546486 0.29579147152665697 -0.9316706248785502 0.627672134196225 0.861954391432443 -0.8830778175521794 0.2122006507200649 0.21580384627096816 -0.5936587082258071 0.5693679918851009 0.9768969923871571 0.46007753609405566 0.4828336913140434 0.3602742713578102 -0.15863139744285593 -0.7220342183357571 0.30885573831412927 -0.3699533796411254 0.6531405263320904 -0.22052168859229382 0.7415994207615775 -0.7638491635055877 -0.663910143296135 0.3495222016212951 -0.43347683165567474 0.5647287910800287 0.33659453525715066 -0.5188952790522259 0.6384823717252999 -0.33505427654045117 0.9228709182561825 0.8804183180724625 0.7287040434317156 -0.6900916431332795 0.7501071504126136 0.09351441513288439 -0.7770043551851065 -0.1846189289529967 -0.8848203169651827 -0.7764654913814286 0.9773015231331754 0.8041858990391642 0.16456075756848598 0.7749616720603694 0.1282744223736112 -0.19409826671399788 0.7961218100939471 -0.44300692788692886 +108 87 -0.5814487166015485 -0.5448245358611543 -0.8176253903428718 -0.32355453932062317 0.8874345710146774 -0.4847652610040063 -0.021079451370317637 -0.8396807773414001 -0.6419820794368307 -0.2758352798367225 -0.8514877700304693 0.480495829477424 0.8345977023009492 -0.034913747914939064 -0.27000744644692665 0.3082749112700829 0.31899476161010054 0.7195838991838659 0.5169935892200797 -0.23253843239191285 -0.36810135183812953 -0.021044450693411987 -0.019871569547248447 0.2593212017833255 0.3417100181258248 -0.39825597211962904 -0.8166681652567382 -0.4833821981655755 0.6197979033145735 -0.4881844190360989 0.1630878337174264 0.9795234911274671 -0.8273796239889792 -0.40767862257887333 -0.8209819142847723 0.959662252183592 -0.9314781154777703 0.29903529547409224 -0.5722517443983384 0.15677324069215404 0.3798831904282469 0.16586801470106582 -0.9018586369494153 -0.4110438424747782 0.310194069370487 0.15180177966589326 0.4755023216992784 0.2845458892389874 0.399213635221779 -0.8055116286863724 0.3088598284388724 -0.04744277355098525 -0.7589232015199905 0.30917798475668334 0.460218208776636 -0.2089342490500219 -0.07102258639218317 -0.6355923008615822 -0.3411131838788608 0.05197066191274402 0.3954220490727467 0.23320422114455286 -0.6094509425365175 -0.501542467334158 0.5054949395037884 -0.15382862205832426 -0.24845942625569384 0.9809945568879244 -0.321366368884231 0.963585474930301 -0.7149749027402712 0.03585048377920397 0.8822686540387419 0.75178566021295 -0.9306862608967021 0.8975104798651563 -0.5294261530824227 -0.9402169094983166 0.6594852993269278 0.5842741321307514 0.9063603403023037 -0.7161939022344292 -0.06632938558896528 0.41920279535114324 -0.27064892078398395 -0.6659407684253127 -0.28053152219399924 -0.6141466380334177 0.5428311326824402 0.3205862311843297 0.8231649300061061 -0.5782136122952841 -0.6596783697338011 0.645300855562964 -0.2750868218849778 -0.3281736999770437 +108 88 0.10628955251328365 0.013352687675570296 -0.08890231216534272 -0.36342068855626186 -0.5051077927011935 0.450912518099408 -0.6140773125239991 0.07567344739593085 -0.5136886127810323 -0.23578906026351754 0.18599997072686403 -0.575962609881391 -0.6473677129931097 -0.4487254685885811 -0.20800439089191802 0.7999525695776919 0.6835829761299836 0.5392687656413355 0.9196414652333913 -0.2651151903756115 -0.45198371741234067 -0.9997344297733826 0.1594867471416468 -0.8571397507434704 -0.28807959545752504 -0.7887630082383013 -0.34392288096427426 -0.47272675183022916 0.9530290512142512 0.08310807420614386 0.6406619724818985 0.531505220058268 -0.9486665537145447 -0.25259197128355226 0.6781465894847805 0.009038373058516624 -0.15174424056896374 0.42389583447540957 0.08341882743311047 0.8912350413168555 0.4888865755237075 0.1462529892176605 0.5644179189196514 -0.5226762902127169 -0.590291020924768 -0.7940453051158787 0.166541280443252 -0.03551661503380976 -0.6932697973270745 -0.560468202075818 -0.7600858180175509 -0.9326961661894706 0.3844881371772475 0.4302308174689724 -0.19830805401734364 0.18600869096604744 -0.26750865215939634 0.3591440553676475 0.7586089102545615 0.5491373351724436 -0.4533377680466155 -0.1954668178127026 -0.3676480055763769 -0.05743123694411412 0.2814045828683698 -0.4165667831402178 -0.32754103665824874 0.054485790343272944 0.2681403857761342 0.9659597233887709 -0.5077998863092132 0.9368875404097092 0.3542841663135301 -0.19239199345428526 -0.31814416222156994 0.4732602327591837 -0.2383878463880853 0.38418188150839505 -0.26745051680111565 -0.4674197071478474 -0.2792909547298099 0.018683142556742416 -0.5753724581415123 0.8906820400072122 -0.8857844454006851 0.5778213942333237 -0.0028799819456992726 0.04004199315917223 0.762394003928575 0.8239294420855134 0.07652227123054645 -0.3735821260108072 0.8919402228421611 0.7030686735002898 0.44322375945987735 -0.31315676590011443 +108 89 0.5880698021259105 -0.34944600969444295 -0.63530059194352 0.13537527845023778 -0.5523584929859335 -0.22711457500978227 -0.6089294356897819 -0.22267064476931764 0.04783195121469719 0.18656955868055802 0.8724874768743469 0.5168695974895319 -0.23577138833513311 -0.08305849282470978 0.026378137167124116 0.9043807237974981 0.5208346497379055 -0.6867501948183552 -0.13393573739256603 0.4546583041032679 0.34594288154254005 -0.4753756364937993 0.40319566700622755 0.2561319334434857 0.17630311771643403 0.03322222932352381 0.9971938612783262 0.820029682120528 0.34527953445554593 0.8796843803634624 0.32051858809110256 -0.5631148580134402 -0.7179090374555679 0.16426494255428592 0.8972318121986012 -0.203377738211024 -0.9877163803438174 0.5286131464956827 -0.43622416034434464 -0.4177537161719589 0.5760356617462175 0.6933039935258714 0.5663029434948141 0.6784448724185277 0.24872527848178172 0.48084536371091824 -0.7717054764955817 -0.603229899216684 -0.7167795988659604 -0.7393198147726712 0.5616517400545225 -0.8979392736655127 0.1482655741118939 0.7357402725456235 -0.6885585145643154 0.5298806955626687 -0.8302263954505129 0.048682768912751584 -0.829769761477269 0.2992290793034147 -0.45617163511424974 -0.17159264545642516 0.6995689169735961 -0.26602519139550185 -0.12204216654203726 -0.8401979645135818 -0.6832258695517841 0.27450556339340415 -0.8363302487164546 0.8949670300921144 -0.2003167688415468 -0.5770406370660288 0.4369903885024651 0.43727957952546026 0.9911816944720719 -0.40813710815504134 0.023015598349722888 0.9344514603692087 0.8664519051062738 0.0705993202744779 -0.37962034751424323 0.916315286113321 -0.9313398898347252 0.5668085495387489 -0.9596916306277099 -0.2555494175413715 0.3333769972728102 0.14517752592404265 0.6567291372641557 -0.995393764787595 -0.5743205525935646 -0.6383354101400496 0.744019069694762 0.18460575204217888 -0.27736685164010266 -0.8521816009836121 +108 107 -0.07860767472541452 -0.770337715646346 -0.07297314595890603 -0.39039966609998245 -0.74864884445706 -0.764228355663731 0.06311675739619704 0.31283015542655646 0.25015442126886955 -0.4648816199089163 0.6707220290567146 0.18836640604058874 -0.944347100487636 0.4392637803227766 -0.47026895957344506 -0.15885772650262653 0.2326315578190543 0.06117812659805866 0.5367621170145314 -0.3382657452782012 0.34338069067288246 0.8072949627863992 0.20391766108065057 -0.09158953347462151 -0.5551878732753206 0.7894394180644408 -0.7274875070501969 0.9838305002387298 -0.6468386095543088 -0.38965466893879963 -0.7272918646984887 -0.996597714962268 -0.8466723488742507 0.8241335986730918 -0.7346300007234894 0.17971132846609383 -0.9361370799159687 0.6897883170981032 0.11035377602530905 0.14363608946854134 -0.598233471643979 -0.5469448360147142 0.18820893973230457 -0.31823979068978536 0.44896284749325277 -0.14753301651835993 0.5950811332997599 -0.4134970112155747 -0.1418542680153405 -0.9655233248607744 -0.8337772291910863 0.5539253772572981 -0.11564904708769785 0.41578849622147596 0.8954840158623223 -0.224515147750183 0.4110715554308437 0.6523420271823213 0.997765364199718 -0.7393630526680499 0.13171291673496222 -0.29108528705971426 -0.1053938509790151 -0.17189422362584383 -0.055657703589024665 -0.5330929724177595 -0.902692790412335 -0.8316852711528064 -0.38617084697274073 0.3196527744895732 -0.3993409894950122 -0.8767704719160012 0.5658251412389717 0.21166842769553185 -0.22981938827522175 -0.9451212958439306 -0.6637739699124054 0.5679333312054407 0.2896886767731268 -0.019160614838699574 0.5904981386345811 0.9177838164610359 -0.7466770923811994 0.9191133822476671 0.4457065447219455 -0.38359508031002254 0.004146556097676113 -0.5035925170936646 0.9949684500792757 0.08777598389693075 -0.5058911532231933 -0.17845063136918538 0.5899511881687598 0.30204816321942185 -0.009469469521811824 0.6186394957108448 +108 108 2.541289657674696 3.896845545830948 4.377721566043134 4.433948656010879 5.79113051055763 4.812186184021433 4.217838304388815 4.257378951175625 4.294024480014747 2.563087745801317 4.204136445747178 4.109555976108272 4.657875389350359 2.594898764380358 3.0015386869506018 4.018939395519947 5.260272160073743 4.725306174039067 4.324623835955041 3.6591122252107064 3.6017642782082433 4.567600434783602 3.208946020681059 3.848100629784512 4.227495526801745 4.341486124220034 5.897797946371329 5.449900630966779 5.052656637900539 3.763653426425009 3.1673066244929013 5.859834633392157 5.640360401038832 4.947727845727552 6.02221468710167 3.2019160766654116 5.303557569073831 4.995090879747989 3.263603826774932 5.611324249554379 3.8403493150109487 3.4436178122842946 4.290122309125351 5.333263366777042 3.1927704230952445 4.409606475528319 5.020315315710311 4.468936598226624 3.7193920957417506 4.353972985769733 5.1611822793783455 5.463120212904727 4.536643559664567 5.229355987113754 3.9686537389332184 4.3111605417059256 5.680041392006613 3.769872724569117 4.909251784976528 4.011671079463564 3.3739605617064345 3.1156769529582844 4.362676071147241 3.505380907785597 4.0984953098648935 5.173891814822031 3.992350362689957 4.343978914570187 3.001012319230021 6.552089850902384 4.9426049769892355 4.568148358036026 4.516466193450685 4.265214045892281 5.299409844759576 6.334068252640167 3.9686714636241764 6.007988392389661 5.213551532076789 3.2016504975399025 4.738967533792845 4.069923194116189 5.072090876591374 7.190180788869574 5.561867135279419 4.193350170063987 2.6178206076148056 4.011003044439237 5.4433222596959165 4.633855227950629 5.244624977727929 3.9396296121382717 5.794812344908757 4.344816113229777 4.5440149724021435 4.14420010868279 +108 109 0.14928276718472033 -0.749157323999043 0.8916485118685458 -0.6368694699411979 0.9824639833185391 -0.8245922124982259 -0.8486114736447392 0.22260620498310946 0.7215656306899623 0.42654333970512837 0.1919779042687939 -0.3834239863420632 0.5597441312479488 -0.5382231928182988 -0.09721327587007034 0.46509649352926963 -0.48222878763730415 0.8466876707520716 -0.05272554031775334 -0.536509032679291 -0.37078631809928164 0.9890311411046375 -0.8311303320570977 0.5129323536420052 -0.19735031216054666 0.8609000756824126 -0.4961498745686632 -0.8356941516492224 -0.23201241612137924 0.6186317994369777 0.5204397077330383 -0.46672571751603886 -0.49102639529002134 0.6712088081293026 -0.6823846621168368 -0.28278391858976604 -0.19951388159006855 0.41662526477278394 0.45729440433265545 0.7295234461748188 0.8207815110654879 -0.23078638089394232 -0.17124756571586275 -0.7500701078741012 -0.8156535485456615 0.3228021682337401 -0.19679648197416078 -0.5809937785650596 -0.3202481964280821 0.15197518047059644 0.9848606062072993 -0.8418669830631014 0.7686428758826653 -0.8214569611316704 -0.057674572255695944 0.6961562584430401 -0.9586230219749903 -0.1445501294436089 0.6677789457970731 -0.7635021708577265 -0.3123995453230699 -0.8007970020743067 -0.24567985927317282 0.4879060166718241 0.8921334108985797 0.9231030982190584 0.010793803946929525 -0.8471712184262736 0.06050228210356168 -0.4882191427020761 0.8730151747705042 -0.4563540156781789 -0.1087375233453769 0.5483339580247886 0.8190380712784469 -0.7637505332596357 0.7751075532258742 0.7920752144876768 0.09503734342832026 -0.0014598644402343819 -0.602445138402053 -0.14128079841717245 0.6954211704327327 0.8592672377134261 0.6519088274279565 0.15911857090921488 -0.6891864043599851 0.808550867097209 -0.4065244743179526 -0.13679171222619568 0.9415221293304643 0.481687989396693 -0.48790364819641474 -0.5424395892822707 -0.8925413667346143 0.28988732268811623 +108 127 -0.17801249604317282 -0.29726116643119993 0.4854290259579934 -0.4859885266666968 0.19751477853425659 -0.49585356951653936 -0.6663697218779403 0.9147693345887355 0.11770867068235424 -0.05251139360788026 -0.2814412237405586 0.13281256170323097 -0.03752238542119524 0.24995232499552777 0.23290530485760153 -0.11022826311133205 -0.9484991658579283 -0.8524978671904291 0.5390061513018878 0.07813192728847529 -0.40018422823004385 -0.3735807367660542 0.25399693449578065 -0.4662684527052432 -0.9697875201023878 -0.4985421553653575 0.49361007846491645 0.8124340716935317 0.14643622461696193 -0.014887338780490866 -0.12521147617139983 0.3678319667781169 0.5400076720601865 0.919649862732024 -0.8214909390850809 0.7350183513833568 -0.8413739571190044 -0.9623358094843757 0.5056366653220155 -0.9729089272863636 -0.17386427036930896 0.36392749921737 -0.06207835920051519 -0.4125039825848307 -0.12546668379732728 0.5195823783146651 -0.6240019108057688 -0.5681151110644582 0.5112635022117773 -0.675784559743059 0.5930707386614331 -0.5257248937795955 -0.6974615469674956 -0.4534706737076091 0.3276211292197142 0.7608051098113264 0.6266198254546991 0.979596806020093 -0.8540800628591245 0.6155483216581992 0.5419618322413933 0.24542804398100193 0.8207138475677307 -0.4083784632021188 -0.8249964541006332 0.7906513389869039 0.12640407751660176 -0.08060070062314706 0.19478582789622934 -0.6376564707440016 -0.38700871642609713 0.24883387003749657 0.46442460967459365 0.38801183991499943 0.13124142015145335 0.08163267884770398 -0.6220041055631236 -0.985159516330673 -0.8855210140000813 -0.5293324821570933 0.9396612912248079 -0.4540910726243008 0.8310578793400456 0.8561889047101776 -0.46719110043241785 -0.6768309126627883 -0.4152855151839274 0.4698928491596257 -0.4934123490406592 -0.8212973986244918 0.709812060977582 -0.32595617257661025 0.5317167961325022 0.7172017586555499 0.19837453450405484 -0.3250855571731526 +108 128 0.30711339162090256 0.9360271670731406 -0.11361754512206002 0.7899690712001612 -0.900203542105853 0.6609256736327445 0.7285301572768115 0.417085680692705 -0.0590118643605031 0.12431244229611282 -0.23396353774118417 -0.2608929536566009 -0.6315707008324043 -0.30588988753749513 0.8917779420035048 -0.5104950672406527 -0.5615754735144525 -0.024556363597635134 0.3229775412877842 -0.6951475904336883 0.5135620912520786 0.5556304044752101 0.5137201997497427 -0.7048677643419021 -0.41637386160308076 -0.47988402291821686 -0.8713901250568075 0.11244195841147286 -0.6722220863776358 0.2742846094172291 -0.09794998882846628 0.47459703384479135 0.1163537335298297 -0.05352086362216535 -0.10068363444660444 0.6543561396832709 -0.4121692349044599 0.24045944565662802 0.044066598171254245 -0.6813658528580266 -0.34203270285545573 -0.2803534812032289 0.7532001060453732 0.6492756770843862 -0.10130842819213814 -0.9908893406411305 -0.6087474391139003 0.6006904212884854 -0.1561096893204439 0.10363348217378365 -0.04364526580121786 -0.7080162474653617 -0.6340905614347845 -0.5692320267273918 -0.7612926215260427 0.19733561898744068 -0.8548966668359981 -0.12865216617345654 0.21310450646138812 0.70557413747491 0.05208499323418447 -0.22053519615418238 0.37622173137556203 -0.2620592993910409 -0.4313153419682825 -0.09768103695287067 0.5537990120374181 0.26686619819479795 -0.5803474025267792 -0.971125375725366 0.869093506202939 -0.019176821997945792 0.5350950657282896 -0.964234349783277 -0.6644282558595791 0.8570359238361958 -0.5831538200594919 -0.8179262586282814 0.31330971910371996 0.27389810524758684 0.026997708244315355 0.8708014517553981 0.04966522104216198 -0.847006673749084 -0.7196491802670621 -0.9541615838623863 0.08480796377073285 -0.32476863799008604 -0.5405510245920755 -0.766414364037127 0.1822556924240195 -0.5874985021653194 -0.8600972492939296 -0.320161650962975 -0.6191368995817972 -0.2477743115495019 +108 129 -0.12763107662746198 -0.019912695750396114 -0.7423706512388961 -0.5449161550657233 -0.8360752390113548 -0.24566849610870145 -0.09515586854867908 -0.729102728771801 0.9794673845289712 0.40893987425612255 -0.4185203431970561 0.6177846765364705 -0.0923631181597937 -0.49042289617475365 0.17445355669498896 -0.22377547625577643 0.8285721944226938 0.6079131634660393 0.38372457799791926 -0.2125910205610484 -0.1287631819989421 -0.11617102360647968 0.04378166108185866 0.6847731870670142 -0.5307063544815047 0.2636749725082985 -0.5586291152566156 0.5563985000079708 -0.6364525867603554 -0.9733171198041126 -0.43172677169405427 -0.9670922915192752 -0.9282629996135892 -0.997522804573578 0.822731213487873 0.11474352445923386 -0.7284455002051018 0.8537729684890072 -0.5251004055534383 0.7590563896513134 0.15880955542524844 -0.05615319028752719 -0.33546170931306873 -0.7101067963899279 0.43378803434072144 0.19428159938119172 -0.9392696272847745 0.4456951631902435 -0.025435713980600738 -0.23503046675457795 -0.6002210143467186 -0.025253980303368895 -0.9016885202293854 0.7810961582458855 -0.2721857667867049 0.7821996581225994 -0.7891287011956196 0.49851339705002107 0.022591375358784527 -0.21416836844320541 0.5436283480544595 0.495699014559583 0.7944242295213371 -0.8824822922069004 0.1538541334416379 0.8607909803662166 -0.7650611856085914 0.11590849808375703 -0.20203766690163683 -0.4934130431668273 0.11629284861088451 0.6176027444067449 0.4480653257938958 -0.2989231332782538 0.6370014783382698 0.9441106223233029 0.5153193335392028 -0.12054844320869562 -0.9480599928282127 0.976507941678197 -0.8005071168993163 0.027065278312841556 -0.6655111916750824 -0.9641192080293197 -0.3069561250225181 0.3096713340414232 0.6468351666122072 0.12339107818049144 0.10247637535457788 -0.542969092394479 -0.9508200055179541 0.1736325616618719 0.9982614722984902 -0.6618647390613555 0.8461410970980339 0.9836171121972495 +109 88 0.6501807089438629 0.1517941103515592 0.15702488769392264 -0.08097920410199322 0.26270365751225366 0.34145754214467394 -0.8197206736701521 0.30014932188326826 -0.15604314573302158 0.09625340094810175 0.3657052945867705 -0.0866934025176318 -0.05007423014679868 -0.12271776748949215 -0.06976715049491133 -0.017996566702587424 -0.4370827265716848 -0.041873354371846805 0.7494051861080211 0.04473987917067124 -0.9214900506712067 0.8555002462229075 0.1320177692657909 0.6297266564242168 0.3617056302518462 0.4620459199865865 -0.3885412269833841 -0.35879502700910515 -0.16779560214879985 -0.7325104961476243 0.03210235010034568 -0.6636847508152337 0.8739429456043799 -0.6408485296209505 0.7914680637726388 -0.09093255980214998 0.8314801902372888 -0.38077244809672917 0.7163897044908605 0.5354431691220969 -0.2584272124019389 0.6346360211403224 0.9914678654348239 0.4873093608848478 0.2668246768836069 0.7652455139328818 -0.5240494171684829 0.44877968057638307 0.2871201241855601 -0.30121639411160483 -0.2469190994371384 -0.9808512734166879 0.2851097766200792 0.8406766431904771 -0.04248248678890043 -0.16001200609601973 -0.5852501540612467 0.5461515163733601 -0.9712361554355817 -0.8985235312804973 -0.6946274546276048 -0.1902947255755938 -0.2292110508867493 -0.6668665595565968 0.366958103780183 0.35206293509626563 0.161428285098155 -0.9185390339992578 0.8665562999466607 -0.719878923546176 0.39218933106234233 -0.43599733632194404 0.5508990565024574 0.0781185083154623 0.08386061350882312 -0.4404687590671734 0.04490914141044411 -0.039380958667379895 -0.6342219586289972 0.2572134222453908 0.06140850330439496 0.9177761843762888 -0.3806288892905545 -0.6884620294769432 0.02124812355068406 0.2372553984323582 -0.6928032251189753 -0.19331569113077385 -0.6199129991494499 -0.4935921111334147 0.6577080477466668 -0.14646220761847495 -0.48061441628100243 -0.849630166062612 -0.6270351924836772 0.1016355995472169 +109 89 0.18645201321564464 -0.8760313068281571 0.19604659187262485 0.36928441402326584 0.5265576176846603 -0.4109781382234472 0.5976850492270678 0.11017874204628386 0.5227915695949819 -0.29705693931163557 -0.6431160860066734 -0.9084262582731621 -0.07975773226313132 0.5819085637247203 -0.9448079794745408 -0.07106007909946355 -0.5139960111206987 0.8214498076750814 -0.9610544287174545 0.5685130696673273 -0.27206978526435344 -0.3801761631678391 0.27137349411593825 -0.9474768392289159 -0.237631470786686 0.7460573706696236 -0.46375158909437775 -0.7291514388804088 -0.5030306398901541 -0.8732942016456344 -0.9769078133221725 -0.49831633649793705 -0.7573305307929874 -0.414981731656467 0.532635396085791 -0.030005461195434346 0.03990382362046874 -0.13791557061908555 0.638423069812551 -0.5390354729535491 -0.5910481957873766 0.4425867217080566 -0.577835600302014 -0.6288005592491928 -0.8523475382914658 0.30660650986706917 0.2713005137866418 -0.17731338733973234 0.8917223930265219 -0.7998241577109759 0.9702447294555379 0.8035909405186743 0.380443574206329 0.1851074474770904 -0.2014972853621595 -0.019633031545255086 0.5471758571899907 0.29004110365478475 0.5917083966243613 -0.64974034279968 0.9539452074395949 0.2953117573426962 -0.28099909551937063 0.4739831814991611 -0.11011912677915925 -0.8158630039611805 -0.8867336660899257 0.6338883304178389 0.40867496277208204 -0.29738791543369136 0.9067190862895469 -0.35805941535795416 -0.056523629281812315 0.7381205165205618 0.727549492827241 -0.4243919977274615 -0.027899700016286832 -0.06161692880214131 -0.4635374774095873 0.025241966820588102 0.5422203581117491 -0.6860710810143749 0.5149278897768255 0.7136966150097579 0.17568456039718794 0.10031898509106862 0.7579136505762387 0.7605068393056276 -0.4963936198437251 0.8817231914564447 -0.9687615871636011 0.9163040204419368 0.08510214541610961 -0.30517953386017904 0.4254189835430584 -0.9971100011320468 +109 90 0.44327635734463944 0.8614195295941356 0.45756442002158115 0.021862584245536665 -0.47200006860419896 -0.8069849812328047 0.397887657916963 -0.7098074519613049 -0.7827778727475572 -0.07017076322218152 0.30553026367657643 0.8781371863433189 0.511419512943573 -0.9223081036941805 0.8164116532756172 -0.18056056578711344 -0.007795639118263198 -0.20731806746470327 0.5938689959308177 0.1248709649455666 0.18144092465620565 0.6240243624390929 -0.1414561463550983 -0.05039618917509614 0.7364695086717805 -0.7551380336475984 -0.18065650502908115 0.8809308559875471 0.5281574886635394 0.6476474580160823 0.5929555678251337 -0.05320966599743704 0.24039623848551783 0.4769486987550522 -0.009695825138485992 0.9057953584868568 0.24063644968647435 0.22392291904196782 0.656206119195273 -0.8721603309961088 -0.9979443889892778 -0.25238020087376767 0.1863210358185774 0.9349549350384203 0.43413493638341416 0.7439950607493797 0.24315183819625208 0.9220541119903598 -0.9728867228951199 0.709208005134828 0.22191426702453776 0.473547474983254 -0.2558311013503556 0.47799743002941564 -0.7388327038402644 -0.6203792264209793 -0.7332374692503314 -0.25273406822056277 -0.5026879340022865 0.03584186668216138 -0.03699035732836764 0.26917002888809094 -0.47344675530031854 -0.10237837240609937 -0.8370273698929087 0.9152936108320149 0.7600850404858388 -0.63464103518474 -0.6022026839373735 0.2878590605921132 0.9237424959177567 0.40412062352675937 -0.08742085226805973 0.2074553647036128 -0.7188803116899227 0.8502999299574767 0.5327742467463774 0.8532357486774296 0.6032045377451409 -0.9192448931498645 0.4277354316096791 0.8129956296023262 0.19789208461144447 -0.6062585047222271 0.3136484265974613 -0.6523930652004426 -0.25150625361200407 -0.20406363695687668 -0.10320670612848204 -0.4591176395205028 -0.11739031893822238 0.029648742899658576 -0.27606401848661255 -0.5494566754083903 -0.24480781393408835 0.7321397455653766 +109 108 0.14928276718472033 -0.749157323999043 0.8916485118685458 -0.6368694699411979 0.9824639833185391 -0.8245922124982259 -0.8486114736447392 0.22260620498310946 0.7215656306899623 0.42654333970512837 0.1919779042687939 -0.3834239863420632 0.5597441312479488 -0.5382231928182988 -0.09721327587007034 0.46509649352926963 -0.48222878763730415 0.8466876707520716 -0.05272554031775334 -0.536509032679291 -0.37078631809928164 0.9890311411046375 -0.8311303320570977 0.5129323536420052 -0.19735031216054666 0.8609000756824126 -0.4961498745686632 -0.8356941516492224 -0.23201241612137924 0.6186317994369777 0.5204397077330383 -0.46672571751603886 -0.49102639529002134 0.6712088081293026 -0.6823846621168368 -0.28278391858976604 -0.19951388159006855 0.41662526477278394 0.45729440433265545 0.7295234461748188 0.8207815110654879 -0.23078638089394232 -0.17124756571586275 -0.7500701078741012 -0.8156535485456615 0.3228021682337401 -0.19679648197416078 -0.5809937785650596 -0.3202481964280821 0.15197518047059644 0.9848606062072993 -0.8418669830631014 0.7686428758826653 -0.8214569611316704 -0.057674572255695944 0.6961562584430401 -0.9586230219749903 -0.1445501294436089 0.6677789457970731 -0.7635021708577265 -0.3123995453230699 -0.8007970020743067 -0.24567985927317282 0.4879060166718241 0.8921334108985797 0.9231030982190584 0.010793803946929525 -0.8471712184262736 0.06050228210356168 -0.4882191427020761 0.8730151747705042 -0.4563540156781789 -0.1087375233453769 0.5483339580247886 0.8190380712784469 -0.7637505332596357 0.7751075532258742 0.7920752144876768 0.09503734342832026 -0.0014598644402343819 -0.602445138402053 -0.14128079841717245 0.6954211704327327 0.8592672377134261 0.6519088274279565 0.15911857090921488 -0.6891864043599851 0.808550867097209 -0.4065244743179526 -0.13679171222619568 0.9415221293304643 0.481687989396693 -0.48790364819641474 -0.5424395892822707 -0.8925413667346143 0.28988732268811623 +109 109 3.9509949865391074 3.312401639757625 4.0840169331495195 3.6571603882583936 6.371027594385636 5.246363029068488 5.650094984314834 3.5723223677445812 3.327518141212612 3.5011969046013407 3.5623268154321233 5.58386363362963 3.726911997354944 5.340404333701515 5.185789911954753 3.037026408118037 4.631678239734802 3.9646648023350437 5.038757296121437 2.342097202083173 3.834233257118111 4.3893546381973545 3.9565214166932994 3.927690583471407 3.8045296138874987 6.243264977000722 3.9612479568203907 5.18368924049458 4.009563224759846 5.412424554993878 4.495682765583574 4.789940992875409 5.010304485760141 5.583862859237194 5.392791467986213 3.8928835084885702 3.4007222253786082 4.443923037253543 5.678788041790545 5.808517686322605 5.63941920548554 4.581036325667958 3.830581841099404 5.673145580725033 6.190612155142114 3.8908856573999246 2.2783869320250547 3.705409744617267 5.947963965171215 3.862628789913864 4.431485465224834 5.7429521069512415 4.345579246137203 4.582045081227784 3.6241744302901457 2.8054937553463626 5.710331548177542 3.559554458321693 4.456367678638131 5.276486213112307 5.380134115217853 4.435951491517022 4.337079354428544 3.618546001543355 4.4824096237509705 7.11232217677212 4.906318075653278 4.267796813194413 3.324198503927608 5.092918113083764 5.853105127467591 2.9019251092978786 3.2661430608993807 3.3109090718658236 5.791938226884304 4.601444636179471 3.680900602409182 4.900682017997891 4.542271200978882 3.619745538555228 4.750160556097201 4.916843814563725 4.816711605563094 5.10389594560871 3.656958681508435 3.7163773259171524 4.998021044420061 5.16887446105792 3.7763546389850786 4.501762430044958 4.852224781199662 3.256136978121135 2.8516459670086047 5.110474553243512 4.80838750501166 3.89367666191273 +109 110 -0.1353630931673382 -0.0451403696333923 -0.3140019048509777 0.228280605582452 -0.9311977264130233 0.5548489363466422 0.46901771560828776 0.10797624597936228 0.2043955081329203 -0.4051089687292775 -0.34468851877900386 -0.7832394330860422 0.4428031471614935 -0.10940478110988017 0.9348582904954119 -0.10778505267647631 -0.8894247636827941 -0.7583219485064714 0.7556861555254182 0.20287742726406033 -0.3556023679804843 -0.5524688237797997 -0.7492726196610626 0.5374221069266036 -0.4525855025851604 -0.7009956160627708 -0.8857403455088775 0.5977985767908598 -0.5000610456251751 -0.3509057716450996 -0.5072891846071337 -0.49812823460663513 -0.9428585956972042 0.35561437608333946 -0.9950533477791768 -0.6111864355525165 -0.5166737859608932 0.2861421512244229 0.8671124182535064 -0.5114214248839413 -0.9210690486969797 0.17109313755652011 0.38421555091319637 -0.7658742711659017 0.9897124415306153 0.7808509338945115 0.1641269478144909 0.014096693290553297 0.21654187801971703 -0.11753900468503109 -0.27759941649287145 0.25240543574774454 0.1418419733671945 0.7854283410023788 -0.7913603511868204 -0.5378729459434834 -0.456187579798671 -0.9291881713116856 0.019474515746912724 0.3908418203001458 0.6359786753141046 0.7058889443248002 0.993678424996113 -0.060649496449489027 -0.2740277186496203 0.9919385179065165 -0.972519659450523 -0.22837928802570917 0.012563552264440947 -0.4501614619506604 -0.12056657970884821 -0.13917115743444586 -0.8312307481193171 0.2129912166493333 -0.9391565505494841 -0.8593473576193393 -0.43680138124562085 0.3575568581830355 0.22067846836379457 0.2467268836406329 0.9381071493750761 -0.7611823071131645 -0.6798306175377145 -0.13271789336795314 -0.05800907305955949 0.41283727339587317 0.5067296493663933 -0.9276535469906879 0.02893281919198043 0.923362119560134 -0.19633553491456968 -0.3498684076267331 0.12414240704741064 0.38216227890709287 -0.8281569641904958 0.18690839553884064 +109 128 0.5540161316434429 -0.21455092264556064 0.9971825908675087 -0.7972300848765652 0.995686634062497 0.4247840714372695 0.32851186953395484 -0.44929853509077367 -0.06180352621287266 -0.302323818198013 0.26011928198489875 -0.581611135960604 0.6406243674901761 0.9950956755109657 -0.9496218340313669 -0.44061429204070257 -0.7837249460998539 0.019397233652906465 -0.9571183572481816 -0.10703478359913876 -0.7463713760007893 0.3446589628513732 -0.5047262482430335 0.1408229379570083 0.6997963777525522 -0.9125803049864165 -0.21998518325933625 -0.3702809739855195 0.9326694177569519 -0.23869101681964877 -0.6754978643028171 0.845653423955218 0.06929238046703912 -0.5439605673699794 -0.5686486159414266 -0.40502265862151043 0.38718273329002195 0.7335047220936586 0.5595349293011513 -0.18216563226992366 0.7931192033522674 0.8404121752044589 0.1506137269090455 0.7991333675457335 0.9394462587797656 0.4488525283184073 0.13901252246650797 0.2652320688712073 0.8220879130620411 0.1073755275811652 0.435043329274861 0.9736594734533333 0.43821339185679276 0.01946451528736337 0.3584921104607197 -0.0917347601550198 -0.7758222888735831 -0.435914206231075 0.4821203337639204 0.3391446900271058 0.9929325079026745 0.43951856665762623 0.12081057047465649 0.03859535610419873 -0.056129702841004825 -0.8519228529133425 0.5943414131714087 0.06773267181522402 -0.5913462085522072 -0.9732367947685687 -0.08547999634807368 -0.7104520264022871 0.8887406657580867 0.20948825813145877 0.7554290019349981 0.06769238575269299 -0.8905420849324635 0.3056804214219646 0.5713913980328242 -0.13521696502311276 0.34244317360826027 -0.3642107908952743 -0.7556090098197388 0.8789612998604874 0.8228545623833208 0.4075132626561573 -0.8049078194243635 -0.8970212357273188 -0.22940720452442398 0.3722298902357717 -0.5607642848669365 -0.054585248574706924 -0.2532090928977315 -0.6403932329771733 -0.9095167149102454 -0.036612929725929666 +109 129 -0.5213138329357352 0.19404748750187495 -0.615925454715651 0.5036257483460456 -0.7469348114420438 0.08720849366171812 -0.8309545909219667 0.4623301225774723 0.4244090714159887 0.4662931491057938 0.3212295132564249 0.666000032978209 0.3721515727306115 0.7109646037899442 -0.29520698833549885 -0.3300481734563452 0.7043769300223699 -0.3801194574656226 0.1275599996976977 0.04433102777419906 -0.1389708195352206 -0.2209463789667392 -0.20544723938908804 -0.9571354945326191 0.40291975909597255 0.8119926959478851 -0.9748457400140056 -0.11348256205877516 0.3676083503240668 -0.9457252280111523 -0.07534983389455685 0.8246887637875184 0.5538101408606344 -0.7704284063960132 0.8366791964974212 0.7443946933418482 0.4669919540605876 0.6898341064631923 -0.8256700759551687 -0.6604687100111772 0.09633010869004277 -0.6149787803368572 -0.07236422380835617 0.6691158837918627 -0.5823915492609826 -0.3323611746800723 -0.23147709543619355 0.4572024075748973 0.9826233712390762 0.6111739118944544 0.11141417958608413 -0.1558209492799434 -0.5027892286531126 0.0015431116125370625 -0.5707440102512191 -0.19400074895355046 -0.2816795074476728 0.008063304921043013 0.1866869805557667 -0.9056822254550578 0.9020487408481008 0.7352288289360436 -0.5520654567206797 -0.9919209121337815 -0.6430233146282831 -0.8214042900780876 0.6186201392044794 0.08710484274222297 -0.17500939055095155 -0.9090480377248376 -0.7060141831612861 -0.16641234669894311 -0.5604007650490117 0.2712550885658471 -0.9676937362280513 0.02655602107242072 0.5517374031991482 0.9232277195366745 0.8551409426117971 -0.9297704371198392 -0.7268540527400489 0.2721236461355867 0.963425574363713 0.49351500423309735 -0.29046122146405473 -0.745941292804648 0.2558669572657577 -0.6034282710716874 -0.6843160105037001 -0.46857929107104423 -0.22728719024040345 0.22326683701320804 0.8408482424516335 -0.09090771515351137 0.13246463848694212 -0.8356886804390111 +109 130 -0.8751087580781833 0.10157009153898167 -0.3902334985969651 0.8988139631018053 -0.8557722758621493 0.8749871002067389 -0.5180808385195022 0.2757851257037456 0.027619725371295756 0.8864716669691353 -0.5751643419509704 -0.8340949880971367 -0.42657747917684286 0.8088834932802884 -0.12257946070664527 -0.6184386532561748 0.7746648198329082 -0.023281716448680045 -0.002304906955569841 -0.6094103882506849 0.03531396776315354 -0.3365279687339662 -0.5920038350751331 0.09984104701296959 -0.5914601578122101 0.8462641305900773 -0.29722971339221393 -0.879483261738891 -0.4676058854173868 -0.7392704360837004 0.7055970653696053 -0.29340885675272066 -0.15152905596034505 0.8334107742225383 -0.34808382302772656 0.7174660815450609 -0.443157604865114 -0.8730840080589266 0.7852977723163894 -0.8304110573375718 -0.34340281445563225 0.9148332479529508 -0.6369905516887842 0.06437074414938437 -0.5413488933136776 0.1330198203568651 0.4373589351268419 0.8337600688855602 0.47267147646099517 -0.8454792071544912 -0.8331476781323099 0.787516163161097 -0.8285393838638846 -0.5972570644634596 0.3894521248671321 0.32717626918937825 -0.7234158982771142 -0.6056358997636562 -0.5134227661529474 0.7977373246090442 0.5985504432221163 -0.00022840738171447938 -0.8952930789940552 -0.37856613518776183 0.47722698808699104 0.7244114635891623 0.7409349294767056 -0.10291274566565445 -0.4809497523110504 -0.003501010229443269 -0.9998013568336452 -0.1808234065513301 -0.03212951393511432 -0.7017212831206519 -0.3228778269214063 -0.5768982368935207 0.18285731172978226 0.5843787627452393 0.3366987506413244 0.12581280285271101 0.3232533925013905 -0.4227141824482161 0.007719993159968519 -0.1348464752379579 -0.5876043999137686 0.7337355579398153 -0.8301511208013006 0.5196665352925098 0.810830025361138 0.5158469906582115 -0.7658121265884192 0.7681580040914475 0.2857597147176212 -0.7822811834562164 -0.7458397602002693 -0.4125111114583373 +110 89 -0.24503169542829628 -0.7890970185199604 -0.9096761759900667 0.5559859386957784 0.7104443354855847 -0.9212789556666559 0.7324792697723919 0.31201335866811775 -0.1428646161635887 -0.8269889788199749 -0.29437327903102295 -0.7412474569925727 0.8840328578118355 0.5047521456260775 0.21094501965432988 0.606927031957543 0.10776271628559875 0.7318272985314909 0.7896217388422337 0.7026336976988004 -0.27618535424692703 0.1809682979877274 0.2344310870213051 -0.14342757004875906 -0.32113894942769017 -0.525676825603709 -0.38721778510658544 0.5982853863038886 0.3223773623099677 0.985584901681676 -0.41157178634785296 0.615503241721779 0.45286155500652625 -0.6368586601323392 -0.08942055030009 0.1797480293714966 0.8393783825855039 0.7957350997090147 -0.4873325500510075 -0.5449138605838422 -0.4368294805262869 0.3819970456003805 -0.8719569690118663 0.4782040712357625 0.6959136205187051 0.10545349080510147 -0.9605620290904109 0.5208352221073578 0.4633674106645298 -0.8610511898483293 0.024828872706882832 -0.19974539819010428 -0.4061675024661011 -0.46686590994814114 0.6991860351902865 0.9142028708590122 0.9098946612398504 -0.3465381247803323 -0.030342157451813234 0.6228717970257813 -0.9257371767122564 -0.9846007571919344 -0.5044365997405029 -0.9388511339192389 0.8993704056371856 0.1823558864868009 0.5519873774124338 0.7320802292708124 0.4152371307603706 0.29477412640931133 0.15813942472921405 -0.4634132177477268 0.8723721421057533 -0.025498989725817545 -0.2557270331008885 -0.4082209320274801 0.7010735387288503 0.5974750770154602 -0.3425701851209939 -0.45388163843546003 0.14945130079152946 -0.08339615628366737 0.7096657031711147 -0.5061612300614668 0.9542693995456233 0.10144275792655821 -0.005820847960019027 0.9764765804392246 -0.9830153308991054 -0.30572119812829923 -0.511656508370776 0.9547322590672809 0.00037453143351151574 -0.6945844465710225 0.16277671395934146 0.3496048007781849 +110 90 -0.26684729426073517 0.8366780228595259 -0.5141802910533726 0.2624332216120442 -0.23036624775491998 -0.5568881597816813 0.1865930103801301 0.3237934928161619 0.6644252102977617 -0.6082847880283242 -0.28864365182267404 0.06727500173636769 -0.47108302395916346 -0.8121002308427507 -0.062244791984843895 0.31105922979865475 -0.29752067885112865 -0.35334685960442136 0.7636300931419076 0.5638672974707157 -0.7500134357575876 -0.9835624733718709 0.3212635378394437 0.8960155886115919 0.24207046783959352 -0.08181199463435651 -0.6488798455084996 0.6134887783812843 0.5036330511791458 -0.40510951905233283 0.14290224111550565 -0.7572341307866473 -0.18566000612457167 -0.015144534941246901 0.7777470321166253 0.6294336554230366 -0.5665801340130283 -0.36875095743674224 0.5657309674986875 -0.4924938473839078 0.25309662591359294 -0.27001124911812946 -0.26484876948565006 -0.7190357017973197 -0.6320157785326717 -0.36056199300113656 -0.8383211969747246 0.7115056867151719 0.34790587355939673 0.39174761747189657 0.5303521219871798 0.25298062108265196 0.6898042641174198 0.45060674815449264 -0.9898940073739382 0.22278931702459936 -0.4184757050897512 -0.7397529010123423 -0.41752702920094453 0.7776782915191107 0.026027325386400513 -0.04182667589461886 0.3818281785730797 0.7672866836764778 -0.06294011918060916 0.691189617625037 0.1851519900226164 0.19704786449898504 0.5460417505960764 0.9578235087172844 -0.08868910784189143 0.376725711242047 -0.3808243904451283 0.7843537575398638 0.5923599652364158 -0.5666563079838736 0.6890253457360052 -0.3344672025480031 0.27493750455643107 -0.8519666119570135 -0.847035415590891 0.9579588862194954 -0.36501360457187015 0.2719885169726013 -0.2085159972594588 -0.6274448468749678 0.8377949772011228 0.05047229550124066 0.43247615130868233 -0.6541784141449178 0.12980704844656388 0.168587269745325 -0.9517268177362483 -0.29675800093661087 -0.6561046530776089 0.7904797890960478 +110 91 -0.7057984596064772 -0.3824673944872523 0.9609643542328143 0.8199716934951942 -0.08445827205476752 -0.5258309092736373 -0.6772370998756447 -0.0820368158553797 -0.46682768639049876 0.40390756474023126 0.40380139231265955 -0.009945859138096536 -0.8307777769243294 0.09014833200774697 0.9298125932882766 0.7896343070447929 -0.3374820673347376 0.1831877341952075 -0.2511141662535672 0.9603932769098575 0.7387132627119937 0.6588510712074833 0.9431631304412957 -0.6904385678791918 -0.4212151510171642 -0.2562485786877786 -0.772511046359021 -0.7431483806433088 -0.5969369631451875 -0.48076831908493545 0.09506433921082214 -0.34718262463196714 -0.5393961926344524 -0.7447479597284095 -0.24393901539045038 0.02254088930020748 -0.6391978783695431 0.8469311923333078 -0.7906690850251548 0.2787982566594833 0.6412518678748511 0.11675159347891317 0.0957757633540377 0.5109101321443967 -0.12121199749717881 0.004021629240940072 0.3649250673098705 0.9459766100780846 0.7073698917437139 0.39700795937472577 0.5939865021968045 0.7090503235054177 0.7490091077106409 0.8102880239074708 0.13131681609117862 -0.09307393145137643 -0.13168374689039108 0.9677847635686077 -0.47887702571260604 -0.4730517624566728 -0.46242292161013787 0.0015893475358281783 -0.9966867663313812 0.061267106286277295 0.618251006782147 0.5920028446399681 -0.6016419552723202 -0.7764440617324602 0.012994302270259439 -0.6531704200233366 0.6583030163071086 -0.1916105349284325 -0.3839155707564499 0.6805281572474782 -0.26670754326210977 -0.7275020876428564 0.45590362790910977 0.3904890560712584 0.6708253082778535 -0.42196286554647133 -0.7298745847185288 0.7299320485172835 0.24633728858725434 -0.7454852954514937 -0.25944952848615466 0.6043614161862072 0.8655678003336467 0.7073476407633228 -0.9780231982230867 -0.6975342752788485 -0.10997879545710587 -0.9826830703164866 -0.19859985022059878 -0.22672511145623853 -0.28931819674109316 0.8080640020205352 +110 109 -0.1353630931673382 -0.0451403696333923 -0.3140019048509777 0.228280605582452 -0.9311977264130233 0.5548489363466422 0.46901771560828776 0.10797624597936228 0.2043955081329203 -0.4051089687292775 -0.34468851877900386 -0.7832394330860422 0.4428031471614935 -0.10940478110988017 0.9348582904954119 -0.10778505267647631 -0.8894247636827941 -0.7583219485064714 0.7556861555254182 0.20287742726406033 -0.3556023679804843 -0.5524688237797997 -0.7492726196610626 0.5374221069266036 -0.4525855025851604 -0.7009956160627708 -0.8857403455088775 0.5977985767908598 -0.5000610456251751 -0.3509057716450996 -0.5072891846071337 -0.49812823460663513 -0.9428585956972042 0.35561437608333946 -0.9950533477791768 -0.6111864355525165 -0.5166737859608932 0.2861421512244229 0.8671124182535064 -0.5114214248839413 -0.9210690486969797 0.17109313755652011 0.38421555091319637 -0.7658742711659017 0.9897124415306153 0.7808509338945115 0.1641269478144909 0.014096693290553297 0.21654187801971703 -0.11753900468503109 -0.27759941649287145 0.25240543574774454 0.1418419733671945 0.7854283410023788 -0.7913603511868204 -0.5378729459434834 -0.456187579798671 -0.9291881713116856 0.019474515746912724 0.3908418203001458 0.6359786753141046 0.7058889443248002 0.993678424996113 -0.060649496449489027 -0.2740277186496203 0.9919385179065165 -0.972519659450523 -0.22837928802570917 0.012563552264440947 -0.4501614619506604 -0.12056657970884821 -0.13917115743444586 -0.8312307481193171 0.2129912166493333 -0.9391565505494841 -0.8593473576193393 -0.43680138124562085 0.3575568581830355 0.22067846836379457 0.2467268836406329 0.9381071493750761 -0.7611823071131645 -0.6798306175377145 -0.13271789336795314 -0.05800907305955949 0.41283727339587317 0.5067296493663933 -0.9276535469906879 0.02893281919198043 0.923362119560134 -0.19633553491456968 -0.3498684076267331 0.12414240704741064 0.38216227890709287 -0.8281569641904958 0.18690839553884064 +110 110 4.697083092024747 5.752564309156054 5.89033928357771 5.068811667176188 5.770900109524693 4.525440531871026 3.9802705797288445 3.8326322574958906 4.41171412828219 4.265711246483706 3.527781745932095 4.378541057082904 6.2140107768551776 3.851532670348817 4.0318017950595095 5.378341207632354 4.99999850576958 5.81907621118868 4.427391986664363 4.838983949875393 4.146337788910404 4.186343110095263 5.11598924461088 4.300336179474076 4.493437720277149 4.646257188881484 4.466642139833625 5.155924302740012 4.012673834177603 5.374472261672765 3.8550304718027246 6.059324686960355 5.893835178323068 3.759269131638162 4.597866536955927 4.103419352546217 4.938866857738203 6.504204967008702 5.431235359351485 5.0063474130861 5.033538665980666 3.5853414768588863 4.303336381138765 4.50441729749743 5.394618934746687 3.453578396361369 4.632407312663158 4.716951857909899 2.8130235951478646 3.170778711544468 3.457932124630459 3.5961363614390165 4.813484072446503 3.793825293036547 5.803686837590893 3.968475193962467 4.979572444421078 5.760485772148979 3.876316945669701 4.599145453418795 3.8716014815407607 3.748356563539322 5.405763165673838 3.4634244994824854 4.011053054761216 4.601436401224747 4.874334348791633 3.6751962235212976 3.0187406038318096 6.245572746212192 4.1009151702953615 2.9976402289531303 4.854248075300234 3.3198246258016946 5.291681571495627 4.1965566708528526 4.509919805060335 3.591479737511162 4.201119737833822 4.426660632093448 4.419009580066463 4.966572412904176 4.34019441911258 4.263230604039765 4.183765073903518 3.237701026411699 3.8941800611582447 6.038186230443873 4.938279944934152 4.54999246601076 3.0949396562260776 5.8232936855016915 3.5561894521064623 3.4100852981003524 5.3225976552364465 4.251744509058282 +110 111 -0.5521619592320175 -0.7225337893300174 -0.8241859768556796 -0.6865485737186341 0.4941728502665754 -0.1415884509645995 -0.3764025446839552 -0.37588264629288304 -0.6906914774367292 -0.12200622408406625 0.28809305829330256 -0.39697581338923604 0.5628834472753041 0.4057094812165831 0.7282419661329598 -0.8172852791805159 -0.8142378966241044 -0.6910221075111194 0.2598487032463803 -0.5799953581100654 0.001845330476464735 -0.39889983149474006 0.04377797842397646 0.6407254321016012 0.5689362058766436 -0.6993678333382085 0.7000315585465899 -0.10566311185683097 0.9210887975977309 -0.535704582874958 0.5419112549462526 0.8142035870790527 0.9436107035803909 -0.29486017984577395 0.21814130903456186 -0.4225883659064593 -0.5804216893286307 0.6230391520476499 0.7731055261832875 -0.06341614598592127 -0.6263423001211978 -0.16657682150953135 0.27245178491918076 -0.49016148420736916 0.9442016724830748 -0.8080138066988123 0.3658353312708489 -0.8133878278396669 -0.11893086452091883 -0.2989130299221241 0.07270372737851516 -0.27672154024070217 -0.9781436776100432 -0.19359448753946595 -0.9664024771818629 0.8558638355327319 0.5116431586266652 0.4036529029272753 -0.8355181750203731 -0.27177780945597374 0.38435905641490886 0.5464471111425924 -0.6111060652131732 0.08201708476835678 -0.13104313021095826 0.8105734547227206 -0.7687525642344273 0.7571975980251742 -0.2906637348231478 0.912719418868069 -0.507128681594009 0.18136256723981492 0.062124676793534395 0.26755691687202376 -0.4134484276910311 0.16066583586172878 0.4747182692860674 0.06147576304958591 0.45539825632515596 -0.49826003592053203 0.07490299504465914 -0.1470024750091894 -0.4616880307060216 0.47109142807031756 0.523827524020605 0.06526242861841425 0.0410281634965064 -0.835095976831687 -0.9753539027661136 -0.21764747044270116 0.268082258229281 -0.1072374869552597 0.4583316602706957 0.18053240627285305 -0.9695012134187879 0.18471876244569962 +110 129 -0.9710225999945112 -0.9756667264827719 0.2698159044934292 0.5427585327978963 0.7865714721717685 -0.9193470526954173 0.10741644852185162 0.9404767432427155 0.46170184678563353 0.5029013397870343 -0.5043991624176922 -0.6343894156592018 0.859458218699815 -0.19919735660451487 -0.41108012881607614 -0.6584152378247439 0.7239545853534197 -0.7479133749148212 0.20919715617225454 0.7275415425523399 0.40079219871839067 0.3733389314995368 0.49525841512480895 0.3702130748323036 0.773238488609981 0.49622306138291616 -0.30726163994078726 0.8014825691294725 -0.2886881918208857 0.8321575981609322 0.3228790835008519 -0.929529898589766 -0.8756614512201653 -0.6811842709696074 -0.13286364762801273 -0.6017521751199286 0.21171658018863626 -0.9524702344649676 0.32030955472344314 0.5610719335323384 0.16141282449262828 0.7838108293986863 -0.4733058465474824 -0.11934852562006526 -0.9210438868865669 0.3987872365870795 0.23614148610553465 0.04852375128958797 0.29249677840281807 0.01657416406372092 -0.0239254688514996 -0.7578507219545065 -0.6053298227599593 0.615110541464728 0.8440339380037682 -0.3568161734982238 0.24682960466448423 0.7958938473845238 -0.5186751214097325 -0.38053054132211006 -0.19738568317611715 0.20701609876812865 -0.8552514791019132 0.5017079199906394 0.7534988641931311 0.1854842438067441 0.1692851296860285 0.019799283523681765 -0.9461167861305639 0.34551488581531675 0.6233425557918852 0.4019704435537299 -0.5262032290884793 -0.15371274030370352 0.16947496073607726 -0.016386403053779475 -0.400902888105211 -0.5987099652533467 0.9620144326150775 0.711214229547936 0.42870137193428137 0.751948412842417 -0.2535016654198068 -0.3635551733663638 -0.32477112264245855 -0.7565984100674266 0.3489078717605074 0.6571630656669116 -0.6752722113719924 -0.8311045929352889 -0.749289752000557 0.9455857446084046 0.973081260907311 0.9150010259023023 -0.5231596680114643 0.44912450170065377 +110 130 -0.8633395834958 0.9646980735130335 0.7089936145822153 0.25780221274734205 -0.9415940160220742 0.21634631595420295 -0.4264573459883765 0.38263413056360496 0.47772527561273814 -0.5534601514452617 -0.8806442198445728 0.5465322037834803 -0.7758416571793498 -0.6846266252598159 0.23207869608807896 -0.37045689005936366 0.4131623316572175 0.47874883771926346 0.4460757881794679 0.38179570337001145 0.34609300561887846 0.025705041513603533 0.9142512407144996 0.9730610064936955 0.23706705808812645 0.7964106095964187 -0.046635285099692725 0.9611464191937333 -0.3799507419824153 0.9836984018814614 -0.860253503950168 0.6220785170348531 0.6889342174695907 0.5936009448512427 0.5701361435053534 -0.8023823968211261 -0.5194093161458966 -0.8637027317205441 0.2278131561330179 0.8693692535334245 0.26622259801149695 0.6624939021730145 0.6954043951922926 -0.30404631365923707 -0.28070538069492423 -0.7035534068213007 -0.3683834602497731 -0.7150956680948164 -0.5385020061313932 0.3959083569690145 -0.813643118238758 -0.769378559065492 0.6197387168370616 0.41036631058124984 0.07566015112413083 0.45249681721702983 -0.6626837862908939 -0.2884874180202379 -0.414704154332983 0.431436895051873 0.7208118268752031 0.23004663653580293 0.3429603906864065 -0.17268439426977755 0.27409262494241116 -0.06909780222821293 -0.33973996454055255 0.3062108584805794 -0.19786309625883258 0.9629177290534636 -0.7497934823104584 -0.9363678999981053 0.894232358826534 -0.63106746186709 0.9358692727833682 0.31405916400460576 0.6505046239312235 -0.7363326701888291 -0.4777433486875575 -0.41634656236738543 -0.47161051179659585 -0.9815852793180317 -0.5932947520660239 -0.31831551977166384 0.5982122190255306 -0.2784464379591627 -0.5077400461315689 0.30144442077113265 -0.13473826589354077 0.2675055581366381 -0.7613833882039267 -0.8036317428716899 -0.06775624776841482 -0.08438060547894022 0.6285917968539114 0.041165936296919226 +110 131 0.9192417850547194 0.8747377988894767 -0.5139505665796398 -0.8824987599078327 0.9920349283717473 0.5051747255524293 -0.4653003577742172 -0.6423736564079892 -0.329756425859814 -0.17201192355217976 0.25850312428694777 0.4250806540046952 0.6413637332439341 0.09001518769197059 0.5181750116706829 -0.9460375208023437 -0.7276125871438921 -0.9226257009104613 0.8763712150680725 -0.09480856538457161 0.6552004714115007 -0.11347499239241632 0.48805963922085094 0.005323093181532013 -0.916013695589188 -0.639582535201473 0.20962199681933424 -0.6905348877894701 -0.28411146295108014 -0.4858257568524358 -0.5743498766999697 0.7445734850224812 0.6560743997190139 0.38162610609605396 -0.9978023756224723 -0.37739759902730197 0.7182046111491331 -0.8696685852172144 0.5742679042735128 0.9049555478034552 -0.9887922632346631 -0.8626571935864489 0.6489185633106245 -0.6322262462563872 0.3706715381307488 -0.11175817495112272 -0.6235848841257048 0.9033814038103529 -0.11279614512078595 0.12900358625344377 -0.5726296483058966 -0.24562078656967357 -0.4829845454025601 0.025020090561090447 0.5551628166750202 0.5088500859951024 0.6490450005944337 0.7307950175344182 0.8750560489786079 -0.9008718492180756 -0.44738513694861703 0.7523595517383439 -0.3456248243550992 -0.7580020162100274 -0.8790997633771969 -0.5296719667413747 -0.5972480638874522 -0.6084281988980487 -0.5918201831591767 -0.7228247737912978 0.28958715482424524 -0.1914297027113374 -0.817967049354992 0.3267391896705536 -0.7378531952954586 -0.38894528383287685 -0.5886177794723544 -0.021816478824193686 -0.024443947515392805 0.46163418343097096 -0.28175371348972056 -0.09080565704507126 0.8437783283764799 0.6123398626036651 -0.8013096017191608 0.2550617019863124 -0.2918124310784269 -0.9943415220410576 0.04359281913344892 0.05921385425572234 0.1605552214712609 -0.8110991467836575 0.5144585941450164 0.07089562159852658 -0.4746826549930374 -0.6885623976176021 +111 90 -0.46214738470731054 0.5877301207533627 0.47631190630064757 -0.8190773349898315 -0.9233059313483827 0.3806113505350994 -0.3251321624828232 0.7256566282199426 -0.16553870770859946 0.6596602846795414 0.4004406994009895 0.564661504007951 -0.3647477256697065 -0.29629738934893113 -0.041345711889527736 0.5666634229287402 -0.3884267815294318 -0.6139252978566043 0.2362156426289428 -0.4264492509960318 0.5163273276998983 0.4488591095129335 0.7244219246106689 -0.6332258042030219 0.09028044473821217 0.29415569523039875 0.7086088224544862 0.5752733737616516 0.04022535515109982 0.7476474367849517 -0.03731655953846813 0.20111782108004905 0.9427325553956913 -0.4110682316017129 0.07369757109325081 -0.17309060502927465 -0.6400868379016638 -0.1451143878683312 -0.36708775287125994 -0.054153408379886026 0.8996704659560202 0.8705717517647307 -0.6142844670145091 0.33404886811155166 -0.7943232270506977 0.36291755540261206 -0.8214389310711747 -0.0405725697515662 0.8112281951010683 0.28061234670504764 0.984972611261079 -0.6849135425662645 0.9589028215066273 0.43337901087481456 -0.6658985736244183 0.16474451334669138 -0.21204095947352242 -0.8435254310633182 0.04484484674097233 -0.09822519768741533 -0.1881759715393041 -0.8275235043145126 -0.6717440627545725 -0.14997534219950714 0.0586456295863389 -0.5845638865624696 -0.47898837368044633 0.3029784476770976 -0.4061313809991296 0.7708233024432964 0.6861632212733346 0.16763133577400335 -0.9521747573209924 -0.6512249564262844 0.20565942191365183 -0.834460987893511 -0.15386460057330953 -0.8337707530939789 0.9134591643909697 -0.44721382733624004 -0.7509853461297089 -0.7703008870231918 -0.6395941557374543 0.3997682382500569 0.5101021370539713 -0.15452151604613462 -0.9225523433992924 -0.8881870056660557 -0.22615829474631988 0.29113715221412795 -0.9940246869967417 -0.5331574399525485 0.795370437719636 0.6144053525989699 0.42375836087757124 0.567975143447327 +111 91 0.1051626226896516 0.7927756751141339 0.6266164612280725 0.16876170755593844 0.2988612097587171 0.5816653843569393 -0.147401377992469 0.1376494726267068 0.33230093055974175 0.8599998179823711 0.629629722951708 -0.43882382218134586 0.15718566336228212 0.9032903180416694 -0.3614173203479072 0.9553412094699754 -0.9779756214831758 -0.29752140207912303 0.1331984520267806 0.6803524757913257 -0.7530768206440404 0.40160861293728756 -0.9724461056863674 -0.41058278652209435 0.9647338706584885 0.14938788339062148 0.237631233576012 0.5559126380540911 -0.5134559181847729 -0.4714431701541164 0.958942214950816 -0.6063178393566893 -0.7223477453079703 0.6613999620548294 -0.5903848999811454 -0.06311723469736985 0.4893659494499971 -0.943800981761203 -0.6842127620869602 -0.4743876295118503 -0.5173511421171328 -0.2048862276131087 -0.44685482171317936 0.11254842992273839 0.3673373418566559 0.18334621981257349 0.8412173754752028 -0.822509797432206 -0.061915440925019105 -0.04266699833217458 0.8078040686360948 -0.19817401689074665 -0.4878184427073935 -0.30646066504174274 0.35943151075099644 -0.9786816587909009 -0.005447188945833847 -0.5888184404439452 0.6370387702664757 -0.46113694760044655 0.09611398150341244 -0.5909680885008661 0.017308114366726635 0.14273988734439103 0.27987485463268236 0.7008896909600995 0.8144816501032204 -0.89403643541659 0.12492535487877077 0.12347526547025112 0.6219022015833446 -0.8178542872767944 0.6821039209694095 -0.8837771037613167 -0.5317843763175518 -0.29185925863498197 0.010351972475367788 -0.9062499128295769 -0.47539452563171736 0.6549851611409883 0.805337825826046 -0.056697969344623456 -0.7135877904809464 -0.5633800510972842 0.2262481488451451 -0.5528200853814633 -0.816160598894031 -0.23466402181275559 0.7445973642241381 -0.8757717140171319 -0.1252619167299729 0.12879050827121263 -0.9690171420222509 0.8004634430322066 0.15437940247438808 -0.37130636166175623 +111 92 0.2812901366177021 -0.5520333316854356 0.3980509241818475 0.9187574259954678 -0.9070543132806479 -0.5459900790362919 -0.13521146813621088 -0.9440763313510703 -0.5855426180909373 -0.5106223432159656 -0.8997572973767569 -0.49547935412592103 -0.8742544441333999 0.33962764616013996 -0.8157769315837697 -0.2507659631342789 -0.07774805403679852 -0.4364769492779865 0.8197776939160253 -0.9624532421178373 -0.060816910434942084 0.6746371454055473 -0.4114437060015985 -0.5088996148367344 -0.8717790472634375 0.9949383644366097 -0.45259312124264195 0.7867665906226242 0.07656287627204361 0.027478344532318344 -0.6526218778810398 0.5494779465187729 0.5252068487708408 0.3703999354411398 0.7673524851480162 -0.37023659698905353 0.24926381111467788 0.17736052539377312 0.05010783441993105 0.03532466403293366 -0.3403463496655188 -0.6179058622242715 0.7038560714499424 0.18482211317302233 0.30370505111390234 -0.06262692922972057 0.529872189255242 -0.9515523464998517 -0.09542236429414919 -0.9861509395266654 -0.21246390264846826 0.00897784183218131 -0.7974427740275316 0.18298245785987644 0.03960378495230921 -0.44769531776191007 0.5012749498045113 0.13999722842435003 -0.14315879726355019 -0.603942128441695 0.17122593215832693 0.09037876568905179 0.7796450890209459 -0.26908585527234496 -0.32237604185966884 0.5921342624948298 0.7759555590718541 0.44756533510399965 -0.47244935042985214 0.3443399045964435 -0.3839924980698697 0.7121222778237417 -0.1651004148049473 0.10574974099389056 0.7776508030227289 0.19727146506301652 0.8054632859056501 -0.12678719947025918 0.2208105094520918 0.9302664812023878 0.9682192787807753 -0.6219047263373259 -0.37577405862415314 0.6897295122336538 -0.41224469670072295 -0.8701396974545519 0.7832570825858647 0.012788787296527993 0.6152597133934317 0.45879363383423777 -0.5470748517349415 -0.5373165499870389 -0.39345370460976237 0.885505031518232 -0.7478125756933525 -0.7165770141482597 +111 110 -0.5521619592320175 -0.7225337893300174 -0.8241859768556796 -0.6865485737186341 0.4941728502665754 -0.1415884509645995 -0.3764025446839552 -0.37588264629288304 -0.6906914774367292 -0.12200622408406625 0.28809305829330256 -0.39697581338923604 0.5628834472753041 0.4057094812165831 0.7282419661329598 -0.8172852791805159 -0.8142378966241044 -0.6910221075111194 0.2598487032463803 -0.5799953581100654 0.001845330476464735 -0.39889983149474006 0.04377797842397646 0.6407254321016012 0.5689362058766436 -0.6993678333382085 0.7000315585465899 -0.10566311185683097 0.9210887975977309 -0.535704582874958 0.5419112549462526 0.8142035870790527 0.9436107035803909 -0.29486017984577395 0.21814130903456186 -0.4225883659064593 -0.5804216893286307 0.6230391520476499 0.7731055261832875 -0.06341614598592127 -0.6263423001211978 -0.16657682150953135 0.27245178491918076 -0.49016148420736916 0.9442016724830748 -0.8080138066988123 0.3658353312708489 -0.8133878278396669 -0.11893086452091883 -0.2989130299221241 0.07270372737851516 -0.27672154024070217 -0.9781436776100432 -0.19359448753946595 -0.9664024771818629 0.8558638355327319 0.5116431586266652 0.4036529029272753 -0.8355181750203731 -0.27177780945597374 0.38435905641490886 0.5464471111425924 -0.6111060652131732 0.08201708476835678 -0.13104313021095826 0.8105734547227206 -0.7687525642344273 0.7571975980251742 -0.2906637348231478 0.912719418868069 -0.507128681594009 0.18136256723981492 0.062124676793534395 0.26755691687202376 -0.4134484276910311 0.16066583586172878 0.4747182692860674 0.06147576304958591 0.45539825632515596 -0.49826003592053203 0.07490299504465914 -0.1470024750091894 -0.4616880307060216 0.47109142807031756 0.523827524020605 0.06526242861841425 0.0410281634965064 -0.835095976831687 -0.9753539027661136 -0.21764747044270116 0.268082258229281 -0.1072374869552597 0.4583316602706957 0.18053240627285305 -0.9695012134187879 0.18471876244569962 +111 111 5.031687209053137 5.408312713662452 4.281908588811692 3.8124875674981262 5.012355742260764 4.21360242866046 3.7546759360153055 3.6978847676437585 3.7859619243926415 4.152498862765848 5.573122114883758 3.7462998516251043 4.567469995191898 4.5634367101174425 4.4297137627515655 4.863190819482657 4.830401606377668 4.577157541452171 3.680412820261969 5.080162797441598 3.6012143949042814 4.59136093614177 4.251740618892283 5.516305614863492 6.149113954603827 3.5569125088350506 4.060465608424843 4.049963436909318 4.073103967281073 5.174645471627963 4.345041471040833 3.5130158056371767 6.558040596329482 3.9151305838644594 3.3853278053527873 4.618368051190727 3.1954066648925012 5.288248545727969 4.562326105554398 3.4975827144341065 5.8486238249921625 4.9692629355851325 5.248753175003528 3.8294168752770124 4.812874580733169 4.468737264029047 4.548361385433971 5.7022640179636355 2.815654150593792 2.7898253994558186 3.8579126689461596 2.168272873160583 4.837912684293132 3.29494955215183 5.2439382042191 4.645592524358808 3.8132685633288914 4.5687404658017865 4.024991728641067 4.459456598939946 1.878187248345673 4.490921742763988 5.79225561122482 3.3894594103116673 3.5201171586804185 5.348090806488491 5.194512773968805 5.158397289916256 3.761597678153156 3.9845236206741204 4.05942798400392 3.1649788386300117 2.414720395343638 4.516022229282905 4.350970359358556 3.368307086056036 4.095613530642502 4.306817644540368 3.785717443055404 5.22248884938728 4.932900098613374 4.5572636380445966 4.0266414672579875 3.9279695442959106 3.630856793146073 3.9709679524059247 5.9253857726905075 5.155867804284093 4.523427348783235 5.116408191256464 3.836869063710015 4.033738905030989 4.056758513105283 4.16969321074527 5.483776917260887 4.979815184973344 +111 112 -0.8603747710235459 0.0662412459842574 0.6919357712213632 -0.1390081401301293 0.0362608543772589 -0.5217141672340473 -0.4409210140747408 -0.4246566920149084 -0.17071015649845545 0.06989634844089432 0.6445355380531508 -0.037077492534108414 -0.07988020911395499 0.7453964787410483 -0.1258233696656299 -0.414459415067856 -0.4204835451264193 0.08538646535995875 -0.3144814527104549 0.26851767832778295 0.13962377925892877 0.8475486957819536 0.08136981563135692 -0.8278253844499674 0.4767223821311286 -0.1165300364179589 -0.05665773010766495 0.5465702847464973 -0.34633140333588397 -0.3651976490367608 -0.23325228924702035 -0.17850353004503372 0.49691200969714244 0.1787886248301933 -0.034625172315304154 -0.8852598918245069 0.1330326129128756 -0.9973643517306678 0.7343718510405086 0.03944908067145181 0.9005191843667826 -0.43621379958962136 0.5495230921120815 0.5371353076352372 0.3689123840830806 0.31445925992242096 -0.7223509028079909 0.8945835687824459 0.2896211686670711 -0.1915526286151854 -0.497311035981737 0.557118915621676 0.27979444758978955 0.1618251093457974 0.8522766912023072 -0.7493317154914916 -0.8572805910958965 -0.709807299365208 -0.005152190933654044 0.877698569621723 0.0028718343504430255 -0.01518030906529444 -0.6211355677345047 0.8746439092348808 -0.9986784003531151 0.798489168318772 -0.8617830762261574 -0.32654232292086505 0.502331154145965 0.33670295859346755 -0.7028334152858478 -0.14061609768084948 0.029043554738453325 0.387465369686393 0.07485133521451881 0.09443667797982669 0.10287052317696754 0.06487333024922437 -0.34313509202917203 0.2728744771421814 -0.5811462381078216 -0.7629405464508714 -0.33337295681446366 -0.1549994066103697 0.10926465159058818 0.45663863012855677 0.8398747108662163 -0.29676207401893073 -0.194025868655606 0.6843983730276151 0.8896780276134642 0.9595266226298664 -0.6706862265719673 0.4769830402191879 0.6994523769727996 0.3533041500458354 +111 130 0.9000772810797075 0.9475291285809821 0.12869601341128756 -0.47865976577866487 -0.6836501276019904 -0.4460376515518374 0.2361084148126522 -0.4262347241745099 0.4967221319508526 0.5012222939250119 -0.8135493235710471 -0.8094459295517169 0.2898521422676543 0.0911825196195204 -0.8677025377476952 0.564299089146086 0.7083368970821651 0.5099628768519833 -0.7097937420181757 -0.0009306329003440084 0.3500269869455348 0.7580570461259626 -0.05833568126963229 0.6776642884646404 0.9457003528267038 -0.08978791487594551 -0.932237093891845 -0.012574763571725045 -0.45816641983869744 0.8479695084467149 0.02696121930366724 -0.14921839739553722 0.9504620869698519 -0.9910940638309582 -0.6544713179326496 0.7891835084404579 0.41616234829036336 0.4178390007177417 -0.39765197321411017 0.7154200057638036 0.7717634193221186 -0.32965316454153704 0.7813761075431906 -0.8852642992033832 -0.6774542418529645 -0.368076762968391 -0.3589335365692812 0.5582633021839347 0.2893992868940327 -0.6433136343795147 -0.15554703207862453 -0.10344835777402972 0.09373154320170962 -0.35081562922507503 0.7751647941278852 -0.03948676955016195 -0.38501390574684624 0.5624984999582359 0.46939962320930073 -0.7066220705648254 0.2541668431252939 -0.6770320246851491 -0.9021459724060878 0.5210973857313959 0.6349303650786582 -0.10295265762143302 0.9696094646407682 0.5785981632942474 0.13925733994080547 -0.3257343885553823 0.48410235773144805 0.2816445877053706 -0.19785529917379718 0.3511248141815031 -0.8637530652942094 -0.7988428992772414 0.761490552487037 -0.9238711040588856 -0.3788308290931488 -0.07816096732546551 0.6665795192137316 0.36966172013270393 -0.08413835783567025 0.3666696753075749 -0.1637650266819619 0.013529588404386894 0.4492437851900868 0.7277813639278052 -0.5177683858036475 -0.9742744471073141 0.5684960713551555 -0.20471175687442922 0.13949507528790095 -0.6051648477526657 0.6987373986625136 0.977820853717551 +111 131 -0.8887576279199199 -0.526923412709621 0.2271290557299146 -0.311025873237605 0.22154783595869065 -0.05813498377763415 0.9676947603617192 0.1696884811643815 -0.7256064628689674 -0.5212091722308236 0.2723869770495464 -0.45051266118363587 -0.9273134911011187 -0.4120792910075357 -0.8734937871820967 0.5387211461994765 -0.6041632075270336 0.8294142379641019 -0.2040797870822939 0.34163794163904937 0.862658276316971 0.38370105706547 0.9457204261513878 0.7896461613126935 0.6909436201180907 -0.4614962781043144 -0.06209216261091832 0.19473196934906678 -0.9364442073337931 -0.36713407534111875 0.46536743784151025 0.36582047549487773 0.8596064455421151 0.2748298153154487 0.6812043358065754 0.6846121979132624 0.021787803206165135 -0.6624948831079189 -0.24177414894313531 -0.22804919022278103 -0.7331569557478057 -0.907638909384114 -0.8021550541921048 -0.19333646165789165 -0.19094186801869295 -0.5436351935323533 -0.20880591558371453 -0.27794014482500007 0.1831372586634874 -0.2980960484626882 -0.5408746790635399 0.047594032983783396 -0.11273454625366908 0.7336873421591765 -0.5782382553976955 0.4157516171994251 -0.0970385427917464 -0.3581123314943253 0.9037250082261667 0.1582770295922058 -0.03421796053678694 0.756109967630606 0.8601972130446738 0.1969081564099422 -0.2857421080532181 0.9232964630690592 0.013003477866976976 0.8989336545311986 0.19668508985610234 0.24610425147914294 -0.10402388205108126 0.2633425468004271 0.15536173973032352 -0.041014828756234634 0.4588062867477465 0.3645971654467446 0.6432227947304332 -0.5108198087020064 -0.12477857991247521 -0.7998843574721115 -0.5624023267246121 0.4786020066099659 -0.3960420137606391 -0.25606416803026244 -0.4606711132170991 0.7515684019566786 -0.6610362039483677 0.5784427593629171 0.4952781980132015 0.6840989538380917 0.29835071348257025 0.14452576740691825 0.1375881849060705 0.4946237400184177 0.5695533050455415 -0.37190773697493484 +111 132 -0.9446431609008061 0.699925357032972 0.7463096793056443 0.0318229116564841 0.7887141003666576 0.6676198489326315 -0.9159343059988365 0.23964432857444096 -0.06552847119272132 0.5098600483691174 0.9575154521971727 0.24602226570387464 0.5963380693058906 -0.5262576282929692 -0.3240018342682107 0.2720511657950162 0.6101360989922888 0.8065788176212407 0.8598050965369994 0.8480518869743239 0.4370722810999217 -0.2671041120270916 -0.5521479429611393 0.652907531678264 0.6784269574065118 0.7111722109688148 -0.14022457214708428 0.4973587192264921 0.6694875360883403 -0.9723151298876878 -0.8299697488902713 0.49799427068478397 0.292645483403875 -0.027941185964351467 -0.22428040264085136 -0.7364238384814841 -0.0344724412629438 0.857934753276421 0.6890311135197031 -0.9381604557800798 0.4955376671608176 0.5420300086040231 -0.32601381895052506 0.887934495839509 0.22848260147077815 -0.8568771368077859 -0.03735649262856122 0.42041540663036114 -0.209804905731092 -0.005845771798728361 -0.12400296661342836 -0.15033142815932643 0.22621033691530235 0.013904194601952247 -0.9856837826147828 0.38906716808179587 -0.3761674050545021 0.4581911435338315 -0.756026794049528 0.4390090966553917 -0.28899260219178546 -0.1770417428762443 -0.9564717229129205 -0.5478804716913701 -0.09938043183400636 0.5199286084740118 0.13256273179533173 -0.7504750562511846 -0.9519111117866002 -0.905274373116548 -0.36814427312740583 0.34455092811494525 -0.11135828392439096 0.91790453337839 -0.8673867510825495 0.5874759205616777 0.25228721437392854 -0.38218545593429276 0.587595415858895 -0.597451297772355 0.05547056984236565 -0.9545124287213274 0.41273570806917537 -0.46446919414824306 -0.5363877969483888 -0.9757790844057006 0.9844804149114892 -0.8925051767977008 0.09619740423608958 0.6265180075075658 -0.13459307965313738 -0.9899066642000758 -0.23955869407051633 0.02691775970077548 0.5872410070063414 0.8759230097642954 +112 91 0.16394035379639682 -0.77844089698757 0.26128080585394575 -0.42267730591869523 0.793267887057205 -0.7885211525426219 0.5004617400759959 0.4818528461799061 0.2786826190660461 0.5278089028400641 -0.8048039516159324 -0.18560183619555448 0.47319192206826255 -0.7553939454126495 -0.8565452453316751 0.23432951547104963 0.8366884403391448 0.1469618847302394 -0.833500222172912 -0.9615552291688134 0.3317788356463707 -0.7705625712290123 0.7935230907112618 -0.18176167499325713 0.27151417003006806 -0.5520868447765854 0.44103946752381695 -0.3684102132944611 -0.25890222962283116 0.6085808489685571 0.46465075616120943 0.5774681104157142 0.5263773743051388 0.501145027049757 0.004038112941057381 0.4829100692043611 0.41650478922830536 -0.5194119028690538 0.6362102394874198 0.6266603205814196 -0.21780448528556628 -0.49440245288855245 0.22366385185305004 0.7184395912943782 -0.7991875537283697 -0.9864894976242686 -0.04638085241812062 -0.2707837049790842 -0.2215874418194883 -0.027395889443300625 0.9127269549518267 0.17198134832244416 0.49160425304292077 0.6785067656729464 -0.13306779539616054 0.7456120634325809 -0.13485584159872976 -0.2692799160566117 -0.919721168878255 -0.32479944784056936 0.3168332229722941 0.5371708607678234 -0.481082021332252 -0.09747969334794582 0.46119539523243835 -0.4009191388449016 -0.9032402462001548 -0.7128450413457783 -0.8359600644330825 0.36145338773912594 -0.0011934933861492691 -0.43257104535034907 0.6366127734763833 -0.08200644089193787 -0.7722044222432451 0.15523013477867686 0.9688453031631767 -0.01749259878495657 -0.8730281889851743 0.7607532543088655 0.9491105851071353 0.5220853415360176 -0.4545336444593677 0.7747590725367131 -0.3623245419315755 -0.3357743263947548 0.43839192206952116 -0.3989497601886385 0.28512378655190407 0.04540823375899117 0.2796013408142304 -0.5969551761858758 0.30478955066552227 -0.08538459550168409 0.709389934720609 -0.022945559020289163 +112 92 -0.6535583384829979 -0.7636685231576203 -0.19632799709728088 0.8796176808057516 -0.7004367125494262 -0.7793542989041309 -0.5509297832505711 0.6660177940676875 0.8706348411602025 0.2235262408862515 -0.8946766844351794 -0.8839011151962881 0.16354636228071695 0.9250283956295406 0.5950810780603022 -0.2938735050017445 0.40769377164109 0.7659931619146232 0.6551239474962336 0.5417695372858402 -0.10026350612712309 -0.5510180728106757 0.6116528123153528 0.4847633065655428 0.9204540034166553 -0.5052044758749568 0.7859926058162219 0.35916864476450927 0.019076342520370826 0.5167796036773737 0.6947640220693088 -0.8899915122709983 -0.8641579908726944 0.5240372977892591 -0.009603163301752149 0.3300905021582816 -0.4346434418593328 -0.7160890860859959 -0.9456560910293093 0.10662936141783552 -0.29026868362027414 0.7708471393528635 0.4238544780739708 -0.5336428253405221 0.6695296744862436 -0.5476479839553516 -0.4743589080441186 -0.953721938904605 -0.7899738780782828 -0.6248895109368071 -0.26251718178505756 -0.06936656135424646 -0.8384982018333895 -0.7663238056864157 0.8728837912985303 0.7382773856625158 -0.019226082254256704 -0.36162694341580637 -0.906348858479312 0.9600686351146741 0.19175711638882498 0.6441440378399381 0.3496186799629597 0.4277054120010553 -0.8698632738451832 -0.8512439810870565 -0.40166559965414184 0.10139371874014169 -0.36758063256093365 0.8714430946808358 0.46549743076525707 0.3275822721191586 -0.9547324174215908 -0.6768259696492294 0.09699085606834545 -0.18480407172095736 -0.43215675100771733 0.6090255917540928 -0.8938578275549185 0.19258059089319257 0.41320751375102405 -0.3037149524784255 -0.517998574169801 -0.2940762819085885 0.6127506257679205 0.9625040880799423 0.5848485116293745 -0.4156215662585141 0.5605472519490153 -0.012083050540997231 0.43938227169095034 0.7486865933430662 -0.21694422445854333 0.7515177482078517 0.6754722236286237 0.11772395702374405 +112 93 0.5025890459343085 -0.3280353485060796 -0.8522479296897671 0.9272307078411866 0.14326759612810935 -0.7415918945409876 -0.6344455546504197 -0.09467083259517373 0.9593294920505051 -0.5420386633051519 0.45401854404291253 0.5816704718278771 0.721516848313823 0.27304289726770037 0.391474494224175 -0.1866927953037525 0.5014757976348352 -0.5473364668907372 0.16342758820384806 0.22412967477631907 0.2600474077580801 -0.5523031172584514 0.4145531243354428 0.1684955373286947 0.6368399384064212 0.30784912278959675 0.12999646894926475 0.5479249721516031 -0.374595629179858 -0.6948825395054719 0.038962002752265246 -0.7897355301651108 0.25963323384200887 0.8217130137932149 0.8791584254171323 -0.06990592027871378 -0.5178396262111999 -0.3815651877029813 0.9505493398266207 -0.5589893265917947 -0.7760841758456649 0.843976172856391 -0.10787939025104909 0.8295908567811583 -0.8440071220164937 -0.1090250831830537 0.725694127487813 -0.7345655354038074 -0.6888385444836969 -0.09655094670127307 0.31944061883439234 -0.7714123537611961 -0.8535861482359648 0.12553025873286505 0.46909435223991647 0.8582750630509957 0.8880076559807597 0.5800205514942667 0.9079443734548578 0.3152882187242496 -0.39689769419990073 0.08164780757260948 -0.6478186438630316 0.5496260833333453 -0.27795215128414674 0.1236129116653899 0.42504238137656647 -0.47055466457180084 -0.0992335357105052 -0.23657646960365364 0.9626801074306353 -0.006991263241182377 -0.4297733095266789 0.2360952288089435 -0.04023216322367418 0.8154079157666942 -0.9443500705271008 0.21798323385916296 -0.5469150707508912 0.26187493307232024 -0.37767775880802756 0.031697811098308826 -0.32818955773560843 -0.7101266268710402 -0.3132234407548917 -0.5692416091617469 0.09167807713117115 -0.5855275748946318 0.42031232272842756 0.8953016848719024 0.8363170480772704 -0.43787312373419396 -0.07069135023583639 -0.9395911572873012 0.9268600337854791 -0.8351265791920324 +112 111 -0.8603747710235459 0.0662412459842574 0.6919357712213632 -0.1390081401301293 0.0362608543772589 -0.5217141672340473 -0.4409210140747408 -0.4246566920149084 -0.17071015649845545 0.06989634844089432 0.6445355380531508 -0.037077492534108414 -0.07988020911395499 0.7453964787410483 -0.1258233696656299 -0.414459415067856 -0.4204835451264193 0.08538646535995875 -0.3144814527104549 0.26851767832778295 0.13962377925892877 0.8475486957819536 0.08136981563135692 -0.8278253844499674 0.4767223821311286 -0.1165300364179589 -0.05665773010766495 0.5465702847464973 -0.34633140333588397 -0.3651976490367608 -0.23325228924702035 -0.17850353004503372 0.49691200969714244 0.1787886248301933 -0.034625172315304154 -0.8852598918245069 0.1330326129128756 -0.9973643517306678 0.7343718510405086 0.03944908067145181 0.9005191843667826 -0.43621379958962136 0.5495230921120815 0.5371353076352372 0.3689123840830806 0.31445925992242096 -0.7223509028079909 0.8945835687824459 0.2896211686670711 -0.1915526286151854 -0.497311035981737 0.557118915621676 0.27979444758978955 0.1618251093457974 0.8522766912023072 -0.7493317154914916 -0.8572805910958965 -0.709807299365208 -0.005152190933654044 0.877698569621723 0.0028718343504430255 -0.01518030906529444 -0.6211355677345047 0.8746439092348808 -0.9986784003531151 0.798489168318772 -0.8617830762261574 -0.32654232292086505 0.502331154145965 0.33670295859346755 -0.7028334152858478 -0.14061609768084948 0.029043554738453325 0.387465369686393 0.07485133521451881 0.09443667797982669 0.10287052317696754 0.06487333024922437 -0.34313509202917203 0.2728744771421814 -0.5811462381078216 -0.7629405464508714 -0.33337295681446366 -0.1549994066103697 0.10926465159058818 0.45663863012855677 0.8398747108662163 -0.29676207401893073 -0.194025868655606 0.6843983730276151 0.8896780276134642 0.9595266226298664 -0.6706862265719673 0.4769830402191879 0.6994523769727996 0.3533041500458354 +112 112 5.986337023415321 4.114514781128518 5.246065242152923 4.006650715838399 4.993726028180173 6.31043559400035 4.359977248234227 3.2141521825266794 4.720362434539414 4.788413503334345 4.687496522386058 4.544118693231224 5.009923706021741 5.395572559632804 3.7902523574089217 2.6122991429880043 5.498027779322538 3.7776337627150287 4.011266584950369 4.488495419335776 3.9902957237876153 5.062096226049043 4.325126338807115 3.884234250049547 4.935390019230326 3.26355511165408 3.430794478166505 4.361373401041646 4.433951981198163 5.322313075564676 4.185107060104146 5.548841291359441 5.582686120003577 4.23209447224184 3.1382655830103197 5.303871907512569 5.291232501984101 5.445662123478343 5.3885826809267785 5.245268461147412 4.4818366246252515 4.8290819426007845 2.831381896603734 4.992034368227398 5.556853438457537 3.2468334443628373 3.745862939542919 4.172762780115372 3.8859828656213966 4.509244083598765 4.417973692579167 4.385616211408322 3.7802720394059675 3.8761246499085895 4.786128899147003 4.515127110024858 4.76497986850265 4.565906183008617 5.838973538155572 4.628588201435442 3.0299164737532918 3.6185295553050443 3.6664592582966034 3.8330406625900153 4.768060077380298 4.703360103960602 4.674104418911666 4.002334840209898 3.2682157493564565 4.177577953690276 5.520769658022809 3.22292813938353 4.964184964788817 5.041113321392064 2.993658596538097 3.0934822871259993 4.588193075201685 4.536362896551218 4.228024828119537 4.355089838596109 5.888272232418281 3.868162442627144 3.950304791608528 3.7497767260499075 4.235244115427407 5.579070572584719 4.757989514001639 5.534713390251937 4.397962431809534 3.6375639976917897 4.964734469389855 5.817996106131927 4.13199266603786 4.811786622895837 5.396274027542128 4.6166525440658654 +112 113 -0.9151358058319012 -0.2246540280306446 -0.8105641656373204 0.06606097093543783 0.4515826789930355 0.9754971401304804 -0.03985388024415859 -0.5591836283718503 0.7986050074616897 0.7981332931202096 -0.19605852352016084 -0.45453010059210563 0.592485987789926 0.13160649455362372 -0.6725481562115558 -0.3034025087024961 -0.8413833473363679 0.4224801549406898 -0.9212892000716566 -0.0036935947796143953 -0.6114806704023088 -0.11073207934081708 0.6114915658887452 0.5119126982831863 0.3589822689197615 0.12925232501043182 -0.2605063671189878 0.6036084369335482 0.826593980558002 -0.565045468249481 0.43826583509770023 0.7149858356288179 0.8103401029026887 -0.10316427476876266 0.10308711137878657 0.33334414671752444 0.9991978682464051 0.9922887911786546 -0.818868427545941 0.8617298368709387 -0.34496625026519045 0.5092972711202375 0.14031662282903246 0.5471054326303906 -0.8018227864695726 -0.010257347800342709 0.36953739558390186 0.37505508363387285 -0.45625184409736863 0.41680645908379144 -0.4244847230786686 0.057299815880092586 -0.6075003843086253 -0.3690052843061222 -0.5160557163066453 -0.263273908972661 0.8723140693001852 0.16991243754018304 -0.8579343356273501 0.045222832697281445 0.39843948401339246 0.3571271885684797 -0.30933753672496445 0.18497306461063157 0.27464085422112516 -0.11175464196547891 -0.28312653838639545 -0.30508885553134446 0.2345895691094444 0.7546145533161128 -0.05743010581942043 0.32727441702923943 -0.25394156435438076 0.9212070973170099 -0.5817058978127081 -0.4702406751219197 0.8700667560679518 0.7781073662086364 -0.11298317808102709 -0.40528796773621445 -0.8664566719972309 0.9261084569395184 -0.4396363596469359 -0.0020236109932674218 0.3881309748349333 -0.8004438032298218 -0.6989507997749207 0.9666036717241977 -0.6603639104946744 0.162326344103358 0.7139159922118463 0.0902499448836509 0.8472958285293524 0.12404455523413005 -0.718258769239748 -0.5836806794164386 +112 131 0.43695589647018873 -0.7452891239499906 -0.8491353507904116 0.0163192225849611 -0.880541021254837 -0.5867889233856298 -0.7897267596069659 0.4289808069882961 0.6355076589994311 0.5542058636597178 -0.31316722474344805 -0.8303224293788329 0.659159715552563 -0.2967723201704857 0.5782101789547456 0.04273132070837682 -0.5842515065136853 -0.1633098358011975 0.022727152675753093 0.7749037980731823 -0.30148560582910977 -0.7294890023857823 0.2507146039881536 0.4868451750708782 -0.6592714483175519 0.020169619806814643 -0.3888329321863635 0.3064370857174472 -0.5133273316020814 -0.472404515930827 0.8119623364931876 0.5835676268215029 -0.47527576768668545 -0.12817776095330458 -0.21670852687794473 0.8386610498576836 -0.6555539655254956 -0.2712481906160842 0.08096932821181801 -0.9484716920862863 -0.6845500041914245 -0.7487095647306934 -0.04069918506626524 0.8042671226848155 -0.9296547156761688 0.8092178884131545 -0.5805400737776827 -0.18456578368035848 -0.4314773211524823 -0.8967453185997014 0.8407432489373146 0.9477220107203792 -0.15376327775348164 0.32783074267400436 0.4083454806407125 -0.00998495387303655 -0.5089034942951014 0.542413757380374 -0.7428348480576761 0.2395497849724002 -0.31562933595805953 0.5343776931532376 -0.5666178197136496 -0.022411796615439572 0.48391725076069436 -0.4392477992354855 -0.41887801245545275 -0.7470647333824871 -0.43309670904343855 0.5035852583019538 0.7546721147959279 0.7746963418414847 -0.6997586987768973 -0.7433409733790732 0.07674754433475717 -0.1726472359635911 0.3459148163493506 -0.92456689275885 -0.8085117943980586 0.7727160550810368 0.42631511968137037 0.2881303997217395 0.3683085832256989 -0.4058813484361605 0.8324451382422644 -0.9110342301828103 -0.2905170499722094 0.8836716359846053 0.39920866734940197 -0.6312285463896097 0.47632084819370846 -0.9334107842148125 -0.27911844276825293 -0.6083518034287492 -0.05884624828609675 0.8396804853470319 +112 132 0.912955982954375 -0.7005217450507766 0.06034367346404679 0.21319100914373013 -0.871574970870356 0.9400961655016544 0.4639619733112754 0.09657764698806592 -0.29992744482417977 -0.39470243610970956 -0.34543479195439364 0.3659865391493671 0.8752451641639141 0.811080688613901 -0.34218484849859854 0.9022395746036949 -0.895297077015567 0.13465851528372785 0.30923824179876713 0.3691347079572036 0.9383798751756969 -0.24353858675903872 0.42018354823011306 -0.8690753861350042 0.46909528532092915 -0.261083190078774 -0.1538343139102949 0.6588199623410222 0.2780012942792649 -0.8531759164782067 0.9045953902924146 0.8595106602061227 0.48075034609369394 -0.39090174408711453 -0.937064064401826 0.4819268142580815 0.8858068309864384 0.8668592251822602 -0.23403542219882967 -0.7739346026703935 -0.5451119319140831 0.3189361215011517 -0.5901338888623673 -0.10487035389693156 -0.47296780204236577 0.3600509727864327 -0.5479103095474549 0.31231987481367773 0.3929691708582854 -0.6809567158336873 -0.6973769582197833 -0.7474374419503407 -0.033279740924715195 -0.22699323800667948 0.06538060438759463 -0.7200498914532381 -0.49768993962347263 -0.9627668770302527 -0.7882795439607906 0.9845159731122535 0.5520390317356461 0.40977681704390023 0.0415051759606182 -0.2586580514102492 0.42226233951624126 -0.3255404338033048 0.6532123545229029 -0.9099953761739374 -0.3357965005679078 -0.5045185508827428 -0.8234367506694455 0.9197244217829195 0.9680161872158031 -0.5115085303205471 -0.055243384095470915 0.21313080416210295 -0.14853840792022743 -0.6808069878782337 0.42963754338952453 0.2937270496008271 0.9716850385586799 0.24738023931191644 0.6348914110252659 -0.48426952015236235 -0.3279757824328111 -0.7106127504659212 -0.7212213000383152 -0.945770032153354 0.9232914136339334 -0.43081159718600226 -0.4458670634961521 0.9198414573622473 -0.29965345013226496 0.9812028530937855 0.8130121069040435 0.5153971286869441 +112 133 -0.7925738138674558 -0.31901127277318 0.9230095056586003 -0.4729762215587532 0.9822231632667544 -0.27812572552117243 -0.5569995351405856 0.10699379165726963 -0.047259212267191986 -0.9278940811185172 0.2118318279409772 0.30025563659992205 -0.7797609977433146 0.8282927658879178 -0.22354574976014985 -0.20405658570491214 0.5313654810946298 -0.578386898358419 0.7851936671697404 -0.6163162001418538 -0.5742556191015213 -0.7460970739327764 0.29895261932603057 0.010597633727045253 -0.2577574703656267 0.8017705695622734 -0.7005442332699015 -0.10131958274675035 -0.923202063266378 -0.4182557149311035 -0.2887309008547254 0.5773704997452604 -0.7185900575676039 0.7956826966144039 0.5786349185639894 0.9544838850469355 -0.6244758573925704 -0.24828939015571416 0.763001176059874 0.9970713893113186 -0.5841685466481081 -0.33011751087879393 -0.552447796375362 -0.5512169245719776 -0.15967808923839044 -0.026869149914872548 0.17536788070225184 -0.22202626726095565 0.3071909052060895 0.9216906490944374 0.11251405089593525 0.833725804885618 -0.4095226279838855 0.8640007737733648 0.8144763218475501 0.30972532269281094 0.46296948174834585 -0.22921862620739564 -0.2405046844910208 -0.6954628557274416 -0.6750227875280632 -0.869007215274312 -0.21489862762805134 -0.6299753401829193 -0.6198785086886873 -0.7685808278263546 0.5877853882363888 0.1623286476181658 0.3402466824960815 0.22403088378188074 0.9653200713696712 0.2389880974230818 -0.17000912276781754 0.8781738509533477 0.8332722196412845 -0.8629517258462851 -0.4326235359908841 0.27124670350174407 -0.06210948121142601 0.46452249264606604 -0.823224528919186 0.35425253218841 0.6346542218209745 0.7129349033623726 0.9350653183355304 -0.7233852317898075 -0.9929442073651149 0.2624427008338486 -0.16966822301296203 -0.09404215494500168 0.32135208170673346 -0.9323845769220227 -0.7293100843065776 -0.8224218068673395 -0.4490777984854608 0.56966654675408 +113 92 0.747029544822208 -0.9275766547085911 0.7731978647038273 -0.7895035900339302 0.28862578192006083 -0.7880178367632964 -0.18391529901340165 0.8654513741356207 0.7152708388579603 0.5585500010937754 -0.18235161772999153 0.9707865102462698 -0.6377867152824785 -0.6026097200955487 0.49522476450034336 -0.7461645526309808 -0.6268144915429052 -0.18708214184879846 -0.6160142509228079 0.09293866115371863 0.321408197175332 0.6544428853911923 -0.9428917906836469 -0.13283810168596055 -0.35126490477217587 0.5678782950800683 0.2919339359522952 -0.11946593151131268 0.5258587434482527 0.10170556504955797 -0.6595855522942589 0.3988144257471029 0.12442315810169502 -0.08806720733497775 0.370749228174742 -0.802584846826562 -0.9831625524309828 -0.48435622616153795 -0.27421898966186165 -0.9458676475533869 -0.9120401759264278 0.06930513238827984 -0.5426032833287171 -0.07711910499412755 -0.586733915519603 -0.9582263442265759 0.7298961457952469 0.19845339159144104 0.40425255146436534 -0.6273013294748648 0.8599131211898456 -0.4160238490927899 0.011789747526681715 0.17668589626301956 -0.13780407927417881 0.44122487416906453 -0.9037328445568882 0.42290391253863624 0.47098596425003225 -0.30029371531244564 0.006376090059621697 0.23559155926594144 -0.058448803654978176 -0.30220893946232796 -0.625965316674489 -0.26893693509723415 -0.8444723131993712 -0.46689815190969974 -0.36270626984882637 0.03681740486230067 -0.5389888461227808 0.1444898390956233 0.8087648611730327 0.0838320186100252 0.7874439267392888 -0.6247203678847542 -0.24007698395665633 -0.560374473486325 0.5185643314048731 0.4141925986968926 -0.27861227382925824 0.191619761357112 0.994826580004122 -0.6370181245025166 -0.30995279298684975 0.04879168522295063 0.44261049878420033 -0.09999216589396243 -0.2525311384468789 0.7219890904078574 -0.010748930930199352 0.350150902229442 -0.025295526717920236 0.13602611662712527 -0.10332113992427105 0.07133510608301097 +113 93 -0.5551903854197597 -0.36559437997472743 0.7175755944400679 0.15464008646593808 0.453988188063978 -0.3788765337805702 0.8469253138933903 -0.12577841737046347 0.2436254433341536 0.31890000263381424 -0.7258845274852275 0.9948423879079176 0.07072301221742738 0.7856929011974392 0.38941477344594166 -0.2728724317350084 0.7216323051368418 0.6837652429092955 -0.8157327084626811 -0.29902785511588914 0.06697510599729961 -0.5136045108350331 -0.7395693650082966 0.11091838315351588 0.49772952743340926 -0.5882778122302132 -0.6219281302607718 0.891009505625685 0.8753199620443024 -0.3961153403503592 0.4313858808675668 -0.9900224502973805 -0.8288388145826442 0.9847690921715417 -0.997022093798831 -0.8798757068960879 -0.25878143397835474 -0.6130185649754738 0.848609178759246 -0.6554165573917359 0.5368023174437655 0.976918405789841 -0.8931416648630375 0.2349553125249575 -0.4320274810570599 0.26573415263433997 0.22746368267899553 -0.8032409635466529 0.5734620283066556 -0.4048583496574414 0.8719908523680038 -0.7299931177732146 -0.38384190067700574 0.2575651410873845 0.8887952748157097 0.9874696744870579 -0.45886791256279835 -0.7583369067200463 0.7126122519754807 -0.2156321185417065 0.9713202427689882 -0.9311181079871587 0.9773952686437049 0.031009279716166516 -0.5568887491978578 0.9339436396518965 -0.15390477898341293 0.8943185900809361 -0.53449579898352 0.4654063110910778 0.7407477233911115 -0.44868815284664954 0.5947905692078603 -0.49257231896155607 0.9990468677784095 0.13420469690004055 -0.08191054938842268 0.5329372327069883 -0.1716095326840421 -0.5245809138068696 0.3536140657074005 -0.8974186275576854 -0.3425596796018293 0.17460586214505414 0.28870853739328917 -0.25053422244227264 -0.7900633078162795 -0.10620125928124935 0.8178124756018759 0.9096064004293567 0.3939519667446474 0.0727647755796137 0.8486584164224678 -0.3475682556612607 0.8915541348567504 0.9464916956021052 +113 94 -0.040109545268143254 -0.3095462033417493 0.524391427586016 -0.9327769289363144 -0.832793908729206 -0.572398566280709 -0.4500799455142963 0.43091812664702744 0.8982178884748808 -0.8520015094544771 0.21205421890377107 0.05727651815590673 -0.3913806544550562 -0.5078187624789865 -0.44929514288154837 0.7699947100538451 -0.877564741444633 -0.5245808513311592 -0.2795604276409076 -0.14434551147694252 -0.4229420441489786 -0.971285996306146 0.40656293947980937 0.011450879315754392 0.10791638989390684 -0.9062512747622646 0.5140850929774157 0.8553044198369306 0.12103813831617782 0.14910749446465354 -0.2510259792747884 0.5155981505117828 0.43850149631236324 -0.05800029629169012 0.028824644955445677 0.2722911148907099 -0.783257044380141 -0.07627887810044398 0.21315472092175725 -0.1901205693640431 0.8163403357020569 0.9603517993428758 -0.985897853457619 -0.06659771366165423 -0.7593584918456564 -0.6514060139661726 0.5208454757855769 0.245172661367147 0.5566967693634832 0.8960074613933537 0.4538128170959317 -0.1709283106307955 -0.9277000589064726 -0.8417249728611351 -0.23125248191307946 -0.5929874412456428 -0.22124770754582124 -0.0726815006793946 0.2871993925140792 0.9402599906931794 -0.31373323966155153 0.7694648960656585 -0.1318306297448424 0.07089781507648185 0.2997021342308974 -0.39782356755542003 0.21155214442219972 -0.1125629526115095 0.903973491520687 0.755088913309341 0.8107843196543811 -0.22085360561926604 -0.8630212982469976 0.8860632261503918 0.1139208447512623 0.4045866152966011 0.05988531077491088 -0.18812115142662922 -0.6043329947246678 -0.958254079204854 0.27501183659968165 0.33155598370506123 -0.7887839733931861 0.24870739369229033 0.46279713438184844 0.07048356683222234 0.2964914591699812 -0.43605068460198715 -0.6335077505667941 -0.6492516572346227 -0.6093947804471225 0.5676312079604964 -0.08768103883559242 0.3484906212549499 0.6956772413536518 -0.7741945824256953 +113 112 -0.9151358058319012 -0.2246540280306446 -0.8105641656373204 0.06606097093543783 0.4515826789930355 0.9754971401304804 -0.03985388024415859 -0.5591836283718503 0.7986050074616897 0.7981332931202096 -0.19605852352016084 -0.45453010059210563 0.592485987789926 0.13160649455362372 -0.6725481562115558 -0.3034025087024961 -0.8413833473363679 0.4224801549406898 -0.9212892000716566 -0.0036935947796143953 -0.6114806704023088 -0.11073207934081708 0.6114915658887452 0.5119126982831863 0.3589822689197615 0.12925232501043182 -0.2605063671189878 0.6036084369335482 0.826593980558002 -0.565045468249481 0.43826583509770023 0.7149858356288179 0.8103401029026887 -0.10316427476876266 0.10308711137878657 0.33334414671752444 0.9991978682464051 0.9922887911786546 -0.818868427545941 0.8617298368709387 -0.34496625026519045 0.5092972711202375 0.14031662282903246 0.5471054326303906 -0.8018227864695726 -0.010257347800342709 0.36953739558390186 0.37505508363387285 -0.45625184409736863 0.41680645908379144 -0.4244847230786686 0.057299815880092586 -0.6075003843086253 -0.3690052843061222 -0.5160557163066453 -0.263273908972661 0.8723140693001852 0.16991243754018304 -0.8579343356273501 0.045222832697281445 0.39843948401339246 0.3571271885684797 -0.30933753672496445 0.18497306461063157 0.27464085422112516 -0.11175464196547891 -0.28312653838639545 -0.30508885553134446 0.2345895691094444 0.7546145533161128 -0.05743010581942043 0.32727441702923943 -0.25394156435438076 0.9212070973170099 -0.5817058978127081 -0.4702406751219197 0.8700667560679518 0.7781073662086364 -0.11298317808102709 -0.40528796773621445 -0.8664566719972309 0.9261084569395184 -0.4396363596469359 -0.0020236109932674218 0.3881309748349333 -0.8004438032298218 -0.6989507997749207 0.9666036717241977 -0.6603639104946744 0.162326344103358 0.7139159922118463 0.0902499448836509 0.8472958285293524 0.12404455523413005 -0.718258769239748 -0.5836806794164386 +113 113 3.8987180427505885 5.411611684305935 5.984614673496301 4.847840489131964 3.764634377917613 4.677446597884958 4.4961493100018375 4.223905602007976 5.45434297828656 5.843451650207785 2.8624987906475043 5.813957514478386 3.041851643162743 4.1900475999490014 4.626516514330434 4.88969854642702 5.076760994055032 4.689084305429444 5.435278411862775 4.18786395604888 3.38030849440418 5.245966490626274 4.874488211465154 3.976869306163116 3.713460923417075 4.144330637307641 5.104954352147866 5.070507298262677 4.463133590278357 3.8926968656725913 4.7530837599204485 5.484496606866121 4.360301538145846 3.5980623361728616 4.748613881360503 5.519711225744466 5.911271466523756 4.558554945034581 4.3719156942802915 3.979924447458774 5.065340888046372 5.685410323291549 4.951276256324396 4.5109251747107955 4.212395785246339 5.022259536549134 5.310208578332316 3.6844338226580837 4.5589356535561505 5.5659584875575625 4.854931405108811 3.825916127146213 5.05550710061999 4.187986351294007 4.1990740266629425 5.39380293333749 5.377177273003261 3.5155766440276026 4.650694298192695 4.049077248070912 4.290714814562698 5.178579845549482 4.125121390174085 2.6684541404955304 4.103967674685817 5.340582977707726 4.145959775745682 3.7059649369038756 5.144385051011381 4.6716787181290105 4.807135371171247 3.168301044119516 6.201858927032681 5.600186298029735 4.961885966650872 4.389423925593349 3.407361795164248 4.634443794904192 3.64696610442447 5.169975666352719 4.19143143406434 4.69308505972213 5.030899397405945 4.431205114567158 3.7342912654908074 4.590175735477143 5.245058631267672 3.7825582205005546 4.315666440528247 3.5970713470239506 2.801714330692178 3.7913148717482983 3.856559826165822 2.5470469607275543 4.722356388768716 3.848021409578442 +113 114 0.13523641064322 0.9352839382531151 -0.41841167653451294 0.7371136722608587 -0.625341398208086 0.3261422185550171 0.9828450677994212 -0.9224071392686874 -0.746653999231234 0.9108812900864782 -0.23304905389854813 -0.6610717678191929 0.3065763140071003 -0.4507904752474756 0.9844823690856352 -0.22196450705125126 0.06292340679555353 0.7463571900501371 -0.2646642338101852 -0.9351165071110716 0.010419463318135813 -0.932464323989707 0.49726060794288585 -0.7007919771092064 -0.6179470984500748 -0.2211803327061066 -0.7682310547371667 -0.6403915519095358 -0.520517112897124 0.91758199792183 -0.6921402326255306 0.38583281980067574 -0.4065009426849291 0.2561313936047993 0.8572722460979896 -0.9804031096002797 0.4312050403855079 -0.36262075102965374 -0.8155734984061356 0.3400747890891691 -0.3640733088851562 -0.38899029390639095 0.5427506660716459 0.7286289837475133 0.6724747768487944 -0.37885259796929627 0.800450926618804 0.5442769442966422 0.14425166615805796 -0.8961688525443232 -0.6987124402420015 -0.4208254438440513 -0.6887145516884279 0.6689200775979638 0.21038658156113255 -0.29133312103211884 0.11410594852530886 0.20837336039186827 -0.03282207361873768 -0.3784356783069618 0.6213148537870636 0.779000973250167 -0.19729164547860223 -0.6781840634549412 0.32940519796288337 -0.816931500263911 -0.26051294276849357 0.4530698760130907 0.8951118806739753 -0.07385761975048877 -0.8885810400248102 -0.6335525328369702 -0.9029647182426217 -0.9118891009924455 -0.2220333531762575 0.7644765405178531 -0.4087609619533654 -0.7312705371195332 -0.730179454209563 -0.12789341464933646 -0.8207414977958436 -0.22847217515804563 0.6345994368898906 0.05890488922361525 -0.3123379273938185 0.5716937525990697 -0.341625742433876 -0.9967256210943185 0.46347275957436285 0.1158140867476456 0.4428947454003944 0.6003643890876034 -0.31082528779071894 0.5399565226702723 0.5675692976606819 0.8603081494555016 +113 132 0.7036629114697104 0.6768992298475462 -0.44737374515485007 -0.33741902143008695 -0.38079241371604944 -0.14495190331391017 -0.5809400976222536 -0.21428396217849888 -0.8454183103598485 -0.8049701066917032 0.2887172905413835 -0.9302554066191135 -0.09275844770637365 -0.4233533666995961 0.32952469038847454 -0.4451372639351656 0.05187437705483533 0.5083668053987498 0.24417735394122242 0.8380230456507838 0.41454999826620975 0.13309352891056392 0.1090286092225563 0.6334788196322816 -0.6653541751272893 -0.43073066069693544 0.7571999376992562 -0.8438046373483925 -0.7892087363633877 -0.3592723230547208 0.013877460825617804 -0.5544943259827151 -0.6171728980306368 0.5385896840339977 -0.22979498155422107 -0.2645696306140024 -0.19095318734972766 0.7339462787859294 0.5911598375171536 0.678973635350312 0.7928498572595628 -0.9152432675316402 -0.5710342646159077 -0.5055052903302488 -0.05713217254923908 -0.825631534884187 -0.9550398751470948 0.4974754375257602 -0.6301773960712973 0.8573035297134552 -0.5241289734419543 -0.4071462835922308 0.714538837019578 -0.7893886252005113 -0.7983847226915275 -0.6268982739211977 0.37440482005726783 -0.8445269778564761 -0.6082543255538786 -0.6567333419276655 -0.6500701706484371 -0.8473282156952056 -0.056871604158965416 -0.42781717473942993 -0.9140225199228948 0.6976530074444147 -0.027813402692159706 -0.3351968832617953 0.6368834197044939 0.8129681048506434 -0.18727756476978064 0.1072029922032176 0.9403010867322157 -0.20957875461137654 -0.5726064319544402 0.4127001645066537 0.5698618473815305 -0.42913806206526117 -0.3504154723337436 -0.976352033229668 0.1441302387728587 0.30841775612027766 0.7272181047559949 -0.6723904176445634 -0.37018255720544757 0.5769694939604069 -0.7287413788829475 0.24079380133989248 -0.17121375339000444 0.10333076730195101 -0.09405014918955645 -0.7349118254953753 -0.4188359674424986 0.025682002882086552 0.5828043728987091 -0.22970800276755998 +113 133 0.16760669357506108 -0.735804839519469 0.9126040192698648 -0.8545442392397993 -0.34084172830075143 0.6665984783775296 -0.32607824739098357 -0.02432368959529274 -0.6654234967023465 -0.489701005388427 -0.3332315602260172 0.6970101428658624 -0.27261023896384406 -0.6904039644417477 -0.38431547891526385 -0.27770487105638364 -0.7725276826266165 -0.7120936666206574 -0.8446652176392038 -0.8758446566318983 0.937910081663563 0.9232993269358831 -0.22471075492949955 -0.6108693347333429 0.4622874499822187 -0.4258393175962363 0.9546468998426392 -0.6772146632322444 0.28671696043447326 -0.08783378962225541 0.9086640989588535 -0.25134276659552945 0.6215095099760335 0.9583181936660794 -0.552601405580138 0.9508778817707859 -0.463699011790075 0.2609689823657091 -0.779414717296866 0.18758406030369335 0.58877838656613 0.6807907142488245 0.3566985178752935 0.87257160291902 -0.3627398257691685 0.8126048861956376 -0.4490907975611875 0.3748448094578509 -0.566799175618282 0.03567591695427019 0.24965112188106908 0.5033572081742903 0.6948323565690415 0.1667485148095027 -0.03745697175911622 0.6384544335053604 0.7749214499758814 -0.06737736411185802 0.9695789929148844 -0.20608565157043834 -0.6445820227908257 -0.7708253003059511 -0.8022761910190412 -0.2657412302607445 -0.6090115618702967 -0.4964196823741891 -0.9271523171783012 -0.8314730137310296 -0.6744804278765462 0.47973291617082814 0.35410627802198147 -0.5905867747849398 -0.9570783131879457 0.3612556331235093 0.747658077590287 -0.7849544588780561 0.6329312808435632 -0.7461419546159083 0.5435959977075762 0.7636758938335049 -0.2926972067987663 -0.4679052277245199 -0.39225805708240524 0.9334500881506809 -0.2143869980043307 0.7585390523003963 0.1521649614050462 0.5785170859331301 0.8357713246477638 0.27883900284206975 -0.1779040986647049 0.5132476112063997 0.6503403696130827 -0.01574800630871165 -0.23828090910395816 -0.08639546721984703 +113 134 -0.2958002272492404 -0.6374495824626139 -0.659517691398233 0.528558176678543 0.22050324708515845 -0.028203251407392882 -0.1476807773632498 0.9718311515502138 0.3141470931580026 0.17535998509857165 -0.3498752131614544 0.4843989390129222 0.49083872342481727 0.09383395821537821 -0.09642224612813988 -0.8593517696147335 -0.3540366946699003 0.8388282393583912 0.7183858924424837 0.5312961983512026 0.08422370123786416 0.6223083463372758 0.7583227299302411 -0.39004047545886644 0.11205059336107492 -0.1811524218560625 -0.36676774918820576 0.019909329917670915 -0.37640881597206177 0.8512698914236614 -0.49029542507697244 0.9873351979988094 -0.3731135469082403 -0.241259678252004 -0.6249311856566526 0.039834908705803196 -0.8618238254105659 -0.3264056236478057 0.017630523114092522 -0.10643316444802675 0.11104092653101039 0.5890777112682821 0.27231710869868087 0.6072762621112715 -0.476201781173728 -0.16874262974064935 -0.4699826726434615 0.2999876043194787 -0.9401005778410481 0.5488441188651545 -0.3960829723698236 0.9631352484906304 -0.7758617703012545 -0.3479473506387143 0.4053290661066027 -0.9628476980139307 -0.759936078434057 -0.11535401446120641 -0.383253405774602 0.5793288327836732 -0.267037780759779 0.14552878994471818 -0.9585042179656418 0.007335310485255375 0.43858726076730736 -0.6852416552876051 -0.8602800873562222 0.04123477081153082 0.41396156434430065 0.4947853860941809 -0.7919257732667191 0.13599235994083347 -0.44924526169208034 0.9681348053950485 0.8116153591578104 -0.7623119461192491 0.3336109545458401 -0.04428077163465294 -0.5609748822698357 0.715322675148071 0.7246390937195264 0.3731366453487732 0.35960813005327896 0.904745769149083 0.6292366431980816 0.6798020020505084 0.8387386013861973 -0.03737665433727644 -0.3471977393258576 0.6080499080791519 -0.2727617988504065 0.5571158755121317 -0.56523031248363 -0.35823545579032645 -0.2755984888275953 0.22549407002996835 +114 93 0.3393761150886745 0.842125065793625 -0.6422248469700835 -0.060633859943965085 -0.26639105720308187 -0.5008524328901005 0.7819753661150246 0.7562083310365402 0.6997995735761571 -0.3632215270351482 0.8816205163864719 0.987634229374645 -0.17584622368482306 -0.7686258886839881 -0.22711392283314735 0.4465008032080182 -0.4478984044246985 -0.1398378758227543 -0.04950361318127072 0.019368752554999702 -0.20568214126630147 0.20377726176989452 -0.5377352039556615 -0.24650688662014875 -0.9194800334591637 -0.8633482453052737 -0.74716185253347 0.7437273392539365 -0.23226076964321019 0.845189925878457 -0.8184698581750465 0.8830193869262193 -0.16005076986783218 0.1401964314753732 0.11781146171382728 -0.8075342787940496 0.060044429420601286 -0.5204407564260556 -0.16838426753960412 -0.6973946569981675 0.03208553492078847 -0.13070086493081456 0.3029406305591831 -0.7054217546712311 0.6411394166951905 -0.8044508422784884 0.7223060876846952 -0.3130208701992123 -0.7826345927738343 0.06365510031526811 -0.7449576922197392 -0.5431566392084912 0.10361781268851411 -0.4462315850807861 -0.5784362189318213 -0.5985743311395904 0.6858839333194826 -0.5789033488739264 0.5620353871674848 -0.7488524213228531 -0.33808399766270014 0.1035860147907477 0.8612454590305763 -0.6670590051420009 0.7705891281296469 -0.6460094218157759 0.5168030949689719 0.07453066903470384 -0.018849617758938786 0.9999364299630906 0.5182490695031818 -0.8747533074846077 -0.0714772661213059 -0.838449299081335 -0.4886916888289221 0.33730076102532824 0.649829777687573 -0.6819715206902344 -0.7712650873964331 -0.34584519555556503 0.12206719627201412 0.5096182006485306 0.37148581209157006 -0.1516764524345069 0.7290223963069062 -0.7239203958932674 0.6418776239983202 -0.9943501031918056 0.2645465659459172 0.4413140011692911 -0.8450476073851736 -0.18053439472768962 0.8520520967764833 0.2937562670730336 0.848740960423642 0.7151735805525758 +114 94 0.18648801006049087 0.05305445408976328 -0.4990435270896143 0.8652428708277045 -0.7616505208062709 0.2288430315139014 -0.6166874725266165 -0.49269584159017477 0.8160036160548323 0.5662480803473906 0.5680679098701282 -0.9379328208551214 0.15376408767844962 -0.41764384469730165 -0.08268086730116142 0.3906379740053887 0.5279254468468135 -0.9277021635422731 -0.4546128105752565 -0.02826111294399314 -0.610605497647803 0.5381702842316773 -0.35610870561250096 -0.26086848435429477 0.47216280416357814 0.732243607323118 -0.3138978655793543 0.806005159839559 -0.40592601652943294 -0.7088922435224709 -0.0037823727407024776 -0.9430775808798082 0.6530716587072112 0.9513721596562597 -0.9903501904918144 0.28685040501019143 -0.08244629438957429 0.7840826345369698 -0.797672290108072 0.6068059953918503 -0.5720583713907808 -0.5630913940826219 0.1304936962402059 -0.3857652543422805 -0.6381542774844025 -0.11841568997159202 -0.2337727255920632 0.6770438378731269 -0.20278477502664405 -0.7354746691866925 -0.3069146774842437 0.3110574700374449 0.7096949237130272 -0.574308482575153 0.35705933715108884 0.6713377234408102 -0.6696368904197445 0.11554152277186036 0.3697725842577846 0.6562761542293354 -0.8743806570048398 0.4216608854814885 -0.6010248575295667 -0.9253970346358644 -0.7814550817661672 -0.12365721544266228 0.36306878275000964 0.3506292344228652 -0.880001002243805 0.37870784564226634 0.9395039175272408 -0.9933149015026255 0.3084090002459903 -0.07519089469883 -0.14053071897686187 0.6485678253690201 0.09010211179432726 0.7222062472417412 0.675712000100728 0.10090218051246724 0.5977698556229827 0.887690335571258 0.7516528562194611 0.7601194640674818 0.6844987862962688 0.7280582546814334 0.5370241055853788 -0.4519414620658784 0.989734593056443 -0.9924966276524332 -0.8378607489204377 -0.7489388193192721 0.522747368596072 -0.9786494875995224 -0.3787301065250761 -0.993629614042878 +114 95 0.2588616711310514 0.5828599932166953 0.7411570391645008 -0.9738082302698254 0.8915624494639158 -0.16756542448573453 0.2593412745248185 0.11504454315151502 0.33746107507938605 0.6300376347822856 0.9518870724303483 0.03296783011351945 0.2876905858736878 0.2263263176109005 0.611988073008435 -0.9982735143808608 -0.7399799489311079 -0.2919544837787398 0.42451321994556634 0.7692769508743214 -0.24495872820109454 0.4430416486722002 0.17341216680574068 0.9307925457023958 -0.6490720594559221 -0.744923100598621 -0.7710381661707775 -0.5154673442852924 0.21915885038484184 0.123297620182927 0.5094669212928604 -0.6353269710209537 0.4106280294165716 -0.6135041179945788 -0.2690893427127625 -0.23944338682321886 0.7060966489497549 0.831298812656863 -0.9948620594505526 0.6425840446791309 -0.8971272834244848 -0.09460812094223225 0.7878275526124789 -0.8120543034168717 -0.06654865761095374 -0.8720249831158753 -0.5465787387207719 0.733735230774317 -0.8670508513160406 0.5887626336432872 0.7790855120973892 -0.8496019328838953 0.2579315923008745 0.1513759547863578 -0.5110124050241007 0.287467696200733 0.4031720060015105 0.5596910486176283 0.9438783231555596 0.48987770199616976 0.6517082843891975 0.2978559484004317 -0.5508497219464981 -0.9196429040963625 0.2466125551292011 -0.7264127753798992 0.42320474307187284 0.14997708430595225 -0.3327254734931011 -0.48752791000184903 0.6209272717779828 -0.49634135409023394 0.7110054092359834 0.9306748252721737 0.8660284711189612 0.34657542300905364 0.3501185104319444 0.6224862148892609 0.25483555784502565 -0.8225184791993605 -0.4858022228026124 -0.33607903791500293 -0.39841235679780507 0.8961057513109505 -0.10898632979269052 -0.8177001773223207 -0.7590542682083448 -0.5791953341161407 -0.27855876340239494 0.9664901663110752 0.8819203347920566 -0.061463932391330856 0.3514277764428284 -0.1394148039101235 -0.5602771096157007 -0.5763479443703696 +114 113 0.13523641064322 0.9352839382531151 -0.41841167653451294 0.7371136722608587 -0.625341398208086 0.3261422185550171 0.9828450677994212 -0.9224071392686874 -0.746653999231234 0.9108812900864782 -0.23304905389854813 -0.6610717678191929 0.3065763140071003 -0.4507904752474756 0.9844823690856352 -0.22196450705125126 0.06292340679555353 0.7463571900501371 -0.2646642338101852 -0.9351165071110716 0.010419463318135813 -0.932464323989707 0.49726060794288585 -0.7007919771092064 -0.6179470984500748 -0.2211803327061066 -0.7682310547371667 -0.6403915519095358 -0.520517112897124 0.91758199792183 -0.6921402326255306 0.38583281980067574 -0.4065009426849291 0.2561313936047993 0.8572722460979896 -0.9804031096002797 0.4312050403855079 -0.36262075102965374 -0.8155734984061356 0.3400747890891691 -0.3640733088851562 -0.38899029390639095 0.5427506660716459 0.7286289837475133 0.6724747768487944 -0.37885259796929627 0.800450926618804 0.5442769442966422 0.14425166615805796 -0.8961688525443232 -0.6987124402420015 -0.4208254438440513 -0.6887145516884279 0.6689200775979638 0.21038658156113255 -0.29133312103211884 0.11410594852530886 0.20837336039186827 -0.03282207361873768 -0.3784356783069618 0.6213148537870636 0.779000973250167 -0.19729164547860223 -0.6781840634549412 0.32940519796288337 -0.816931500263911 -0.26051294276849357 0.4530698760130907 0.8951118806739753 -0.07385761975048877 -0.8885810400248102 -0.6335525328369702 -0.9029647182426217 -0.9118891009924455 -0.2220333531762575 0.7644765405178531 -0.4087609619533654 -0.7312705371195332 -0.730179454209563 -0.12789341464933646 -0.8207414977958436 -0.22847217515804563 0.6345994368898906 0.05890488922361525 -0.3123379273938185 0.5716937525990697 -0.341625742433876 -0.9967256210943185 0.46347275957436285 0.1158140867476456 0.4428947454003944 0.6003643890876034 -0.31082528779071894 0.5399565226702723 0.5675692976606819 0.8603081494555016 +114 114 3.8182180511757515 4.443280420201935 4.9257731041281225 4.969417740756914 4.47110084091702 3.4417691210552377 4.2187902081842825 4.1100774977170556 6.355414884777196 5.560561891102474 5.014343360920789 5.7446482242243615 3.535314616523566 4.951073664898483 5.067423094235587 4.975267254642098 5.655636921213237 5.483753462737329 3.482523007707152 4.784572737114712 3.593221906395915 4.266877813186761 4.0425111260664 4.039161447002881 6.125706839477671 5.19786543756696 5.331136805611024 5.3953187702239855 3.0684848715569863 5.302060889533483 4.578201477036984 5.297879400846198 2.703337584182012 4.433249755330255 4.660101847419088 4.029420842870867 4.170334181537674 4.948191648064812 6.155098478590092 3.6893877311035963 4.207749267783792 4.034049744970496 4.794588738455679 5.2174413622361655 4.450811662051574 6.268754968514326 4.8711103978741885 4.77780080896123 5.331676973929027 4.9214280854001 5.468209347057691 5.121586713196281 4.434190709946836 4.946658217049888 3.2782390302917053 4.581646765693914 5.10308710248094 3.462834097688792 4.663993909339453 4.018846181349461 5.684571521236468 3.967350722469331 4.422935916828354 7.175673968013869 3.898407446649858 5.541768154612876 5.315954796238052 4.808407985511254 3.4895303741291746 4.921959632331507 5.603553179874445 4.8171113624188635 4.0505296147435805 5.149449808972123 4.0804278578535635 3.9118133841764973 3.4761898987191535 4.2608242111842385 4.464227753447809 3.868414731960819 4.68469647071157 4.482847111763117 4.743338225197106 4.601074594316051 4.122243219418455 6.337855290605183 5.169042923494208 5.54215819610441 4.544236255660785 6.210036445670634 4.945415324674512 4.349715763987625 4.803900333105649 4.2990657257908245 5.471190765428564 5.38167472653037 +114 115 0.4578936025592082 -0.36227732126115475 -0.789996597428009 0.03978382446025441 0.5190807465584908 -0.4070889745738877 -0.1801655909590727 -0.08371215433390544 0.7447220544530024 0.9710134666365533 -0.41590535180721666 -0.1530506062793815 -0.8882299847355544 -0.5581230261442378 0.8395549099638564 0.6916409234398457 0.8617673165807 0.9426777036096041 0.3808882403977534 -0.10646920853715058 -0.2779179054571501 0.0253411682708915 -0.6909479688264035 -0.1057273268081862 0.9505060088768535 0.7767336960886289 0.4231252372142775 0.9174331476398714 0.27070575791980156 -0.0017447231814695652 0.4293549900713327 -0.7683766055643191 -0.050101250853911594 0.7499279921799142 0.8184098538172611 0.5528298316378093 0.7360085631618682 0.17068669821446814 -0.958392782119986 0.020314475324463288 0.05628429791550227 -0.6306116561632145 -0.9340609317050361 0.4182017597391545 -0.5869576842035553 0.9102533774374211 0.1272793683992126 0.7428805979609219 0.6727062843525773 -0.2221746398921849 0.577528911729271 -0.8698748812644299 -0.4996147519654468 -0.4225713302927063 -0.4745116714620017 0.5721210432938921 0.42747758639439115 -0.13010474697463614 -0.1978542205148257 0.07545627165346658 -0.7736456536038567 -0.7537005049611492 0.44986634334347575 -0.9560522443259329 -0.08324270711817472 -0.5243403992770168 0.6400000225500724 0.997276576521354 0.002136385536877672 0.8859569199320012 -0.3129316633837942 0.06316437024369215 -0.10432460989642323 -0.006206820184080586 0.599913391117975 0.9035773934375937 0.1481647163271267 0.22288283013226873 -0.1537113751624315 -0.2791057756732478 0.6362930255219081 -0.2902238330985465 -0.11924279082011302 -0.35518836232422246 -0.5673514007563529 -0.8809083275938236 -0.7608279540377498 -0.9886896857934431 -0.5635501069019961 -0.8210200623275257 -0.07520408175445725 -0.8381154302800424 -0.43586763577776044 -0.32213834267060637 -0.821981833402804 0.6708706043987571 +114 133 -0.5214916739835194 -0.8768182397430766 -0.8258244988904586 0.8410683663045506 -0.1305438131041683 0.5245932423896293 0.6499229688638606 -0.03233568283160526 0.9819354242627891 0.8293403473383971 -0.6991875465009976 0.9823701137408931 0.7741338529435349 0.8371742553278161 0.4051231011783243 -0.49637884388991504 0.547513235161923 -0.31328386509919826 -0.6140161262929873 0.9405260536281757 0.46577043844307475 0.5366427041102972 -0.14508272173896275 -0.4298746157541413 -0.6572016152934779 0.46454728027428693 -0.7371386671397717 -0.6498197901676905 0.06095554745828058 -0.906496892814723 0.2970041803441861 0.5765821930148065 0.11412329360247542 0.0638798095182962 0.013096805567399894 0.7505067858707473 -0.8149846852864444 0.15313032447242114 0.6882337101505154 0.18396296914403099 -0.1707988185680187 0.13230701911559017 -0.4158455505386498 0.972333178510902 0.1871858017660577 -0.7524964094412105 -0.9875283155079586 -0.1709765241567769 -0.5031585372523637 0.46766787330624227 0.8211723016974675 -0.6656607942124535 -0.9922692995166293 0.5895463327270203 -0.18330486374153998 0.5974909657631982 0.929732070302073 0.06982752119294133 -0.8952360413628402 0.8277554794433102 -0.6498737811095077 0.5474999230666033 -0.17054576951101907 0.9297537616141158 0.9499775115591027 -0.8169142172530639 -0.8983432925814827 0.9916353258611401 -0.47345429742392886 -0.8259843190690455 -0.478391491387288 0.5709839404930959 0.6044933836500466 0.788819686755482 0.715815371219805 0.22802966737891905 0.10670174240275565 0.36638062505873914 0.5271865415343482 -0.3718052939683061 -0.03329758361742208 -0.4114154414450777 -0.2119362062150767 -0.7283331303903648 -0.6826365370813625 -0.49133861787366717 -0.37584742925637427 -0.47147509470249926 0.6463604021504732 -0.777708587470076 0.6124593045785562 0.5223894777571103 0.9420746454798794 -0.8108142500544149 0.936002070859375 -0.931444572184966 +114 134 -0.942346968532219 0.48767976753785214 -0.044856413752190516 -0.09960128229273413 -0.25436682506031816 0.44081662862585413 0.10851387871170681 -0.07620006457360806 0.9574721886321622 -0.7535107778209227 0.2598596750968283 -0.45835114684993017 -0.4379713946359589 -0.8637686189946976 -0.5182178119711078 0.7809534624598125 -0.8767091585599938 -0.6592588548702878 -0.5768406556023646 -0.4263404345011379 0.4604676260205134 -0.5053043541251212 0.9836543463634191 -0.5191326381554178 0.6648612398898484 0.3715069650463805 0.025968723934996163 -0.1563412683707175 0.9094669827864517 -0.6634965066710967 -0.9992143924082773 0.4704405637947131 -0.5396049019223803 -0.5477937404005215 -0.7427828666421925 0.042238238780484716 -0.9238402069835432 0.7871369498340055 0.8781056105840541 -0.4108348768182759 -0.8557401252996488 0.6009168584322193 -0.644426785781806 -0.15883838176150622 -0.5330092256463475 0.783842451730296 -0.23216754651543492 0.8240711450085079 -0.9523566795565204 0.44419334871422556 0.9075177887337826 -0.27242657467051146 0.1887865737279033 0.9482302157106768 -0.8195647530862267 0.7140519540856689 -0.5598194879746348 0.9445517913200241 0.6825502125442902 0.12598365510438247 0.15740976145652352 -0.386248178522004 -0.044381134894855734 0.8273135181532187 0.05993789517084824 -0.8786889818540995 0.9734311923539434 0.8974341114016897 0.1442871686827858 -0.08427706492174858 -0.5805343770515266 -0.017684190705492986 -0.013604661610560065 -0.29990448983606055 0.3226846594070001 -0.11541265947475998 -0.4613721550964953 0.047862061866686956 -0.24166094704125451 0.7040496035275856 -0.89900374593081 0.5486161248971522 0.5255669120139832 -0.7804966783949934 -0.012361362481046356 0.8853347196328065 -0.6662367113667762 0.13976687728211235 0.3680999563230334 0.7616916779934337 -0.9770782172226338 -0.23437316495999516 0.7094942771279336 -0.19103512023444846 0.3869531274722944 0.21654019782656087 +114 135 -0.7620904305597178 -0.0363352839484119 0.845357213277991 0.48689478591880464 -0.7352480424779957 -0.5024478989862846 -0.36117794778349444 0.7317969895132865 0.5049570519360085 0.10748509925987437 0.8988982358368873 0.9452366349207841 0.2427513304603599 0.7052911702399447 -0.8126695581733612 -0.3938780451910726 0.720646440869805 -0.8414673997154494 0.6575408428934291 0.990513770828481 -0.43053148926752316 0.4021611277027375 0.2974330851426332 0.06726830097296044 0.9178081801536313 -0.928235854828581 0.7726473629670425 -0.09395559064038905 -0.16737052777985184 0.6346508691438013 0.4820885283615737 -0.30128709411039023 -0.2657755637817836 -0.5642755657541869 0.8376593706711943 0.05077796916378419 0.022140578345442696 -0.8131558535614405 -0.3137561382324028 0.6615208902560228 -0.42682559312496937 -0.717093567098168 -0.15448609034964522 -0.5218134262918062 -0.45140849624650903 0.6496228423262917 0.23673376831246817 0.6085745170247119 0.3252572215671925 -0.7756771695584668 0.10700977377957721 -0.2983270957327606 -0.43193935231320135 0.3739841838411193 0.07489115431071536 -0.0942186262607907 -0.39460357527179424 -0.7863097096469194 -0.3509852636574229 -0.22227270424260315 0.9090898168557093 0.6330812943324171 -0.7850890899287206 -0.44589390122655037 0.45318240348603167 0.43434610168463816 0.6800908943095629 0.7890864372844282 -0.6093773863445189 0.3870536746193953 -0.946510793308442 -0.265433542124377 0.8862288598050767 -0.938193952697038 -0.06559677210620829 -0.0902908191091889 0.7297701620658548 -0.3339990822687058 0.25787371288553973 -0.2478742357321564 0.697739349237168 0.32468769564856026 -0.9216228996465972 -0.7967596492190758 -0.4660372468076761 -0.5484275391775004 0.39417626489992186 0.6746058326455764 0.9651872891766604 -0.4851077247515818 -0.19144244845440062 0.8169185379547592 -0.1775818104696567 -0.8986136206212496 0.5033271149208212 0.050376514556362606 +115 94 0.22762934882717167 0.7114080605877064 -0.4473557859374768 -0.3055784337965506 0.30350989161427044 0.1725997696250563 0.03618482310748594 -0.6894050894545203 0.40893678415245627 -0.6495746210882245 0.2141433742349046 0.7138330555023209 0.38138084925010074 -0.4191963134345471 -0.034423153746716784 0.12671163175279165 -0.015197311021047932 0.11243000065101483 0.3883525999745632 0.045801119513677824 0.505121029097209 0.7046114954937035 0.13301000673224284 0.4797229325566872 0.8142625112935884 -0.8370202266728946 -0.9464790236393363 -0.8429193209016104 -0.8956419846900452 -0.4307880044780972 0.22510732075159035 0.5363344519108046 -0.4987243238400558 -0.1469288554839947 0.005366093163870822 -0.8329044103667569 0.42373121436611894 0.6719984517292144 -0.42305610231652335 -0.4153683434152875 0.34619113950529257 0.0513341900350337 -0.22030124225584413 -0.8727871170446104 0.015954229402456832 -0.9577257020540482 -0.730154680734086 -0.8937799000298585 -0.7980162671963769 -0.49836113601869214 -0.21761842559327804 -0.7296729925818752 -0.7207604408890531 0.9190787693624705 0.1680966445173686 -0.3364851364899719 -0.19517900422337076 -0.9966415686264072 0.3969447377704669 0.09050181394593504 -0.6713470160664372 -0.7261369034424601 -0.4469831548912757 0.3218165282125913 0.3878899765437698 -0.10478939383809971 -0.31503453254102576 -0.1772447891797122 -0.5809019597732525 0.5765018679483616 -0.7449983672720255 -0.9934370916968798 0.8549960986202325 -0.7565978570581979 -0.2034784042648634 0.10564678476904676 0.3321613176225122 -0.06751771696073083 0.634393159266134 0.9806979731760452 -0.813645933641034 -0.0542531112552993 0.14114627625057996 0.6280738225736717 0.879058336541098 -0.3428007130159052 -0.1805428470288577 -0.42116878395607515 0.7758983657384517 -0.8508847583810393 0.5012085382378044 0.33834719655197754 -0.32877983718984183 0.690200563003099 0.8565386959746235 -0.3035828951482604 +115 95 -0.4452157246062276 0.5015707108121661 -0.35391355789727075 0.029487255676273083 -0.5911458226698443 0.9562978334864662 -0.051894078218850836 0.6939622132397276 -0.022196284856699 -0.29761826848946793 -0.37069499355271884 0.9791305178545227 0.5848784748697791 -0.46704932452897086 -0.7196875832884064 -0.3868707167661598 0.7705709578228095 -0.7393709243462805 -0.6775948004453374 0.39646601943659365 0.7834925279334364 -0.06938353544864806 0.5760442369560934 0.7857823895997664 0.6286403759068124 -0.0843556608370688 -0.6234254567848188 0.3574362723978275 0.11429765982175577 -0.7918962706731036 -0.5152474512570968 -0.9953332167333349 0.736872318214709 -0.9920648401274597 0.7262334255091847 -0.835789009790946 0.4649020707281819 0.33586030073497763 -0.7593521397385186 0.3607140350514393 0.5408577581169995 -0.4344825443664788 0.20911495483654496 0.8827610481015438 0.858754812484342 -0.5027842585896865 0.22035597888111447 -0.11235396697947575 -0.888811565958088 -0.9319118337589392 0.10145327093232726 -0.805666454525507 -0.05336389334952729 -0.6036990954952952 -0.9448117462473737 0.7771528578881912 -0.0007332085464881732 -0.7460261586608281 0.9504051944983392 -0.9449783288176836 0.15449764422832013 -0.03488300233024222 -0.1777442013341044 -0.8544755795847612 -0.7897047854419148 -0.8654414909726185 -0.16131560795990496 0.506118967771219 -0.9768664840630439 0.5846234442316722 -0.33683635479672924 0.754972154698885 -0.32840273113012075 0.29467367392148236 -0.28659804566718816 -0.25201020440952315 -0.13128620449005957 0.3524467698893081 -0.2041650402446249 0.3147565500710061 0.8342470604170247 -0.27175245004217685 -0.57130456623538 0.8671906786995316 0.8126583633873368 -0.37553053398126046 0.9381576490056216 0.5403344934945011 -0.4478160872117509 0.7666558385312765 0.09578737778522695 0.2694163696301046 0.509557265750727 0.5008630405188879 0.3817821476289458 0.17063098624425277 +115 96 0.21239480550174172 0.7949341909030463 0.4127984044133115 -0.7757528737708732 -0.0011313584277381494 -0.2668911072994813 0.9044179684115523 -0.5541603495143168 -0.09355672940022597 0.6070580536430743 0.7938662566118442 -0.8720972568695833 0.5656563970293271 0.8817026808761341 0.148603317717797 0.7762298595460437 0.5555105327578578 -0.07545036523369553 0.9772937136560427 -0.0011100862696200586 -0.5317602579342497 0.4873353954806674 0.7015349114384801 0.9306784482510375 0.8752742065896773 0.47785880445691853 -0.09238500146001694 0.2600857271594459 -0.8171051209757045 -0.45849853092321036 -0.43943217297645676 0.05475903708861707 -0.6045128637234936 0.6759001713010622 -0.1420193036590185 -0.6272352556312835 -0.029948875473288172 -0.9597095628921501 0.3412543044816321 0.9142645636535889 -0.9454869998445676 0.11737977294864099 -0.8480218253578296 -0.01142295135661242 0.3189435472659998 -0.5052851156767653 0.032791124443011466 -0.9647589978324516 -0.35684653105111264 0.7746014987385172 0.658662084527087 -0.8748811987771936 -0.1532035185135916 0.2377198668947509 0.7809473673486225 -0.7923031035700361 -0.0001820202948528138 0.5321372716391586 -0.6246955667220486 0.7088709869112648 0.7804662920537133 0.23850586675683405 0.8254967640019508 0.48777122356956126 0.40341170338257637 0.6522429721480636 0.41855203618848424 -0.32449180986202597 -0.9234006533723484 0.9132967721241272 0.049821437422351345 0.08636686369742264 0.47019332519681467 -0.44156186398262776 0.11024231712402677 0.2135193752111968 0.27477760620037484 0.5408267922719927 -0.8844848884259024 -0.9474174216710749 -0.7658030203441994 0.04342891194689358 0.4365505542053205 0.21400349725323609 -0.783627618147664 0.6670942559500823 0.5133112264435324 -0.44496721801891814 0.9973824882554763 -0.6672720269998558 0.40223373430155673 0.61708130448454 -0.3869660388631475 0.2562681457380389 -0.5531784320890176 -0.22451356045108772 +115 114 0.4578936025592082 -0.36227732126115475 -0.789996597428009 0.03978382446025441 0.5190807465584908 -0.4070889745738877 -0.1801655909590727 -0.08371215433390544 0.7447220544530024 0.9710134666365533 -0.41590535180721666 -0.1530506062793815 -0.8882299847355544 -0.5581230261442378 0.8395549099638564 0.6916409234398457 0.8617673165807 0.9426777036096041 0.3808882403977534 -0.10646920853715058 -0.2779179054571501 0.0253411682708915 -0.6909479688264035 -0.1057273268081862 0.9505060088768535 0.7767336960886289 0.4231252372142775 0.9174331476398714 0.27070575791980156 -0.0017447231814695652 0.4293549900713327 -0.7683766055643191 -0.050101250853911594 0.7499279921799142 0.8184098538172611 0.5528298316378093 0.7360085631618682 0.17068669821446814 -0.958392782119986 0.020314475324463288 0.05628429791550227 -0.6306116561632145 -0.9340609317050361 0.4182017597391545 -0.5869576842035553 0.9102533774374211 0.1272793683992126 0.7428805979609219 0.6727062843525773 -0.2221746398921849 0.577528911729271 -0.8698748812644299 -0.4996147519654468 -0.4225713302927063 -0.4745116714620017 0.5721210432938921 0.42747758639439115 -0.13010474697463614 -0.1978542205148257 0.07545627165346658 -0.7736456536038567 -0.7537005049611492 0.44986634334347575 -0.9560522443259329 -0.08324270711817472 -0.5243403992770168 0.6400000225500724 0.997276576521354 0.002136385536877672 0.8859569199320012 -0.3129316633837942 0.06316437024369215 -0.10432460989642323 -0.006206820184080586 0.599913391117975 0.9035773934375937 0.1481647163271267 0.22288283013226873 -0.1537113751624315 -0.2791057756732478 0.6362930255219081 -0.2902238330985465 -0.11924279082011302 -0.35518836232422246 -0.5673514007563529 -0.8809083275938236 -0.7608279540377498 -0.9886896857934431 -0.5635501069019961 -0.8210200623275257 -0.07520408175445725 -0.8381154302800424 -0.43586763577776044 -0.32213834267060637 -0.821981833402804 0.6708706043987571 +115 115 3.051692372757055 5.102109557196001 4.274888162577749 3.312645081191658 2.5921778908209796 4.893670585100979 2.384372471956185 3.6144309726406574 4.105490769004429 4.183722182878494 4.218497262060298 4.8347463355391405 4.97980799941276 5.8080082323159345 3.379926212845846 3.679038066503427 4.626069529367991 3.822019067765531 4.324743934676321 3.4203339633482077 5.00421982027156 4.311203331428923 5.309382907113658 3.9811615499743267 6.330689804303695 4.565823480291228 5.282824692584361 4.29977064840593 3.669290332925823 3.316999371496547 3.298732687831948 4.345442801652064 5.048358695971933 4.924183256609629 4.269883486607929 4.630268083075096 4.828973760218665 4.222580893955873 4.388070495786676 4.474388662455495 4.960024608580972 3.51297150435745 3.9676186661117616 3.7573106888735257 3.7077298220648807 5.192623154803116 3.6091801795040355 4.974666053263001 6.269139395311733 4.27472676002694 4.480313021453702 5.515149176103256 5.314682371125906 3.4726399631375333 4.050632865112188 4.6492789045745235 3.6725874180581233 5.1215887136503575 4.502158012583272 3.7546352320896523 3.9436532298027345 3.056338469762085 4.238174726506921 5.613337310137255 4.415997561855326 4.533526952651523 3.815878488951813 4.153295414554375 6.244139449522114 6.07867861931777 3.901973417903136 3.986989319900644 3.2430089547719394 3.1521619859890517 4.490509324534953 4.279612500106731 3.360749469970223 2.9423827433840657 5.1826343824619165 5.874837038764733 5.457159017084117 3.240396020421131 4.2096088775604 4.032246057740563 6.493391829151602 6.2188428215232845 3.506967195712327 4.9459791898491705 4.650600953299178 5.045035856446981 3.132109460783388 4.401094088638343 4.71845178011302 4.427483233092358 3.8928717654175458 3.0762992681858283 +115 116 0.14604642832048453 -0.5459297168366035 -0.2721493206264509 -0.3495310898971258 -0.026482735681663483 0.5985172732675499 -0.3696838404872125 0.44445194730070536 -0.9781789498199043 -0.7560185745109793 -0.3102987028733757 0.2582409611853409 0.22956284979875163 0.9296476198677608 -0.5009731838397624 -0.018641457098564684 -0.6845413094149597 -0.12804355936258727 -0.194177900659811 0.35607170313574166 0.7655259188761863 0.5275774538298379 0.7895604464633676 -0.9169745240061276 -0.7747307666889149 -0.6915728942053543 0.6414060144748501 -0.34684355353208285 0.17636224837701486 0.06017618414276438 0.5026805322763324 -0.9319972754502939 0.4496484443892157 -0.4692686906176484 -0.51311195472723 0.06917503530052671 -0.9561354239310522 0.05999785818740477 -0.14205284420127406 -0.8099593184970753 -0.5627884633902926 0.8002417014091447 -0.18523092102046235 0.34147030110981236 -0.13188387755296826 0.47999861184595227 -0.4813234116712366 -0.056957518294378895 -0.7213403685160078 0.2871941856096265 -0.0771791545021947 -0.5273426534876773 0.9958127318999292 -0.07605980435842064 0.375337585119768 -0.09549321919114684 0.44035757705963574 0.6144149757930515 0.21288703152203703 0.004597133668528652 0.00025899007558072284 0.1757002402572876 -0.2962734028821592 0.8641244025186721 -0.7227510001516326 -0.4648648811336811 0.24663199572403705 0.25226561270008085 0.8862228576780176 0.9490884796331875 0.14346233661692587 0.14850201934131468 -0.9178067113701831 -0.035763035619303274 0.4080725566574346 0.5662628586421017 0.7997959070235685 -0.5324290132542802 -0.5281190542071219 -0.931559773165866 0.3508387025641926 0.738459109163434 -0.9188065329068338 -0.13216911277099475 0.7319750443045501 0.9074040490522919 0.48443380731047747 -0.2673461208849497 0.041061715287374456 0.2741569897305607 -0.46992239140337677 -0.020653790920068804 0.28246627874847174 0.9546887311928363 -0.40331925148941195 0.09142855412368234 +115 134 0.14629486927685686 0.3709173171375233 -0.4122728592992553 0.41730526688477365 -0.5105848267177706 0.748640770764188 0.17004449969665436 -0.27166882894473066 0.1694958011604577 -0.35304906609316333 0.34957823722049763 -0.502700736098119 -0.9567869295660156 -0.9228350969395636 -0.09596034160237954 -0.2658899806164594 0.0035785770510285975 0.3124240019718152 0.40716777638979584 0.41842594230354035 -0.21273002050110312 -0.5918784542278008 0.3105373107247451 -0.01491499000630303 0.9251211664610763 0.4698705086019346 0.9756206688190256 0.6232774935714256 0.15172295927683965 0.3276927926072293 0.4095813252194913 0.0382284567543274 -0.823956058189043 -0.7632683880942315 -0.7103742611831041 0.8380623264853182 0.6672867983657926 0.295930425126 0.8334251757242566 -0.3482971621871045 -0.48434714571719195 0.029434321638400984 0.21736527754759072 -0.44048262633742197 0.37134310776150525 0.799495194383028 0.2654608745150737 -0.38684415637783265 -0.9346285742333211 0.18431914682917494 0.9835813828873363 0.7168924919813666 -0.1797151915702675 0.5693592031770287 0.3380609444478697 0.6981506707631508 -0.05328439091938808 -0.41613553887523635 0.7374044905525103 0.19748003707665496 0.16050520867330542 -0.4488297411312363 0.12523127092425046 0.35297752128172744 -0.0801568366613048 0.3109244629267651 0.8872210898150927 -0.6922917116658687 -0.9092416900605933 0.5927533730389021 -0.4074996851335706 0.5071634305674666 0.227733195476435 -0.524855893871045 0.19964571697513844 -0.9945376105761847 0.5884574020487707 0.1984375741217217 0.4148455799993598 0.5170551241364489 -0.1374295556619345 -0.5399954913976441 0.1439426900269627 0.5484930648470765 -0.5336217260493079 0.6221637648615761 -0.08142393232259293 -0.8551425611311285 0.8116672319738603 0.2251154024488733 0.38810088261862874 -0.8680108594433511 -0.6007141724468932 0.9755584592548483 0.017799537171639734 -0.03887072857498208 +115 135 0.03897200732435224 0.6515976359872484 -0.35488774420806246 -0.12588438097804722 0.40009094131133427 -0.8617381896818805 -0.5069681813293316 0.5406513519745815 0.41366609174686086 0.1824709752786653 -0.7590185154689313 0.2926261021744676 0.6793152449861022 0.6539102219812538 -0.4891640689224943 0.2803463892992111 -0.45214629470547796 0.5118478674079994 0.23340429958699915 -0.5690251291488286 -0.6499920313500103 -0.5142476691790014 -0.6843659054490969 0.004367411457132819 -0.4810099991949772 0.2737578531063716 -0.11262443010151957 -0.632809270241687 0.4722612686167027 0.7431554731877492 -0.5043531725612358 -0.6100384366368272 -0.6613808417192935 0.47638032035113764 -0.8661086667848461 -0.2165056881973173 -0.7113204147070458 -0.6927618639859414 0.5909293341874091 0.7768062988421134 0.29612768161794123 0.026570558102378294 -0.7596593114363248 -0.15637961723852634 -0.13896298294369624 0.019414745523819166 0.26167951139860457 0.5144224085894888 0.8534231953192319 -0.08635072818696599 -0.48606426518914847 0.2514997161428798 0.9758540240365263 -0.046735502740109514 -0.3786122624546784 -0.49084151491296124 -0.8879373862992082 -0.6873255196593835 -0.34775668987062747 -0.34129313021441976 0.7222194295320472 0.16975941406880168 -0.7660736707195113 0.35206762606023534 0.18586047758809965 0.8838722503503793 -0.58390190425688 -0.4667593224288129 -0.6081770573841894 0.6488723651995272 0.72310311116267 -0.24363374802854953 0.11715233560908622 -0.10156367487711004 0.8247064841349983 0.711584963462881 0.5176339373687859 0.36388114914077296 -0.955786881703456 -0.4046465260397585 0.9465535053819292 -0.42453240315482366 -0.888083058673514 0.949799896953593 -0.8226031371107645 0.8905426539462566 -0.3711767702837865 -0.1455607390968885 -0.3817149805230362 -0.0821612477789595 -0.3634718164962296 0.5687003747450121 0.7474940109203687 -0.12580460400638915 -0.38528561833013275 -0.7209215441800436 +115 136 -0.8115537933477559 0.5820123962648374 0.34061947564775097 -0.6448106560206388 -0.14794979027489452 -0.39080060538173167 0.05043014952071245 -0.24036235860208 0.9032331392315196 -0.33616181518375265 -0.8703409902320494 -0.33304710630651124 -0.2695145189881125 -0.6297638559277055 -0.19951252033500277 0.5248276562541117 -0.30970176730714116 -0.9916285057392324 0.7180308451846003 -0.7156173568380553 0.5153622647625271 0.8433754857468772 0.493088158477917 -0.006241348091793553 -0.5970042998348615 0.5407396251826178 -0.48945223293387286 0.12782167705989744 -0.4875082992496329 0.23724467046024733 0.12442783836472215 -0.3720116628561816 -0.77055839817129 -0.09355946794509884 0.3067543289514032 -0.6509327464212613 0.008016059928692032 0.8361791802249219 -0.2565487397881263 -0.36972291237786625 0.8013282085026023 -0.5921318308549988 -0.3367439105567671 -0.2576509754058831 0.42828368450572385 -0.9702895678883834 0.5969270204629633 -0.8547395485112645 0.7879020986026988 -0.6498946799962719 -0.6078016652844567 0.7025861682405834 0.973679550990951 -0.4023951671560473 0.21203817229137756 0.14565733669809777 0.8749182769443766 -0.5713624446928653 0.9464126463547664 -0.5438519365160004 -0.20257471769883484 0.35841673626710113 0.9803656895072348 0.8947131769210792 -0.8489863622600995 0.3744955437916164 -0.5133879704657403 -0.3315240086530338 0.7193555159060003 -0.5526705710537363 -0.6575334147869567 0.20618805784086724 0.10046311771961958 -0.24552389708264766 0.9298801247388608 0.15429492694339508 -0.04042624076510326 -0.4949622550746964 0.6928929004665878 -0.8540702620871325 -0.8024544156553282 -0.22832731874059697 0.9332815957790477 0.04256820706147191 0.9031824588536717 0.5477441373818988 -0.15736184646250573 -0.7109563185276131 0.19668385142678257 -0.7213053970464502 -0.10707711969012768 0.3354815058743117 -0.9055675350997601 -0.21132683742318736 0.10502168677226442 0.017483568230214797 +116 95 -0.849404924316578 0.008298397331647278 -0.9075867461770224 0.38440769876708125 -0.4857908907467161 -0.507870998506736 -0.36165468096077347 0.4744182198627398 0.922705302406986 0.9192186285031618 0.1683832434746524 -0.8981494732360775 -0.21238791722479777 0.45164223477586907 -0.6274759792438009 0.39762926484067007 -0.7586184049959539 -0.9344304305850037 -0.0957642786661359 0.6136756460156474 0.5258899365257665 -0.8083591624706061 -0.623485880513478 -0.8539032962634581 -0.944208254229431 0.36794613902747253 0.18396517180785854 0.5187281429322141 0.07036463615510202 -0.6352487082599687 0.21658600687184304 -0.7657653687470816 0.7528740854433795 0.8702720473633088 -0.9522609059124623 0.4394057353988483 0.8608461879826548 0.9733152061185602 -0.526387924906891 -0.8020920243692324 0.18542438302523512 0.5472779137772035 -0.18724715750057364 -0.7638652968312829 0.7572057199889695 -0.784086110143563 0.6406509305355785 0.9449701491249052 0.9353273297202822 0.32610926615226 0.053163883138319434 0.6318878630324549 0.4750628401878332 -0.2150644524360692 0.36060572839385574 0.6658204101663987 -0.3144798155737716 -0.2926040196568356 -0.38970801153363066 0.16708419235880223 -0.3864581745657847 -0.47251639797083533 0.18007956948663661 0.34019989416293606 0.5150139398569296 0.11890189275058649 -0.3350693011469861 -0.6521145568868065 0.11889798960667397 -0.7819134156278433 -0.772793375806178 0.1184330548556285 -0.6396919537046195 0.8113116383420351 0.8684101085101641 -0.17345279876519126 0.25512497848255977 -0.9340629000255916 0.6522501057734995 -0.5278730901452486 0.6770770166409386 -0.5418545068840588 -0.49583592122184306 -0.5578446069957539 0.3415788638098405 -0.5443819717162786 -0.7355628266941376 -0.3767291897986045 0.06394775085440152 0.22720441562384552 0.7885348995645456 -0.41467356698806856 0.8486808385486386 -0.25388157054713023 -0.4033037311351608 -0.4727603107196703 +116 96 0.12997805234198911 0.38016289490780175 0.9513094018580386 0.557883883121884 0.9950779296707994 -0.3191656562441858 -0.2903208977123011 0.15592040875360302 0.3575426777671069 -0.4788350211083703 0.8804505847900246 0.985762871132368 -0.7431789775241999 0.14858397706779325 -0.6895544267727374 -0.19346701118037157 0.7127798589033734 -0.0239506645366363 0.5412100961392132 0.7903469914018584 0.47613283812966234 0.4739869287174092 -0.5293443607787951 -0.6652791817775732 -0.550920559192972 -0.9352499186889864 0.8855654112665927 -0.24242421055798946 0.7275311229619259 -0.08064634383500557 0.8268651991966245 0.0017819681094244366 0.354424984254877 -0.7557452526286363 -0.11913440084502902 0.008902922916713463 -0.9525906730376612 -0.018844611131707545 0.7447781948189229 0.32992171732046605 -0.8837779759227324 -0.0948526378103618 -0.5915423216520659 -0.7351244258549547 0.8612450245227128 -0.6919416947958048 0.19872487725210886 0.35215601038422406 0.7761898846935233 0.04766780145397287 -0.7749365301606739 0.4846597447504337 0.8260480917388453 -0.31909335853440757 0.7717093275838973 0.3612948366248172 0.5919838598608886 -0.5491019706824192 -0.21539106492165905 -0.015931023636048147 0.5848072837489393 -0.8679463580215363 0.17277704479539935 -0.8467597147860262 0.7557038175036874 0.8077118124008844 -0.06192591502644862 -0.46742815036738694 0.07586910886155773 0.3723679005750786 -0.8964373702687434 -0.9285553541641793 0.15464060324389184 0.024113426531378268 0.39339995510535064 -0.5634800859866462 -0.5643309761392303 0.8062920929534536 0.4396740591976418 0.8981548720095525 -0.8730675354848294 0.129897448627881 -0.024508103499377265 0.13906397918351643 0.3774552447884798 -0.1409518087120556 -0.8998938233738127 -0.7193293503159941 -0.7327478418737403 0.385557203397189 -0.4277213104886264 0.013176835683329502 0.2969776712936665 0.21970516085714453 -0.9236027389432084 -0.541994871164986 +116 97 -0.36113631707611615 -0.343780636888541 -0.1690396674511243 -0.9883733578982694 -0.6322990818399044 -0.9563998377143006 0.20061964909329633 -0.8815542518797075 -0.6174562034545203 0.6159936583425087 0.500538247278042 -0.10515308807691337 -0.3733645241962624 0.43805607974707983 0.6456099806124367 0.412701649673757 0.3270220750667805 0.5519144864901762 0.11465780583121044 -0.2525570923422482 0.8881279754723677 0.08408513206835866 0.8838206623200746 0.5506476405709158 0.7605734681973502 -0.7087833338786951 -0.7487824142010362 -0.4255255885679119 -0.20145358808945568 -0.11511242271198197 0.7838198280531996 0.8522392293509968 -0.15092399791240685 -0.60298634287856 0.926999992048541 0.7878504492590119 -0.6744583329023139 -0.8052952491399397 -0.35047594396236126 -0.8301274504566016 0.9118991140459534 -0.8119202472086793 0.4974825690017155 0.7608394187041057 -0.6913577968193889 -0.7400203865179693 -0.7974094396716005 -0.9421179740079959 0.8002925431548147 0.7972768122766589 0.014630955613220031 -0.03368015908962896 -0.7794928184912171 0.2363108493513344 0.8887383798743851 -0.35604070248871333 0.7498175570828891 -0.19970266451424168 0.8205989511806644 -0.22992947845282963 0.2210301139679829 0.43115609216144124 -0.9033414183573145 -0.4691402977317929 0.11405141549058606 -0.045167428379140784 -0.4630188242694826 -0.13436635446234435 0.8205280978526892 -0.3837954880088956 -0.783970491481845 0.7593964414357255 0.4218002116992958 0.30965828149939467 -0.3838046879721193 -0.6951140416264858 -0.7660666370790141 0.29796609315811384 -0.11767477719411201 0.6116439374270595 -0.8409893208763939 -0.18229861721453688 0.8503329762657963 -0.5324260010276545 0.8322246057275111 -0.8031083527536456 0.4350199539760242 -0.024890962132509298 0.3921441024281933 0.5107079424441576 0.49720619382461084 0.4094592747954602 -0.4421453637525008 0.4390742525784055 -0.3023758528275369 -0.5047922473117838 +116 115 0.14604642832048453 -0.5459297168366035 -0.2721493206264509 -0.3495310898971258 -0.026482735681663483 0.5985172732675499 -0.3696838404872125 0.44445194730070536 -0.9781789498199043 -0.7560185745109793 -0.3102987028733757 0.2582409611853409 0.22956284979875163 0.9296476198677608 -0.5009731838397624 -0.018641457098564684 -0.6845413094149597 -0.12804355936258727 -0.194177900659811 0.35607170313574166 0.7655259188761863 0.5275774538298379 0.7895604464633676 -0.9169745240061276 -0.7747307666889149 -0.6915728942053543 0.6414060144748501 -0.34684355353208285 0.17636224837701486 0.06017618414276438 0.5026805322763324 -0.9319972754502939 0.4496484443892157 -0.4692686906176484 -0.51311195472723 0.06917503530052671 -0.9561354239310522 0.05999785818740477 -0.14205284420127406 -0.8099593184970753 -0.5627884633902926 0.8002417014091447 -0.18523092102046235 0.34147030110981236 -0.13188387755296826 0.47999861184595227 -0.4813234116712366 -0.056957518294378895 -0.7213403685160078 0.2871941856096265 -0.0771791545021947 -0.5273426534876773 0.9958127318999292 -0.07605980435842064 0.375337585119768 -0.09549321919114684 0.44035757705963574 0.6144149757930515 0.21288703152203703 0.004597133668528652 0.00025899007558072284 0.1757002402572876 -0.2962734028821592 0.8641244025186721 -0.7227510001516326 -0.4648648811336811 0.24663199572403705 0.25226561270008085 0.8862228576780176 0.9490884796331875 0.14346233661692587 0.14850201934131468 -0.9178067113701831 -0.035763035619303274 0.4080725566574346 0.5662628586421017 0.7997959070235685 -0.5324290132542802 -0.5281190542071219 -0.931559773165866 0.3508387025641926 0.738459109163434 -0.9188065329068338 -0.13216911277099475 0.7319750443045501 0.9074040490522919 0.48443380731047747 -0.2673461208849497 0.041061715287374456 0.2741569897305607 -0.46992239140337677 -0.020653790920068804 0.28246627874847174 0.9546887311928363 -0.40331925148941195 0.09142855412368234 +116 116 4.21316135210281 4.03264358681926 3.999168951718037 4.862510928120841 4.639579046971901 4.963668027596373 3.6372147272866373 3.980467327094887 4.6646197927927915 5.475239700761933 5.095574791653746 3.2242864325542486 4.2503363009417665 4.707476676748335 4.898873584370629 3.268328268408018 4.138472370783569 5.019953686120788 4.17911629694172 4.313221121167517 5.674762399537668 4.990287870647763 5.914765166720499 5.065167774944488 5.161973725218592 4.698492079984591 4.631011832553468 4.930070315500968 4.395629921603044 2.4392095593679053 5.5282942655759335 5.01158162968982 3.527200481308271 3.7862026471376184 4.180865070780001 4.7399130250131085 4.577713753632147 4.652194588293948 3.485569008457806 5.97241794082856 4.416420381949737 3.8783629702863234 3.9102572112845397 4.589352306474575 5.165256911707955 5.245248823955642 4.2945669592830535 4.449689872881908 5.894222364203488 4.064334179254948 5.191024825304414 3.9900659400310583 5.111227284679364 2.6409629982507523 5.798574636602568 4.4857587294816845 5.607070887057577 3.712990592232554 4.418463999402826 3.6959165957362634 3.262404899255153 4.111183065464169 4.308036004243192 4.723722171300693 4.791551906207189 3.9186704789978766 4.333261265563356 4.768427620100436 4.786449465901223 4.606253869429933 5.724472186252861 3.6458576914983176 5.008819222068392 4.2043501983274085 4.2074923536221265 3.7661672410033704 4.526763110833106 5.735834608889373 3.6037534026736022 5.049373181325862 5.8801707349120855 3.8029947172069787 5.482527672540101 4.195543036179366 5.354012209473823 3.734851369557786 5.013897023421086 4.6130883109720395 4.431656160315835 3.4364321779918594 3.969752795303477 4.336658217286299 3.930513428825024 4.017551940373799 4.734601215055894 4.813022332526652 +116 117 -0.0019115596344905228 -0.3693590085556655 0.2901188702534647 0.5017488099010086 -0.15797897321533783 -0.2074479920662613 0.21783513746565908 -0.0941478041666699 0.2795292389515658 0.9953731872274028 0.2319223333608813 -0.13360067908409268 0.5393347005941622 0.9470466581678407 -0.6734876666153284 -0.8684288492507504 -0.1420646149840985 -0.8707289033681813 -0.9676349559295845 -0.7786442145906909 0.4054856960752009 -0.8307265766472995 0.3471677199994705 0.3406293796703883 0.07801260677895838 -0.5711615061624589 0.27061571822800534 -0.681299462005869 -0.764114419976816 -0.06569578713251834 -0.5091405430679146 -0.12436398635864854 -0.3955067338989411 -0.5768482627391662 0.24993943331818502 0.4027136338024435 -0.4557573123385701 -0.918542363772276 0.24783429534473456 0.88635241641254 -0.13410069794847024 0.24882728702741108 0.7933027273842215 -0.20655590566813875 -0.3259047282294225 -0.26743538514350806 0.16849468007507862 0.8004017666796741 -0.22966831276203048 0.7639764482358 -0.8577365212314385 0.4203313293957456 0.20418532033125447 -0.5910148059979363 -0.3066818553734556 -0.641264642793439 -0.9868398965037704 -0.2153375901800465 -0.26583948236856747 -0.6155358952944947 0.9392322709591936 -0.0817209826721732 0.02760107002790213 -0.3309478160490176 0.2340614687676199 0.020497035265284236 0.8526540762958346 -0.9249108435087114 -0.9678178058117948 -0.1415270246254885 -0.9587433399598635 -0.7551591067843397 -0.6198808835684597 0.7457260324211472 0.16612735417788116 -0.15954588407910375 -0.8476460572485753 -0.7701860707216268 -0.2271916206883089 -0.01238827189593028 -0.9468459374273128 -0.22523292232471803 -0.9523786585964853 0.8931972727651019 0.22493453017032006 -0.5321661869046004 -0.26614057032945504 0.27866434195016887 0.5698824082522687 -0.7816154461752429 0.5555133080887966 0.47801690543261444 0.24772089661034213 -0.08771012723505045 -0.7583596548880509 0.38700376730482033 +116 135 -0.7130478503526563 -0.6495828703467377 0.3530432906983383 0.6293355355467298 -0.55927628423821 0.3487051748761547 0.04736560211945928 -0.7304623740932703 -0.2896588676542122 0.5243674413392931 0.9150676038816956 0.14770123776814437 -0.5954493105203924 -0.148530653230996 0.5870448490243243 -0.664162526113302 -0.21041183794004326 -0.8501180435462445 0.41848044525435757 0.6385731003443091 -0.3489297221312688 0.6762327438898585 0.3283690533406496 -0.8425825894152505 0.6906859540272607 -0.0016098764415519717 0.09839333563580066 0.9939265247843392 0.7637214310405076 0.27898476979920916 0.8704348578155838 -0.5535035000443329 -0.4527028796066974 -0.29792527384048095 -0.9913992891252383 -0.36724188312978834 -0.1960419293770963 -0.7662262980875356 0.7433607435658474 -0.44742558565822144 0.885556410846629 -0.7822413426657131 -0.16308832386990946 0.41146255888493477 0.948035959864294 0.6478527177733349 -0.09790180256347414 -0.5398166060655425 -0.17078598233765097 -0.21945855879491716 0.9559559750897533 0.8748294555928886 0.611029336650885 0.3880177569538268 0.9359087470286862 0.762900530357348 0.8996159649783233 -0.3091838853773994 -0.8781970842741542 -0.9177334551537373 -0.33242839439968885 -0.06318771955765334 -0.6544613465022506 0.6181744094904222 -0.8269150299730099 -0.6850985060358685 -0.17749744208842388 -0.9795254668969988 -0.020247266930519592 0.23240826653951108 0.34703723562569433 0.4845303084016894 -0.5682271405168089 0.05140825933361137 -0.37962402173000154 -0.06383086204402488 -0.1238732408340355 0.7685814466016039 0.3950798137844589 -0.5365963913017062 -0.6359722415342779 0.7810861140792191 -0.34396286769745754 0.4109876635730163 0.9114760939128486 0.08033800873238772 -0.2534107480641403 0.8999241254101673 -0.7415225316555609 -0.5879340315805288 -0.4116484978094954 0.9951099071055889 -0.5303717367693808 0.770476127254089 0.61408218791615 0.4027013789806837 +116 136 0.8965082924058507 -0.9418725706286946 0.7984498737835506 0.1673905634884174 0.6930962153867275 -0.9080719143227094 -0.9466248363182308 0.4902066766142139 0.6934205267097853 0.49347028922198266 -0.5161600415268075 -0.013002202734312629 0.26616299709545976 0.568238472650858 0.20492173153357762 0.4583274241731139 -0.6615573234321466 0.9062809347182346 -0.05147655310824839 -0.1203506758627424 -0.6900612553854353 -0.27773018612510914 -0.9991105411044572 -0.2552986774842232 0.4035322795244305 -0.4134585879128403 -0.9379871739688239 0.33699549311167254 -0.12551413300950287 -0.28763733640912514 -0.1038978048983128 0.7240554188079757 -0.4491756438702972 0.052744585725722715 -0.12506648456482927 -0.9547448634976623 -0.06421162803092795 0.9346994182070647 -0.24696799378350742 0.873133183238008 -0.7339701699872949 -0.45731915579882587 0.8149089403097984 -0.021229716540151378 -0.5954417893636044 -0.3274478491876309 0.8513517224886338 0.04022028224276597 0.7717019652374906 -0.8139121440146211 -0.9574783233265427 -0.45327213026757973 -0.5617092287037873 -0.6646757459664727 -0.27132170511790843 0.7755021987009676 0.1507530641671848 -0.3090101579926874 -0.5868335592234646 -0.6458456364366323 -0.46563337461973364 0.873817532190406 0.907579652538649 -0.06658143041265552 -0.7063303154555969 -0.820173828831912 -0.8195242799377063 0.03313431831981983 -0.3454072455675843 0.785842916096392 0.8860649435092172 0.16804604975622728 0.4651973697049354 -0.8030924096919307 -0.3187246648130071 0.43513753101785424 0.0551613743900734 0.5688986580968451 -0.7534721253600962 -0.5208315033234361 0.5350664042049014 -0.15474029274981493 0.551039763024568 -0.232064114546352 0.9933632844294304 0.6174888751335463 -0.22930599017079145 -0.9172344225630407 -0.28812612801059 -0.07087373179342693 -0.41974946949647984 -0.6103904894230219 -0.47881349980537524 -0.7551511492032983 -0.5499846217341029 -0.9999410436418701 +116 137 -0.6843384399881396 0.4832168189495596 0.2355838979792022 -0.5532225300627116 0.6715877707262903 -0.20122602330909434 0.6889537480757622 0.2553380048327212 0.3846339566588033 0.03216153757465068 -0.651785223950629 -0.11588516169087515 0.5787681960249202 0.8948845890087216 -0.0040299416739062455 -0.1293536168992393 -0.074248767017844 -0.5569354948666487 0.8706629015298994 0.13016153897862615 -0.755343853080892 -0.40659103805341146 -0.7338093382805011 0.297994821320273 0.24726303299448316 0.8626652691729912 -0.4127551927659878 -0.6914053555952022 -0.7514291545289504 -0.8751010416705969 -0.9925511881685887 0.4647960349855129 0.00907225936887035 -0.14432123780723582 -0.08914881841636779 -0.8077359164490898 -0.28837942569993325 -0.14480447616882075 -0.1815691191292801 -0.4928947648403166 -0.007210422733663124 -0.06730783622359904 -0.47566010916198254 -0.6365852499703741 -0.5812074241984537 0.8542609577427682 -0.5979781000361613 -0.022061752219601827 0.8197172942267681 0.425818083566732 -0.783100962953188 -0.039228134246258595 0.035869037651838465 -0.11882766126985 -0.9134143628658382 -0.4587855910447838 0.9245581980512041 0.6771207105774966 0.5723294838277968 0.9375517047555406 0.22140059195662798 -0.18265244774510658 -0.6373497804525279 0.37351394039415853 0.12423488226563206 -0.8179850990334285 -0.48611210652337666 0.4972705752092761 -0.6360877652650481 -0.895331644876058 0.7184816210868645 0.08183595235744012 -0.3470711534556967 -0.8831395662976886 0.9211323479909652 0.8060813980426957 -0.5567596227246316 0.567048786868811 0.4123309714819643 0.8845305570922526 0.7689201651703348 -0.19926129343179477 -0.39456068877220596 0.4053743208143481 0.9021322562168821 0.08670826900184414 0.7367118058923074 0.44737459210186903 0.7901625371780439 0.45075224578432516 -0.35952663930023543 0.40605061692886 -0.35672214892175713 0.5146624388437671 -0.04851791147556317 -0.5752257283824416 +117 96 0.1964440537673977 0.5375679460402685 -0.7127662945790412 -0.8262207734358682 0.7960912195525771 -0.16697741843464753 -0.434734711414934 -0.26427165763974325 0.2000614029362322 0.3472726314475312 -0.24084707462024535 -0.7618711791113626 0.8544548447456053 -0.7718107337452009 0.8701476536244326 -0.6097269492806874 -0.2970490667559238 0.6351764901431629 0.5233724877259942 -0.7464828592890143 -0.39879159071505144 -0.8119383755640983 -0.8306196107901593 0.34205913423867673 -0.9226482365238946 -0.9130914880222203 0.8676383510363268 0.9226365336061959 -0.04409875384800199 -0.6426758114093849 0.08018701259083727 0.2980630467173404 0.582340218910766 0.6727848446017959 0.4841266069464705 -0.24098318329646728 0.3427187419324884 0.1154870726409647 0.8361317413572955 -0.13859843340659883 -0.8455565110718619 -0.10879267173246698 -0.16582785355868035 -0.784431160278334 0.9510255406598542 -0.5396053632670359 0.4253626905478285 -0.07478296801872086 0.7658980594938998 -0.46631350331812627 -0.6055906033358376 0.9231701044562335 0.5677436474364372 -0.18346711387737913 -0.6878106094438503 0.6918010520186093 -0.36564526777929296 -0.7669568251244787 -0.01567424521542149 0.5925119630172857 0.7097493410095614 -0.5142974970633512 0.9136570438757059 0.48845305809428385 0.9714666520518014 -0.6928864394366545 0.09362263335632992 0.10120502926890484 0.858613351841234 0.509207128582859 -0.30080218376878354 -0.9505453197937297 -0.5310612149247593 0.4795695942857978 0.7996028891651883 -0.7649629958687707 -0.7821218790487374 0.15546691309217353 0.1800975761211745 -0.6706240031905952 0.6391156965345581 0.7566831002936181 0.10267704512686571 0.7737853700639465 -0.6672164787475947 0.34817710760818876 0.43990260322720376 0.8577953481683922 0.2487300700697439 -0.8943661630400233 -0.3784206510998138 -0.10162439573057558 -0.5687677224161831 0.7425737511896713 0.2867456161390842 0.4910665988404723 +117 97 0.8764738024534282 -0.11475862743022569 -0.781629252873389 0.9042859734550635 -0.7952776920520488 0.08068684929251346 0.9642454053453404 0.35537627485977796 0.4439351856009639 -0.04368899942185944 0.6774334022389872 0.9218154015365796 -0.4295333167838038 0.6161039253638498 -0.7800634346714601 -0.42169470339994897 0.871634816658539 -0.5106108593361018 0.807125685524108 0.7913517623516475 -0.00935951965434545 0.47073840004962353 -0.39470566698019915 -0.44441089599923056 -0.7650659472659207 -0.4739262942733158 0.4944842264965652 -0.39258175965851216 -0.02721859146209149 -0.2834695480484808 -0.13367501757182088 -0.5970385899152515 -0.8879987437236125 0.3589195219847878 0.6790250279596819 0.41894324975652086 -0.43237196762767605 0.9505276109142033 -0.2669621949768852 0.7796231455333817 -0.6281457869262412 -0.506518630565876 0.4232268395873575 0.2306344732017649 0.41604410521176916 -0.016820347065373387 0.7483588163460124 0.4235323472451893 0.00039913133519320354 0.6769133193044541 0.255051246456518 -0.6664500257694097 0.32168483703172557 0.675689414261077 -0.7149356820341082 -0.3431506847169179 -0.7307602718795636 -0.5414496573840226 0.5316231793270574 -0.9715994038450271 -0.364447245379498 -0.5894641543000763 -0.9310033178372517 0.17413261213566988 0.060744650864058114 0.06317866143319417 0.5410680573093125 0.4454263895728461 0.5483008166162744 0.8608568971091688 -0.2778069112926378 -0.9326549123829857 -0.31137912437707227 0.24148468846976168 0.8458860400354526 -0.08088457352173206 -0.12626557279049377 0.6025593820156534 -0.09912308823246807 -0.20942740106950275 0.5063679609494622 -0.40802686539029076 0.9309716897491778 -0.7787248667788083 0.24108220990327522 0.5188591718575719 -0.6840093971664722 -0.6401901862838566 0.7127538472281401 0.5962257804871156 -0.4115820169810016 -0.3563371221930387 0.9993486339654645 0.04884319772365919 -0.6288882496621708 0.11920677228799637 +117 98 0.8527235174199612 -0.8044695173693417 -0.3013383642415892 -0.8354932468890397 0.9647171298363713 -0.22574441399257217 0.5215329627932104 -0.7718843805385907 -0.9769831417851791 0.10337721161091995 0.8565937643359007 -0.061120466725652856 0.7346745787288926 0.7573552805226071 -0.6575567128386406 0.9968727782775888 0.2848658247339013 0.2676867272931056 0.8389902650756762 0.37828961393373284 0.37559583232477256 0.394506952251761 0.04825479479546568 0.3479217703953712 0.5259270377122525 -0.4599793230450737 -0.05019876072469742 -0.8100231120228165 -0.6627323109888126 -0.7178084589671971 -0.23613734101941986 0.30423267577194624 -0.5685426276466918 -0.28578862227471147 -0.9242557190896279 0.9924001980620447 -0.23899869255626105 -0.7505219999369706 -0.7910805911302399 -0.10956413854067115 0.9806119622380771 0.362195400340928 0.20464992459739317 -0.32800424173914866 0.3045850407229045 -0.2111301170100568 0.21182648539753157 0.17899962677044212 -0.6921596509782681 -0.6610433124389119 0.7660975773523651 0.6609589259660591 0.04952230351582121 0.8338581437447152 0.22450734116029714 0.607075820111175 -0.16737075234746324 -0.2657138788064628 -0.9166580591754121 0.31935488745981355 -0.7853012547648763 -0.7497702596971505 -0.12762237721090286 0.2593015542060777 0.21486337815991186 -0.764246311116614 0.24390045693977958 0.9267828289268767 -0.7998193015706319 -0.27480079077832587 -0.15971855093039422 0.19505652908422544 -0.24486575008428857 -0.045175406523904726 0.639561872815716 0.6103225855046561 -0.2050400642004837 -0.8718541589319369 -0.3794033067283349 -0.12402238256895748 0.7786945569132842 0.07227885874773254 -0.69595041536646 0.19769719431283916 0.6035097845781328 -0.65553229605932 0.5595527635817483 -0.9564142922061241 0.9934736178792469 -0.43764505973271595 -0.17162360029068857 0.15788079431651902 0.3097307530164075 0.9630076821472902 -0.051012341087542046 0.5565313031494141 +117 116 -0.0019115596344905228 -0.3693590085556655 0.2901188702534647 0.5017488099010086 -0.15797897321533783 -0.2074479920662613 0.21783513746565908 -0.0941478041666699 0.2795292389515658 0.9953731872274028 0.2319223333608813 -0.13360067908409268 0.5393347005941622 0.9470466581678407 -0.6734876666153284 -0.8684288492507504 -0.1420646149840985 -0.8707289033681813 -0.9676349559295845 -0.7786442145906909 0.4054856960752009 -0.8307265766472995 0.3471677199994705 0.3406293796703883 0.07801260677895838 -0.5711615061624589 0.27061571822800534 -0.681299462005869 -0.764114419976816 -0.06569578713251834 -0.5091405430679146 -0.12436398635864854 -0.3955067338989411 -0.5768482627391662 0.24993943331818502 0.4027136338024435 -0.4557573123385701 -0.918542363772276 0.24783429534473456 0.88635241641254 -0.13410069794847024 0.24882728702741108 0.7933027273842215 -0.20655590566813875 -0.3259047282294225 -0.26743538514350806 0.16849468007507862 0.8004017666796741 -0.22966831276203048 0.7639764482358 -0.8577365212314385 0.4203313293957456 0.20418532033125447 -0.5910148059979363 -0.3066818553734556 -0.641264642793439 -0.9868398965037704 -0.2153375901800465 -0.26583948236856747 -0.6155358952944947 0.9392322709591936 -0.0817209826721732 0.02760107002790213 -0.3309478160490176 0.2340614687676199 0.020497035265284236 0.8526540762958346 -0.9249108435087114 -0.9678178058117948 -0.1415270246254885 -0.9587433399598635 -0.7551591067843397 -0.6198808835684597 0.7457260324211472 0.16612735417788116 -0.15954588407910375 -0.8476460572485753 -0.7701860707216268 -0.2271916206883089 -0.01238827189593028 -0.9468459374273128 -0.22523292232471803 -0.9523786585964853 0.8931972727651019 0.22493453017032006 -0.5321661869046004 -0.26614057032945504 0.27866434195016887 0.5698824082522687 -0.7816154461752429 0.5555133080887966 0.47801690543261444 0.24772089661034213 -0.08771012723505045 -0.7583596548880509 0.38700376730482033 +117 117 4.0497031890344335 3.2232298822990053 4.9228994602769625 5.655558395495067 5.986819341414041 2.700031543551769 5.773193858284777 3.95526104865423 3.833659877576098 4.000112703064485 4.256346639895625 5.017564765412004 5.705540202928659 4.689829780185852 5.69018820218965 4.425389178416618 4.31827062345287 3.588431501486795 6.71254692443665 5.666764782929517 3.3718553147151384 4.060826484797969 4.020011736738417 3.3332345469753446 5.437416394861476 5.735156310074983 3.804824362871318 5.4535121758752725 5.432555237644247 4.221802153709367 3.941134325684163 3.7806016507608264 5.4950377136134145 4.654718098896718 4.951299233210847 4.040468044470403 2.931260042110959 5.8003373514640995 4.566669505779009 4.04943865142649 4.721726628405795 4.553133765140388 3.9733632076174246 3.713576677890866 4.918033186198995 3.2752664470741335 3.6792366717584994 4.848823064299058 5.121238494583234 4.734605529983778 4.5274977600216255 4.735180739848613 3.085917273154486 4.09323441013481 6.080971504120354 4.626980118751873 5.3433930431500825 3.4282966935376544 3.2269944391912695 4.727027705832143 4.664873293424393 5.210446047506629 4.489336328262257 3.962908363505495 4.487217016758457 4.425927347762133 3.2927794252565135 4.812344817514099 5.573552862105024 4.104051995772483 4.629313450403428 5.234248092154916 3.7433352608322683 3.4431748781403853 4.325890703449771 4.587413534874702 4.839484913911317 5.2751445853682775 3.8068441388319343 3.1361932296470774 5.727310059203213 2.4971635599929725 4.758329719148323 6.0043574602411764 4.212294176556608 4.635018512233254 4.7373358231429625 6.362133905279151 5.7573436973661245 5.551308439115527 4.582515336310666 4.041084869378417 4.662592581664787 4.556853078640106 5.507523320316091 4.189134324830847 +117 118 0.7638753022069773 -0.86701529399115 -0.727269407034344 -0.7126690185953688 -0.691495977992822 -0.10492756129951775 -0.6344654862114938 -0.4996879947896191 0.2516982814313553 0.9108517240032432 -0.34968626789650403 -0.33552134227726094 0.32492667078352966 -0.3626501035249141 -0.23892091618918143 -0.04142139134268441 0.12469037765304036 0.2710549313014017 0.4592027359926534 -0.7626755684588364 -0.20797045014063587 -0.027716442059237734 0.4673369818956705 -0.455086110687446 0.6117359271846066 0.5413210291478989 -0.7734622739875179 0.2620555765597561 -0.9735112703690376 0.7541536009258005 0.4670911611688886 0.20078669351549583 -0.4198357036651601 -0.17260136610509225 -0.9944399124386087 -0.24190296290724134 -0.20182334581737393 0.7598221884340102 -0.5578992711489985 0.28302064426473983 -0.7928232122901451 -0.3959947062324878 -0.3491630562041841 0.29535209516180205 -0.775139160241187 0.23095006422664266 -0.6345698690698585 0.6626580406755174 -0.5820171387727862 -0.9891697666252683 -0.09132586465043002 -0.7975555386479551 -0.6815402912398054 0.2701730815761234 -0.9182238539714 -0.8561497829542153 -0.8601407932884064 -0.6589020877080347 0.016744155083977974 0.3487428670613313 0.11276686597702712 0.3331073536706286 -0.6854330938709805 -0.6960641018916525 0.4066959157749932 -0.2640234408122759 -0.1218656730919887 -0.11707845068329514 -0.2452558108167202 0.5942821755212697 0.9071017880329519 -0.4837535097893908 -0.14105941226580243 -0.6760021379898842 0.03458294349810176 -0.09184056275327568 -0.9203028456694395 -0.7576118039125401 -0.45628187229381223 -0.2820942572617158 0.7824690295586261 0.02482744252342295 -0.6553522649591856 0.6170144533614306 -0.7762319909501458 -0.2602290015610711 -0.23379988449947087 0.8061962442299975 -0.8340651103070724 0.3295650526715004 0.17412922325261304 0.22497617048390905 -0.00336907269627984 0.5752466319635492 -0.7049270411208421 0.7994425834050649 +117 136 0.4909252960311128 -0.2126109617311871 0.9406533300102273 -0.2243940520787644 -0.9385233034260818 0.0472921196985947 0.7192747847891294 0.8534213961080155 0.19245956017677313 0.3823227283377115 -0.10305228804273647 0.9043918813494563 -0.9702099912092716 0.41263071398106455 -0.6680728772668632 -0.03554509978075915 -0.9312925595112065 0.11947600354727284 -0.7784938038961062 0.13401928867548984 -0.10848659055634169 -0.674971951522708 -0.45362951728990586 -0.23719687411473056 0.9015786980664919 -0.8354421385982087 0.350987558101866 0.964596949074058 0.9456573478941694 -0.5280743461210036 -0.8426254661265313 -0.8794887995920899 -0.7051170680223551 -0.513478361348451 0.405197003014818 -0.43052572303919945 -0.1698128782343582 0.5623571106882583 -0.5355722879042559 0.3705364683844463 -0.43473000122792116 0.9865169096389916 0.9428593318304348 0.7123214684581443 0.12660001758697415 -0.37528386154675486 -0.4967855184413994 0.2029844408491115 0.990290207760973 0.4738607300979032 0.6359799390634153 -0.4046163858178282 -0.6039982527029175 -0.2683113912566333 0.9747569893825574 -0.5399697667851218 0.23027368198459475 -0.266245172389727 -0.16559631864643531 -0.7873285804543724 -0.4011843327102238 0.9141644142828349 -0.6098737724785768 0.21970538984837584 -0.45858142245130207 -0.9114014472885985 -0.32587028343892577 0.3336320599269731 -0.4291915165354876 -0.8456736451985114 -0.018224174546664917 0.9180408376768849 0.6558969875636018 -0.1711676743697199 -0.60706785319613 -0.8510406656147325 -0.550136700944325 -0.03180779609244322 -0.9614519693094004 0.871855175525702 -0.7682707838112282 -0.055974927909975936 -0.3644233078371055 0.3308478262760428 0.7988214969014069 -0.6141239351040422 0.45578874467378405 0.25472166973127686 0.9420386969692629 -0.7860413874630685 0.9006202999483703 -0.05509657639906984 -0.5825266173667032 0.605466992443108 0.5074231546979839 0.8507002571705229 +117 137 -0.7029653178824693 -0.2827024995159322 0.33557168152946604 -0.3987344806674935 0.6621064205130167 0.9030926916672095 0.41435238891062864 0.2548653936480798 -0.7842135989833443 -0.655023624301184 0.058524089578384286 0.853762025200274 0.3229931023492698 0.12959129773742362 -0.6439932384507805 0.3669186717573183 0.511550567485086 0.12807267284226742 0.5955397148027659 0.8088443734462778 0.42129966678315767 -0.04724899885374634 0.5740228318957334 -0.46988887632453524 -0.39753605098278233 0.7297742185506877 -0.4760338282419776 0.3866725687114281 -0.9993993828832155 0.38453207118218713 -0.6716919988939647 -0.04030365705065475 0.48092564258320114 -0.9627506967796611 -0.7412156822481519 0.5186217463446572 0.41775816145704625 0.25690191638501414 -0.7939112016073051 -0.2215968623612088 -0.5298639740353226 0.20585079199060385 0.1471578926401742 0.29507583005877125 0.6372998620307517 0.8047322094328391 0.6893089388524312 -0.6730173583633812 0.6345499749769092 0.19391595591354926 0.5526222161726764 0.03813027416745052 0.47176314787004636 -0.20049497393236093 0.9865569625946238 -0.42232475282170046 -0.9917247603732342 -0.1756899128158944 -0.11906689333033404 -0.5863339876543345 -0.5068741530515213 -0.31659377831211444 -0.22368102071993912 0.5423242449905943 0.9249790328594014 0.3194125807096371 0.4319550506136707 0.607025984609191 -0.6710026062038557 0.020260993295402763 0.24217774268931458 0.13923780730140622 -0.1660217520700944 0.013206484430009935 0.06590541758390955 -0.4822629583851923 0.15850543360915403 -0.7213230132702773 -0.33875064329503934 0.3006316604329633 0.7778984024463251 0.09276295181319472 0.15854937953652048 0.8293237828789344 -0.09772752646436667 0.4662357435493525 -0.9238101137946753 0.9922159096401981 0.2990492073469422 0.7419121886923463 0.8585166689765451 -0.9753580388886136 -0.8424266184900553 -0.38697930034631023 -0.9235288713951932 0.028849099306035297 +117 138 0.1279079320579879 -0.011766996669760665 -0.01259876829626494 -0.9697553276352484 0.17496497968947167 0.9349759299798597 -0.8682180093580893 -0.12271105760196677 0.19202180693557636 -0.011662713181726403 -0.8578274578227896 -0.12931256743492758 0.9859243357865741 -0.36047589520588885 -0.33522050697765127 0.10098623482407265 0.5239412974428583 -0.3567898852137035 0.9261809784278825 0.4359308496699552 -0.9108862599969383 -0.6218674418876147 -0.7582640687511863 -0.3660644933275581 0.6128097605982767 0.4376212752489359 0.29615199063932596 -0.09259714462714808 0.560813904601642 -0.004098214875080108 -0.8838543206215537 0.9854668672124147 0.9309265895339724 0.6288475959082829 0.2973589125316065 -0.445845697762564 -0.6231410828230555 0.9615610903344183 0.21381483149797575 0.7955382201709842 -0.37005685295037427 0.8738347592686486 -0.6232627242859066 0.6768267848991434 -0.5598933038057454 -0.5716537634261103 -0.2241300985235477 -0.8812190812603882 0.8119529444593272 -0.412127089059652 -0.6045935122918173 -0.6785596773733389 -0.09260558481716719 0.8736771514012298 0.27583175871027277 0.15366459394200693 -0.5277540861906587 -0.24779642890886144 0.35170528054954797 0.014498037037313116 -0.6364891644953896 -0.7412732820544112 -0.8787375184838451 -0.6891968689522763 -0.4330934974697833 0.7879267682942428 0.6370332484612882 -0.4746165360443322 -0.4767400328732023 0.688073271275885 -0.9574678100441107 -0.5514028670019331 0.4777707653395762 0.9360981361956975 0.3399129385089672 -0.7809987657720774 0.604972210016967 0.5156215839350256 0.823217608657699 -0.2051948678512061 -0.2744924675459781 -0.7253795978794999 -0.49415385931113276 0.9602900121685931 -0.4701640850969 -0.9997458370893921 -0.8035684740278224 0.9696705313200586 -0.37046712492454104 0.7579946212887254 -0.6224801838575058 0.7302566784656157 -0.9178537057558867 0.9209353943949949 -0.6914686547081994 -0.15826258226437595 +118 97 -0.8251143310877516 -0.5083382428082941 -0.2867302881886822 0.3496208244969654 -0.3728025187121795 0.9459110822623025 0.32252038122959914 0.17584823561079643 -0.9605162863976071 -0.652753678721629 -0.1769261415374177 0.8654538530884892 -0.12044688470551979 0.9797380251949457 -0.5263807913013083 -0.4127681247251125 0.720386969857906 -0.19835019949143096 -0.07269036333570189 -0.392061687267798 -0.4927109008703454 -0.9953316431895662 -0.6994343746128693 0.9925983475645239 0.7551299788233639 -0.44820558598656235 -0.5705244931566502 0.10397108746242623 -0.8921935104462004 0.9232890756286751 0.8846953994920363 -0.9852242395484945 -0.5108008000635558 0.6118060702910366 0.3508483837153027 -0.7414884733032128 0.9042812642365958 -0.5416028555754435 -0.42008732659698333 0.8418245892150631 0.2420443254722584 -0.152511432064093 -0.3844587824076229 -0.6791675594673219 -0.23796841276699765 -0.7933165537777884 -0.6906910925662351 0.8054491180972145 0.5698480375818225 -0.2152478671617406 0.2574992497248618 0.4030201148227073 0.8506211906320458 0.25458556180464975 0.6964896689815145 -0.83477053555852 -0.8869224760439678 -0.18118366419376009 -0.019694711354950822 -0.6148448050347046 0.28756903465891837 -0.3880151644284773 -0.747110463471089 0.009426042014103242 -0.9085707263478513 -0.20797565658631978 0.8853478322188937 0.9245052004324217 0.1149440994894031 0.4343791077204229 -0.15601259347639806 -0.8294946523335225 -0.08405764264303284 -0.6299877839396504 -0.38630851271805033 -0.4395866304979057 0.7100284923474245 0.5325470787509854 -0.42914025575515224 -0.3281702458566629 0.8116046165026929 -0.33488303719150014 0.875269658420825 0.28940263588385684 0.9141190060678985 0.5739049391335225 0.17425100708217767 -0.5573737704533042 0.7393087863216259 -0.08829676896764593 -0.17402967564430294 -0.9125655016076948 -0.8905299629141252 -0.34579718361838574 -0.19374619427480622 -0.5227272945000394 +118 98 -0.2937935184440217 0.8195736715043214 0.6575603539164054 -0.3639719909707755 0.05578702903960853 0.3135315601359052 -0.46945941946127134 -0.3244194575264914 0.006896038615831657 0.34236448503264016 -0.964850111768464 -0.7488365447437131 -0.9423316751090807 -0.4100345146931019 -0.6923496205943576 0.18409905695967277 0.29711661185296045 -0.9336352806512462 0.3952941973712123 0.10235357144786694 -0.5873774804438587 0.3543535012241563 -0.5054163777573517 0.9955255885050873 -0.663170213891674 0.49260583454624296 -0.8162898131736576 -0.29980949077147834 -0.7766781366459512 0.26244970499748543 0.9809883486998758 0.9170987160354556 0.18136367565285072 0.37669114775265977 -0.956725154225115 0.28343523952489447 -0.8709614494641931 -0.8212991458402557 0.766501275449363 -0.7599920051364562 -0.09941816814801752 0.848904952235173 -0.14854298168792668 -0.20895678469495227 -0.3764565028914688 -0.17552074458780464 0.2518259498702069 0.2126113387787547 0.20822727796118334 -0.4624931377234889 -0.6729659042882057 0.8812859980014427 0.9758621386331625 -0.9452714615425937 0.44009238355499236 0.42666759045184266 -0.8916629356697452 0.25933116974244874 0.8708705795970104 -0.464740049348888 0.23412947401354378 0.04582652113822494 0.5253405393846464 0.6494664860168438 -0.9726886741908178 0.9309628228464495 -0.46084900708356114 -0.6047219133951645 -0.04155665444278189 0.33495090849703146 0.3099388443218358 0.8215445031416468 -0.8617507222509921 -0.7689016917260183 -0.7585912301532063 0.10582130812266621 -0.9279286831367364 -0.1636429994326789 0.9056034808823721 0.15415589735476454 0.9192811305942663 0.9940931211253046 -0.3365776453727951 0.41945575780896016 0.7609867641621817 0.3210991635530325 0.040017728436093636 0.4291525198083106 0.9136879673201861 -0.7687444271158617 -0.056010665565928486 0.9672676394652007 -0.7877990257847494 -0.2672826348227213 0.9513868534215513 0.13930652002594224 +118 99 0.12666093303377512 -0.9053826932159297 0.21468658960791953 -0.2991048814840136 0.6485789098229753 -0.5586757143929917 0.5213698099597133 0.449001481970668 -0.05248075778092187 0.5108788568851439 -0.017988602067812387 -0.14243188573467758 -0.17590521162992934 0.6487678655147902 -0.6666227642831 0.08579621860703757 0.17932959324594488 0.7810592830043213 0.9257479015296894 0.6388400345604397 -0.9322053149951466 -0.1144629152740182 -0.7105675314292925 0.5123960996603671 -0.18316356714035242 0.6283839977740855 0.2901939212244278 -0.035492711796669685 0.7411854253211261 0.24055915677982487 0.06249491946960073 0.3404136299242422 -0.2083779101677612 0.8719756196298534 0.393767123704585 -0.8275768818264762 -0.005767353997875979 0.29252074497070213 0.5354781339418841 0.6209389124030626 0.713683708320306 -0.5102160313334356 0.5582100108543946 -0.9505340563771019 0.8840229331514011 0.746652762701641 -0.040717392323115 -0.4496143249179114 0.7107586755054498 0.7020275594631082 -0.06572912820795995 -0.3742065841001314 -0.7263996246399758 0.15352649121811313 -0.3761505690531608 -0.11104817979368597 0.8395207712758896 -0.8082836312182333 0.0794904421996998 0.10202053302224545 -0.7336309351939916 0.21731767581946482 0.36613208275792797 -0.2420925212675884 -0.8465933485319146 0.2472100005617901 0.6886672622237351 0.11962386806678937 0.08097377310816634 -0.7177835344866808 -0.7530072143166657 -0.8663760417783806 0.3552015365681338 0.8035332960110111 -0.0535865124381647 -0.6911439453426493 0.7462804885670473 0.3566851568492142 -0.46975328362070945 -0.3253903868637358 -0.4364604639582388 0.989684811228277 0.1726714048655087 -0.013686404433850274 0.5465683882705592 -0.7533436129638305 -0.16559235675150852 -0.1955830623165007 0.10541496958036412 -0.3013522637928987 -0.40947011971837477 0.09361977913668551 -0.7583720306584785 -0.6262509737534065 0.335642068418025 -0.865257736868249 +118 117 0.7638753022069773 -0.86701529399115 -0.727269407034344 -0.7126690185953688 -0.691495977992822 -0.10492756129951775 -0.6344654862114938 -0.4996879947896191 0.2516982814313553 0.9108517240032432 -0.34968626789650403 -0.33552134227726094 0.32492667078352966 -0.3626501035249141 -0.23892091618918143 -0.04142139134268441 0.12469037765304036 0.2710549313014017 0.4592027359926534 -0.7626755684588364 -0.20797045014063587 -0.027716442059237734 0.4673369818956705 -0.455086110687446 0.6117359271846066 0.5413210291478989 -0.7734622739875179 0.2620555765597561 -0.9735112703690376 0.7541536009258005 0.4670911611688886 0.20078669351549583 -0.4198357036651601 -0.17260136610509225 -0.9944399124386087 -0.24190296290724134 -0.20182334581737393 0.7598221884340102 -0.5578992711489985 0.28302064426473983 -0.7928232122901451 -0.3959947062324878 -0.3491630562041841 0.29535209516180205 -0.775139160241187 0.23095006422664266 -0.6345698690698585 0.6626580406755174 -0.5820171387727862 -0.9891697666252683 -0.09132586465043002 -0.7975555386479551 -0.6815402912398054 0.2701730815761234 -0.9182238539714 -0.8561497829542153 -0.8601407932884064 -0.6589020877080347 0.016744155083977974 0.3487428670613313 0.11276686597702712 0.3331073536706286 -0.6854330938709805 -0.6960641018916525 0.4066959157749932 -0.2640234408122759 -0.1218656730919887 -0.11707845068329514 -0.2452558108167202 0.5942821755212697 0.9071017880329519 -0.4837535097893908 -0.14105941226580243 -0.6760021379898842 0.03458294349810176 -0.09184056275327568 -0.9203028456694395 -0.7576118039125401 -0.45628187229381223 -0.2820942572617158 0.7824690295586261 0.02482744252342295 -0.6553522649591856 0.6170144533614306 -0.7762319909501458 -0.2602290015610711 -0.23379988449947087 0.8061962442299975 -0.8340651103070724 0.3295650526715004 0.17412922325261304 0.22497617048390905 -0.00336907269627984 0.5752466319635492 -0.7049270411208421 0.7994425834050649 +118 118 4.659847154608045 6.069718378536789 4.682746237990173 3.980438292691354 3.336923992803298 4.119020782645048 4.739773895761767 3.5022950695793433 4.301848711466154 4.570578372195989 3.850888503925133 4.518429849182036 3.6904107084717745 5.145196782962172 4.580340802182694 3.913938464106545 2.9364872957152475 5.2307231680689155 3.3610342901325114 4.9102308335151434 5.056825271593447 3.106224999703552 4.298487510237826 5.051569175789184 4.778123090716993 3.7993930669450084 5.398136048401403 3.478095421657354 6.60577303356532 3.454260856221702 4.862273011543857 4.907648777143785 4.390477897830679 5.7684752258896825 5.839019723437805 5.1349098264128505 5.273935618356477 6.03934510266558 4.684739621026289 5.442124728696667 3.971458245496253 4.747410449442453 3.828479420086003 4.134349820427209 4.541477683532342 5.303216032663046 3.320370741148641 4.866145294015825 3.864717102599764 4.517186968407776 3.746568907397452 5.2388681761615485 5.454876923368012 3.592599801421908 4.608449153727679 4.9819173680054 5.669974192586444 5.534145155789051 3.429677325535046 3.2514502705096335 3.9875835539076014 2.946393443808488 5.18408108509557 3.998592766647448 5.919425030755788 4.125995265189991 4.689771736938896 4.97577514618038 2.647456263939146 3.7264827623671337 4.52803368348709 5.204551285190495 4.190816086842403 4.732614858896262 2.5694395531446363 4.067088042861405 6.559793153730479 3.2373091459416226 3.1982554843822704 3.4902056852701033 5.572970195898192 4.834935999874051 4.493531980772341 5.681208191212519 5.7675442127551495 4.365496150844172 3.7143665362946434 3.103842073747421 5.377386669257341 4.285532354471355 3.6015863151467524 4.563423217702697 5.654395832705794 5.04245916683023 4.951014816673929 5.013604760076381 +118 119 0.23063232608636253 0.367171066199405 -0.45743398160556215 0.9181954158000423 0.6503813967908116 0.25044771649994946 -0.39646895958417283 0.5169664213131211 0.698780575196833 -0.04654181590279949 0.3282071539788569 -0.43731765280883783 -0.3484007906977342 -0.26587830232209453 -0.6747228396583809 -0.6542842679864589 0.18620290105010628 0.5140437623880825 -0.1674518862383949 -0.5676509312021916 -0.5742911992315596 -0.6358757992890172 -0.8913158358845619 0.012028497618839173 -0.4049021718683352 -0.5936448400444698 0.050104324123677824 0.7938486495897341 0.26781212221362116 -0.24980869445438114 0.4857476552628792 -0.8631070545729711 -0.4970869707416372 -0.6131497324627908 0.6951903270941109 0.6485898777145576 -0.8780999224918189 0.780771485248424 0.45207661619411166 -0.6248488742563834 -0.05180067709617564 -0.8633786246817676 0.6685871000737624 -0.04102381222202922 0.7720434784173467 0.3887556685188922 -0.5193062916730598 0.5034799898277253 -0.27056887041716404 -0.23187857415846036 -0.5312496177940729 -0.6290306415691089 0.45910014603307836 0.20595455512518202 0.7791444021761869 -0.624011445173817 0.5170798933859966 0.9860976468593923 0.4389316200058726 -0.14610345753465603 0.593196917604234 0.2777609264054146 -0.697280552608815 0.765879820527839 0.5397383992966436 0.22672435396450363 -0.7578623015187556 0.8385126763431272 -0.8247118090710064 -0.2725671247560155 -0.7938927984928124 -0.6600157151571928 -0.45537631906102205 -0.022401433646275892 -0.24627281648405575 -0.62575722852691 -0.8552384762060949 0.14647166953371693 -0.06282711597606117 -0.8887855239137017 0.7992084595738578 -0.6490286981997879 0.563809356611261 -0.8464624699259629 0.5242528150828585 -0.2798549202621219 -0.7301952480233229 0.15645787141988543 0.5593521246608568 -0.6549562900221384 -0.6487961607744579 0.3045855157192905 0.9400120738586661 0.17765517862420577 -0.2750667352245586 -0.17138649344609136 +118 137 0.8706528152227935 0.8533491643464324 0.5590357910980914 -0.7891863361697391 -0.5472596124960942 0.8722532719891336 0.37954658439197164 -0.1198792403519946 -0.887796874014122 0.06089295101051495 0.4747641414335677 -0.5874605948217926 -0.4475439414291287 0.5424967983849702 -0.22318733112735645 -0.5624946279450833 -0.40328287669112584 0.7032393587250991 0.10120580360602616 0.9526843387466546 -0.7296795141512835 -0.056215926381777415 -0.052256239884389766 0.3126917960315734 0.6309435811543398 0.27899498707465553 0.9857740755508002 0.3950967842500923 -0.8750372311903964 0.09921419093173522 0.11562452478247254 0.9831985899908451 -0.8620873409601717 -0.9336851047970749 -0.45481394425711974 0.8771229241037373 -0.5996312484817405 -0.8662104733034308 -0.46617494598765785 -0.9365416630909575 0.6284400809930772 -0.6096452862217283 0.6985085241959188 -0.2285568441507142 -0.7411450731353793 -0.8471908976387854 -0.1649107381701982 0.48083177547075007 0.44384316708927707 -0.5811426921532823 0.5700276774765265 -0.48246675034850073 -0.8927338785530872 -0.42272795187050427 -0.4810179484062449 0.79014709548641 -0.4889500218746632 0.7941513125492645 -0.3069466314397691 0.512632922047112 0.835863153563271 0.5843886559508253 -0.6726989233784408 -0.7730747103141422 -0.5644302164024895 0.5713524692103382 0.11235460694215349 0.8041963934588967 -0.280193725771406 0.9333726986930648 -0.15224317342104943 -0.4657375928496157 0.9297448297237618 -0.6148962147307078 -0.6577222411827874 -0.637731225780559 0.848474258841464 -0.2559226718476695 0.0868853399369307 -0.10359326769056221 -0.363728378568297 -0.6875559888715177 -0.3828479271959131 0.7815812693758455 -0.6862692849404997 -0.9140589328606634 0.08817503738979715 0.15701579010679056 0.12086635388314337 -0.18903110474848805 0.8846662241240428 -0.6852946027866869 -0.7867622366481213 -0.6718151691844398 -0.2729047064098775 0.4899794910608193 +118 138 0.8807322891598499 0.34393656549887797 0.5064430919840699 0.27458123085048447 0.3339649405953351 0.1423268962683073 -0.4786702265562084 -0.8501132762065331 -0.07048847950612935 -0.9392347530271996 0.34161716862947444 -0.09729346336632139 -0.44118517558452197 0.4669781902521122 -0.23653239054870534 0.7030172688151972 -0.4057059299385688 -0.8337305351911617 -0.38999023326755955 -0.3072835023820868 -0.16657558174154263 -0.0012919637881416701 -0.5941284332079446 0.214316762765699 -0.7415047079467714 0.19849501701311612 0.8384643760181685 0.2999852385951325 -0.8676910780010951 0.22808141407886162 -0.8176627201281992 -0.18000474755099005 0.7851467120842865 -0.8475598473528556 -0.5591480211019675 0.8317912961610561 -0.8045566076973774 0.9969861179759871 -0.7453903462817943 0.03447412730202615 -0.4701736637492595 0.6397860902503549 -0.44105997818983855 0.6968511182982782 -0.40992534188187046 0.6029797280383873 -0.2855602639850512 -0.6956104069310032 0.042592803826873915 -0.8694318508514196 -0.7743513243135287 -0.4895047864925828 0.16588423818793907 -0.7853778515003118 -0.07675311746534397 0.17730858442539188 -0.09815497684206531 -0.7367894297080158 -0.9021808884886144 0.04139343169342413 -0.11955794811879561 0.3425896420087533 0.8353703254453708 0.3021286542893853 0.024904088815998815 -0.4882495535974132 0.7565944654788515 -0.5655633339696526 -0.2447694341572113 0.06455814638520052 0.7172634367945356 -0.9419260923254129 -0.9956003517896206 -0.4497561002659183 0.13862241506699968 -0.30329842171574595 0.26975386233828025 -0.34705065404933544 0.3812558853941166 0.481520549417376 -0.3910411094305817 -0.43528945021143883 0.09189296979895523 0.8274569965525296 -0.02856077630801268 -0.41180698707666785 -0.6852938359024383 -0.2605029952914335 -0.4588417127804403 -0.7752239917666346 0.2322875160429294 -0.343110376807775 -0.3788062319009873 -0.909991940542781 0.5869586575319876 -0.891039720805525 +118 139 0.3348824485171207 -0.5569862330790742 0.5963592281848349 0.04189702272255791 -0.02631274539881101 -0.07424817414813512 -0.9306654902392726 -0.03316412425212656 -0.9618599250492113 0.14864706511005732 0.5012833026932724 -0.7410625716003172 -0.3210881036742945 0.8107098204377279 -0.33393765643979845 0.7406657480142689 -0.19964221025458495 -0.021703375501860522 0.2152285562060685 -0.5831243459859348 0.9913945110531965 -0.6989575358196729 0.23427940555686178 0.7787397714186255 0.17633472221761703 0.4995780373969696 0.8072750619822993 0.6138222294018749 0.6300015633725944 0.3604471507079994 -0.5255074009628418 0.07485891146210943 0.15215629544702458 -0.821093192214347 -0.6844157310020977 0.24208497386984829 -0.9717792083741135 -0.9381097082268712 -0.10313207345224584 -0.5042593521215843 -0.7634485529912891 -0.26766636417505585 -0.28284485462166686 -0.45545883355499805 -0.26113530913966065 -0.5752186612342467 0.4270943692305509 0.20421810967928367 0.46570092431440036 -0.37871078686233695 -0.12953521202285945 0.39810444249319876 0.4212665512988554 0.43561973751957384 0.24314037461021876 0.481675995110479 -0.8017844735929434 0.3294722202075919 -0.7631893183023444 -0.8619935655507895 0.8878894063081135 0.6016015689349119 0.4277704072333759 0.14346381519620688 0.7328303294435214 -0.9046267590987471 -0.34326848968519874 0.78734597112267 -0.6087979966241532 -0.2690070947875931 0.3358040634971835 0.12339854758676783 0.01404823458646498 0.37209823454770463 0.009735008799408362 -0.27486717518109893 0.9246310315903072 0.24956478097978785 -0.02813083884939127 0.5126752725234718 0.9459317100481399 0.09453669536097209 -0.6486639118173516 0.9640884687983904 0.5882350009479409 -0.21561176346347288 -0.9872245335594043 0.4122507346412183 0.9759149982304876 -0.4067592374690008 -0.5484907701932873 -0.7146321682615351 0.6252309290681615 0.9462707440268527 0.7280560079298277 0.1549301129451126 +119 98 0.2662719518107337 0.4240863872396845 -0.06547034731980972 -0.8280442047279055 0.809548607791956 0.0006520450096705321 -0.2693460118141602 0.0021540256216028286 0.7606527575916748 0.4649578175981959 0.5861938718735615 0.8719177589761002 -0.28266471519419856 0.18456493885777103 -0.3838191325684406 0.8002101961772481 0.08034645029871257 0.03009260362847299 -0.8630260924688571 0.18054923558389468 -0.8018501651445338 0.08296275865684444 -0.3907114175356341 0.394821114014718 -0.1782899326319476 0.6569363450732542 0.3699534623273555 -0.5638447847599863 0.21778900737587725 -0.08172362349471451 -0.46261278564636066 0.9203920534341952 -0.896141246738936 -0.30498654278089865 0.6808374790639051 0.761555326955613 -0.38414300175048655 0.5719007856449019 -0.20144894108914846 -0.42684763646460544 0.9244143898416368 -0.17640533673374437 -0.2684782071585208 -0.3467168277181141 0.1611462733575888 -0.2946056672591275 -0.04039480772573589 -0.3201382526412586 0.6276104928903861 -0.6293982126980355 0.08965925233949812 0.7212742617460768 -0.6562740118715398 0.7235431305949216 -0.8313576744476996 0.5502897591589466 0.7344939176051737 -0.9569916921518558 0.3272549331497343 0.9978704578050412 0.009541357545164608 0.7121630737227123 0.3927991337768162 0.5131848044186724 0.9801992317458712 0.10438870132399414 -0.4529428021250932 0.030149945787177668 -0.46772746533377485 0.08380373687048026 0.6933840429371825 -0.8666981753640641 0.5696556809161621 -0.2160345008582183 0.8103212078021338 -0.6124307252995622 -0.6047993441046493 -0.4284678927971619 -0.4363810390643972 -0.7179760962280113 0.19334614636781255 0.5983846630329828 0.6207838546142481 0.9655873974838562 0.0744382904546459 0.8774448884059696 -0.8632368866331224 -0.35124372728859177 0.5186133143674294 -0.49019692005285465 -0.08847986792098661 -0.8653214427894995 0.9051825094640373 0.6169905512238658 0.04835554840605005 -0.5507490506380863 +119 99 0.6177304485132549 -0.16383209167482127 -0.59681108840693 0.8218026288618048 -0.8272518025418842 0.03253911855414504 0.00752421316185603 -0.7705035083022587 0.5159160649889063 -0.9758425324760014 -0.3806197919986454 -0.3981149790471281 -0.48327050792612414 0.28737131866601295 0.5625650507477797 0.7483465536431555 -0.31985413502243465 -0.08576780366332115 0.05909972851399692 -0.18353733385514936 -0.8069454363279418 -0.5429976892758508 0.6438645764508628 0.30843816015065206 0.9612969425294959 -0.30747948321374596 0.7307534626253489 -0.2879792814268691 0.5848364708932752 0.8975597331154253 -0.8917773483330709 -0.3653695182485548 -0.12432954114160544 0.2996599238531985 -0.761032943171079 0.14779388666170012 0.8522070407830902 0.528776144476101 0.8654390101834093 -0.16601553952337555 0.7927823441030748 0.9890979539640867 -0.09283526598073899 0.49938528312957087 0.49548389983091856 -0.3382632098727436 -0.8926631809304908 -0.380221232604798 -0.5082244709008654 -0.7108523764398942 0.6854084165906318 0.420450526548533 0.3528854435748401 0.1526000186379639 0.7494783151342881 0.6275682805536411 0.8496217520314748 0.39947406024075205 -0.839094623442026 -0.1312074216308745 0.856597384208075 0.34042591256550625 -0.721904593335281 -0.31396895187566476 0.03784693217670898 0.09145832989092662 0.43618627753933414 -0.6093699829408625 -0.8258109735693477 -0.05731902061502181 -0.6353125261025108 -0.06873792161105574 -0.04630295491634673 -0.9603977610265155 -0.24028208495050496 0.08857562086522575 -0.8933756096659269 0.6411980779075936 0.9259108949332244 0.17972260514444982 -0.9580718818739269 -0.35825653086505227 0.2576234023513455 -0.7248945995519867 0.8240628284437816 -0.24934284442429977 -0.6110956954485007 0.4544221046870789 -0.5598176959151231 0.576213604830659 0.5393498326293769 0.35424199194365813 -0.6203110887605052 -0.7507840470186122 0.10946942155403039 0.6886164206562357 +119 100 -0.36089001654992847 -0.2600629871327895 0.5173887396620598 0.028894478843649818 -0.6611106919558074 0.8903313432592039 -0.2794489259750388 0.7112780576836046 -0.6607413935252353 -0.6314985518009997 -0.03156797805629297 0.639535942786126 0.8453070979922228 0.24950667216595712 -0.4404332764795449 0.07163034972456939 -0.7219871086263947 -0.11663528828999259 -0.5883112937536248 0.03137463998457646 -0.2717831487261173 0.023826538889879068 -0.2757401965024264 -0.06901336466299446 -0.5307348917842238 -0.4832619442415744 0.6628603849463564 0.8375464313641754 0.4969300025105612 -0.9102536042436309 0.034166221302494915 0.6099275190819715 -0.3687013529373999 0.7218690662314258 0.9314002491892643 -0.06757515200340114 0.11825224162669512 0.9513060277019796 -0.8526897751119202 0.04151823317924408 0.9071018839033842 0.8242748131473914 -0.10523224321706892 -0.7215906511945036 0.7123737160592256 -0.940336383361144 0.17692422247812356 0.2843275688743139 -0.03728526828106804 0.10524502171115135 0.19204084765988694 0.04919579824512654 0.811590975553595 0.7338702023700878 0.26257565885959777 -0.3567774918368136 0.467506148040463 0.35617983944896614 0.19402625504084892 0.2975282192888071 -0.42354969392136765 -0.26692346528716016 -0.40332046977561653 0.672746796715674 -0.6239050079865993 -0.6924660141411993 0.8425803311839675 0.632142919348819 -0.6649809686375239 0.012316825105820994 -0.638359341031842 -0.3528100408316319 -0.1635790346511261 0.3520710146497017 -0.7207225112310027 0.06563975017552837 0.774523877985388 0.984819650912109 0.24029636136176236 -0.8378851876905509 0.7831393189258415 0.7710791472509486 -0.9678282993194973 -0.789858840311674 -0.8323484328105522 -0.10470113323069663 0.08964466594762777 -0.6155380536348414 0.753063139616662 -0.778370140164717 0.8593743662834288 0.2974126529201049 -0.36510635139326175 -0.8085682112420749 0.38520637457918716 -0.924165089644341 +119 118 0.23063232608636253 0.367171066199405 -0.45743398160556215 0.9181954158000423 0.6503813967908116 0.25044771649994946 -0.39646895958417283 0.5169664213131211 0.698780575196833 -0.04654181590279949 0.3282071539788569 -0.43731765280883783 -0.3484007906977342 -0.26587830232209453 -0.6747228396583809 -0.6542842679864589 0.18620290105010628 0.5140437623880825 -0.1674518862383949 -0.5676509312021916 -0.5742911992315596 -0.6358757992890172 -0.8913158358845619 0.012028497618839173 -0.4049021718683352 -0.5936448400444698 0.050104324123677824 0.7938486495897341 0.26781212221362116 -0.24980869445438114 0.4857476552628792 -0.8631070545729711 -0.4970869707416372 -0.6131497324627908 0.6951903270941109 0.6485898777145576 -0.8780999224918189 0.780771485248424 0.45207661619411166 -0.6248488742563834 -0.05180067709617564 -0.8633786246817676 0.6685871000737624 -0.04102381222202922 0.7720434784173467 0.3887556685188922 -0.5193062916730598 0.5034799898277253 -0.27056887041716404 -0.23187857415846036 -0.5312496177940729 -0.6290306415691089 0.45910014603307836 0.20595455512518202 0.7791444021761869 -0.624011445173817 0.5170798933859966 0.9860976468593923 0.4389316200058726 -0.14610345753465603 0.593196917604234 0.2777609264054146 -0.697280552608815 0.765879820527839 0.5397383992966436 0.22672435396450363 -0.7578623015187556 0.8385126763431272 -0.8247118090710064 -0.2725671247560155 -0.7938927984928124 -0.6600157151571928 -0.45537631906102205 -0.022401433646275892 -0.24627281648405575 -0.62575722852691 -0.8552384762060949 0.14647166953371693 -0.06282711597606117 -0.8887855239137017 0.7992084595738578 -0.6490286981997879 0.563809356611261 -0.8464624699259629 0.5242528150828585 -0.2798549202621219 -0.7301952480233229 0.15645787141988543 0.5593521246608568 -0.6549562900221384 -0.6487961607744579 0.3045855157192905 0.9400120738586661 0.17765517862420577 -0.2750667352245586 -0.17138649344609136 +119 119 2.51188424534572 4.476757542879183 4.739477307886871 4.411591916897321 5.955585247849574 3.2693221221925493 3.28941044211944 4.6577541228784565 5.694688272527323 4.679998719356683 4.249678213030472 4.736954485293748 5.288341393496272 3.2818010881220787 3.813428773745473 3.769625514391293 2.5504790668152646 3.733666406425371 5.159509389647104 3.0243966474248998 4.621674392464877 3.9249384159085006 3.9114962689174098 3.1059519466968406 4.624215512931638 5.015447220243379 3.8263934244497086 4.179998454065727 4.233003147745208 4.945470913021654 4.340286468995145 5.056366929840213 5.389396929032717 3.338447965260066 4.873720119265045 4.197075356644199 4.294307863652914 4.7854498400914744 5.165927023560042 4.36783574378276 5.208592746588661 7.013044528583187 3.817281915721048 3.790199939581491 4.793012527509427 4.334022781120453 5.023605140655814 4.307091021631858 3.6964827397876547 4.479654416084267 3.6750149049214462 4.8643411419276354 5.22976018872639 4.827228320491608 4.139607268236561 5.166428763031401 5.449696814082481 5.342537347401076 3.8576363687639237 3.787788746729967 4.39443776829075 4.394229526197647 5.803264413445975 4.938990388505759 5.4120151662115745 2.815031950353724 5.007595319315918 4.791244291081608 5.588084116074722 3.6264999976037817 5.574478978414114 5.440904265449573 2.9014704028562903 4.573580493426459 4.880429917514781 3.015145978966936 5.865320970923785 3.7253577419849675 4.189076006221527 6.094188718274777 5.984381070116955 5.408307937283318 4.661202947531795 7.9728265609318685 4.94010522791704 3.756745066361993 5.815038670129395 4.545932247037171 4.122935353921989 5.284500428234027 4.718427042016807 5.360344431874457 5.29780564670218 4.083310577943447 3.5863183198440507 4.807740294325174 +119 120 0.129926240051901 -0.3068018107435715 -0.5356036019617625 0.9692143164422082 0.9653213554615707 -0.4518978311418238 -0.1554932604821755 -0.6177568403275115 -0.6804178136692796 -0.8447130634225342 -0.8681125030409438 -0.9743449415619259 0.3812371599470967 0.483655827927272 0.12282554964260473 -0.7236878227960981 -0.347468209726016 0.5633843779328305 -0.9880446712203654 0.14686865505713453 0.24241659324321763 -0.3366762758229809 -0.5705471863032139 -0.17212775517305756 -0.4832604345575091 0.8829860905197102 0.2095311825221271 0.7497056819063701 0.4193839823185683 0.36487210778638923 0.2922463384571887 -0.9132038157572477 0.5654078368435309 -0.34564237886165383 -0.4251354678092809 0.3747032471149123 0.9663781340858897 0.32906753885085527 0.5104809943819919 -0.9497363889868733 0.89325177669007 0.9593815830562438 -0.7039925716029471 0.7151341096429709 -0.45280782694996713 0.4883922887557479 0.6642100446600321 -0.8805663549447831 -0.7150515396857982 0.48685174635664197 -0.5814898516077383 0.9931991760880117 -0.7215172171346369 -0.5635241699820246 0.1735586545503791 0.06770705829530455 -0.9769762679378275 0.6067879065482382 0.4125805848012678 0.4394928254919832 0.7057081959127274 0.5576314021672362 -0.9313811885334533 -0.7510226271697138 -0.16613064488003992 -0.6230384570333902 0.15518634827533395 -0.5067066696633262 -0.28803796247485836 0.7356361281581476 0.60854069681025 0.8389546557070517 -0.40500616281501256 0.5715837096046597 0.4632001937700376 -0.03527329852325689 -0.12718279957427714 -0.4838998570055397 0.6315542158925433 -0.3701357598827555 -0.5685687518863229 0.4159295389457791 -0.6703351872692993 0.9535783485814959 -0.8347206299169228 0.5757958870897057 -0.8616510756160047 0.5289512422950915 -0.4561096564226155 0.527955066508609 0.5807312133696723 -0.5028170694576717 0.39201307595172086 -0.3553683365154401 0.961579249594972 -0.4366690872074799 +119 138 0.3145909008870411 0.7727835170744417 0.8477227726220056 -0.5054745374836864 -0.5711702411666888 0.24819979960975513 0.868508428672339 0.28157023665592384 -0.5828232044890795 -0.6304684606742776 0.011933037613905517 0.30057814387432935 0.9186420336295056 -0.9107362843448787 -0.6010488292449592 -0.3431508135770449 0.15839950901589273 0.6962380554047021 -0.7390151593168672 -0.035204849455577 0.3437593524826883 0.4341022950911495 -0.5491318337520046 0.2794864605432481 0.1933689751178822 0.06125455389915424 0.8005700098333755 0.3438178803703016 0.5527823265352199 -0.9049503681719766 -0.48980679394315585 0.5313869188764917 0.7785780531033897 0.3717027071203052 -0.36177274447903884 0.8529701487310397 -0.2763662235119113 0.5231638972827801 -0.11493830543995953 -0.6651631085249357 0.8875322404670345 -0.9975496516988751 0.38867241358165616 0.45920796065406955 -0.18339929537823174 -0.8917887507380766 -0.7335247194815988 0.5630273645809638 0.6306028153218812 -0.47568500594360663 -0.051560522613671944 0.5467554395999421 0.9897021787714431 0.8116671113178549 -0.6735547926525023 -0.7522155373277424 0.8349495558998827 0.6117766262930229 -0.19234884911714611 0.6425210761061655 0.5335649301650567 0.25283583376648977 0.6989517962582072 -0.37139152239158446 -0.7147567318321078 -0.5045386377134613 -0.434789654912886 0.11037301505625807 -0.367813967293664 -0.526908344038183 -0.9900423345797158 -0.8806845263433458 -0.09308372024898737 -0.5313311265574963 -0.6445016985152474 -0.49074677698228353 0.05400857602439757 0.3199650878109268 0.3177169783627509 -0.8823499607769949 0.5215877967197498 -0.16480404867617882 0.19102465420390424 -0.9487750723364905 0.37528772662299903 0.13198640555885177 0.5291381143944809 0.5848700770472501 -0.5149922420689763 -0.7955655339935257 -0.7721306412641871 -0.6067500048465353 -0.3991455896992586 -0.5213319467969719 0.03935311782738338 0.1493245413266273 +119 139 -0.09300726253734659 0.9914441100177891 0.5908789425903633 0.08247730516418805 0.9750204958408231 0.38866171660334525 0.41240457178809664 -0.8306461988405565 -0.7333210005552222 -0.8702180822397865 0.6492167014999985 -0.6479536839063715 -0.273658349243032 0.5855373663823149 0.688828824671911 0.0008033319105833492 0.2835703112302188 -0.0448999354744386 0.39206310798313915 0.8136807420334204 -0.38628830028835326 0.8596573277205353 0.0037750564243133056 0.5852514939200921 0.9719459704597326 0.3035941166851899 -0.7562832874535641 0.023864092833200568 0.7393019541929946 0.7938398320915774 0.8652151066501546 0.25618178592671303 -0.617577751282081 0.0890497062789164 -0.3568258218560405 0.3429675630226654 -0.5149187652939342 -0.24276861076341372 0.860091232798563 -0.5672976597542991 0.19537710339893022 0.7960898203891291 -0.49168736807834135 -0.06293636632420241 0.4310255148576103 0.26858735588086335 -0.8276053165459731 0.7546714992140706 -0.09556122283330915 -0.971180468707532 0.6393998948031305 0.6466570254638586 0.63460130490629 0.3158154063628147 0.045209075319243786 0.808860153855882 0.3444801097555148 -0.3782631372615619 -0.8886375653625889 -0.532494152356406 -0.13449826141129906 -0.6570580257428742 -0.9556956280005826 0.7926121873340504 0.9895927842469423 0.05082239206923078 0.6852528291235565 -0.2662431407904824 -0.4682666206192534 -0.1703934181992497 -0.3792041878214769 -0.22320313987171336 -0.37422006045000233 0.6238383900617097 0.15468959413432426 0.23234079578740174 0.9331496407073532 -0.24761228039922223 -0.7759034331673105 0.8063664650800266 -0.858847286975563 0.8982290214032151 -0.7166393977150394 -0.9507398584411655 0.5155337925037322 0.14255942539043787 0.8890375188110924 0.6628168732977913 -0.34877140668325124 -0.730228779141346 -0.7315254666183872 -0.6577117657058795 -0.7336947306865251 0.3100245721278836 0.8911037905195085 -0.8236620025016386 +119 140 -0.13465325944858697 -0.4921969821963086 0.46150893899583445 -0.0004216807833563596 -0.2440316749758571 -0.8072200051958467 0.01650177672012787 0.45678900205845396 0.1339241877144952 0.042440112761080284 -0.597761319241255 0.1659881461755246 -0.923864704586645 0.1321974159646273 -0.11337641800889053 -0.38315757382629956 0.374070575914351 0.8145510992681775 0.7050557648328166 0.6515841047675426 0.4141721103731957 -0.44330130970335335 -0.3221345809145302 -0.9550824235336384 0.598165966788031 0.9565857592766225 0.23263507646166048 0.37257355655668434 0.4013760075044628 0.37047226450521653 -0.34769538333245253 0.051582635731672655 0.7295671239234309 0.013507946945758853 -0.5392255129763945 0.9952511640838333 -0.15521798387220542 0.4572363914703932 0.8535590018187402 0.4244759533032052 0.22045331986044525 -0.9880394126700744 -0.9503336408639014 0.8755791005334712 0.8559907403572558 0.30816899784786833 0.5845578897214239 -0.3686975355478459 -0.6224013043149215 -0.4299147866307138 0.8610407943965954 -0.19740513038030838 -0.08379497777906053 -0.7078087217515554 0.4175742751159699 0.4696736438644984 0.663405882908054 -0.06132834060413894 0.5155629061442017 -0.2556520413651544 0.20194674791741796 0.6564987573160699 -0.24619737881593173 0.2019010331781368 -0.9819742754444103 -0.03802746882198704 0.8240224769891851 -0.9316052181514483 0.9549772132729328 -0.7722824829599995 -0.8230760652477196 0.9171438924469488 0.4398662984127124 -0.9876856859337804 -0.7073477427886068 0.21834019252297265 -0.8089639870840735 0.24027067235260136 -0.16064386729998614 -0.44009252977463076 0.7527545549938599 0.7339882116399974 -0.00985499617869623 0.886478005913033 -0.7122470604525739 0.6316968594639125 0.5576658423360197 0.41618938484060575 -0.19040999840531958 -0.25013638146115147 -0.44367149217799096 0.9745488187517024 -0.013713372767768517 -0.13228408942142322 -0.45744771734517764 0.35950629639082354 +120 99 -0.9367792431337194 -0.8643208229378732 0.91059226956157 -0.6591715956997259 -0.0069344803867199545 -0.6874927934178854 -0.47889295781556807 0.26131170592954556 -0.5290816060968007 0.42889379732950506 0.135829391909704 -0.2397570884095206 -0.2010083186409115 -0.7771437958592999 0.8189818720653996 0.18203435823468084 -0.839696897964711 -0.42785053213432556 0.10444492847455988 0.2458691586232915 -0.2123144961960366 0.8158686121185292 0.733376030766614 0.5732848678148736 -0.4437189137751405 0.48956034901223733 0.4607538318323079 0.2682274152604329 0.8142928945452572 -0.24386439351521427 -0.9728018895729251 -0.21543701847247498 -0.6582104523724401 -0.11118573061593984 0.8154111422799235 0.3670765451440481 0.2427673992704693 -0.2994812349696827 -0.9353417836465576 0.6193142332237194 0.8738042278927829 0.5507800522541275 -0.7969474977268824 0.989141655509779 0.7805212309567653 0.7394797644632267 -0.26630117916403595 -0.2090279044687695 0.9565384246377577 -0.8341592510938474 -0.9405129713126759 0.9434488937042849 0.2223959095266428 -0.05976849771426229 -0.9084228716578369 -0.4009503344087513 -0.9153962043337251 0.17606608316955397 0.2737851676029106 -0.36211744068984153 0.7046513267056131 0.4906020498242576 -0.40896920938372894 0.339211210461583 -0.20070724525043615 0.9812319600794155 0.770846927903752 0.7086874096772631 0.27193376824582227 0.4947181790941624 0.8716089382269354 -0.2881214924185107 -0.6748441465844126 -0.9027583647303339 0.018507577673893216 -0.5151169851105262 -0.616940606190717 0.3059263738764395 0.4758709700954207 0.30234294686616514 -0.8032944535781601 0.21047942165644273 0.974069429146748 0.19551466164486464 -0.6967532930799016 0.00939787440788642 -0.8942060976823256 0.14412293803298004 0.008664833805007932 -0.5473754225196596 -0.8775349332201903 -0.7986740623904001 0.1532496360720863 0.15162868557301468 0.032955733926126385 0.14127182015386852 +120 100 0.27565450639304623 -0.3980584085546961 0.2267888311722599 0.33892998260419316 0.005719323992305236 0.9006402581108688 -0.9832717225125811 0.4404672643257399 -0.931087955126207 -0.8075828133097807 0.4904721745121776 -0.253301940876945 -0.7367800256117432 -0.44362089828468143 -0.4704195657771997 -0.8554054953898789 0.7397649391629173 -0.3277983597766665 -0.12616516707754433 0.799968954380637 0.1034796608640356 -0.30475913537342847 -0.23851040179257255 -0.4242414922084896 0.5655111254877683 -0.4781113599211615 0.2327467258516629 0.19318154754744254 0.7378399768939972 0.8509065192784999 0.8021843025159765 -0.5531704961394026 -0.2841491854107394 -0.4430951144081845 0.12843340070083897 0.0846853120369977 0.049901907907705434 0.8607208714131802 0.7696362926922558 0.1490622400192656 0.6178452439546358 -0.9970627458307795 0.630086653458545 -0.3859706108491161 -0.14782311237872348 0.8848564353391819 -0.9655457973919432 -0.20513743793586992 0.13767824167989517 0.9235042186348936 -0.58613542405893 0.5252319975976547 0.2572569673474494 -0.9128827990778743 -0.9961411826487523 0.415201014959365 0.6227721227772605 -0.8644032055383781 0.17613178979148758 0.09366140366224229 0.1718799037512888 -0.8160405226820753 0.6578540857242001 -0.4918431928598257 -0.4213020391286424 -0.43629650932111086 0.6456976348804067 0.9028446684013911 0.08038269677621379 -0.728907321452483 0.3073680427730059 0.23820221367279126 0.2274303806596134 0.8980380518781952 0.14418490906115133 0.500419033343543 0.516221894288249 0.5064545966122034 0.834164284710522 0.4771082980061452 -0.6363785607741359 -0.5400992511623188 -0.9159883992381244 -0.13978312153133388 0.4966940192672302 -0.898445375005561 0.4031890979535262 0.791103042344202 -0.031210630433930797 0.6656029392930376 0.2951952349948668 -0.6711488826824064 -0.39113623410581777 0.16782816314426818 0.7563432713310321 -0.7624467413272036 +120 119 0.129926240051901 -0.3068018107435715 -0.5356036019617625 0.9692143164422082 0.9653213554615707 -0.4518978311418238 -0.1554932604821755 -0.6177568403275115 -0.6804178136692796 -0.8447130634225342 -0.8681125030409438 -0.9743449415619259 0.3812371599470967 0.483655827927272 0.12282554964260473 -0.7236878227960981 -0.347468209726016 0.5633843779328305 -0.9880446712203654 0.14686865505713453 0.24241659324321763 -0.3366762758229809 -0.5705471863032139 -0.17212775517305756 -0.4832604345575091 0.8829860905197102 0.2095311825221271 0.7497056819063701 0.4193839823185683 0.36487210778638923 0.2922463384571887 -0.9132038157572477 0.5654078368435309 -0.34564237886165383 -0.4251354678092809 0.3747032471149123 0.9663781340858897 0.32906753885085527 0.5104809943819919 -0.9497363889868733 0.89325177669007 0.9593815830562438 -0.7039925716029471 0.7151341096429709 -0.45280782694996713 0.4883922887557479 0.6642100446600321 -0.8805663549447831 -0.7150515396857982 0.48685174635664197 -0.5814898516077383 0.9931991760880117 -0.7215172171346369 -0.5635241699820246 0.1735586545503791 0.06770705829530455 -0.9769762679378275 0.6067879065482382 0.4125805848012678 0.4394928254919832 0.7057081959127274 0.5576314021672362 -0.9313811885334533 -0.7510226271697138 -0.16613064488003992 -0.6230384570333902 0.15518634827533395 -0.5067066696633262 -0.28803796247485836 0.7356361281581476 0.60854069681025 0.8389546557070517 -0.40500616281501256 0.5715837096046597 0.4632001937700376 -0.03527329852325689 -0.12718279957427714 -0.4838998570055397 0.6315542158925433 -0.3701357598827555 -0.5685687518863229 0.4159295389457791 -0.6703351872692993 0.9535783485814959 -0.8347206299169228 0.5757958870897057 -0.8616510756160047 0.5289512422950915 -0.4561096564226155 0.527955066508609 0.5807312133696723 -0.5028170694576717 0.39201307595172086 -0.3553683365154401 0.961579249594972 -0.4366690872074799 +120 120 2.1124269798419464 3.814962798023485 3.6035332858304114 2.679487156009306 2.6154036115558768 3.081776277744357 2.9836501119710332 2.3739409787818633 4.008742182610591 3.1313994519082975 2.1514815996434846 2.6959959947237797 2.488140388276189 2.459879521780305 2.800912657957367 3.181744480653027 3.936723791440355 2.430674137087051 2.3085407386517565 3.1991278017926423 2.827395657105008 2.401446125139945 3.301903650645766 2.7104522226851397 2.4790471082616827 3.307139123299092 3.271764768036782 1.9679956254913025 2.9441983016127233 2.6297557832887524 3.897659475448527 3.761251499072742 2.9515400672685104 2.2697611728545293 3.3553368542472097 2.8268492178115787 3.324668465295214 3.5685793998229483 3.1238291860563443 2.790892008383067 4.034855271658358 4.196196266364316 3.902552934526617 4.161636572618016 3.6600753816240834 3.7059331996877765 2.496206648770333 2.613095244346691 3.608037396081012 3.2898750180395746 2.6126439459497917 3.9837082974444487 3.5235013188992874 2.9266090769189788 3.304464603921309 2.6213478898806786 4.276128282660633 3.8775337073651492 2.4004400014028766 2.3605868353613655 3.2888870777019497 3.742774023031612 3.5179066412265705 3.2682389354842516 1.716944540099035 3.4467857942781834 3.1715220413190037 3.3561411530474468 3.04039923659205 2.4235277301302043 2.9307672101219726 2.6679919121845916 2.1166086764243266 3.9965328849011463 2.0768834433647796 1.6032245057064103 2.718322773719935 3.470767372355714 3.604591319205925 1.621076150421294 3.939587595572759 2.1387237102302086 5.022745907388006 2.822196849080709 4.089209587274205 3.2851858214708827 3.7458139348687665 3.4678280729505544 3.0911173392835174 3.3636243062377904 2.858735379299177 4.103203340228057 2.782167904818186 3.0973978271693117 3.457139226881486 2.986467959260999 +120 139 -0.42771371601076624 0.7999259621710602 -0.8275312166533524 0.28052193163304984 0.5980127398649042 0.5849547713980703 -0.9666221538019197 -0.4178574406489115 0.727414045914125 -0.23036405495225676 -0.2923742574278938 -0.0764617093940605 -0.8812538053129999 0.6351373540233993 -0.9966758528727777 -0.4241081552373551 0.7882938776387642 -0.9966409172139206 -0.26605863961753395 -0.3233343451849078 0.6027234750100965 0.3460330641184006 0.8770042848753388 0.7000139456355061 0.5920660341184381 -0.39947391249025554 0.7110839039189429 -0.3540866750214584 -0.6319427740419543 0.34632840492918326 0.5756867478691561 0.7743241733412731 -0.6249346798788904 0.015901590049802516 0.8506574062449754 0.9567258173488522 0.8582911489308913 -0.2965503619928589 -0.14498509503809798 0.691482167429982 0.2092506873601292 0.06404089014115688 0.8601827992793045 0.8367065205102009 -0.9780936384504018 -0.6101110396126683 -0.3637101577247779 0.18769250753766187 -0.864064266248211 0.6180068981584914 0.04278357384780107 0.0994941528223856 -0.8726894523501942 -0.14998615697443252 -0.7973070011663062 -0.5430471462312894 0.7399574855650897 -0.5038756395945405 -0.6556052492473274 0.1456476061369698 -0.6955558485030799 0.8822697772385277 0.7866423147628347 -0.6015779143266893 -0.016972987704936493 -0.4240775864493236 0.32479518595664514 0.5946802316565403 -0.8011323447920697 -0.029598531271928463 0.19236761845460237 -0.33895811063030523 0.24378591363765256 0.19508322347603824 0.563123955710698 0.21667838187587374 -0.3107909604744481 -0.5833533491461429 -0.4762251343889168 -0.06847681169476605 -0.3137226307181378 0.3779213204297951 -0.9240115213101892 -0.6365477546632292 0.5152459736301742 -0.8809667800176009 0.29850056136065284 -0.5383749798168069 0.6972847266932543 -0.6152580308959923 -0.3301395898791688 0.6003630767481953 0.8180623274971179 -0.8940701347569944 -0.8669318104802337 -0.9874147635871893 +120 140 0.29366475178916995 0.5814345665224729 -0.4422931741120584 0.39092191899347495 0.7104298004863985 -0.08804729435764092 -0.124015411145048 0.0864150000153816 0.5047277084139841 -0.3363230530781329 0.0015028668766714492 -0.6326116006792804 -0.22482028260390008 -0.11479698073016364 -0.00098918958617622 -0.6164285864053012 0.5633560433412836 -0.05343544302695613 -0.13655967900136434 0.7257292207990966 0.968440870580292 0.33651113155834755 0.3781974274008699 -0.11556349152325018 0.31152247356189977 -0.47961843151412165 -0.7549911086030567 0.08875390576410314 -0.1607848161430161 0.39460674018950126 0.8046316420960777 -0.4845080872937577 0.7620858411454781 -0.6320426629242863 -0.513244966185209 -0.211424715801817 0.8616753706024325 0.8275799392342749 -0.5593967785382994 -0.16025571637607716 -0.6631853481885601 -0.8628330620326972 -0.7220940508261191 -0.9868736241544076 0.894724149791025 -0.41580956357955134 0.23016295366502693 0.14719706206181304 -0.893119355144246 -0.2782343502370177 0.2839288228514949 -0.9022388601054798 -0.8635406068535896 0.7571569635478701 0.29395759409316735 -0.3213548257878436 0.5919060037348967 -0.8118133087846109 -0.4244251749840078 -0.5395988246939505 -0.3207996604349812 0.718713904877309 0.185970867897576 -0.2091299368437669 0.36051451741636065 -0.3536339124023713 -0.5756488737245038 -0.02097810122031496 -0.754727675196541 0.3385039127813334 -0.1688612132625471 -0.7566635715900929 0.1998729655600453 0.5603932203058362 0.6628061346721061 -0.03705886742672404 0.3382043981328213 -0.7468342198971643 0.6036147868041588 -0.11371222620402488 0.9366667440533702 0.4418114822151751 -0.7518247018378474 0.6629332633515841 0.7347296087417492 -0.6497686624834202 0.4153674107425174 0.57195757274346 0.9212865257420004 -0.6246460257702473 -0.508202943508371 0.7597611702105287 0.5234402693288847 -0.7957949411466074 -0.25034767476829467 0.093796171179509 +121 101 0.7748382901544866 -0.37215105508522983 0.9374138474458686 -0.07243126357621277 -0.47666713933666505 -0.0955858620762351 -0.2687282030609006 -0.7066682723525093 0.3356450802167519 -0.15483755942572364 0.40449820885475063 -0.7550230366292197 -0.24320948015615285 -0.015072886535041574 -0.060428783171849076 -0.5301503304648274 0.7886188973067874 -0.5269431614535476 -0.4243614755275815 -0.27940814298988115 0.6895536980411816 -0.42146569189633487 0.5629570022690065 0.1750865748465047 -0.8978600713003986 -0.9255148477392017 0.2449640826366437 -0.06594947266481177 0.6053854342360476 0.9171168413858346 0.7483964746784741 -0.6304775242645484 -0.6805713813082623 -0.9548212390810316 -0.5086504350952799 0.3856317553245636 0.7244519260946496 -0.23917108821660116 0.5286231452014047 0.9595593883376794 0.01969816504225541 0.5779142877359611 0.9613759282013552 0.15663781690007306 -0.1350994507647667 -0.4950163809905015 -0.9795457383330128 -0.1397882310571097 -0.4108664762838272 0.607262957314038 -0.12498393342197112 0.24871362542333397 0.5802081965781953 0.5303329568951183 -0.26782907330951744 -0.5828021027616552 0.5376924011826614 0.5991672951477967 -0.346284710760431 0.9605649567477215 -0.6337108205323394 0.7411784426832468 -0.5949277057962064 -0.8776541787374472 -0.7350983346277453 0.7648920266405606 0.6456386845128819 -0.03063315724337934 0.15959215481867406 -0.9588641338473103 -0.09131530671991617 0.7912016346291759 -0.6835677514367284 -0.04255738644443707 -0.24433011991394826 -0.2045840514829882 -0.2731008354610722 0.9719588634912928 0.85034572039751 0.0023186112878434972 0.026229629578004232 0.4041805659058517 -0.9307950311305755 -0.43609085486353494 0.9803562893279154 0.3445022819206631 -0.9714162349142923 -0.5871223555988083 0.33452766288000735 -0.6836881494935794 0.9819778995139836 0.09478832529122805 -0.04973411497299729 0.9091154295823343 -0.5572209297662232 0.9143582163708328 +121 102 -0.7559058547878756 0.9026498233522788 0.9424081641612829 0.08900494443795237 -0.8579108562719409 0.10904468929811428 -0.9646816577602109 0.20309150740568982 -0.539550707362678 0.6995563127429136 -0.6960173096617992 -0.0858103633831806 0.9621399339061145 -0.4285076072540548 0.43343812791125247 -0.6392529919821424 0.8705850047414978 0.25152831411820475 0.14002504423733297 -0.021095086505964034 -0.9814450002520145 0.18315062549863348 0.7884620024829896 -0.4016385902925501 0.46793802863518197 0.49835778757547855 -0.6100821341064946 -0.5768637317716034 0.30789267316629587 0.9117908426867849 -0.8950659830448409 0.3281081509439763 0.14747521762034776 -0.29540486328819804 0.7366206178775907 0.08879086570555672 0.8591773767354063 0.2537918664993224 -0.8192329796131923 -0.2916604230272093 -0.5797935946840529 0.6751756582146318 0.9477175438571035 -0.914168985771358 0.5129467210668501 -0.6906316417558811 -0.2631303461109866 -0.6098745600938189 -0.6243951406238821 0.5183800969638024 -0.44333815581199576 0.8733576353224719 -0.9656229761418327 -0.9746074513189411 -0.49140687707860575 -0.4737597272953942 0.9509360468442654 0.9621351313494115 -0.6709338580600936 0.11395604366425105 0.7590339523527612 -0.19218746343823923 -0.9564586011927569 0.6992490708310333 -0.2889403501807597 0.47670828239663576 -0.7731523555235822 0.7937516410200685 -0.8270161873684785 0.344467713286047 -0.9711826515376663 0.6041983289609829 0.6455782469613325 0.05585366323723728 0.7518174924523437 0.2774891038469294 0.4760053771994468 0.5336471445931077 -0.957996908047577 -0.753204847322791 -0.032541253611377385 0.9336631602694021 -0.2677543041709891 0.5032541487592406 -0.7972485506002915 -0.7956456133912011 0.15557791517203867 0.5800490136412015 0.37582207655234434 -0.6139550973644097 -0.8602076562372489 -0.8862899108438205 -0.31146825625235564 -0.3066572305715829 -0.688394235261349 -0.9269003237771332 +121 121 3.331837671296631 3.5224727786473844 3.5821397731584916 2.134532052721676 3.341827839717904 2.1716185185321137 2.3529238919928552 2.7925933875755935 3.449865996181984 1.9475882491987249 2.7834824796835096 2.9400188963464746 3.9221619248837802 3.3057713795935992 3.9172538084511075 2.538676732821574 2.886256252891708 2.5800102334938355 3.4539359917399377 2.6982287964900724 3.9830438464076146 3.1620867577987966 2.390885002634466 2.874357247410451 3.98610730249517 2.6026212860928757 2.3826669558547815 2.910798655401033 2.2276585397693904 3.4751965542494867 2.9510545134244928 3.366545236266825 3.0033830087262037 3.975848708834569 3.9243322653220405 1.6281087051284406 3.261882605772845 3.2713264898596477 2.863374909792399 4.081330758324217 2.906112499526998 3.8689225595201293 4.082642994250666 2.2249493631412225 2.355140170441156 2.7548471893736055 4.509613880085958 2.725531318884162 3.2947503422194435 3.296199978144097 2.309394579163718 2.419473584895739 3.6805907180228465 2.5929696284622237 3.3350215895106974 4.021091031276396 4.316586061576118 2.4957349516778153 3.549752066341102 2.9903303636776837 3.5984073597626685 3.5731765251401995 3.2648600891283843 4.03854644550312 3.513571824340199 2.6796626108875605 4.1090042958515065 2.19276849455382 3.2678294889613726 3.543337551732408 3.149878554101532 4.077597505985175 3.6324361149300293 2.845649280937246 2.9679185532596315 2.514073350628359 2.7809780594810487 3.7816769572050553 4.241965762242343 2.1399434422447725 1.6210501516487117 3.518409993137939 2.1550323578627877 2.8257854422548205 3.768876474721413 1.701703778652027 3.6423251537076244 3.330744645149605 2.4305639241619357 3.8322827905511274 4.690540581185123 2.496850891805711 2.1209095135958176 4.299602797484807 3.4659101185202434 4.208743212021309 +121 122 0.3125269785397877 -0.8560124229910377 0.7732578252731455 0.5937888190709295 0.5160336649551747 0.6393391292991759 -0.23441092975720212 0.9689677092338862 0.8817410701852268 -0.7701967407344057 0.4814240102155114 -0.7061948934468667 0.9668954271884684 -0.2066815921244678 0.7951807039735126 -0.7271355080778947 0.1654345261350052 0.26243897109769887 -0.9012445833959077 0.944276574571586 -0.5602798999769902 -0.9185285696495178 -0.28912648185204426 -0.6179648793136308 0.3653399503000292 0.14858674589653753 -0.2629502653391318 -0.030343030109962532 -0.14846385057123235 0.6053428821544147 -0.31965567013286944 -0.6033544137131372 0.5472484561876236 0.6721301187573854 0.5393681924390312 0.051475773250462264 -0.026659656332725712 -0.8551748328743927 -0.22192563495225848 0.7574700594478192 -0.7308012227414566 0.6880991351740087 0.39846047817547414 -0.24066057494538518 0.036226498415979025 -0.29821571554810866 0.8393661213984209 0.38171799524443073 0.8088284779883481 -0.20219316245549024 0.7407096894882288 -0.12364784637406379 0.32858305697135415 -0.39221108679739336 0.8568807943018295 0.9988021106589959 0.4896676113909775 0.07105962909676444 0.6948669235063858 -0.05534096868956451 -0.9583000438760063 0.1152147966896051 -0.8752513938769604 0.7080710947139093 -0.9034424191441743 0.38787704197495043 -0.6479678266923408 -0.35694998067847483 -0.8306418085349272 0.20841755510586535 0.20187208666023593 0.9951990664797892 -0.6347915059089315 0.6566632730656148 -0.7012771239156872 -0.6152418840055869 0.8613021197574044 0.4629919909140452 0.5682908473530544 -0.16323975337709284 -0.07428931627146396 -0.9582417049300214 0.215268926634695 -0.37526845490290706 0.6447201891583612 -0.057428616597967386 0.7849463675489046 -0.33513379135110766 -0.0756898858538162 -0.48223141150647564 -0.8637315539342569 0.06136204635886533 0.8037410257249584 -0.8277018405317955 -0.6628101345898898 -0.3248335808473155 +121 141 -0.9924966040648631 0.49414971631714955 0.2904971207772473 -0.3447383069247345 -0.19986447348194503 -0.2134776956927915 -0.5685451225278861 -0.04602788948410241 0.9661906169596963 -0.21590529193396346 -0.44713628971906494 -0.8480886369117104 -0.9996711437253791 -0.9800202927731185 -0.9089276620660802 0.2268005062256584 0.09296986364371884 0.5373869316284026 -0.5729224378569999 -0.7365745601208364 0.9443956633494954 -0.3071466412180499 0.32664294393287907 -0.5638394479737581 0.5958868096156174 0.13585692733133414 -0.07149118603376259 -0.9615153831534644 -0.9694689448524563 0.30960917506832253 0.05680001257491507 -0.7360107271817209 -0.43554973574417954 0.5214452035620718 0.3085760734081384 -0.0634672655513342 -0.6174530482914649 0.31577745461775764 -0.22756387508176656 -0.4209227191009792 0.5709811280142902 -0.8414108433242813 0.4972285511401189 -0.5717960644310234 -0.16731409974358402 -0.731341037126876 0.723723159572542 0.9305977915841854 -0.6490258900429406 -0.70246890257719 -0.03628725182124248 0.5657847722990195 -0.7547674850988948 -0.20934301365739483 0.5057963497673499 0.04636687356803115 0.8936937414577621 0.006659090861807604 -0.9022721278358632 -0.3207502384394083 0.5319471084264988 -0.6804916789180773 -0.11663495676459679 -0.4834040833032951 -0.7544371027977166 0.24227642008956463 -0.41012052094936924 -0.3332191578853487 -0.5425350065475696 -0.3617783794193057 0.9297236300616136 -0.13661528347704954 -0.6892640492777449 0.66625545913669 -0.13581323583323224 -0.2093363727278943 -0.17759164270331462 -0.09297343599363472 0.2825051702694754 0.26077354895918026 -0.9527133010986091 0.5467327403066977 -0.06086627410024614 0.7761320922360933 0.6904383247829899 0.17391438330374442 -0.6711534896912066 -0.17928359747891665 -0.9523292733054489 0.9771042503516656 -0.5596016229572585 0.08164555520944594 -0.05368122423356403 0.9643111180733395 -0.691432149596183 -0.6960345061372211 +121 142 -0.18479728225169656 -0.2525966020077901 -0.11434479753250937 -0.3763784145926876 0.5157618453002413 0.30094712041661453 -0.04815478767027859 -0.6226359502151722 -0.532728816413605 -0.09459151794513154 -0.17970576656186443 0.43342711947014756 -0.46051441564996054 0.9760713632874853 -0.8525067945400095 -0.37991946231558704 0.48319377719683687 -0.4617606284020095 0.6307772005455377 0.4806772759874909 0.41673986864301615 0.4015949075530545 -0.3604976780278666 -0.8275767870144981 0.8801256262491455 -0.743784466051463 -0.8189868616477489 -0.309866935591971 0.07806396135047233 0.07905491953002008 -0.7751466544703347 -0.699572139537521 0.9603528764216671 -0.6185486453699545 -0.9129423200242324 0.8804177933515731 -0.3635604982844902 -0.8652134446186186 -0.33344541178120246 0.8347714111797089 0.3487843953964844 -0.665798511097927 0.43267442188979954 0.16597494052839146 0.947350461360772 0.1975839436977751 -0.9286667346765709 -0.45791684611791594 -0.008506012971425614 0.606343122085961 -0.5820364984202111 -0.3187053860640161 -0.16771569757005578 -0.030482922456666728 0.29505618511700704 0.9368851033581425 -0.8273860985918084 -0.4491448517451486 -0.3321122803704335 -0.5607529106905087 -0.5057337095199494 -0.9190153070331282 0.41432987331511884 0.611490565766621 0.32280798426750623 0.44248669097430393 0.7702785120750348 0.5252327964067645 -0.7267258484208583 0.803090257621013 -0.7488653878482927 0.5926253294497261 -0.6806643730745721 0.894931512978492 0.9829649632786253 -0.9261558020453216 0.38291623282233034 -0.782505638788519 0.8038599713417387 0.730965883893276 0.39887045907724294 0.2533879501455141 0.12293768927997917 0.04298693812914012 -0.34668851841386616 -0.017396850714450407 -0.7805568511346288 -0.827306111983036 0.47832949461915075 -0.2779955908043701 -0.838459436508979 0.9227857308446323 0.24716376517369154 0.5560951955915912 -0.7182690660541604 0.3840004805585311 +122 101 -0.3953350504512778 -0.5109382109742422 0.9346126800638148 0.783194373224015 -0.06585732339769312 0.7729948768692956 0.20254098199643833 -0.3068744510758554 0.07349176998147855 -0.34630181461592957 0.33529909929342927 -0.8271639692852264 0.6313902512163172 0.981281676672543 0.8240176096203395 0.6931272664221066 -0.08233135380523748 -0.47027277939783785 -0.7395399331034065 0.18019811689052512 0.3354482648923862 -0.20586493253334348 -0.7481034445913022 0.023645370478688976 -0.3071271820374293 0.733052081723504 -0.6482817182330713 0.6429399250654217 0.41060969874605835 -0.9278979135295051 0.9971885957383686 -0.8679371017425856 0.017443871189893656 -0.2278723281521433 -0.23567302154473535 0.011576027483911622 -0.9611846956070174 0.3063900462782767 -0.7515235591358034 -0.7627433011561326 -0.10723802145514183 -0.4467242474641451 0.8304235476712878 -0.06955360337691108 0.35693629476404043 -0.17714630327984882 -0.4821633583476055 0.7449639006334459 0.17703762584861304 0.3090832833878536 -0.5581251778851584 -0.012814717484284976 0.37335389810492847 0.4937364289566024 0.24110624469637165 -0.6862647042864665 0.40066110178701253 0.8325913703492678 -0.23749333901317504 -0.516348284271335 0.09960597025447515 0.41751835232425516 -0.45313062906628065 -0.5797674772425976 -0.9103735813711831 -0.9868939791286375 -0.18465008909246516 0.9951318486926324 -0.6909245765120804 0.1398915703614798 -0.2649092142885925 0.48919358863811535 0.4261771907634746 0.24145559354121482 0.39985428291469005 0.6998030265727617 -0.003100870896884267 0.03140067325531781 0.8071824028489898 -0.3159221204204048 0.3951295010063003 -0.18081560206539038 -0.15532467828401098 -0.8813369068519961 0.27340847668125434 0.2648724024084719 -0.5301654213681637 0.8959912915703416 -0.8475302640566735 0.21332873173844957 -0.4390414058640224 0.7116511382048816 -0.08157306554093968 -0.23421918844937029 0.7171810453372878 0.8889556169000981 +122 102 0.49543606581657507 0.1184644053858428 -0.9731630582385633 -0.042155335034135266 0.19362420159152038 -0.9482160575829301 0.680642784748066 -0.5408418720407373 -0.4010922417507412 0.937876829219509 0.3857649143630515 -0.5380910592161332 0.7950429731839685 0.8995996781702935 0.882660084072725 -0.798208111285867 -0.837467674549633 0.2535576312920491 0.6963305696532724 -0.9074357085652467 -0.9106442439128635 -0.13139707907292286 -0.3239576430863176 0.3276913242193875 0.2717624127223768 0.6616641284985714 0.5038555751506162 0.014924385813674723 0.909499919567246 -0.33219126544202826 -0.054708030479123426 -0.33510827136864796 -0.733772903389772 -0.37209218623012275 0.6161125398875118 0.38820233800076287 0.12116443433375412 -0.4073743773763263 -0.7353841948304394 0.8401224322819922 0.3780922868816885 -0.4598017311296263 0.16688912720219218 -0.2539204318818946 0.6783787627813052 0.5226385408683014 0.1110361124592798 -0.08042145166281789 -0.14247923940522877 0.2142883490626153 -0.22665483466634462 -0.2453646684400992 -0.345871744197054 -0.1925660529745188 0.7600143223040685 -0.6329109195550957 -0.1624172350334816 -0.7930726001637323 -0.34691646944525734 -0.36730879281217965 0.10754502730535331 -0.9701987028955736 -0.4470493492898546 -0.41032978370192863 -0.5644657768708619 0.4933810427635823 0.006687054765513567 0.5870622087131034 -0.07720834146016409 0.9938765140141257 0.11379169337253137 0.5289414607626572 0.9164865024382027 0.4546087754734578 -0.19262492345214377 0.02225798499393372 -0.5200537933779663 0.30475356061076875 0.4978542509711257 -0.3605950835502434 0.24315978922092785 0.651392155894249 -0.6082874938180343 0.22378433984384127 0.03202214715998508 0.7075580477442067 0.9236146112202579 -0.10624155173032745 -0.060768870144291665 0.7516490032336158 0.9878387292441875 0.2595121950374908 0.6856652061252186 0.6283936098976655 0.1789723005926236 -0.43911661152440473 +122 103 0.4804261257217428 -0.9456079924379406 0.3322098028322302 0.06251981270950169 0.21158801816331874 -0.5224055686921647 0.7892477861479057 0.13732291815911846 0.6713511682782562 -0.3159395023439193 0.8795583926894965 0.4156879607652242 0.49196952300903574 0.1822606067820538 -0.18189876562503104 0.8880246678360155 -0.11269295211253905 0.3707749119426982 -0.835278969518416 -0.2917478141435499 0.18622408155233705 -0.5706600427404029 -0.9193993691555806 0.4079276913445946 -0.549515783965699 -0.26607330436384347 -0.49561021485872336 -0.7282351901145183 -0.26517494418235876 0.21379847937575414 0.5139492014750293 -0.3967291688913692 -0.15139334877277077 0.18428369630916053 0.47521859601029326 0.16596850550688735 0.05287665934642627 0.9629929395599528 0.5333439109390219 -0.6164570501596529 0.6450980743766228 0.8022509925343981 0.6974934324757309 0.836738465738736 0.6660560148381076 0.6490539596348985 -0.839661834912532 -0.42256507310182556 0.48348773289388625 -0.38996609306429275 -0.47153176761373694 -0.7085260287764796 -0.9650564732946008 -0.11582917681156912 0.6328922897860312 0.8329713583899536 0.44565462046182924 -0.4489163256301367 -0.5814958262646974 0.14169298783748419 0.7897861089261538 -0.2450194809754731 -0.7697053713499815 -0.3602129909112233 0.7370638626476087 0.06738734807257707 0.40467365182278914 -0.053513463857751686 -0.7132470943771863 -0.6558630057867585 -0.9955562796967252 0.1606102297259373 0.19225786561584912 -0.39185133434671693 -0.7461048260147514 0.047441264753290247 -0.3136948306476055 -0.7950051112781609 -0.28094997137319355 0.6606633937719204 -0.5215518801713439 -0.7405706378502357 -0.7062968073748999 0.8397910862558171 0.7037714308430014 -0.6100709061955298 -0.9407432396927482 -0.8932626006209663 -0.54756033193442 0.35668210325888006 -0.5713785693744204 -0.10829621536684053 0.3485982407380914 0.5532048644288683 -0.6374603236199656 0.48875520816279683 +122 121 0.3125269785397877 -0.8560124229910377 0.7732578252731455 0.5937888190709295 0.5160336649551747 0.6393391292991759 -0.23441092975720212 0.9689677092338862 0.8817410701852268 -0.7701967407344057 0.4814240102155114 -0.7061948934468667 0.9668954271884684 -0.2066815921244678 0.7951807039735126 -0.7271355080778947 0.1654345261350052 0.26243897109769887 -0.9012445833959077 0.944276574571586 -0.5602798999769902 -0.9185285696495178 -0.28912648185204426 -0.6179648793136308 0.3653399503000292 0.14858674589653753 -0.2629502653391318 -0.030343030109962532 -0.14846385057123235 0.6053428821544147 -0.31965567013286944 -0.6033544137131372 0.5472484561876236 0.6721301187573854 0.5393681924390312 0.051475773250462264 -0.026659656332725712 -0.8551748328743927 -0.22192563495225848 0.7574700594478192 -0.7308012227414566 0.6880991351740087 0.39846047817547414 -0.24066057494538518 0.036226498415979025 -0.29821571554810866 0.8393661213984209 0.38171799524443073 0.8088284779883481 -0.20219316245549024 0.7407096894882288 -0.12364784637406379 0.32858305697135415 -0.39221108679739336 0.8568807943018295 0.9988021106589959 0.4896676113909775 0.07105962909676444 0.6948669235063858 -0.05534096868956451 -0.9583000438760063 0.1152147966896051 -0.8752513938769604 0.7080710947139093 -0.9034424191441743 0.38787704197495043 -0.6479678266923408 -0.35694998067847483 -0.8306418085349272 0.20841755510586535 0.20187208666023593 0.9951990664797892 -0.6347915059089315 0.6566632730656148 -0.7012771239156872 -0.6152418840055869 0.8613021197574044 0.4629919909140452 0.5682908473530544 -0.16323975337709284 -0.07428931627146396 -0.9582417049300214 0.215268926634695 -0.37526845490290706 0.6447201891583612 -0.057428616597967386 0.7849463675489046 -0.33513379135110766 -0.0756898858538162 -0.48223141150647564 -0.8637315539342569 0.06136204635886533 0.8037410257249584 -0.8277018405317955 -0.6628101345898898 -0.3248335808473155 +122 122 4.617346456438913 4.97409805533879 5.980595473772212 4.389913334286063 4.0966494115486 5.513526119299094 4.90185551908798 5.253579763946464 4.355359743103981 5.682667731693739 5.341450840920391 4.228559227148271 5.295492863571355 4.647091316026586 4.487688684108177 6.2191560435909565 3.915794417715426 2.0653116947685657 5.929916119377356 4.375496631526439 4.2919035530493765 3.4640109297916255 5.074679364263625 3.8175636298596056 3.4971330868983324 4.615948352248387 4.722313889000097 3.5004068444962253 4.496232904057244 3.8167996085757157 4.937502803057181 5.3339626954387125 2.904565022849667 4.233048708092159 5.2395725377268505 3.519004668855149 3.499986871855327 4.776717200430603 4.486432088128524 5.561837400292256 4.793193835891997 4.117061441359955 4.2995543839024215 2.810309065374584 4.654906047237876 4.956985897452196 4.1435982899658175 4.401860777330843 4.511717333421897 2.994529529485701 3.019153339706576 3.8407728063489515 4.5579285709119635 3.491606139692144 3.8187911801086294 5.911844340282927 3.7146843265449885 4.830323985447989 3.1419388558297916 4.004588791144366 5.531307540907354 4.584680521521268 4.555483221740024 3.9530672370408864 5.844610908869381 4.87885780772985 4.293606155258409 5.608844553739108 4.26136020251792 5.248375287590231 4.648673136062237 3.879635708761659 5.604466353717534 3.5054832076078233 3.521055843957768 3.862040817614477 4.1804203518780145 4.002123140319837 3.6550725357188267 3.874571588172163 3.196403824468237 4.481285691709365 4.748128482740442 5.191556332465288 4.821114209967579 4.361277124883862 6.181155409362289 4.342933553899672 4.141474128140807 4.691797700182448 5.498169995017822 4.220861387828652 4.967935814382452 5.2435797824008645 5.5097775145894365 4.960802051850199 +122 123 0.8766154949614289 0.1556427220204697 -0.7882485582970675 -0.43030711827215495 0.7856750617781754 -0.7471371284097208 0.9250434155904281 0.28145418744981 0.390638478076595 0.16532209487759753 0.6183200729446139 -0.015183878672097917 -0.8404477194035733 -0.4979926941977586 0.11784067474327165 0.5681404363905966 0.5615272529786817 0.37939643310071425 0.5334550589531257 0.7436871001848548 0.3247936254501651 -0.06599441013757534 0.5090808101898074 -0.8460495840396187 -0.5805414102836162 0.797037681121336 -0.08161411224610826 -0.5340270027796648 0.24566080834685944 -0.2969611222404651 -0.6600584000622292 0.7132832942472358 -0.09421675965377307 -0.6981879579057457 0.9568263352021589 -0.585868087975336 0.2955144955301743 -0.7350984811480512 -0.3373925460291225 0.3382637481476134 0.5887862665754278 0.11190866212723716 0.7416167864308003 0.12975707072499443 0.24767547953821678 0.4317937690041418 -0.003586417777742268 -0.6601653448387932 0.5700134227317206 0.8777657866795188 0.1224649001201541 -0.9026062634671088 0.20916335866085478 0.44392853703011736 0.1151648635926592 -0.034072563883012164 0.9260175501911909 0.7288410239646352 -0.45571788751572595 -0.4095570855600046 0.6887966757194486 -0.7845370827464526 0.4557252960258249 -0.8287124192838586 0.3625727250328141 -0.2975510247079851 0.652044667693511 -0.36068371367330276 0.45995284979224715 -0.9227477263669417 0.4151073487942818 0.12537459893853597 0.19700918039873083 -0.7980667066086271 -0.015084257845891402 -0.6885690606337476 -0.6590465399918619 0.1962741114331057 0.11980945344605853 0.5629925380418099 -0.062979021859219 0.48757651639070576 0.8216235563494794 -0.7559989900878035 -0.6443178445654518 0.49027859160786647 0.8381567868399857 -0.21550566390986203 -0.37116086176240337 -0.9351601049057487 0.0704671098035421 -0.7340673410301142 0.7528337879041933 0.15616673630965172 -0.662511848174034 -0.2006188374954172 +122 141 0.03663362901568257 -0.8455839545161545 -0.20594075177423998 -0.6125407910170015 -0.7869649483283792 -0.8571646849806465 0.9296267995929417 -0.5468451335078408 -0.7046285900545266 0.5333862961446594 0.9640876638653653 -0.04797728835763415 -0.40997958444457394 -0.34023361996244783 -0.4072440997921898 0.6511379127920478 -0.179119657019998 -0.20236383904606403 -0.9171616734472308 -0.65069368057342 -0.8648119893832147 -0.31794897189082194 0.6148171483559772 -0.9636659737732478 -0.0908698631012268 -0.643645767603656 0.7281692528374182 0.24226745923882587 0.7330373499316389 0.18200171951721988 0.18100380883603728 0.778661746344657 -0.5192180285762678 0.5412014074359657 0.6314273164114477 0.35259417548245575 -0.01938418886949922 0.1277486069886573 0.24494483704692804 -0.7557628193720949 0.23009859676561906 -0.37811588746394365 -0.7315170354178293 -0.12679295388327483 0.3925571699558581 0.6804798996889025 0.8047618199707296 0.670845091296556 -0.3857667797172182 0.12245020110393745 -0.16416832306266715 -0.5493149169586931 -0.4440822781194518 -0.38663271550610023 0.35961592610862203 0.5799139378965581 -0.3347806968479998 -0.6433692217102427 -0.11460726200209304 0.5529201745793473 0.8888990811052759 -0.8263830379989217 0.1838967797508977 -0.024746043851487487 -0.9862767681475255 0.9472621142680115 0.5499677261673042 -0.9985491307410386 0.4728026381927595 0.5142419246103047 0.9040662793450123 -0.9444834734084917 -0.9401489986072105 0.02189404373165127 -0.2767254378116528 0.4911661662506208 -0.5004479512640807 0.5471584125131856 -0.056137510117219236 -0.5126210828706104 -0.9953173741381192 0.7884427449690878 0.009963020187493399 0.7239546848433482 0.8916506830915543 0.41408492685462606 0.8372120308727362 -0.4387143841682577 0.4962124675397719 -0.12009761329661695 0.7857754759255187 -0.6290668035250715 -0.4772941123596137 -0.4880757023088045 0.6753884053402726 0.7500758589849932 +122 142 0.3341812422517585 -0.335871105876661 0.9989146450143913 0.9918953141056694 -0.8804168659229856 0.16119748487814323 -0.12195615760879397 -0.7696601477390832 0.49339244302683394 0.8128933309446691 -0.2575818613284415 -0.919024749155938 0.6342183864290833 0.6297667696096756 0.4999460186960767 -0.8689304712887163 -0.7481171340757897 0.006611663596155504 -0.29506665719985414 0.3725203861955124 -0.4505640076115198 0.2301827147058424 -0.42666818935371675 -0.4390744423380981 0.39714996922753265 0.5708474191340591 -0.494996820849803 -0.7400793402991523 -0.2329133868792881 -0.3376445152225156 0.9605495348034303 0.9548589704984054 0.26842492242295024 -0.7122919680668798 0.7504698403353545 -0.5991591595853796 -0.5282394986801635 0.2888374474167854 -0.3498212471978712 -0.4737053211331501 -0.500392837197084 0.8052037629060917 -0.12004453536334614 -0.1307612232007338 -0.6212012428553093 -0.7545646529277441 -0.5009483693641164 -0.7270727981964891 -0.7431992050285106 0.20216750342550371 -0.11690164992959784 0.986441437208655 0.679983243760492 0.3485603303883593 -0.5401429570562313 0.981320041718458 0.16652497399996724 -0.2625282090095411 -0.3921885762686488 -0.8651367033494517 -0.7148658542683552 0.6224508061259728 -0.566510533927886 -0.4167616720715248 0.911770341481072 -0.9526769324966102 0.2610800466215033 0.9967972007468251 0.7039836533564674 -0.8105968053895545 0.4558302583726368 -0.5529033614728847 0.5791006933809837 -0.6675762787504256 -0.17006664054417842 0.665843022164399 0.4458374768000002 0.6832630608600458 0.9689019747440377 -0.0008982731898101726 -0.09485490790686746 0.2204739350449516 -0.979975941600908 -0.46494443369037763 -0.5742661939607796 -0.3382432055449853 0.104730374564453 0.6852702798084065 0.38717197206451814 0.7938454882284749 -0.8915443784255044 -0.41945969389829396 0.37832090249626615 -0.6912890728924896 -0.9736079756146245 0.643293598478522 +122 143 0.8501181070758719 0.9401609322790418 -0.008656922679433077 -0.8255826498342569 0.014142571164685647 -0.3894627851889898 -0.8717093826918798 0.7055175044938835 -0.5204900880697847 0.9930817563805048 0.6666373122451144 -0.40875776991640134 -0.02622279217514656 -0.4048240785256303 -0.41022416762346614 -0.5427137998229381 -0.31494607901407945 -0.026620939986510495 0.845085850817662 -0.21094647495849994 -0.4805468413805165 -0.48677229056732374 -0.3331296783832616 -0.0002811767928547759 0.7545934188888617 -0.16233176324450138 0.5565252045988551 0.03565439522878355 -0.9384463796340818 0.4720542159787844 0.5286985403320663 -0.04939463703233349 -0.1837108805238703 0.6564186439203854 -0.5154447465550702 0.7614554957710384 -0.8594330807666077 -0.9020202043253591 -0.7562990573660948 0.28517633174655543 -0.644168005574685 0.14600646857221355 -0.017690481758600773 0.8049234044303011 -0.7015200865317526 0.5040777920598143 0.11282770987627333 -0.4987662417338874 0.6794889309915277 0.30653503081838185 -0.5538469197362448 -0.0560804782133868 0.3959940542182454 0.40824821165227676 0.1236280425749674 -0.29167556641563697 0.6897745836044045 -0.6082994848191052 -0.26980797042471405 0.25459746115654247 -0.6248917726954779 0.08274730728017987 -0.48192078478486144 0.5143923903459615 -0.20140989696307243 -0.39976548889300756 -0.6082483643760546 0.7569972054545033 0.18492380547218357 -0.9896758498128184 -0.39561397079097804 -0.0035039444400002395 -0.8451049607608359 0.2197001903763407 0.42471305446974705 0.4905598530569657 0.22287180090430025 -0.1918708494150203 -0.34411983754641096 -0.43197691004247774 0.11481967492604106 -0.35797002088344665 -0.8560638682069459 0.8116083335198989 -0.23983880050968254 0.5930587418955653 -0.8943873243363207 -0.22143926048669726 0.5912635969994349 -0.1697643220419356 0.7834866541805408 0.9540963249983174 -0.6260527270342151 -0.7993734003065753 0.9104319360794184 -0.3485776014807831 +123 102 -0.031416166551300195 -0.80923239801199 -0.7315645332030494 -0.17551111203006764 0.4725704678747884 -0.8430605446476886 -0.6714903900766889 0.18256578466557172 -0.9498689535117133 0.8750960595784301 0.13776868602620196 0.7840092385625888 -0.21641716842974557 0.37165930526653956 0.7956793371670274 -0.4984377898919983 -0.9209810434956756 -0.5066189284013105 0.17241191331649852 -0.11148786446519621 -0.029186366871877034 0.4226358203622653 -0.7814750363804412 0.9248272670242987 0.3281092332932518 0.5618600167135968 0.6188538687345442 0.26824672325947474 -0.493438164227064 0.29682393858987455 0.21351743596541306 0.12345023417991108 -0.5003879242499616 0.052532473243953604 0.2814759580103916 0.062327520029054284 -0.9770647139502922 -0.015146676807834991 -0.9708854624743313 -0.6484976797068684 0.5702917123611273 -0.8300321522880605 -0.5543215902620491 0.9816280422867056 0.1158238573004029 0.11242712701132995 -0.5668338584150434 0.6244143340983086 -0.41116033289392595 0.02569636576049006 -0.25944574836332235 -0.3288568406980894 0.1501117292585452 -0.8586222125945435 -0.9123492403407314 -0.8024463189083937 0.329465523405466 -0.22373706087853895 -0.039275615952821585 -0.21654977681123833 0.30772937777512066 0.5054985026477188 0.8715643004109783 0.22633485595669645 -0.7636834369456162 -0.4682464548000911 0.5001724387148374 -0.5370432968008363 0.661112132743308 -0.562016034832219 -0.6762983868350843 -0.10955407481049018 -0.6492889688467252 -0.00810679025000871 -0.08998551599468696 -0.03225678774247531 -0.43738778788348776 0.7436706853520154 -0.670067490293565 -0.886709624355049 -0.09901360589525954 -0.48957184960536626 -0.5353911130871047 0.9532817042127764 0.9209247123533668 -0.4336347038569206 -0.891825326536599 0.8487179513931169 -0.5016273345570161 0.5468869870638853 -0.776135564101138 0.7877219616574216 -0.5113292094271704 0.45551879340086665 0.5555433458034493 -0.4805421376072856 +123 103 0.6989434073206033 -0.3948878242267315 0.7877630780897533 0.15876363965819373 0.06374518664335205 -0.5482007570759815 0.734386840030083 -0.09957630871758316 -0.44796710772116644 -0.7507342741837193 0.6425100811801501 -0.046039419267234205 0.3594437896163958 0.06118156617047421 -0.16697818436755774 0.7574977438212078 -0.6352037053700346 0.06430270993582088 -0.8189975683654533 0.6282465515057343 -0.34331107412540707 -0.4007233001081152 -0.3608283020149161 0.1205498040997508 0.9471067774726296 0.2098284765280416 0.01791652814006861 -0.7279950222957561 -0.4458860769744868 -0.33477613565816977 0.28812086352605504 0.24708106646092753 0.1904092189912181 -0.8027316269957119 -0.33954778086462856 0.08724737267010285 0.32043901543422026 0.0145355275054746 -0.41341168952355556 0.6134349840484077 -0.4357435926817912 -0.12220293937105131 -0.6419868277459579 -0.2038866349768138 -0.0886240318946736 0.5877181411306021 0.7064923352303643 0.2977609211949377 -0.7178093385894488 0.6189964633161869 -0.7275279997599426 -0.43482323900364284 -0.8709260599830162 0.26821748793515665 0.6376745665141081 0.6476662486490015 -0.4158350437731535 -0.031353609556912465 0.07340078120105908 -0.7260680234804289 0.14260832675689028 0.28867291225805936 -0.6146823038579174 -0.40675187312210004 0.8152371481775302 0.5593225322512432 0.8741639325682673 0.9084969281842883 -0.9054683723801435 -0.12919857421505476 0.6237230181560653 0.1965972063006418 0.5252882238301138 0.5560947269829077 -0.016960913611491213 0.036035810091566756 -0.02720145496748616 -0.4985525496970651 0.47511311671192247 0.42574567257297113 -0.5490382643223826 0.0657778898176542 0.8850660905564298 -0.7207388408071398 -0.6034249581715974 -0.568953921634181 -0.9828336397045134 -0.18438605542440922 0.6492876237309577 -0.6023266235725235 0.6429563503581737 -0.06416496171016894 0.4940522837662986 -0.8835908263080436 0.8133333098739313 0.23116292569168162 +123 104 0.7184664127027967 0.5534868124161831 0.6084634901269639 0.015708784815819277 0.5473075978702024 -0.8846882237241709 0.757362417193197 0.6992867164491732 0.05825610803843562 0.13571793756929496 0.17635596643347262 -0.16796151777598634 -0.8140360114698657 0.1798908444814511 -0.1732885299329232 0.7107755264486151 0.8626968581563279 0.44388089381916207 0.8215462535176186 -0.07333332684026739 -0.9983231401429788 0.7232813072349622 0.11967122938818386 0.3789846547996183 -0.9081125231568701 0.06317002722674503 0.758075442513646 -0.9388048450632687 -0.5469624424363317 -0.3097298210673234 -0.7156956198175952 0.07495753847069464 -0.1916503055828267 0.5934391348072992 0.6236077223688685 0.42354309218940855 -0.003597482057018153 -0.8913049702261469 -0.485594103146072 0.9824470824808289 0.7472390328233336 -0.17153046248679593 0.826093322160923 0.4407546991470659 -0.12229890076450345 0.7113937634872265 0.3884811828293857 0.8151697567432157 -0.7740793699911839 0.8015432517093779 -0.8485646399414468 0.9902741090603635 -0.36085382535816946 -0.11081388866959374 0.8526735206271963 -0.9334409305490319 0.9828008900125993 -0.020058907801061565 -0.3811437134304769 0.00823115651815498 0.7329972309324018 0.37054855657719066 0.12173711716061497 -0.10833151856989098 -0.5442261247692695 0.40991048473356995 -0.7708471407229416 -0.553149402359516 0.3159046762080622 0.2421576274149777 -0.6937436016959635 -0.13672225187188913 -0.15572782662711337 0.0832391021420571 0.8304827078924202 0.6975301151858044 -0.40451818709343557 0.3165352174952354 -0.9102788126026007 0.27340937041749025 -0.6977184559784677 -0.030755207163656095 -0.3342313464002591 -0.8061471010259242 -0.5539015438714974 0.543255748064229 0.6753556198048303 -0.6724104531580033 0.2840756301282559 -0.7396134778418237 -0.4265125362363016 -0.9660747725279033 -0.9632954171024521 -0.9414993112089989 0.9626101852842537 0.07717253112102473 +123 122 0.8766154949614289 0.1556427220204697 -0.7882485582970675 -0.43030711827215495 0.7856750617781754 -0.7471371284097208 0.9250434155904281 0.28145418744981 0.390638478076595 0.16532209487759753 0.6183200729446139 -0.015183878672097917 -0.8404477194035733 -0.4979926941977586 0.11784067474327165 0.5681404363905966 0.5615272529786817 0.37939643310071425 0.5334550589531257 0.7436871001848548 0.3247936254501651 -0.06599441013757534 0.5090808101898074 -0.8460495840396187 -0.5805414102836162 0.797037681121336 -0.08161411224610826 -0.5340270027796648 0.24566080834685944 -0.2969611222404651 -0.6600584000622292 0.7132832942472358 -0.09421675965377307 -0.6981879579057457 0.9568263352021589 -0.585868087975336 0.2955144955301743 -0.7350984811480512 -0.3373925460291225 0.3382637481476134 0.5887862665754278 0.11190866212723716 0.7416167864308003 0.12975707072499443 0.24767547953821678 0.4317937690041418 -0.003586417777742268 -0.6601653448387932 0.5700134227317206 0.8777657866795188 0.1224649001201541 -0.9026062634671088 0.20916335866085478 0.44392853703011736 0.1151648635926592 -0.034072563883012164 0.9260175501911909 0.7288410239646352 -0.45571788751572595 -0.4095570855600046 0.6887966757194486 -0.7845370827464526 0.4557252960258249 -0.8287124192838586 0.3625727250328141 -0.2975510247079851 0.652044667693511 -0.36068371367330276 0.45995284979224715 -0.9227477263669417 0.4151073487942818 0.12537459893853597 0.19700918039873083 -0.7980667066086271 -0.015084257845891402 -0.6885690606337476 -0.6590465399918619 0.1962741114331057 0.11980945344605853 0.5629925380418099 -0.062979021859219 0.48757651639070576 0.8216235563494794 -0.7559989900878035 -0.6443178445654518 0.49027859160786647 0.8381567868399857 -0.21550566390986203 -0.37116086176240337 -0.9351601049057487 0.0704671098035421 -0.7340673410301142 0.7528337879041933 0.15616673630965172 -0.662511848174034 -0.2006188374954172 +123 123 5.505627015632307 4.656252020621625 6.209934199078579 3.207874148642885 4.398026665695053 6.285804038989936 6.1842355774513385 3.050063434023047 3.5983233927111544 4.061350761157355 4.315036555798348 3.4564068037862885 4.236276142896395 4.044512299010586 4.102491831439709 4.533257969785556 6.078401049892215 2.335791630203454 4.600146398109954 4.725890705596807 5.3277166257145465 4.483588592635865 3.9284541434934495 3.6404802882830785 5.393733877082723 4.282334586941798 3.173943642003229 4.106417132730692 4.259924447318706 3.952127566932715 3.8332509404042554 3.675783598544342 2.565416235025926 4.709269050324592 4.90002601546961 3.254212383628122 3.650497593459364 4.018263978993382 3.751569124722093 4.733475683044764 4.319076009181359 4.55732164437325 5.258225865935119 4.6284519942912254 4.310032286200503 4.4174086541686 4.1178887712388565 4.078394450150914 5.597192409685097 3.849214346030884 3.8486012643553122 4.447643018548461 4.165189023899538 5.251138075389383 4.5319333306941445 4.796275433060468 4.505239022181572 3.0171805316052005 2.9788925091386753 4.363432466613725 4.52375448627006 4.5731544443024585 5.301300663331678 3.578914411829998 5.4993973920364185 4.259655447138301 5.215991579762968 4.2337976421345855 6.107580509332579 3.0630816500046407 5.55005705963412 3.7183221763229284 3.6346023651684347 2.3385740988627957 3.2128717079904066 4.334104789027176 4.9515834502613405 3.2783301696890192 4.061223898065546 4.981719108537118 2.4032572941828816 3.3417982016847194 5.116740790759541 6.470423252026708 5.7073388130049185 3.969153160188733 5.423273216097173 4.914786035626142 4.317025618934743 4.6251403689947015 4.571563407684122 3.843367616525462 5.1649534494293885 5.329063730549754 5.243863854803476 4.156561544506197 +123 124 -0.8548856043681761 -0.16456541336560537 -0.8777268359618109 -0.48583611352768674 -0.7693530375895852 -0.8015068961460687 -0.6229650846669335 0.26721308712605807 0.0018976219897457458 -0.0787167696321096 -0.37890744647808283 -0.4716922590830315 -0.719482024905238 -0.9378978098271731 -0.6492435194656916 0.5069385071152821 -0.47836347876058416 -0.09707137395664311 0.7395454585827108 -0.7225132898788362 -0.6454190409394787 -0.613980332593238 0.6660486603157807 -0.6193006807020032 0.27124094170483093 -0.8866752269786005 0.10089731354576226 -0.08325902559481868 0.708325648052001 0.43096108782175935 -0.39612091843577524 -0.358107104420639 0.34187214974106594 0.6012137023637412 0.9193966181738058 -0.0846026214004798 0.9631244937673704 0.700926423031063 0.26532132983573775 -0.5477122139595614 -0.3934656140092434 0.9825812573651442 -0.6930329157656172 -0.8718052851698914 0.6005280853263257 -0.9894670607702878 -0.17938496204538645 0.43041602782238364 -0.9466532692183418 -0.4319307790898532 -0.07493086927420034 -0.1784046583913479 -0.09797050965768483 -0.8219089390551593 -0.38438547929685885 0.6820604441004934 0.2970568863356784 0.09190553009223934 -0.5144123306649204 0.024393314597891402 0.8262521451343405 -0.39266177168958083 0.22602563783443763 -0.06280487241772703 0.5248891093617374 -0.1554378477825613 -0.8066739133259426 -0.15933790197520037 0.9999718239552795 0.0962608626310486 -0.9760327353698064 0.5298347495375977 0.18620739312989332 -0.15360437428111706 0.017561933565431787 0.0014288507722584054 -0.9614121431009941 0.06733689017378808 0.1797539959335943 0.634622849179681 0.38930962608836794 -0.1174541944997678 0.2687651977644858 -0.9213893520819747 -0.21551655772548806 0.08966075180575328 -0.022403388044916372 0.9418322509285264 0.5530576793884485 -0.6615608658643397 -0.7681425555824599 0.5304668752714481 -0.40309733940657666 -0.5894839557760896 -0.12321130362133825 -0.5423837148316615 +123 142 -0.8980634338237896 0.7252170140473704 0.5638840441238948 0.5156406669977849 -0.5845469449082359 0.3889323608384825 -0.5746480276905881 0.24703202254996515 0.5492832760095134 -0.5086819909101763 -0.04623472768165038 -0.66307166742296 -0.16161054780729756 -0.6607328664159693 0.7520364191883291 0.05997489503393183 -0.7854079477449547 -0.23811289718056483 0.500007111245288 0.5301240886004115 0.8320620086699517 -0.3854094243727533 0.7680150288469465 -0.016990895344846324 -0.6430437237084323 0.7662538498315117 0.454283000501879 0.4002314550958954 -0.44573317431168014 -0.1827571850104872 0.7600933873996196 -0.38515330432786965 -0.003234196435319081 0.0457668405176086 0.41625447602269783 0.5578789000430495 -0.602395853578181 -0.314942847265981 -0.10732020800140085 -0.6233193887047144 0.3429848132096005 0.46134171180373484 0.35431874114554973 0.9704094865253183 -0.9433172879540195 0.464093899884336 0.09848335652733708 0.7772367697784488 -0.6017740837603325 0.3401570514038521 -0.8283495413753401 0.15587080879758908 -0.3249176532779203 -0.9432125031659802 0.25385317885633185 0.6500501740066058 0.5177055296301487 0.20327425270809618 -0.005554668693731335 0.3083586131740703 0.3770750245394414 -0.3261252521166178 0.9941298420080211 0.24569972243837834 0.751908629668814 -0.22075654998442595 -0.09203110430612194 0.6782483466931919 -0.9346814888659276 -0.1277655131504265 -0.8064085689724372 -0.7790128974805486 -0.6885832997176342 0.44066672602134127 -0.4462746363994936 0.86514504190633 0.00758993273366837 0.3113628027832873 -0.44067646986891673 0.4254564881162177 -0.08144748585689587 -0.5390093650051271 0.7593562363086712 0.7540679676299555 -0.47480826446049873 -0.282188100214088 -0.2320091885435025 0.46610565505272894 0.23399132161233704 0.2807509914998112 0.9229380494305952 -0.06228025349648214 0.4853272154401913 -0.8520940809227093 -0.6091462509447865 -0.7463578363780712 +123 143 -0.774015127074519 -0.7402584158017538 -0.5783358985610876 -0.06325631068264026 -0.6171330131806883 -0.7316850958133834 0.787472221450132 0.4473289636063149 -0.9511946099686894 -0.8614156415383736 -0.6607114343821254 -0.24128633674703526 0.08518733567152315 -0.40098770362047276 -0.2530985776231556 -0.6448893514891123 -0.9189700155926581 -0.1538434199701353 0.13139406824418742 0.0883998146451439 -0.5592508799144087 0.9722064494329721 -0.05166225593488294 -0.020671079028611095 -0.6270028153844984 -0.10019047829464878 -0.7262899053492378 0.2295757009388124 -0.7964265158264359 -0.9808156835064405 0.06555724213886127 -0.4693607869449128 0.29356929194398784 -0.995368525551598 -0.29043584874187434 0.5686157979588353 -0.047659174577871166 0.27133647907999126 0.29197361778062136 -0.05498541945864677 -0.7885571441242321 -0.8085847170718448 0.15469007491843922 -0.5131867936043055 -0.9705451250235739 0.2599924740728867 -0.924145557800887 -0.1509156876234361 0.9113617957229339 0.4864799683913035 0.5889422240001627 -0.29817897838200613 0.7152536241498377 0.8692808846766216 -0.1364501534919591 0.25790764981008074 0.3634777554448716 -0.4045666960220249 0.5137583509889039 0.8610170492791434 0.4649456154979412 0.7643184935156182 -0.2697404037917981 0.29164621608236496 -0.9573394297862856 -0.3995478383834119 0.8417577720285478 -0.18379713085464777 0.5791969861683817 -0.28531949939165435 0.00482693964402281 0.43237771048220286 0.23630056803794774 0.09293218701265715 0.9930624483568145 0.8710310469532896 -0.87600151293312 -0.22286167348541475 -0.24122414900726952 0.3998917696898565 0.21733608596522314 0.38397047819867125 -0.019941432337275078 -0.42213887928589444 -0.5315585883427298 -0.10240629724697214 -0.09864603822899887 0.8080795490178521 0.5747369448754882 -0.12347068772298009 -0.8565367887767241 0.1925255732814508 -0.45017200532160695 -0.4338760400381896 -0.5323780321114375 0.7007511265749304 +123 144 0.18981215755098968 0.7642612871079988 -0.46469258021369875 0.48719966556691463 -0.16936755570377704 -0.7424011398062109 0.824718001464247 0.44161300192498665 0.015570364707790052 0.2043497978471014 -0.8899128317355249 -0.1513209248618963 0.9938180131968108 -0.3170279021152618 -0.4375895430133343 -0.5118195775678511 -0.3850077040354438 0.1412769066036894 0.31966586652576257 -0.9864493756640431 0.8747021269717843 0.20284819780640673 -0.4361129806634174 0.7109283332494964 -0.345244859630899 -0.08687410385132566 0.08949423181743343 -0.7258082206744085 -0.44062387115348267 -0.36211433166464935 0.20739152219163848 -0.9661635112126274 0.5549114796593702 0.23736766489048855 0.9923041393269889 0.5381559562507527 -0.009594098939953222 0.43052548047524875 -0.7382744951442934 0.8292558862224941 0.28859230397312774 0.6078987760655854 0.8331184995036802 -0.2014630528618253 0.7897524547294785 0.7286342294386816 -0.7441270769986756 0.0384429229039609 0.4013512806444677 -0.008061408092903344 0.03375578002339541 -0.7012675085144313 -0.5588185758567743 0.5414695307344082 0.30769350586451494 0.03170488788052794 0.3665442720022065 -0.9819546851922103 -0.44666667154734596 -0.8283258909182141 0.40541833504725555 -0.29058493015713704 0.9919652014192903 0.492669855272317 -0.5673180018294846 0.7653819029818589 0.6264782029438483 0.7869396064165033 -0.8706775009926677 -0.026564605941290287 0.43476020070353694 -0.8780499258240722 0.9658535451182679 0.12619443615510129 -0.24215107977706474 0.7823939942647111 -0.8647171890557386 -0.5526168684323838 -0.8131039491624232 0.6537660911581173 -0.11837825379535682 0.590269011754267 -0.9691734663296845 0.7586585359853582 -0.8728118097869939 0.4685481779922014 0.9459264283393951 0.6724599750125106 -0.7489324034436842 0.19934483194159092 -0.059606116621564675 0.4380680052444643 -0.8380105261258779 0.5570068508455843 -0.42296585182662905 -0.6448291761502416 +124 103 0.7527170682640616 0.671137189828598 -0.17211641100200925 0.2567082828056091 0.7979782750523714 0.8646359165612685 0.2736744690499142 -0.7812403779383235 0.37117288901598045 0.515709231732538 0.043006023084134704 -0.8969852619004788 0.5892944845295693 0.5224893947954139 -0.357971137270263 -0.45270647773088535 0.36882448732255146 -0.7848048014996807 -0.2809631171653948 -0.7260585363850436 0.855117790225348 -0.7241635378124263 -0.2661852926786039 -0.8892347581607309 0.1112222331622541 -0.3985282702739077 -0.3712329067208855 -0.17007085092489516 -0.6144881718731172 -0.048741816163298424 -0.15375041934589273 0.15021124126293017 -0.7649877967118133 -0.013153942515020889 0.4453714830385924 0.38154498319356334 -0.6102790165379064 0.8753844622895237 0.6675275417120781 -0.07449725243312821 -0.4328601422162779 0.6884292953783342 0.5381306152138807 -0.9392876073143761 0.9217828407613828 0.3465547067282906 0.23557657718672087 0.39728204442967674 -0.0019171453205346634 -0.02385176318117921 -0.9362941984041528 -0.6414369687302197 -0.2280706939756525 0.5436541432602531 0.9447269307391326 -0.5497913265545635 0.9826368741790998 0.9857899146882154 0.4543720157201421 -0.17264680188904413 -0.6371183981288364 -0.9556212661545889 0.08263847400635727 -0.21970477552835588 0.011538674797515691 -0.8300414152502209 -0.4786227568956165 -0.3315041949084854 -0.010036466878134531 -0.39513634251191543 0.4336335582450501 0.2912960213206832 -0.7375950995470202 0.7413227949846162 0.7190528679057233 0.16929004416288795 0.16771113177340014 -0.4356787948854477 0.2878608181545079 0.9706254071864617 0.08525168113310899 0.805971231326237 0.9050264166375519 0.27270331731503883 0.23943719694387777 0.2122620591704727 -0.16565937307272804 0.40214965627326293 0.1382835583680586 -0.568832504629488 0.8712670455383966 -0.5890418270722433 0.08307718302663303 -0.46451986428957115 -0.5102956962877057 0.8390262203900916 +124 104 -0.3206269806896487 0.19950504646084255 0.24618272179680312 0.7141664098446023 -0.40646305067847854 0.5531370198414456 -0.7979460516481602 0.38713594468972334 0.2872837189818769 -0.432782550965793 0.6949704108384227 -0.30878296034199404 -0.4517268301777084 -0.9552140922454702 0.5464257864046491 -0.40026351581930975 0.1581710595730037 0.11331634434346749 -0.5185643477599671 0.9993940741900726 0.7283319005794198 0.5312189318728271 0.8502093046003776 -0.7718688246876155 -0.3265322705604723 0.913681526649446 -0.7837116705645615 0.41799263776482976 -0.09724149052514441 -0.2901932672047056 -0.7088167943545232 0.2480059556271179 -0.7385861197116645 0.08110067626233985 -0.17513445638348268 0.9297627247151976 0.9862120481197518 0.12531420562467654 0.04358292413766929 0.004566362802921997 -0.13011264666021582 -0.20022034200899919 0.8780405462192713 0.6383332720216024 0.027424148955784045 -0.9004956243239843 0.6041550465099454 -0.401825745721633 -0.5340975437609243 -0.915850891587058 0.18955696700281077 0.2786305535621063 0.37785354944013805 0.6714143437101534 0.6295761994314852 -0.7590373096008312 0.20828617040488395 0.8417532837918984 0.5581228281663817 0.14287445748765482 -0.2910032873673527 0.020262494530507436 -0.5102260625623491 -0.6395252310371196 -0.01532148606213779 -0.27357016675122314 0.6060285726990018 -0.332025055959946 -0.3631921080484064 0.8550096843311232 -0.3297863022083434 0.07248094300475705 -0.840171360594544 0.19745784807058264 -0.9852616831908114 -0.19731473408690414 0.9959104983486251 0.9338119884961917 0.7339453362799426 0.00955334535189234 -0.511906701662455 -0.9626573307317683 -0.8157378797853168 -0.25444094186113664 -0.18023478848545071 -0.38949448423008604 0.7960585385927432 0.2781503338568838 0.49504221703148676 0.4828418666903602 -0.0842537709346809 0.18690181131851968 0.2824308107600657 0.4093654451970261 0.8412023964184867 0.8748161088919093 +124 105 0.09052687321363528 0.8030554154767753 0.38084773106049763 -0.9377102006838529 -0.7172598519710316 0.3863933863140059 -0.5434582087527227 0.9320375455097751 -0.7569777192929843 -0.18839192978311425 -0.33223007779923397 0.3530470515178006 -0.06962695444491618 -0.9623870206978931 0.15495796608277912 0.6290630633889513 -0.6385387092188186 -0.21666224880333007 0.31966165941495905 -0.48061159905270623 -0.18380721796417632 -0.5437077021476169 0.8982424330316032 -0.47651139562714384 0.3176470036320238 0.1012051457745835 0.8510833896903398 0.44352124290144324 -0.6354422452804178 -0.8851275237058551 -0.9159958213549257 -0.8892047342302425 -0.643036525025777 -0.6410147687381083 0.15280324635864018 -0.8235773156727726 0.31050965524904894 0.17040761173209162 0.1877835881837573 -0.05322228552217134 0.4042933403851863 -0.011030694875268532 0.08235004514413302 -0.6601734909943353 -0.8875131940385135 -0.8027567322222651 -0.22592861175986023 0.6825853971837152 -0.003000048907407127 -0.08614767047073113 0.13500207478631365 0.7594360890065 0.7315097319899877 0.33727657315618886 -0.8009115618856582 0.09355037925860676 0.11424709862023885 0.5000001189322749 0.8431258494445837 -0.35976463500987954 -0.9947491114302309 0.5888694789505056 0.5786951361849622 0.5340199765232199 0.3331380238939605 0.7169901121014608 -0.11790612911596976 0.2540583597584134 -0.2751548909157995 0.6988455664612783 -0.935212985850753 0.10276400037554434 0.44706120984323605 -0.1308511399735064 -0.25966228486616805 -0.38270838860375567 -0.529966598568165 0.8911786209489405 0.43642651382559006 -0.8372980606382068 0.866834438893259 0.6437757114408391 0.8901038408851754 0.022934324409389584 0.9249959669730692 0.6111002909127288 -0.15067658807260265 0.22917103413403783 -0.6972496758836733 0.07076462312567022 -0.8567044767590777 -0.5595251792206712 -0.16469928368162834 -0.7143951898328047 0.0562528759439056 0.6116820737941473 +124 123 -0.8548856043681761 -0.16456541336560537 -0.8777268359618109 -0.48583611352768674 -0.7693530375895852 -0.8015068961460687 -0.6229650846669335 0.26721308712605807 0.0018976219897457458 -0.0787167696321096 -0.37890744647808283 -0.4716922590830315 -0.719482024905238 -0.9378978098271731 -0.6492435194656916 0.5069385071152821 -0.47836347876058416 -0.09707137395664311 0.7395454585827108 -0.7225132898788362 -0.6454190409394787 -0.613980332593238 0.6660486603157807 -0.6193006807020032 0.27124094170483093 -0.8866752269786005 0.10089731354576226 -0.08325902559481868 0.708325648052001 0.43096108782175935 -0.39612091843577524 -0.358107104420639 0.34187214974106594 0.6012137023637412 0.9193966181738058 -0.0846026214004798 0.9631244937673704 0.700926423031063 0.26532132983573775 -0.5477122139595614 -0.3934656140092434 0.9825812573651442 -0.6930329157656172 -0.8718052851698914 0.6005280853263257 -0.9894670607702878 -0.17938496204538645 0.43041602782238364 -0.9466532692183418 -0.4319307790898532 -0.07493086927420034 -0.1784046583913479 -0.09797050965768483 -0.8219089390551593 -0.38438547929685885 0.6820604441004934 0.2970568863356784 0.09190553009223934 -0.5144123306649204 0.024393314597891402 0.8262521451343405 -0.39266177168958083 0.22602563783443763 -0.06280487241772703 0.5248891093617374 -0.1554378477825613 -0.8066739133259426 -0.15933790197520037 0.9999718239552795 0.0962608626310486 -0.9760327353698064 0.5298347495375977 0.18620739312989332 -0.15360437428111706 0.017561933565431787 0.0014288507722584054 -0.9614121431009941 0.06733689017378808 0.1797539959335943 0.634622849179681 0.38930962608836794 -0.1174541944997678 0.2687651977644858 -0.9213893520819747 -0.21551655772548806 0.08966075180575328 -0.022403388044916372 0.9418322509285264 0.5530576793884485 -0.6615608658643397 -0.7681425555824599 0.5304668752714481 -0.40309733940657666 -0.5894839557760896 -0.12321130362133825 -0.5423837148316615 +124 124 4.5661452095237385 4.990227727261512 4.791734231258462 4.674832122412741 5.7064657803377425 5.806597409200972 4.722912544861371 5.160514414285297 3.1474821580769454 3.2948455769844482 3.154734598428625 4.362026534987013 4.265995317984163 7.250240895265176 3.507543314431362 4.499584625068609 4.025117795768869 3.1949739377826534 5.454216875146564 5.559227488690425 5.332981285078611 3.7196199939600643 5.544317754629554 4.766823182358499 3.2268872141428346 4.023690217856042 4.9144532647001835 3.8109419051339852 4.617954935348969 3.6623416404867215 4.981837768964514 4.942407873885153 5.941002837451272 2.161111652030824 3.3648933213854666 4.927052331508687 6.015799839900827 4.542184140828055 4.27750523209409 3.3557180555391932 3.855176091113114 4.1434391765294185 3.2907737003921604 5.3277513725592485 6.046923749281071 4.027535108525069 2.7655902059758604 5.236081087190192 3.9124500913471287 3.119054771925303 3.4849950444363533 5.92856228612678 4.02049895583854 4.345360521321955 4.663091424941202 3.8702707631955207 3.847221727259868 5.292349342069816 4.154663917820706 2.9581098216226476 5.797506221852062 4.734682674945038 3.520904844462486 4.656146368823397 3.6275630297930066 5.131359954507989 4.898936393907521 4.94705227898546 3.5844035951361337 4.813757263765309 4.265682130805075 2.8648658092859476 3.9958097162717734 4.709321915023061 5.502266853307526 3.089431763801799 4.7839269212759525 4.441081305733925 3.8940042734586298 4.119427527394896 4.75768056114866 5.207496143767626 5.333409910378714 4.362817927804727 3.8826748911067517 5.0000916292027755 4.310762374918492 4.425295333251846 4.320567920763192 3.243106042693401 5.2081631859246516 4.179620276280315 3.1025033224321 4.483122733824313 4.344507792476751 4.9338745569116575 +124 125 0.05842397600428484 0.6551514748227254 0.5693987146516493 0.16131137319613575 0.40708845519132697 -0.9610312050465646 0.671092403605686 -0.1909451309192125 -0.03987157095935223 -0.561177271965251 -0.09031853601527673 -0.49529719907796577 0.7632577820774245 -0.8018019105896532 -0.9461373376857376 0.2906739238980909 -0.2933510192592079 0.020442821595425764 -0.8193482593380719 -0.1568246544388039 -0.3640454361700085 0.41633815651179806 -0.5165143981743139 -0.4928263037013785 0.5100964543491044 0.12706751753379963 -0.2520436686258516 0.2886670570831944 0.5777858018414148 -0.316894411000352 0.9973439982133925 0.3034685585659489 0.4650084722845609 -0.05554583549851011 0.1976973629099692 -0.31940659409861305 -0.616292935373012 -0.6750097317926298 -0.05729331547294758 -0.38070669259489454 0.8791027655870409 -0.4816583949567572 -0.05888111848942845 -0.5663338693809754 -0.9946766687283233 0.051746095557045235 -0.6611020416089559 -0.24507312091725475 0.4814669811888268 0.07947172264620961 0.04945928762898788 -0.6875537045049303 0.20919848725975054 0.6510368428437214 0.5747004470660038 -0.13671652758523445 -0.7122550896185544 0.8407788970081393 0.8236929999487304 -0.08108100305397281 0.6955390453995447 0.8077647454316284 -0.364526507746757 -0.632113508713138 0.5279597059092438 0.7639968168785805 -0.19402173842893689 0.9355430491491052 -0.27526397221672694 0.08387947947343188 -0.21073398218865402 -0.547086479911084 0.7889915936830296 0.8947220612418691 -0.7395417285882273 0.3791593731382583 -0.36342876713052186 -0.5154579665802719 -0.43819265629293525 0.39908557245599585 0.04814781116808042 0.16137632530249246 -0.6253254759278057 0.8346542933816206 -0.21366909795993516 0.89056028947217 0.9175863347971913 0.11047624223047525 -0.054530415049887315 0.05650733780451733 0.5432480768955632 -0.5444233536820546 -0.3943986267761592 0.02967538041062978 -0.810471920328359 -0.0953475872690519 +124 143 0.7908965921851021 0.9146789766501318 0.7950067231247107 -0.9422860328223521 -0.7483107219795924 -0.6978460699014599 -0.08062410329879044 -0.5515242623416505 -0.39294836645615105 0.039326490096663 -0.43155030092438196 -0.7308771401306404 -0.4724435563611249 -0.9487019398616325 0.03903602466013756 0.6151886679576057 -0.7337134901030096 -0.059828922267707974 0.6038199089479497 -0.8609970174407346 -0.9228011662827449 -0.4292990748695087 -0.726180502040193 -0.2350380192849022 0.24408201783123906 0.30337404910959687 -0.6110038844880636 0.7489138008811376 -0.3672463846227425 0.43547648913342596 0.1861508443106572 -0.679123139698173 0.6805301774860304 0.42641129238975517 0.16013373184020452 0.3655839651457369 -0.43568939097401893 0.9491137450493978 0.7750785131946325 -0.5593722601992295 0.41404777437965934 -0.07184130481946749 -0.2156815198607125 0.06630663364135048 -0.9361997391996599 -0.4462666533997368 -0.7877366718435215 0.9642434133688003 0.8263127815074207 -0.3984514428805823 0.34195479720123867 0.9085378701409206 0.3557920789461817 -0.4078247880265873 -0.6501531788492008 0.18856158013998603 -0.034777633278469944 -0.5282786513816484 -0.0661347649349544 -0.5520967630670728 -0.5295815091811862 -0.9268183220739137 0.6828282428022139 0.934793911198506 0.28537748074654967 -0.01566050108220396 0.30913394366720137 0.6565447835557514 -0.14916412177623917 0.2521614399707164 -0.12125649500378333 0.5760244662198175 0.053539768430463264 -0.28064151096265166 -0.7240253691478242 -0.4845520749136776 -0.5944648778431088 -0.07549466463556143 -0.2136351720249845 -0.1643771429675951 0.7999846540493596 -0.4106862993637983 -0.5791091023961805 -0.3454504717840843 0.5507335831107785 0.24076124251804232 -0.842424499242737 0.35627631960045303 -0.4998351279050075 0.7286941275249343 -0.19324365796720344 -0.5439368564374978 -0.3003487384550625 -0.5833315227051095 -0.44180652585433045 0.6240869583491551 +124 144 0.8436786649685737 0.7682429334422081 -0.32611551674095685 0.10170492902107608 0.5790094469968796 0.3265892708083693 -0.9302062954761599 0.7723139785940516 0.3466211289791179 0.3951470598012252 0.1697373133941158 0.29230568359679143 -0.798413561064492 -0.4899780635599753 0.03121553120567655 0.6172294588386733 -0.04127517096084565 -0.8898803980939514 0.9845127453943401 -0.9983305322486657 0.5923336913424992 -0.20427007960199828 -0.5301441600775412 -0.46015684567203996 0.08312024519107863 0.6088482376176898 -0.423572515364268 -0.3361848535957741 0.11567697756581219 0.3361788767123326 -0.3271743495826429 0.9272518845473523 -0.9913415254883999 0.129938182858802 0.8807450007452422 0.8160445115100374 -0.17809848335135126 0.08705977683076993 0.5796034691567558 -0.8951585287885617 0.0058765785604157905 -0.6768459516067153 0.6640067863356909 0.43515215997988554 0.701635501955411 0.1929634789846515 0.0009812929718631125 -0.4919124595823252 -0.5347541735570835 0.32615684996120686 0.41767939255048736 -0.7133552323877221 0.9782495747015216 -0.5767523646270976 -0.45941369981802715 0.21279822300735463 0.4218240027910427 0.34981771540683493 -0.12898267135043984 0.36090720847316127 -0.25356723957119187 0.23445506487816892 -0.06547098743182977 0.9534934135540536 -0.9420856747675803 -0.981746074475528 -0.7589543583472484 -0.5719247457363352 0.34597784906576634 -0.500248416415163 -0.9898833092846033 0.36123321841626765 0.2594760908959528 -0.9737714233201087 -0.777459415608083 -0.32500956403815007 -0.482142147441031 0.4743786998071762 0.5764555054787199 -0.6096787701114121 -0.49947612888534776 -0.758292730203614 -0.9572842947416667 -0.5656001298270339 0.4839433804493938 0.9340392375667541 -0.2785445382121188 0.9101967749180226 -0.871175826824941 0.08487534412644404 -0.3901014101637179 0.08605420596280178 0.8583574366347206 0.5431466767206525 -0.27097978182065274 -0.6333922922561313 +124 145 0.7033797674443691 0.06378449619897997 0.8298144849046569 0.6044264296822048 -0.35741325678915503 -0.6694259377845115 -0.767559868030093 -0.6559523172196013 -0.7525876616837957 0.8868294693215883 -0.9902746537217184 0.7158374399044138 -0.08262479703098768 0.6461852567558091 0.3770338674421325 0.09987833674359159 -0.5234285514238257 -0.6685254084809029 0.7959451230893266 0.4917185987502919 0.9040636979876144 0.20584088990682847 -0.4533451475154324 0.25080335456939706 0.6677802908256782 0.5870022726026329 0.8010982020248762 -0.7329639024521895 -0.6664630824631292 -0.8356692372931449 -0.7083185367364147 -0.9570436739487593 -0.7461106247042881 0.0055140266957385276 0.24204460365884906 -0.26399812892956875 -0.9250762015181453 0.19160882010736136 0.8720504409993621 -0.2822412517786308 -0.7169804075026507 -0.22187081271677056 -0.07152997946853201 -0.331966641847663 -0.8465439585270857 -0.18456687597408794 0.011893439459591537 0.9598466047477741 -0.5533552238807486 -0.7452863092073683 -0.6238663676769622 -0.9266712980005578 -0.7813883049338493 0.18245164884542397 -0.11603467040698012 -0.3730358761691115 -0.4303823092507497 -0.29369575714572416 0.7010424015058261 -0.8539026635043312 0.6777022529264269 0.7571430938766115 0.6203837236642777 0.35102364321254864 -0.7193636082467645 -0.9909633676379908 -0.9265889897725401 0.8234000661035892 0.27531418603168456 0.9419140615155612 0.22804380217728148 -0.04169432917942495 -0.17668464635157743 -0.4126882448821745 0.33499673135819297 -0.9421117004682642 -0.38200340274383415 -0.48619274529555945 -0.06799371724031755 0.2521047918175723 0.7529099146532277 -0.5886285178578619 -0.10962512093065335 -0.2700146932374976 -0.8481081041036824 -0.6841783894190641 -0.7957391639225058 -0.38829737928036345 -0.7664252251161365 0.5702023803940393 -0.9177663088432608 0.7265248338240244 0.3854888772953784 0.22788703585040437 0.7126812844807604 -0.43799702013293484 +125 104 0.9090125376729692 -0.14273130971685033 -0.68200057624093 0.5687488035268464 0.48117593157595584 0.008300083132914082 0.7256708028514944 0.4434945001246169 -0.6923902821957906 0.76541181193388 0.6075201712790448 -0.6056023439490352 -0.5741088032558439 0.7946840022321813 0.7955207686351102 -0.20997103642456683 0.5640617560798931 0.8547059811646245 0.7991303427315033 -0.8985794491050747 0.0944028061621982 0.4259618193428263 0.06239564542022635 -0.24869339050685868 0.1542529290303134 0.9691593482621448 0.21030875166042606 0.2627253198088628 0.7919388032285679 -0.2216202783182153 -0.22075885640705217 0.16389800175461455 0.7295379093844689 -0.8193350157574957 0.8803362458442474 -0.2409795760229012 0.14833915544136067 -0.8661457209243724 -0.7041685670406312 -0.33393189448112226 0.9212761814206276 0.3596345897498632 -0.4238695804035568 -0.2634685009425668 -0.594164371120069 -0.04140348780156633 -0.9957819966751178 0.9178146861551162 0.33451991227825184 0.08123305378446033 0.06589391004788836 0.1636880213601335 0.5776535165608989 0.8391299370514727 0.9006587776582171 0.1454976119773448 0.5576863565871302 0.3631459246504847 0.836246773871121 -0.1942943797707053 -0.8861209664044463 0.011158263208630892 -0.4991779757195687 0.5485247239714295 -0.2718635729537393 -0.36598697847320416 0.7346755471839574 -0.9394123004315744 0.47003855917112713 0.3178405473300001 -0.7593945876643833 0.9787618170076686 -0.13581364249431105 -0.2973110799908165 -0.6030368891750923 -0.08605122278170652 -0.5801536387722164 0.7139870195979712 -0.22246124574221904 0.049286783074691254 0.5426426450058794 0.8030334181441363 0.5766726009090053 0.6753766136876471 -0.3469799950400181 -0.9929163340646565 0.39629706506350826 0.9477638193643698 -0.23035668446359137 -0.5942668988813797 0.24643891159923692 -0.6062685139251509 -0.3937491995201148 0.38807074876426473 0.40118675543622206 0.3971984751874089 +125 105 -0.18578425642027985 0.1947780659700944 0.17730663788402645 -0.6263714534593559 -0.36322566763556563 0.18621778796969268 -0.9430235029610392 0.39153237297333665 -0.10358892152653132 0.19726811354684393 -0.6154028601000441 0.8564306528317203 0.6500820160930116 0.1978338534953401 -0.29337374066636346 0.6542222798459041 -0.2647643148359822 -0.5294314496610009 -0.15414143045999928 0.8693298622216821 -0.8523805931538755 -0.9047222463840456 -0.8090936557369275 0.09142937429412501 -0.3825343613652532 -0.3852065140733292 0.3245124635889074 0.18496973077859624 0.2730323424071066 0.9415663960281471 0.4970707615048877 -0.07533252268336721 0.20775423746367983 -0.14852244521816704 -0.33160135873800667 0.708031609062342 -0.16999537276816667 -0.8675323605035037 -0.8480488578027379 -0.05452257891841761 -0.14116932754865208 -0.1445509978117807 -0.31365634472016857 -0.9633827318399777 0.8811305610749893 0.8506699276312366 -0.02610527476468283 0.8802760435937389 0.9327075535722658 -0.9542886487163762 0.12616962621583339 -0.477156761912501 0.7371180649408446 0.6265884109085813 0.8378720935711776 -0.8364980279324183 0.9663920793665621 0.7066352595491283 -0.27203309891369676 0.7228977375525636 0.29012566318956146 0.5784611561650246 -0.12868550969825776 -0.14783975778869451 0.6409678205410163 -0.49778180493046364 -0.8911158403169017 0.6192033834323449 -0.08021938368044412 0.9323807877667396 -0.4042167741170568 0.37783880054158003 0.8733327849154913 -0.672053649396164 -0.15393543846401836 0.4595087331135912 -0.8783512872768411 0.2585179445455743 0.7044280572034858 -0.8796725755886536 0.11162618460085572 -0.12946706923620943 0.16793033214312492 0.05908219486495492 -0.2883706957373229 -0.050123091300523726 -0.6176433795205831 0.3977236868335874 0.5063896777146673 0.9035772484944047 0.05340912732196501 -0.4418745784695861 -0.41371462642951995 0.4674039120587943 -0.8716917364220151 -0.3048591252069135 +125 106 -0.03175433870836142 -0.7126996355910618 0.47867537909035596 -0.5301036918153854 -0.7155915855100401 -0.49640139590851695 0.18936246525420053 0.11961830437135901 0.731129892838881 0.022988007594154425 0.652425185539341 0.6813550900552545 0.3734227629483351 -0.9171013072453471 0.9577228534139635 0.04094813030831479 0.0351554062125885 0.5739903492497833 0.1778728883518319 -0.9265429977386366 0.4292412787014932 0.45923585487138574 0.7856124316972046 -0.05411628400598456 -0.3410836302419278 -0.4589017977151726 -0.6854807728624701 0.12521411045647857 -0.8872667159474115 -0.31951800056495006 0.9935175240276277 0.043880197662865994 0.3047051890097885 0.8372208490206992 -0.8361622198686012 -0.796571689934882 -0.7096794260908976 -0.9217978819224395 -0.6974144558865021 0.6537501016553078 -0.20804334896560772 0.34249918387676215 0.9224689525380698 -0.8280922064211906 0.8339655855949866 0.037275100843702 -0.7686055222031056 -0.788327088342458 0.36676482976818736 0.24821959900331003 0.6889352952320051 -0.47056734181672 -0.3175563954961471 0.633608482030185 0.23291685838452936 0.13499149832481017 -0.5269839357973467 -0.01514430383967369 -0.9049477184324568 0.13251822411126235 -0.13004669712146155 -0.545202251371725 0.6676378658650477 -0.5579533532341643 -0.2039422268435649 0.9300538786175641 0.9370206804438619 0.00052839773953961 -0.29029692864575707 0.651492746990207 -0.828610103053466 -0.9829930976145751 -0.47859057301979524 0.023238542519365524 0.8276315717893699 -0.7103365715143684 0.38294899092904466 0.6327935490591212 0.3055002171064207 -0.2655829621994166 -0.24158927982343203 -0.9909143550854158 -0.6680723781363189 0.10975250624679367 -0.9690371046681727 0.5370801397927423 0.401324353792337 -0.43721653664063065 0.8740302681670198 0.7273426921639172 -0.42398065696827314 -0.17102588124320595 0.7495865930550962 -0.29230198016978837 -0.3550328683840078 0.10536040003630931 +125 124 0.05842397600428484 0.6551514748227254 0.5693987146516493 0.16131137319613575 0.40708845519132697 -0.9610312050465646 0.671092403605686 -0.1909451309192125 -0.03987157095935223 -0.561177271965251 -0.09031853601527673 -0.49529719907796577 0.7632577820774245 -0.8018019105896532 -0.9461373376857376 0.2906739238980909 -0.2933510192592079 0.020442821595425764 -0.8193482593380719 -0.1568246544388039 -0.3640454361700085 0.41633815651179806 -0.5165143981743139 -0.4928263037013785 0.5100964543491044 0.12706751753379963 -0.2520436686258516 0.2886670570831944 0.5777858018414148 -0.316894411000352 0.9973439982133925 0.3034685585659489 0.4650084722845609 -0.05554583549851011 0.1976973629099692 -0.31940659409861305 -0.616292935373012 -0.6750097317926298 -0.05729331547294758 -0.38070669259489454 0.8791027655870409 -0.4816583949567572 -0.05888111848942845 -0.5663338693809754 -0.9946766687283233 0.051746095557045235 -0.6611020416089559 -0.24507312091725475 0.4814669811888268 0.07947172264620961 0.04945928762898788 -0.6875537045049303 0.20919848725975054 0.6510368428437214 0.5747004470660038 -0.13671652758523445 -0.7122550896185544 0.8407788970081393 0.8236929999487304 -0.08108100305397281 0.6955390453995447 0.8077647454316284 -0.364526507746757 -0.632113508713138 0.5279597059092438 0.7639968168785805 -0.19402173842893689 0.9355430491491052 -0.27526397221672694 0.08387947947343188 -0.21073398218865402 -0.547086479911084 0.7889915936830296 0.8947220612418691 -0.7395417285882273 0.3791593731382583 -0.36342876713052186 -0.5154579665802719 -0.43819265629293525 0.39908557245599585 0.04814781116808042 0.16137632530249246 -0.6253254759278057 0.8346542933816206 -0.21366909795993516 0.89056028947217 0.9175863347971913 0.11047624223047525 -0.054530415049887315 0.05650733780451733 0.5432480768955632 -0.5444233536820546 -0.3943986267761592 0.02967538041062978 -0.810471920328359 -0.0953475872690519 +125 125 3.2742662765074266 5.660816311659252 5.41199830190288 4.7595272026281314 3.920558467738532 3.707920070849341 3.3037194065179727 2.3426719449775666 5.001017179065992 4.0754796484976215 5.1789654488583645 5.453621050702223 4.593729678111031 6.584547365788854 5.870866573684697 3.0422142831555323 3.5194673258647127 4.335678991218619 3.8744712202789837 5.886876242647727 3.8607464298385197 3.223437002154226 4.889387558875748 3.7379568312854605 3.5222852670945892 3.7703204186671178 4.334337599504318 4.178691476752224 4.7809703356778686 3.6631188536709334 4.57775566608946 3.5716454321565143 4.719387022398216 3.85839547053408 4.461305615090099 3.787526189175286 3.4906785470556643 6.556965586053158 4.853652417047112 4.420695033272033 3.8496719700327824 2.6631381432762926 3.879358831904315 4.916916052304896 6.204112158952717 3.14792699027816 5.879028179837201 5.381248606038852 3.7875754716875836 3.8467239393585264 4.717091225484569 4.895051208296979 5.05165959787102 5.382182339842379 5.036718469311078 3.542182622571456 5.40598257856089 4.269495440679627 5.495576883775643 3.507711970661144 5.487427270966341 5.104257983122144 4.888007856776115 4.87733724838671 4.522488714581403 5.143038451752276 5.102450912339167 4.0611677562491835 4.428503734767527 5.230438293272686 4.796400188449802 4.3073462161362315 6.155649791668488 4.688300782883796 4.480533662285547 4.268234879376055 5.291864315456053 3.3818279527063755 4.158843780637976 3.054970353788519 3.7923749828937416 4.88664538059309 4.8930299930009875 2.9406835017804624 4.268129264770442 3.7086277577689604 4.2398634867116645 4.444494244290744 4.195068202471868 6.3843394650904 4.646881661292083 3.953644293280645 4.04640166377784 4.071332202609867 6.188619945532668 2.5624189617760194 +125 126 0.021965166247854384 -0.8133596488104624 0.21811928322239327 -0.3283986116936852 -0.7320707543897689 0.2642958416098633 -0.1632702390468097 -0.4564425457157497 -0.3727309285694005 -0.9963305055348959 0.6871124295079871 0.7137031505734359 0.3393151139823911 0.8173495173485257 0.6617093222508938 0.18327395654609324 -0.8990086674464322 -0.3330782078737142 0.06179967810039666 -0.33217705161122524 0.8541828801882649 0.04129070920129796 0.6735388192328935 -0.12973151189153143 0.3855625600070287 0.3032011379385524 0.16035784917539275 0.9087312588017584 0.3324881597470306 0.5469629830470071 0.6768525526475038 0.6567275088546602 -0.5601663468359368 -0.48411663342442446 -0.13493082373430787 0.14749527741244894 0.17184748056957755 0.705734303368291 0.2937231536737168 0.5692335006994713 0.34633311642649334 -0.7315339114847927 0.18543290937239165 -0.27374009415481315 -0.6267631197418482 -0.6608227733767984 -0.590841450341006 -0.23187222713141997 -0.2950509968816284 0.4314688361174499 -0.6868756002549248 -0.6086284722521504 -0.5243466507981993 -0.18891194777782672 -0.302331132533159 -0.24201362519586556 -0.11598264682644222 0.5180611295432846 0.8082811393139433 -0.8451622717407108 -0.7392764706405239 -0.929334547632511 0.19447053240243628 0.6014189346708405 -0.8139672789955901 -0.9516598046862008 -0.025339764431131284 -0.44037036966166565 0.6577382661510374 -0.8922772242446346 -0.46129722698810216 -0.015731960573253323 -0.886965899936321 0.2859254760546528 0.1986713612385369 0.656285555490713 -0.8511396051378435 -0.667469875062257 0.8834260376754621 0.20014724492334657 -0.2385608466264657 -0.9714905429134864 0.03823918228307033 0.06616251684287566 0.17181706720533763 -0.20680080219911523 -0.24144931965586647 0.9820842396902305 -0.014355357385501089 -0.48774878943493705 -0.495928840752734 -0.4447279659057002 0.6614203333189967 -0.20674125536666033 0.33854379781978783 0.6047805751537136 +125 144 -0.7536744713417209 0.8504283482271295 -0.8248416744824723 0.4429466737108372 0.04422111916228588 0.5519131720998907 0.00490672238355061 0.1012249522008477 0.9403552323971742 -0.20420731702653439 0.609629056366711 0.943863304263026 0.01839489095028557 -0.9518022607816026 0.42380281182576507 -0.28910047519015003 -0.13263412291539978 -0.9478516446299368 0.027185356066369293 0.6300693870385559 0.39861917369062816 -0.16700728524940023 -0.48972641377493287 0.5495111443661309 0.44964512859613603 -0.31873245840556463 0.9546132444568425 -0.7576280991937463 0.6819383317193948 0.3383722541668992 -0.06007987961137551 0.9220378858889668 0.30737236183585237 0.02984767360684204 -0.25008733700767194 -0.3224944021408154 -0.6339253800599116 -0.7589645315908689 -0.7841576185109629 -0.3599288333868029 -0.3846377664672578 -0.3120329792380885 0.8633317072180973 -0.9434033103990189 0.6505821355735246 -0.5847508395047469 -0.19876184825937449 -0.9394238093366443 -0.6714820687438328 -0.7918543542703924 -0.8468273797554795 0.7631328119848952 0.6408557329562747 0.9601850984052145 0.05849579068442834 -0.23718784728368725 -0.8918269840398056 0.8205449572925758 -0.7565629114575225 -0.48748411984509477 -0.5823657013202967 -0.7567465966580802 -0.8585525847676336 0.39450341739385086 0.7917001552797933 0.3040773020552341 0.2532566812061472 0.09256784197309931 0.313421479889719 0.34817257721956363 0.4404010699726604 -0.4475820851054322 0.8258506800419945 -0.6578083591024839 -0.524117030784615 -0.6431991620996376 0.1135858110234107 -0.06744610763715309 0.3701232931687708 -0.05524625341161826 -0.8563337819536225 0.9756427275208968 -0.639701636520366 -0.6017382844677017 0.860517594611584 0.7457599126514318 -0.34034020441089563 -0.041677714658721055 -0.030683928075089906 -0.8581005169582427 0.88409353167426 -0.2799691719991031 0.4515981567288563 -0.12922211042824117 0.8817672873498708 0.4509475695143168 +125 145 0.044343561760338934 -0.5328434375215065 -0.700402612351321 0.9661281645663886 0.04637233799325724 -0.7194886332321635 0.13020801265769366 0.008688193298294289 -0.9068347313503913 0.039649324557272214 -0.8481979955422971 -0.191398009744286 0.3522655374811343 0.29696514753574443 0.3617894664254251 0.23936028141172394 -0.3036704095333822 0.14843923899156053 0.25617870199950477 0.9809151299987686 0.7564460404871696 -0.5674454820543628 0.792316829601801 -0.26407987060816573 -0.5055219589359372 -0.11713227173000318 0.5401962263085118 -0.6497580380466179 0.08332647067924981 -0.3887181905364845 -0.4378896934594332 -0.784737764481847 0.9875704010200219 0.17240768553837849 -0.9194847088197895 0.43565144710050885 -0.3408518749347138 -0.703808196548436 -0.3263917832271461 -0.553154092538414 -0.16453680364927203 -0.19664610173944452 0.07789818027748696 0.00910436931922809 -0.5981548889328239 0.5986974697081409 0.7427347098510175 -0.28526036315280523 -0.10557986662007379 -0.07059286941355158 0.9085887285248113 0.7012328044068707 -0.9763598142702621 -0.23985216067964732 -0.5954379824193414 0.066436178198791 -0.32581301791682193 0.18882035622703053 0.6079507963083892 0.11147233566908565 -0.9314481516344029 -0.1765032866169085 0.7584603136803703 -0.9589132637408448 -0.5108656617463339 0.08431527786840287 0.3831634400695014 0.32433260933908126 -0.9412842721692027 0.7124289133887118 -0.47283280581356424 -0.6856254345607249 0.6963699532500576 0.9287234703125642 0.9838894732261516 -0.8532824510875221 0.3379914248049729 -0.10038248849916598 -0.9236819942199248 -0.21477583087843755 0.7327689521158847 -0.067765983566761 0.9331782735240777 -0.42563251968264826 -0.5017723338147031 0.03735555580418959 0.14103639528057355 -0.010467203152546123 -0.7392060635983981 0.9542548773958406 -0.7429019055411832 -0.15986425493742562 0.7206234889167051 -0.8997225969962193 0.6962326651278938 -0.09129750859341934 +125 146 -0.8523715118511024 -0.9546992834614545 0.8275276632737143 0.8300909043019398 -0.9966745238728361 0.1660990362666428 -0.17760345559339807 -0.5962183097943208 -0.5720125701197096 0.7052586303256059 0.3688441509799576 0.8441453477155796 -0.6711083464253971 0.9991379612162521 -0.7686659079766138 -0.1786104968558606 -0.4844877623831112 -0.8972906821490403 -0.6478885112710686 -0.6481721100783691 0.0656960843240415 0.10284352781040673 0.16283792138624786 0.9103698650504095 -0.6745744587668439 -0.78202632938035 -0.35471776902561447 -0.08309020500398279 0.43380099309569875 0.5381894796070541 -0.5874404734548138 -0.3409011897430403 0.8340890922902695 0.32451118367115583 0.6959694017559515 -0.36387927969516487 -0.6180423066408371 0.39368085894696825 -0.33628223533570667 0.8939268408072347 0.18528966009629722 0.09346717335352972 0.6888691067073986 0.2769796871701036 0.5107585451271808 -0.20063176413001438 0.9881074962210283 0.484881392023931 -0.3602011376562304 0.38370070817273616 -0.8545447624114917 0.724082943809301 -0.3472010423827827 -0.35424276010902567 -0.6975520939270976 -0.8651196344016647 0.6428964624734765 -0.3714275236070008 0.24686775997149346 -0.22035104511216286 -0.4021650373391963 0.706326129621083 0.9598519470188758 -0.9287808613146427 0.5918266727314991 -0.8954484432623764 0.988960076476183 0.07880240882657774 -0.8877884362020689 0.8404638927274521 0.37978469854720687 -0.27125586060213136 -0.666451078658739 0.1656339880763591 -0.44532425261209974 -0.2588604631723104 -0.8722947816522357 0.4223042110055941 -0.20671005072575843 -0.05484207871801461 -0.9116118951963998 0.6949072957446008 0.2573175653215658 -0.012444972819551703 -0.516867863857223 -0.06008499086518415 -0.6014384880962773 -0.8483342308262918 -0.974961201656755 0.9590586772642975 0.9920467836985685 0.6746985155977248 -0.1501978356533391 -0.9953675696139155 -0.9112627311887758 -0.2877766756771645 +126 105 0.9433663491887805 -0.971069569142845 0.29938187472065847 0.04929585771201794 0.23731307082617725 0.8219610108812054 -0.5704180714870504 -0.25780128329792795 -0.6607473742062058 0.6139987087173873 -0.6523579103668626 0.9852550185031683 -0.6845478275208883 0.4804071381687911 -0.6859402809720887 0.3742164741579479 -0.8747260611369478 0.21081266346915606 -0.7597254901578565 0.7466111047912776 0.03464818055474783 0.7206648797361432 0.43650413596544735 -0.3587431461229882 0.15853078203227566 0.2627255478587449 -0.5107243470294838 0.046793496696807324 0.7116339792345845 -0.2049881403013225 0.7807847811457431 -0.838487534686565 -0.09839156444904296 0.40812779503651564 -0.5997717640425511 0.9388039585173604 -0.5676867024813523 -0.20071142484226612 -0.9188496210318844 -0.8429824602097944 0.3407670372867515 0.5897006352842256 -0.20712934316762532 -0.6865627310687825 -0.9998945547655309 -0.7207873076339271 -0.01079081795989345 -0.011662018825835396 -0.8263924704747594 -0.7378986917193702 -0.12238034594577019 0.838666703152458 0.46063412307225526 -0.3086465490200321 0.787978845970764 -0.15069393085200122 -0.845294052063891 -0.7368003994859511 0.645201296920979 0.6551143918584703 0.6738603506477314 -0.383422558495939 -0.24862514943473557 -0.21159406947579074 0.7401694602009072 0.599707516550382 0.5222238483126755 -0.32310768704346415 -0.9100668335837361 0.26560932910699897 -0.9558009608654516 0.600802535049417 -0.779876612367292 -0.4924134540903222 0.8392798381998274 0.6882876265154643 -0.6608421496735022 -0.5975860179922019 0.35180804442235103 -0.6389328157678589 0.5888326647088293 -0.44296963575568205 -0.00835649382586956 -0.7970656260635989 0.9030058011166979 -0.7252730132784886 0.952524940235943 -0.6204885376090659 0.16937677867290546 0.1554200692240124 -0.5917331800894743 0.8834135936341481 -0.13556928109887223 0.0059309735027983645 -0.13178381686596352 -0.6302076055033998 +126 106 -0.8059836312914093 -0.6772945673921564 -0.684537169857161 0.6710050030314902 0.023721259982203424 0.9086236427206873 0.9375973708993652 0.09403764822578342 -0.3425042995636749 -0.014346456162926291 -0.7532209110591044 0.4391794761555299 0.5847552155250082 -0.9928045723467194 -0.5740343305538929 -0.49541447635729874 -0.788361209027229 0.028293649320223047 0.5693820681695145 -0.22636850875899328 0.2210540677914905 -0.4784459521473592 -0.6176773195991694 -0.9921709219259174 -0.48071815982363186 0.7071120525589154 0.4988930880315552 -0.2256954853303117 -0.9027716983092784 -0.8819562304822206 0.8891742840960226 -0.8111388576852183 -0.2119352493691684 0.5834017110216325 0.9420011462779481 -0.6686871467421316 -0.08687424957297862 0.8524240340585074 0.31717669199334475 -0.9973561935643573 -0.7327392153629415 -0.021951676348473503 -0.7966523199126112 -0.6893294634744263 -0.2674788862724329 -0.21724804721439073 0.5287159490482354 0.0022439382861496604 0.16351136842432368 -0.5384867030342639 -0.5783783370894562 0.8711167904316857 0.01752891012671176 -0.5595791279449918 -0.4709252398315411 -0.3724129767136317 -0.42088612700322137 0.4163796628240435 -0.1351711143393155 -0.7606837626119263 -0.5648458609871139 -0.24495595251645974 -0.2893772893968436 -0.6980217010416443 -0.08570325783832589 0.5871855225897251 0.5760364292641647 -0.8723025029397142 -0.32172736904803445 0.193462677210666 -0.8657541573532688 0.5992822475568942 0.311123589110919 -0.6214739602231374 -0.047396798504324655 0.8899692992380419 -0.4052949451192498 -0.18280675880437935 0.8594771888856589 0.08191114604801752 -0.41325713733911784 0.47580757726332856 -0.22650916186050019 0.17210258389738908 -0.7485187527719634 0.38811322441865026 0.23190019665128414 0.2147615655635895 0.10338849161616337 0.6100039492574398 0.7817924721275022 0.7041227275234414 -0.9561887543351368 0.5672106246507367 -0.1963292796360787 -0.630533353899007 +126 107 0.11785255203445621 -0.537942141035066 0.7015807593855596 -0.8647947072703 -0.6817417121738403 -0.6532758674316106 0.36681465543930614 -0.7171332875239689 -0.5339162402410971 -0.04980019088147958 -0.9014805049294707 0.25611068499928247 0.567719406073949 -0.8154499440650143 -0.4029674306087989 0.8221578545024562 -0.40831743783452934 -0.9103182287165597 0.7516810646697429 -0.78452100730525 0.11063906923513289 -0.3511490706472329 -0.30098361452505307 -0.711506083240969 0.09065489585616437 0.45761570273569885 0.5436454262713146 0.8669441483295981 0.7181366000806195 -0.9619563786521661 -0.6320184338890196 -0.4526419356335989 0.03386266434785745 -0.9272122661134545 0.6861421979845288 -0.9702179979986774 0.026469080915514143 0.1929721087931482 -0.785495358612585 0.7586311875519118 -0.3824762157243622 -0.5011480046978105 0.08952843667861399 -0.5784637292062316 0.39497475493522227 0.2588424399946492 0.5583601312739666 0.2706538929802478 -0.9614696952419883 0.8176493062465804 0.4643130744447508 0.27661441684922505 0.3293019216209183 0.7426801913455612 0.9462705516875585 -0.0808680636703003 0.1849317915525046 0.7560093436482385 0.5045724537619729 0.13185817729672134 -0.5900489995464968 0.962754962332321 -0.9203991002454199 0.012352876160722337 0.7063922499301847 0.2212502813656192 -0.07173491963231737 -0.14991600583750286 -0.9913531695640105 -0.2935027741642815 -0.8421907189255782 -0.028360989586517338 0.7828135367099291 -0.887672968563556 0.6343456981869651 0.8744887613292203 -0.11104457883650487 0.5730959739141188 -0.7795220544755719 -0.6094272811845829 0.46522833559389687 -0.3502188864257161 0.5300607123314804 -0.9254462684570106 -0.2850220362015585 0.7030689868027384 0.42086461846517254 -0.09602687786487829 -0.18370612702652078 0.8315484878935067 -0.5251440217653327 -0.43905556908490206 -0.8862580354570595 0.7995627477297307 0.7303518409608356 0.46492773591882264 +126 125 0.021965166247854384 -0.8133596488104624 0.21811928322239327 -0.3283986116936852 -0.7320707543897689 0.2642958416098633 -0.1632702390468097 -0.4564425457157497 -0.3727309285694005 -0.9963305055348959 0.6871124295079871 0.7137031505734359 0.3393151139823911 0.8173495173485257 0.6617093222508938 0.18327395654609324 -0.8990086674464322 -0.3330782078737142 0.06179967810039666 -0.33217705161122524 0.8541828801882649 0.04129070920129796 0.6735388192328935 -0.12973151189153143 0.3855625600070287 0.3032011379385524 0.16035784917539275 0.9087312588017584 0.3324881597470306 0.5469629830470071 0.6768525526475038 0.6567275088546602 -0.5601663468359368 -0.48411663342442446 -0.13493082373430787 0.14749527741244894 0.17184748056957755 0.705734303368291 0.2937231536737168 0.5692335006994713 0.34633311642649334 -0.7315339114847927 0.18543290937239165 -0.27374009415481315 -0.6267631197418482 -0.6608227733767984 -0.590841450341006 -0.23187222713141997 -0.2950509968816284 0.4314688361174499 -0.6868756002549248 -0.6086284722521504 -0.5243466507981993 -0.18891194777782672 -0.302331132533159 -0.24201362519586556 -0.11598264682644222 0.5180611295432846 0.8082811393139433 -0.8451622717407108 -0.7392764706405239 -0.929334547632511 0.19447053240243628 0.6014189346708405 -0.8139672789955901 -0.9516598046862008 -0.025339764431131284 -0.44037036966166565 0.6577382661510374 -0.8922772242446346 -0.46129722698810216 -0.015731960573253323 -0.886965899936321 0.2859254760546528 0.1986713612385369 0.656285555490713 -0.8511396051378435 -0.667469875062257 0.8834260376754621 0.20014724492334657 -0.2385608466264657 -0.9714905429134864 0.03823918228307033 0.06616251684287566 0.17181706720533763 -0.20680080219911523 -0.24144931965586647 0.9820842396902305 -0.014355357385501089 -0.48774878943493705 -0.495928840752734 -0.4447279659057002 0.6614203333189967 -0.20674125536666033 0.33854379781978783 0.6047805751537136 +126 126 5.4243531105242475 5.522917684676109 4.504126026231375 3.6304327582934723 3.6533867195684975 4.363148974604833 4.254585638337347 3.2856629565342548 5.005847245999085 4.366647476724813 5.028135345148755 3.2188708025446395 4.507068404768431 5.366266696250201 5.202400575899776 3.7193344200764002 5.594347721285704 3.762405919915179 4.67611749797913 5.259634761968796 3.1598654851509425 3.6449807238741334 3.946540049929629 4.853291246015792 3.7896310371988933 2.6831652309367326 3.6369466644360666 4.251359926471712 4.877402057030215 3.331098977649056 5.3862714253896975 5.802142576601115 2.7018412998660266 4.432993046980656 5.552368253150437 4.570786344532851 4.033618317729648 4.148419475968799 4.900829809755705 4.135080977346766 4.661289221254501 4.5385224222455145 3.736854124109035 5.995422717035232 4.939981084600804 3.701255336803599 3.95897571116915 3.842455621897931 4.432323069476479 6.047656524739646 4.007683302555715 4.9868015565764825 2.618185916658873 4.0120502391404536 4.80716365056095 2.9867089588737903 3.6538851989956265 4.47082782418575 5.410866588089538 4.971407803807803 3.393200946382308 5.181541042219134 4.1051866473651 4.39501899773981 4.51990329598068 5.041296325824234 3.4574464995080403 3.337674998131155 5.658192509014475 4.016836710348731 5.764196745030441 3.267036978825396 4.269184110787009 3.6809362493429845 3.3430889062942954 4.8752797247657895 4.455949838536151 5.056878954318054 5.778990251030578 3.712326197094738 3.9136911254362126 3.906496441195454 4.704481770256393 4.224946375934343 3.637717346980171 4.733810041311253 4.850559338715861 4.979144454076844 1.233405566608698 4.942448442701662 4.246698439835718 4.9653358831316945 5.139606721428188 4.249735342323955 3.497931795207577 4.9820808802675165 +126 127 0.9584289394264502 -0.6635842473954838 -0.7415901691885725 0.056789434903148805 0.7947873415540776 0.16164670934157033 -0.4848466395737463 -0.2044184831284992 -0.12150429226154968 0.6252295687053062 -0.4686922618853091 -0.12506781651745458 -0.4797475051054718 -0.5397445536844898 -0.6735964736987439 -0.3136766437811307 0.4262715205127283 0.35092103359883753 0.9420277683716818 0.8395619505310588 -0.2519952988364338 -0.19741701014776414 0.249972407064168 -0.8378940822252745 -0.4420135625479542 0.11230652097592575 0.3069394814389592 -0.22213511091081495 -0.1939888853420626 -0.08841159672611831 -0.513806727503495 0.4692599676727618 0.40565109994938253 -0.6311743673972006 0.7568534659442574 -0.4597051279102944 -0.1492721872731606 -0.2324930148279467 0.2984754427194771 -0.07840329496584375 0.5254094732839341 0.01070109092586824 0.35102885802635053 0.8641965517507089 0.4714370595345918 -0.8868314772097405 0.010024462024621261 0.7638899683801803 0.4402984250841331 0.8520449571551865 0.7619978993340992 0.7064635358756122 0.0384989584924027 -0.6194443015991513 0.22768977113492994 -0.06736438726408411 -0.6276929754427216 0.6684122407495197 -0.66369386954398 -0.7074915681289284 -0.05212969001130108 0.42382544513375864 -0.27651310888447345 -0.22383780447981638 -0.17878684289706914 0.47004785962733164 -0.038571241668114986 -0.39710391711378734 0.7030439415497229 0.3022023740752895 0.41049357686889487 -0.20883652488222348 -0.35093000763644655 -0.121252429069167 0.12460583623031529 0.07018998533816867 0.294986322412204 0.5106876924431154 -0.397728980681308 -0.704829712417882 0.770890338660507 0.2314657295081639 -0.847438574808403 0.19870255364446088 0.27638493067829284 0.9777780851770219 0.9951618366000057 -0.1756732924793154 0.0432413227290418 0.7649199369043718 0.00027136974098485034 -0.12297981978756334 -0.9786341631162965 0.41743311210209155 0.42756376594467116 -0.661148308296565 +126 145 -0.9331643573270956 -0.4319689833835003 -0.3867885465902543 0.9901594430911507 -0.175087342436415 -0.6504806439099473 0.5785846158960344 -0.8758264204721624 -0.11719463962523324 0.4580343794639039 -0.23274380868421463 -0.016396665051521042 0.36490760067568906 -0.5153905041247318 -0.12159880083821695 -0.8411285035600908 -0.26786125399051763 -0.482490612891078 0.24427615363709076 0.706949715064064 -0.0398278688853797 0.017125738594841344 -0.9868087906340968 -0.4873765365245868 -0.08448582363784007 0.008424909553508941 -0.05008032574384269 0.9010094946970113 -0.10905186697487146 -0.17078777853315485 -0.8037003135736898 0.18958870412583195 -0.6192862529738761 -0.34134629937283023 0.7080998168337416 -0.006836415223921977 0.5725449281395589 -0.050440377141727444 -0.3105202059819021 0.2192738327640924 -0.7148896221962142 0.7711711879248713 0.23713842755377357 -0.4936649548204457 -0.5951159865978928 0.09757078195828406 0.29297362158912166 0.7341073022346871 0.17192686964145798 -0.6382459621927958 -0.770090191612183 0.2367107646789881 0.024542765367576047 0.35740638697755966 0.6807420184256845 -0.8140562963428928 -0.5391818305381235 -0.14495317542899433 0.9964830143087531 -0.35896733505902634 0.41841983015368367 -0.7892987343053126 -0.06939716232489679 0.6449286409118997 0.00401912141387295 -0.1989034375740757 -0.6148765439250932 0.036679190909685966 0.7854125591948191 0.7772004658268743 -0.9499576016137532 -0.3855862413857769 0.5572404139140328 -0.18993660968649162 0.5865250809992439 0.36492877187516704 -0.07362081609403992 0.5579374238876822 -0.43366601068924515 -0.5224115958507718 -0.349736020789593 -0.5632290625812211 0.6799743277795534 0.3033814519320259 0.24728880658409103 -0.10559904221786276 0.8026409410657935 -0.7790486413144135 -0.32694397219895466 -0.8838740558054528 0.3488107842613768 0.725685204755532 0.133302086021591 -0.9355179133990401 -0.21572165394800713 -0.045639196604337684 +126 146 -0.5496244324822492 0.49608439987781305 -0.04237263261084534 0.026683917074140195 0.6504432004061729 0.09018168962924267 -0.05384116962412744 -0.12215124938183353 0.9770486475693541 -0.3413011967393589 -0.6371739252632345 -0.3279535138054488 -0.055643100032697124 -0.9029937132698369 -0.7963714863596136 -0.3632582761427319 -0.3926340633947263 0.39676225662725706 -0.6054921567299489 -0.15809221153905462 -0.288219339353714 0.7825673916996609 0.3530485017970528 -0.6879277093017053 0.3793821130531314 0.36760999383961823 -0.9619607117717937 0.19025888428177473 -0.9068479657887263 0.35733419888920603 -0.22554804832554343 -0.5893558432114456 0.16986507696972275 -0.4601153545109882 -0.48285879011436106 -0.7066587765100474 0.8461753292584133 -0.9942459195668292 -0.6405228705188519 0.11262572450317232 0.4244093561134914 0.6434402337958935 0.2868298627351029 0.7895419689787391 -0.508671695086129 0.17917030580112625 0.6590566684912931 0.5544718304526055 0.2639927300721787 0.689529690651645 0.347668729460918 -0.02223769989428237 -0.5215513231958195 0.1873875092476125 0.6336000986479291 -0.11623050306223726 0.5840018865087024 0.28022712649619064 -0.6253093030686441 0.5436369222074249 -0.23795554483627357 -0.5890166811105855 0.6130788553281987 0.9174823820097233 -0.988369931312223 0.6131226898149291 0.8105991872419256 -0.9712375670010749 -0.572525975240699 -0.2541704871651369 -0.8841357531884182 0.4709587172754417 0.148219215511463 0.34432570512368654 -0.12305141005461873 0.598533140741514 -0.26565088680241944 -0.9247486209601303 0.8708423630776319 0.2919241371529595 -0.6767376803753196 -0.1313583554033253 -0.6633866548846592 -0.8706148327700483 -0.030794099667702968 0.37212404448273273 0.3415833428467676 -0.942996275957177 -0.019321552485602522 -0.10063949078469148 0.13714675720278846 0.33874401622386063 0.2395144323727647 -0.22391286831730284 -0.4608423304417282 -0.3241618385697671 +126 147 -0.1554955866280312 -0.8225823370946013 0.7990448870251845 -0.25663806617163787 0.326614513544655 -0.27857018166321756 -0.6005192766945464 0.238890713382369 -0.8889604039964287 -0.4307039779496791 -0.2783438828830933 0.1546141247093109 0.5485112047564416 -0.29440986946166103 0.49159171661894274 -0.3141256845396774 -0.6633161361049076 0.4003554544972694 0.6292153908921068 -0.5244022217507991 -0.7767272506947649 -0.0627593456263067 -0.16625881710565094 0.5701698793841727 -0.9359201197564704 -0.17684704159424558 0.3231004878142092 0.03171449144644889 -0.9580954386436089 -0.08529863715699992 0.5250595288194497 0.9090581231066068 0.26857306046506446 0.16640298488642347 0.25124793804286893 0.14626354341354086 0.6675780489098937 0.10035900684522958 -0.7776424464827434 -0.44771427924036633 0.22685177702410608 0.46166411930927786 0.6651772557928552 -0.9015681683159142 0.7210711235210854 0.3560202123471383 -0.3459306687043924 0.8505320663830553 -0.4419677675481424 -0.8034698372276587 -0.23760417901311937 -0.6942451922318225 -0.541388903485118 -0.8305409609166454 0.09488138707887184 0.6138502969859028 0.3170948057742824 -0.38681739090653977 -0.19452225366791032 0.40124901287008985 -0.027549808911044193 0.1331507049208105 0.6564113907321407 0.2936531742783668 0.0753672934387799 -0.7170320183644212 0.3605673657819064 0.07757161939772272 0.2723647892178733 0.7381087372261841 0.3911025005922111 -0.43605226158564414 0.12161346964764363 -0.618862099965418 -0.37183854991668563 0.4556807121884001 -0.9677460361504011 -0.11940843204962426 0.927265787357858 0.4863577753719557 -0.2519593318204645 0.5226073649914069 0.9803316455591193 0.029665991700429162 0.8082256050249923 0.6956557937074719 0.45870088644661555 -0.3057974227211462 -0.19188178392406297 0.7938231473653874 0.37592665894373645 -0.9673421795106008 -0.46833766911930774 0.4745129524979974 0.0225739037016659 0.7068024090665073 +127 106 0.0014658917251182402 0.8799244378215834 -0.6832065086887344 0.49424271822162313 0.11316012681996113 -0.6216676914434396 -0.6375724833731364 -0.3106935857566038 -0.6660245678659438 -0.06889881253977248 -0.2898394084293754 0.7717567573847888 0.08528976800054022 -0.03426784857947274 0.15870395445746066 0.012392860181630105 -0.446074922147925 0.7050201260705247 0.260027844775371 -0.3493901452070445 0.42433190468787485 0.8391333973871933 -0.3968046665676006 -0.2533217586998415 0.6448012107617409 -0.8120921330267092 -0.07062339425972586 0.6061867195779971 -0.4503598687644612 -0.45756398425371136 0.5976197467141087 0.5510132192983059 -0.34504241917575507 -0.9388813630145025 -0.2150866404489573 -0.9126149688956713 -0.05849377150984458 0.5303594527376998 -0.6029535060512587 0.483651848399683 -0.7316930626470612 -0.2763251802244966 -0.22153888933451937 0.6426277933082636 0.21428058808401973 0.8006273074749086 0.6993120115077287 0.13490169401568552 0.12095067410697058 0.624763987257462 -0.9889328442407741 0.2301644018962823 -0.40246138467615555 -0.06916365364382049 0.019107195372288555 0.5566526285060189 0.19340444677827762 0.6908293674564157 0.30946758854180945 -0.5565796640409995 0.6422175721412235 0.912350695550973 -0.1548900565249769 0.5968931459409021 -0.8708918436893216 -0.9460484319333691 0.23355541685696912 0.264851924541881 -0.5216167123003701 -0.8013310989952565 -0.01927645789750798 0.44556948014787934 -0.541044270589327 0.19453736418091094 0.7497510014150677 0.3328061484253726 -0.6921408341193569 -0.7535896029589844 -0.2150920514221033 0.7310933283078733 0.41039100449641785 -0.34239146115387986 0.5830359636033384 -0.3686164451714944 0.06709109277777014 0.1206968467290539 -0.19517363167145274 -0.9442190720588599 0.024420010020633987 -0.1111254118767957 0.24309003165079068 0.06603038099162828 -0.7208958322519134 0.7861796943074268 -0.6079785202346235 0.7571279664666672 +127 107 0.7484421230193279 -0.5398841880100249 0.38262181854665234 -0.4313173274330959 -0.7990675149028044 -0.9620500878078009 0.2876955176769258 0.9217159258327541 -0.561472253408521 0.5165628380508411 -0.8087084693850386 0.3452691263131411 0.28538332696939306 0.9266511554130685 -0.5583731425598906 -0.5878278864704163 0.4143613422275578 0.6774990851272911 0.1320147543027499 -0.7115756099449368 -0.6450064326927725 0.5605227936646948 -0.6797701687757278 -0.9128129427874385 -0.947218019762045 -0.5515113926086923 0.2959950523362682 -0.3634411477336843 0.5371181149544753 0.06245819843103928 0.6641093403836 -0.04221664343435583 -0.987239441698391 0.7100950512661426 -0.7994076026514723 -0.16485870192402796 0.39049495621886776 -0.1291335595783638 -0.4176088542470482 -0.7437518798760434 0.41028913829318214 0.29917760830052065 -0.09277484711017658 -0.34695364042410004 -0.6225673811042962 -0.043413246807984196 -0.319681118855089 -0.004329359398325572 -0.5439687413522565 -0.20134870262924376 -0.3236858048100135 -0.6625831472569219 -0.582508244943371 -0.870178743221065 -0.6476714452699242 -0.3886236317627161 -0.10611086460234787 -0.15127667372568632 -0.6603158466045462 -0.3777634012780442 -0.42736276854366784 0.24001948672450002 0.3658187597746796 0.6146858201423917 0.28524276659677117 -0.7617132752567073 -0.5822706594380456 0.45615809508927363 0.5980518535816621 0.9536628895997479 -0.4544004711452916 -0.17703318344703534 0.7542401386398432 -0.862690986539927 -0.8425188456432362 0.6307798118639893 -0.7364936774339179 -0.6850616296167396 0.050291815970261 -0.5162774368121734 -0.9047630655626271 0.5790229023491409 0.9351594994667567 -0.7933467754569734 -0.6023982960465057 -0.9106644479980419 -0.6224167852281741 0.481075024353778 0.7489131391592756 -0.8518935030245847 -0.1665472092894873 -0.6174816485196752 -0.36452386165661865 -0.5790593066738403 0.8213694368058719 -0.8290910528497077 +127 108 -0.17801249604317282 -0.29726116643119993 0.4854290259579934 -0.4859885266666968 0.19751477853425659 -0.49585356951653936 -0.6663697218779403 0.9147693345887355 0.11770867068235424 -0.05251139360788026 -0.2814412237405586 0.13281256170323097 -0.03752238542119524 0.24995232499552777 0.23290530485760153 -0.11022826311133205 -0.9484991658579283 -0.8524978671904291 0.5390061513018878 0.07813192728847529 -0.40018422823004385 -0.3735807367660542 0.25399693449578065 -0.4662684527052432 -0.9697875201023878 -0.4985421553653575 0.49361007846491645 0.8124340716935317 0.14643622461696193 -0.014887338780490866 -0.12521147617139983 0.3678319667781169 0.5400076720601865 0.919649862732024 -0.8214909390850809 0.7350183513833568 -0.8413739571190044 -0.9623358094843757 0.5056366653220155 -0.9729089272863636 -0.17386427036930896 0.36392749921737 -0.06207835920051519 -0.4125039825848307 -0.12546668379732728 0.5195823783146651 -0.6240019108057688 -0.5681151110644582 0.5112635022117773 -0.675784559743059 0.5930707386614331 -0.5257248937795955 -0.6974615469674956 -0.4534706737076091 0.3276211292197142 0.7608051098113264 0.6266198254546991 0.979596806020093 -0.8540800628591245 0.6155483216581992 0.5419618322413933 0.24542804398100193 0.8207138475677307 -0.4083784632021188 -0.8249964541006332 0.7906513389869039 0.12640407751660176 -0.08060070062314706 0.19478582789622934 -0.6376564707440016 -0.38700871642609713 0.24883387003749657 0.46442460967459365 0.38801183991499943 0.13124142015145335 0.08163267884770398 -0.6220041055631236 -0.985159516330673 -0.8855210140000813 -0.5293324821570933 0.9396612912248079 -0.4540910726243008 0.8310578793400456 0.8561889047101776 -0.46719110043241785 -0.6768309126627883 -0.4152855151839274 0.4698928491596257 -0.4934123490406592 -0.8212973986244918 0.709812060977582 -0.32595617257661025 0.5317167961325022 0.7172017586555499 0.19837453450405484 -0.3250855571731526 +127 126 0.9584289394264502 -0.6635842473954838 -0.7415901691885725 0.056789434903148805 0.7947873415540776 0.16164670934157033 -0.4848466395737463 -0.2044184831284992 -0.12150429226154968 0.6252295687053062 -0.4686922618853091 -0.12506781651745458 -0.4797475051054718 -0.5397445536844898 -0.6735964736987439 -0.3136766437811307 0.4262715205127283 0.35092103359883753 0.9420277683716818 0.8395619505310588 -0.2519952988364338 -0.19741701014776414 0.249972407064168 -0.8378940822252745 -0.4420135625479542 0.11230652097592575 0.3069394814389592 -0.22213511091081495 -0.1939888853420626 -0.08841159672611831 -0.513806727503495 0.4692599676727618 0.40565109994938253 -0.6311743673972006 0.7568534659442574 -0.4597051279102944 -0.1492721872731606 -0.2324930148279467 0.2984754427194771 -0.07840329496584375 0.5254094732839341 0.01070109092586824 0.35102885802635053 0.8641965517507089 0.4714370595345918 -0.8868314772097405 0.010024462024621261 0.7638899683801803 0.4402984250841331 0.8520449571551865 0.7619978993340992 0.7064635358756122 0.0384989584924027 -0.6194443015991513 0.22768977113492994 -0.06736438726408411 -0.6276929754427216 0.6684122407495197 -0.66369386954398 -0.7074915681289284 -0.05212969001130108 0.42382544513375864 -0.27651310888447345 -0.22383780447981638 -0.17878684289706914 0.47004785962733164 -0.038571241668114986 -0.39710391711378734 0.7030439415497229 0.3022023740752895 0.41049357686889487 -0.20883652488222348 -0.35093000763644655 -0.121252429069167 0.12460583623031529 0.07018998533816867 0.294986322412204 0.5106876924431154 -0.397728980681308 -0.704829712417882 0.770890338660507 0.2314657295081639 -0.847438574808403 0.19870255364446088 0.27638493067829284 0.9777780851770219 0.9951618366000057 -0.1756732924793154 0.0432413227290418 0.7649199369043718 0.00027136974098485034 -0.12297981978756334 -0.9786341631162965 0.41743311210209155 0.42756376594467116 -0.661148308296565 +127 127 4.380447986218995 3.3712946743156644 3.707004560173419 4.901277078481604 6.025342131035783 4.731476612403398 4.390414200649271 4.937244779973373 2.973135202757616 3.8561535615479716 3.7311327198254194 3.7676394766859502 1.983013521670829 3.5770671734789286 3.5692189926886217 3.362506043651625 5.671023440116662 4.191244325346228 5.002630473737332 4.730558139300472 3.9078886487184206 3.583551778071441 4.1978049567923 4.647031456545003 6.044948013162133 5.632337485545406 3.6010194917503187 4.964199725222265 4.543368299520697 2.688052422455742 5.4562468004857125 4.002827191064792 5.881784123979958 6.312055685057472 6.3819469540443565 4.110093918662027 3.936780911646902 3.9913540112063997 4.537415569396825 5.039390920780889 5.5790560974485235 3.2080925774175 4.733381040598692 5.586794492131257 3.9882755798849066 4.068964963095348 4.604970478726282 4.465869141987225 4.9211022675128975 5.343037232587743 3.7342544101586026 4.0190851823166165 3.522747165340597 4.270279464035989 3.135819857332001 4.597210549745438 4.350044604000445 4.764899570786641 4.678776127448902 4.986375551340062 3.629323063995311 4.188092575759936 4.518720892276981 3.7551745982640976 5.944590396956601 5.4350640436413595 4.8233479633093115 4.4322434699923745 3.854416510064355 5.187665398737278 4.127871883078672 3.7197740055446773 5.633265875506861 4.042200017006023 4.232871223735561 3.4738415384112296 3.8789096075729583 4.42859959679131 4.408774900322052 5.67847337543413 5.581766089836736 4.55408626184979 5.035744563870282 5.533109630110079 4.234822933776643 5.350320174234324 5.379089081183483 5.520313029438086 4.75726585947525 4.291036760311556 2.8452286899947405 3.9496954534433018 4.302089544499297 4.354738296309772 4.784929492033654 5.6625502009866455 +127 128 0.8560668326630945 0.02376964136949211 -0.10786978667844616 0.4490089311689791 0.9259392706947105 -0.20920890491075017 -0.716099948100142 0.9456683898546447 0.12822263911011 0.981248035973777 -0.36828389704673614 -0.8168252293223615 -0.2651876144824259 0.5536445916899055 0.9305408687421084 0.6074239160778261 0.941135467222838 -0.01076548296779789 -0.41856096342904014 -0.11446326238110793 -0.3891720155420002 0.00320019519007686 -0.18760912338106217 -0.7881876538597417 -0.6166306137999087 0.5928844289518698 -0.27384453406956344 0.9157925734512951 0.945243346437292 -0.5920828043267756 0.46609905056410317 0.15666541522610355 0.6574439793433704 -0.899313357306118 0.8255849584528034 -0.5247479796954353 -0.6863745528049163 0.27091060847305926 -0.1731176901539082 -0.810993109977111 0.7254177723121316 -0.415148732094039 0.8102020463702342 0.9300658433879301 0.007313676593057705 0.4636544789922703 0.7520347174926778 0.7436182122194432 0.9572846342706713 0.6583644109320885 0.09658892775076233 -0.636971073934909 0.4977570705667469 0.3608228463410652 -0.27112567613228133 0.4559223872400986 -0.4396639458695515 -0.8207145545427998 -0.45502467369325883 0.03456070530078548 -0.46840528919875846 0.21918408455616545 0.6130102997398181 0.3620928321976862 0.5757229549639569 -0.6360681196782612 0.6087171130035371 -0.30604129328667673 -0.40197714540807783 0.12014102269117544 0.6015532834245949 0.8093376218491724 -0.736034103376187 -0.19320587529712552 -0.9279594062269145 0.3845232056249508 -0.7115347139609955 0.023065703678778693 -0.8951107048303069 -0.775643176569903 0.4232800568679751 -0.7776353142771733 0.3756776808244078 -0.7572550616574878 0.8001401930244201 -0.4293431969708934 -0.9898700475693885 0.9464113630114657 -0.3801411414473448 -0.08233250502702427 0.0726948100857241 -0.6833580672732389 -0.454766555919643 0.6520888268409135 0.35217964642057686 -0.8449114054545206 +127 146 -0.5931667731660539 0.2849147266637564 -0.47997783959410745 0.6235824473712672 -0.9158442626450933 0.6513888337169209 -0.8281457995899866 -0.28948945865568687 0.4023251693568628 0.11496498013170364 0.5993368436492803 -0.5699906889935387 0.2256248495399018 0.3920248238405408 -0.17529353764364664 0.9735977114259988 -0.6246296152663153 -0.2832261977048389 0.6342452941524226 0.5350989359752201 0.8241852922909536 -0.03669782269452826 -0.4053741885885569 -0.025985963031747605 0.9923120966952854 -0.9981495897808079 0.395645814198349 0.9844872627490118 0.8966895726786919 -0.02270901707454831 0.9086190383561032 0.7992755036657733 -0.918163850698771 -0.6692603498957914 0.7234912118594952 -0.7855819816558738 0.6633238834455122 -0.7013035165141086 -0.7353214825404373 0.17812977112339778 -0.9471435719237145 0.1665937154757211 -0.8897684949705544 0.6256076492372409 -0.5178751007170523 -0.09031210497427722 -0.4897445477388904 0.3925056047506641 -0.5856103108050834 -0.26748800308638665 0.2782377880856717 -0.548032265426676 0.5445411140275072 -0.803248013519493 0.33745796281711526 -0.41472001617612353 0.4667961882606917 0.1402269257077815 -0.9389806954947353 0.7652441460339257 -0.3118399541132655 0.06187472624752277 0.6899681736657115 -0.8409152270928191 -0.8459043555109049 -0.4182826083114084 0.6623356881153697 -0.9768387555944351 -0.5175083609770619 -0.7526734368786325 -0.8772589209228834 -0.7389404297445838 0.5953062632804309 0.4981274771273634 0.03488125595322611 0.24876113929534216 -0.0147713304981274 0.6004799782098473 0.5437677384644868 0.6021499413526858 0.1718601965655948 -0.13443659046195067 -0.27512999477901645 -0.3677370395022088 0.751032041183743 -0.5255839545619767 0.4778670742811646 -0.9828451801496605 0.7276363185787005 -0.3012861016893924 -0.8655282943012028 -0.7437260810112141 0.051834588674156246 0.09854936874461306 0.959888245073627 0.22718495341476386 +127 147 0.07797702812794172 0.48083493637529773 -0.14467660867459253 -0.84459914690731 -0.9091186756964145 0.8273880006138286 0.3044371586259622 0.7944134519009456 0.1488629257413172 -0.5024830322463152 -0.14181811359866492 -0.5337528107915892 -0.3719243697681458 -0.20026033009196964 0.22923979344878997 0.6020727033932713 0.4852003400327247 0.026925187264376538 0.6364425536792051 0.29903218288737543 0.574478538630238 -0.4783541460983445 -0.6251261458075328 -0.5046039919103449 0.0784960573321205 -0.5122032267004217 -0.9006399219225423 0.40640365789026744 0.08386502302053667 -0.3981216544751638 0.9765598436702805 0.4520649163260664 -0.6866169928803498 0.6346204753649487 -0.8995824277602285 0.0034691490179821205 -0.02827003418527263 -0.7429910436681464 -0.7368496709730441 0.33386061322746885 -0.2076270056175331 0.3107450849479121 0.9200337253952235 -0.7126825071053662 0.45496202453672296 -0.9135487268234943 0.5336135056420708 0.9316666927041262 -0.773979991321327 0.6183193238749749 0.5618352913574776 -0.1411444617815667 0.03055648140020062 0.4055437102050996 -0.46543310093813206 -0.6378938424171736 -0.7574836375124361 0.6938285703387972 0.29556017482324615 -0.7885999304924836 0.13377875963699704 0.6924954576148867 -0.3663556696682224 -0.19694470106342288 -0.4988425455965222 0.3475771494801132 0.7147347992056698 -0.37038957384246296 0.037253677718095846 0.28697143968504113 0.6530745302452023 -0.03233601448725287 -0.4353454906271508 -0.8388741242471243 0.5754346021945138 0.7886031218647649 -0.15706330658586132 0.008750567316194502 0.8525314684356031 -0.7180700981499839 -0.6110297026923996 0.8131797788043145 -0.14052858078677066 -0.6352867575529664 0.282844742273068 -0.2705884202390507 -0.40714596955849514 0.7520713652599478 -0.773073480163492 0.5295638554880602 -0.09940166049673693 0.3749070217846553 -0.3974225858097129 0.32849438887490034 -0.3508391061418592 0.6731511678509621 +127 148 -0.24454100022099579 0.1126825309977415 0.24829451897037047 0.8206822198367818 0.575069312685222 -0.5915610356450787 -0.33455724868212133 0.5455213097747582 0.7303811253004688 -0.8583378651083735 0.5027972665215337 0.4082787514000037 -0.16586023734786126 -0.19648115067951255 0.5251576160898828 0.0908514542477088 0.8363109058050224 -0.3606607427356827 0.9894377012207054 0.9428753287245231 -0.35010380893875537 -0.3519635369188172 -0.8963226735052907 -0.8213353265459831 -0.781435070929595 -0.619208886851311 -0.6943996789663527 0.03728335108494685 -0.9124208492906443 -0.7034089594743196 -0.5986520180341899 -0.3994716306352113 -0.6902778751804293 0.15177976934154902 0.7220897120416101 0.07630121158684511 0.7132892934614143 0.1789666070968552 0.304541336276146 -0.9216295014641849 0.929474378422148 0.6376513019072516 -0.5107700025501782 -0.799781844565671 -0.9577395899311019 -0.012908203545754615 -0.7436228758876051 0.16258246540913213 0.0802986311398508 -0.6717716384709014 -0.10883832308406172 0.22875911777415414 -0.6151919119483429 -0.2110737384964545 0.04928039236661874 -0.8305807159803662 -0.7445257978205291 0.27244246685079054 -0.33330777232257214 0.366403933872685 0.7430564353204558 -0.841995023568374 0.3256806876124114 -0.3702534559091082 0.983053169414192 0.11682887023297561 -0.9408278269587935 0.9614695341849702 -0.22076123006833548 0.7592069021999501 0.15499771778056437 -0.867043984789913 -0.8423387152053416 0.7317847003601066 -0.5284077170877366 0.9193565694355554 -0.049854537703603485 0.40546413253330416 -0.47702788135476726 -0.8410278869834587 -0.7394379431901983 -0.9104241193551015 -0.19919297005461956 -0.7284645308761508 0.6563159216841679 0.9367591598610481 0.9753686242154942 -0.3411095478771553 0.6710691556541541 0.5882365828217382 0.07552348573005263 -0.025179614523961336 0.20663341278840908 0.25046664004862484 -0.7135532551797616 -0.7418600224786103 +128 107 0.648944045976549 0.3854728744387377 0.5826497554978309 -0.24254175583790438 0.8472704190705254 0.45645236999191097 -0.13926296747639055 -0.3177551007060657 -0.09952097638461788 0.32731531060636954 0.13978095794512746 0.769609086160074 0.57385400382747 -0.22476895071244862 -0.2710575260603063 -0.8301001700538424 0.3269686566812593 0.4577669678589289 0.603348767227718 0.9702821494763052 0.7263956530572222 -0.0288744075603522 0.22712165894622505 -0.6016276797370523 -0.2463918667962064 -0.9331179066328377 -0.530455226064179 -0.5424044043598675 -0.988137754371716 0.7452985066324356 0.10819905463836599 0.5599547419592286 -0.9273982730702839 -0.1407772302984922 0.05173747963861097 -0.17638714796471477 0.8720394338573514 -0.38205376683740844 -0.1293265157981638 -0.8997402993611143 0.5871554876706278 -0.48099236838224013 -0.8263367429191986 0.6165071566864924 0.8087648457975367 -0.7062225905479669 -0.003690054197359016 -0.7593805420538109 0.5119424429546486 0.29579147152665697 -0.9316706248785502 0.627672134196225 0.861954391432443 -0.8830778175521794 0.2122006507200649 0.21580384627096816 -0.5936587082258071 0.5693679918851009 0.9768969923871571 0.46007753609405566 0.4828336913140434 0.3602742713578102 -0.15863139744285593 -0.7220342183357571 0.30885573831412927 -0.3699533796411254 0.6531405263320904 -0.22052168859229382 0.7415994207615775 -0.7638491635055877 -0.663910143296135 0.3495222016212951 -0.43347683165567474 0.5647287910800287 0.33659453525715066 -0.5188952790522259 0.6384823717252999 -0.33505427654045117 0.9228709182561825 0.8804183180724625 0.7287040434317156 -0.6900916431332795 0.7501071504126136 0.09351441513288439 -0.7770043551851065 -0.1846189289529967 -0.8848203169651827 -0.7764654913814286 0.9773015231331754 0.8041858990391642 0.16456075756848598 0.7749616720603694 0.1282744223736112 -0.19409826671399788 0.7961218100939471 -0.44300692788692886 +128 108 0.30711339162090256 0.9360271670731406 -0.11361754512206002 0.7899690712001612 -0.900203542105853 0.6609256736327445 0.7285301572768115 0.417085680692705 -0.0590118643605031 0.12431244229611282 -0.23396353774118417 -0.2608929536566009 -0.6315707008324043 -0.30588988753749513 0.8917779420035048 -0.5104950672406527 -0.5615754735144525 -0.024556363597635134 0.3229775412877842 -0.6951475904336883 0.5135620912520786 0.5556304044752101 0.5137201997497427 -0.7048677643419021 -0.41637386160308076 -0.47988402291821686 -0.8713901250568075 0.11244195841147286 -0.6722220863776358 0.2742846094172291 -0.09794998882846628 0.47459703384479135 0.1163537335298297 -0.05352086362216535 -0.10068363444660444 0.6543561396832709 -0.4121692349044599 0.24045944565662802 0.044066598171254245 -0.6813658528580266 -0.34203270285545573 -0.2803534812032289 0.7532001060453732 0.6492756770843862 -0.10130842819213814 -0.9908893406411305 -0.6087474391139003 0.6006904212884854 -0.1561096893204439 0.10363348217378365 -0.04364526580121786 -0.7080162474653617 -0.6340905614347845 -0.5692320267273918 -0.7612926215260427 0.19733561898744068 -0.8548966668359981 -0.12865216617345654 0.21310450646138812 0.70557413747491 0.05208499323418447 -0.22053519615418238 0.37622173137556203 -0.2620592993910409 -0.4313153419682825 -0.09768103695287067 0.5537990120374181 0.26686619819479795 -0.5803474025267792 -0.971125375725366 0.869093506202939 -0.019176821997945792 0.5350950657282896 -0.964234349783277 -0.6644282558595791 0.8570359238361958 -0.5831538200594919 -0.8179262586282814 0.31330971910371996 0.27389810524758684 0.026997708244315355 0.8708014517553981 0.04966522104216198 -0.847006673749084 -0.7196491802670621 -0.9541615838623863 0.08480796377073285 -0.32476863799008604 -0.5405510245920755 -0.766414364037127 0.1822556924240195 -0.5874985021653194 -0.8600972492939296 -0.320161650962975 -0.6191368995817972 -0.2477743115495019 +128 109 0.5540161316434429 -0.21455092264556064 0.9971825908675087 -0.7972300848765652 0.995686634062497 0.4247840714372695 0.32851186953395484 -0.44929853509077367 -0.06180352621287266 -0.302323818198013 0.26011928198489875 -0.581611135960604 0.6406243674901761 0.9950956755109657 -0.9496218340313669 -0.44061429204070257 -0.7837249460998539 0.019397233652906465 -0.9571183572481816 -0.10703478359913876 -0.7463713760007893 0.3446589628513732 -0.5047262482430335 0.1408229379570083 0.6997963777525522 -0.9125803049864165 -0.21998518325933625 -0.3702809739855195 0.9326694177569519 -0.23869101681964877 -0.6754978643028171 0.845653423955218 0.06929238046703912 -0.5439605673699794 -0.5686486159414266 -0.40502265862151043 0.38718273329002195 0.7335047220936586 0.5595349293011513 -0.18216563226992366 0.7931192033522674 0.8404121752044589 0.1506137269090455 0.7991333675457335 0.9394462587797656 0.4488525283184073 0.13901252246650797 0.2652320688712073 0.8220879130620411 0.1073755275811652 0.435043329274861 0.9736594734533333 0.43821339185679276 0.01946451528736337 0.3584921104607197 -0.0917347601550198 -0.7758222888735831 -0.435914206231075 0.4821203337639204 0.3391446900271058 0.9929325079026745 0.43951856665762623 0.12081057047465649 0.03859535610419873 -0.056129702841004825 -0.8519228529133425 0.5943414131714087 0.06773267181522402 -0.5913462085522072 -0.9732367947685687 -0.08547999634807368 -0.7104520264022871 0.8887406657580867 0.20948825813145877 0.7554290019349981 0.06769238575269299 -0.8905420849324635 0.3056804214219646 0.5713913980328242 -0.13521696502311276 0.34244317360826027 -0.3642107908952743 -0.7556090098197388 0.8789612998604874 0.8228545623833208 0.4075132626561573 -0.8049078194243635 -0.8970212357273188 -0.22940720452442398 0.3722298902357717 -0.5607642848669365 -0.054585248574706924 -0.2532090928977315 -0.6403932329771733 -0.9095167149102454 -0.036612929725929666 +128 127 0.8560668326630945 0.02376964136949211 -0.10786978667844616 0.4490089311689791 0.9259392706947105 -0.20920890491075017 -0.716099948100142 0.9456683898546447 0.12822263911011 0.981248035973777 -0.36828389704673614 -0.8168252293223615 -0.2651876144824259 0.5536445916899055 0.9305408687421084 0.6074239160778261 0.941135467222838 -0.01076548296779789 -0.41856096342904014 -0.11446326238110793 -0.3891720155420002 0.00320019519007686 -0.18760912338106217 -0.7881876538597417 -0.6166306137999087 0.5928844289518698 -0.27384453406956344 0.9157925734512951 0.945243346437292 -0.5920828043267756 0.46609905056410317 0.15666541522610355 0.6574439793433704 -0.899313357306118 0.8255849584528034 -0.5247479796954353 -0.6863745528049163 0.27091060847305926 -0.1731176901539082 -0.810993109977111 0.7254177723121316 -0.415148732094039 0.8102020463702342 0.9300658433879301 0.007313676593057705 0.4636544789922703 0.7520347174926778 0.7436182122194432 0.9572846342706713 0.6583644109320885 0.09658892775076233 -0.636971073934909 0.4977570705667469 0.3608228463410652 -0.27112567613228133 0.4559223872400986 -0.4396639458695515 -0.8207145545427998 -0.45502467369325883 0.03456070530078548 -0.46840528919875846 0.21918408455616545 0.6130102997398181 0.3620928321976862 0.5757229549639569 -0.6360681196782612 0.6087171130035371 -0.30604129328667673 -0.40197714540807783 0.12014102269117544 0.6015532834245949 0.8093376218491724 -0.736034103376187 -0.19320587529712552 -0.9279594062269145 0.3845232056249508 -0.7115347139609955 0.023065703678778693 -0.8951107048303069 -0.775643176569903 0.4232800568679751 -0.7776353142771733 0.3756776808244078 -0.7572550616574878 0.8001401930244201 -0.4293431969708934 -0.9898700475693885 0.9464113630114657 -0.3801411414473448 -0.08233250502702427 0.0726948100857241 -0.6833580672732389 -0.454766555919643 0.6520888268409135 0.35217964642057686 -0.8449114054545206 +128 128 4.813431158652321 4.6517598444226405 4.0705051684015086 4.86024243468316 6.531014875280179 3.296411902909931 5.183559291991621 3.4472393522118163 2.377481156412724 3.802270608987808 4.136989675981999 5.170448780501098 4.890737672687785 4.376045614442972 5.159634153420938 5.126056094529284 4.475205555290731 4.419958943924574 5.0490505879154535 4.951456863775043 5.221024903595575 2.6229097324007875 4.3745930866504334 4.350192742509741 3.7749656140668857 5.534960120206641 4.605590857469492 4.925186577102348 5.384504738569711 4.941389319422628 4.13607434769999 5.425519697597022 5.225172790548135 4.405075072939622 3.40385071915198 4.607062485519234 4.640031447033537 4.2161095254169405 3.119517826454452 5.598513659062616 4.566781181472958 4.250151850875797 4.646991319720352 5.617098159167946 4.956125025629342 6.085768207661175 4.300109312998693 4.78941741188185 5.64539631383497 3.573338914855145 2.750512141532728 7.159236615946086 5.350395582679564 4.2453425818494 4.272892900686726 4.446203796622415 4.51679014605939 3.857143060047485 4.589091635745666 4.332540320071134 5.466066273313105 4.3220254865000145 3.681613389407592 3.9255559211959365 4.433182305085357 5.091404335211961 3.462811403554007 3.0712704351180378 5.785265755460304 5.034359765900725 5.6770818285202775 6.082692959988771 5.561308744978815 3.6733363612892673 5.746668918065216 4.324524667835662 4.977153659442481 4.462567280381036 4.731442449966938 5.418081198249183 4.514206882456207 4.474872667316934 4.014256239253476 5.404460488876822 5.180826791120268 4.6299409204404975 6.058283208093385 6.029101768303024 6.2418741617251285 4.725404112619397 3.2692451123753425 3.7911833382507942 3.4235434335537853 5.020869093969381 4.706953361853046 5.108668241369798 +128 129 -0.21691866495484913 -0.23368483281102437 -0.5641180848251734 -0.4554832603893426 -0.8212332067302488 -0.10981919152254038 -0.8698546671339784 0.2569967265464843 0.2803789731392934 0.06463533968169655 0.7949812180345193 0.017547744981289304 0.9256852785503722 -0.41379469902817356 0.4171532672345999 0.18201912166397416 0.1917425821986556 0.7479038611805064 -0.7180105649714617 0.8581731744562726 -0.6885113580865081 -0.0857646340043916 0.6088513127205843 -0.12517751728560578 -0.18309372975224725 -0.9416314174156355 -0.3358423228951546 0.17253793630850134 0.9598210666946911 0.9614450603593234 -0.8769225292958323 0.9268550180281978 0.8276494953816476 -0.8414610040767121 0.06690216254751968 -0.44194177391634204 0.04570245353078084 -0.9387496437504839 -0.0020966377880859977 0.702877024569668 -0.7482080986635729 -0.8173193647649859 0.2094831376614803 -0.9345347245599491 0.39303683902074105 -0.7956916213269536 -0.6348494690397564 0.49692073245989477 0.9070244079447818 -0.16624605129601067 -0.18840920348771184 -0.9768774596565082 0.7436210000523769 -0.133193153548262 0.8930313444442779 -0.3047938323212036 -0.07078415246560787 0.01655786242648638 -0.6507521509531882 0.7187255521311364 0.339645531179644 -0.8316600327447354 -0.9873838036481362 0.4528400273447195 -0.8950433071394768 -0.9724671255275925 0.08762387524256754 0.0816088149469707 -0.8311481478900973 -0.7747895355040642 -0.9929544307029832 -0.8642321431259201 -0.5018526446850691 0.5887595412782303 0.30198626942256834 -0.7996522101776966 0.2092650913364249 0.7318768217867604 -0.36324405991926056 0.9818577061230358 -0.354263756748324 -0.12811222001396882 -0.3749318817174787 0.9719327139911189 -0.13714949592302483 -0.34540549225138095 0.24393846035372602 0.09057522602933687 -0.9170271202124325 -0.9339462790489099 -0.8427588042498226 0.14962554515305015 -0.238484857381021 0.8903751623049929 0.9993225903407843 0.1417873387494153 +128 147 0.7416837320761864 0.9853556100501994 -0.2582648620581667 -0.9388225292739181 -0.2585670557414632 -0.5485964328307797 -0.240432042168081 0.04835393011757927 0.9426991390556978 -0.417251194058917 0.8846611471811203 -0.847810511650293 0.8408655268591723 0.3849238494532832 -0.33259617309095457 0.71957240242088 0.2780117387900789 0.711368353628153 -0.4406552128282355 0.9322621778708329 0.04221627637362979 0.03442418356654242 -0.3623399028273644 -0.2508319711644922 -0.3109999304095208 0.3228965799486778 0.6439146323921972 -0.5821812216162772 -0.04154792310736899 -0.6432328743618023 -0.10092173507542013 0.6425208396699429 0.20857877038885841 0.5106964511191194 0.03880672571775601 0.4112557728016286 -0.6923093618448526 -0.23754507821974213 -0.8732398386086473 -0.5204727259525799 -0.3678430242380346 -0.2540703759083307 0.3794047213857141 -0.19755496825601604 -0.7387547059122617 0.08119588685696244 0.9043347357815579 -0.9402420699653182 -0.4762286502152966 -0.3440815930598564 0.08601898031460986 -0.8369275926727171 0.4111661332587271 -0.13131257253780215 0.6370405626668765 0.9831291923523238 0.30438192439806855 0.24020692795509446 0.9242677835375857 0.5682140766714066 -0.9949278673856421 -0.14044895929107382 -0.291512505465489 -0.1843499315885022 0.9984974959720909 0.4173484353014072 -0.19500161166762986 -0.6574744818672098 -0.3617038044256389 0.37157067081901185 0.9506621695943707 -0.7966188959607852 0.12147239798066445 -0.5203362414470467 -0.9894413272641953 -0.4770967271984481 -0.5707519416158757 -0.8192471882720098 0.23931304482315574 0.5845800315562621 -0.8542239788837007 0.3714114141765765 -0.1637059800741123 -0.8271643159063744 0.448582408419514 -0.643057736421681 -0.7492772363849842 0.9409893345521672 0.39960950352574276 -0.25847074832809147 0.3746380105581386 -0.7032875772069533 0.015369130309834445 0.4973800891071307 0.2811029173070203 -0.8338040916860725 +128 148 -0.44186307457114404 0.660714183859028 0.6066884854991412 0.7467782591768846 0.790585943318443 -0.024860639432897624 -0.8923399452663405 0.30968118322018 0.3734651436636922 0.09993338611533353 0.8618878214782026 -0.8654964979894759 0.5427090709345286 -0.6897736295067687 0.4023058867650322 -0.7383519478987439 0.40974606151394677 0.7568496399569973 0.9003725881542011 0.34446379470973043 0.7490931338544484 -0.7410310264631885 -0.30370536317908314 -0.996862166376737 -0.6787335419904714 0.30570826728684786 0.38386838693661063 0.8964454404350706 -0.3911195807175536 0.07301450256500841 -0.22586631294434723 -0.3320555450113818 0.5522103231830091 -0.7854718862050976 -0.8200629536727746 0.9179161928964283 0.39748436520820274 0.2042070498254991 -0.0897970549908027 -0.6263413213925437 -0.23652286608046125 0.17410503213466577 -0.23329653924180316 0.7172723371582741 0.024419304132896613 0.7745465068351831 -0.46686684301082737 0.03344146459844022 -0.9918740811007523 -0.9981786546260281 -0.3760950611757825 0.8231439720135472 0.7082590776425552 -0.6354071439894036 0.7465597792133574 -0.8214564196675749 0.23622156315137155 0.18638655926949377 0.048319850518707685 0.7796995945750518 0.9951522189480719 0.8459276456218783 -0.45955567558974453 0.6861514726628464 0.33153206077335895 0.3169821062470495 0.08882229869155456 -0.8385483824861004 -0.9576569806031479 0.2659923634218535 0.18571697089841788 0.7981678352842934 0.6876628011965522 -0.4101499079868334 -0.7717455824093693 0.44572726540075736 -0.561352993542608 0.30192403164034953 -0.12000021119606807 -0.3894123403849119 -0.7806219762305278 0.4097419470133903 0.943005281786139 -0.4400968323531069 0.7882103355337351 0.7831085259517314 -0.5083652071073295 -0.6874659399861134 -0.9291413392254411 0.4490126247677486 -0.5961439079338648 -0.2057653746086472 -0.8623851891753802 0.8243930035676448 0.18557088742946526 -0.8866103263278604 +128 149 -0.15155347323883261 -0.3669195889264538 -0.6363230535792921 0.02880780080251033 -0.641784454114348 0.30211202310657126 -0.768040120310719 -0.0598966787933084 -0.2807167801258006 -0.7566884390856248 -0.01990438693678387 -0.690417640305401 0.08291117398706938 0.7930035835044749 0.6812217512369101 0.3202086828718902 0.38977638739937626 0.8044974233801863 -0.17832437142498647 -0.10583083494516488 -0.9321668159892549 -0.44382826559720634 0.8801426511025734 -0.7402070991616447 -0.33178583106169635 -0.08518260851696469 -0.5654236630324783 -0.7514699190315179 -0.34741550478637406 -0.5589081163299761 -0.8321791209686105 0.9143629941858233 0.9557210276501165 -0.21486327953974493 -0.6805146079352953 -0.3030043842398291 -0.8245692353588041 -0.45350826778667663 0.6143301283076741 -0.4743982052771891 -0.04769644392279648 0.13626300373614897 -0.5948192358348694 0.6467755757162592 -0.9957008704775221 0.8383651617038788 0.7761707410209602 0.5335108380412481 0.16527271811743138 0.7075557946005835 0.01558691824296421 -0.9404888666579996 -0.8227094792626533 0.8671291745723007 -0.14792164790160967 0.9074548719549693 -0.3470860264272233 0.6838341989424046 -0.6546984928276067 0.1798284543640316 -0.6908508823789263 -0.4380260532029301 -0.5397473850593937 0.3057118130874541 -0.5464994272216328 -0.7822188645656585 0.16517729721171515 0.5201082039655596 0.7151365490733319 0.26855119374089687 0.6149197782349578 0.9173101589211952 -0.9534299282621632 -0.16477582846777583 0.7089813674600458 -0.011300328860865738 -0.358044726248536 0.32938977493034804 -0.7759952407883473 0.7682478827131616 0.343356629835488 -0.6863811472307564 0.2804444375912585 -0.19557226554404883 -0.532188018149212 -0.7305325015894668 0.9017670962577471 -0.43343683300205704 -0.8797325309605717 -0.1297978383383258 -0.3077958364074185 -0.5047667407004219 -0.03647603642952357 0.29134086971706163 0.18449041888344553 -0.8929256896950128 +129 108 -0.12763107662746198 -0.019912695750396114 -0.7423706512388961 -0.5449161550657233 -0.8360752390113548 -0.24566849610870145 -0.09515586854867908 -0.729102728771801 0.9794673845289712 0.40893987425612255 -0.4185203431970561 0.6177846765364705 -0.0923631181597937 -0.49042289617475365 0.17445355669498896 -0.22377547625577643 0.8285721944226938 0.6079131634660393 0.38372457799791926 -0.2125910205610484 -0.1287631819989421 -0.11617102360647968 0.04378166108185866 0.6847731870670142 -0.5307063544815047 0.2636749725082985 -0.5586291152566156 0.5563985000079708 -0.6364525867603554 -0.9733171198041126 -0.43172677169405427 -0.9670922915192752 -0.9282629996135892 -0.997522804573578 0.822731213487873 0.11474352445923386 -0.7284455002051018 0.8537729684890072 -0.5251004055534383 0.7590563896513134 0.15880955542524844 -0.05615319028752719 -0.33546170931306873 -0.7101067963899279 0.43378803434072144 0.19428159938119172 -0.9392696272847745 0.4456951631902435 -0.025435713980600738 -0.23503046675457795 -0.6002210143467186 -0.025253980303368895 -0.9016885202293854 0.7810961582458855 -0.2721857667867049 0.7821996581225994 -0.7891287011956196 0.49851339705002107 0.022591375358784527 -0.21416836844320541 0.5436283480544595 0.495699014559583 0.7944242295213371 -0.8824822922069004 0.1538541334416379 0.8607909803662166 -0.7650611856085914 0.11590849808375703 -0.20203766690163683 -0.4934130431668273 0.11629284861088451 0.6176027444067449 0.4480653257938958 -0.2989231332782538 0.6370014783382698 0.9441106223233029 0.5153193335392028 -0.12054844320869562 -0.9480599928282127 0.976507941678197 -0.8005071168993163 0.027065278312841556 -0.6655111916750824 -0.9641192080293197 -0.3069561250225181 0.3096713340414232 0.6468351666122072 0.12339107818049144 0.10247637535457788 -0.542969092394479 -0.9508200055179541 0.1736325616618719 0.9982614722984902 -0.6618647390613555 0.8461410970980339 0.9836171121972495 +129 109 -0.5213138329357352 0.19404748750187495 -0.615925454715651 0.5036257483460456 -0.7469348114420438 0.08720849366171812 -0.8309545909219667 0.4623301225774723 0.4244090714159887 0.4662931491057938 0.3212295132564249 0.666000032978209 0.3721515727306115 0.7109646037899442 -0.29520698833549885 -0.3300481734563452 0.7043769300223699 -0.3801194574656226 0.1275599996976977 0.04433102777419906 -0.1389708195352206 -0.2209463789667392 -0.20544723938908804 -0.9571354945326191 0.40291975909597255 0.8119926959478851 -0.9748457400140056 -0.11348256205877516 0.3676083503240668 -0.9457252280111523 -0.07534983389455685 0.8246887637875184 0.5538101408606344 -0.7704284063960132 0.8366791964974212 0.7443946933418482 0.4669919540605876 0.6898341064631923 -0.8256700759551687 -0.6604687100111772 0.09633010869004277 -0.6149787803368572 -0.07236422380835617 0.6691158837918627 -0.5823915492609826 -0.3323611746800723 -0.23147709543619355 0.4572024075748973 0.9826233712390762 0.6111739118944544 0.11141417958608413 -0.1558209492799434 -0.5027892286531126 0.0015431116125370625 -0.5707440102512191 -0.19400074895355046 -0.2816795074476728 0.008063304921043013 0.1866869805557667 -0.9056822254550578 0.9020487408481008 0.7352288289360436 -0.5520654567206797 -0.9919209121337815 -0.6430233146282831 -0.8214042900780876 0.6186201392044794 0.08710484274222297 -0.17500939055095155 -0.9090480377248376 -0.7060141831612861 -0.16641234669894311 -0.5604007650490117 0.2712550885658471 -0.9676937362280513 0.02655602107242072 0.5517374031991482 0.9232277195366745 0.8551409426117971 -0.9297704371198392 -0.7268540527400489 0.2721236461355867 0.963425574363713 0.49351500423309735 -0.29046122146405473 -0.745941292804648 0.2558669572657577 -0.6034282710716874 -0.6843160105037001 -0.46857929107104423 -0.22728719024040345 0.22326683701320804 0.8408482424516335 -0.09090771515351137 0.13246463848694212 -0.8356886804390111 +129 110 -0.9710225999945112 -0.9756667264827719 0.2698159044934292 0.5427585327978963 0.7865714721717685 -0.9193470526954173 0.10741644852185162 0.9404767432427155 0.46170184678563353 0.5029013397870343 -0.5043991624176922 -0.6343894156592018 0.859458218699815 -0.19919735660451487 -0.41108012881607614 -0.6584152378247439 0.7239545853534197 -0.7479133749148212 0.20919715617225454 0.7275415425523399 0.40079219871839067 0.3733389314995368 0.49525841512480895 0.3702130748323036 0.773238488609981 0.49622306138291616 -0.30726163994078726 0.8014825691294725 -0.2886881918208857 0.8321575981609322 0.3228790835008519 -0.929529898589766 -0.8756614512201653 -0.6811842709696074 -0.13286364762801273 -0.6017521751199286 0.21171658018863626 -0.9524702344649676 0.32030955472344314 0.5610719335323384 0.16141282449262828 0.7838108293986863 -0.4733058465474824 -0.11934852562006526 -0.9210438868865669 0.3987872365870795 0.23614148610553465 0.04852375128958797 0.29249677840281807 0.01657416406372092 -0.0239254688514996 -0.7578507219545065 -0.6053298227599593 0.615110541464728 0.8440339380037682 -0.3568161734982238 0.24682960466448423 0.7958938473845238 -0.5186751214097325 -0.38053054132211006 -0.19738568317611715 0.20701609876812865 -0.8552514791019132 0.5017079199906394 0.7534988641931311 0.1854842438067441 0.1692851296860285 0.019799283523681765 -0.9461167861305639 0.34551488581531675 0.6233425557918852 0.4019704435537299 -0.5262032290884793 -0.15371274030370352 0.16947496073607726 -0.016386403053779475 -0.400902888105211 -0.5987099652533467 0.9620144326150775 0.711214229547936 0.42870137193428137 0.751948412842417 -0.2535016654198068 -0.3635551733663638 -0.32477112264245855 -0.7565984100674266 0.3489078717605074 0.6571630656669116 -0.6752722113719924 -0.8311045929352889 -0.749289752000557 0.9455857446084046 0.973081260907311 0.9150010259023023 -0.5231596680114643 0.44912450170065377 +129 128 -0.21691866495484913 -0.23368483281102437 -0.5641180848251734 -0.4554832603893426 -0.8212332067302488 -0.10981919152254038 -0.8698546671339784 0.2569967265464843 0.2803789731392934 0.06463533968169655 0.7949812180345193 0.017547744981289304 0.9256852785503722 -0.41379469902817356 0.4171532672345999 0.18201912166397416 0.1917425821986556 0.7479038611805064 -0.7180105649714617 0.8581731744562726 -0.6885113580865081 -0.0857646340043916 0.6088513127205843 -0.12517751728560578 -0.18309372975224725 -0.9416314174156355 -0.3358423228951546 0.17253793630850134 0.9598210666946911 0.9614450603593234 -0.8769225292958323 0.9268550180281978 0.8276494953816476 -0.8414610040767121 0.06690216254751968 -0.44194177391634204 0.04570245353078084 -0.9387496437504839 -0.0020966377880859977 0.702877024569668 -0.7482080986635729 -0.8173193647649859 0.2094831376614803 -0.9345347245599491 0.39303683902074105 -0.7956916213269536 -0.6348494690397564 0.49692073245989477 0.9070244079447818 -0.16624605129601067 -0.18840920348771184 -0.9768774596565082 0.7436210000523769 -0.133193153548262 0.8930313444442779 -0.3047938323212036 -0.07078415246560787 0.01655786242648638 -0.6507521509531882 0.7187255521311364 0.339645531179644 -0.8316600327447354 -0.9873838036481362 0.4528400273447195 -0.8950433071394768 -0.9724671255275925 0.08762387524256754 0.0816088149469707 -0.8311481478900973 -0.7747895355040642 -0.9929544307029832 -0.8642321431259201 -0.5018526446850691 0.5887595412782303 0.30198626942256834 -0.7996522101776966 0.2092650913364249 0.7318768217867604 -0.36324405991926056 0.9818577061230358 -0.354263756748324 -0.12811222001396882 -0.3749318817174787 0.9719327139911189 -0.13714949592302483 -0.34540549225138095 0.24393846035372602 0.09057522602933687 -0.9170271202124325 -0.9339462790489099 -0.8427588042498226 0.14962554515305015 -0.238484857381021 0.8903751623049929 0.9993225903407843 0.1417873387494153 +129 129 4.5060888615683865 3.544648807338686 4.956355670122671 3.1314077500823805 5.717481769243914 2.9885422843548666 4.195056019485002 4.660220883988654 4.488013399563762 3.7406670515080527 3.886050419204345 4.8824766913401145 5.388374064684507 3.894564223171093 4.149008895827326 4.08109692278116 5.114096833644238 5.0355335739949325 4.546333170913575 4.609205024713219 3.0385113084986246 3.368669023553066 3.7013449237640104 4.5226033263198016 6.254608379457262 5.0225490754727256 5.35851525676883 5.076415378589659 5.2308087424897804 6.073937722857176 4.271093420095613 5.252550988579408 5.619008014895214 5.076481592354904 4.273412109972759 3.6632386194257363 3.3607899385224154 6.1646461916893935 5.036922541999552 5.305602736576983 3.636464008578426 5.887927616567539 4.175855410569801 4.73339233751704 4.939819706935042 4.90011259858435 4.328707771534246 2.4326404786587785 4.233330013767483 2.962029453713707 4.095616472977798 5.319158151899549 4.755723277201518 4.3267194505977224 6.4329093795197005 4.4061765728925035 3.244494537116316 3.7576989124790185 4.076177178679255 5.5598930489064 4.046638924103044 4.202623613851097 5.791356568291924 6.636369143613205 4.8208912517647144 5.940993564180423 3.647843691228128 2.2209800740978567 4.042879276514006 4.198017076805888 5.303909613388353 3.833105680049149 4.514113403439642 4.494711091413862 4.753848727345479 4.371070575844444 3.6198957928774673 4.505781486531716 5.727807383337314 6.454658973083814 4.89371062024362 3.851613670755645 4.082766101455006 4.942047025411867 3.9059563845525758 3.6280452968762327 3.538335018394547 3.333284632656893 5.174883717132683 5.936559863201454 4.957583115058682 3.0211994882992634 5.7434003696985885 5.951172045617527 5.068424320181696 3.809781260218651 +129 130 -0.23604409629064582 0.04161379528494891 0.3013559803210599 -0.2794975210018884 0.27258333686334213 0.18237718060554742 -0.07095448617490652 -0.17304839725708354 0.6116000918488584 -0.3262919162814413 0.07377044329373517 0.9572408592456934 0.9086538624451024 -0.3781530979701284 0.9596351976192468 -0.7707610290809843 0.48075963860280746 -0.8729034204420378 -0.793107598257148 0.8451713457492216 0.009584076399936858 -0.7513530629933194 0.9487963145463219 -0.6207078056969646 -0.8209556728275651 0.21111025466045197 -0.7890085287034905 -0.19753481589108612 -0.3965456127157747 0.45232448677060333 0.3189812233579574 -0.13864831313684478 0.7339675374239261 0.06403740636066924 -0.5688701238829201 0.5384520834811013 -0.49007771610609385 0.6981415204155235 0.24107831035865934 0.6571641060814439 0.9861027218312559 0.9936976497264931 -0.6204441519910622 -0.48940635691000733 0.20168869322766203 -0.6813444065159355 -0.21335812359045891 -0.27917451105905977 0.8434475193158446 0.529377628644464 0.26482307587485465 -0.9346997784451092 0.09779023811239496 0.38710368047642274 -0.8565015891801346 0.2503694332645745 -0.7273751881059671 -0.7746009058907033 0.578544099769509 0.05912034962965218 0.2619812215354842 0.5912549104972413 0.5640986694997405 0.6687254459535665 -0.5682695551784178 -0.9050811407552009 0.18219329675741358 -0.7142079185751637 -0.19552543946364476 -0.32985271874260813 -0.3176748869459687 -0.109900515699487 -0.8416828385344257 -0.6144396689471845 -0.8330684105267665 -0.15519504724727207 0.5658661834741543 0.7799088187229652 0.09831401828182873 0.906431484878228 0.9629303806894787 -0.2657954473308797 0.10269835452882403 -0.041329483797996724 -0.6075269557662222 0.4959076364335331 0.7227641776549405 0.56959838650291 -0.3163802560462752 -0.8049985686550272 0.8741335786740232 -0.5569719522583187 0.978549687099799 -0.267037636688211 -0.6399033409836241 -0.10145199219842205 +129 148 -0.7212481114109528 0.16172809094710905 0.055341562342151596 0.64208953411576 -0.971088130110155 -0.19221423338133192 -0.5890816006975768 -0.5017267762145778 -0.7799018003841811 -0.7799622237055626 0.6610424021575894 -0.7780840645440192 -0.1464115798050878 -0.37076015819956076 -0.021647406522973034 0.34764294959220776 0.8584385091631506 0.07056632374697736 -0.9133287369469409 0.15833915378160657 0.35342793669602246 0.9073071387340328 -0.5709346138716278 0.042314585850570685 -0.7991499407254254 0.8746151214098694 0.9723986659295742 -0.8351376084284328 0.9487112727334512 0.7693845566335158 0.4012679325096762 0.11585137201203688 -0.5215343825547845 -0.6591119224901743 0.8073379244658441 -0.42716110706042953 -0.2723453182578641 0.40884283756492446 0.7917895356084004 0.686195895818015 -0.5761888562886692 -0.991528849116867 -0.9084602724962645 -0.3497889590780656 0.8090573407920254 0.9890564496241196 -0.7782643679819425 0.3623384392615472 -0.7534404965292687 -0.8920982698387343 0.8748153024436756 -0.2954821286041942 0.4778855031472231 -0.7236847794615278 -0.9297909989844162 0.6262001416962402 0.010170529573035214 -0.5229414907023566 -0.22928380594147857 -0.9330540366671196 -0.32854964767038175 -0.7539143382121603 -0.6316773141647829 0.9517390693833083 0.31200746105090826 -0.41240017701430665 0.2523361559990074 -0.08081328268872934 -0.16274866540080213 0.332166057475646 -0.8312861401196654 0.8700534522428225 -0.6253697907361166 0.6658839853789176 -0.6429671130074421 0.7235858660025296 -0.5361246897329821 0.18496381390996408 0.6618656481294103 0.59447484393564 -0.2834999478818683 -0.1723103264820991 0.44733561079667505 -0.5425214946532253 -0.4365695621371277 0.06049374428141108 0.3381859560960645 0.46115132270253256 -0.3059074233038712 0.9003649279264381 -0.23709448806356015 0.42661157058726595 0.4710473988087207 -0.9448777536626698 0.687125580502248 -0.02728177022606415 +129 149 -0.40022574323359295 -0.9592462096173222 0.9187837731759647 -0.009889054811745623 -0.4607686458784448 -0.2559010348985258 -0.3455903423233757 -0.7442108628394744 0.03288053021902004 -0.2630684063193067 0.6748249049483555 0.4965861156737825 -0.9246858931178137 -0.3801694032629923 0.802308347656628 0.491787442293377 -0.2338796083578183 0.044900814330867345 -0.6673116995289139 -0.8133627732424535 0.26721934631673094 0.21175913678187475 -0.47808258666137626 -0.34424412413853056 0.8895500169238209 -0.5052491210870347 -0.23998129136403734 -0.49747081901819423 0.8896148788003873 -0.38054429321089533 -0.9387454791602239 0.878777670920686 -0.3777150381266159 0.16537884741291697 -0.273121315359373 0.3729240575030499 -0.28025354582325646 0.5236893549007009 -0.8582528941781169 -0.30076082501793056 0.2153088491989461 0.9615590829908098 -0.3200228557713798 -0.26601660644564706 -0.46387611813928187 0.14172670356992056 -0.5455249076219768 -0.161926011104377 -0.33119887765971434 -0.2222943758625615 -0.6964508898503776 0.6504024226033247 0.2638575568478154 -0.9751346024177379 0.36988007270942425 0.2640388464754295 0.49456114493079073 -0.48820388771347 -0.9557823297723662 0.62393351735387 -0.44889556590368773 0.22764323837811595 -0.7529242270947285 -0.9563154341597164 0.14778578659371355 -0.9986509481475516 -0.783766582505554 0.16338957365529172 0.8752707170200145 -0.2393994479966708 0.4596563610373572 -0.6244087223268242 -0.29914439687211813 -0.7531330927352413 -0.5074544692208238 -0.24795507424806496 0.14661943541723943 -0.6809721288481994 0.14994639649582986 -0.49384863471948814 0.4343259807341866 0.6362635106300982 0.3185204626450642 -0.6033405926690631 -0.8979786090635731 0.5421289228911692 0.42247230697211413 -0.04265629215938205 -0.6224623572997854 0.9280695844141493 0.17395563090024213 0.07397730052938023 -0.9998070459420763 0.7901166579368393 0.28319678261054104 -0.6577247719731216 +129 150 0.5865629698951524 -0.8795090130182643 0.8699526197370764 0.13676742135750874 0.3871328994048997 -0.9124338135649686 0.9443081621979166 0.8413080961433024 0.5775006917558483 0.4950863426952963 -0.3211900589266976 -0.6069882404044367 -0.23114912377373487 0.8624648423839647 0.9814298911655783 -0.2424301284922583 0.9682036401979324 0.718450926579767 -0.22939410272660354 -0.4538652677410815 -0.626875461616333 -0.32784970402961977 0.04546768813843505 0.8394022591825754 0.8869971801617804 -0.5222837065515966 -0.634751923759544 0.9793409087568723 -0.005927634536749826 -0.6893318267561446 0.8135828900857709 -0.014063371538759473 0.5570965618007133 0.8353051784723331 0.37548668677350605 0.31174839502935536 -0.23654646042485128 0.43039225731786424 -0.5831360179608711 0.3266762259477951 -0.16661478360237414 0.2937317325364506 0.679269235420026 -0.688315446989137 -0.7121313167000918 0.9119243362357823 0.26951221989667196 -0.12412222969115994 -0.07189612596795492 -0.0739788651057891 -0.9183624926375458 -0.9807283773867781 0.2869196734124133 -0.010372955095350633 -0.9040387742846494 -0.8315957578464057 -0.05134210222854163 0.5289104352101748 0.04057992316921144 -0.7547805011289148 0.630273247941129 0.043042631206452464 0.5278951715828804 -0.4175988522518759 -0.5219624925139368 0.09048626310155594 0.24809828820793567 0.8496327820208538 0.12245784894218037 -0.7497864729291632 0.5695395532825767 0.11253153617351042 -0.5032416031327862 -0.8596388457579645 -0.6051638912937838 -0.7516237519014097 0.1543573861290044 0.3772153401725129 -0.8070218896412704 0.0905355198867781 0.2609525431718662 -0.8601700760737641 0.22362560292196876 0.6083664905646313 -0.27997679147530397 0.25475626768382753 -0.029156871630784398 -0.6205584139386591 -0.5962987258990053 -0.10543594863831629 0.49967703236530503 -0.08332799490883214 0.05934093991794831 -0.8769686876632623 -0.49570871927603943 -0.06745800648388722 +130 109 -0.8751087580781833 0.10157009153898167 -0.3902334985969651 0.8988139631018053 -0.8557722758621493 0.8749871002067389 -0.5180808385195022 0.2757851257037456 0.027619725371295756 0.8864716669691353 -0.5751643419509704 -0.8340949880971367 -0.42657747917684286 0.8088834932802884 -0.12257946070664527 -0.6184386532561748 0.7746648198329082 -0.023281716448680045 -0.002304906955569841 -0.6094103882506849 0.03531396776315354 -0.3365279687339662 -0.5920038350751331 0.09984104701296959 -0.5914601578122101 0.8462641305900773 -0.29722971339221393 -0.879483261738891 -0.4676058854173868 -0.7392704360837004 0.7055970653696053 -0.29340885675272066 -0.15152905596034505 0.8334107742225383 -0.34808382302772656 0.7174660815450609 -0.443157604865114 -0.8730840080589266 0.7852977723163894 -0.8304110573375718 -0.34340281445563225 0.9148332479529508 -0.6369905516887842 0.06437074414938437 -0.5413488933136776 0.1330198203568651 0.4373589351268419 0.8337600688855602 0.47267147646099517 -0.8454792071544912 -0.8331476781323099 0.787516163161097 -0.8285393838638846 -0.5972570644634596 0.3894521248671321 0.32717626918937825 -0.7234158982771142 -0.6056358997636562 -0.5134227661529474 0.7977373246090442 0.5985504432221163 -0.00022840738171447938 -0.8952930789940552 -0.37856613518776183 0.47722698808699104 0.7244114635891623 0.7409349294767056 -0.10291274566565445 -0.4809497523110504 -0.003501010229443269 -0.9998013568336452 -0.1808234065513301 -0.03212951393511432 -0.7017212831206519 -0.3228778269214063 -0.5768982368935207 0.18285731172978226 0.5843787627452393 0.3366987506413244 0.12581280285271101 0.3232533925013905 -0.4227141824482161 0.007719993159968519 -0.1348464752379579 -0.5876043999137686 0.7337355579398153 -0.8301511208013006 0.5196665352925098 0.810830025361138 0.5158469906582115 -0.7658121265884192 0.7681580040914475 0.2857597147176212 -0.7822811834562164 -0.7458397602002693 -0.4125111114583373 +130 110 -0.8633395834958 0.9646980735130335 0.7089936145822153 0.25780221274734205 -0.9415940160220742 0.21634631595420295 -0.4264573459883765 0.38263413056360496 0.47772527561273814 -0.5534601514452617 -0.8806442198445728 0.5465322037834803 -0.7758416571793498 -0.6846266252598159 0.23207869608807896 -0.37045689005936366 0.4131623316572175 0.47874883771926346 0.4460757881794679 0.38179570337001145 0.34609300561887846 0.025705041513603533 0.9142512407144996 0.9730610064936955 0.23706705808812645 0.7964106095964187 -0.046635285099692725 0.9611464191937333 -0.3799507419824153 0.9836984018814614 -0.860253503950168 0.6220785170348531 0.6889342174695907 0.5936009448512427 0.5701361435053534 -0.8023823968211261 -0.5194093161458966 -0.8637027317205441 0.2278131561330179 0.8693692535334245 0.26622259801149695 0.6624939021730145 0.6954043951922926 -0.30404631365923707 -0.28070538069492423 -0.7035534068213007 -0.3683834602497731 -0.7150956680948164 -0.5385020061313932 0.3959083569690145 -0.813643118238758 -0.769378559065492 0.6197387168370616 0.41036631058124984 0.07566015112413083 0.45249681721702983 -0.6626837862908939 -0.2884874180202379 -0.414704154332983 0.431436895051873 0.7208118268752031 0.23004663653580293 0.3429603906864065 -0.17268439426977755 0.27409262494241116 -0.06909780222821293 -0.33973996454055255 0.3062108584805794 -0.19786309625883258 0.9629177290534636 -0.7497934823104584 -0.9363678999981053 0.894232358826534 -0.63106746186709 0.9358692727833682 0.31405916400460576 0.6505046239312235 -0.7363326701888291 -0.4777433486875575 -0.41634656236738543 -0.47161051179659585 -0.9815852793180317 -0.5932947520660239 -0.31831551977166384 0.5982122190255306 -0.2784464379591627 -0.5077400461315689 0.30144442077113265 -0.13473826589354077 0.2675055581366381 -0.7613833882039267 -0.8036317428716899 -0.06775624776841482 -0.08438060547894022 0.6285917968539114 0.041165936296919226 +130 111 0.9000772810797075 0.9475291285809821 0.12869601341128756 -0.47865976577866487 -0.6836501276019904 -0.4460376515518374 0.2361084148126522 -0.4262347241745099 0.4967221319508526 0.5012222939250119 -0.8135493235710471 -0.8094459295517169 0.2898521422676543 0.0911825196195204 -0.8677025377476952 0.564299089146086 0.7083368970821651 0.5099628768519833 -0.7097937420181757 -0.0009306329003440084 0.3500269869455348 0.7580570461259626 -0.05833568126963229 0.6776642884646404 0.9457003528267038 -0.08978791487594551 -0.932237093891845 -0.012574763571725045 -0.45816641983869744 0.8479695084467149 0.02696121930366724 -0.14921839739553722 0.9504620869698519 -0.9910940638309582 -0.6544713179326496 0.7891835084404579 0.41616234829036336 0.4178390007177417 -0.39765197321411017 0.7154200057638036 0.7717634193221186 -0.32965316454153704 0.7813761075431906 -0.8852642992033832 -0.6774542418529645 -0.368076762968391 -0.3589335365692812 0.5582633021839347 0.2893992868940327 -0.6433136343795147 -0.15554703207862453 -0.10344835777402972 0.09373154320170962 -0.35081562922507503 0.7751647941278852 -0.03948676955016195 -0.38501390574684624 0.5624984999582359 0.46939962320930073 -0.7066220705648254 0.2541668431252939 -0.6770320246851491 -0.9021459724060878 0.5210973857313959 0.6349303650786582 -0.10295265762143302 0.9696094646407682 0.5785981632942474 0.13925733994080547 -0.3257343885553823 0.48410235773144805 0.2816445877053706 -0.19785529917379718 0.3511248141815031 -0.8637530652942094 -0.7988428992772414 0.761490552487037 -0.9238711040588856 -0.3788308290931488 -0.07816096732546551 0.6665795192137316 0.36966172013270393 -0.08413835783567025 0.3666696753075749 -0.1637650266819619 0.013529588404386894 0.4492437851900868 0.7277813639278052 -0.5177683858036475 -0.9742744471073141 0.5684960713551555 -0.20471175687442922 0.13949507528790095 -0.6051648477526657 0.6987373986625136 0.977820853717551 +130 129 -0.23604409629064582 0.04161379528494891 0.3013559803210599 -0.2794975210018884 0.27258333686334213 0.18237718060554742 -0.07095448617490652 -0.17304839725708354 0.6116000918488584 -0.3262919162814413 0.07377044329373517 0.9572408592456934 0.9086538624451024 -0.3781530979701284 0.9596351976192468 -0.7707610290809843 0.48075963860280746 -0.8729034204420378 -0.793107598257148 0.8451713457492216 0.009584076399936858 -0.7513530629933194 0.9487963145463219 -0.6207078056969646 -0.8209556728275651 0.21111025466045197 -0.7890085287034905 -0.19753481589108612 -0.3965456127157747 0.45232448677060333 0.3189812233579574 -0.13864831313684478 0.7339675374239261 0.06403740636066924 -0.5688701238829201 0.5384520834811013 -0.49007771610609385 0.6981415204155235 0.24107831035865934 0.6571641060814439 0.9861027218312559 0.9936976497264931 -0.6204441519910622 -0.48940635691000733 0.20168869322766203 -0.6813444065159355 -0.21335812359045891 -0.27917451105905977 0.8434475193158446 0.529377628644464 0.26482307587485465 -0.9346997784451092 0.09779023811239496 0.38710368047642274 -0.8565015891801346 0.2503694332645745 -0.7273751881059671 -0.7746009058907033 0.578544099769509 0.05912034962965218 0.2619812215354842 0.5912549104972413 0.5640986694997405 0.6687254459535665 -0.5682695551784178 -0.9050811407552009 0.18219329675741358 -0.7142079185751637 -0.19552543946364476 -0.32985271874260813 -0.3176748869459687 -0.109900515699487 -0.8416828385344257 -0.6144396689471845 -0.8330684105267665 -0.15519504724727207 0.5658661834741543 0.7799088187229652 0.09831401828182873 0.906431484878228 0.9629303806894787 -0.2657954473308797 0.10269835452882403 -0.041329483797996724 -0.6075269557662222 0.4959076364335331 0.7227641776549405 0.56959838650291 -0.3163802560462752 -0.8049985686550272 0.8741335786740232 -0.5569719522583187 0.978549687099799 -0.267037636688211 -0.6399033409836241 -0.10145199219842205 +130 130 4.472050162574629 5.1869762427786466 4.744624188396115 4.6248895152834875 5.447268449083051 3.546097084928242 2.0851523271009986 4.357437589766262 4.959046784286219 4.329760810549994 5.26841712213743 6.299424183660266 4.925885831741454 4.297986055056458 5.78112653719688 4.904470030264681 3.7784635564331097 3.4104152854143637 3.476524025126358 3.168771530893923 2.582851427307611 4.344861584267877 4.568186465722725 5.185767922973886 5.507655518866299 4.487889932938535 5.690581201825161 4.242346292618823 3.7263094844531413 6.618310532393614 4.841492944307193 3.268401965210875 5.905795311232362 4.8871485527676874 4.466070443329948 6.29252101504919 4.082480319603384 5.858316655446524 3.389545628475442 5.631423810451282 3.9220840299404554 5.541668621657017 4.615973923502035 4.426638296123221 5.588157516134058 3.933238762087002 4.048904507772982 5.7488635870746645 4.669363526983509 4.5076978864748725 4.338667049493056 4.518438342669872 5.003689184775352 3.868993661728294 4.159009201116881 2.802167954147868 5.7696021581227255 5.178632088743807 4.583165154147588 5.490741159733741 3.8624941981346024 4.672641113684936 4.395937343000494 4.272896617635988 5.220236706157125 3.1467357980317967 5.188719060888806 4.064467072618012 3.510188231595879 2.730088555846595 5.007124733596804 5.5034650892539565 4.278056096081341 4.290669592205772 6.364168334884631 4.449827150782123 5.835683171539461 5.719437378193303 4.490119486224235 3.403121347258402 4.1479816225327895 3.753141548225611 4.108389882114892 4.029520662883711 3.9281952054102267 4.409378715376194 5.660093007464358 4.4200906293019955 4.610548849917595 4.646321110870735 5.294753732988222 4.609751376729737 4.438996754118728 5.373716623057572 4.7952949275383805 4.434970504914562 +130 131 -0.588188321128565 -0.49380609702689604 0.614724194749739 0.2669385623904197 -0.6316080989673001 -0.43670321868309125 -0.10757282627407583 0.7495729079334374 0.8517823660930248 -0.7689106027324519 0.3832954811513689 -0.3355695080037344 -0.05687757468466126 -0.9720620584248025 -0.8594138281056312 0.2470186658218465 0.19500205908719903 0.10165612281264558 -0.017974775100276785 -0.24386140500980757 -0.0005566760096400447 0.6060062054487776 -0.6410681600213792 0.5680107906478016 0.4164068594783077 0.1373890064224783 -0.8279712809980588 0.8692620863075453 0.3202291585036239 -0.8077441496099282 0.900379960863658 -0.46913744640673527 -0.28903745909348943 -0.3854839471566194 0.9153785219159074 -0.8844936811850117 0.04367573876011965 -0.22863061839827248 -0.14249811113200606 0.8567226766697547 -0.13576260526519235 0.513157379254394 0.587520683633793 -0.34778735716606457 0.9402890204192769 0.10541870276359111 0.6491478418286529 0.7707418118758429 0.6271354086599639 0.32582738577268944 0.8225694797428487 0.04317705835742758 -0.9556857694406957 -0.10888752959084957 0.8195109183219584 -0.16979210389902288 0.11584552259583547 0.7973941403921312 0.5412930465883898 -0.7221643787382424 -0.42114269321089615 0.33579102213413115 -0.5183710664498016 0.5047980456820134 -0.9204238859287421 0.10980601536814394 0.584828373490645 -0.1326990110214148 0.6067545496194384 -0.802318321815221 -0.958983640137381 -0.8854293395897401 -0.5174819738324055 -0.4511348330287568 0.7430686238109407 0.43999888563219125 -0.8905190602937694 -0.5820771494397741 0.548432748505266 0.47619082513340794 0.8710415760043297 0.11027795388077855 -0.967743832942138 0.6649338525797435 -0.37272870087652277 -0.9671118551236708 0.9417354027783786 -0.3941787956865037 -0.045395803746667296 -0.8741485872803267 0.695141674513692 0.8052010385045327 0.44547969873922444 0.4121441898061011 0.3528188768525622 0.04001554419217257 +130 149 0.10596888714107289 0.7088566226784849 -0.9838047130476579 0.056935354658941284 -0.9872809886921232 0.30370437342041834 -0.01138954385966584 -0.33348131990710783 -0.9999498830892197 -0.5656901342356633 -0.4822509380024793 -0.7769593309774596 0.31571558067290617 0.10101185913201238 -0.7553199001395523 -0.7427936720230408 -0.2664619600026856 0.6236649964263394 -0.6205173047257364 -0.1295464547675318 0.5760645450997712 0.9781228426345736 0.11444465869061471 -0.48980680049026226 0.9382911632734448 -0.31495450518579426 -0.5913136290558163 0.11863324258752272 -0.45697161968109135 0.9760674145872272 0.6001511040314553 -0.00873308926913774 0.9615499575562496 0.4647343219402644 -0.35165385011856887 0.5211081185158783 0.7606775004344857 0.7913749382626616 -0.08411812277094222 -0.4696474314834249 -0.64063564348692 0.19333237766137557 0.0973909103141044 -0.990924423469645 0.9114710243852435 0.5112302932771697 0.8417030223041388 -0.844932517678386 -0.6956952292357246 -0.022193975072089644 0.41470881408270155 -0.23613316518418093 0.93996885930575 -0.8962014061614374 0.44746802640094985 0.414419072713039 0.9240602415207633 0.5114147348428777 0.6313649823203793 0.9602463245854052 -0.4400764120792766 -0.013259445149766957 0.4541145033435059 -0.7540067714677141 0.6268302132242085 0.7214332179512308 0.1358079717226892 -0.5164551268899369 0.31902950662547425 -0.20516857875923167 0.20418110172555504 -0.8438341933346756 0.6167048943983724 0.04617082538158068 -0.7398547522784225 0.3625545250554407 -0.958995836885981 0.7016545355807013 -0.6924970669814621 -0.06636850843990416 -0.2657303775475224 -0.6707089699164923 -0.9084875271111026 0.4434872168424413 0.4503962282303249 0.10915951807167934 0.733988575793808 -0.18321609196007205 -0.7278694088319078 0.10844804691751198 -0.1864919806377039 -0.8451843520884739 -0.5595249615687246 0.6621691236792189 0.10721412717360268 0.80703434954682 +130 150 -0.41776746871341963 -0.8352221678570482 0.10739533618504127 0.8028320334585466 0.5064742127193469 0.2953253695110698 0.4224567414922342 0.4941553561953802 0.7796054325590733 0.5305955258090069 0.7543951314016648 0.7868866521193227 -0.8940328374161086 -0.6777616652548792 0.49876384490712833 0.375666402200892 0.050970669319656325 -0.07806041571124012 0.25255068268583747 0.6195331408302622 0.27342480145167003 0.29743216272642004 0.42905340032290473 -0.9621564917259897 -0.31455413592836945 -0.6165966825607818 -0.6332154849734117 0.6255404762819234 0.05446071252905749 -0.8220435604278484 -0.29157062211416696 0.7317454327919783 0.9045504830713342 -0.7914442308878575 0.14244129327543775 0.4146356754037839 -0.4670479962375804 0.2230662447011098 0.7267924817352345 0.047021276377078536 0.5326389905608808 0.8452568944583814 -0.2631348819080186 -0.6231901105425524 0.16971644874997538 -0.19865909998197773 -0.418821020701734 -0.7804501040643328 -0.3244808973966178 -0.4121556890905467 -0.6037878085306956 -0.07737673876727413 -0.3362486062266916 -0.505373632247522 0.22991315724338013 -0.018686827834455855 0.6807454868681311 -0.3025281141487619 0.5380782918367566 0.5916668732607688 0.2637950745313773 0.9829698169870449 0.11332930181422562 -0.07335465351839687 -0.6379163029511379 0.07061746375887812 0.6875558029431279 -0.9187899117899616 -0.8707236414863853 0.09400565298615704 -0.6128699693784203 -0.946604805017907 -0.26705761944260353 -0.27909924346594495 -0.8632338489949285 0.71608605869103 0.8765308827626312 0.7700128111421423 0.8594187693549917 0.4484767859799277 -0.4315992515237044 -0.11538148671233217 -0.9181124029666474 0.7821193252676817 0.3038011333684614 -0.5253748975570856 0.4608547051406793 -0.7463289108227429 0.8721906907213997 0.7178104765368081 -0.10825469733329762 -0.14020590757018647 -0.7916018226160912 -0.7392261530500888 -0.6275491027280875 -0.6524638713710449 +130 151 0.001937686684364115 0.8663278082494577 -0.5722084089859112 0.7641160757065535 -0.2883245920123243 0.7570642306951096 -0.01586669443202604 -0.6212742278006775 -0.2079229600114405 0.03215005580419783 0.7496099679906882 0.40606625731111845 0.5370989722916919 -0.4012790024492814 -0.7342507170743691 0.46068986265591083 0.03184492567038988 0.4907885839713453 0.23127676977672795 -0.16745636733788527 0.4224597800193144 -0.43706234199388705 -0.6569446010160467 0.7463360452924612 0.7627532437935529 0.754785775336603 0.855791738895022 -0.2443972928479674 -0.44104867096821443 -0.5971213178647539 0.9540263962289914 0.007031557374160613 0.9260428903157669 0.4850767344165676 -0.37351420373503275 0.7547608012000904 -0.6370282490849721 0.9454167459600478 -0.4214930827500578 0.9848952528588957 -0.032868428798894955 -0.35327375542271655 -0.9260250954450036 0.6801048298589882 0.9600289821892847 -0.9084421985197975 0.08021673986921907 -0.9482362304837881 -0.4197419340548143 -0.9785398361905568 -0.1364948492461553 -0.662701147126115 0.270752276075795 0.4618013523510167 -0.509772976377052 0.8186414632470247 -0.8349407252006571 0.8674484417516428 -0.7727676304152076 0.721777946812967 0.8366005302144148 0.9120552394268189 -0.05737206656369431 -0.4887420803041256 -0.272569774592444 -0.07256495211533998 -0.7098637002820323 -0.5720925399267287 0.32593037028028515 0.0032553439887390567 0.039071703199963004 0.9322049905723802 0.5118244344358269 0.8624848982388509 0.18553262098733514 -0.11392234162009718 0.09208967482310348 -0.6162681083529227 -0.8451160971668161 0.21671198238835054 -0.03151946033846653 0.6960375680755935 -0.1974235343839117 -0.3281498354347334 -0.7042193782580335 -0.3984401096814705 0.7077618178119198 -0.03911049723626148 -0.6549024843203197 0.008226164965636773 -0.950476176615169 0.12635107618194286 -0.4294991888254347 -0.9466966290423842 0.5232771604525506 0.5794195935036008 +131 110 0.9192417850547194 0.8747377988894767 -0.5139505665796398 -0.8824987599078327 0.9920349283717473 0.5051747255524293 -0.4653003577742172 -0.6423736564079892 -0.329756425859814 -0.17201192355217976 0.25850312428694777 0.4250806540046952 0.6413637332439341 0.09001518769197059 0.5181750116706829 -0.9460375208023437 -0.7276125871438921 -0.9226257009104613 0.8763712150680725 -0.09480856538457161 0.6552004714115007 -0.11347499239241632 0.48805963922085094 0.005323093181532013 -0.916013695589188 -0.639582535201473 0.20962199681933424 -0.6905348877894701 -0.28411146295108014 -0.4858257568524358 -0.5743498766999697 0.7445734850224812 0.6560743997190139 0.38162610609605396 -0.9978023756224723 -0.37739759902730197 0.7182046111491331 -0.8696685852172144 0.5742679042735128 0.9049555478034552 -0.9887922632346631 -0.8626571935864489 0.6489185633106245 -0.6322262462563872 0.3706715381307488 -0.11175817495112272 -0.6235848841257048 0.9033814038103529 -0.11279614512078595 0.12900358625344377 -0.5726296483058966 -0.24562078656967357 -0.4829845454025601 0.025020090561090447 0.5551628166750202 0.5088500859951024 0.6490450005944337 0.7307950175344182 0.8750560489786079 -0.9008718492180756 -0.44738513694861703 0.7523595517383439 -0.3456248243550992 -0.7580020162100274 -0.8790997633771969 -0.5296719667413747 -0.5972480638874522 -0.6084281988980487 -0.5918201831591767 -0.7228247737912978 0.28958715482424524 -0.1914297027113374 -0.817967049354992 0.3267391896705536 -0.7378531952954586 -0.38894528383287685 -0.5886177794723544 -0.021816478824193686 -0.024443947515392805 0.46163418343097096 -0.28175371348972056 -0.09080565704507126 0.8437783283764799 0.6123398626036651 -0.8013096017191608 0.2550617019863124 -0.2918124310784269 -0.9943415220410576 0.04359281913344892 0.05921385425572234 0.1605552214712609 -0.8110991467836575 0.5144585941450164 0.07089562159852658 -0.4746826549930374 -0.6885623976176021 +131 111 -0.8887576279199199 -0.526923412709621 0.2271290557299146 -0.311025873237605 0.22154783595869065 -0.05813498377763415 0.9676947603617192 0.1696884811643815 -0.7256064628689674 -0.5212091722308236 0.2723869770495464 -0.45051266118363587 -0.9273134911011187 -0.4120792910075357 -0.8734937871820967 0.5387211461994765 -0.6041632075270336 0.8294142379641019 -0.2040797870822939 0.34163794163904937 0.862658276316971 0.38370105706547 0.9457204261513878 0.7896461613126935 0.6909436201180907 -0.4614962781043144 -0.06209216261091832 0.19473196934906678 -0.9364442073337931 -0.36713407534111875 0.46536743784151025 0.36582047549487773 0.8596064455421151 0.2748298153154487 0.6812043358065754 0.6846121979132624 0.021787803206165135 -0.6624948831079189 -0.24177414894313531 -0.22804919022278103 -0.7331569557478057 -0.907638909384114 -0.8021550541921048 -0.19333646165789165 -0.19094186801869295 -0.5436351935323533 -0.20880591558371453 -0.27794014482500007 0.1831372586634874 -0.2980960484626882 -0.5408746790635399 0.047594032983783396 -0.11273454625366908 0.7336873421591765 -0.5782382553976955 0.4157516171994251 -0.0970385427917464 -0.3581123314943253 0.9037250082261667 0.1582770295922058 -0.03421796053678694 0.756109967630606 0.8601972130446738 0.1969081564099422 -0.2857421080532181 0.9232964630690592 0.013003477866976976 0.8989336545311986 0.19668508985610234 0.24610425147914294 -0.10402388205108126 0.2633425468004271 0.15536173973032352 -0.041014828756234634 0.4588062867477465 0.3645971654467446 0.6432227947304332 -0.5108198087020064 -0.12477857991247521 -0.7998843574721115 -0.5624023267246121 0.4786020066099659 -0.3960420137606391 -0.25606416803026244 -0.4606711132170991 0.7515684019566786 -0.6610362039483677 0.5784427593629171 0.4952781980132015 0.6840989538380917 0.29835071348257025 0.14452576740691825 0.1375881849060705 0.4946237400184177 0.5695533050455415 -0.37190773697493484 +131 112 0.43695589647018873 -0.7452891239499906 -0.8491353507904116 0.0163192225849611 -0.880541021254837 -0.5867889233856298 -0.7897267596069659 0.4289808069882961 0.6355076589994311 0.5542058636597178 -0.31316722474344805 -0.8303224293788329 0.659159715552563 -0.2967723201704857 0.5782101789547456 0.04273132070837682 -0.5842515065136853 -0.1633098358011975 0.022727152675753093 0.7749037980731823 -0.30148560582910977 -0.7294890023857823 0.2507146039881536 0.4868451750708782 -0.6592714483175519 0.020169619806814643 -0.3888329321863635 0.3064370857174472 -0.5133273316020814 -0.472404515930827 0.8119623364931876 0.5835676268215029 -0.47527576768668545 -0.12817776095330458 -0.21670852687794473 0.8386610498576836 -0.6555539655254956 -0.2712481906160842 0.08096932821181801 -0.9484716920862863 -0.6845500041914245 -0.7487095647306934 -0.04069918506626524 0.8042671226848155 -0.9296547156761688 0.8092178884131545 -0.5805400737776827 -0.18456578368035848 -0.4314773211524823 -0.8967453185997014 0.8407432489373146 0.9477220107203792 -0.15376327775348164 0.32783074267400436 0.4083454806407125 -0.00998495387303655 -0.5089034942951014 0.542413757380374 -0.7428348480576761 0.2395497849724002 -0.31562933595805953 0.5343776931532376 -0.5666178197136496 -0.022411796615439572 0.48391725076069436 -0.4392477992354855 -0.41887801245545275 -0.7470647333824871 -0.43309670904343855 0.5035852583019538 0.7546721147959279 0.7746963418414847 -0.6997586987768973 -0.7433409733790732 0.07674754433475717 -0.1726472359635911 0.3459148163493506 -0.92456689275885 -0.8085117943980586 0.7727160550810368 0.42631511968137037 0.2881303997217395 0.3683085832256989 -0.4058813484361605 0.8324451382422644 -0.9110342301828103 -0.2905170499722094 0.8836716359846053 0.39920866734940197 -0.6312285463896097 0.47632084819370846 -0.9334107842148125 -0.27911844276825293 -0.6083518034287492 -0.05884624828609675 0.8396804853470319 +131 130 -0.588188321128565 -0.49380609702689604 0.614724194749739 0.2669385623904197 -0.6316080989673001 -0.43670321868309125 -0.10757282627407583 0.7495729079334374 0.8517823660930248 -0.7689106027324519 0.3832954811513689 -0.3355695080037344 -0.05687757468466126 -0.9720620584248025 -0.8594138281056312 0.2470186658218465 0.19500205908719903 0.10165612281264558 -0.017974775100276785 -0.24386140500980757 -0.0005566760096400447 0.6060062054487776 -0.6410681600213792 0.5680107906478016 0.4164068594783077 0.1373890064224783 -0.8279712809980588 0.8692620863075453 0.3202291585036239 -0.8077441496099282 0.900379960863658 -0.46913744640673527 -0.28903745909348943 -0.3854839471566194 0.9153785219159074 -0.8844936811850117 0.04367573876011965 -0.22863061839827248 -0.14249811113200606 0.8567226766697547 -0.13576260526519235 0.513157379254394 0.587520683633793 -0.34778735716606457 0.9402890204192769 0.10541870276359111 0.6491478418286529 0.7707418118758429 0.6271354086599639 0.32582738577268944 0.8225694797428487 0.04317705835742758 -0.9556857694406957 -0.10888752959084957 0.8195109183219584 -0.16979210389902288 0.11584552259583547 0.7973941403921312 0.5412930465883898 -0.7221643787382424 -0.42114269321089615 0.33579102213413115 -0.5183710664498016 0.5047980456820134 -0.9204238859287421 0.10980601536814394 0.584828373490645 -0.1326990110214148 0.6067545496194384 -0.802318321815221 -0.958983640137381 -0.8854293395897401 -0.5174819738324055 -0.4511348330287568 0.7430686238109407 0.43999888563219125 -0.8905190602937694 -0.5820771494397741 0.548432748505266 0.47619082513340794 0.8710415760043297 0.11027795388077855 -0.967743832942138 0.6649338525797435 -0.37272870087652277 -0.9671118551236708 0.9417354027783786 -0.3941787956865037 -0.045395803746667296 -0.8741485872803267 0.695141674513692 0.8052010385045327 0.44547969873922444 0.4121441898061011 0.3528188768525622 0.04001554419217257 +131 131 5.637630789442735 5.511899188058274 3.735237561496794 4.2598345788089045 5.680638975024173 4.640341842648288 5.161326282483795 4.239165863710424 5.872092045815851 4.42620899790555 2.950379502132491 3.940249773538018 5.157392498531786 3.3865813587926374 5.160104138186017 5.816780177616428 4.9378775524246645 5.185064244112695 4.033250653654591 4.5918411646946184 4.342397556996948 5.3148984673984465 5.953534332331591 3.129881313266493 4.502905632840435 3.909919301789711 4.67460260283869 4.600816412401846 4.56724118096167 4.209342542347766 4.637381370602403 4.568294890746978 3.7914584282586734 3.2599644145100513 5.364745063008064 4.7218449206073245 2.7851898000372817 3.95391967242578 2.6141336935795376 4.419364285546851 5.792682025958911 5.240036447190619 4.147460041720651 3.9644566038691167 4.877943345123592 4.865260607232091 5.343634102232842 4.670075318952538 3.8241784312293863 3.964063377109727 5.438382541218868 3.6991497569880067 4.644262472678065 3.125095327858421 4.015044552881908 2.5397240257967004 4.362790705836243 6.2262032230636954 5.345005421843838 5.3648873191486395 4.5178422836845264 4.566815112081893 4.178416107049543 3.598579946630448 5.652725281454397 5.067436750718139 3.545610517995166 5.5142746516755485 4.572905762633044 4.165510615166468 5.633447011724449 4.265382470135846 4.820344884962848 3.8714371007724493 4.464680411392094 3.8365992325542173 6.105520168057453 3.6897202581359814 4.717444089633435 4.190603083940246 4.598028822405103 3.5234250065960477 4.83856731158109 3.7190654557219873 5.1290989397763775 5.530910508087351 5.003010274742996 4.6991290949805435 2.542716129140868 4.36734243583528 4.650332975710957 5.238759233540982 4.342832728324618 4.210567046486559 3.817713586051134 3.878565515908152 +131 132 -0.6187443273172892 0.42975607289227646 -0.2507884493894419 -0.1647262415583195 -0.8272680569229962 -0.8090156236517694 0.4295377987702851 0.3963410118576358 -0.5283526972183783 0.9255772349558071 0.06684471238675549 -0.20888818439095647 -0.6092848351569549 -0.19828989898950478 -0.792810166726013 0.7232745799289364 0.4191239490544014 0.8458501696372462 0.6251922752759782 0.39268551686090336 0.7826562268087343 0.7701216961066617 0.08831007499001853 0.16386432055929445 0.6953936062996289 0.48691018342068815 -0.5014312292097458 0.2810028086872376 -0.9352161821599843 0.03937712194185017 -0.09274386358572873 0.22940674984719012 0.11810937773486962 0.16506262037217856 -0.3552706568488706 -0.41923516612217826 -0.02266582132364592 -0.1889450461799902 0.09821109820360041 0.17124929688733315 0.8247334843315031 0.5484646428493669 0.6748979704162135 0.12857551355169283 -0.8763677416601856 0.938475259821635 -0.7922166104934036 -0.5560661073372613 0.30199412397604797 -0.6081367266468989 0.8667254553093531 0.7941162483824129 0.886344491641492 -0.8183869986554304 0.11977283156783702 0.750457925016035 0.36965085470593095 0.853164026285034 0.5543514275837067 0.5797498045585527 0.39782577591681356 -0.2398049956797219 -0.6710715888328618 0.28905808065493854 0.2220342863181295 0.9523915052831198 0.5021898635038395 -0.7773218757452944 0.6571727241085652 -0.35383303681724976 0.37746286484592617 0.7840861717486343 -0.2646789611536571 -0.5045408768796893 0.30353684222633026 -0.5551013061711989 0.6334503025898275 0.4025542993544653 -0.6643988616527075 -0.7625398874483214 0.5312756789530586 0.2675885586987179 0.08069560182696112 0.18105066107646794 -0.541722924945242 0.2011368681591268 -0.5959231804801226 -0.18917976185489938 0.4528675974483811 0.5001278910068954 0.16451802359873202 0.25593904008678536 0.6804540997197899 0.39450373637840785 -0.30983319038110313 -0.5738546133155167 +131 150 0.6833956390276823 0.25988341648841895 0.36388429171565684 -0.9932931693959259 0.46673648686047486 0.3110259442953931 -0.8567588173119789 0.37422051629107833 0.6315624853056343 0.2997804714195538 0.6240299630748014 0.5536599265207269 0.770701140581904 -0.299346915056963 0.7401517542300979 -0.8490425406031699 -0.8449952649421957 -0.04874216012839372 0.7738261115135652 -0.8094132704831973 -0.6322127422458561 -0.9158091704199449 -0.935084149708902 -0.759790300498594 0.07819201591743297 -0.8465537001675756 0.8378978181699717 -0.4365074229712518 0.7192178692939979 -0.2794048128073823 -0.6052909030336615 -0.7775057250805046 -0.38262793326091793 0.5541052026604583 0.4500234284379028 0.051131662180810444 0.7899326226573171 -0.7243987254458726 -0.09800606332432382 0.06383164509068928 0.5974720602917927 -0.1077659666268358 0.08697557613820828 0.6213902375856606 0.3488048886074413 0.19328052229856074 0.5405078233367322 0.08987423541442907 0.9738776408985557 0.9290784212325462 0.17683544387970018 -0.013600295112291105 -0.3788929675528896 -0.039774767855617954 0.43912206981356827 0.20541581095452055 -0.4977892223029161 0.8214804172669299 -0.8973667763150537 0.7252093316474089 0.9388564281038168 -0.9485957484995091 0.9088613038579216 0.8916085402068088 -0.7267555281638749 0.8622544523852345 0.636857057072151 -0.9147120965429152 0.1361304053793857 0.004082234622231118 0.6913554657686376 -0.36743843135099064 -0.39035453796711206 0.3769369470038768 0.32128262500888716 -0.25355856927135223 -0.9194666003934999 0.2005420794216135 -0.6980114033179703 -0.33096332939101725 -0.6839679664363605 0.7397197973087779 -0.7283392954117152 0.2726883687408632 -0.7060653526858922 -0.8342445181949005 0.6987955290559165 -0.08180745962644886 0.41371309499727493 0.8920917590338617 0.9795768850336819 -0.26808686985858476 -0.6884235938271703 -0.7901974288931128 0.9582034775620842 -0.36087859433739666 +131 151 -0.7219701900186304 -0.9942297853957951 -0.14348011952574202 -0.014714452258154154 -0.286833737053374 -0.8225512658319338 0.32813516160085876 -0.5749303108124444 -0.6973056750562519 -0.6863949994817617 -0.14676214944333643 -0.7604644447810209 0.6154545868229462 0.40736468495663014 -0.03713156780261273 0.5022972788998457 0.8222377441744471 -0.8957700507875868 -0.7145998262496376 -0.6897832827464225 0.37569172428873876 0.4065690661386221 0.9256199521246 0.10500772980453776 0.13984307074889268 -0.5976915206135842 0.9014406834172 -0.23488798877671035 0.04419922050917369 -0.8056357059207373 0.28186539582866055 -0.01720953975299966 -0.51375964405821 -0.49098344561341123 -0.33921282496145166 0.5315618465153897 -0.0313531634620805 -0.5508266838636879 0.24218049149898757 -0.007638166518839196 -0.14127369836019632 -0.8126116468346201 -0.5554622772973348 0.22736806270798415 0.6011848291885167 -0.7223060319324301 -0.9481763864517896 -0.30272770724684617 -0.2981256923316755 0.2929283447176745 -0.5697130047343448 -0.8123970385578576 0.06157745140863158 -0.4432345607382815 -0.07187992147950806 0.1016387298475323 0.2826706824623013 -0.5425081637481688 0.12040561590795429 -0.7456892865859264 0.5476832706844268 -0.3173305954372567 -0.07084347816356518 0.09324428964030895 -0.259980956625661 0.2622100905069542 0.18726057712319788 -0.5462763016534564 0.4145500056266691 0.5372918856538973 -0.6594341422466796 -0.10089829936337447 0.9856668227459682 0.6666361201920417 0.32565162896523425 -0.30375300951594597 0.7834090108335638 0.7118552065349224 0.8287417101018719 -0.15676957915734713 -0.4764718361683469 -0.7407088505122468 -0.08256160352535225 0.39476574202346293 -0.7641535431572692 0.6589840924455028 -0.8002732073935577 -0.8713222759026871 0.4080159068387894 0.5360174492015195 -0.25527264056023014 -0.81696661361115 -0.16672511041865623 -0.20154599553208796 -0.019616142856199836 -0.7294956132280155 +131 152 -0.6710404912443155 0.6336921139842657 -0.13936855430794637 -0.7801249085551478 0.7439135682282361 -0.21681477168239827 -0.7459652983066554 0.80357941048781 0.8690120719404535 0.3561615926001387 0.1698799605854726 -0.3090404063893686 -0.3170979871075279 0.22865722311561365 0.04146807692085974 -0.9967889449939584 -0.27836447126282726 -0.4224204644620586 0.13196145574080442 0.7112567466185633 -0.22314807409187987 0.7851898524090068 0.7968644865933432 -0.2161871138067224 0.03456145115249565 -0.12905685659228627 0.2675809329114882 -0.7962033769998371 0.5078746333368358 0.9447634800616895 0.1691984267917923 0.6941048506985419 -0.12622272643647148 -0.26648094524074417 -0.482403278532092 0.6989572901205223 -0.3685404352339672 -0.0654144239067651 -0.9311233062623492 -0.8743738191300157 -0.7347084532690231 0.6897180992678662 0.20423823254788553 0.5355655274745976 -0.39660502195791625 -0.77031580209561 0.5857504612755018 -0.9419323699144986 0.6830708079871766 0.312679430799256 -0.13291189194394804 -0.33223013596227724 0.7953446178016934 -0.40797539606392164 -0.13557313960933803 0.022964598825576 0.9629678359568372 -0.7406553013809221 -0.08113044586826401 0.9044539965616971 0.9199048883728809 -0.38276604834205474 -0.19870937729136595 -0.6705439644539768 0.9204445184457137 -0.038546423750458025 0.5236819331403675 0.8328790651936113 -0.8252229477587907 0.17686071096906408 -0.996180217997503 0.8881623786810908 -0.11837667922661721 -0.34497261624418596 0.8587465728648234 -0.42564879572288916 0.46256758536127185 -0.31857449240515745 0.5041624069518562 -0.2857577217570495 0.18322465857119807 0.09127586394852027 0.8496984909482688 0.42915604269023033 0.6157525157042489 -0.4007783031179599 -0.6501554217213932 0.16120891579415764 -0.20121718503698127 0.02074330447848416 -0.682643848797591 -0.6213260411095012 -0.6565378991813571 -0.4721211921462778 0.3337868578549621 -0.18496104459601104 +132 111 -0.9446431609008061 0.699925357032972 0.7463096793056443 0.0318229116564841 0.7887141003666576 0.6676198489326315 -0.9159343059988365 0.23964432857444096 -0.06552847119272132 0.5098600483691174 0.9575154521971727 0.24602226570387464 0.5963380693058906 -0.5262576282929692 -0.3240018342682107 0.2720511657950162 0.6101360989922888 0.8065788176212407 0.8598050965369994 0.8480518869743239 0.4370722810999217 -0.2671041120270916 -0.5521479429611393 0.652907531678264 0.6784269574065118 0.7111722109688148 -0.14022457214708428 0.4973587192264921 0.6694875360883403 -0.9723151298876878 -0.8299697488902713 0.49799427068478397 0.292645483403875 -0.027941185964351467 -0.22428040264085136 -0.7364238384814841 -0.0344724412629438 0.857934753276421 0.6890311135197031 -0.9381604557800798 0.4955376671608176 0.5420300086040231 -0.32601381895052506 0.887934495839509 0.22848260147077815 -0.8568771368077859 -0.03735649262856122 0.42041540663036114 -0.209804905731092 -0.005845771798728361 -0.12400296661342836 -0.15033142815932643 0.22621033691530235 0.013904194601952247 -0.9856837826147828 0.38906716808179587 -0.3761674050545021 0.4581911435338315 -0.756026794049528 0.4390090966553917 -0.28899260219178546 -0.1770417428762443 -0.9564717229129205 -0.5478804716913701 -0.09938043183400636 0.5199286084740118 0.13256273179533173 -0.7504750562511846 -0.9519111117866002 -0.905274373116548 -0.36814427312740583 0.34455092811494525 -0.11135828392439096 0.91790453337839 -0.8673867510825495 0.5874759205616777 0.25228721437392854 -0.38218545593429276 0.587595415858895 -0.597451297772355 0.05547056984236565 -0.9545124287213274 0.41273570806917537 -0.46446919414824306 -0.5363877969483888 -0.9757790844057006 0.9844804149114892 -0.8925051767977008 0.09619740423608958 0.6265180075075658 -0.13459307965313738 -0.9899066642000758 -0.23955869407051633 0.02691775970077548 0.5872410070063414 0.8759230097642954 +132 112 0.912955982954375 -0.7005217450507766 0.06034367346404679 0.21319100914373013 -0.871574970870356 0.9400961655016544 0.4639619733112754 0.09657764698806592 -0.29992744482417977 -0.39470243610970956 -0.34543479195439364 0.3659865391493671 0.8752451641639141 0.811080688613901 -0.34218484849859854 0.9022395746036949 -0.895297077015567 0.13465851528372785 0.30923824179876713 0.3691347079572036 0.9383798751756969 -0.24353858675903872 0.42018354823011306 -0.8690753861350042 0.46909528532092915 -0.261083190078774 -0.1538343139102949 0.6588199623410222 0.2780012942792649 -0.8531759164782067 0.9045953902924146 0.8595106602061227 0.48075034609369394 -0.39090174408711453 -0.937064064401826 0.4819268142580815 0.8858068309864384 0.8668592251822602 -0.23403542219882967 -0.7739346026703935 -0.5451119319140831 0.3189361215011517 -0.5901338888623673 -0.10487035389693156 -0.47296780204236577 0.3600509727864327 -0.5479103095474549 0.31231987481367773 0.3929691708582854 -0.6809567158336873 -0.6973769582197833 -0.7474374419503407 -0.033279740924715195 -0.22699323800667948 0.06538060438759463 -0.7200498914532381 -0.49768993962347263 -0.9627668770302527 -0.7882795439607906 0.9845159731122535 0.5520390317356461 0.40977681704390023 0.0415051759606182 -0.2586580514102492 0.42226233951624126 -0.3255404338033048 0.6532123545229029 -0.9099953761739374 -0.3357965005679078 -0.5045185508827428 -0.8234367506694455 0.9197244217829195 0.9680161872158031 -0.5115085303205471 -0.055243384095470915 0.21313080416210295 -0.14853840792022743 -0.6808069878782337 0.42963754338952453 0.2937270496008271 0.9716850385586799 0.24738023931191644 0.6348914110252659 -0.48426952015236235 -0.3279757824328111 -0.7106127504659212 -0.7212213000383152 -0.945770032153354 0.9232914136339334 -0.43081159718600226 -0.4458670634961521 0.9198414573622473 -0.29965345013226496 0.9812028530937855 0.8130121069040435 0.5153971286869441 +132 113 0.7036629114697104 0.6768992298475462 -0.44737374515485007 -0.33741902143008695 -0.38079241371604944 -0.14495190331391017 -0.5809400976222536 -0.21428396217849888 -0.8454183103598485 -0.8049701066917032 0.2887172905413835 -0.9302554066191135 -0.09275844770637365 -0.4233533666995961 0.32952469038847454 -0.4451372639351656 0.05187437705483533 0.5083668053987498 0.24417735394122242 0.8380230456507838 0.41454999826620975 0.13309352891056392 0.1090286092225563 0.6334788196322816 -0.6653541751272893 -0.43073066069693544 0.7571999376992562 -0.8438046373483925 -0.7892087363633877 -0.3592723230547208 0.013877460825617804 -0.5544943259827151 -0.6171728980306368 0.5385896840339977 -0.22979498155422107 -0.2645696306140024 -0.19095318734972766 0.7339462787859294 0.5911598375171536 0.678973635350312 0.7928498572595628 -0.9152432675316402 -0.5710342646159077 -0.5055052903302488 -0.05713217254923908 -0.825631534884187 -0.9550398751470948 0.4974754375257602 -0.6301773960712973 0.8573035297134552 -0.5241289734419543 -0.4071462835922308 0.714538837019578 -0.7893886252005113 -0.7983847226915275 -0.6268982739211977 0.37440482005726783 -0.8445269778564761 -0.6082543255538786 -0.6567333419276655 -0.6500701706484371 -0.8473282156952056 -0.056871604158965416 -0.42781717473942993 -0.9140225199228948 0.6976530074444147 -0.027813402692159706 -0.3351968832617953 0.6368834197044939 0.8129681048506434 -0.18727756476978064 0.1072029922032176 0.9403010867322157 -0.20957875461137654 -0.5726064319544402 0.4127001645066537 0.5698618473815305 -0.42913806206526117 -0.3504154723337436 -0.976352033229668 0.1441302387728587 0.30841775612027766 0.7272181047559949 -0.6723904176445634 -0.37018255720544757 0.5769694939604069 -0.7287413788829475 0.24079380133989248 -0.17121375339000444 0.10333076730195101 -0.09405014918955645 -0.7349118254953753 -0.4188359674424986 0.025682002882086552 0.5828043728987091 -0.22970800276755998 +132 131 -0.6187443273172892 0.42975607289227646 -0.2507884493894419 -0.1647262415583195 -0.8272680569229962 -0.8090156236517694 0.4295377987702851 0.3963410118576358 -0.5283526972183783 0.9255772349558071 0.06684471238675549 -0.20888818439095647 -0.6092848351569549 -0.19828989898950478 -0.792810166726013 0.7232745799289364 0.4191239490544014 0.8458501696372462 0.6251922752759782 0.39268551686090336 0.7826562268087343 0.7701216961066617 0.08831007499001853 0.16386432055929445 0.6953936062996289 0.48691018342068815 -0.5014312292097458 0.2810028086872376 -0.9352161821599843 0.03937712194185017 -0.09274386358572873 0.22940674984719012 0.11810937773486962 0.16506262037217856 -0.3552706568488706 -0.41923516612217826 -0.02266582132364592 -0.1889450461799902 0.09821109820360041 0.17124929688733315 0.8247334843315031 0.5484646428493669 0.6748979704162135 0.12857551355169283 -0.8763677416601856 0.938475259821635 -0.7922166104934036 -0.5560661073372613 0.30199412397604797 -0.6081367266468989 0.8667254553093531 0.7941162483824129 0.886344491641492 -0.8183869986554304 0.11977283156783702 0.750457925016035 0.36965085470593095 0.853164026285034 0.5543514275837067 0.5797498045585527 0.39782577591681356 -0.2398049956797219 -0.6710715888328618 0.28905808065493854 0.2220342863181295 0.9523915052831198 0.5021898635038395 -0.7773218757452944 0.6571727241085652 -0.35383303681724976 0.37746286484592617 0.7840861717486343 -0.2646789611536571 -0.5045408768796893 0.30353684222633026 -0.5551013061711989 0.6334503025898275 0.4025542993544653 -0.6643988616527075 -0.7625398874483214 0.5312756789530586 0.2675885586987179 0.08069560182696112 0.18105066107646794 -0.541722924945242 0.2011368681591268 -0.5959231804801226 -0.18917976185489938 0.4528675974483811 0.5001278910068954 0.16451802359873202 0.25593904008678536 0.6804540997197899 0.39450373637840785 -0.30983319038110313 -0.5738546133155167 +132 132 5.526899464842446 4.20005963715175 3.293459626429796 2.7766338699251047 6.033564039679654 5.034301165740189 4.947022211825072 3.823481589182384 3.7483839878512315 4.615449849961834 3.4900192662594263 3.8200418561729794 3.4382083418471283 4.752023662152412 4.107103340311827 4.37141875958424 2.5719240035233284 4.593672817960879 3.8404321246441597 3.9128406404632434 4.793446460701686 4.49423346792565 4.377058070337358 5.081086283437882 5.549541457840236 5.794910132995367 3.9623876818733574 4.646770567493918 6.415430134492886 3.6000165609083457 4.302720297991538 4.770222543795757 3.1812098017580475 2.951706706443011 3.8309271213503617 4.015163450664457 4.2479366682098325 5.586872154566486 4.274672419732018 4.80730342418812 5.222622014746561 4.567185618294075 5.24814421541721 4.59426555712463 4.899650844627754 4.926275365493246 6.0384520948391645 4.207607410012218 4.4654681346433875 4.71510888948336 5.378235244776795 4.590879474873692 4.53159801152624 4.086470885471851 4.869782105818706 4.654049311270594 3.7598385975653876 5.044464288514259 5.951453691441401 5.235407698579319 3.983327358286281 4.421969942126637 4.59751818474816 4.823044554318399 5.597389561870189 5.081921475496782 3.624172878182458 5.500172906544338 5.950124931447894 6.016302531456732 4.612175159504278 5.337193876568722 5.007946385322947 5.010043671127427 4.0426192538521155 4.347344298003343 3.506246270888905 4.286919989355083 3.435588179371952 5.559259237385509 4.67978341178286 3.151202935835337 3.121035970600354 4.1565355815413705 4.2927246113380155 4.539794537058315 6.158592727835334 3.212059063560239 4.561496443470659 4.127937752863167 3.326563954034854 5.763006481955731 3.647899163308396 4.107948171951477 5.095733175053513 3.9691984312715 +132 133 -0.06863185486775092 0.3505459803570139 0.1585338068950719 -0.6318660005326728 -0.7486796019873414 0.7503712657502049 -0.9569148064646704 -0.7042403956508767 0.4728019118730593 0.901254081647441 -0.2738388431196632 -0.08418540827821674 0.19768753381988802 -0.33467978756481687 -0.3723070773048498 0.5242050969544765 0.013487855360776901 0.15749337797919427 -0.5872699335957772 -0.7694176831956558 0.02912690471714785 0.7934503594792095 0.6654036198316753 -0.88439705298143 -0.2370508455097604 0.32409315222230717 0.37113083536558866 -0.40933972757219683 -0.8258870484225709 -0.6258166144393733 -0.7872706480198093 -0.8415691268754415 0.2697879409745114 0.8832617527291031 -0.25770343739818236 -0.48321341194822987 -0.5831429470160931 -0.9979237319888301 -0.13470807653329686 -0.43007553357890216 -0.4123225697812951 -0.5276762029113082 0.6239097220057286 -0.39512269203402295 -0.15433130719926846 0.8910948788715927 -0.9697615066517133 -0.7530663615457558 -0.9222556596775062 -0.19119133353668283 -0.7813965552416331 0.6113057493615202 -0.0313306203593835 -0.24980933888931078 -0.651352866541586 -0.7583691128636398 -0.3161879642817389 -0.3548675477489125 -0.7385977163613391 -0.45026538394273685 -0.030288118377549633 0.2264574083055073 0.8959686552423041 0.44636529154627946 -0.5077683345710045 0.5507354173766608 -0.13428997198143988 0.8341130741496803 -0.41523426626940196 0.5555502267849499 -0.9409668178037163 0.4504402796397786 0.47324395237051053 -0.48343715322559433 -0.4523514483632529 0.3780608148635243 -0.23012416592974483 0.26473421726775803 -0.025837971046076325 -0.868776922710208 -0.5993355393863931 -0.1282096215951991 -0.04756169304714697 -0.6419274756606013 0.468642766888991 -0.12310674436078917 0.8453750532887692 0.04301090344839076 0.4148997245342534 0.30340253074776324 0.731624046397283 0.9129788128254197 -0.6001271856664485 -0.9448693537151249 0.7965597364608674 -0.9061193136794119 +132 151 0.39717997897383617 -0.14727345909758038 -0.221288547604922 0.07988522285676414 0.9977603126152539 0.4047180342655605 0.8071216761848825 -0.9303631126870515 -0.1560729571723316 -0.6819153344439703 0.3200068728590033 0.6759732336026469 -0.12732949791898873 0.633188116598367 0.6697140856532433 -0.24824640836128742 0.10848207411734845 0.41151514677398926 -0.1717655766592867 0.28387362850250564 -0.12489326557904024 0.7744063522570366 0.7419879669105569 0.9649205881962324 0.719120315221339 0.9087976385664973 0.15280780935911809 -0.41681060576864093 -0.5565341388837066 0.3996577159409638 -0.48160239810027394 -0.08535365659974037 -0.09535088981432316 0.40082524763565175 -0.20323237292396001 0.504630060116291 -0.38584871698165757 0.8480684386459401 0.3434230815989867 -0.5415639742960865 0.6544532218858383 -0.05174460412077919 -0.5219711178547752 0.9909265455995881 0.9410144858348573 0.029179604685777294 0.8367226926403892 -0.10582990747087417 -0.574995388082723 0.871206923826535 0.8738050534482049 0.6731088265625926 -0.7075175478413636 0.5929744078714307 0.23534913100478194 -0.016371322663822907 -0.2962191440820301 -0.09466512416519701 0.709496827543576 0.9683066594111491 -0.4513368325812468 0.586154207991072 0.6181303345834606 0.5145377688561816 -0.5740869148824201 -0.17587755866769195 -0.15785348981430825 -0.9410007418263646 -0.9250666335111448 -0.9115202167276173 -0.4595477625594675 -0.4841798322478903 0.2512115222540112 -0.3413497616034775 0.13279462998330716 -0.5509002575292712 -0.9051413008228437 -0.21653230393471334 0.011476705919946317 -0.8223236595883183 -0.396574634544006 0.01233184586226832 -0.0615852162974202 -0.24400773422251643 -0.6538334522132234 0.5903735597619406 0.8125824130736898 -0.07739805845810532 0.7798085730430131 0.711124299758624 -0.16417442533225168 0.5462534224279372 0.03969799515614558 0.17367930036654577 -0.8286928215769593 -0.5374495963446724 +132 152 -0.9021003488763073 -0.8616179991134811 -0.4250581451372337 -0.13903176197864187 -0.20756060709201662 -0.31673490592735565 -0.5598978847573854 -0.30813375617522 0.40136040675584006 -0.05364695027175781 -0.5112244452738497 0.8732017427136813 0.7391280650762511 -0.5617591071642354 0.451427911272543 -0.06001721774701818 -0.15934217779074622 0.47070854915765703 0.04428015777415584 0.2600893955680983 0.9203847064989785 0.7743939442586047 0.6698806353286781 0.7702362535607088 -0.9450190194146262 0.9661641543684929 0.7153345242033575 0.763595394350558 0.79874668566502 -0.11780472341365433 0.8209251352729527 -0.5022854541244302 -0.6589331000980287 0.12349420946504841 -0.3893932100460571 -0.19732462386191352 -0.557392724252668 -0.2857595484972222 0.671585755517931 -0.5747256905944178 0.46844250530032205 0.6586989307889579 -0.9385102577864661 -0.39156965641616925 -0.7427173706814951 0.34657553853110845 -0.6438460695379642 -0.5480176019425251 -0.24897827568399888 -0.4294789302669737 -0.32637762548211846 -0.3537990801370483 -0.7183816064690896 0.7429122847401473 0.8276077128147639 -0.014415185045497658 0.3742520953598045 -0.6083083736904933 -0.5465359583299549 -0.46381714087375414 0.8828426244979002 -0.597802638329791 -0.8385252862063362 0.8095962543905726 -0.9223173662194246 0.4182641914239813 -0.7754796962248462 0.141398306545218 -0.6326486434032719 0.24410612265580056 -0.4869844934396863 0.4316440641829007 -0.6059526845772172 -0.8398549862535756 0.23034930814771082 -0.4343809133315262 0.0027662283227680717 0.5539063287993633 0.3289230210426508 -0.34491562007538623 0.449499679087223 0.8578408921673242 0.8367944262008165 -0.4719910472834441 -0.2271217213643244 0.7272768972568029 0.936145481836129 -0.14905988691795757 0.07331221303779234 0.5085388522240444 -0.4260951709094387 0.9053427391154973 0.06854888026274497 -0.43652740884191266 0.5805835825155059 0.061777964964817134 +132 153 -0.5888520919279288 0.30010977917868464 0.9174326934003534 -0.32198253244403463 0.5494802676780841 -0.6767225169512505 0.07031127564936823 0.6080040706666265 0.20028553731676135 -0.1204047366661607 0.08778545295682583 -0.010786531195245308 -0.04185932871268028 -0.5213382549329499 0.5987134091526876 -0.2643612919758347 -0.2068808926127037 -0.6168607592739526 0.813525219339738 0.02274916266046123 -0.8469844993476223 0.07925232295606577 -0.8489534462024941 0.04446559702956798 0.8469568325977448 -0.8660495477240258 0.3476957287710072 0.24298409878644445 0.5823564662036327 -0.11225994151821772 0.31401862065760233 0.6252599406676826 0.3792763488923214 0.38442649217787705 -0.9509458355806284 0.44315078680436404 0.683482610721674 0.02487399999592932 -0.8194804616463063 0.09028960293695976 -0.3475499342448791 0.3491283132244991 -0.669589465661059 -0.7899526979634921 0.920264249315744 -0.04283308332264002 0.44804697781644864 0.9053797466078903 0.7417047351662056 -0.08298774838240308 -0.5944482961038637 -0.04764160509580195 -0.4489507301985316 0.43950719368545643 -0.8409532021305353 0.6928602958726073 -0.3811006578342948 -0.751516908002932 -0.899598058680956 0.17987176184835385 0.4325548100021077 0.6940147962924612 0.07497305906706675 0.6475968706978017 -0.9918245274375901 0.6983582087017741 -0.6717347130853113 0.8038450097641416 0.7972512735584047 0.9657614453545069 0.25959758945476197 -0.873072342776303 0.8224589882625026 -0.9800145047592657 -0.9447669834799821 -0.2922458029069024 -0.18892004341257995 0.6541137327026221 0.45864065577875146 -0.5668330886771893 0.6710485648738393 -0.33871403677648604 0.07765257949159898 -0.3454443016490647 -0.5921745823425217 -0.30111370970748363 0.3722735568075677 0.3013404962731794 0.6962282144137171 0.8683244317114371 -0.19902643456190838 0.45419910372965533 -0.9528673098210501 0.7409953807191503 -0.3628739528788414 0.2388936206263652 +133 112 -0.7925738138674558 -0.31901127277318 0.9230095056586003 -0.4729762215587532 0.9822231632667544 -0.27812572552117243 -0.5569995351405856 0.10699379165726963 -0.047259212267191986 -0.9278940811185172 0.2118318279409772 0.30025563659992205 -0.7797609977433146 0.8282927658879178 -0.22354574976014985 -0.20405658570491214 0.5313654810946298 -0.578386898358419 0.7851936671697404 -0.6163162001418538 -0.5742556191015213 -0.7460970739327764 0.29895261932603057 0.010597633727045253 -0.2577574703656267 0.8017705695622734 -0.7005442332699015 -0.10131958274675035 -0.923202063266378 -0.4182557149311035 -0.2887309008547254 0.5773704997452604 -0.7185900575676039 0.7956826966144039 0.5786349185639894 0.9544838850469355 -0.6244758573925704 -0.24828939015571416 0.763001176059874 0.9970713893113186 -0.5841685466481081 -0.33011751087879393 -0.552447796375362 -0.5512169245719776 -0.15967808923839044 -0.026869149914872548 0.17536788070225184 -0.22202626726095565 0.3071909052060895 0.9216906490944374 0.11251405089593525 0.833725804885618 -0.4095226279838855 0.8640007737733648 0.8144763218475501 0.30972532269281094 0.46296948174834585 -0.22921862620739564 -0.2405046844910208 -0.6954628557274416 -0.6750227875280632 -0.869007215274312 -0.21489862762805134 -0.6299753401829193 -0.6198785086886873 -0.7685808278263546 0.5877853882363888 0.1623286476181658 0.3402466824960815 0.22403088378188074 0.9653200713696712 0.2389880974230818 -0.17000912276781754 0.8781738509533477 0.8332722196412845 -0.8629517258462851 -0.4326235359908841 0.27124670350174407 -0.06210948121142601 0.46452249264606604 -0.823224528919186 0.35425253218841 0.6346542218209745 0.7129349033623726 0.9350653183355304 -0.7233852317898075 -0.9929442073651149 0.2624427008338486 -0.16966822301296203 -0.09404215494500168 0.32135208170673346 -0.9323845769220227 -0.7293100843065776 -0.8224218068673395 -0.4490777984854608 0.56966654675408 +133 113 0.16760669357506108 -0.735804839519469 0.9126040192698648 -0.8545442392397993 -0.34084172830075143 0.6665984783775296 -0.32607824739098357 -0.02432368959529274 -0.6654234967023465 -0.489701005388427 -0.3332315602260172 0.6970101428658624 -0.27261023896384406 -0.6904039644417477 -0.38431547891526385 -0.27770487105638364 -0.7725276826266165 -0.7120936666206574 -0.8446652176392038 -0.8758446566318983 0.937910081663563 0.9232993269358831 -0.22471075492949955 -0.6108693347333429 0.4622874499822187 -0.4258393175962363 0.9546468998426392 -0.6772146632322444 0.28671696043447326 -0.08783378962225541 0.9086640989588535 -0.25134276659552945 0.6215095099760335 0.9583181936660794 -0.552601405580138 0.9508778817707859 -0.463699011790075 0.2609689823657091 -0.779414717296866 0.18758406030369335 0.58877838656613 0.6807907142488245 0.3566985178752935 0.87257160291902 -0.3627398257691685 0.8126048861956376 -0.4490907975611875 0.3748448094578509 -0.566799175618282 0.03567591695427019 0.24965112188106908 0.5033572081742903 0.6948323565690415 0.1667485148095027 -0.03745697175911622 0.6384544335053604 0.7749214499758814 -0.06737736411185802 0.9695789929148844 -0.20608565157043834 -0.6445820227908257 -0.7708253003059511 -0.8022761910190412 -0.2657412302607445 -0.6090115618702967 -0.4964196823741891 -0.9271523171783012 -0.8314730137310296 -0.6744804278765462 0.47973291617082814 0.35410627802198147 -0.5905867747849398 -0.9570783131879457 0.3612556331235093 0.747658077590287 -0.7849544588780561 0.6329312808435632 -0.7461419546159083 0.5435959977075762 0.7636758938335049 -0.2926972067987663 -0.4679052277245199 -0.39225805708240524 0.9334500881506809 -0.2143869980043307 0.7585390523003963 0.1521649614050462 0.5785170859331301 0.8357713246477638 0.27883900284206975 -0.1779040986647049 0.5132476112063997 0.6503403696130827 -0.01574800630871165 -0.23828090910395816 -0.08639546721984703 +133 114 -0.5214916739835194 -0.8768182397430766 -0.8258244988904586 0.8410683663045506 -0.1305438131041683 0.5245932423896293 0.6499229688638606 -0.03233568283160526 0.9819354242627891 0.8293403473383971 -0.6991875465009976 0.9823701137408931 0.7741338529435349 0.8371742553278161 0.4051231011783243 -0.49637884388991504 0.547513235161923 -0.31328386509919826 -0.6140161262929873 0.9405260536281757 0.46577043844307475 0.5366427041102972 -0.14508272173896275 -0.4298746157541413 -0.6572016152934779 0.46454728027428693 -0.7371386671397717 -0.6498197901676905 0.06095554745828058 -0.906496892814723 0.2970041803441861 0.5765821930148065 0.11412329360247542 0.0638798095182962 0.013096805567399894 0.7505067858707473 -0.8149846852864444 0.15313032447242114 0.6882337101505154 0.18396296914403099 -0.1707988185680187 0.13230701911559017 -0.4158455505386498 0.972333178510902 0.1871858017660577 -0.7524964094412105 -0.9875283155079586 -0.1709765241567769 -0.5031585372523637 0.46766787330624227 0.8211723016974675 -0.6656607942124535 -0.9922692995166293 0.5895463327270203 -0.18330486374153998 0.5974909657631982 0.929732070302073 0.06982752119294133 -0.8952360413628402 0.8277554794433102 -0.6498737811095077 0.5474999230666033 -0.17054576951101907 0.9297537616141158 0.9499775115591027 -0.8169142172530639 -0.8983432925814827 0.9916353258611401 -0.47345429742392886 -0.8259843190690455 -0.478391491387288 0.5709839404930959 0.6044933836500466 0.788819686755482 0.715815371219805 0.22802966737891905 0.10670174240275565 0.36638062505873914 0.5271865415343482 -0.3718052939683061 -0.03329758361742208 -0.4114154414450777 -0.2119362062150767 -0.7283331303903648 -0.6826365370813625 -0.49133861787366717 -0.37584742925637427 -0.47147509470249926 0.6463604021504732 -0.777708587470076 0.6124593045785562 0.5223894777571103 0.9420746454798794 -0.8108142500544149 0.936002070859375 -0.931444572184966 +133 132 -0.06863185486775092 0.3505459803570139 0.1585338068950719 -0.6318660005326728 -0.7486796019873414 0.7503712657502049 -0.9569148064646704 -0.7042403956508767 0.4728019118730593 0.901254081647441 -0.2738388431196632 -0.08418540827821674 0.19768753381988802 -0.33467978756481687 -0.3723070773048498 0.5242050969544765 0.013487855360776901 0.15749337797919427 -0.5872699335957772 -0.7694176831956558 0.02912690471714785 0.7934503594792095 0.6654036198316753 -0.88439705298143 -0.2370508455097604 0.32409315222230717 0.37113083536558866 -0.40933972757219683 -0.8258870484225709 -0.6258166144393733 -0.7872706480198093 -0.8415691268754415 0.2697879409745114 0.8832617527291031 -0.25770343739818236 -0.48321341194822987 -0.5831429470160931 -0.9979237319888301 -0.13470807653329686 -0.43007553357890216 -0.4123225697812951 -0.5276762029113082 0.6239097220057286 -0.39512269203402295 -0.15433130719926846 0.8910948788715927 -0.9697615066517133 -0.7530663615457558 -0.9222556596775062 -0.19119133353668283 -0.7813965552416331 0.6113057493615202 -0.0313306203593835 -0.24980933888931078 -0.651352866541586 -0.7583691128636398 -0.3161879642817389 -0.3548675477489125 -0.7385977163613391 -0.45026538394273685 -0.030288118377549633 0.2264574083055073 0.8959686552423041 0.44636529154627946 -0.5077683345710045 0.5507354173766608 -0.13428997198143988 0.8341130741496803 -0.41523426626940196 0.5555502267849499 -0.9409668178037163 0.4504402796397786 0.47324395237051053 -0.48343715322559433 -0.4523514483632529 0.3780608148635243 -0.23012416592974483 0.26473421726775803 -0.025837971046076325 -0.868776922710208 -0.5993355393863931 -0.1282096215951991 -0.04756169304714697 -0.6419274756606013 0.468642766888991 -0.12310674436078917 0.8453750532887692 0.04301090344839076 0.4148997245342534 0.30340253074776324 0.731624046397283 0.9129788128254197 -0.6001271856664485 -0.9448693537151249 0.7965597364608674 -0.9061193136794119 +133 133 4.399700949634501 3.93703249788913 4.04498500385097 4.680809092352677 4.655856361943265 3.8548857527588107 5.7316061643940435 3.6019290751884565 4.812136119526386 4.806414458413104 3.3789028006353155 4.519298144169817 3.7906040547459456 5.553842272751253 4.682936952719233 4.787453928318684 5.788688522681841 3.981593626173602 5.342399439990601 5.9848222692664255 5.409118828856991 5.891678367672705 3.435460050055686 5.377269594724286 4.193446945617335 5.649198843842317 5.358651657621007 4.4902099137842635 5.959026107002154 5.349220390728914 4.553500360508714 3.795627000901767 4.564145322795846 4.328218013579193 3.915473588184783 5.93199393205432 5.682296970177784 3.2041638201941858 5.468785437250319 4.148744738737438 4.77062180576585 4.732060781449539 4.452449081565394 5.183735411776896 3.60332580462273 5.583745381989063 6.298497438250402 3.5087716619884914 5.842058763701023 3.4173841544928667 4.833230844068832 5.912584143174916 3.8771805005816793 4.804634028458789 3.3659319168923245 4.795636790625842 3.747665642372686 3.1493440301207314 7.141289575794667 4.2414053725451435 4.532111525936139 4.749206300032617 5.013260626701099 3.6038898222857725 5.529648602047711 4.2454773841213225 6.084874926116751 5.2418744551037 3.4966577936088385 4.252586669755301 4.764933991464827 4.352712178330142 5.143274245597728 5.297701524023399 5.5054182181109095 4.467816780995186 3.442109919868871 3.8313919876704237 3.5875079414902373 5.058491340826941 3.9388634923647228 3.817953259255722 2.9349913969347674 5.765743722048924 5.726478309891364 5.5074399813355726 4.680664060666616 5.21151004522612 4.117477994711889 4.174176900299062 4.707123712282678 4.19928978089798 6.583595019576039 3.9974153113101796 4.787482910955044 5.79957774128552 +133 134 0.4301460424347092 -0.6559759981276045 -0.31202878500385633 -0.0020291644338161774 -0.7643465392888762 -0.6668180316202807 -0.7582100031110168 0.5480184378310593 -0.9259018738405451 0.2529684117461166 0.0409060022116805 -0.802782599219845 0.020837104914068316 0.08647529720629499 0.3636902576713008 -0.4829234146181285 -0.975105457163469 -0.08303164168804322 -0.6470212488246023 0.5896208201635105 -0.47920084414269803 0.7009815111705784 -0.9244778135557974 -0.8859591642160833 -0.06429496608950691 0.7409669225380595 -0.9869883175788223 0.9945757752551876 0.917936617505041 0.6425273764244173 -0.4179509742837413 -0.1850564952555569 0.9376396364560107 -0.4297337840906128 0.8249571302425691 0.5409461499348611 -0.6849236458334864 -0.015623210204425808 -0.5406051869628496 -0.24541946294077932 0.9924130025102365 0.9278521670450042 0.005551576411054748 0.27299040934235275 0.1895262496793335 0.32759897997608745 -0.7389440859574892 -0.44463692880276784 0.1858246708243778 -0.06283110038691642 0.30321096309939044 -0.4060186412401836 -0.15102779986278025 -0.940494742743605 -0.9317457555929449 0.4783092897793786 -0.5125244699899385 -0.8124622515268678 0.9805292419183194 0.40736272184356914 -0.21614696087738938 0.9281172505997046 0.44325772274709685 -0.06778072693418347 -0.962935970758874 0.6324336065361054 0.6309816895455609 0.9021543741501041 -0.586663932335713 0.5906116307902562 -0.037803191350623155 -0.30068446829483797 -0.12043340611164477 -0.6830006938825268 -0.6574495042475941 0.2036736001911863 0.1850870589259408 -0.8507703623405125 0.4872194142401711 -0.6960168054272671 -0.24662397461341157 0.6727302976426761 0.1513585135747164 -0.4605588047220759 0.58533399001236 0.773287531521851 0.3490906389498254 -0.8817993177080359 -0.19725704882506223 -0.10198141697773977 0.29319208368701255 0.035355931421954256 -0.3963452892118655 -0.04018146093289876 0.2764187264674285 -0.6128881226059515 +133 152 0.501718272123493 0.06333429596494389 -0.04058718283349916 0.9608948911076962 0.39818661090590823 -0.3632043961856599 -0.4561559304180196 0.4475265514524025 0.4818793824572949 0.2933964060806409 0.3168959333505792 0.3777367364287101 -0.0975633645348084 -0.8353429444335556 -0.8339184522991756 -0.6793689964108314 -0.4073875924053776 0.6663854280152901 0.6958754851733431 0.49397076874865586 -0.49836699421256103 -0.5223448944301112 0.09687900357307644 0.7250021190705229 -0.2259030442751706 -0.6318314482150609 0.5149671207234603 0.3112749948880609 0.2680059886018946 -0.6527931566830818 -0.6040738188914072 -0.2869045283443046 -0.7262462491397346 -0.7964127738095288 -0.058875502900215704 0.7704187253067647 0.24227442852089554 0.029523044335842075 -0.8876953224390591 0.22684832636243035 0.6584154322988831 -0.7765312858752111 0.6794332809504193 -0.6789872736366742 -0.74562955371654 0.7969787896349396 -0.714753255840975 0.7527973136347683 -0.9993469773687815 0.21755931048982435 -0.5510826039408672 0.4465171784998725 0.14590924025659158 -0.535575524434537 -0.370739471310374 -0.3560534244537963 -0.4260674861673339 0.604371148981153 -0.9962639680291934 -0.658365865603274 -0.5420751332851999 -0.9148336108115516 0.8569108446384237 -0.19687093881336515 -0.15376206318497387 -0.12445074931622924 0.9603853553946546 0.2991501287306484 -0.03136347012522722 0.16981279962836804 0.6844310612595277 -0.7612019172634505 -0.654831600652817 0.7034951919821235 0.6105812946386482 -0.5534771506007057 0.8945353300631529 -0.49605052622799506 0.46427680906401436 0.13531765001645213 0.5767843922438467 0.6116394826006988 0.15329580249007901 0.21050625416927105 0.7686979240988974 -0.9841252486893908 -0.3377060565796983 -0.8577537759867093 0.03789979530582155 0.5183833081980418 -0.60223372559629 -0.11005652452585823 -0.7230784892062234 0.594569314873193 0.19703098961132715 0.7878940022636023 +133 153 0.4970610094168657 0.5430641039074844 -0.5409117821118181 0.3319592441675481 -0.2920346909530045 -0.23162955558848708 0.9774800683553275 -0.9162539695795844 -0.3199240999979145 0.3065653876216963 -0.03370013526211313 -0.14946913491850933 -0.35847809678526454 0.580390412600714 -0.8949537648235191 0.8358292754203662 0.7318292674329265 0.462789857362673 -0.2335298841682769 -0.36523407866630087 -0.6481403977111628 0.6806378652104841 0.5343743343160865 -0.5407190089828839 0.9530294691795527 -0.7346690331365688 -0.35167519486295395 -0.89178987677399 -0.9519905805413287 -0.9954189941206557 -0.34142284155195557 0.9887138914224849 -0.40455157689787247 0.11502689889898465 -0.805653302238293 -0.17558800577537115 0.711035896420817 0.3889890729229215 -0.7406521691605263 0.5729345485074671 0.14710271685855036 -0.31512523047439833 0.832172507476489 0.9561129834053144 0.5706417550278824 0.9709969602529978 -0.698075626757227 -0.5623180072015224 0.9418257644342125 -0.6312095267114282 -0.8431551257026537 0.9208676786099426 0.15444544510203428 -0.7383907534746474 -0.024257400337558188 -0.8242639287014037 0.17562243894536267 0.1199144939379051 0.6676336582519213 0.8234584530790354 -0.6769150719689345 -0.1898137555609214 -0.7268605082742714 -0.3655266556277601 0.8713014592304962 -0.22636262222694592 0.7161004334250605 -0.14456532625414975 0.5336108147427294 -0.5183698562992585 0.6168099545136625 0.5480957368057653 -0.6336902470103223 0.6024979737714007 -0.5767083719604933 -0.2469804572404466 0.4945516761155737 -0.6790850165437818 -0.2638339971450063 -0.4141696589961166 0.6743017477643323 0.3229353701861384 -0.8362009185719881 -0.5841006826777411 0.7984190072007065 0.19430718042526984 0.5009109553136588 -0.9403040377811831 -0.3453617415056318 -0.9542860502765325 0.9606523504584892 -0.3484748931984609 -0.8588663255389641 0.2502127712407345 -0.9005959756588979 -0.6384611634182173 +133 154 0.7442798615187229 -0.022766100869514805 0.3192739201804762 0.16387905329122132 0.7529797134607539 0.1449145227463169 -0.27047572035849643 -0.18324130048656273 -0.22524391667317323 -0.7451799533755714 -0.7954319560923504 -0.5591954258791054 0.5196961219366709 0.5280580293927362 -0.586213024487569 0.6762898895526988 0.9621160562828655 -0.4457421127052381 0.6575929931322528 -0.7377016544917145 -0.9677446797610354 -0.2210272792461514 -0.22628347065421694 -0.8918765045468384 0.36444451977779546 0.7259675064811384 0.056626923950512165 0.31755517084600005 0.8871196423439609 0.5111890896292224 0.5321837736692958 -0.050821634820428896 0.6477106769447456 -0.18580748960212667 0.40600633407438536 0.8617978357091527 0.6713574541863385 0.34519009581889026 0.7776114931913998 0.31665279739077334 0.6213242806223693 -0.6342191679572102 -0.018391307043829075 -0.04463777559062643 -0.6715065614721709 0.462039953761495 -0.9165301553525667 0.05738742611385961 -0.8215060030941876 0.1322207247078353 0.6677068346307407 0.6601670324143691 0.4486515525535828 0.35206619234560677 -0.23643296140788927 -0.46151193765362164 0.12650439687514203 0.09714653316822419 -0.8747324668274785 0.046254436636826046 -0.7133465159468568 -0.13964041606004973 -0.29442009802712654 -0.10651399304966636 -0.7895726680862971 -0.31777694114857 0.8958290412209113 -0.7319429668651376 0.030007970663656014 -0.8798962760438391 -0.3643013502461645 0.7664428750971792 0.7834749758597859 0.5655501780077634 0.5235315265539839 -0.2953922384875267 -0.17653983377189775 -0.05004090724049881 -0.37716151624263516 -0.8387547340679362 0.17583976125403367 0.39217572649992527 -0.3209576071192646 -0.7273646525540687 -0.6059834351739413 0.7647983622183268 0.2897961507183966 0.4668380641766896 0.8970168298951755 0.4110353932916506 0.49705439076864755 0.33246313821013085 -0.7338581965186728 -0.06783797092559651 0.0725384181849793 0.6672744480672472 +134 113 -0.2958002272492404 -0.6374495824626139 -0.659517691398233 0.528558176678543 0.22050324708515845 -0.028203251407392882 -0.1476807773632498 0.9718311515502138 0.3141470931580026 0.17535998509857165 -0.3498752131614544 0.4843989390129222 0.49083872342481727 0.09383395821537821 -0.09642224612813988 -0.8593517696147335 -0.3540366946699003 0.8388282393583912 0.7183858924424837 0.5312961983512026 0.08422370123786416 0.6223083463372758 0.7583227299302411 -0.39004047545886644 0.11205059336107492 -0.1811524218560625 -0.36676774918820576 0.019909329917670915 -0.37640881597206177 0.8512698914236614 -0.49029542507697244 0.9873351979988094 -0.3731135469082403 -0.241259678252004 -0.6249311856566526 0.039834908705803196 -0.8618238254105659 -0.3264056236478057 0.017630523114092522 -0.10643316444802675 0.11104092653101039 0.5890777112682821 0.27231710869868087 0.6072762621112715 -0.476201781173728 -0.16874262974064935 -0.4699826726434615 0.2999876043194787 -0.9401005778410481 0.5488441188651545 -0.3960829723698236 0.9631352484906304 -0.7758617703012545 -0.3479473506387143 0.4053290661066027 -0.9628476980139307 -0.759936078434057 -0.11535401446120641 -0.383253405774602 0.5793288327836732 -0.267037780759779 0.14552878994471818 -0.9585042179656418 0.007335310485255375 0.43858726076730736 -0.6852416552876051 -0.8602800873562222 0.04123477081153082 0.41396156434430065 0.4947853860941809 -0.7919257732667191 0.13599235994083347 -0.44924526169208034 0.9681348053950485 0.8116153591578104 -0.7623119461192491 0.3336109545458401 -0.04428077163465294 -0.5609748822698357 0.715322675148071 0.7246390937195264 0.3731366453487732 0.35960813005327896 0.904745769149083 0.6292366431980816 0.6798020020505084 0.8387386013861973 -0.03737665433727644 -0.3471977393258576 0.6080499080791519 -0.2727617988504065 0.5571158755121317 -0.56523031248363 -0.35823545579032645 -0.2755984888275953 0.22549407002996835 +134 114 -0.942346968532219 0.48767976753785214 -0.044856413752190516 -0.09960128229273413 -0.25436682506031816 0.44081662862585413 0.10851387871170681 -0.07620006457360806 0.9574721886321622 -0.7535107778209227 0.2598596750968283 -0.45835114684993017 -0.4379713946359589 -0.8637686189946976 -0.5182178119711078 0.7809534624598125 -0.8767091585599938 -0.6592588548702878 -0.5768406556023646 -0.4263404345011379 0.4604676260205134 -0.5053043541251212 0.9836543463634191 -0.5191326381554178 0.6648612398898484 0.3715069650463805 0.025968723934996163 -0.1563412683707175 0.9094669827864517 -0.6634965066710967 -0.9992143924082773 0.4704405637947131 -0.5396049019223803 -0.5477937404005215 -0.7427828666421925 0.042238238780484716 -0.9238402069835432 0.7871369498340055 0.8781056105840541 -0.4108348768182759 -0.8557401252996488 0.6009168584322193 -0.644426785781806 -0.15883838176150622 -0.5330092256463475 0.783842451730296 -0.23216754651543492 0.8240711450085079 -0.9523566795565204 0.44419334871422556 0.9075177887337826 -0.27242657467051146 0.1887865737279033 0.9482302157106768 -0.8195647530862267 0.7140519540856689 -0.5598194879746348 0.9445517913200241 0.6825502125442902 0.12598365510438247 0.15740976145652352 -0.386248178522004 -0.044381134894855734 0.8273135181532187 0.05993789517084824 -0.8786889818540995 0.9734311923539434 0.8974341114016897 0.1442871686827858 -0.08427706492174858 -0.5805343770515266 -0.017684190705492986 -0.013604661610560065 -0.29990448983606055 0.3226846594070001 -0.11541265947475998 -0.4613721550964953 0.047862061866686956 -0.24166094704125451 0.7040496035275856 -0.89900374593081 0.5486161248971522 0.5255669120139832 -0.7804966783949934 -0.012361362481046356 0.8853347196328065 -0.6662367113667762 0.13976687728211235 0.3680999563230334 0.7616916779934337 -0.9770782172226338 -0.23437316495999516 0.7094942771279336 -0.19103512023444846 0.3869531274722944 0.21654019782656087 +134 115 0.14629486927685686 0.3709173171375233 -0.4122728592992553 0.41730526688477365 -0.5105848267177706 0.748640770764188 0.17004449969665436 -0.27166882894473066 0.1694958011604577 -0.35304906609316333 0.34957823722049763 -0.502700736098119 -0.9567869295660156 -0.9228350969395636 -0.09596034160237954 -0.2658899806164594 0.0035785770510285975 0.3124240019718152 0.40716777638979584 0.41842594230354035 -0.21273002050110312 -0.5918784542278008 0.3105373107247451 -0.01491499000630303 0.9251211664610763 0.4698705086019346 0.9756206688190256 0.6232774935714256 0.15172295927683965 0.3276927926072293 0.4095813252194913 0.0382284567543274 -0.823956058189043 -0.7632683880942315 -0.7103742611831041 0.8380623264853182 0.6672867983657926 0.295930425126 0.8334251757242566 -0.3482971621871045 -0.48434714571719195 0.029434321638400984 0.21736527754759072 -0.44048262633742197 0.37134310776150525 0.799495194383028 0.2654608745150737 -0.38684415637783265 -0.9346285742333211 0.18431914682917494 0.9835813828873363 0.7168924919813666 -0.1797151915702675 0.5693592031770287 0.3380609444478697 0.6981506707631508 -0.05328439091938808 -0.41613553887523635 0.7374044905525103 0.19748003707665496 0.16050520867330542 -0.4488297411312363 0.12523127092425046 0.35297752128172744 -0.0801568366613048 0.3109244629267651 0.8872210898150927 -0.6922917116658687 -0.9092416900605933 0.5927533730389021 -0.4074996851335706 0.5071634305674666 0.227733195476435 -0.524855893871045 0.19964571697513844 -0.9945376105761847 0.5884574020487707 0.1984375741217217 0.4148455799993598 0.5170551241364489 -0.1374295556619345 -0.5399954913976441 0.1439426900269627 0.5484930648470765 -0.5336217260493079 0.6221637648615761 -0.08142393232259293 -0.8551425611311285 0.8116672319738603 0.2251154024488733 0.38810088261862874 -0.8680108594433511 -0.6007141724468932 0.9755584592548483 0.017799537171639734 -0.03887072857498208 +134 133 0.4301460424347092 -0.6559759981276045 -0.31202878500385633 -0.0020291644338161774 -0.7643465392888762 -0.6668180316202807 -0.7582100031110168 0.5480184378310593 -0.9259018738405451 0.2529684117461166 0.0409060022116805 -0.802782599219845 0.020837104914068316 0.08647529720629499 0.3636902576713008 -0.4829234146181285 -0.975105457163469 -0.08303164168804322 -0.6470212488246023 0.5896208201635105 -0.47920084414269803 0.7009815111705784 -0.9244778135557974 -0.8859591642160833 -0.06429496608950691 0.7409669225380595 -0.9869883175788223 0.9945757752551876 0.917936617505041 0.6425273764244173 -0.4179509742837413 -0.1850564952555569 0.9376396364560107 -0.4297337840906128 0.8249571302425691 0.5409461499348611 -0.6849236458334864 -0.015623210204425808 -0.5406051869628496 -0.24541946294077932 0.9924130025102365 0.9278521670450042 0.005551576411054748 0.27299040934235275 0.1895262496793335 0.32759897997608745 -0.7389440859574892 -0.44463692880276784 0.1858246708243778 -0.06283110038691642 0.30321096309939044 -0.4060186412401836 -0.15102779986278025 -0.940494742743605 -0.9317457555929449 0.4783092897793786 -0.5125244699899385 -0.8124622515268678 0.9805292419183194 0.40736272184356914 -0.21614696087738938 0.9281172505997046 0.44325772274709685 -0.06778072693418347 -0.962935970758874 0.6324336065361054 0.6309816895455609 0.9021543741501041 -0.586663932335713 0.5906116307902562 -0.037803191350623155 -0.30068446829483797 -0.12043340611164477 -0.6830006938825268 -0.6574495042475941 0.2036736001911863 0.1850870589259408 -0.8507703623405125 0.4872194142401711 -0.6960168054272671 -0.24662397461341157 0.6727302976426761 0.1513585135747164 -0.4605588047220759 0.58533399001236 0.773287531521851 0.3490906389498254 -0.8817993177080359 -0.19725704882506223 -0.10198141697773977 0.29319208368701255 0.035355931421954256 -0.3963452892118655 -0.04018146093289876 0.2764187264674285 -0.6128881226059515 +134 134 4.35538988948254 5.083038795327916 2.773029086484793 2.968691906236823 4.139996595001085 5.15688065055496 3.227890215675118 4.543773211491938 4.987042700662726 4.958031493135838 3.1626292244135863 5.060226134028733 4.26443022424274 4.319170389917984 4.2983201904894015 3.84783576641585 4.9100699065298175 5.001258859791915 5.895199676809448 4.5124163753058095 4.2516829185148595 4.291509104353468 5.650097646536318 5.285788278768494 5.471655302116291 3.5929394488017974 3.749043230322866 5.1239892718902365 4.872641596804673 5.344116565304342 3.3863197890804067 3.892179003080457 5.411723155048071 5.2149496753859985 5.221842070932731 4.3825025796118995 5.151878513556008 3.427742630055274 4.460969810606359 3.7857200520806216 5.509090035838307 3.9899551545069283 2.7656872307802542 3.6745865099439703 3.931047620427589 5.356179387508236 4.437302833125572 5.442611696514485 5.538803366901346 3.249292886571516 4.909861728666838 4.78793077739161 4.7288132566453625 5.2491286102846 4.829490953080377 3.9690712795716383 3.623077904816962 5.817089421621785 5.940167355418735 2.376683835092367 2.2417587099027845 4.620867802899583 4.95739922975679 2.3342208000702938 4.891134584517689 3.990927229108626 5.7618509227812496 5.175614694469346 4.4440422084416475 4.438056292088213 5.248857372551531 5.2024059841596895 3.9044958857561074 6.010452539660093 4.126221426187339 4.670660120279761 3.9832279168995113 3.5005868521290027 4.987275101243573 6.272593099528774 4.251631657677446 4.39201827275648 2.9905918756835375 5.232876098148535 3.895026053870388 6.450177054632057 3.8334078375707765 4.655343245877182 4.413263011750249 2.393192039772405 5.268211291901313 4.9428846992990145 5.594179173886285 3.9734501055585882 5.270750217531466 4.092214900942686 +134 135 0.7553207979629237 0.3580815112655409 0.03435911458566565 0.8642447508494508 -0.8969646282017225 -0.6444710323015117 0.15198373492352246 0.23491437792705283 -0.19235516285308218 -0.9805480827332178 -0.26572581684878727 0.08557259716487975 0.1504324406037254 -0.06307173981968894 0.6522006038201569 -0.12150548774529701 -0.6445996120710911 -0.14146095970319061 0.8397698281668504 -0.4754382750173429 -0.5448783028616013 -0.1452723204585742 0.5989612398139688 0.8398238378253013 0.8038775212151756 -0.7377085066901665 -0.37613755298597806 0.7379130260655016 -0.7336809473403569 -0.3984839349035596 -0.07539640764614108 0.022449507053884377 -0.5743941671135875 -0.7210657100490176 -0.5269145280426719 -0.3822364992218379 0.8401929771165537 -0.23749731199497348 -0.5497713222352714 -0.08088512426016292 -0.4449244527424461 0.7019651351679703 -0.3124502533992375 -0.6420392069984926 0.9277738993869311 0.6195869178480999 0.9500659417596491 -0.7895661703218106 -0.27152095548325605 0.4488843901311239 -0.5781942820909103 -0.6352814337927946 0.9640305703478564 -0.3247050233024056 0.11622299407954961 -0.02654176768551819 0.06967413842195591 0.7398003548283378 0.6857456971275293 -0.3176772124166425 -0.5341606023072987 0.869951930466146 0.3149433599218252 0.17811526723228877 -0.5834058892394447 0.5238111049330463 -0.4222938581705251 0.9423686720295599 0.5712222034224672 -0.7161584888239749 -0.7230026043004916 0.8001132211040152 0.6808769279398668 0.896809614285877 -0.8434609785570257 0.5134763117535786 0.3262785515683375 0.0558167735100461 -0.7958876455420814 0.9757963210254783 0.035219235437151886 -0.9295133113558356 -0.12571400267679045 -0.2641693419116222 0.5367801041435842 -0.7131948591051387 0.8631580862187194 -0.4730591490698328 0.3990593082142231 -0.0693203015930639 -0.8015770338877855 0.6144169893435389 0.895961115291692 0.00857389390012897 -0.7850942924039153 -0.12145306794385613 +134 153 0.07049414101391793 -0.28501647318171486 -0.09244127869455765 -0.044222242619481156 -0.18210657687082765 0.5747700090306924 -0.35276601255983375 -0.9184828501553712 -0.6149906856398739 -0.45982050453318446 0.19719684505662283 -0.9866994522195072 -0.39530264633666157 0.8786854647413629 -0.7863553001765844 0.6538086511174717 0.26030521623981584 -0.9289799564090495 -0.5596720604936443 0.5275788050377603 -0.7667239012009368 0.15651571237333806 -0.26981904577093796 -0.9134117723528321 -0.8808427725389143 -0.18243865420906413 0.6666050213374617 0.37414546486301914 -0.07421463630777825 0.6899928198219374 -0.18804629772767067 0.7934474344315212 -0.10278651036894892 -0.8125014849018846 -0.8143696441508064 0.6941019089254699 -0.32155072899675696 0.4899650129961195 0.23985540460207422 -0.5488449104567168 0.46804164865363385 -0.4267900743895039 -0.430484322189568 -0.3090678564999516 -0.13728390486361386 0.34444905311106533 -0.3354164069977421 -0.9984693166428751 -0.24250884804457185 -0.20717684213561505 -0.15479071726842397 -0.7592332460898736 -0.4529769220300346 0.6968917238974592 -0.9780453354348333 0.19676360505590096 -0.028643720350358448 0.8307676072676191 -0.1011026882236079 0.2505205410666016 0.32886514235595676 -0.07590935606697435 -0.8755709509181453 -0.45562742150191426 0.7769124107800105 -0.3984358453663588 -0.9161591571885466 -0.5895769359977385 -0.1282062331924072 -0.9419114284511065 -0.9893837658393609 -0.9643166862244892 -0.960957857204592 -0.965720244718324 0.2662396637669959 0.940288065237139 -0.8671810833899629 -0.9453419445273246 0.5860998855081334 0.7205439827016134 0.6259183796495393 0.8595497897043995 0.29639484597614985 -0.4973262881155238 -0.3428955217807024 0.7932821973173856 0.3137253336381227 0.7908271819637422 0.6322747096239762 -0.04515764355762841 0.9020437753991661 -0.930163332846915 -0.7601270033338439 0.16424996904028477 0.9925085163834402 0.9903999973404829 +134 154 -0.665864200679888 -0.934663370991609 0.39324843996641023 0.30134991139125233 0.2416277604142134 0.6903307226541948 -0.06336380770930594 -0.29247170805799794 0.6378786269999257 0.9927523979329722 -0.5942515697786581 0.13941662933603438 0.1321187019689396 -0.843876662955126 0.09028361735091628 0.2453017034335392 -0.347113337745808 -0.9558641412605204 -0.9794847798979147 -0.31818225996381044 -0.9599095780995135 -0.31643511415754944 0.48431140452701626 -0.5228050551042858 -0.6196086786166006 0.3428261416470495 -0.0024813819083235877 0.880877794653862 0.6751518658610085 0.8828122036608315 0.22175814292035256 -0.7332757028797512 0.7456687052946844 0.3756634252997726 0.40745342749555813 -0.8795514626263181 0.07227349531006677 -0.12338104224185154 0.36436959951957726 -0.4812387950659256 -0.5117332656240043 0.33737164012934606 0.09922642443701801 0.14669117065032733 0.24445898455044235 -0.7981616468821979 -0.643173217689208 0.2381557247480237 -0.7209261215653953 0.3310008825677322 -0.2368301820967269 0.6827619767127722 0.5525751950502118 -0.6902096804447133 0.2866024295349112 -0.267811319346162 0.744070388556104 -0.7395172985754803 -0.7309669437640003 0.2367941233173272 0.4809889520962707 -0.6504958509644554 -0.9668492239308069 -0.008145021452415024 0.6071823163000605 -0.5411733223204793 -0.3417240515804205 -0.3733699217562976 -0.03774220654314453 -0.1901614378521228 0.642550216686721 0.8845986634113521 -0.5873016880070498 0.9061117469718312 0.48201390534582456 -0.3008205461942701 0.09235858189474966 -0.34746609110672866 -0.9039498047874326 -0.3661985370644514 0.6688711771818638 0.05241615248861242 0.5034259049106053 0.5852089664319982 0.20411288026234353 -0.8473969700412176 -0.11372149863897896 0.0003214013432091267 0.7677293273057786 -0.024373271933334717 -0.4727546087250001 0.6017077043672137 -0.5378372566596088 -0.9031441384066552 0.7050526086897033 -0.6991875425086287 +134 155 -0.17543988898194418 -0.7016803688445348 0.2142027971287268 0.22775956478537118 0.23192220242678507 -0.47767392550219134 0.5969539838583384 0.2803602355452346 0.948457471072742 -0.35169285440043274 0.7182476793479935 0.6390482567113058 0.8130702880168108 0.08798001005232647 0.9115275583236109 0.1984462509823084 -0.6034863536625492 0.5818997386946041 0.7891655859835829 -0.7386681498983911 0.0935039302377656 -0.8553592421866183 0.43956393652322934 -0.8915963647125471 0.6402405356804377 0.3217470301599197 -0.201796977365585 0.5418783021457201 -0.23681408354460443 0.7498076899160004 -0.09197035204543358 0.43369617557891305 -0.31928508442904247 0.8142824619412612 -0.2326369494293996 0.8636494180873253 -0.38715086006957167 -0.8695461497064036 -0.6256528680139488 0.8788911608180352 0.7457581187402533 -0.23680750226729774 -0.20423295337433345 0.7173471432438221 0.4337397937605514 -0.7587114700236606 -0.05761766384377798 0.7756310295030195 -0.9737045890771125 -0.8791271284840199 -0.8245218898680109 0.29526001000173707 0.8016725317699482 -0.1533561667470058 0.7250406596800276 -0.49445594524208136 0.80232980658184 0.349780969924961 -0.9028746288078386 -0.25275113873822574 -0.06659944715777977 -0.12752097770022908 -0.7306546227069384 -0.29571302983558834 -0.6184763548711776 0.015067596207356537 -0.4516153416480011 0.14404475065757594 -0.9183577860133323 -0.30230437907307794 -0.7461152479636477 -0.9249044005246536 0.6969636439948532 0.37755708114915065 -0.3208546419913212 -0.4269067816708163 0.9942894700115639 -0.6886980654517378 0.05523657141465588 -0.940087094802285 -0.5786219662108407 -0.3529770270541366 0.74945542946328 -0.3723222865636755 0.8067394491292301 -0.3773360951227631 0.1576278239344513 0.6003977818805302 -0.10946579974010917 0.054316421202962095 -0.22703693759537158 0.43369381231924153 -0.38149863562685793 -0.927535283173542 -0.9725589210950285 -0.6925882667782797 +135 114 -0.7620904305597178 -0.0363352839484119 0.845357213277991 0.48689478591880464 -0.7352480424779957 -0.5024478989862846 -0.36117794778349444 0.7317969895132865 0.5049570519360085 0.10748509925987437 0.8988982358368873 0.9452366349207841 0.2427513304603599 0.7052911702399447 -0.8126695581733612 -0.3938780451910726 0.720646440869805 -0.8414673997154494 0.6575408428934291 0.990513770828481 -0.43053148926752316 0.4021611277027375 0.2974330851426332 0.06726830097296044 0.9178081801536313 -0.928235854828581 0.7726473629670425 -0.09395559064038905 -0.16737052777985184 0.6346508691438013 0.4820885283615737 -0.30128709411039023 -0.2657755637817836 -0.5642755657541869 0.8376593706711943 0.05077796916378419 0.022140578345442696 -0.8131558535614405 -0.3137561382324028 0.6615208902560228 -0.42682559312496937 -0.717093567098168 -0.15448609034964522 -0.5218134262918062 -0.45140849624650903 0.6496228423262917 0.23673376831246817 0.6085745170247119 0.3252572215671925 -0.7756771695584668 0.10700977377957721 -0.2983270957327606 -0.43193935231320135 0.3739841838411193 0.07489115431071536 -0.0942186262607907 -0.39460357527179424 -0.7863097096469194 -0.3509852636574229 -0.22227270424260315 0.9090898168557093 0.6330812943324171 -0.7850890899287206 -0.44589390122655037 0.45318240348603167 0.43434610168463816 0.6800908943095629 0.7890864372844282 -0.6093773863445189 0.3870536746193953 -0.946510793308442 -0.265433542124377 0.8862288598050767 -0.938193952697038 -0.06559677210620829 -0.0902908191091889 0.7297701620658548 -0.3339990822687058 0.25787371288553973 -0.2478742357321564 0.697739349237168 0.32468769564856026 -0.9216228996465972 -0.7967596492190758 -0.4660372468076761 -0.5484275391775004 0.39417626489992186 0.6746058326455764 0.9651872891766604 -0.4851077247515818 -0.19144244845440062 0.8169185379547592 -0.1775818104696567 -0.8986136206212496 0.5033271149208212 0.050376514556362606 +135 115 0.03897200732435224 0.6515976359872484 -0.35488774420806246 -0.12588438097804722 0.40009094131133427 -0.8617381896818805 -0.5069681813293316 0.5406513519745815 0.41366609174686086 0.1824709752786653 -0.7590185154689313 0.2926261021744676 0.6793152449861022 0.6539102219812538 -0.4891640689224943 0.2803463892992111 -0.45214629470547796 0.5118478674079994 0.23340429958699915 -0.5690251291488286 -0.6499920313500103 -0.5142476691790014 -0.6843659054490969 0.004367411457132819 -0.4810099991949772 0.2737578531063716 -0.11262443010151957 -0.632809270241687 0.4722612686167027 0.7431554731877492 -0.5043531725612358 -0.6100384366368272 -0.6613808417192935 0.47638032035113764 -0.8661086667848461 -0.2165056881973173 -0.7113204147070458 -0.6927618639859414 0.5909293341874091 0.7768062988421134 0.29612768161794123 0.026570558102378294 -0.7596593114363248 -0.15637961723852634 -0.13896298294369624 0.019414745523819166 0.26167951139860457 0.5144224085894888 0.8534231953192319 -0.08635072818696599 -0.48606426518914847 0.2514997161428798 0.9758540240365263 -0.046735502740109514 -0.3786122624546784 -0.49084151491296124 -0.8879373862992082 -0.6873255196593835 -0.34775668987062747 -0.34129313021441976 0.7222194295320472 0.16975941406880168 -0.7660736707195113 0.35206762606023534 0.18586047758809965 0.8838722503503793 -0.58390190425688 -0.4667593224288129 -0.6081770573841894 0.6488723651995272 0.72310311116267 -0.24363374802854953 0.11715233560908622 -0.10156367487711004 0.8247064841349983 0.711584963462881 0.5176339373687859 0.36388114914077296 -0.955786881703456 -0.4046465260397585 0.9465535053819292 -0.42453240315482366 -0.888083058673514 0.949799896953593 -0.8226031371107645 0.8905426539462566 -0.3711767702837865 -0.1455607390968885 -0.3817149805230362 -0.0821612477789595 -0.3634718164962296 0.5687003747450121 0.7474940109203687 -0.12580460400638915 -0.38528561833013275 -0.7209215441800436 +135 116 -0.7130478503526563 -0.6495828703467377 0.3530432906983383 0.6293355355467298 -0.55927628423821 0.3487051748761547 0.04736560211945928 -0.7304623740932703 -0.2896588676542122 0.5243674413392931 0.9150676038816956 0.14770123776814437 -0.5954493105203924 -0.148530653230996 0.5870448490243243 -0.664162526113302 -0.21041183794004326 -0.8501180435462445 0.41848044525435757 0.6385731003443091 -0.3489297221312688 0.6762327438898585 0.3283690533406496 -0.8425825894152505 0.6906859540272607 -0.0016098764415519717 0.09839333563580066 0.9939265247843392 0.7637214310405076 0.27898476979920916 0.8704348578155838 -0.5535035000443329 -0.4527028796066974 -0.29792527384048095 -0.9913992891252383 -0.36724188312978834 -0.1960419293770963 -0.7662262980875356 0.7433607435658474 -0.44742558565822144 0.885556410846629 -0.7822413426657131 -0.16308832386990946 0.41146255888493477 0.948035959864294 0.6478527177733349 -0.09790180256347414 -0.5398166060655425 -0.17078598233765097 -0.21945855879491716 0.9559559750897533 0.8748294555928886 0.611029336650885 0.3880177569538268 0.9359087470286862 0.762900530357348 0.8996159649783233 -0.3091838853773994 -0.8781970842741542 -0.9177334551537373 -0.33242839439968885 -0.06318771955765334 -0.6544613465022506 0.6181744094904222 -0.8269150299730099 -0.6850985060358685 -0.17749744208842388 -0.9795254668969988 -0.020247266930519592 0.23240826653951108 0.34703723562569433 0.4845303084016894 -0.5682271405168089 0.05140825933361137 -0.37962402173000154 -0.06383086204402488 -0.1238732408340355 0.7685814466016039 0.3950798137844589 -0.5365963913017062 -0.6359722415342779 0.7810861140792191 -0.34396286769745754 0.4109876635730163 0.9114760939128486 0.08033800873238772 -0.2534107480641403 0.8999241254101673 -0.7415225316555609 -0.5879340315805288 -0.4116484978094954 0.9951099071055889 -0.5303717367693808 0.770476127254089 0.61408218791615 0.4027013789806837 +135 134 0.7553207979629237 0.3580815112655409 0.03435911458566565 0.8642447508494508 -0.8969646282017225 -0.6444710323015117 0.15198373492352246 0.23491437792705283 -0.19235516285308218 -0.9805480827332178 -0.26572581684878727 0.08557259716487975 0.1504324406037254 -0.06307173981968894 0.6522006038201569 -0.12150548774529701 -0.6445996120710911 -0.14146095970319061 0.8397698281668504 -0.4754382750173429 -0.5448783028616013 -0.1452723204585742 0.5989612398139688 0.8398238378253013 0.8038775212151756 -0.7377085066901665 -0.37613755298597806 0.7379130260655016 -0.7336809473403569 -0.3984839349035596 -0.07539640764614108 0.022449507053884377 -0.5743941671135875 -0.7210657100490176 -0.5269145280426719 -0.3822364992218379 0.8401929771165537 -0.23749731199497348 -0.5497713222352714 -0.08088512426016292 -0.4449244527424461 0.7019651351679703 -0.3124502533992375 -0.6420392069984926 0.9277738993869311 0.6195869178480999 0.9500659417596491 -0.7895661703218106 -0.27152095548325605 0.4488843901311239 -0.5781942820909103 -0.6352814337927946 0.9640305703478564 -0.3247050233024056 0.11622299407954961 -0.02654176768551819 0.06967413842195591 0.7398003548283378 0.6857456971275293 -0.3176772124166425 -0.5341606023072987 0.869951930466146 0.3149433599218252 0.17811526723228877 -0.5834058892394447 0.5238111049330463 -0.4222938581705251 0.9423686720295599 0.5712222034224672 -0.7161584888239749 -0.7230026043004916 0.8001132211040152 0.6808769279398668 0.896809614285877 -0.8434609785570257 0.5134763117535786 0.3262785515683375 0.0558167735100461 -0.7958876455420814 0.9757963210254783 0.035219235437151886 -0.9295133113558356 -0.12571400267679045 -0.2641693419116222 0.5367801041435842 -0.7131948591051387 0.8631580862187194 -0.4730591490698328 0.3990593082142231 -0.0693203015930639 -0.8015770338877855 0.6144169893435389 0.895961115291692 0.00857389390012897 -0.7850942924039153 -0.12145306794385613 +135 135 4.867279685178838 4.304356733109345 4.642842077137784 4.484090308866926 4.379362830644935 4.087030319052645 4.56711637175573 4.60460813910807 4.420659416016441 4.101972712360297 5.875271279736563 3.7651120514047935 5.635004218106328 4.627871313510545 4.726959355546798 4.093111828749867 4.856578662961807 4.526689312436713 4.088916696245578 5.356187817122361 3.769821809060498 4.684206487438834 4.724578997085166 4.58311529004623 5.753838106389499 5.397833342358208 4.784252662676207 5.001142600044128 5.05920841825494 4.121565260879631 3.6326005746711068 4.412730760059278 4.268337116620188 4.279466060944938 5.251053594689837 4.239038427772541 4.97167702567654 4.193310524042266 4.685424148238472 3.3910011219084466 4.220322786700194 4.027944729942818 2.8539146435605236 4.580381361959739 4.91700648008106 5.079192252335961 2.938578474930721 4.17245677681437 4.367000330059295 4.734590844592693 4.181555863729919 4.883893588380027 5.93889958989145 3.4511494890619643 3.958406385484264 3.8510871404013254 4.721009486725112 5.564529368327298 5.341630921217169 4.5519382062938 5.32288487478901 5.244540022535394 5.233388219418369 4.082408899409513 4.814840411202253 5.1277194062550215 3.3433802793211456 6.037893552483567 4.532417077816386 5.2158774407589075 4.175441300326837 5.1841537857443845 4.598205314893246 4.487745920969363 3.0902988834789364 3.443249739345113 4.0471538118130646 3.5336299087697514 3.9791216107501537 5.401039625897541 3.918506072436733 5.540251156080475 4.553805264670377 5.495354740501369 4.979512966663283 5.087021733410643 3.589848772811602 4.899416099205239 3.8100249296685997 3.119520181805502 4.765326892076814 4.977141283112354 5.362655533543603 4.561518094937231 5.218917411368032 3.018980179958836 +135 136 0.09264827415598664 0.5886977266736912 0.037815092342822654 -0.31024292766248407 -0.16668699603084658 -0.3608591018291478 0.5561406943072225 -0.7309156647862385 -0.9836766310706007 0.46922077974225496 -0.8409508215572656 -0.07015728929953124 0.6338163630680984 0.1333440654988609 -0.22532495437492606 0.8407571088634815 -0.6448119469964335 0.3690827414569835 -0.028161355982249114 0.7892087017342093 -0.26827331834153534 -0.03681685381257305 0.18053817433898356 -0.6667928592573824 -0.9282050299088527 0.6133855801817774 -0.855737853111443 0.8397623187565666 -0.8082182507242548 0.08093193996169212 0.4540569741146865 -0.32060528858096893 -0.9119811244733786 0.10755666998076796 0.49651289396963527 -0.00860587635540444 -0.7979671691070134 -0.0377116002125637 -0.17129175033385513 -0.3541227612365292 0.1594843027141788 -0.03342058326777986 -0.27065378017388064 -0.11194683211004963 -0.9166890020089535 0.9982892894466444 0.43105466760086264 -0.1275494068178762 0.5111595305470433 0.14377710983696135 -0.614357535458693 0.5436654085216999 -0.5977463252598694 -0.34985354657502277 -0.6077099425088137 -0.699907201968132 0.9619941340265772 -0.686461014637296 -0.731514261783514 -0.7792141984117658 -0.6624691627598618 -0.5548975068888691 -0.46352805418804843 0.5461617762355744 0.05312659403397846 0.27056342456419635 -0.23959325846869772 0.5495930242391034 -0.7787008928022263 -0.48127383896688514 -0.1170368205912653 -0.9617689035138723 0.6524148470217055 -0.45885914618827894 -0.3875304974487055 0.524217956818275 0.207935192632154 0.02617272360962053 -0.40387668673428023 0.9259677731990112 -0.34081693533388946 -0.48418134792412104 -0.5774199354825353 0.39312394134461615 -0.39815685163624015 0.1561988767787157 -0.09111318565953885 0.5048313913422715 -0.13430172780805183 -0.5624086114250513 -0.326961090580866 0.4575959812425363 -0.7793543897171538 0.050521905698203584 -0.8928423915066528 0.3354923456057741 +135 154 0.7453629088874436 0.8306883157994904 -0.9349866789288228 0.4629236730761763 0.7210393780519802 0.031012908378695858 0.7341619972887676 -0.24782762335843 0.9684685631793319 0.5227370032759708 0.05993100819638886 -0.2933036882098867 0.8937855578732397 -0.8804479873029003 -0.23925701223140527 0.6153300322929194 0.536070183177487 0.4093142374484773 0.7628143044953322 -0.03081645051703852 -0.20513736402770744 -0.9842055816017694 0.9819300229129213 -0.31270086157079513 0.20139005479215677 -0.9825142733081993 -0.4723712731548959 0.6629158367590529 -0.2633674556493555 0.7913101985867952 0.3228995757351325 -0.6762423143046443 0.04392359827811321 -0.7447414619675061 0.04244409502290236 -0.9379278670914346 -0.7965938686694816 0.28028629428439267 -0.40155563113604753 -0.6412987336900147 -0.8656062077063211 0.2696460489120476 -0.5411082494861128 -0.991205890839749 0.2005390241443663 -0.4112967738484179 0.06293156583764525 0.03828101747388968 -0.8759380574549176 -0.7872715895911637 -0.848135818865648 0.8428621280790496 -0.21415392008872658 -0.79886229354726 -0.700043402431223 0.3158503704395774 0.40480104024630625 0.755428025692422 -0.7122123115351797 -0.308087201594172 0.4498925022674627 0.30302405475172645 -0.6119901382028974 -0.10212201155117051 0.846663268425152 -0.819612215003362 -0.08389313952544297 -0.6377914449190516 0.03171785487120293 -0.7951783791133242 -0.03894972728877222 0.648302285540399 -0.2954625120990342 0.8757739632152883 -0.20122201502416193 0.2898792356588502 -0.9947586940332873 0.43224712938227183 0.09023644293594413 -0.4188790746925988 -0.48536014156453544 -0.43198882759215484 -0.8883549577843233 -0.35034146338799554 0.17782140292227 0.9144910278050637 0.29977875330120174 -0.4699718691334729 0.4253163442983867 -0.11152381132720257 -0.7155257189473265 -0.20980167954231344 0.2071088279760196 -0.8425174503727444 -0.24953252572400664 -0.6823853879874382 +135 155 0.3183451476418673 -0.17927652038078046 -0.5714561824781614 -0.7238573097805978 0.020679930929277335 -0.9247696063431325 0.735200984568162 0.8312463407816224 0.21161328248167632 -0.6337653780142598 0.9541586578286747 -0.909247089152599 -0.8860805712886906 0.437960745577735 -0.5523292645928701 -0.23202666682966888 -0.6476823143161619 -0.0976928748955126 -0.20902583702026134 0.1963283165107954 0.32005866544517425 0.592474733356078 0.46885804199374514 0.27022617401803495 0.49152489549270606 -0.6681465633520642 0.5976952884815683 0.4138046694555353 0.8678211863493153 -0.22709966821673055 -0.1690539766057082 0.6737769361481136 -0.1274563111841729 0.35285142644180634 0.14299447565050927 0.816727525043629 -0.990637658022749 -0.8729121059434257 -0.8703914915621473 0.18043736991183734 0.7150733976537405 -0.4002309667893378 -0.35931959154748605 -0.8178659678321916 -0.4159440634741838 -0.7218456755014562 -0.04171492455920833 0.5385216295524329 -0.27895939343123555 0.8135789549787171 0.2623135557442726 0.025227949812498096 -0.9030079320329294 -0.8640347566370499 0.48294587916939813 -0.9381865151644218 0.040484714141628686 -0.024905355122189388 -0.5426950439292506 -0.6864018129677001 0.4729082823143398 -0.8566117523059475 0.5433197566551293 -0.2888460823228358 -0.9001716616579691 0.9774562338826551 -0.7220983165953214 -0.7417890701690155 0.2903053266969744 -0.6628844002468557 0.24540930811995132 0.8999060984657727 -0.18696236741829275 0.6995695479536923 -0.04683776702562259 0.08282214261662713 -0.1497376563830437 0.3459779059300627 0.2850747724587932 -0.3383703839934329 0.6791663886093906 0.4922104559233562 0.32985367628259143 0.6994658095916282 -0.7976608507469394 -0.7421929909688754 0.5708866579199012 -0.6580113330674231 0.29428006473446633 -0.5545650847832861 -0.5270781501641115 -0.24024788428075405 -0.34797596624597427 -0.8371177921663593 -0.3473414786216651 -0.079523646858636 +135 156 -0.8214709039643373 -0.5770997944428269 0.8580206800073129 -0.7102632750948223 -0.09607270206051677 -0.03575701458046665 0.705766607806954 -0.2455205789985362 -0.5011637255438495 0.02636586620332948 0.7465396107592335 0.20272692667323433 -0.846472537216789 0.7782685354827696 0.3018850114505578 -0.8449273559126378 0.23888898540020764 -0.598764591842629 -0.7633219809098226 -0.7844521061243177 -0.8732057487826708 0.5988817173167038 -0.9582768798433048 0.585372148943057 0.9952455961727784 0.883378518228159 -0.9219238429287329 0.2392617881732373 0.3390789178640572 0.23674630248587425 -0.5813766010457675 -0.3291901779717157 0.5442472946889114 0.39048710876311965 -0.9791326602434935 -0.7638256346434511 -0.152103188212398 -0.22021424652892874 -0.6951175808276373 0.05747798611708399 0.13070754206372848 0.107748282533221 0.0062236023425095155 0.4383844269031354 0.7797241240272068 0.3738922637349993 0.4531586208560572 0.3019802410923702 -0.18729042416356845 -0.4983308087296181 -0.2573675023124564 0.6069099756624639 0.8279929806589479 0.07416300895016015 0.5715696337357992 -0.3041550647298261 -0.7392429831735514 0.8144295233322205 -0.8885463791805339 0.9363901621117496 0.617433606912484 0.888841673875046 0.5325714146318563 -0.7543768738330106 -0.3471899819433568 -0.05258158381318245 0.28586151296051265 -0.8347742028343323 -0.8530134031354883 -0.9577059460275477 0.5341408907750236 -0.06641256685468755 0.761506083117347 -0.27405395295070156 -0.18326656196505509 0.9048422064719139 0.06967597280403082 -0.787111415754187 0.6078639143892679 0.557792499873369 -0.08321156668393415 0.924701632490124 -0.07991901579361094 0.7922769582936753 -0.19301535931476033 0.2155072123091617 -0.3054142575532126 -0.4235816606470493 -0.2555270384484536 0.6282422188800452 0.9068798077165807 0.15017995858722055 0.7491505857478353 -0.39427596077046223 -0.7701900933221013 -0.08444010001695768 +136 115 -0.8115537933477559 0.5820123962648374 0.34061947564775097 -0.6448106560206388 -0.14794979027489452 -0.39080060538173167 0.05043014952071245 -0.24036235860208 0.9032331392315196 -0.33616181518375265 -0.8703409902320494 -0.33304710630651124 -0.2695145189881125 -0.6297638559277055 -0.19951252033500277 0.5248276562541117 -0.30970176730714116 -0.9916285057392324 0.7180308451846003 -0.7156173568380553 0.5153622647625271 0.8433754857468772 0.493088158477917 -0.006241348091793553 -0.5970042998348615 0.5407396251826178 -0.48945223293387286 0.12782167705989744 -0.4875082992496329 0.23724467046024733 0.12442783836472215 -0.3720116628561816 -0.77055839817129 -0.09355946794509884 0.3067543289514032 -0.6509327464212613 0.008016059928692032 0.8361791802249219 -0.2565487397881263 -0.36972291237786625 0.8013282085026023 -0.5921318308549988 -0.3367439105567671 -0.2576509754058831 0.42828368450572385 -0.9702895678883834 0.5969270204629633 -0.8547395485112645 0.7879020986026988 -0.6498946799962719 -0.6078016652844567 0.7025861682405834 0.973679550990951 -0.4023951671560473 0.21203817229137756 0.14565733669809777 0.8749182769443766 -0.5713624446928653 0.9464126463547664 -0.5438519365160004 -0.20257471769883484 0.35841673626710113 0.9803656895072348 0.8947131769210792 -0.8489863622600995 0.3744955437916164 -0.5133879704657403 -0.3315240086530338 0.7193555159060003 -0.5526705710537363 -0.6575334147869567 0.20618805784086724 0.10046311771961958 -0.24552389708264766 0.9298801247388608 0.15429492694339508 -0.04042624076510326 -0.4949622550746964 0.6928929004665878 -0.8540702620871325 -0.8024544156553282 -0.22832731874059697 0.9332815957790477 0.04256820706147191 0.9031824588536717 0.5477441373818988 -0.15736184646250573 -0.7109563185276131 0.19668385142678257 -0.7213053970464502 -0.10707711969012768 0.3354815058743117 -0.9055675350997601 -0.21132683742318736 0.10502168677226442 0.017483568230214797 +136 116 0.8965082924058507 -0.9418725706286946 0.7984498737835506 0.1673905634884174 0.6930962153867275 -0.9080719143227094 -0.9466248363182308 0.4902066766142139 0.6934205267097853 0.49347028922198266 -0.5161600415268075 -0.013002202734312629 0.26616299709545976 0.568238472650858 0.20492173153357762 0.4583274241731139 -0.6615573234321466 0.9062809347182346 -0.05147655310824839 -0.1203506758627424 -0.6900612553854353 -0.27773018612510914 -0.9991105411044572 -0.2552986774842232 0.4035322795244305 -0.4134585879128403 -0.9379871739688239 0.33699549311167254 -0.12551413300950287 -0.28763733640912514 -0.1038978048983128 0.7240554188079757 -0.4491756438702972 0.052744585725722715 -0.12506648456482927 -0.9547448634976623 -0.06421162803092795 0.9346994182070647 -0.24696799378350742 0.873133183238008 -0.7339701699872949 -0.45731915579882587 0.8149089403097984 -0.021229716540151378 -0.5954417893636044 -0.3274478491876309 0.8513517224886338 0.04022028224276597 0.7717019652374906 -0.8139121440146211 -0.9574783233265427 -0.45327213026757973 -0.5617092287037873 -0.6646757459664727 -0.27132170511790843 0.7755021987009676 0.1507530641671848 -0.3090101579926874 -0.5868335592234646 -0.6458456364366323 -0.46563337461973364 0.873817532190406 0.907579652538649 -0.06658143041265552 -0.7063303154555969 -0.820173828831912 -0.8195242799377063 0.03313431831981983 -0.3454072455675843 0.785842916096392 0.8860649435092172 0.16804604975622728 0.4651973697049354 -0.8030924096919307 -0.3187246648130071 0.43513753101785424 0.0551613743900734 0.5688986580968451 -0.7534721253600962 -0.5208315033234361 0.5350664042049014 -0.15474029274981493 0.551039763024568 -0.232064114546352 0.9933632844294304 0.6174888751335463 -0.22930599017079145 -0.9172344225630407 -0.28812612801059 -0.07087373179342693 -0.41974946949647984 -0.6103904894230219 -0.47881349980537524 -0.7551511492032983 -0.5499846217341029 -0.9999410436418701 +136 117 0.4909252960311128 -0.2126109617311871 0.9406533300102273 -0.2243940520787644 -0.9385233034260818 0.0472921196985947 0.7192747847891294 0.8534213961080155 0.19245956017677313 0.3823227283377115 -0.10305228804273647 0.9043918813494563 -0.9702099912092716 0.41263071398106455 -0.6680728772668632 -0.03554509978075915 -0.9312925595112065 0.11947600354727284 -0.7784938038961062 0.13401928867548984 -0.10848659055634169 -0.674971951522708 -0.45362951728990586 -0.23719687411473056 0.9015786980664919 -0.8354421385982087 0.350987558101866 0.964596949074058 0.9456573478941694 -0.5280743461210036 -0.8426254661265313 -0.8794887995920899 -0.7051170680223551 -0.513478361348451 0.405197003014818 -0.43052572303919945 -0.1698128782343582 0.5623571106882583 -0.5355722879042559 0.3705364683844463 -0.43473000122792116 0.9865169096389916 0.9428593318304348 0.7123214684581443 0.12660001758697415 -0.37528386154675486 -0.4967855184413994 0.2029844408491115 0.990290207760973 0.4738607300979032 0.6359799390634153 -0.4046163858178282 -0.6039982527029175 -0.2683113912566333 0.9747569893825574 -0.5399697667851218 0.23027368198459475 -0.266245172389727 -0.16559631864643531 -0.7873285804543724 -0.4011843327102238 0.9141644142828349 -0.6098737724785768 0.21970538984837584 -0.45858142245130207 -0.9114014472885985 -0.32587028343892577 0.3336320599269731 -0.4291915165354876 -0.8456736451985114 -0.018224174546664917 0.9180408376768849 0.6558969875636018 -0.1711676743697199 -0.60706785319613 -0.8510406656147325 -0.550136700944325 -0.03180779609244322 -0.9614519693094004 0.871855175525702 -0.7682707838112282 -0.055974927909975936 -0.3644233078371055 0.3308478262760428 0.7988214969014069 -0.6141239351040422 0.45578874467378405 0.25472166973127686 0.9420386969692629 -0.7860413874630685 0.9006202999483703 -0.05509657639906984 -0.5825266173667032 0.605466992443108 0.5074231546979839 0.8507002571705229 +136 135 0.09264827415598664 0.5886977266736912 0.037815092342822654 -0.31024292766248407 -0.16668699603084658 -0.3608591018291478 0.5561406943072225 -0.7309156647862385 -0.9836766310706007 0.46922077974225496 -0.8409508215572656 -0.07015728929953124 0.6338163630680984 0.1333440654988609 -0.22532495437492606 0.8407571088634815 -0.6448119469964335 0.3690827414569835 -0.028161355982249114 0.7892087017342093 -0.26827331834153534 -0.03681685381257305 0.18053817433898356 -0.6667928592573824 -0.9282050299088527 0.6133855801817774 -0.855737853111443 0.8397623187565666 -0.8082182507242548 0.08093193996169212 0.4540569741146865 -0.32060528858096893 -0.9119811244733786 0.10755666998076796 0.49651289396963527 -0.00860587635540444 -0.7979671691070134 -0.0377116002125637 -0.17129175033385513 -0.3541227612365292 0.1594843027141788 -0.03342058326777986 -0.27065378017388064 -0.11194683211004963 -0.9166890020089535 0.9982892894466444 0.43105466760086264 -0.1275494068178762 0.5111595305470433 0.14377710983696135 -0.614357535458693 0.5436654085216999 -0.5977463252598694 -0.34985354657502277 -0.6077099425088137 -0.699907201968132 0.9619941340265772 -0.686461014637296 -0.731514261783514 -0.7792141984117658 -0.6624691627598618 -0.5548975068888691 -0.46352805418804843 0.5461617762355744 0.05312659403397846 0.27056342456419635 -0.23959325846869772 0.5495930242391034 -0.7787008928022263 -0.48127383896688514 -0.1170368205912653 -0.9617689035138723 0.6524148470217055 -0.45885914618827894 -0.3875304974487055 0.524217956818275 0.207935192632154 0.02617272360962053 -0.40387668673428023 0.9259677731990112 -0.34081693533388946 -0.48418134792412104 -0.5774199354825353 0.39312394134461615 -0.39815685163624015 0.1561988767787157 -0.09111318565953885 0.5048313913422715 -0.13430172780805183 -0.5624086114250513 -0.326961090580866 0.4575959812425363 -0.7793543897171538 0.050521905698203584 -0.8928423915066528 0.3354923456057741 +136 136 4.56862672451173 6.303525259548309 4.26450434076653 3.2022206121161454 3.8747258877547996 3.81380714341313 4.825113635863568 4.464461797531601 5.465178450345757 4.624189557431367 4.418448669902183 2.789500670910907 4.453028520855734 5.300913129971434 3.479887904082468 4.8114345407469745 4.390388976933019 6.118805947868327 4.088384488289347 4.439613247177497 4.108975931133472 2.8563636373392676 5.411856541816055 3.7882761967182303 4.982517139519035 6.247705914828982 5.04370170443983 3.863706862077997 4.842294359329809 3.088950618066397 4.650423600128297 4.498300674124813 6.6796725565044515 3.741048542494224 3.730931143009509 4.165558369967766 4.508261800370223 4.30765321123404 3.278017187054083 4.201929272654356 3.5711462856414093 4.148007104650001 5.841211925614232 4.268039836127345 3.877510511664578 4.048538725290693 4.686658194016012 4.904202100986037 5.572174249350928 6.46698264115989 5.301465725075671 4.441107449779121 4.598955574109274 5.402511521296478 4.884188808758072 4.99960015272223 5.472382213070819 4.669101635032053 5.202854553022399 5.4256476055961675 5.11142062069785 5.202455708654599 6.173556066031092 3.532405258618973 4.136880147137516 4.176315886831942 4.458025172589 3.7717908414924457 4.864419295207847 6.154946864675372 3.1124163682417763 4.641282961525368 4.928320572948241 3.2911818797827506 3.7967162516370556 4.304556728198384 3.030959356692825 4.74155625743198 5.727951421797392 5.138153830824788 4.47602448778262 3.0012655304257634 5.3231525671479005 2.9324766038645285 5.653410523659245 3.1737755998293244 5.059558794485859 5.526717610741855 3.4610310481737416 3.302884494511853 3.743915949723389 3.9246817890705916 5.92389352760943 5.301148162589613 3.9554235637649895 5.197623887798805 +136 137 -0.5915529961440749 0.9898559698058185 0.2268374341809931 -0.4785337978779083 -0.027003133476813268 0.07484402558207837 -0.7797624632742708 -0.13133627564259065 -0.3117119205727368 0.5030078591620766 0.09734849291381531 0.9260852950245915 -0.37293649263582695 -0.3502054853386072 0.48474000465162437 0.9005583782268769 -0.5126521532226758 -0.9199825666687262 0.19482290703920202 -0.5868325608907077 0.564040052323415 -0.1290269491931917 0.8719057111565294 0.9453606319304866 -0.6821505848743719 -0.6351592732924145 0.7776185601062151 0.31843234075624927 -0.6623567431483874 -0.6818332014914312 0.5022501147066982 -0.5199594396192728 -0.9953574767311792 0.1085769117327946 0.3520673368108267 -0.15179523089557811 -0.6880713272939956 -0.5205736178097877 -0.14501334907108165 -0.8182915155437038 0.11835213071963269 -0.5521173670087767 -0.9930038886580814 0.9009537689333325 0.3520485368836186 -0.27154550666600974 -0.7676151083432736 0.7058573205925831 -0.7374058791819826 -0.883353030006752 0.5067732524198982 0.09619672693361458 -0.7555608054959846 0.42277326501013857 0.4764485098958011 0.5978539082969487 0.9955108821504692 -0.5101994650086115 0.5251544189106201 -0.7830078727594587 -0.9978042257731197 0.6971502982191027 -0.48496852362497167 0.21703859400180603 -0.8969681946959567 -0.07653701515809552 -0.5560533826189438 0.3798442121034802 -0.4900784692495952 0.8590087821295973 -0.19600463091238152 0.3785839856088644 0.5293692572202755 -0.2326547030097723 -0.5642307735848673 -0.5761545351255797 -0.38703964287757286 -0.8510547017324968 -0.1482198286127645 -0.06035898909045301 -0.7314262088853172 0.07464622694728584 -0.8097411739817373 0.06538271662286288 -0.42321006471442124 -0.09879413195252007 0.7443090544561486 -0.6261076003721509 0.9111705435609507 0.032931995356537236 0.03873533165684062 0.4019908465482409 -0.9544285124138785 0.8921713935497759 -0.6476756260231493 0.5780042459411909 +136 155 -0.035647121378798774 0.8615934421988742 -0.08449861553923843 0.2123335455989137 -0.012213829072288185 0.27446088308486627 -0.2166406687739999 0.6435781610532589 -0.5234581230499717 -0.9919006610545458 0.7629191397368327 0.2761588237173578 -0.8059952864737532 -0.9399653303354671 0.4705219913040095 -0.2945370641144327 -0.5135753366590912 -0.6511537686871569 0.3260535553823871 0.19348463685880413 -0.24363005766004808 -0.023771323867746386 0.346541997260539 0.22216082143701765 0.6688549182867964 0.4547887025862425 0.04185813899220214 -0.12198859483325264 -0.8798888430802103 0.012201514980656247 0.839454390050312 0.8996494143049527 0.7064324067507741 -0.8301816842837486 0.051873829924501846 0.2940540086047403 -0.4682454459011982 -0.44988161303376595 -0.252337957846698 -0.5996945819123218 0.2342631284593959 -0.11776350076038855 0.5293634963069693 0.5421921845947764 -0.028278475750915355 -0.671822998811338 -0.14259900442581053 0.9591012741486862 0.1329759421047625 -0.9683916664655428 0.7697245532851713 0.9316423952749024 0.049164427768335406 -0.7792620941192492 -0.9990984588898564 0.05119187666877845 0.748082905641489 0.8892835258945215 -0.7936393629483707 -0.6345645404187032 -0.5720216860246916 -0.6505726291878957 -0.6209928278729566 0.009436047405230186 0.248686030263352 0.3227135308017184 -0.7799875403706049 0.8874991685679086 -0.23833392275506848 0.6043470686604329 0.212299369491733 -0.8301441147569186 0.5127843676861581 -0.10343764612854822 -0.018784135382037492 -0.27152634333583103 -0.9685407683387892 0.9709872068696956 0.8404344016006444 0.015740670920840305 0.21416352949952033 -0.9135023013468746 0.2124363090744137 -0.8591081537056604 -0.43667269391818064 0.24480816061023258 -0.7496681140441646 -0.8085082550188973 -0.09790140786008084 -0.6089903914063786 -0.183786481374955 -0.3519676598573709 -0.5505714935016142 -0.7382727890499314 -0.19578187676075198 0.9575900060171776 +136 156 -0.2475869616123274 0.8629523436101703 0.8541340867112923 0.2827438025169966 0.18522326145518875 0.9234751976880244 0.4144343174353371 -0.38345195652904307 0.7187387259562568 -0.7408927796908009 0.5648891338295741 0.008104312975631967 -0.5439531135106062 -0.9972044544441951 -0.996777229395148 -0.40141128562957684 -0.07375652125685472 -0.891108683868683 0.7967003971641597 -0.8064942570244693 -0.5574032161584221 0.6479894203532552 -0.3500982275201987 -0.3370545615595397 0.15897241944051843 -0.9864969821978158 0.7112160199477331 -0.4227027358639168 0.12886328053258733 -0.5366073918031324 -0.45833327925057055 0.25769047595377903 -0.8785460200720947 -0.6168808102746492 0.9797476989128535 -0.09058586237317234 0.9423153065979188 -0.2179368853096333 0.01779564836384062 -0.4933330446053903 0.11652528080640434 0.16691984016010886 -0.6422106320555117 -0.632660421509889 -0.5355155234737417 -0.13810135566148563 0.8667582865062358 -0.4489680961013338 0.18044356653176918 0.6518981192481321 -0.18091951806246365 -0.2061254410929536 -0.3493702569713264 0.5750194494348029 0.39075249493894715 -0.9752562376676595 0.8175212066486373 -0.15021056302380908 0.5425527885453472 -0.4268552816919031 -0.2710238570932939 0.44020148211800114 0.8718052447363325 -0.7535049192015755 -0.633727421357924 0.34060884439758343 0.20536080218031905 -0.976625310664893 -0.5983659497496123 -0.37664540241523636 -0.15590135080574674 -0.16452904883629182 0.939788899417173 0.07585068401391881 -0.37825153666559097 0.3892139457881998 -0.32765280461317015 0.5527870534927437 0.6030821862928457 -0.8205424617391719 -0.43245006294639876 -0.6231378767345106 0.8243657567022302 0.07727585634007617 0.7260582637112365 -0.06809871866500705 0.9052774542331186 0.8045879002351968 0.2560247127648574 0.49613436173975933 0.6350354268715213 0.7674291881880515 -0.7122920708121421 -0.6988188972346092 0.837176042846904 -0.42943990864925863 +136 157 -0.5702158530476644 -0.4953457569180886 0.7239290285589028 0.1366545854577752 -0.9096696205376631 -0.5614666504385535 0.47819751190960025 0.676425495313641 0.861558840514765 0.22596741888644178 0.41404220069964426 0.20523576940185162 -0.15457114524205262 0.5611391056100774 0.1485397031977962 0.8641549497590724 -0.4985851613698833 0.8974163479629087 0.5971878232138905 0.43136651218465283 0.43570572677498376 0.14463397052379134 -0.7732993663825254 -0.4026215925143899 0.024615488391720453 0.7719892717300831 0.6094293384571292 0.5722101803359063 0.4271857751457493 0.26846120643270965 -0.9574636819371718 0.2939465875671432 -0.2916443072070982 -0.935167118018889 0.9978268802909442 0.9221864796211787 0.8765717724038167 -0.5848481186541468 -0.926462247561473 0.23289246666175623 0.37773341662372806 0.3366017558086085 -0.3139328886409909 0.6338717606771436 0.22913795818360372 -0.07931159328461934 -0.10145722566066206 0.735497310668966 0.7485809811814899 -0.9818378565908279 0.09780411515500642 0.8970713735203328 -0.48870585126398725 -0.968671293592446 -0.9036076499890289 -0.41433769933830544 -0.1303670907532628 0.6379356578710618 0.5877931973784196 0.021417479640967407 0.6950510763512774 0.04323866231535134 0.28814767642020644 -0.05558208772238049 -0.28033006244106895 -0.7345729275341957 -0.1420043933366235 -0.020676175935067986 0.742830488530343 -0.7904549866087343 -0.33508005222764714 -0.20978998046405373 0.26002416849778265 0.875190875855846 -0.18862554764059292 -0.8463642092007095 -0.37717696095595765 0.8397004519968749 0.6654773398269977 0.4494938048657655 0.2612026067642601 -0.07162028909132578 -0.2797741893464789 0.30748168978445256 -0.12390776979609486 0.646697489061105 0.9734790943917189 -0.6440450630930648 -0.08718778755040568 -0.0022532194747575396 0.1660494391501517 -0.25632595431717164 0.8607196244252784 0.8872971462753829 -0.0969821811703313 -0.3448673497689252 +137 116 -0.6843384399881396 0.4832168189495596 0.2355838979792022 -0.5532225300627116 0.6715877707262903 -0.20122602330909434 0.6889537480757622 0.2553380048327212 0.3846339566588033 0.03216153757465068 -0.651785223950629 -0.11588516169087515 0.5787681960249202 0.8948845890087216 -0.0040299416739062455 -0.1293536168992393 -0.074248767017844 -0.5569354948666487 0.8706629015298994 0.13016153897862615 -0.755343853080892 -0.40659103805341146 -0.7338093382805011 0.297994821320273 0.24726303299448316 0.8626652691729912 -0.4127551927659878 -0.6914053555952022 -0.7514291545289504 -0.8751010416705969 -0.9925511881685887 0.4647960349855129 0.00907225936887035 -0.14432123780723582 -0.08914881841636779 -0.8077359164490898 -0.28837942569993325 -0.14480447616882075 -0.1815691191292801 -0.4928947648403166 -0.007210422733663124 -0.06730783622359904 -0.47566010916198254 -0.6365852499703741 -0.5812074241984537 0.8542609577427682 -0.5979781000361613 -0.022061752219601827 0.8197172942267681 0.425818083566732 -0.783100962953188 -0.039228134246258595 0.035869037651838465 -0.11882766126985 -0.9134143628658382 -0.4587855910447838 0.9245581980512041 0.6771207105774966 0.5723294838277968 0.9375517047555406 0.22140059195662798 -0.18265244774510658 -0.6373497804525279 0.37351394039415853 0.12423488226563206 -0.8179850990334285 -0.48611210652337666 0.4972705752092761 -0.6360877652650481 -0.895331644876058 0.7184816210868645 0.08183595235744012 -0.3470711534556967 -0.8831395662976886 0.9211323479909652 0.8060813980426957 -0.5567596227246316 0.567048786868811 0.4123309714819643 0.8845305570922526 0.7689201651703348 -0.19926129343179477 -0.39456068877220596 0.4053743208143481 0.9021322562168821 0.08670826900184414 0.7367118058923074 0.44737459210186903 0.7901625371780439 0.45075224578432516 -0.35952663930023543 0.40605061692886 -0.35672214892175713 0.5146624388437671 -0.04851791147556317 -0.5752257283824416 +137 117 -0.7029653178824693 -0.2827024995159322 0.33557168152946604 -0.3987344806674935 0.6621064205130167 0.9030926916672095 0.41435238891062864 0.2548653936480798 -0.7842135989833443 -0.655023624301184 0.058524089578384286 0.853762025200274 0.3229931023492698 0.12959129773742362 -0.6439932384507805 0.3669186717573183 0.511550567485086 0.12807267284226742 0.5955397148027659 0.8088443734462778 0.42129966678315767 -0.04724899885374634 0.5740228318957334 -0.46988887632453524 -0.39753605098278233 0.7297742185506877 -0.4760338282419776 0.3866725687114281 -0.9993993828832155 0.38453207118218713 -0.6716919988939647 -0.04030365705065475 0.48092564258320114 -0.9627506967796611 -0.7412156822481519 0.5186217463446572 0.41775816145704625 0.25690191638501414 -0.7939112016073051 -0.2215968623612088 -0.5298639740353226 0.20585079199060385 0.1471578926401742 0.29507583005877125 0.6372998620307517 0.8047322094328391 0.6893089388524312 -0.6730173583633812 0.6345499749769092 0.19391595591354926 0.5526222161726764 0.03813027416745052 0.47176314787004636 -0.20049497393236093 0.9865569625946238 -0.42232475282170046 -0.9917247603732342 -0.1756899128158944 -0.11906689333033404 -0.5863339876543345 -0.5068741530515213 -0.31659377831211444 -0.22368102071993912 0.5423242449905943 0.9249790328594014 0.3194125807096371 0.4319550506136707 0.607025984609191 -0.6710026062038557 0.020260993295402763 0.24217774268931458 0.13923780730140622 -0.1660217520700944 0.013206484430009935 0.06590541758390955 -0.4822629583851923 0.15850543360915403 -0.7213230132702773 -0.33875064329503934 0.3006316604329633 0.7778984024463251 0.09276295181319472 0.15854937953652048 0.8293237828789344 -0.09772752646436667 0.4662357435493525 -0.9238101137946753 0.9922159096401981 0.2990492073469422 0.7419121886923463 0.8585166689765451 -0.9753580388886136 -0.8424266184900553 -0.38697930034631023 -0.9235288713951932 0.028849099306035297 +137 118 0.8706528152227935 0.8533491643464324 0.5590357910980914 -0.7891863361697391 -0.5472596124960942 0.8722532719891336 0.37954658439197164 -0.1198792403519946 -0.887796874014122 0.06089295101051495 0.4747641414335677 -0.5874605948217926 -0.4475439414291287 0.5424967983849702 -0.22318733112735645 -0.5624946279450833 -0.40328287669112584 0.7032393587250991 0.10120580360602616 0.9526843387466546 -0.7296795141512835 -0.056215926381777415 -0.052256239884389766 0.3126917960315734 0.6309435811543398 0.27899498707465553 0.9857740755508002 0.3950967842500923 -0.8750372311903964 0.09921419093173522 0.11562452478247254 0.9831985899908451 -0.8620873409601717 -0.9336851047970749 -0.45481394425711974 0.8771229241037373 -0.5996312484817405 -0.8662104733034308 -0.46617494598765785 -0.9365416630909575 0.6284400809930772 -0.6096452862217283 0.6985085241959188 -0.2285568441507142 -0.7411450731353793 -0.8471908976387854 -0.1649107381701982 0.48083177547075007 0.44384316708927707 -0.5811426921532823 0.5700276774765265 -0.48246675034850073 -0.8927338785530872 -0.42272795187050427 -0.4810179484062449 0.79014709548641 -0.4889500218746632 0.7941513125492645 -0.3069466314397691 0.512632922047112 0.835863153563271 0.5843886559508253 -0.6726989233784408 -0.7730747103141422 -0.5644302164024895 0.5713524692103382 0.11235460694215349 0.8041963934588967 -0.280193725771406 0.9333726986930648 -0.15224317342104943 -0.4657375928496157 0.9297448297237618 -0.6148962147307078 -0.6577222411827874 -0.637731225780559 0.848474258841464 -0.2559226718476695 0.0868853399369307 -0.10359326769056221 -0.363728378568297 -0.6875559888715177 -0.3828479271959131 0.7815812693758455 -0.6862692849404997 -0.9140589328606634 0.08817503738979715 0.15701579010679056 0.12086635388314337 -0.18903110474848805 0.8846662241240428 -0.6852946027866869 -0.7867622366481213 -0.6718151691844398 -0.2729047064098775 0.4899794910608193 +137 136 -0.5915529961440749 0.9898559698058185 0.2268374341809931 -0.4785337978779083 -0.027003133476813268 0.07484402558207837 -0.7797624632742708 -0.13133627564259065 -0.3117119205727368 0.5030078591620766 0.09734849291381531 0.9260852950245915 -0.37293649263582695 -0.3502054853386072 0.48474000465162437 0.9005583782268769 -0.5126521532226758 -0.9199825666687262 0.19482290703920202 -0.5868325608907077 0.564040052323415 -0.1290269491931917 0.8719057111565294 0.9453606319304866 -0.6821505848743719 -0.6351592732924145 0.7776185601062151 0.31843234075624927 -0.6623567431483874 -0.6818332014914312 0.5022501147066982 -0.5199594396192728 -0.9953574767311792 0.1085769117327946 0.3520673368108267 -0.15179523089557811 -0.6880713272939956 -0.5205736178097877 -0.14501334907108165 -0.8182915155437038 0.11835213071963269 -0.5521173670087767 -0.9930038886580814 0.9009537689333325 0.3520485368836186 -0.27154550666600974 -0.7676151083432736 0.7058573205925831 -0.7374058791819826 -0.883353030006752 0.5067732524198982 0.09619672693361458 -0.7555608054959846 0.42277326501013857 0.4764485098958011 0.5978539082969487 0.9955108821504692 -0.5101994650086115 0.5251544189106201 -0.7830078727594587 -0.9978042257731197 0.6971502982191027 -0.48496852362497167 0.21703859400180603 -0.8969681946959567 -0.07653701515809552 -0.5560533826189438 0.3798442121034802 -0.4900784692495952 0.8590087821295973 -0.19600463091238152 0.3785839856088644 0.5293692572202755 -0.2326547030097723 -0.5642307735848673 -0.5761545351255797 -0.38703964287757286 -0.8510547017324968 -0.1482198286127645 -0.06035898909045301 -0.7314262088853172 0.07464622694728584 -0.8097411739817373 0.06538271662286288 -0.42321006471442124 -0.09879413195252007 0.7443090544561486 -0.6261076003721509 0.9111705435609507 0.032931995356537236 0.03873533165684062 0.4019908465482409 -0.9544285124138785 0.8921713935497759 -0.6476756260231493 0.5780042459411909 +137 137 5.667415291624283 5.261337503587331 3.709196244972141 4.481587137722253 5.297406999569829 3.985922992853343 5.328246917781545 2.094622559770795 4.92140359026804 4.225849976769348 3.4978454768945637 5.701011614311107 3.452630870350174 4.892249158002501 4.492304601086973 4.551286275219642 4.20219709724961 5.210143680779119 4.586628494870617 6.063222203016522 5.176244178386287 3.868288629431355 4.185970883563894 4.959191230630205 5.105901366193615 4.168289060289438 4.891094587345242 3.4737768938745264 6.176312699798427 5.08520000653594 5.005866800049504 4.190053514050864 4.441698311397912 4.754612841455186 3.6101710398145452 5.470671330065498 4.7817601519134065 4.927054228791703 4.49971494358764 4.692340153186584 2.7706123065695145 3.911427837450065 4.580121910282389 4.446763696152362 5.235397876554028 5.197823680039175 4.851184874130409 4.624840825963387 6.102009818999415 4.406012788236283 5.384513242239502 2.1000311320975085 4.985543428476753 3.3960159634393436 5.464512026127977 5.547444011947653 6.73386597415832 4.037543164163413 3.7430618528763464 5.808033148129386 4.8107893881475245 4.742573549353102 3.705858296868496 3.3300058150753307 4.457340180283001 3.9322711850031453 2.981999012316295 4.160121550290934 4.1169261009742915 5.524396045106115 2.7676207038292553 2.8310779323021826 4.092532481851847 3.015657258376992 4.2985375738812905 5.957680559892062 4.520787717906238 4.979866548415379 3.132525302894821 4.290760850421579 5.93254334097281 3.9870063488195093 4.581210833672649 4.6459035713108285 5.061863008121943 3.46431674162857 6.105740029946833 3.8038075026977305 4.467315074918651 2.6808947247424193 4.219141971765182 4.2685270730770375 5.183470073046043 4.476838386517432 4.73156149866692 4.1387344717867505 +137 138 -0.9559511430295669 0.6573078565127601 0.49989651512203515 0.18861660155086146 0.976616245659609 0.9107082963064539 -0.6168190416588044 0.10160296386291678 -0.8141781214216082 -0.6313145275997207 -0.5259369776097138 -0.37646057015388235 -0.35242241055389645 0.20731048015323195 -0.8480598657504905 -0.1830624174644515 0.15144035763187436 0.05902835461113787 -0.28791779072393653 0.9731895122434024 0.21843863631604332 -0.7869453554816443 0.2137503482280767 -0.9739441155479205 -0.9184080289810705 -0.11370360289259285 -0.9286287538010098 -0.8405519054034372 0.5485212901616916 -0.24431592493641485 -0.8671635656082037 -0.6153315272029278 0.6832795948634971 0.2775203565721742 0.06544381617615636 0.7491172665728092 -0.6365795399331791 0.25179677733778205 -0.401863065525482 -0.2661367058221884 0.7166590140215814 0.005529646550956224 -0.6831262574521002 -0.745472307773815 0.4159013591442331 0.315090950530895 0.7152601739823343 0.07135056297722375 -0.7817940708515378 -0.3909359089617055 0.7968388342366224 0.03710848414190271 -0.9260229984911037 0.15437436432482432 -0.4265398210052689 -0.32507479486356305 -0.9513845361331199 -0.312140002206011 0.4718282917839911 -0.8180842606637468 -0.4067440897490813 0.40143454977693027 0.01564672405233969 0.6868523110301845 0.12681759744013132 -0.5293587346846842 0.2627087496913796 -0.2323408768891675 -0.8041886392446576 0.14855265812523655 0.6475807181590143 0.11015264730712504 -0.8922404348168671 -0.03499429647262198 -0.14000009263669844 -0.6181373538047847 0.7003943698325603 0.5209778994312497 0.1933053597003036 -0.43006481152819886 0.8672248734490187 0.9738239456064659 0.3793594464369239 0.9057990461882139 -0.9097152809306355 -0.059695426749452496 0.9371545516365223 0.33883552552929674 0.24654497817808663 -0.4402343986297912 0.47233675905477757 -0.2836241464876543 -0.39727257301547936 0.22203914245005985 -0.08552821589602178 -0.5280898706529735 +137 156 -0.618339166512966 0.5941074480804902 0.3561900701370482 -0.59782464365768 0.11849967058145072 -0.21955299570357778 0.5109823979288923 0.49914427123893 -0.8693983560207124 0.7073052326988354 0.736245183705333 -0.7981018077373847 -0.8978030394112444 -0.7180330825800172 0.845289543328811 -0.34427929162715554 -0.7365138735375911 0.37644668493411637 0.8763735317803274 -0.4843094636236551 -0.2295672088024614 -0.9297859046111212 -0.4906483797215355 0.64006535553221 0.23980280352833683 -0.8401458242531068 -0.2328007306360813 0.11450349747538557 0.8569208239892148 -0.8778291301591885 0.47879398404467977 0.007111167321976808 -0.24712162731466436 -0.8623364770235482 0.5853030384568378 -0.6628418978770902 0.6790397472366381 -0.5158707169151069 -0.5376668369588902 -0.16715119565358671 -0.047173459511685056 -0.497141996656024 -0.5888710419409318 -0.42255865181486874 -0.8069248465555776 0.24792608722327225 0.41744175169672126 -0.5960160783421009 0.9105576932935542 -0.08875944896886634 0.2349779814607047 -0.4189762404302495 -0.7964023613313622 -0.6680759581267635 -0.031128403522366677 -0.713952234812572 -0.909778532639234 -0.002433287604933776 0.7192105349135882 -0.18216076148941474 -0.19519313524022452 -0.7229390574055468 -0.42450107581384455 0.039088480652783586 0.8516477806328169 -0.3664117836298655 0.3250482156716388 -0.09874349904928192 -0.2343176021639568 -0.773349471629535 0.011636791774172206 0.36293493934776433 -0.184131390639521 0.4583726524425742 0.18533949730627164 -0.9983121196392655 0.35542002379734683 0.8246452419398027 -0.6606113190468639 0.24759139369070415 0.5087864670067637 -0.32135533166014896 -0.9050022235464259 0.24840680893080558 -0.2411894568307389 0.4202743526351409 0.341872092083241 -0.3296623077594951 -0.8487671894569204 -0.0006413688069200063 -0.6028560329745651 0.354592549144658 0.3489501876632013 -0.08798781808822853 0.9443611225936677 -0.2754113537588181 +137 157 -0.425410653957927 0.0925400281850679 0.379996590132873 -0.9968405820990505 -0.6701229045922299 -0.047818304176796556 -0.43184577742635577 0.1492975784961461 0.032677579139759994 -0.46893308271507617 -0.31301968694179405 -0.8091592574440651 -0.018983539447733344 0.7900555734769685 0.3072855010150586 0.8525922114525921 -0.8077520162950671 -0.757688329495172 0.6680350143440639 -0.519216985201423 0.9174872527921016 0.7839978456247356 -0.18632363803146612 0.005665213867237728 0.8549823369203864 0.061962993687164625 0.19422175810228826 0.0943778220561382 -0.4537335415947814 -0.7249889249324872 0.1660834039979111 -0.5094596296964136 -0.6983294631999779 0.6172642181358927 0.39052163268816464 0.20428262424972599 -0.38145077229777424 -0.9583277312144136 0.45831063348982215 0.9645014255532112 0.0007134816556675361 0.6168091544025462 0.03790087077065407 -0.16027682136554122 -0.7670611076107756 0.8724030964857183 -0.6150016847604662 0.9625577770359859 0.6021446629664733 -0.8473297925584 0.8276049559711816 -0.007878629172489049 0.23658495025960802 -0.20044744434631512 -0.46581666309414804 0.772551517554402 -0.8880807497537135 0.257467950244767 -0.20615255669567323 -0.08027264671092582 -0.7837347763938176 0.8176250345055445 0.8781562311430031 0.12473104054484874 0.29659647924927945 -0.7049514515666018 -0.5168877565388827 -0.296247464551451 0.1658802560611552 0.9896543479244047 -0.12694539323245646 0.01056968584465623 0.33541091066681084 -0.15102794586955937 0.7384657410553648 0.7727313213589053 -0.5521308069887125 -0.4622597592385105 0.1251190615410418 -0.7865215555062846 -0.6039497856542231 -0.1063136555250539 0.3912023784676495 0.7367901966394532 0.7748298920260948 0.04059645602808559 0.8005612709879384 -0.15101912049581645 0.3870829826647004 -0.14139438304007834 -0.48988858572767424 -0.1489371793159251 -0.8216511978175718 0.8169248902173862 -0.8744737115747954 -0.5205789011716824 +137 158 -0.5431233062704435 -0.8343162904182395 0.5231230205137916 0.03240012343183163 -0.8654792277869809 0.6820488678050107 -0.9063308508535426 0.06103971116359208 -0.3804431731670399 -0.5266889228702727 -0.5897296171251536 -0.6556522577479555 0.022484554797084666 -0.8425916787765062 -0.9092607460752151 -0.4833748099229711 -0.3651330982921335 -0.7987461124399042 0.6477078084844408 -0.6455235787984379 0.65406608016004 0.7276704356234371 -0.7373521593870753 0.9530747698542341 0.5014287715990362 -0.3463670108562249 -0.20008518330110858 -0.631327533453276 0.42824139722135124 -0.6234604763397589 -0.5436129662223046 -0.6122179426610936 0.28021374510921415 -0.8219543991563489 0.2777800877927161 0.7655111794349916 0.447861826791738 0.7378279598556137 0.7733070060409146 0.1927352146756547 0.3614859566714774 -0.48817932779797113 0.2232330940676246 0.08563365491694319 0.06579438220064104 0.27435470081958657 0.38844350764851066 -0.5674849931313442 -0.555828453152293 -0.0019407211899700183 -0.2904499589268592 -0.6534838419752962 0.5645147015284733 0.5471254063111033 0.9740696765619523 -0.6442142631461119 -0.3612229978136441 0.6201984103280445 -0.06690203354043223 0.9574953073615082 0.5648249469976998 -0.8381570647691914 0.2390888147434802 0.4043659917154674 -0.45329028957899054 -0.039726517217378854 0.247006961802954 -0.628346628802466 0.6770048756642404 0.26087095179488684 0.40399852603664965 0.3342084975663686 -0.2519207195690698 0.20627552314231345 -0.24147821466806763 -0.8014634237837779 0.46093317719617355 -0.22813243230515146 -0.8862179055262431 -0.7033770886884751 0.8618260507220727 -0.9427179985091723 0.6773627797712869 -0.11536798183084285 -0.3574865473020723 -0.7965435259243914 -0.6931685781270605 0.40241031776131475 -0.26188252777587695 -0.018520151514551664 0.07205124196493529 0.8101221876990987 0.549840306195728 -0.49293860075977003 0.38530423780273404 -0.4257128304700599 +138 117 0.1279079320579879 -0.011766996669760665 -0.01259876829626494 -0.9697553276352484 0.17496497968947167 0.9349759299798597 -0.8682180093580893 -0.12271105760196677 0.19202180693557636 -0.011662713181726403 -0.8578274578227896 -0.12931256743492758 0.9859243357865741 -0.36047589520588885 -0.33522050697765127 0.10098623482407265 0.5239412974428583 -0.3567898852137035 0.9261809784278825 0.4359308496699552 -0.9108862599969383 -0.6218674418876147 -0.7582640687511863 -0.3660644933275581 0.6128097605982767 0.4376212752489359 0.29615199063932596 -0.09259714462714808 0.560813904601642 -0.004098214875080108 -0.8838543206215537 0.9854668672124147 0.9309265895339724 0.6288475959082829 0.2973589125316065 -0.445845697762564 -0.6231410828230555 0.9615610903344183 0.21381483149797575 0.7955382201709842 -0.37005685295037427 0.8738347592686486 -0.6232627242859066 0.6768267848991434 -0.5598933038057454 -0.5716537634261103 -0.2241300985235477 -0.8812190812603882 0.8119529444593272 -0.412127089059652 -0.6045935122918173 -0.6785596773733389 -0.09260558481716719 0.8736771514012298 0.27583175871027277 0.15366459394200693 -0.5277540861906587 -0.24779642890886144 0.35170528054954797 0.014498037037313116 -0.6364891644953896 -0.7412732820544112 -0.8787375184838451 -0.6891968689522763 -0.4330934974697833 0.7879267682942428 0.6370332484612882 -0.4746165360443322 -0.4767400328732023 0.688073271275885 -0.9574678100441107 -0.5514028670019331 0.4777707653395762 0.9360981361956975 0.3399129385089672 -0.7809987657720774 0.604972210016967 0.5156215839350256 0.823217608657699 -0.2051948678512061 -0.2744924675459781 -0.7253795978794999 -0.49415385931113276 0.9602900121685931 -0.4701640850969 -0.9997458370893921 -0.8035684740278224 0.9696705313200586 -0.37046712492454104 0.7579946212887254 -0.6224801838575058 0.7302566784656157 -0.9178537057558867 0.9209353943949949 -0.6914686547081994 -0.15826258226437595 +138 118 0.8807322891598499 0.34393656549887797 0.5064430919840699 0.27458123085048447 0.3339649405953351 0.1423268962683073 -0.4786702265562084 -0.8501132762065331 -0.07048847950612935 -0.9392347530271996 0.34161716862947444 -0.09729346336632139 -0.44118517558452197 0.4669781902521122 -0.23653239054870534 0.7030172688151972 -0.4057059299385688 -0.8337305351911617 -0.38999023326755955 -0.3072835023820868 -0.16657558174154263 -0.0012919637881416701 -0.5941284332079446 0.214316762765699 -0.7415047079467714 0.19849501701311612 0.8384643760181685 0.2999852385951325 -0.8676910780010951 0.22808141407886162 -0.8176627201281992 -0.18000474755099005 0.7851467120842865 -0.8475598473528556 -0.5591480211019675 0.8317912961610561 -0.8045566076973774 0.9969861179759871 -0.7453903462817943 0.03447412730202615 -0.4701736637492595 0.6397860902503549 -0.44105997818983855 0.6968511182982782 -0.40992534188187046 0.6029797280383873 -0.2855602639850512 -0.6956104069310032 0.042592803826873915 -0.8694318508514196 -0.7743513243135287 -0.4895047864925828 0.16588423818793907 -0.7853778515003118 -0.07675311746534397 0.17730858442539188 -0.09815497684206531 -0.7367894297080158 -0.9021808884886144 0.04139343169342413 -0.11955794811879561 0.3425896420087533 0.8353703254453708 0.3021286542893853 0.024904088815998815 -0.4882495535974132 0.7565944654788515 -0.5655633339696526 -0.2447694341572113 0.06455814638520052 0.7172634367945356 -0.9419260923254129 -0.9956003517896206 -0.4497561002659183 0.13862241506699968 -0.30329842171574595 0.26975386233828025 -0.34705065404933544 0.3812558853941166 0.481520549417376 -0.3910411094305817 -0.43528945021143883 0.09189296979895523 0.8274569965525296 -0.02856077630801268 -0.41180698707666785 -0.6852938359024383 -0.2605029952914335 -0.4588417127804403 -0.7752239917666346 0.2322875160429294 -0.343110376807775 -0.3788062319009873 -0.909991940542781 0.5869586575319876 -0.891039720805525 +138 119 0.3145909008870411 0.7727835170744417 0.8477227726220056 -0.5054745374836864 -0.5711702411666888 0.24819979960975513 0.868508428672339 0.28157023665592384 -0.5828232044890795 -0.6304684606742776 0.011933037613905517 0.30057814387432935 0.9186420336295056 -0.9107362843448787 -0.6010488292449592 -0.3431508135770449 0.15839950901589273 0.6962380554047021 -0.7390151593168672 -0.035204849455577 0.3437593524826883 0.4341022950911495 -0.5491318337520046 0.2794864605432481 0.1933689751178822 0.06125455389915424 0.8005700098333755 0.3438178803703016 0.5527823265352199 -0.9049503681719766 -0.48980679394315585 0.5313869188764917 0.7785780531033897 0.3717027071203052 -0.36177274447903884 0.8529701487310397 -0.2763662235119113 0.5231638972827801 -0.11493830543995953 -0.6651631085249357 0.8875322404670345 -0.9975496516988751 0.38867241358165616 0.45920796065406955 -0.18339929537823174 -0.8917887507380766 -0.7335247194815988 0.5630273645809638 0.6306028153218812 -0.47568500594360663 -0.051560522613671944 0.5467554395999421 0.9897021787714431 0.8116671113178549 -0.6735547926525023 -0.7522155373277424 0.8349495558998827 0.6117766262930229 -0.19234884911714611 0.6425210761061655 0.5335649301650567 0.25283583376648977 0.6989517962582072 -0.37139152239158446 -0.7147567318321078 -0.5045386377134613 -0.434789654912886 0.11037301505625807 -0.367813967293664 -0.526908344038183 -0.9900423345797158 -0.8806845263433458 -0.09308372024898737 -0.5313311265574963 -0.6445016985152474 -0.49074677698228353 0.05400857602439757 0.3199650878109268 0.3177169783627509 -0.8823499607769949 0.5215877967197498 -0.16480404867617882 0.19102465420390424 -0.9487750723364905 0.37528772662299903 0.13198640555885177 0.5291381143944809 0.5848700770472501 -0.5149922420689763 -0.7955655339935257 -0.7721306412641871 -0.6067500048465353 -0.3991455896992586 -0.5213319467969719 0.03935311782738338 0.1493245413266273 +138 137 -0.9559511430295669 0.6573078565127601 0.49989651512203515 0.18861660155086146 0.976616245659609 0.9107082963064539 -0.6168190416588044 0.10160296386291678 -0.8141781214216082 -0.6313145275997207 -0.5259369776097138 -0.37646057015388235 -0.35242241055389645 0.20731048015323195 -0.8480598657504905 -0.1830624174644515 0.15144035763187436 0.05902835461113787 -0.28791779072393653 0.9731895122434024 0.21843863631604332 -0.7869453554816443 0.2137503482280767 -0.9739441155479205 -0.9184080289810705 -0.11370360289259285 -0.9286287538010098 -0.8405519054034372 0.5485212901616916 -0.24431592493641485 -0.8671635656082037 -0.6153315272029278 0.6832795948634971 0.2775203565721742 0.06544381617615636 0.7491172665728092 -0.6365795399331791 0.25179677733778205 -0.401863065525482 -0.2661367058221884 0.7166590140215814 0.005529646550956224 -0.6831262574521002 -0.745472307773815 0.4159013591442331 0.315090950530895 0.7152601739823343 0.07135056297722375 -0.7817940708515378 -0.3909359089617055 0.7968388342366224 0.03710848414190271 -0.9260229984911037 0.15437436432482432 -0.4265398210052689 -0.32507479486356305 -0.9513845361331199 -0.312140002206011 0.4718282917839911 -0.8180842606637468 -0.4067440897490813 0.40143454977693027 0.01564672405233969 0.6868523110301845 0.12681759744013132 -0.5293587346846842 0.2627087496913796 -0.2323408768891675 -0.8041886392446576 0.14855265812523655 0.6475807181590143 0.11015264730712504 -0.8922404348168671 -0.03499429647262198 -0.14000009263669844 -0.6181373538047847 0.7003943698325603 0.5209778994312497 0.1933053597003036 -0.43006481152819886 0.8672248734490187 0.9738239456064659 0.3793594464369239 0.9057990461882139 -0.9097152809306355 -0.059695426749452496 0.9371545516365223 0.33883552552929674 0.24654497817808663 -0.4402343986297912 0.47233675905477757 -0.2836241464876543 -0.39727257301547936 0.22203914245005985 -0.08552821589602178 -0.5280898706529735 +138 138 4.6354963842436145 5.166648530542291 4.911664498310558 4.466379832376379 5.0343099966726745 4.052972152991981 4.743849895455067 3.9874059920282514 4.567715675342488 4.2639779553283415 4.926360946000328 3.569374636316569 5.725078030121156 3.8032295852114495 3.5949708490917978 3.3897162523271662 4.6960954059390785 4.548859315502376 5.298136484337565 4.450839532927527 3.97845532023209 4.788637306211441 4.98114512127209 3.604671263354083 4.7456506576900015 3.7391143966093745 5.292768401137251 3.8201258052869997 5.042633974582152 3.352752917028851 6.25745580716364 3.883914231223152 5.302191683453955 4.192583030997509 4.181317876242845 4.720511331691416 5.063405609586827 6.1785945219431735 5.241302119750049 4.312733796442859 4.962790453363546 5.131763158368204 5.328232954533719 4.053980108743295 2.914690645677272 4.173609634444539 4.349632408226738 5.3683632302236575 3.758406709354724 4.357503471483843 5.2711153064020575 5.1754983420534035 4.552491961731626 5.559833026486579 4.420833325082345 3.8993149723442997 5.943563612891781 4.623650834167836 4.171772210762764 4.327838784401237 4.421753598795702 4.371082060043883 5.754264840077005 5.694947274067604 2.9663032455425338 5.579636534921471 4.9965526404366045 4.758443456788228 3.701888445837091 3.4522281374283876 6.88016186759741 4.698275117712535 5.771878582434317 2.949555455335453 4.066020330468289 4.377139008157734 3.8122820789366827 6.02476738990595 5.706507696042231 4.383507291713271 3.969054289449499 4.736390759851876 4.832096233257758 7.0764427923225846 4.330321981621783 3.8677492574933288 5.374856076532914 4.314474277991927 3.577437157720309 4.479566509894833 5.136387239133898 5.1026969849734165 3.8258699944103522 5.088691945935523 4.013158067701668 4.441501341461418 +138 139 0.2331510034569757 -0.7413544651422721 -0.7918304945974519 -0.7819692487484933 -0.9632053064051729 -0.4213696334958983 -0.32235292230585033 -0.5733542235382536 0.8772080708099506 -0.39857620913674463 0.5062270275097172 0.9261775685791018 -0.9037195395830706 -0.4290831496942955 0.07061754883316285 -0.9303155824662208 0.9625355745982829 0.5115758725297745 0.9674328331822537 -0.6400135370255966 -0.6716075003405049 -0.9272241223124482 0.19440699513681348 -0.46830422432896657 -0.7669835847721225 -0.12015511553034552 -0.4420561547541886 0.44895148274856345 0.32523691285208 -0.5661788920336905 -0.635824338717865 -0.40514503010300196 -0.2551102892478121 0.007922582868242323 0.6861662475814931 0.24642285967620858 -0.5779954828845304 0.854086792811309 0.3554409734826627 0.10799448263422606 0.090528570478414 0.25921192362599044 -0.7185517724918011 -0.8538689295225446 0.06750884441514682 -0.12257278379347558 -0.2869127366044617 0.27011350280555635 -0.83095590530772 -0.8978898030623035 -0.5605370532901603 0.6518067848321283 -0.3233080487000213 -0.8267614814391018 0.8780489258672586 0.31063318350492364 0.8536837969515128 0.501388411543408 -0.24827675327394827 0.8586133065853148 0.4691532255395765 -0.37159474812525084 -0.9865757244231297 0.7061971681038186 0.3462050777052197 -0.22833771099370748 0.9535722243640572 0.7181384221577212 -0.5264248528413549 -0.2179167832049711 0.5016288979908918 -0.653625161593937 -0.8152965692453915 0.2746141483663591 -0.9200702037327024 -0.7248543918311876 0.329679205605484 -0.8336215133904012 -0.9230712716639433 -0.5531730046454029 0.3356625964551463 0.4887105967381662 0.09829506488392892 -0.6022753501849312 -0.6523209385626585 0.36699165693028957 -0.6647212251787775 0.4018124156232181 -0.24265833837862383 -0.2768744513717962 0.7602161312615201 0.929971355080623 0.43752745394971804 0.9671346896158137 -0.825899623649208 -0.5155259963748622 +138 157 -0.7775437520434316 0.7380207593550827 -0.5892018614902654 -0.5938910919102867 0.01334431206681419 0.5160910597576283 0.3835189524787037 0.6723172754875928 0.28350311181444554 -0.11324834236928116 -0.9295839598482727 0.6532085698952326 -0.7700786223826908 0.48513606820327637 -0.1436973806265882 -0.5670816937235452 -0.7769291482699969 0.4509588178106003 0.9271817356294063 -0.9331760936426212 -0.4799186721538842 0.7108040965093068 0.6831619545564211 0.0015190541583229855 -0.5915577062115218 -0.7081761503988664 0.3189645246786368 -0.5219397695475094 -0.7748469373078339 -0.587713763588082 -0.003924556814318025 -0.6546623748053533 0.46819583240186025 -0.3772676443632017 0.3459557084390905 0.12183627112415474 -0.6273437450952437 0.9154286339366116 -0.9153580528152003 0.20702697989084218 0.47721288099538706 -0.8593519485190635 -0.6469548973985282 -0.0657014389090036 0.6404723846901021 -0.4141008016221439 -0.9165601006811517 0.6785715567945141 0.04946271382589318 -0.3556457042379044 -0.5289499279993832 -0.8421412249034508 0.7176699776791151 0.2795816115712222 -0.9433404297440366 -0.8518746229740652 -0.8809238413609257 0.25828578551707393 -0.8908949135779598 -0.7895046415942784 0.30812901624986155 -0.48168817041248846 0.02055068705202645 -0.8370175698100024 -0.5492568720394229 0.8405462184694072 0.5221672912199409 -0.9843029632970628 0.3776417241245378 -0.3794593574499565 -0.767802367934489 0.23840620236300625 -0.35280031958055647 -0.03678699901796767 -0.5548564602514585 -0.25694282089785925 0.3139634047328639 0.9288501588135565 0.5552811625876859 -0.9014015164866089 0.74466419510514 -0.4023895630317269 0.8665545587997021 0.6729945244165623 -0.783935574707951 0.1487830956498608 -0.8361623632168638 0.008410229278458026 0.16142872552832 0.6835716879220235 0.8098260176351952 -0.495974087546895 -0.1772913247311485 -0.6238052042330355 0.23925320319425003 -0.04737609172711266 +138 158 -0.6436578012938359 -0.6217720617159466 0.7078000659753838 -0.2330965753286265 -0.8703430624762385 -0.15817200143081833 0.1319945332129553 0.7683980161573871 -0.8753854965356127 0.9841867819213215 -0.33681696690507 -0.379236189539065 -0.6692970817591899 -0.18461732071540138 -0.4343692502478511 -0.22550241306170782 -0.7418142934102279 0.6914118409461025 -0.19353961367960948 0.07509811966507263 0.8174699950633575 0.7582877171567652 0.8498516872693864 0.030209630796503184 0.21133983054717653 0.7663864534727061 0.4677533948259014 -0.9017679693519327 0.18731432326582387 0.7546938050891436 0.9678354538045928 -0.060057602600195104 -0.09322599666529219 0.1834809752520803 0.3009343069369135 0.1362015400881631 0.30066386954391233 0.8462246774883291 -0.8762185533619431 0.786380167046344 0.8200274093045992 0.10843056193543088 0.3735365799180954 -0.18179950361710784 0.02912020518867009 -0.9151456345341169 0.4373739375623844 0.8393751058503993 -0.36036628732673104 0.3579816274282239 -0.9456312679390331 0.402027445043456 0.08421156501988114 0.625922173407129 0.4764432701008843 0.7927944299009568 0.6061206742255196 0.8182101218516418 0.20758005493613196 0.06544266566582979 -0.9152972874921503 -0.7006957966353096 0.8118836742162707 -0.6902352776868328 0.016364887242169113 0.7079687507533441 0.7470717511352511 -0.5664909020721014 0.5034983143578013 -0.5674145725739594 0.8046647581481552 -0.3071920748428696 -0.6734823601568511 -0.05644560147033917 0.4681339736439465 0.7750510824036776 0.4183185763181445 -0.6174490287410748 0.8318717488338896 -0.13235520265881817 -0.3268764787101526 -0.8004849984484221 0.8411374366307571 0.8038458600622709 0.1327572120985494 -0.8369019804505893 0.3532339630545487 0.05227449234582848 -0.03940157582757009 -0.3352848799877328 0.4558727251102628 0.3158230478523236 0.7687349377180224 0.4335198507615128 0.2014396536109866 -0.5613175971720683 +138 159 -0.6477252246505913 -0.5680045123497768 -0.22501333111623523 -0.14126138150540668 -0.9152364487100151 0.024085410425690235 -0.2854404755444828 0.5809803707365637 0.6738276063154127 -0.15903943100715656 -0.8969970195739274 -0.6224520164480778 0.48522137826203404 0.29051991624654994 -0.18394151968859096 0.2095901170705099 0.9678921454721425 0.6332391669821822 -0.5912759787279747 -0.31446491972414403 0.26486063053638764 0.23938447873991375 0.5147337518068518 -0.9047710505129745 0.4377670085997516 -0.8533049623791091 -0.5873374446665636 0.27478203651452127 0.510418771711503 0.027403522626264554 0.803169674944334 -0.1429722522490109 0.6732531653922873 0.8347232667947908 0.6698191004504108 -0.6327555810435999 -0.7566007816599567 0.7081964653650481 0.9391141847683913 -0.8191339813339653 -0.19273434587827243 0.5874447369136535 -0.7015888777762902 0.17345123134451534 -0.16646811507403947 -0.20448444390627007 0.18547002711356142 -0.46157782922146184 -0.17424626877677052 -0.3524403597062582 0.48019644144340234 0.7807209672327882 -0.9336954582019283 -0.3605222138095221 0.6399653895110884 0.21822650970574298 0.4778258787081948 -0.40846166047888066 -0.04212231765097307 0.8914877293990562 -0.5548793531066465 0.4850561730045 0.8029396292001441 0.9341263592465603 0.32614947536377303 0.5912865427353016 0.33934053138526243 0.8692544330006096 0.3831165556682128 0.6372479697492253 0.5711022991279913 0.02527967537049869 -0.8608957658235223 0.5183415971517276 0.17388433044275553 -0.0781045004234111 -0.8148173111428998 0.9613784251115547 0.7394781988326713 0.6087958997446195 -0.4415371528828036 -0.5674699084267341 -0.9153049543984746 0.9600497118435438 0.2831345024737266 0.07834233976169847 -0.31956145750064757 0.6989566191124974 -0.6147224101898305 -0.056106487311835096 0.5701200989940984 0.7135838637113472 0.15261336416234372 -0.10723600580098624 -0.40572208149232947 0.7067766632913932 +139 118 0.3348824485171207 -0.5569862330790742 0.5963592281848349 0.04189702272255791 -0.02631274539881101 -0.07424817414813512 -0.9306654902392726 -0.03316412425212656 -0.9618599250492113 0.14864706511005732 0.5012833026932724 -0.7410625716003172 -0.3210881036742945 0.8107098204377279 -0.33393765643979845 0.7406657480142689 -0.19964221025458495 -0.021703375501860522 0.2152285562060685 -0.5831243459859348 0.9913945110531965 -0.6989575358196729 0.23427940555686178 0.7787397714186255 0.17633472221761703 0.4995780373969696 0.8072750619822993 0.6138222294018749 0.6300015633725944 0.3604471507079994 -0.5255074009628418 0.07485891146210943 0.15215629544702458 -0.821093192214347 -0.6844157310020977 0.24208497386984829 -0.9717792083741135 -0.9381097082268712 -0.10313207345224584 -0.5042593521215843 -0.7634485529912891 -0.26766636417505585 -0.28284485462166686 -0.45545883355499805 -0.26113530913966065 -0.5752186612342467 0.4270943692305509 0.20421810967928367 0.46570092431440036 -0.37871078686233695 -0.12953521202285945 0.39810444249319876 0.4212665512988554 0.43561973751957384 0.24314037461021876 0.481675995110479 -0.8017844735929434 0.3294722202075919 -0.7631893183023444 -0.8619935655507895 0.8878894063081135 0.6016015689349119 0.4277704072333759 0.14346381519620688 0.7328303294435214 -0.9046267590987471 -0.34326848968519874 0.78734597112267 -0.6087979966241532 -0.2690070947875931 0.3358040634971835 0.12339854758676783 0.01404823458646498 0.37209823454770463 0.009735008799408362 -0.27486717518109893 0.9246310315903072 0.24956478097978785 -0.02813083884939127 0.5126752725234718 0.9459317100481399 0.09453669536097209 -0.6486639118173516 0.9640884687983904 0.5882350009479409 -0.21561176346347288 -0.9872245335594043 0.4122507346412183 0.9759149982304876 -0.4067592374690008 -0.5484907701932873 -0.7146321682615351 0.6252309290681615 0.9462707440268527 0.7280560079298277 0.1549301129451126 +139 119 -0.09300726253734659 0.9914441100177891 0.5908789425903633 0.08247730516418805 0.9750204958408231 0.38866171660334525 0.41240457178809664 -0.8306461988405565 -0.7333210005552222 -0.8702180822397865 0.6492167014999985 -0.6479536839063715 -0.273658349243032 0.5855373663823149 0.688828824671911 0.0008033319105833492 0.2835703112302188 -0.0448999354744386 0.39206310798313915 0.8136807420334204 -0.38628830028835326 0.8596573277205353 0.0037750564243133056 0.5852514939200921 0.9719459704597326 0.3035941166851899 -0.7562832874535641 0.023864092833200568 0.7393019541929946 0.7938398320915774 0.8652151066501546 0.25618178592671303 -0.617577751282081 0.0890497062789164 -0.3568258218560405 0.3429675630226654 -0.5149187652939342 -0.24276861076341372 0.860091232798563 -0.5672976597542991 0.19537710339893022 0.7960898203891291 -0.49168736807834135 -0.06293636632420241 0.4310255148576103 0.26858735588086335 -0.8276053165459731 0.7546714992140706 -0.09556122283330915 -0.971180468707532 0.6393998948031305 0.6466570254638586 0.63460130490629 0.3158154063628147 0.045209075319243786 0.808860153855882 0.3444801097555148 -0.3782631372615619 -0.8886375653625889 -0.532494152356406 -0.13449826141129906 -0.6570580257428742 -0.9556956280005826 0.7926121873340504 0.9895927842469423 0.05082239206923078 0.6852528291235565 -0.2662431407904824 -0.4682666206192534 -0.1703934181992497 -0.3792041878214769 -0.22320313987171336 -0.37422006045000233 0.6238383900617097 0.15468959413432426 0.23234079578740174 0.9331496407073532 -0.24761228039922223 -0.7759034331673105 0.8063664650800266 -0.858847286975563 0.8982290214032151 -0.7166393977150394 -0.9507398584411655 0.5155337925037322 0.14255942539043787 0.8890375188110924 0.6628168732977913 -0.34877140668325124 -0.730228779141346 -0.7315254666183872 -0.6577117657058795 -0.7336947306865251 0.3100245721278836 0.8911037905195085 -0.8236620025016386 +139 120 -0.42771371601076624 0.7999259621710602 -0.8275312166533524 0.28052193163304984 0.5980127398649042 0.5849547713980703 -0.9666221538019197 -0.4178574406489115 0.727414045914125 -0.23036405495225676 -0.2923742574278938 -0.0764617093940605 -0.8812538053129999 0.6351373540233993 -0.9966758528727777 -0.4241081552373551 0.7882938776387642 -0.9966409172139206 -0.26605863961753395 -0.3233343451849078 0.6027234750100965 0.3460330641184006 0.8770042848753388 0.7000139456355061 0.5920660341184381 -0.39947391249025554 0.7110839039189429 -0.3540866750214584 -0.6319427740419543 0.34632840492918326 0.5756867478691561 0.7743241733412731 -0.6249346798788904 0.015901590049802516 0.8506574062449754 0.9567258173488522 0.8582911489308913 -0.2965503619928589 -0.14498509503809798 0.691482167429982 0.2092506873601292 0.06404089014115688 0.8601827992793045 0.8367065205102009 -0.9780936384504018 -0.6101110396126683 -0.3637101577247779 0.18769250753766187 -0.864064266248211 0.6180068981584914 0.04278357384780107 0.0994941528223856 -0.8726894523501942 -0.14998615697443252 -0.7973070011663062 -0.5430471462312894 0.7399574855650897 -0.5038756395945405 -0.6556052492473274 0.1456476061369698 -0.6955558485030799 0.8822697772385277 0.7866423147628347 -0.6015779143266893 -0.016972987704936493 -0.4240775864493236 0.32479518595664514 0.5946802316565403 -0.8011323447920697 -0.029598531271928463 0.19236761845460237 -0.33895811063030523 0.24378591363765256 0.19508322347603824 0.563123955710698 0.21667838187587374 -0.3107909604744481 -0.5833533491461429 -0.4762251343889168 -0.06847681169476605 -0.3137226307181378 0.3779213204297951 -0.9240115213101892 -0.6365477546632292 0.5152459736301742 -0.8809667800176009 0.29850056136065284 -0.5383749798168069 0.6972847266932543 -0.6152580308959923 -0.3301395898791688 0.6003630767481953 0.8180623274971179 -0.8940701347569944 -0.8669318104802337 -0.9874147635871893 +139 138 0.2331510034569757 -0.7413544651422721 -0.7918304945974519 -0.7819692487484933 -0.9632053064051729 -0.4213696334958983 -0.32235292230585033 -0.5733542235382536 0.8772080708099506 -0.39857620913674463 0.5062270275097172 0.9261775685791018 -0.9037195395830706 -0.4290831496942955 0.07061754883316285 -0.9303155824662208 0.9625355745982829 0.5115758725297745 0.9674328331822537 -0.6400135370255966 -0.6716075003405049 -0.9272241223124482 0.19440699513681348 -0.46830422432896657 -0.7669835847721225 -0.12015511553034552 -0.4420561547541886 0.44895148274856345 0.32523691285208 -0.5661788920336905 -0.635824338717865 -0.40514503010300196 -0.2551102892478121 0.007922582868242323 0.6861662475814931 0.24642285967620858 -0.5779954828845304 0.854086792811309 0.3554409734826627 0.10799448263422606 0.090528570478414 0.25921192362599044 -0.7185517724918011 -0.8538689295225446 0.06750884441514682 -0.12257278379347558 -0.2869127366044617 0.27011350280555635 -0.83095590530772 -0.8978898030623035 -0.5605370532901603 0.6518067848321283 -0.3233080487000213 -0.8267614814391018 0.8780489258672586 0.31063318350492364 0.8536837969515128 0.501388411543408 -0.24827675327394827 0.8586133065853148 0.4691532255395765 -0.37159474812525084 -0.9865757244231297 0.7061971681038186 0.3462050777052197 -0.22833771099370748 0.9535722243640572 0.7181384221577212 -0.5264248528413549 -0.2179167832049711 0.5016288979908918 -0.653625161593937 -0.8152965692453915 0.2746141483663591 -0.9200702037327024 -0.7248543918311876 0.329679205605484 -0.8336215133904012 -0.9230712716639433 -0.5531730046454029 0.3356625964551463 0.4887105967381662 0.09829506488392892 -0.6022753501849312 -0.6523209385626585 0.36699165693028957 -0.6647212251787775 0.4018124156232181 -0.24265833837862383 -0.2768744513717962 0.7602161312615201 0.929971355080623 0.43752745394971804 0.9671346896158137 -0.825899623649208 -0.5155259963748622 +139 139 3.1516895825540807 7.3720311438525 4.436219140155318 3.2840219653266054 5.096683352464617 4.219655660688591 5.276575999159682 5.178741115977836 4.902218450708172 3.7366213952730956 4.933891952848654 3.4687196886589025 3.6064467231785193 4.377175012153451 5.529296011771953 4.565394544879091 4.621270597559417 5.367989391659906 4.983650516834212 4.637292719543218 4.994809355758981 5.402753644926321 2.8654114214482123 4.358093140426341 5.0069734101100085 4.0563567449807545 5.935461467369339 3.014256110453652 5.612853893027958 4.563500108804099 4.36066317929302 4.583772883386278 5.079139711462104 4.628186776894121 5.216563171436203 4.0518530852609995 6.782173968763585 4.200331830562034 3.663687593488254 3.916754733771241 3.036308086281722 4.117269007387787 5.1669057288296125 4.563055421490549 4.826543650705367 4.244654638187124 3.3350958130218475 4.183499214418223 5.477775314941253 5.488763895522064 3.264044034957039 4.332192472310954 5.589988258834356 4.872034244710834 4.299759542981732 4.848351953852424 5.670374500411338 4.586756226697952 5.223175102120927 3.8774261532798473 4.1563752074868106 5.438486970260536 6.688487006162823 5.166155650896386 5.825714639264517 3.2021048415061677 4.384820535380732 5.057948574698755 5.560264363166369 2.9605876090338095 3.2558807144368602 4.9943512295738985 2.7422078699956995 5.453490289054253 4.700874319978122 5.101282539607778 5.299328372789855 4.013742151210109 5.137753309307309 3.844869127074823 5.101279994047777 3.9000607287680373 5.155239941896888 6.042763481443753 4.988558257265058 3.847856692628194 4.844601315006514 4.41694744409493 3.962267527578616 4.386102679927594 5.554363839294913 5.420366141199295 6.0427169210414196 6.037954131420963 5.680660555960517 4.691281370094034 +139 140 0.39476902788481194 0.9204891279405516 -0.21538882881830035 0.5403893241072364 -0.23839025637902256 0.28884062955638257 -0.9944141161991575 -0.33948798779593825 0.6707095180683778 0.38116075762277934 -0.02389704477072585 -0.07500893086305704 0.0299974445295339 -0.10721097305668215 -0.6615629799676597 -0.3617418863566588 -0.3420055311327166 -0.921303284138637 0.6908967176975527 -0.4678273177941952 -0.7999043335051084 0.6220933511605291 -0.2472286507490271 0.22361095383621943 0.8606194856198759 0.025432980118648363 -0.4031729415718399 -0.16161593428571752 0.8543021261749271 -0.5008173266521745 -0.15011978528088488 -0.22365637327439436 0.8880735139454226 -0.964723026913962 -0.22527780189121183 0.7019652350472065 0.9600124956656206 -0.20196135658239367 0.05356265517086589 0.336103598118493 0.496303237930124 0.8101543683338985 0.33228351825625313 0.7169863423694507 -0.17785413294958796 0.21667566389587845 -0.9027156371796499 0.1386512588626898 0.7615185828500726 -0.17673668162682854 0.4220353108331618 -0.6349781170039901 -0.5723177512910027 -0.9402148391955383 -0.2084740114813417 0.4243487182332133 -0.5119801945828382 -0.622868408114259 -0.7920017441688938 -0.1140642953218991 0.5588635906591812 -0.3606171071185491 0.5211288733266268 -0.3183926945933859 -0.7758902412164808 -0.04359468917338272 0.44281387739680844 0.8602045925497526 0.534402317840375 -0.2129397233413055 -0.24512609649067119 0.644778604478419 -0.5885774637481695 0.9945991865638839 0.5546268893212429 -0.08791449326741985 0.8956438052899125 0.32706558364926863 0.41115495629638676 -0.4448046154258214 0.9595693327076498 0.7945644908700071 0.5785079126153698 -0.4903838757968171 -0.5376656828779929 -0.42576579114967483 0.6632101755503028 0.15059754649430745 -0.3212421417079534 0.29338449839045677 -0.33674216931037537 0.2793560006932636 0.9580591836152854 -0.8257111022713206 -0.3160086478407127 -0.7111923760523811 +139 158 0.9953453347887116 -0.9730070573912002 0.7014203662791003 -0.03334103393972909 -0.331116761269324 0.47570928963164905 0.8670506740867752 -0.8035990783690867 -0.16449667504037424 -0.9577533483409417 -0.6239036702133567 -0.6722361568922859 -0.30726682850267495 0.5216926560391772 -0.7473910580635517 0.5286173127131284 0.5328759178022093 -0.9500715860346012 0.6144483247325803 0.002325415078498372 -0.3603950338888764 -0.013566050826437248 -0.14926392368528663 -0.28642290473413956 -0.30886284418519594 0.9751089257593579 -0.8702249293397468 -0.35741051315355543 -0.8226231216476165 -0.22950459854047867 -0.14029645485400755 0.6649968536763682 0.8301162689494737 0.8424526929724521 -0.8807551374239535 -0.003086462349414898 0.8688251055740019 0.07025405269803464 0.9274965481159734 0.8546070845134717 -0.12298754691711045 -0.5704312646546483 -0.6218878816578972 -0.7121851248508111 -0.9337225339703328 -0.8277440265413443 -0.003964557452649009 0.28659535994570295 -0.7378652101903131 0.7821092201942594 -0.09406118667378172 0.3034997511063804 -0.8907191580747169 -0.2262658647230973 -0.8633774982094933 0.918544044629932 -0.9857772880072766 0.0803731380825703 -0.04479020446412152 -0.5306269024033072 0.7949720959513631 0.3635416978972299 0.5696745312459437 0.5852639061983351 0.913877681538672 -0.07018881755949735 0.1938154411665458 0.012745954814327165 0.8265839433959807 0.2591787283327862 0.47686053163291886 -0.40511426753015867 -0.17277461647083414 0.6879532187751525 0.8531922697669205 0.8975697008473349 0.11058733253751418 0.4315243535272153 0.48302933575222196 0.4925215035032866 -0.24772195481438275 -0.06772318245198239 0.4380591125053197 0.3867973551188095 0.46722734948008404 -0.8357039631297651 -0.7906961707090876 0.6118332303980047 0.5765511701329853 -0.22771687778032623 -0.8647417929142516 -0.7435461634226295 -0.5553340470645816 0.6281294274639622 0.9450750077868599 0.045702219603078076 +139 159 0.39998713630063265 -0.5140265723974253 -0.3791015574693479 0.4861083827555097 0.8014496235960615 -0.5040779655875707 -0.15999477035478882 -0.5514525300517736 0.16378869417167063 0.5158504433031286 -0.807512383955584 0.14620424635629492 0.28619151783594554 -0.09615330348079332 0.513891636357134 0.5141194445232524 -0.8848902301116408 -0.2341510798283155 0.8802067784899021 -0.8796264966211929 0.8326801955394747 0.961105954553579 -0.10925837305737152 0.5268778884821048 0.5235083981314275 -0.9378181802748813 0.5256262546266093 -0.08234689552796981 0.1073645412387838 -0.8523795558789267 0.6805040808965177 0.8477046231410015 0.22208465935601773 0.8690057107759868 -0.2542702173372724 -0.27474436245182887 0.6446015232865048 0.7435433452295295 0.5576256390713972 0.07699462671822865 0.2483723449693931 0.2814538233813686 0.7195299247861502 -0.1075348937185776 0.8315105010550492 -0.9101243355681954 0.4211459117257066 -0.6327703464851606 0.7030155571224801 -0.5421947094272339 -0.3700202320750625 -0.09196373820118864 0.9443170022370286 0.9493523349715243 0.24544875318348436 0.14919681047195055 0.11493454921072077 0.3117508626966916 -0.9711475115442243 -0.3174595925191479 0.49445604199688487 0.7465704038168843 -0.96811956515953 -0.7097630328149598 0.35752686698406944 0.3663547313981659 0.5552765961121784 -0.35380261966269866 0.7885065995805445 -0.45154183880390564 0.31848843587525955 0.9065792670188189 -0.38464041241592395 0.7155609304340484 0.07339829856720592 0.9344353783509727 -0.7219360497999632 0.15919881958270565 -0.6606975576383962 0.28842587699016264 0.01247429665143951 -0.33142884701633246 -0.662866038086237 0.5340383742862826 0.7192891249033866 -0.18515558923678466 0.07909611918168835 0.7803812098833094 -0.30272621473919537 0.8594673217415116 0.8916839942386188 -0.5507713412440456 0.005177364110210858 0.6595902007616328 -0.1923493833808858 0.7451976281341208 +139 160 0.10670156196287928 0.9215938488971984 0.030653450697187612 -0.5948112402156955 -0.3678655056436868 0.5409926384288046 0.16845183991671542 -0.700388783474833 -0.5435170254117827 -0.01112175785891889 0.5359726341857329 -0.012597273534342701 0.22199330838479048 0.8479607126132618 0.6464848819271924 -0.8159822864892092 0.12541001192771328 -0.8193107065942338 -0.2092691802311466 -0.7453547776315834 0.34592815524904297 -0.833886207723425 -0.15220097380406128 -0.12385587471744186 0.7999165855340347 -0.6550840851309212 0.9926709562157987 0.5146374934697351 0.8232018024868859 -0.2926207546250217 0.6193870011932137 0.5062790112732345 -0.8101780053281804 -0.7040233898543493 -0.8361592241307731 0.6315674289119375 0.9020701261932365 0.01851788808994259 -0.3256320772631969 0.09203925030138183 0.1134322142736135 0.3031503472017938 -0.7844868105742151 0.300173273486227 0.4971653937808813 0.5706804417119973 0.01657579183608293 0.834204716305877 -0.3684558655976362 0.5589716219353196 -0.7565767453240346 0.6668960404895683 -0.10944528791920338 -0.3829097674686577 0.14847957111627808 -0.29341448838908213 -0.5536555055041483 0.9563410740295726 0.058854080602380954 0.3423127069589762 -0.07740338311605544 -0.5405622883924841 -0.4739750216473235 0.6841483722435726 -0.9789481589209086 0.7357216096895889 0.09411667550927949 0.6199622177475692 0.47545721866248236 0.8024565360881233 0.691804200558009 -0.9614531039546252 -0.02316089124196319 0.621116597302336 -0.8603192397218062 0.9965943879317583 -0.6490858433230569 0.7513945811153304 -0.7748510628204348 -0.05041265962373531 0.8481175006765156 -0.35688597337443406 0.34739689454871825 0.8812162407323989 0.39287129285100875 -0.22116081970568935 0.20495302268425575 -0.6062408051275432 -0.2203445442051375 0.5770084040195607 -0.21533679445145237 0.7621845584214175 -0.9258062336044213 0.013386392646785206 -0.6541854503472022 0.4933613353822959 +140 119 -0.13465325944858697 -0.4921969821963086 0.46150893899583445 -0.0004216807833563596 -0.2440316749758571 -0.8072200051958467 0.01650177672012787 0.45678900205845396 0.1339241877144952 0.042440112761080284 -0.597761319241255 0.1659881461755246 -0.923864704586645 0.1321974159646273 -0.11337641800889053 -0.38315757382629956 0.374070575914351 0.8145510992681775 0.7050557648328166 0.6515841047675426 0.4141721103731957 -0.44330130970335335 -0.3221345809145302 -0.9550824235336384 0.598165966788031 0.9565857592766225 0.23263507646166048 0.37257355655668434 0.4013760075044628 0.37047226450521653 -0.34769538333245253 0.051582635731672655 0.7295671239234309 0.013507946945758853 -0.5392255129763945 0.9952511640838333 -0.15521798387220542 0.4572363914703932 0.8535590018187402 0.4244759533032052 0.22045331986044525 -0.9880394126700744 -0.9503336408639014 0.8755791005334712 0.8559907403572558 0.30816899784786833 0.5845578897214239 -0.3686975355478459 -0.6224013043149215 -0.4299147866307138 0.8610407943965954 -0.19740513038030838 -0.08379497777906053 -0.7078087217515554 0.4175742751159699 0.4696736438644984 0.663405882908054 -0.06132834060413894 0.5155629061442017 -0.2556520413651544 0.20194674791741796 0.6564987573160699 -0.24619737881593173 0.2019010331781368 -0.9819742754444103 -0.03802746882198704 0.8240224769891851 -0.9316052181514483 0.9549772132729328 -0.7722824829599995 -0.8230760652477196 0.9171438924469488 0.4398662984127124 -0.9876856859337804 -0.7073477427886068 0.21834019252297265 -0.8089639870840735 0.24027067235260136 -0.16064386729998614 -0.44009252977463076 0.7527545549938599 0.7339882116399974 -0.00985499617869623 0.886478005913033 -0.7122470604525739 0.6316968594639125 0.5576658423360197 0.41618938484060575 -0.19040999840531958 -0.25013638146115147 -0.44367149217799096 0.9745488187517024 -0.013713372767768517 -0.13228408942142322 -0.45744771734517764 0.35950629639082354 +140 120 0.29366475178916995 0.5814345665224729 -0.4422931741120584 0.39092191899347495 0.7104298004863985 -0.08804729435764092 -0.124015411145048 0.0864150000153816 0.5047277084139841 -0.3363230530781329 0.0015028668766714492 -0.6326116006792804 -0.22482028260390008 -0.11479698073016364 -0.00098918958617622 -0.6164285864053012 0.5633560433412836 -0.05343544302695613 -0.13655967900136434 0.7257292207990966 0.968440870580292 0.33651113155834755 0.3781974274008699 -0.11556349152325018 0.31152247356189977 -0.47961843151412165 -0.7549911086030567 0.08875390576410314 -0.1607848161430161 0.39460674018950126 0.8046316420960777 -0.4845080872937577 0.7620858411454781 -0.6320426629242863 -0.513244966185209 -0.211424715801817 0.8616753706024325 0.8275799392342749 -0.5593967785382994 -0.16025571637607716 -0.6631853481885601 -0.8628330620326972 -0.7220940508261191 -0.9868736241544076 0.894724149791025 -0.41580956357955134 0.23016295366502693 0.14719706206181304 -0.893119355144246 -0.2782343502370177 0.2839288228514949 -0.9022388601054798 -0.8635406068535896 0.7571569635478701 0.29395759409316735 -0.3213548257878436 0.5919060037348967 -0.8118133087846109 -0.4244251749840078 -0.5395988246939505 -0.3207996604349812 0.718713904877309 0.185970867897576 -0.2091299368437669 0.36051451741636065 -0.3536339124023713 -0.5756488737245038 -0.02097810122031496 -0.754727675196541 0.3385039127813334 -0.1688612132625471 -0.7566635715900929 0.1998729655600453 0.5603932203058362 0.6628061346721061 -0.03705886742672404 0.3382043981328213 -0.7468342198971643 0.6036147868041588 -0.11371222620402488 0.9366667440533702 0.4418114822151751 -0.7518247018378474 0.6629332633515841 0.7347296087417492 -0.6497686624834202 0.4153674107425174 0.57195757274346 0.9212865257420004 -0.6246460257702473 -0.508202943508371 0.7597611702105287 0.5234402693288847 -0.7957949411466074 -0.25034767476829467 0.093796171179509 +140 139 0.39476902788481194 0.9204891279405516 -0.21538882881830035 0.5403893241072364 -0.23839025637902256 0.28884062955638257 -0.9944141161991575 -0.33948798779593825 0.6707095180683778 0.38116075762277934 -0.02389704477072585 -0.07500893086305704 0.0299974445295339 -0.10721097305668215 -0.6615629799676597 -0.3617418863566588 -0.3420055311327166 -0.921303284138637 0.6908967176975527 -0.4678273177941952 -0.7999043335051084 0.6220933511605291 -0.2472286507490271 0.22361095383621943 0.8606194856198759 0.025432980118648363 -0.4031729415718399 -0.16161593428571752 0.8543021261749271 -0.5008173266521745 -0.15011978528088488 -0.22365637327439436 0.8880735139454226 -0.964723026913962 -0.22527780189121183 0.7019652350472065 0.9600124956656206 -0.20196135658239367 0.05356265517086589 0.336103598118493 0.496303237930124 0.8101543683338985 0.33228351825625313 0.7169863423694507 -0.17785413294958796 0.21667566389587845 -0.9027156371796499 0.1386512588626898 0.7615185828500726 -0.17673668162682854 0.4220353108331618 -0.6349781170039901 -0.5723177512910027 -0.9402148391955383 -0.2084740114813417 0.4243487182332133 -0.5119801945828382 -0.622868408114259 -0.7920017441688938 -0.1140642953218991 0.5588635906591812 -0.3606171071185491 0.5211288733266268 -0.3183926945933859 -0.7758902412164808 -0.04359468917338272 0.44281387739680844 0.8602045925497526 0.534402317840375 -0.2129397233413055 -0.24512609649067119 0.644778604478419 -0.5885774637481695 0.9945991865638839 0.5546268893212429 -0.08791449326741985 0.8956438052899125 0.32706558364926863 0.41115495629638676 -0.4448046154258214 0.9595693327076498 0.7945644908700071 0.5785079126153698 -0.4903838757968171 -0.5376656828779929 -0.42576579114967483 0.6632101755503028 0.15059754649430745 -0.3212421417079534 0.29338449839045677 -0.33674216931037537 0.2793560006932636 0.9580591836152854 -0.8257111022713206 -0.3160086478407127 -0.7111923760523811 +140 140 2.3707692409324737 3.6314829401633464 3.5334613718222343 2.3397276215815377 1.9103458091394705 1.8303894628968767 2.315046064278291 2.6434353474958265 2.2581419311899 2.673857988192214 2.49904815968973 1.7717355978614524 1.7990023477199328 2.475092731243529 1.543435868000622 2.7342523143940536 2.8699006386374126 3.6925723233893493 3.4896163694754803 4.167312841592832 4.477447537386129 2.7245992161078814 2.131179315738006 3.112396105017419 3.596130243059601 2.712636554483659 3.246872787565412 1.9389833850594793 2.3112709670234315 2.4113837041997996 3.4611641569501277 2.296115442995241 4.21385764206325 2.7422876107327365 2.8679206130269654 3.6802346775144796 3.379634976326326 2.2952204165020995 3.1183892344448605 1.9655900197785148 3.598436912451751 4.235209088750413 3.7757714433769545 4.285998015684589 2.777272378678859 1.977834890142009 2.9573622443837313 2.0689858042629012 3.307629402979117 2.048829776011541 2.8464518566889168 3.2485576827255738 3.0750852494494607 3.502525270674064 1.614007387106919 3.1702537577840184 3.0483843056879643 2.6092422402112856 3.3110769594484637 2.4987573454616037 2.582974582629332 3.292382352666874 1.9217533413708372 1.8743894927517293 3.7300551324510764 1.9452744957149928 3.029587195597733 3.7194135649907842 3.802584121371263 2.54396065470193 3.3514506544940046 4.063808374157162 2.903318303562784 4.947777083093337 4.245067204442017 2.1225700555827176 4.210495200093181 2.3279332268665787 2.474897292105914 2.2592761690264687 3.662157702437024 3.1649567257267472 2.7057985236572106 3.012419407428012 2.995864901484917 3.0196502797728297 2.4254090615619335 2.2971451637523086 2.7969451066326325 2.309200255581638 3.5016782118592333 3.967603160727312 2.7017612672837696 3.682567291094839 2.835872179683443 2.4347861841455507 +140 159 -0.5013920693346434 0.4330587796205976 -0.6569055995087241 0.45350456740667666 -0.08884875247197743 -0.06344600768587272 -0.5204444687051917 0.8476472918626818 0.13503351256242513 -0.6246754498671272 0.25840660602393006 -0.29968984080727745 -0.24252544919684582 0.5377933192864077 0.07107048573848451 -0.596637981839403 -0.7193205785741623 0.6227107874247744 -0.6957333081274035 -0.8790838100076173 -0.4949824828655205 0.18244021634814178 0.36035841463396046 0.5460043622018493 -0.37858343173293796 -0.27683200030631583 0.8894090190015138 -0.5427425103201837 0.1257383561572949 -0.293364592070251 0.36302960006720997 0.3976664401786725 -0.46296850534864853 -0.6112430626326957 -0.9038118441794225 0.5317926764757683 0.7101103720661923 -0.07729360371326166 -0.297348286340654 -0.052605980813435815 0.41590037904879296 0.738619645849397 0.4730912838479644 0.7511349491922994 0.0923961747865214 -0.5100340850374514 0.4498302193358241 -0.27113296453688984 -0.46773206512552745 -0.08333651920526686 0.01009175749493485 0.31385972255345185 0.7777462973474603 -0.27068951353062354 -0.46274958700577784 -0.0982865294056936 0.024901411403112972 0.11243736736336163 -0.9269258085813488 0.31137221844669116 -0.21777425293802444 0.24289198675702384 -0.514884325965759 0.15980501498711197 0.8544853490895281 0.2848291471801929 0.20218737523697006 0.010456975743002639 -0.44222059365562405 0.23605559477762972 -0.9697849679807613 -0.8708751517431867 -0.5438358902866562 0.8690775302496161 0.920188649578163 -0.1754040626442659 0.7746783951194334 -0.31566926755838254 -0.3457497719120852 0.21027910830959629 -0.05598821279653299 0.12738708762845707 -0.47855353982762816 -0.02516546140860565 0.547784480225374 0.4387018127147342 0.16478074001411835 -0.1337072713191334 -0.03659418654309343 -0.6704371191340972 -0.4957545451912815 -0.8286865669127128 -0.15235447237929955 0.1111886473362047 -0.1620872238180575 0.12901557129723762 +140 160 -0.840687830194053 0.2677087431109444 0.988780039140746 -0.9097739687808231 0.5804927427815301 0.33036366461430244 -0.5832312391314209 -0.026129577106796642 -0.12800702493077365 -0.7262785612079963 0.8391226316355236 -0.5506145193252796 -0.22168908647426533 0.6645559267735486 0.35231527604884505 -0.5420426586574472 -0.15629655145368448 -0.3582898685168432 -0.7052033483532725 -0.6908055965742561 -0.941304580971668 0.7571926836421383 -0.3752872845495314 0.5373517886411472 -0.5805552409441819 -0.7686452517592757 -0.5339844859649658 0.4469218696425119 -0.454776804351251 0.4903656983487603 -0.9487138305097462 -0.8364634594533489 0.6268553454490822 0.3421157076967041 -0.6299197455405454 0.7208631446574494 0.4211078076396946 0.09420447998932024 0.7180048363630345 0.9124807878251271 -0.9101709800376223 0.8193612815724078 0.7928396327524196 -0.37566253774209235 -0.2031861986541592 0.28303270149014903 -0.4962001639024862 -0.1453554635350005 0.0702272470998484 -0.47757257876058623 0.4369920627206323 -0.24606617990677937 -0.5887203889671282 0.46049445172656056 0.06973307420005459 -0.9880950983255825 0.4179985285470209 0.33794968072044007 0.21675723205947883 0.3269104448771889 -0.8135977276172779 -0.5216006019966049 0.4483176949830492 -0.635207728348631 0.5058008658568078 -0.8024242134848452 0.7096932468019306 0.9649817345961358 -0.19180415996025535 -0.8005227442571416 0.8550820022892827 0.20945697443169875 -0.6220468275514941 0.876396669949993 0.9181054451552668 -0.6309296338646062 -0.9964664533029093 -0.051430541132910346 -0.2977349544876613 -0.9767971879634336 0.3132896403243386 0.14072202958750357 -0.7925666396707205 0.3367875681119661 0.25078814835722074 -0.8640661229933273 -0.24950450785078204 0.6965009337319392 0.7612327542283799 0.08851272997137993 -0.7961702793346792 0.8123494456644691 -0.8962880555319499 -0.9954214480581105 0.6726729473547284 0.490201799606363 +141 121 -0.9924966040648631 0.49414971631714955 0.2904971207772473 -0.3447383069247345 -0.19986447348194503 -0.2134776956927915 -0.5685451225278861 -0.04602788948410241 0.9661906169596963 -0.21590529193396346 -0.44713628971906494 -0.8480886369117104 -0.9996711437253791 -0.9800202927731185 -0.9089276620660802 0.2268005062256584 0.09296986364371884 0.5373869316284026 -0.5729224378569999 -0.7365745601208364 0.9443956633494954 -0.3071466412180499 0.32664294393287907 -0.5638394479737581 0.5958868096156174 0.13585692733133414 -0.07149118603376259 -0.9615153831534644 -0.9694689448524563 0.30960917506832253 0.05680001257491507 -0.7360107271817209 -0.43554973574417954 0.5214452035620718 0.3085760734081384 -0.0634672655513342 -0.6174530482914649 0.31577745461775764 -0.22756387508176656 -0.4209227191009792 0.5709811280142902 -0.8414108433242813 0.4972285511401189 -0.5717960644310234 -0.16731409974358402 -0.731341037126876 0.723723159572542 0.9305977915841854 -0.6490258900429406 -0.70246890257719 -0.03628725182124248 0.5657847722990195 -0.7547674850988948 -0.20934301365739483 0.5057963497673499 0.04636687356803115 0.8936937414577621 0.006659090861807604 -0.9022721278358632 -0.3207502384394083 0.5319471084264988 -0.6804916789180773 -0.11663495676459679 -0.4834040833032951 -0.7544371027977166 0.24227642008956463 -0.41012052094936924 -0.3332191578853487 -0.5425350065475696 -0.3617783794193057 0.9297236300616136 -0.13661528347704954 -0.6892640492777449 0.66625545913669 -0.13581323583323224 -0.2093363727278943 -0.17759164270331462 -0.09297343599363472 0.2825051702694754 0.26077354895918026 -0.9527133010986091 0.5467327403066977 -0.06086627410024614 0.7761320922360933 0.6904383247829899 0.17391438330374442 -0.6711534896912066 -0.17928359747891665 -0.9523292733054489 0.9771042503516656 -0.5596016229572585 0.08164555520944594 -0.05368122423356403 0.9643111180733395 -0.691432149596183 -0.6960345061372211 +141 122 0.03663362901568257 -0.8455839545161545 -0.20594075177423998 -0.6125407910170015 -0.7869649483283792 -0.8571646849806465 0.9296267995929417 -0.5468451335078408 -0.7046285900545266 0.5333862961446594 0.9640876638653653 -0.04797728835763415 -0.40997958444457394 -0.34023361996244783 -0.4072440997921898 0.6511379127920478 -0.179119657019998 -0.20236383904606403 -0.9171616734472308 -0.65069368057342 -0.8648119893832147 -0.31794897189082194 0.6148171483559772 -0.9636659737732478 -0.0908698631012268 -0.643645767603656 0.7281692528374182 0.24226745923882587 0.7330373499316389 0.18200171951721988 0.18100380883603728 0.778661746344657 -0.5192180285762678 0.5412014074359657 0.6314273164114477 0.35259417548245575 -0.01938418886949922 0.1277486069886573 0.24494483704692804 -0.7557628193720949 0.23009859676561906 -0.37811588746394365 -0.7315170354178293 -0.12679295388327483 0.3925571699558581 0.6804798996889025 0.8047618199707296 0.670845091296556 -0.3857667797172182 0.12245020110393745 -0.16416832306266715 -0.5493149169586931 -0.4440822781194518 -0.38663271550610023 0.35961592610862203 0.5799139378965581 -0.3347806968479998 -0.6433692217102427 -0.11460726200209304 0.5529201745793473 0.8888990811052759 -0.8263830379989217 0.1838967797508977 -0.024746043851487487 -0.9862767681475255 0.9472621142680115 0.5499677261673042 -0.9985491307410386 0.4728026381927595 0.5142419246103047 0.9040662793450123 -0.9444834734084917 -0.9401489986072105 0.02189404373165127 -0.2767254378116528 0.4911661662506208 -0.5004479512640807 0.5471584125131856 -0.056137510117219236 -0.5126210828706104 -0.9953173741381192 0.7884427449690878 0.009963020187493399 0.7239546848433482 0.8916506830915543 0.41408492685462606 0.8372120308727362 -0.4387143841682577 0.4962124675397719 -0.12009761329661695 0.7857754759255187 -0.6290668035250715 -0.4772941123596137 -0.4880757023088045 0.6753884053402726 0.7500758589849932 +141 141 3.000780834793898 4.131308664639012 2.954951570988774 2.7834664190579117 1.499491557277088 2.7188687804647156 3.4855638386682806 2.9794627659720936 4.532017984611057 3.4431061470870263 3.8196507554638046 3.4488928537566084 3.4575058582321185 2.330186896427122 2.9273008158061433 3.66233653960737 2.347469161820692 3.214668760897961 4.155774758240571 3.1697013335517843 3.8232071820863176 1.869608875201054 2.972879166742472 3.5257915843455794 3.1436504803412557 2.7660406016414907 3.6975373289985205 3.5799456892550614 3.0958298213940125 2.48849271185785 3.500551038381213 3.877671936912687 3.7827354725419085 3.324843099016956 2.810865305674609 2.8091359985028252 2.42712448130887 1.4137481608652596 2.051048936629342 2.751319653976445 2.9208222454996333 2.5851895215782816 3.157886369452517 2.397383462121411 1.91964922149342 3.8051466574017123 3.5522488763467823 2.815626819850154 2.7676278271230146 3.1753134902273286 2.6747679069202728 2.7371326972955714 3.576558546679495 3.015146993795045 3.0897872361431595 3.328566735531777 3.154931699974191 4.2642355254439845 3.59397567128038 2.5590644233374253 4.3178511746526 3.8814269298009725 1.528295218904865 2.835802569085896 3.3500198526068345 2.0319090702978353 3.619230226710359 3.104647657009279 1.4987008002237483 3.6099331116448834 4.395538517236591 3.0745291674629645 4.267187975198791 2.4139023535262414 2.2681311918874623 3.2963050622557306 3.0049381480273376 2.3042658886760385 1.4166618251157144 3.3421003791643686 4.024337987984948 2.371441292897071 2.3288549888534282 2.919651068328701 3.3624837441165343 3.279878033551795 2.5324632537109046 2.6807220295311796 4.0064702172707065 4.4297302238795115 3.552522376900569 3.1071857784505514 2.8696833970043545 4.0513225576764444 2.9941816199389435 3.015741738286052 +141 142 0.17963117545089569 -0.9785284440873276 -0.5807399978609862 -0.28791194622953387 0.1502632955345402 -0.527191259817728 -0.8528069481886347 -0.6525795435058981 0.6343444454838005 -0.8683134333451925 0.824912862121276 -0.753464015070056 0.7456740839512581 0.8245803721299929 0.4604226115089953 0.3598570424686487 -0.009468125008904371 -0.574562014129127 0.38847718781885 0.6871255469145028 0.7955188506198143 0.027499643854309586 0.8286205945164153 -0.3281234701598803 0.8525262122440747 -0.09311395292264191 -0.7242331960123607 0.8566650990763254 0.539606536750646 -0.5175066848370913 -0.9521600375703108 -0.5247657974591198 -0.45969931730972835 -0.6544137796244536 -0.46266746742702014 -0.7744305312260604 0.21967114284137534 0.31038533626347764 0.33519903480471225 0.11649971230851319 -0.586676420210291 -0.5100198688043123 0.2742087893794056 0.5705885422792418 0.35913450081480236 0.7714639896836479 0.5832233205147945 0.10132480863253757 0.12752078604205397 0.46664992131065564 0.7783301611455666 0.2892717894483523 -0.6534271011128101 -0.48145210511862624 0.10368942524883007 0.17453432011415404 0.10723928539000815 0.9936314524255325 0.9992518641228776 -0.8567523709218516 0.858296650246426 0.37731832134723553 0.14872253829943793 0.5813091853749541 0.46614532692185184 -0.0903064324872962 -0.8711040498146525 -0.7350853084878177 -0.0173297423689327 -0.7453825409495483 -0.5118904232125296 0.03131553324073866 -0.7952964219854286 0.0966798913064073 -0.006455189861771515 -0.6820433499425147 -0.46332972708377107 0.6194240339875694 -0.12220797116658 -0.24917534851371115 0.27071426978052426 -0.03161268269940565 -0.4766046838682161 0.4360731271345657 0.2969389144599279 -0.7814245033915119 0.15033550563411602 0.8188332749477798 0.616463046019819 -0.7567448267540382 -0.6286781912671686 0.5791290995905141 -0.68310305375695 0.4131942074140924 -0.8401997312472058 0.04548911817063339 +141 161 0.6702570297284249 -0.48621117175126427 0.8694136831771133 -0.7247202053501578 0.014317399687693744 0.343624570630122 -0.30629535934651986 0.014477817154551431 -0.6448897886083371 0.8737353809870854 0.4795629293108097 0.5738987053459288 -0.048861091062986306 -0.029748009163811373 0.01514304578303527 0.8422171493736064 0.6437173480817588 0.6666363529203729 0.8322377993892889 -0.32615322736565466 0.08117259606523453 0.2673273216735026 0.23035789129067696 -0.16440798586785 0.07043657483775778 -0.676660641768801 0.7765332689380706 0.8465365879042963 0.293982876700261 0.4617587333007871 0.5682517658353425 0.42669414171622244 -0.8575629970307754 -0.1956977865931251 0.47650844635146616 0.20376406533296687 -0.11709728357522864 -0.2545086962511658 -0.39055128947898976 0.5494760621843082 -0.08406050994740877 -0.35627424295376975 0.5079500172437408 -0.5750129276376421 0.5999277158406491 -0.874860236148369 0.27192414150413646 -0.6031362026888285 -0.11656885100842995 -0.9588013974815623 -0.8898605063321852 0.15030221502638996 -0.7227650643682397 0.8327897469603331 -0.7420221893103562 -0.9684509259067717 -0.5135077819369684 0.8614779215129187 0.11605513666409917 -0.29146079902875943 -0.7884687165379931 -0.7360254317005146 -0.061964648513005205 0.49348939070633224 0.6819636245779628 0.41634849448737277 -0.4335642689430217 -0.520047694385698 0.08393776680721965 -0.6048746358400872 -0.6322409166822731 0.7921692554803381 -0.897512563418218 0.7933609993304112 0.8668041885509314 -0.6542136962210852 0.6311229475820326 0.3927210917646602 0.14762886022099186 0.8053502197071283 0.022516966992472964 -0.9012552516079282 -0.6326153752815107 0.6066051775747687 0.43535374477862 0.4736599911896229 0.4169390028181954 -0.01718865158545224 -0.06376305207735267 0.8906784104658636 0.8232725517307378 0.7021265676955377 0.8805515782378772 -0.8069586294645481 0.5912300400191395 -0.2893275106811497 +141 162 0.3642272516428937 -0.9143374791552985 -0.5268217826004193 0.36174056477130634 -0.20177336283441671 -0.38034619014591464 -0.5415421092078754 0.8297144760954775 -0.9761432348301271 0.3271993704438634 0.30253766018075434 -0.722903162447796 0.3013727102553887 -0.049817305150591684 0.4544589399971539 -0.7865196951231337 -0.6428872105486203 -0.46219631066014766 -0.6077210982398231 0.030778586380274753 0.9076831634261919 0.6655262186748587 -0.9206842178070482 0.9737225427436669 0.609600883966037 0.9334423271716512 0.9552517223315873 0.3252295171621866 0.038298376600871764 0.36834517829614577 -0.870098416842914 -0.9478000053538245 -0.8946456698534291 0.5146438199805885 -0.6012300604969203 -0.6817405694100311 0.8752887895978678 -0.09329464998484749 0.11333243704873963 0.5758727292603174 -0.4753139791379153 -0.47051863507647673 0.9936751993256148 0.5025126785997522 0.12315439721320853 0.14372148659938833 -0.6885647883403021 0.49162027092879623 -0.6969017201488883 -0.07828556556899757 0.6780849496909567 -0.4415721990486261 0.9972345817244659 -0.5660006195065124 0.6835706249069333 0.9320847778139332 0.6928746630545073 0.9713141107708279 -0.7750521514073625 -0.5246645630634732 -0.6610803342753082 -0.4468070336779866 -0.5370761221510387 -0.5481447623283606 0.2315762383798874 -0.02873073944425064 0.3547979240157604 0.17571243341377762 -0.24614745266873372 -0.9197780497854959 -0.4838094642478479 0.6334138011708743 0.6738989368827288 0.17413287325875815 0.7712330884970393 0.8045502154797235 0.5138940234467788 -0.5296902376871591 -0.20621514709712185 0.852192923301206 0.871370448846507 0.09999713652888409 0.17623258164347355 -0.34313219169924825 -0.37170824905964706 0.4373877822486023 0.29708802194119355 -0.7440269201655756 -0.9850609615926389 -0.7317780043211897 0.24571315707910002 -0.22238540352414038 0.3374579064608132 -0.7322437824166381 -0.15405309126082 -0.43980163794127036 +142 121 -0.18479728225169656 -0.2525966020077901 -0.11434479753250937 -0.3763784145926876 0.5157618453002413 0.30094712041661453 -0.04815478767027859 -0.6226359502151722 -0.532728816413605 -0.09459151794513154 -0.17970576656186443 0.43342711947014756 -0.46051441564996054 0.9760713632874853 -0.8525067945400095 -0.37991946231558704 0.48319377719683687 -0.4617606284020095 0.6307772005455377 0.4806772759874909 0.41673986864301615 0.4015949075530545 -0.3604976780278666 -0.8275767870144981 0.8801256262491455 -0.743784466051463 -0.8189868616477489 -0.309866935591971 0.07806396135047233 0.07905491953002008 -0.7751466544703347 -0.699572139537521 0.9603528764216671 -0.6185486453699545 -0.9129423200242324 0.8804177933515731 -0.3635604982844902 -0.8652134446186186 -0.33344541178120246 0.8347714111797089 0.3487843953964844 -0.665798511097927 0.43267442188979954 0.16597494052839146 0.947350461360772 0.1975839436977751 -0.9286667346765709 -0.45791684611791594 -0.008506012971425614 0.606343122085961 -0.5820364984202111 -0.3187053860640161 -0.16771569757005578 -0.030482922456666728 0.29505618511700704 0.9368851033581425 -0.8273860985918084 -0.4491448517451486 -0.3321122803704335 -0.5607529106905087 -0.5057337095199494 -0.9190153070331282 0.41432987331511884 0.611490565766621 0.32280798426750623 0.44248669097430393 0.7702785120750348 0.5252327964067645 -0.7267258484208583 0.803090257621013 -0.7488653878482927 0.5926253294497261 -0.6806643730745721 0.894931512978492 0.9829649632786253 -0.9261558020453216 0.38291623282233034 -0.782505638788519 0.8038599713417387 0.730965883893276 0.39887045907724294 0.2533879501455141 0.12293768927997917 0.04298693812914012 -0.34668851841386616 -0.017396850714450407 -0.7805568511346288 -0.827306111983036 0.47832949461915075 -0.2779955908043701 -0.838459436508979 0.9227857308446323 0.24716376517369154 0.5560951955915912 -0.7182690660541604 0.3840004805585311 +142 122 0.3341812422517585 -0.335871105876661 0.9989146450143913 0.9918953141056694 -0.8804168659229856 0.16119748487814323 -0.12195615760879397 -0.7696601477390832 0.49339244302683394 0.8128933309446691 -0.2575818613284415 -0.919024749155938 0.6342183864290833 0.6297667696096756 0.4999460186960767 -0.8689304712887163 -0.7481171340757897 0.006611663596155504 -0.29506665719985414 0.3725203861955124 -0.4505640076115198 0.2301827147058424 -0.42666818935371675 -0.4390744423380981 0.39714996922753265 0.5708474191340591 -0.494996820849803 -0.7400793402991523 -0.2329133868792881 -0.3376445152225156 0.9605495348034303 0.9548589704984054 0.26842492242295024 -0.7122919680668798 0.7504698403353545 -0.5991591595853796 -0.5282394986801635 0.2888374474167854 -0.3498212471978712 -0.4737053211331501 -0.500392837197084 0.8052037629060917 -0.12004453536334614 -0.1307612232007338 -0.6212012428553093 -0.7545646529277441 -0.5009483693641164 -0.7270727981964891 -0.7431992050285106 0.20216750342550371 -0.11690164992959784 0.986441437208655 0.679983243760492 0.3485603303883593 -0.5401429570562313 0.981320041718458 0.16652497399996724 -0.2625282090095411 -0.3921885762686488 -0.8651367033494517 -0.7148658542683552 0.6224508061259728 -0.566510533927886 -0.4167616720715248 0.911770341481072 -0.9526769324966102 0.2610800466215033 0.9967972007468251 0.7039836533564674 -0.8105968053895545 0.4558302583726368 -0.5529033614728847 0.5791006933809837 -0.6675762787504256 -0.17006664054417842 0.665843022164399 0.4458374768000002 0.6832630608600458 0.9689019747440377 -0.0008982731898101726 -0.09485490790686746 0.2204739350449516 -0.979975941600908 -0.46494443369037763 -0.5742661939607796 -0.3382432055449853 0.104730374564453 0.6852702798084065 0.38717197206451814 0.7938454882284749 -0.8915443784255044 -0.41945969389829396 0.37832090249626615 -0.6912890728924896 -0.9736079756146245 0.643293598478522 +142 123 -0.8980634338237896 0.7252170140473704 0.5638840441238948 0.5156406669977849 -0.5845469449082359 0.3889323608384825 -0.5746480276905881 0.24703202254996515 0.5492832760095134 -0.5086819909101763 -0.04623472768165038 -0.66307166742296 -0.16161054780729756 -0.6607328664159693 0.7520364191883291 0.05997489503393183 -0.7854079477449547 -0.23811289718056483 0.500007111245288 0.5301240886004115 0.8320620086699517 -0.3854094243727533 0.7680150288469465 -0.016990895344846324 -0.6430437237084323 0.7662538498315117 0.454283000501879 0.4002314550958954 -0.44573317431168014 -0.1827571850104872 0.7600933873996196 -0.38515330432786965 -0.003234196435319081 0.0457668405176086 0.41625447602269783 0.5578789000430495 -0.602395853578181 -0.314942847265981 -0.10732020800140085 -0.6233193887047144 0.3429848132096005 0.46134171180373484 0.35431874114554973 0.9704094865253183 -0.9433172879540195 0.464093899884336 0.09848335652733708 0.7772367697784488 -0.6017740837603325 0.3401570514038521 -0.8283495413753401 0.15587080879758908 -0.3249176532779203 -0.9432125031659802 0.25385317885633185 0.6500501740066058 0.5177055296301487 0.20327425270809618 -0.005554668693731335 0.3083586131740703 0.3770750245394414 -0.3261252521166178 0.9941298420080211 0.24569972243837834 0.751908629668814 -0.22075654998442595 -0.09203110430612194 0.6782483466931919 -0.9346814888659276 -0.1277655131504265 -0.8064085689724372 -0.7790128974805486 -0.6885832997176342 0.44066672602134127 -0.4462746363994936 0.86514504190633 0.00758993273366837 0.3113628027832873 -0.44067646986891673 0.4254564881162177 -0.08144748585689587 -0.5390093650051271 0.7593562363086712 0.7540679676299555 -0.47480826446049873 -0.282188100214088 -0.2320091885435025 0.46610565505272894 0.23399132161233704 0.2807509914998112 0.9229380494305952 -0.06228025349648214 0.4853272154401913 -0.8520940809227093 -0.6091462509447865 -0.7463578363780712 +142 141 0.17963117545089569 -0.9785284440873276 -0.5807399978609862 -0.28791194622953387 0.1502632955345402 -0.527191259817728 -0.8528069481886347 -0.6525795435058981 0.6343444454838005 -0.8683134333451925 0.824912862121276 -0.753464015070056 0.7456740839512581 0.8245803721299929 0.4604226115089953 0.3598570424686487 -0.009468125008904371 -0.574562014129127 0.38847718781885 0.6871255469145028 0.7955188506198143 0.027499643854309586 0.8286205945164153 -0.3281234701598803 0.8525262122440747 -0.09311395292264191 -0.7242331960123607 0.8566650990763254 0.539606536750646 -0.5175066848370913 -0.9521600375703108 -0.5247657974591198 -0.45969931730972835 -0.6544137796244536 -0.46266746742702014 -0.7744305312260604 0.21967114284137534 0.31038533626347764 0.33519903480471225 0.11649971230851319 -0.586676420210291 -0.5100198688043123 0.2742087893794056 0.5705885422792418 0.35913450081480236 0.7714639896836479 0.5832233205147945 0.10132480863253757 0.12752078604205397 0.46664992131065564 0.7783301611455666 0.2892717894483523 -0.6534271011128101 -0.48145210511862624 0.10368942524883007 0.17453432011415404 0.10723928539000815 0.9936314524255325 0.9992518641228776 -0.8567523709218516 0.858296650246426 0.37731832134723553 0.14872253829943793 0.5813091853749541 0.46614532692185184 -0.0903064324872962 -0.8711040498146525 -0.7350853084878177 -0.0173297423689327 -0.7453825409495483 -0.5118904232125296 0.03131553324073866 -0.7952964219854286 0.0966798913064073 -0.006455189861771515 -0.6820433499425147 -0.46332972708377107 0.6194240339875694 -0.12220797116658 -0.24917534851371115 0.27071426978052426 -0.03161268269940565 -0.4766046838682161 0.4360731271345657 0.2969389144599279 -0.7814245033915119 0.15033550563411602 0.8188332749477798 0.616463046019819 -0.7567448267540382 -0.6286781912671686 0.5791290995905141 -0.68310305375695 0.4131942074140924 -0.8401997312472058 0.04548911817063339 +142 142 4.19938879283625 4.002126752694164 3.7720952092603772 4.929497838228874 6.048777491258292 3.4537438308820105 3.959181802635818 4.558015067180171 3.248411763819895 4.491157887778898 3.8357915051139706 4.908890200301898 4.330721518035315 4.028324587397025 4.067085542990236 4.445554525548067 5.319659125807732 5.272880072275251 4.537495256563811 3.913957609944929 5.605642420291667 2.0260470491106304 6.052682442650832 4.26022850285205 5.9401223890192725 4.487813682965744 3.369490417243462 4.488629563545832 4.039979909345526 2.745174833272977 6.529193374796618 6.248353588529802 3.7600124012814815 4.492284866357903 4.428568807641319 5.918188479851456 5.003289238463816 4.926473107604303 4.826352025904882 5.205124985362957 5.3705391951576935 5.120366856336234 4.69213415645648 3.380370479467255 5.083897434959042 5.7017127141558905 4.626737130126868 4.195680532566568 4.859624403460399 4.100310294805235 5.4453910862814725 5.299250826494427 5.541728403819247 4.800879420890426 3.95426134761165 5.119063050161653 4.734589270237225 4.962464768811958 3.70986079918001 4.422461073050961 4.669122791301037 6.046461210516374 5.199299167028249 4.408196541687018 5.4829417197775285 2.87972269562328 3.476345891842348 5.577957985666429 4.576249594072037 5.292683904270923 4.823425443729952 4.608545723867356 5.472321112988357 5.074101433929791 4.268180729796711 5.377839670093694 3.7705502024666258 4.924014444837538 3.938519310532241 4.2376013321976105 3.1613811289024554 3.082235350126715 4.273567444520474 4.037392005155282 4.928376823462563 3.7957335103481435 3.5299409199207705 4.488710076786398 4.913873259584702 4.570435931455763 5.480692914547646 3.60665539889262 3.2072248278038193 4.3986796277608775 5.625279009202126 4.022474376294372 +142 143 -0.8418512925450414 0.21613594742013809 -0.13286410563297313 0.321636508138875 -0.8526400810181349 0.7017488003996692 -0.857037074032599 -0.01616792113298171 -0.20068983431936616 -0.13236986955933672 0.590908916657501 0.6203316118144135 -0.111218348981166 -0.029993912489270746 -0.08474328941719 0.9756543725003688 0.7435545787315025 0.9384375478533005 -0.03883262894152706 0.8310336319089004 -0.61842616960078 -0.07390490375681802 0.44598629278583246 0.5618302626713227 0.1608911221192073 -0.11458294684945258 -0.01503996781567185 0.3459039948845264 0.8228243033792904 -0.7592537935547334 0.47016741346004154 -0.6354669429531974 0.5280651006887302 -0.9662324287865738 -0.31211905318009925 -0.9191313629039588 0.4465033109910841 -0.813238972357712 -0.4123491954074707 -0.7639097588331292 0.869674989899893 0.8773097485098442 0.8805311607707971 0.0602959479898606 -0.5007927396293872 0.9586768600226141 -0.24410325305762903 -0.4407073100403358 0.9149607416162857 -0.11614276268476509 0.886294956840912 -0.7646649342951408 -0.651400808599373 -0.8201005734553299 -0.538853742558953 -0.9248229895037776 0.8531448372972112 -0.8425769657878934 -0.40141022520399083 -0.34008872683053126 -0.9018553051404183 -0.9978401636693002 0.5963790183097164 0.331042700237665 -0.46113414081640647 0.013201661915039908 -0.4584677638889869 -0.807694118284394 -0.393595491342422 -0.24427190063118887 -0.18262939956606794 -0.7671260251152232 -0.7459726443200365 0.36699400580742214 -0.5257310310096726 -0.07365687576219493 0.7399644461718098 0.29958958741500674 0.3881908463673267 0.259795090246407 0.16722546960726992 0.7839016890060979 0.45080870308684484 0.6320760874298395 0.9289610941639486 -0.48365238814496614 0.24021123451776139 -0.17387698131502138 0.7023201429631114 -0.7057098771807346 0.9178789921232551 0.18108692117969283 -0.14436834554356492 0.3153319216846029 -0.10807864101654507 -0.9484716479722557 +142 161 -0.596145638584092 -0.40367869223971464 0.3702081897827041 -0.560000430347467 0.8692813809229101 -0.4294763119431262 -0.43793733494761966 0.0374976779276468 0.25261254563821933 0.020764354538310714 0.21895059561251595 -0.7081259983425641 -0.3888211991301964 0.5735784098262577 0.17582384852401067 -0.6846448085499501 0.9240173124406854 -0.6160362510854183 0.49072312026693843 0.06917898246323562 -0.39150913979708735 0.5165530059907306 0.5866724675007766 -0.6923381289061206 -0.6184256516418769 -0.6081955500550549 -0.041762468988712165 -0.1985334731335262 0.6753946026183397 0.15688543261545207 0.32193374529671615 0.8993066877938114 -0.33281055815788885 0.2881823680026745 -0.4696055474351293 0.906034904883904 -0.3975278220532015 0.2334346460028578 0.9787880409861602 0.14025272341154293 -0.8836121300403157 -0.06541415425284147 0.7899885692024216 0.6417780397315755 -0.6822786065882669 0.816378201810513 0.9936027161649497 0.17299312249876952 -0.06038302275921459 0.9804162899636004 0.41636602578680426 0.9494094849890615 -0.5890886871804544 0.38471198279687635 -0.25904995525701247 0.8310458253948301 0.04500677748479931 0.07555221801144629 -0.6742560069963368 0.13397297433540678 0.30411778476702 0.771890243705807 0.8331104949838171 -0.7597841778192449 -0.9482126510302773 -0.1571537418152058 -0.01835757635318158 0.22339206855055616 0.28170825019509627 0.3294561674932952 0.15997822956927377 0.38719651371520114 0.5157423122001072 -0.7545106635570458 -0.9274073291758589 -0.9389023855088774 -0.3412616680150917 -0.6819867389838297 0.01483659375586277 0.7768912777826624 0.18210648427934473 0.18901315794701445 0.8237607654112689 -0.3644981366070814 -0.11567983533908865 0.5265292515548634 0.3485903001216566 -0.5090216640395737 0.4791844969754284 0.7507810752152988 -0.39133034509740283 0.11887732116442962 -0.0790900872372442 -0.9875670067767561 0.692519239473824 -0.4764089970297083 +142 162 -0.7026546816267389 -0.4458498026004458 -0.17288029993334164 0.8381973397761804 -0.8849561652591629 -0.15684235435605753 0.4770745553815492 -0.8720078635230022 0.01869550160427358 -0.8549492337099882 -0.6312713403094341 0.11177264119225017 0.6900818669227418 -0.043354792377795714 0.2231778910441926 0.04760119672354124 -0.04475088103155356 -0.988255131414481 -0.6388708141256694 -0.35614306256154604 -0.788300286128141 -0.03412963473480235 0.9825827505736069 0.3513181425022984 0.8529986455710672 0.5271801923235264 -0.060372399781872144 -0.8640973458546908 -0.19586309760226217 0.03543156357670152 -0.9916494360538561 0.5592294567605018 0.11561022664166765 -0.4107850023234849 0.001937758282333002 0.5377731492327773 0.939618639787211 -0.9909871652906628 0.6783254587280638 0.42694267726911916 -0.980222341130939 0.9806468207674792 0.46484995636286364 -0.3515163701806643 -0.41060937099733597 0.4276932473318691 -0.43652335527187125 -0.08765536227057069 -0.9197218659179445 -0.8768598016261127 0.9420485118111901 -0.9978910189921935 0.8800006217880996 -0.990972312498938 -0.7040621600651218 0.3247088704323453 -0.8115651670893513 0.7072479309600621 -0.0905272750765691 -0.4674840157769782 -0.025203575268753386 -0.1855803410475365 0.49137083277118876 -0.09120629374271316 -0.4055490414111891 0.023915497629088955 0.4756535178070984 0.35176003772117714 -0.03073411989845143 -0.9754730262984086 0.9805782179632165 0.6459525157166617 -0.8208161917082784 -0.7953709203331718 -0.03194972614396985 0.27760788367805644 -0.04281155114784374 0.6579429576167355 -0.15851156403150557 0.5437667885025905 -0.7800510850233258 -0.2753878510396748 -0.450138232207449 -0.07039852551717818 -0.40286274969971214 0.0731942219560886 -0.23563665945350465 0.32696889239838267 0.5709744027468255 0.5337540137393839 -0.008082997897237432 -0.46612778742477023 0.3076132174241104 -0.20612150554908393 0.3245603013882328 -0.5077528257124324 +142 163 0.46134149593350493 -0.3502742559914165 0.27550639848505676 -0.45466065766706065 -0.7074465881350291 0.642505556891938 0.060420382053796295 0.5711847058458763 -0.5605975369298615 0.759812341619521 -0.20294411032322834 -0.4617268262373664 0.5707568016742428 -0.21377663538191705 0.7139450673547421 0.7624980125503307 -0.7988910671971641 -0.9657997821148834 -0.9231428260243926 0.1993681121352262 0.8419094874882465 -0.17259074874498825 0.9820036774659548 0.7326493445739299 -0.7745036793851332 0.19578720523835935 0.009639615996632767 -0.6878415106780946 -0.6070072887673856 0.5839807062064284 0.8491654673369649 -0.6971368310179409 0.9035464835447593 0.02758137720890841 -0.2207937281483261 0.2874013022342006 0.9006935609108431 -0.35488340679480923 -0.8427720873076159 0.8602487207516865 0.2679117930599477 0.19308520307372845 0.956248084205293 0.44863666061376284 0.05039920762073602 -0.5197553917685462 0.535796111309079 0.8763759321397395 0.7823253116481801 -0.21963804217764382 0.5671451326706733 -0.8136833357265514 0.9014636352324801 0.5116496471812102 0.9641896552521732 0.260055610627852 0.7061794014453389 -0.5632571274649496 0.20340826541176593 -0.4982217652603844 0.40857729803457055 -0.8879442105030995 0.9399160286642885 0.686505867380214 -0.6181248368763124 0.41162503173015974 -0.5279607192284428 -0.7100661174508482 -0.6651882858791034 -0.3979814008085152 -0.19943010784871795 0.5989318377989534 0.4763241563328875 0.2837109606085384 -0.7141342075070258 0.5878709345522801 -0.6878316361005774 -0.04755791842396451 0.4539600538576858 0.44262557786330725 -0.9989693558779622 0.3885614126128305 0.06178338087999613 0.9489269203856066 -0.8351444628549405 0.5584411822864797 0.6702437722286789 0.6789316842012993 0.772331872977124 -0.27223585229829705 0.4184306680873484 -0.37117216600602876 0.6223655752336466 0.2656070773046135 0.5500088639582903 0.11864792617651343 +143 122 0.8501181070758719 0.9401609322790418 -0.008656922679433077 -0.8255826498342569 0.014142571164685647 -0.3894627851889898 -0.8717093826918798 0.7055175044938835 -0.5204900880697847 0.9930817563805048 0.6666373122451144 -0.40875776991640134 -0.02622279217514656 -0.4048240785256303 -0.41022416762346614 -0.5427137998229381 -0.31494607901407945 -0.026620939986510495 0.845085850817662 -0.21094647495849994 -0.4805468413805165 -0.48677229056732374 -0.3331296783832616 -0.0002811767928547759 0.7545934188888617 -0.16233176324450138 0.5565252045988551 0.03565439522878355 -0.9384463796340818 0.4720542159787844 0.5286985403320663 -0.04939463703233349 -0.1837108805238703 0.6564186439203854 -0.5154447465550702 0.7614554957710384 -0.8594330807666077 -0.9020202043253591 -0.7562990573660948 0.28517633174655543 -0.644168005574685 0.14600646857221355 -0.017690481758600773 0.8049234044303011 -0.7015200865317526 0.5040777920598143 0.11282770987627333 -0.4987662417338874 0.6794889309915277 0.30653503081838185 -0.5538469197362448 -0.0560804782133868 0.3959940542182454 0.40824821165227676 0.1236280425749674 -0.29167556641563697 0.6897745836044045 -0.6082994848191052 -0.26980797042471405 0.25459746115654247 -0.6248917726954779 0.08274730728017987 -0.48192078478486144 0.5143923903459615 -0.20140989696307243 -0.39976548889300756 -0.6082483643760546 0.7569972054545033 0.18492380547218357 -0.9896758498128184 -0.39561397079097804 -0.0035039444400002395 -0.8451049607608359 0.2197001903763407 0.42471305446974705 0.4905598530569657 0.22287180090430025 -0.1918708494150203 -0.34411983754641096 -0.43197691004247774 0.11481967492604106 -0.35797002088344665 -0.8560638682069459 0.8116083335198989 -0.23983880050968254 0.5930587418955653 -0.8943873243363207 -0.22143926048669726 0.5912635969994349 -0.1697643220419356 0.7834866541805408 0.9540963249983174 -0.6260527270342151 -0.7993734003065753 0.9104319360794184 -0.3485776014807831 +143 123 -0.774015127074519 -0.7402584158017538 -0.5783358985610876 -0.06325631068264026 -0.6171330131806883 -0.7316850958133834 0.787472221450132 0.4473289636063149 -0.9511946099686894 -0.8614156415383736 -0.6607114343821254 -0.24128633674703526 0.08518733567152315 -0.40098770362047276 -0.2530985776231556 -0.6448893514891123 -0.9189700155926581 -0.1538434199701353 0.13139406824418742 0.0883998146451439 -0.5592508799144087 0.9722064494329721 -0.05166225593488294 -0.020671079028611095 -0.6270028153844984 -0.10019047829464878 -0.7262899053492378 0.2295757009388124 -0.7964265158264359 -0.9808156835064405 0.06555724213886127 -0.4693607869449128 0.29356929194398784 -0.995368525551598 -0.29043584874187434 0.5686157979588353 -0.047659174577871166 0.27133647907999126 0.29197361778062136 -0.05498541945864677 -0.7885571441242321 -0.8085847170718448 0.15469007491843922 -0.5131867936043055 -0.9705451250235739 0.2599924740728867 -0.924145557800887 -0.1509156876234361 0.9113617957229339 0.4864799683913035 0.5889422240001627 -0.29817897838200613 0.7152536241498377 0.8692808846766216 -0.1364501534919591 0.25790764981008074 0.3634777554448716 -0.4045666960220249 0.5137583509889039 0.8610170492791434 0.4649456154979412 0.7643184935156182 -0.2697404037917981 0.29164621608236496 -0.9573394297862856 -0.3995478383834119 0.8417577720285478 -0.18379713085464777 0.5791969861683817 -0.28531949939165435 0.00482693964402281 0.43237771048220286 0.23630056803794774 0.09293218701265715 0.9930624483568145 0.8710310469532896 -0.87600151293312 -0.22286167348541475 -0.24122414900726952 0.3998917696898565 0.21733608596522314 0.38397047819867125 -0.019941432337275078 -0.42213887928589444 -0.5315585883427298 -0.10240629724697214 -0.09864603822899887 0.8080795490178521 0.5747369448754882 -0.12347068772298009 -0.8565367887767241 0.1925255732814508 -0.45017200532160695 -0.4338760400381896 -0.5323780321114375 0.7007511265749304 +143 124 0.7908965921851021 0.9146789766501318 0.7950067231247107 -0.9422860328223521 -0.7483107219795924 -0.6978460699014599 -0.08062410329879044 -0.5515242623416505 -0.39294836645615105 0.039326490096663 -0.43155030092438196 -0.7308771401306404 -0.4724435563611249 -0.9487019398616325 0.03903602466013756 0.6151886679576057 -0.7337134901030096 -0.059828922267707974 0.6038199089479497 -0.8609970174407346 -0.9228011662827449 -0.4292990748695087 -0.726180502040193 -0.2350380192849022 0.24408201783123906 0.30337404910959687 -0.6110038844880636 0.7489138008811376 -0.3672463846227425 0.43547648913342596 0.1861508443106572 -0.679123139698173 0.6805301774860304 0.42641129238975517 0.16013373184020452 0.3655839651457369 -0.43568939097401893 0.9491137450493978 0.7750785131946325 -0.5593722601992295 0.41404777437965934 -0.07184130481946749 -0.2156815198607125 0.06630663364135048 -0.9361997391996599 -0.4462666533997368 -0.7877366718435215 0.9642434133688003 0.8263127815074207 -0.3984514428805823 0.34195479720123867 0.9085378701409206 0.3557920789461817 -0.4078247880265873 -0.6501531788492008 0.18856158013998603 -0.034777633278469944 -0.5282786513816484 -0.0661347649349544 -0.5520967630670728 -0.5295815091811862 -0.9268183220739137 0.6828282428022139 0.934793911198506 0.28537748074654967 -0.01566050108220396 0.30913394366720137 0.6565447835557514 -0.14916412177623917 0.2521614399707164 -0.12125649500378333 0.5760244662198175 0.053539768430463264 -0.28064151096265166 -0.7240253691478242 -0.4845520749136776 -0.5944648778431088 -0.07549466463556143 -0.2136351720249845 -0.1643771429675951 0.7999846540493596 -0.4106862993637983 -0.5791091023961805 -0.3454504717840843 0.5507335831107785 0.24076124251804232 -0.842424499242737 0.35627631960045303 -0.4998351279050075 0.7286941275249343 -0.19324365796720344 -0.5439368564374978 -0.3003487384550625 -0.5833315227051095 -0.44180652585433045 0.6240869583491551 +143 142 -0.8418512925450414 0.21613594742013809 -0.13286410563297313 0.321636508138875 -0.8526400810181349 0.7017488003996692 -0.857037074032599 -0.01616792113298171 -0.20068983431936616 -0.13236986955933672 0.590908916657501 0.6203316118144135 -0.111218348981166 -0.029993912489270746 -0.08474328941719 0.9756543725003688 0.7435545787315025 0.9384375478533005 -0.03883262894152706 0.8310336319089004 -0.61842616960078 -0.07390490375681802 0.44598629278583246 0.5618302626713227 0.1608911221192073 -0.11458294684945258 -0.01503996781567185 0.3459039948845264 0.8228243033792904 -0.7592537935547334 0.47016741346004154 -0.6354669429531974 0.5280651006887302 -0.9662324287865738 -0.31211905318009925 -0.9191313629039588 0.4465033109910841 -0.813238972357712 -0.4123491954074707 -0.7639097588331292 0.869674989899893 0.8773097485098442 0.8805311607707971 0.0602959479898606 -0.5007927396293872 0.9586768600226141 -0.24410325305762903 -0.4407073100403358 0.9149607416162857 -0.11614276268476509 0.886294956840912 -0.7646649342951408 -0.651400808599373 -0.8201005734553299 -0.538853742558953 -0.9248229895037776 0.8531448372972112 -0.8425769657878934 -0.40141022520399083 -0.34008872683053126 -0.9018553051404183 -0.9978401636693002 0.5963790183097164 0.331042700237665 -0.46113414081640647 0.013201661915039908 -0.4584677638889869 -0.807694118284394 -0.393595491342422 -0.24427190063118887 -0.18262939956606794 -0.7671260251152232 -0.7459726443200365 0.36699400580742214 -0.5257310310096726 -0.07365687576219493 0.7399644461718098 0.29958958741500674 0.3881908463673267 0.259795090246407 0.16722546960726992 0.7839016890060979 0.45080870308684484 0.6320760874298395 0.9289610941639486 -0.48365238814496614 0.24021123451776139 -0.17387698131502138 0.7023201429631114 -0.7057098771807346 0.9178789921232551 0.18108692117969283 -0.14436834554356492 0.3153319216846029 -0.10807864101654507 -0.9484716479722557 +143 143 5.272988473850967 5.026029862586357 4.5736844636550185 4.863536014689867 4.911272479501406 6.4108282632555085 5.330610473291135 4.16825590917614 3.3672882298834823 4.978058669942575 3.936606601475246 4.8818672441342486 2.558952390525235 4.4100017611658675 3.3021276419592827 5.49716836625764 5.679905024279882 3.3368380340980366 3.5383173684362617 3.9828047104710023 5.1393018565890785 4.554035034235467 3.967292430007622 3.749850661852797 5.136485421006431 4.226365013809078 4.537982237721861 4.065183726174191 4.877160080111191 5.446896612687189 4.125887369485355 4.799579358746361 4.421116628901481 4.638556815724823 2.9604108634785513 4.934749806699366 3.299014924372313 5.834224619881644 5.154854686753652 4.222823576036876 5.33412130763213 3.945261833881335 4.5815978487142495 3.85795163995435 6.08612346392364 5.130801219260876 5.628264605094712 4.330897225555076 5.502118962779113 3.513173702537329 3.4026841998279016 5.031995233698858 4.911128846118347 5.172609288350131 4.5572293452777 3.3132672883406595 5.543382505769882 4.986019451506234 3.970375556462387 5.551044446277476 5.19951346954875 4.3071438013536305 3.274575674371527 3.341525163957801 4.835731836912934 3.6208908062839504 4.159888857982685 5.045214507605404 4.176598029456405 4.268733637697635 2.9583818170887737 3.7104450261466173 4.299631892070662 4.02084837484007 4.099855097998562 5.434436953421015 4.487742003794898 3.699734519547305 4.426174820484289 4.980553629114953 3.326464826566812 5.570261544240447 3.8269550895205313 3.908167706377242 4.463071773327028 4.987415571824834 4.311214425418189 4.462577843491203 4.417997388068656 3.4195915582906284 4.867068600395493 4.671035773384183 4.0406318787624596 4.576695061477052 3.685391136736934 4.977300162013826 +143 144 0.19263948482907267 -0.03831890854685893 0.941835024248113 0.706252072032405 0.9203894520481071 -0.9729200060963212 -0.38710414306465757 0.27150477151881725 -0.4418881758548099 0.9273041439313492 -0.14912011896016453 0.8760022841269905 -0.35180821053838485 0.7614714969488241 0.5980460731054347 -0.9193043156797513 0.1657601482253237 -0.49859567962574847 0.12152448823355844 0.3816706553336451 0.11849715785364667 -0.9821376075822521 -0.731538555744909 -0.6076952869372128 0.8476933291867566 0.6403833513072905 0.9960623092292162 -0.19011255125624849 -0.1236681663069279 -0.7587253693939344 -0.3606019643437828 0.1571496854819323 0.7848853316417228 0.15202257552843967 -0.17400847736014247 -0.4909490827371037 -0.16589906347345185 0.45849158536719803 -0.9125351209312911 0.1320189218283665 -0.06069952830727221 -0.06155551109369717 0.8743521802166103 0.8896972247503825 0.28413441805393336 0.7256788244437509 0.9286382444720949 -0.7151233943638295 -0.051362399212361076 0.6840715553140146 -0.3062761929829825 -0.6765946046569191 -0.05342278850083981 0.5762154732119775 -0.8645029938059907 0.23700600077852507 0.5888410001175288 -0.23460847562203657 -0.3600832243106977 0.9371548754106811 -0.8896913730186056 -0.23844961584255508 -0.6359380269886539 -0.46799728851236266 -0.7049178481187948 0.36475736024704686 0.21704130931465682 0.18219362358231472 -0.8854881395215779 0.7842918200580182 0.494960808405444 0.33293900645714536 -0.8730998581093661 -0.7606178091313098 0.28502584745383897 0.6796702905611898 0.30707360254066485 -0.8550755627865252 0.6878147624017066 0.6746670299479802 0.08706400433723838 0.4879958718926509 -0.07261105468705975 0.3984725751849927 0.5396036678036666 0.9504646047003447 -0.002331157943971096 -0.9191090768167243 0.7832267841498484 -0.12365961581773655 -0.43979578691979637 0.21051162588792338 -0.275187975101006 -0.4521760524399572 -0.10051797793021566 -0.34401184388190087 +143 162 0.799059053658387 -0.9767358578264491 0.5806554021383636 -0.42392914596145204 -0.20943723724556396 -0.9089464296953862 0.28833860364753616 -0.5714685116308009 0.381233141118164 -0.7792327218323032 -0.06215433577129681 -0.9027460451997014 0.09229867019203453 0.9594075157766027 -0.7745510958802506 0.9776981551699946 -0.8676465618996756 -0.8499190900371836 -0.2749866350691319 -0.5286738696820141 0.8122855719276172 0.09118915054216803 0.706245386648269 -0.35902352249228486 -0.656255055834414 -0.9834162929021055 0.30409721633265807 0.9076951198825192 -0.9443363290812588 -0.5171224728283124 -0.5508509541161535 -0.22278069984065474 -0.04068193277455068 0.38078922418902095 0.787215919794592 0.7741507830338712 -0.10223184551787012 -0.7357627388812773 -0.671718458268487 0.7504506404324642 -0.947628236146344 0.56885065429564 0.9840748269129367 0.8429528222267224 -0.6340139358710635 0.327299026511199 -0.5389501717200482 -0.2566087887489332 0.7274211947485476 -0.29033812431841644 0.09661028989760223 0.7514823948285836 -0.3312049539589026 0.6048835671145565 -0.5712189638477321 -0.11575987261592169 0.8809796230407119 0.035255769061372844 0.03284176297866792 0.3196302410094509 -0.6279020692889723 -0.6562465869390373 -0.37362270382683915 -0.3683119013440048 0.5050376435434192 -0.6964109595668335 -0.7473692550319566 0.6939713615402263 -0.004905710785199746 -0.3736385306511647 -0.08769520477744486 -0.3887338825758506 -0.053873188231780667 -0.9964690777164429 0.0051614674984414854 0.2413404745941079 -0.03618320949398535 0.6513154699191406 0.28017243558970173 0.8624877719147714 -0.9295030914080746 -0.287121421551479 0.8301779997013528 0.24035188795371343 -0.28331553082561145 -0.8406763045605021 0.522744161269256 -0.8954743978554967 -0.021895941882803305 0.2474369200203561 0.39461117950300717 -0.38148306149118416 -0.1935254629148413 -0.673498401453452 -0.8485919572394804 -0.7002512133008774 +143 163 -0.33864499508424095 -0.7045601219394084 -0.5662331367747566 -0.7503146742232889 0.5475113485627296 0.7921383246049842 -0.6602476939827977 -0.6544181022311237 -0.12746822901860888 -0.7197343036928767 0.7325000419140066 -0.4945123963326352 0.7282954494178655 -0.6039849790823835 -0.2525843824246108 -0.538260619471254 0.7808365613098782 -0.015754815481525464 -0.5553416802085749 0.9106793427016164 -0.6852102369769468 -0.658867510826987 0.5296268757847009 -0.989072946451838 0.7114203388428579 0.9272300319184228 0.5536533377328796 0.3892504535440071 0.49676196473424206 0.43600839847565265 -0.45302013355307325 -0.8444774604955314 0.33643637345538213 0.4908600060426278 0.17571660947999113 0.2946763707849127 -0.13931693547693502 -0.3949789142429898 -0.4254606576213995 -0.6076728423735553 0.35950571132886733 -0.6576671864770722 0.44064330444034305 0.1571126959302631 -0.6488441142799624 -0.9373583251423265 0.898861205381726 -0.762048918474034 0.2769604971748829 -0.24298681275404888 -0.0961995440542458 0.3407179512143257 0.7661529843399704 -0.2777879281782678 0.826768918836033 0.5248681331625606 -0.9012935933268476 0.8860665150740807 -0.4541455320121346 -0.9952309040388172 -0.10384604240975848 0.38137462250499254 -0.03563735100138521 -0.012291726941539016 0.8335041943997168 -0.582142024368004 0.5701703661938573 -0.7543150454543817 0.5997973368041074 0.3730523032788895 -0.33883757650151525 -0.27916036285485823 0.2860122089533037 -0.8256953885912184 -0.22985336308637305 -0.8962103387700988 0.5414065681237679 0.2488968416448698 0.856375363157259 0.9255392769284265 -0.3053955857060058 -0.9442067134598233 -0.16727544904569247 0.29722283794742244 -0.17736510734127298 -0.7257803269988956 0.6101642865667392 0.1234378800286744 0.8382520451652067 -0.5192739549148955 0.5661537598802333 0.9515033301671869 -0.9844293404731492 -0.3886444963918816 0.262889754269406 -0.18249070480748641 +143 164 -0.6202374703010909 0.4673571395026124 -0.0024522010294054652 -0.08867900965348796 0.10040561269844717 0.5718945222189205 -0.44012806715893604 -0.6501977379228718 0.21672492063652649 0.4075678306834605 -0.15022131150287366 0.3005973755721141 -0.3920650088152877 0.06565216114877481 0.5878571859629871 -0.043884901406200605 -0.7392832457534029 -0.7916558007223031 -0.04061642197652082 -0.013786746495497493 -0.8413598037396137 -0.7043700161362882 0.4374278655387691 0.3534519830477143 0.13814181799433212 0.9016723354791774 0.28722098205691005 -0.608974531857398 0.08544519711450049 0.8937429983726513 -0.7568550796953166 0.9438904127262684 0.6763497562402923 -0.2777628122090896 -0.123677355565732 0.6836196385781506 -0.7604139992412549 0.7655193268829685 0.8065320225937074 0.41759705789828483 0.6760961966007046 -0.11783714947512092 -0.9665931889599659 -0.4700244064285073 0.6396367101009814 0.49152992996791367 0.40365339511454046 -0.02983995520977878 -0.3267004469059174 -0.5140654874695889 0.1104716877078904 -0.7831661957431268 0.9619806322916451 0.3696199602560224 0.32137666297396916 0.6897883130515605 -0.4623791354878528 -0.9268386669806492 -0.9573410552783395 -0.7789502667985269 -0.21900542466728168 -0.021101338608042974 0.11036413133732448 -0.41060997133525556 -0.7309452377547592 -0.4552901563361398 -0.2813464521387872 -0.838292187594331 0.5213290016824736 0.3213213699387316 -0.9625709490896335 -0.3699292234462863 -0.41952935901258925 0.2751893664305525 -0.34900682431666885 0.9607008869762428 -0.7992598520983853 0.30082508324060075 -0.6544498518853246 0.9543649771951035 0.0727300841147509 -0.9646329541801086 -0.6036549170807939 0.08040217272014916 0.4818249442901963 0.9643544274199523 -0.2446003379403181 0.028628338798583952 -0.05865431498237328 0.30678132976521666 -0.5460178153829383 0.5041698425389742 0.4135774046329379 -0.7379334858845401 0.18929528800545525 0.5731515733597827 +144 123 0.18981215755098968 0.7642612871079988 -0.46469258021369875 0.48719966556691463 -0.16936755570377704 -0.7424011398062109 0.824718001464247 0.44161300192498665 0.015570364707790052 0.2043497978471014 -0.8899128317355249 -0.1513209248618963 0.9938180131968108 -0.3170279021152618 -0.4375895430133343 -0.5118195775678511 -0.3850077040354438 0.1412769066036894 0.31966586652576257 -0.9864493756640431 0.8747021269717843 0.20284819780640673 -0.4361129806634174 0.7109283332494964 -0.345244859630899 -0.08687410385132566 0.08949423181743343 -0.7258082206744085 -0.44062387115348267 -0.36211433166464935 0.20739152219163848 -0.9661635112126274 0.5549114796593702 0.23736766489048855 0.9923041393269889 0.5381559562507527 -0.009594098939953222 0.43052548047524875 -0.7382744951442934 0.8292558862224941 0.28859230397312774 0.6078987760655854 0.8331184995036802 -0.2014630528618253 0.7897524547294785 0.7286342294386816 -0.7441270769986756 0.0384429229039609 0.4013512806444677 -0.008061408092903344 0.03375578002339541 -0.7012675085144313 -0.5588185758567743 0.5414695307344082 0.30769350586451494 0.03170488788052794 0.3665442720022065 -0.9819546851922103 -0.44666667154734596 -0.8283258909182141 0.40541833504725555 -0.29058493015713704 0.9919652014192903 0.492669855272317 -0.5673180018294846 0.7653819029818589 0.6264782029438483 0.7869396064165033 -0.8706775009926677 -0.026564605941290287 0.43476020070353694 -0.8780499258240722 0.9658535451182679 0.12619443615510129 -0.24215107977706474 0.7823939942647111 -0.8647171890557386 -0.5526168684323838 -0.8131039491624232 0.6537660911581173 -0.11837825379535682 0.590269011754267 -0.9691734663296845 0.7586585359853582 -0.8728118097869939 0.4685481779922014 0.9459264283393951 0.6724599750125106 -0.7489324034436842 0.19934483194159092 -0.059606116621564675 0.4380680052444643 -0.8380105261258779 0.5570068508455843 -0.42296585182662905 -0.6448291761502416 +144 124 0.8436786649685737 0.7682429334422081 -0.32611551674095685 0.10170492902107608 0.5790094469968796 0.3265892708083693 -0.9302062954761599 0.7723139785940516 0.3466211289791179 0.3951470598012252 0.1697373133941158 0.29230568359679143 -0.798413561064492 -0.4899780635599753 0.03121553120567655 0.6172294588386733 -0.04127517096084565 -0.8898803980939514 0.9845127453943401 -0.9983305322486657 0.5923336913424992 -0.20427007960199828 -0.5301441600775412 -0.46015684567203996 0.08312024519107863 0.6088482376176898 -0.423572515364268 -0.3361848535957741 0.11567697756581219 0.3361788767123326 -0.3271743495826429 0.9272518845473523 -0.9913415254883999 0.129938182858802 0.8807450007452422 0.8160445115100374 -0.17809848335135126 0.08705977683076993 0.5796034691567558 -0.8951585287885617 0.0058765785604157905 -0.6768459516067153 0.6640067863356909 0.43515215997988554 0.701635501955411 0.1929634789846515 0.0009812929718631125 -0.4919124595823252 -0.5347541735570835 0.32615684996120686 0.41767939255048736 -0.7133552323877221 0.9782495747015216 -0.5767523646270976 -0.45941369981802715 0.21279822300735463 0.4218240027910427 0.34981771540683493 -0.12898267135043984 0.36090720847316127 -0.25356723957119187 0.23445506487816892 -0.06547098743182977 0.9534934135540536 -0.9420856747675803 -0.981746074475528 -0.7589543583472484 -0.5719247457363352 0.34597784906576634 -0.500248416415163 -0.9898833092846033 0.36123321841626765 0.2594760908959528 -0.9737714233201087 -0.777459415608083 -0.32500956403815007 -0.482142147441031 0.4743786998071762 0.5764555054787199 -0.6096787701114121 -0.49947612888534776 -0.758292730203614 -0.9572842947416667 -0.5656001298270339 0.4839433804493938 0.9340392375667541 -0.2785445382121188 0.9101967749180226 -0.871175826824941 0.08487534412644404 -0.3901014101637179 0.08605420596280178 0.8583574366347206 0.5431466767206525 -0.27097978182065274 -0.6333922922561313 +144 125 -0.7536744713417209 0.8504283482271295 -0.8248416744824723 0.4429466737108372 0.04422111916228588 0.5519131720998907 0.00490672238355061 0.1012249522008477 0.9403552323971742 -0.20420731702653439 0.609629056366711 0.943863304263026 0.01839489095028557 -0.9518022607816026 0.42380281182576507 -0.28910047519015003 -0.13263412291539978 -0.9478516446299368 0.027185356066369293 0.6300693870385559 0.39861917369062816 -0.16700728524940023 -0.48972641377493287 0.5495111443661309 0.44964512859613603 -0.31873245840556463 0.9546132444568425 -0.7576280991937463 0.6819383317193948 0.3383722541668992 -0.06007987961137551 0.9220378858889668 0.30737236183585237 0.02984767360684204 -0.25008733700767194 -0.3224944021408154 -0.6339253800599116 -0.7589645315908689 -0.7841576185109629 -0.3599288333868029 -0.3846377664672578 -0.3120329792380885 0.8633317072180973 -0.9434033103990189 0.6505821355735246 -0.5847508395047469 -0.19876184825937449 -0.9394238093366443 -0.6714820687438328 -0.7918543542703924 -0.8468273797554795 0.7631328119848952 0.6408557329562747 0.9601850984052145 0.05849579068442834 -0.23718784728368725 -0.8918269840398056 0.8205449572925758 -0.7565629114575225 -0.48748411984509477 -0.5823657013202967 -0.7567465966580802 -0.8585525847676336 0.39450341739385086 0.7917001552797933 0.3040773020552341 0.2532566812061472 0.09256784197309931 0.313421479889719 0.34817257721956363 0.4404010699726604 -0.4475820851054322 0.8258506800419945 -0.6578083591024839 -0.524117030784615 -0.6431991620996376 0.1135858110234107 -0.06744610763715309 0.3701232931687708 -0.05524625341161826 -0.8563337819536225 0.9756427275208968 -0.639701636520366 -0.6017382844677017 0.860517594611584 0.7457599126514318 -0.34034020441089563 -0.041677714658721055 -0.030683928075089906 -0.8581005169582427 0.88409353167426 -0.2799691719991031 0.4515981567288563 -0.12922211042824117 0.8817672873498708 0.4509475695143168 +144 143 0.19263948482907267 -0.03831890854685893 0.941835024248113 0.706252072032405 0.9203894520481071 -0.9729200060963212 -0.38710414306465757 0.27150477151881725 -0.4418881758548099 0.9273041439313492 -0.14912011896016453 0.8760022841269905 -0.35180821053838485 0.7614714969488241 0.5980460731054347 -0.9193043156797513 0.1657601482253237 -0.49859567962574847 0.12152448823355844 0.3816706553336451 0.11849715785364667 -0.9821376075822521 -0.731538555744909 -0.6076952869372128 0.8476933291867566 0.6403833513072905 0.9960623092292162 -0.19011255125624849 -0.1236681663069279 -0.7587253693939344 -0.3606019643437828 0.1571496854819323 0.7848853316417228 0.15202257552843967 -0.17400847736014247 -0.4909490827371037 -0.16589906347345185 0.45849158536719803 -0.9125351209312911 0.1320189218283665 -0.06069952830727221 -0.06155551109369717 0.8743521802166103 0.8896972247503825 0.28413441805393336 0.7256788244437509 0.9286382444720949 -0.7151233943638295 -0.051362399212361076 0.6840715553140146 -0.3062761929829825 -0.6765946046569191 -0.05342278850083981 0.5762154732119775 -0.8645029938059907 0.23700600077852507 0.5888410001175288 -0.23460847562203657 -0.3600832243106977 0.9371548754106811 -0.8896913730186056 -0.23844961584255508 -0.6359380269886539 -0.46799728851236266 -0.7049178481187948 0.36475736024704686 0.21704130931465682 0.18219362358231472 -0.8854881395215779 0.7842918200580182 0.494960808405444 0.33293900645714536 -0.8730998581093661 -0.7606178091313098 0.28502584745383897 0.6796702905611898 0.30707360254066485 -0.8550755627865252 0.6878147624017066 0.6746670299479802 0.08706400433723838 0.4879958718926509 -0.07261105468705975 0.3984725751849927 0.5396036678036666 0.9504646047003447 -0.002331157943971096 -0.9191090768167243 0.7832267841498484 -0.12365961581773655 -0.43979578691979637 0.21051162588792338 -0.275187975101006 -0.4521760524399572 -0.10051797793021566 -0.34401184388190087 +144 144 4.302502747756548 5.038068071627624 4.538439004182988 4.234073791091942 4.376062641673015 5.333218001194207 4.718318905119253 4.0101996119178 3.87803936777144 4.4107037444255575 5.64800450160053 4.71757593512356 4.40006115726074 4.938594599672822 3.952302493546367 3.819636788906214 3.199373518577364 4.760151055198486 4.344681582068493 5.261917768964596 4.7229553825018336 2.5718698812753966 4.412698264347234 4.0683264970056525 4.327843065384737 4.28105596615123 4.788727939792134 4.4361216901878775 3.9133481196091324 4.4362712989484585 3.051166605717105 6.1270070713590865 5.592940469155897 2.7934806837845825 4.1318255051734045 5.530235569607091 3.083236012362118 3.2392321878255537 6.002829013155037 5.345059455077019 2.857769607771112 3.924583785308884 4.844731448542881 4.886682550459547 4.0425280647879225 4.271789300573985 4.534697223951848 3.9818344622417254 3.259040398489403 4.535484764600982 4.914572285192552 4.804779697747693 4.396599807222316 5.460400985616692 3.942251341744945 4.014973131032257 4.564474091877502 5.968390104794036 5.410758069202527 4.721990868108179 4.082185944345854 4.691361564796257 4.466771301373159 2.939947885143512 4.917896741618516 5.51458433277289 4.571917650957638 4.318596147968973 5.749195464563792 3.5843008118159956 5.155790284918208 2.898939747157199 5.106836319801295 4.692161791259794 5.292249248967367 4.7955117599272885 3.2788318484681245 3.7329473149756676 5.509813336256016 4.487349346149443 4.60865554523132 5.552625112198279 5.64382636613215 3.9284135857176308 5.614026332562545 4.301752360339798 4.390716043384055 4.304896316226388 4.575112386774749 3.6025809807723626 4.8071815108162355 2.5343374138617496 5.4471610329296185 3.4041943270312722 3.4151654186736273 5.9649016615037365 +144 145 -0.5216919599534284 -0.3941244851705694 0.31816086962987544 -0.6045379228994117 0.19295231885066677 0.6884676087675075 0.6948900879203654 0.03868991530856558 0.9915277588380285 0.18275676973964838 -0.8472268302352388 -0.5574565902696829 0.5846833163472982 -0.70914273501045 -0.04995791299333985 0.08491752308430445 -0.5918392229924139 -0.40001972719150536 0.8123883998443129 -0.8199309529796224 -0.5658333928440431 0.3908209886725589 0.39035345732223603 0.7457334766171575 -0.4707403900394713 0.6300547360640094 0.5388326064332176 0.4904797002797079 -0.935359602995895 0.6882717449918101 0.25045638760102706 0.8042638762370169 -0.12653034681441788 -0.9330489406530147 0.3192451003096599 0.9237900989094321 -0.5490676309793756 0.014208556917230997 -0.4882061046362678 0.4296902489954715 0.24446715580741163 -0.3624297969704191 -0.09740260619693619 -0.8602849840263433 0.4322335017605776 -0.7576185771536736 0.6887247042996834 0.33648305265801914 0.8417204752308334 -0.9102790145952562 -0.40779191336467635 -0.29015113842931206 0.5362868218089805 -0.5253460150413805 -0.8457673685137359 0.8978052463884041 -0.896721356068996 -0.5875201990868837 -0.6088684105267628 -0.7427805293116259 -0.4603356422796674 -0.2625826333267829 -0.10403278406265648 0.03765842175755396 -0.2187104974827796 0.9952701802791812 0.6721435696547711 0.7343976364987401 0.5289508245203494 0.026335681623670615 -0.5964319877917346 -0.02437581068289707 -0.5058339533887564 -0.5076411337758813 -0.9602864860373812 0.4222109405240695 0.064107979405156 -0.8039300258179509 0.9817069607983329 0.6248928303520949 0.2664995017747489 0.581682076660403 -0.5393948987168806 -0.7632022833001708 0.9447580241247988 0.11842513016028078 -0.8978656642540246 -0.9093398012759679 -0.6245857400672132 -0.05123159831978752 -0.7702499439483954 -0.8044071331051799 0.808441088365268 -0.5941995331924022 -0.407886463275682 0.40493448388471953 +144 163 -0.6168564685831686 -0.8470293587164048 -0.4881717344804557 0.36265252253558167 -0.621795065515726 -0.3835513822097756 0.8430521708308258 0.7742541703916432 -0.08260820263739799 0.31558980590023467 0.7230356423529034 0.4576053695480511 -0.2817578242327863 -0.0692563273423672 -0.7966918335212578 0.3442971327365041 0.02203537746444928 0.28060484788473317 -0.2798312384726134 0.12190298134690547 0.7964564322117968 0.17506932913192275 0.2781758743953826 0.11743198165110513 0.9111819017455174 -0.9853432150666566 0.3064078442861098 0.04184192958298816 -0.01403219383381793 -0.884553204066413 -0.3003331426995721 0.06935352349323187 -0.5566945144887141 -0.04936737893669574 -0.3103081739402931 0.2886483079944826 -0.2152209307476427 -0.18769360985669392 -0.8293261633691225 0.956157661315612 -0.2441864634768367 0.2537125871759056 0.013484221726957513 0.3205850530557457 -0.17542629341242133 -0.7205616918568851 0.2143899658513031 -0.15273659086102165 -0.2842043366449918 0.38569089569330606 0.7434253321318858 -0.03959438976592389 0.05014158014654657 -0.5731983642954563 0.09746263172377945 -0.5032401199230416 -0.37072902153735665 -0.7751848119006957 -0.6469295942016531 -0.021630997017151543 -0.27485714269221595 -0.5350612745913166 -0.4639221618329463 -0.046232157893854486 0.8304759911079898 -0.8678504785320147 0.567989829525922 0.6835474893783531 -0.6597303596040025 0.8485348857622541 -0.5260399084645124 0.1328573534081896 -0.43235241967220284 -0.12090673365353766 -0.9052671898796407 0.7331028583912573 0.21626402982803583 -0.0011653384708787407 -0.5370087463128526 0.6315298242798866 0.45147096940404374 0.0008317878053398786 0.7088116774872966 0.021924982191961373 -0.18246854090972886 0.7049126264283454 0.12670202892283267 0.1874158316113439 0.27844868881453855 0.2430099377776267 -0.31532777715116533 -0.1421782130800826 -0.4219698315533855 -0.052298199053175454 -0.45069159208065446 0.8970940074155962 +144 164 -0.08060301151061311 -0.57674083177114 -0.1907594718467207 0.2310023904763514 0.7447541900664418 -0.9098477793719344 0.2922825594693841 -0.029031500183144043 0.5521109177231425 -0.8854994673843322 -0.9486565653914316 0.23074175202414948 0.36140875431603736 -0.7249651655396114 -0.34315730323207405 -0.22330542385740437 0.8898326530172245 0.887587996223618 0.6786578475546101 0.37965772979796353 0.228223273381867 -0.23928300109402723 0.7492354770609087 0.024244532340407687 0.08849894234391997 0.3576189499164375 0.6715516195002322 0.87183950737532 0.13592713401342316 -0.3642037153006876 0.15594884317401192 0.5163419965963645 -0.8934857364906192 0.8241560910988641 0.8061024854311056 0.753266503743788 -0.0812450684687751 -0.2832269460709702 -0.38070250590718024 0.6950291372322268 0.9111887020003917 -0.2901661332100518 -0.5421062551599634 0.265369507394285 0.22375426745833393 -0.12196357017338566 -0.6747134423022549 0.07612370128923107 0.335604760978401 0.9403386066157171 -0.45300947025352833 -0.3210737262400396 0.2002011579148415 0.45977543165348433 0.09763117088245421 -0.8113130932459252 -0.08209556918665584 -0.869367400723331 0.8399081695060535 -0.6320040582177335 0.10201623917077751 -0.7784491674421847 -0.7812168093541161 0.21142144945075425 -0.27877108225465164 -0.5209819609839059 0.5146704325772848 0.19029787694767664 0.7066309342667632 -0.3313338292968835 -0.7538152566603926 -0.0383800139077084 0.087045403820883 -0.7696341185201603 0.4374921535578713 0.36209726876603243 -0.8456320872225238 0.16727755120925059 -0.5824118339697637 -0.0920836125375517 0.7702787211055357 0.6849356893210041 -0.8996204505108725 0.2663575259211213 -0.7882610195807882 -0.10618053013838802 -0.32783482773684103 0.02828871128590893 -0.6645761129184267 0.09980692177182315 0.7423626410650348 0.03582883961629557 -0.7984024277951081 -0.5772223571842023 0.13364680475602908 0.7335479444382162 +144 165 -0.10496927867429684 0.11880888869655815 0.6346967083255659 -0.48400217346077246 0.1750747243124373 0.08762342522388367 0.37920184567038384 -0.6367406008420862 0.49777696827492224 -0.8651611715761947 -0.9528000438460928 -0.3194738384010174 -0.27456293129342035 0.3265592118693499 0.8473879765463366 0.08809703885284903 0.1535219435699724 -0.4773775701408667 0.7118428411788846 -0.6991070804172441 -0.2207364861232568 0.20952063154170686 0.07881924180102295 0.45292233237274426 -0.8244086577565839 0.19237666408356247 0.5220359463692097 0.3717990787249956 0.9878663149622546 0.6905192051279925 -0.5230879140767293 0.8828819174121658 0.9888118881995087 -0.06447162663663564 -0.3069947295426818 0.5250947677877091 -0.52104997516972 0.8099572459157542 -0.8053227925848869 -0.5342498849529369 0.3997301949131282 0.7777837303418247 0.3255901432014321 0.18449635870162107 -0.1510467327866527 0.19833789007349112 -0.49225056585246807 0.3796513849726346 0.0654849737766543 -0.47026170271478884 0.7242013743470646 0.8418429083625532 0.8031288252526245 0.839670044330153 0.8869460768714255 0.7083808969587475 -0.7816539715576813 -0.5138414313573865 -0.8041720323521926 -0.1837334622432052 0.6037473485735834 -0.8329986598554198 -0.01480026674612156 -0.1567366269340984 -0.3833804897853741 -0.5735593742643526 -0.22840095004898764 -0.9997844858804115 0.5503382802107306 0.6524735388243001 -0.30944188723974664 -0.6521260206316297 -0.7374076578467992 -0.5302336208402831 0.6731789853977126 -0.3510166053294719 -0.2716102141146317 0.19905458824434108 -0.6163183932816869 -0.2808614422529667 -0.6502551094162106 -0.7809573612196152 -0.7921308929789415 0.06011150669536014 -0.792826830949579 0.08513958811098199 0.5047262903252852 -0.010947292256619834 -0.4684374224041219 -0.9705930067074862 0.42448370367198396 0.27470727871972755 0.2108149088747615 0.3005971820182656 0.2738427953080005 0.8861911172277317 +145 124 0.7033797674443691 0.06378449619897997 0.8298144849046569 0.6044264296822048 -0.35741325678915503 -0.6694259377845115 -0.767559868030093 -0.6559523172196013 -0.7525876616837957 0.8868294693215883 -0.9902746537217184 0.7158374399044138 -0.08262479703098768 0.6461852567558091 0.3770338674421325 0.09987833674359159 -0.5234285514238257 -0.6685254084809029 0.7959451230893266 0.4917185987502919 0.9040636979876144 0.20584088990682847 -0.4533451475154324 0.25080335456939706 0.6677802908256782 0.5870022726026329 0.8010982020248762 -0.7329639024521895 -0.6664630824631292 -0.8356692372931449 -0.7083185367364147 -0.9570436739487593 -0.7461106247042881 0.0055140266957385276 0.24204460365884906 -0.26399812892956875 -0.9250762015181453 0.19160882010736136 0.8720504409993621 -0.2822412517786308 -0.7169804075026507 -0.22187081271677056 -0.07152997946853201 -0.331966641847663 -0.8465439585270857 -0.18456687597408794 0.011893439459591537 0.9598466047477741 -0.5533552238807486 -0.7452863092073683 -0.6238663676769622 -0.9266712980005578 -0.7813883049338493 0.18245164884542397 -0.11603467040698012 -0.3730358761691115 -0.4303823092507497 -0.29369575714572416 0.7010424015058261 -0.8539026635043312 0.6777022529264269 0.7571430938766115 0.6203837236642777 0.35102364321254864 -0.7193636082467645 -0.9909633676379908 -0.9265889897725401 0.8234000661035892 0.27531418603168456 0.9419140615155612 0.22804380217728148 -0.04169432917942495 -0.17668464635157743 -0.4126882448821745 0.33499673135819297 -0.9421117004682642 -0.38200340274383415 -0.48619274529555945 -0.06799371724031755 0.2521047918175723 0.7529099146532277 -0.5886285178578619 -0.10962512093065335 -0.2700146932374976 -0.8481081041036824 -0.6841783894190641 -0.7957391639225058 -0.38829737928036345 -0.7664252251161365 0.5702023803940393 -0.9177663088432608 0.7265248338240244 0.3854888772953784 0.22788703585040437 0.7126812844807604 -0.43799702013293484 +145 125 0.044343561760338934 -0.5328434375215065 -0.700402612351321 0.9661281645663886 0.04637233799325724 -0.7194886332321635 0.13020801265769366 0.008688193298294289 -0.9068347313503913 0.039649324557272214 -0.8481979955422971 -0.191398009744286 0.3522655374811343 0.29696514753574443 0.3617894664254251 0.23936028141172394 -0.3036704095333822 0.14843923899156053 0.25617870199950477 0.9809151299987686 0.7564460404871696 -0.5674454820543628 0.792316829601801 -0.26407987060816573 -0.5055219589359372 -0.11713227173000318 0.5401962263085118 -0.6497580380466179 0.08332647067924981 -0.3887181905364845 -0.4378896934594332 -0.784737764481847 0.9875704010200219 0.17240768553837849 -0.9194847088197895 0.43565144710050885 -0.3408518749347138 -0.703808196548436 -0.3263917832271461 -0.553154092538414 -0.16453680364927203 -0.19664610173944452 0.07789818027748696 0.00910436931922809 -0.5981548889328239 0.5986974697081409 0.7427347098510175 -0.28526036315280523 -0.10557986662007379 -0.07059286941355158 0.9085887285248113 0.7012328044068707 -0.9763598142702621 -0.23985216067964732 -0.5954379824193414 0.066436178198791 -0.32581301791682193 0.18882035622703053 0.6079507963083892 0.11147233566908565 -0.9314481516344029 -0.1765032866169085 0.7584603136803703 -0.9589132637408448 -0.5108656617463339 0.08431527786840287 0.3831634400695014 0.32433260933908126 -0.9412842721692027 0.7124289133887118 -0.47283280581356424 -0.6856254345607249 0.6963699532500576 0.9287234703125642 0.9838894732261516 -0.8532824510875221 0.3379914248049729 -0.10038248849916598 -0.9236819942199248 -0.21477583087843755 0.7327689521158847 -0.067765983566761 0.9331782735240777 -0.42563251968264826 -0.5017723338147031 0.03735555580418959 0.14103639528057355 -0.010467203152546123 -0.7392060635983981 0.9542548773958406 -0.7429019055411832 -0.15986425493742562 0.7206234889167051 -0.8997225969962193 0.6962326651278938 -0.09129750859341934 +145 126 -0.9331643573270956 -0.4319689833835003 -0.3867885465902543 0.9901594430911507 -0.175087342436415 -0.6504806439099473 0.5785846158960344 -0.8758264204721624 -0.11719463962523324 0.4580343794639039 -0.23274380868421463 -0.016396665051521042 0.36490760067568906 -0.5153905041247318 -0.12159880083821695 -0.8411285035600908 -0.26786125399051763 -0.482490612891078 0.24427615363709076 0.706949715064064 -0.0398278688853797 0.017125738594841344 -0.9868087906340968 -0.4873765365245868 -0.08448582363784007 0.008424909553508941 -0.05008032574384269 0.9010094946970113 -0.10905186697487146 -0.17078777853315485 -0.8037003135736898 0.18958870412583195 -0.6192862529738761 -0.34134629937283023 0.7080998168337416 -0.006836415223921977 0.5725449281395589 -0.050440377141727444 -0.3105202059819021 0.2192738327640924 -0.7148896221962142 0.7711711879248713 0.23713842755377357 -0.4936649548204457 -0.5951159865978928 0.09757078195828406 0.29297362158912166 0.7341073022346871 0.17192686964145798 -0.6382459621927958 -0.770090191612183 0.2367107646789881 0.024542765367576047 0.35740638697755966 0.6807420184256845 -0.8140562963428928 -0.5391818305381235 -0.14495317542899433 0.9964830143087531 -0.35896733505902634 0.41841983015368367 -0.7892987343053126 -0.06939716232489679 0.6449286409118997 0.00401912141387295 -0.1989034375740757 -0.6148765439250932 0.036679190909685966 0.7854125591948191 0.7772004658268743 -0.9499576016137532 -0.3855862413857769 0.5572404139140328 -0.18993660968649162 0.5865250809992439 0.36492877187516704 -0.07362081609403992 0.5579374238876822 -0.43366601068924515 -0.5224115958507718 -0.349736020789593 -0.5632290625812211 0.6799743277795534 0.3033814519320259 0.24728880658409103 -0.10559904221786276 0.8026409410657935 -0.7790486413144135 -0.32694397219895466 -0.8838740558054528 0.3488107842613768 0.725685204755532 0.133302086021591 -0.9355179133990401 -0.21572165394800713 -0.045639196604337684 +145 144 -0.5216919599534284 -0.3941244851705694 0.31816086962987544 -0.6045379228994117 0.19295231885066677 0.6884676087675075 0.6948900879203654 0.03868991530856558 0.9915277588380285 0.18275676973964838 -0.8472268302352388 -0.5574565902696829 0.5846833163472982 -0.70914273501045 -0.04995791299333985 0.08491752308430445 -0.5918392229924139 -0.40001972719150536 0.8123883998443129 -0.8199309529796224 -0.5658333928440431 0.3908209886725589 0.39035345732223603 0.7457334766171575 -0.4707403900394713 0.6300547360640094 0.5388326064332176 0.4904797002797079 -0.935359602995895 0.6882717449918101 0.25045638760102706 0.8042638762370169 -0.12653034681441788 -0.9330489406530147 0.3192451003096599 0.9237900989094321 -0.5490676309793756 0.014208556917230997 -0.4882061046362678 0.4296902489954715 0.24446715580741163 -0.3624297969704191 -0.09740260619693619 -0.8602849840263433 0.4322335017605776 -0.7576185771536736 0.6887247042996834 0.33648305265801914 0.8417204752308334 -0.9102790145952562 -0.40779191336467635 -0.29015113842931206 0.5362868218089805 -0.5253460150413805 -0.8457673685137359 0.8978052463884041 -0.896721356068996 -0.5875201990868837 -0.6088684105267628 -0.7427805293116259 -0.4603356422796674 -0.2625826333267829 -0.10403278406265648 0.03765842175755396 -0.2187104974827796 0.9952701802791812 0.6721435696547711 0.7343976364987401 0.5289508245203494 0.026335681623670615 -0.5964319877917346 -0.02437581068289707 -0.5058339533887564 -0.5076411337758813 -0.9602864860373812 0.4222109405240695 0.064107979405156 -0.8039300258179509 0.9817069607983329 0.6248928303520949 0.2664995017747489 0.581682076660403 -0.5393948987168806 -0.7632022833001708 0.9447580241247988 0.11842513016028078 -0.8978656642540246 -0.9093398012759679 -0.6245857400672132 -0.05123159831978752 -0.7702499439483954 -0.8044071331051799 0.808441088365268 -0.5941995331924022 -0.407886463275682 0.40493448388471953 +145 145 3.9137144233542243 3.5104617569074135 4.286245877619163 6.147510692496281 3.3306079870503273 5.2990092574593115 4.536515606669211 4.088405426639948 4.558591267446342 4.692772483823115 5.912115307562231 4.693512539775273 3.5738147763268056 4.273889610121944 2.5595755794074218 2.171297169169799 2.9015707962626793 5.043995665172109 5.592717894693386 5.211970338981225 4.62064252456712 3.4784705431034717 5.614193532185623 3.1804069298210047 4.48140380306519 2.955780832345455 4.275578563399052 4.996739962174769 3.409092462473054 3.9058745911184753 4.824842380724624 3.8824426102672973 5.624004903933358 5.20413731635809 4.416751842083782 3.96627770960096 4.2320312623877 3.494563180684442 4.932983950995643 4.341568331215648 4.506529490640081 3.7472713687226276 2.803995935162173 4.014110797614839 4.443851246917465 4.972263413156862 4.95914439063277 4.817246519999877 3.810431540852797 5.2181036458287515 5.076129634828689 4.635943233197687 4.820388612816455 3.8264131030151045 5.9129611229775145 4.924326737008517 4.889948459137013 3.403696218235522 4.993850078609457 4.501050653590467 4.661756536349097 5.120950831047899 5.4539035692341775 5.127162556730912 4.988795457088799 5.1435590217709795 3.814620128485087 4.368316915243842 5.342743024825901 3.4561051939723213 4.961204174100753 2.658142343812692 4.777288339736051 4.117794634913002 5.630879648329321 6.131517269247824 3.408299843533917 6.299870131049698 4.631035164849604 4.550085988221316 4.8010693582508175 5.062085436546435 4.288946532492033 2.8470726886859516 4.378844947199766 4.005940116079811 4.428812933413733 4.846384045640277 5.520626843295499 4.471103893055755 5.266388960252192 4.353050424302541 5.5948997183681 4.999610593381261 4.427437055169912 4.2232285596318775 +145 146 -0.6767907924327532 -0.588461098806363 -0.607066680570572 0.8325781063959738 0.2557796307946989 0.5767381538057201 0.5863357814392598 -0.15729268946173636 0.19596444540692914 0.5927786834220465 -0.6263768108985424 0.8077774593515072 0.059077796551547435 0.3449344740650344 0.044816793535390254 -0.07131712669347334 -0.0403042080409346 0.17333487932605696 -0.7207303677774866 0.7306767696017198 -0.4369130194614881 -0.1463422022542642 -0.3732960206255267 -0.049228088007868154 -0.7974618050057576 0.25785449155247187 0.613571175365415 -0.40209126984224497 0.5609383339343943 -0.6875363054062704 -0.5519436918144789 -0.1369929096442617 -0.7651147509844418 0.9285652904804658 0.854071621676076 -0.5588118024884021 -0.07387941723078617 -0.717980525536069 0.14113142790648658 0.35680629813379783 -0.3294383326409298 -0.4748373351843913 -0.33564856094242823 -0.6892436076208968 0.19108715171542845 -0.9005359517037947 -0.9622760201450846 -0.1908240194243611 0.19796871479642109 -0.7247550591603169 -0.36989533940990604 0.6046645964396498 0.15416108685923047 -0.9122702948934873 0.9507697044015795 -0.8760379979673785 0.14206315662314561 0.7629190673132373 -0.14044044017482982 0.8734226541742476 0.49339931307915696 -0.8126742694751308 -0.98899104698653 -0.9833681215687664 0.6278691334498081 -0.4035941525818012 0.1959968952204747 0.6504693488076021 -0.8160877211801154 0.09646453651644982 0.8894870517505831 0.543813591768405 -0.5880495234388616 -0.8798716277449075 -0.2935408277936087 -0.9365681171825444 -0.4370897768086739 0.6821086689503044 -0.10140824897265843 -0.9699426096594814 0.06462196526655717 0.8096024187626205 0.3296208966861811 -0.11174903772013778 0.15778904786754078 0.6671107769716922 -0.39639408903802664 -0.5424949511957076 -0.7466076445116419 0.4712961321619078 -0.39209454039566727 -0.9833014477898647 -0.8158742313661398 0.6524139900310353 0.8254363122671584 -0.36753932645695975 +145 164 -0.18937000607770194 0.14296002146248799 -0.09537746126376478 0.3180081115699047 -0.9253740140429079 -0.24905557508404863 0.7187682714645158 0.21417654793299223 -0.8156195021128485 -0.3614707957102128 0.36216061991405835 0.6935079582036321 0.8761685111974009 -0.995116999934831 -0.5403886236188347 0.379391546211453 -0.5550329311713018 -0.8690994897626279 -0.16729473330411238 -0.26591179985082114 0.32172393607016736 -0.4086887364109568 0.8519567945677584 -0.05297777069168097 0.942666929317064 -0.16769378767665555 -0.02081046603613923 0.03755033136188013 0.11461152174771727 -0.19051330830254098 -0.7481766901242282 0.26274295171117035 -0.642179262074847 0.8047317332041077 0.5748535441322866 -0.08897505413698159 0.5227206237513558 0.2848203597817356 0.3697283194472658 0.9563982469660217 0.43132943428056447 -0.7763794803109809 0.3037850644437574 -0.4156184815545634 0.59527107125559 -0.5457392296050063 -0.30876797274185463 0.7239747787594875 0.9416998846455744 0.6179789909074553 0.12340465609768603 -0.9645371784319785 -0.9422781288182729 -0.3570944106536378 0.9868332520862155 0.9456223513934481 0.37045311575604956 0.16139132575780812 0.23970394346917523 -0.5853740465816912 -0.05275889652693211 -0.9297333571695117 -0.9513777797910121 0.196159597933649 -0.9089897689729338 0.8328603144073938 -0.0535677373579011 0.7722981492095791 -0.579866044271276 -0.16896707390070564 0.7840817897053887 -0.30715030572709323 0.26042773364256844 -0.6396666077549489 -0.5343750189010676 0.550843894829244 0.250734174665592 -0.9405192045703858 0.09744680870963585 -0.26496797196960964 0.7815507972066895 -0.5471919427777518 -0.7177182505054038 0.10000983070337321 -0.4536562860400708 -0.32763587715186215 0.09777835537758106 0.5309491864934721 -0.7950145966330204 0.14470594066459164 0.45350396232149004 0.42490587898894083 -0.7497303766976839 0.13510925969904353 -0.20549190735805944 -0.913624445947619 +145 165 0.07685777964748208 -0.8738867260464116 -0.2777381552382203 -0.2706251865927325 0.8534862535375034 -0.35588620681232697 -0.4163430246397577 -0.9631477144881753 -0.1273601940943081 0.48233621706141117 0.40849068171735214 -0.5472292108620418 -0.12342424967577492 -0.39628336770924566 -0.4268086448717565 0.23781813459042622 0.38063125888317617 -0.8233298897374224 -0.9505064418779934 0.7229459048702662 -0.8164779205872117 -0.8177610907203297 -0.17957488233156882 0.5832141730567992 0.514355515898782 0.014562864091719696 -0.6523390554814326 0.4562645433321908 0.019378348908045906 0.07356021340321162 -0.6406960316424495 0.16166877401277047 -0.7195659014567564 -0.8419273629298871 -0.21788715656138158 -0.04069523518035978 0.4317363116496358 -0.8127016380982786 0.9942398683036959 -0.5568087407368565 -0.3056438165696902 -0.6955619346651356 0.8615978511747666 0.71335665087643 -0.47875028715645684 0.33497695324476706 0.2185194561016497 0.6187226257939453 -0.3901415940166284 0.10897818171398743 -0.91690481674363 0.21512602079079768 -0.4791982459008717 -0.7888792128288504 0.07420037687915837 -0.07763267429302956 0.833100594168362 -0.31529412488346664 -0.67959158669493 -0.01747451613067219 -0.5711208914228247 0.33608549019481804 0.6506534048297428 0.7664436241912251 -0.9598459129112955 -0.3679795749091488 0.5049285052838475 -0.6333463587822348 0.2225858087638053 -0.08205767323779156 -0.2366584806652996 -0.17034707795007265 0.8819330888855068 -0.14622819948283072 -0.8493457183162232 0.7134109519625296 -0.8384171787975472 -0.9806210302594303 0.7606410622891877 -0.8908764969586032 -0.8921763166394079 0.22706640726198035 0.1488201956741284 0.12936609954912948 -0.4265768887095793 -0.9593074892246838 0.451065666856693 0.8231949507347562 -0.7876748270350451 -0.9199079342980974 -0.7019635298994547 0.023771926679059918 -0.6691327709105841 -0.35744313472353206 0.6730299487290818 0.8922539821175173 +145 166 0.4229558578178949 -0.2620837391465545 0.7610244219310327 -0.8376577770982334 0.03530208825850267 0.8213220403012427 0.32555360607965267 -0.6804687679429673 -0.5698017202815722 0.7912193546269606 -0.8977503023041067 0.4158264509133758 0.7654458441656593 -0.0799243136684924 0.504666791185834 -0.06222056646568919 -0.09009837023539458 0.9119604086246629 0.7739038044114008 -0.12620440788202658 -0.17725664572477218 0.09580568576758486 -0.8542086832231981 0.5736159974488377 0.10573897560517054 0.6464526488951576 -0.8444102743428903 -0.9762419011246639 -0.7562110392718404 0.15422215792309846 0.16110169505741379 -0.43983920621377215 0.9928754503668129 0.7124001743412574 -0.049175127843138045 -0.9436302278376847 -0.12761343228887712 0.3889391297895133 0.7679103005465304 0.5685255556500957 -0.6436217282870007 0.16072612263356234 -0.4691893911587053 -0.19414860435542525 0.638221787101378 0.73444371196341 -0.8098120434898162 0.21832221511320204 0.18139466506660318 -0.6483289770904812 0.12829558187999468 0.3977107721330766 0.6800343057994858 0.35565363016583196 0.7693690570963463 -0.4364979958576032 -0.5476546722405966 -0.010805044575318057 0.7462937726415346 0.31318202396511663 0.3550085101982279 0.07884038965016416 0.7315786022146884 0.6437044992105787 -0.5100664762493707 0.8085094687045808 -0.2990244781477769 -0.3471167159052364 0.335863836868735 -0.22200056018935177 0.6252127806900389 0.1074605156020223 -0.3202877539676958 0.02616921638297831 -0.5649169012420596 0.9660118254685923 0.13546029477125843 -0.9093678399707825 0.6576461922022376 0.1793924270285312 -0.7027409345177347 0.7081398692357226 0.36445686238042363 0.21749962787310384 0.7914482852081519 0.8443854208613972 0.15348433938799055 0.3964376729483756 0.5065041363370666 -0.46532249349956323 0.43203983140941427 -0.052777569461571305 -0.8919454850980653 0.717131056619166 -0.09939879973471011 0.38313456089730047 +146 125 -0.8523715118511024 -0.9546992834614545 0.8275276632737143 0.8300909043019398 -0.9966745238728361 0.1660990362666428 -0.17760345559339807 -0.5962183097943208 -0.5720125701197096 0.7052586303256059 0.3688441509799576 0.8441453477155796 -0.6711083464253971 0.9991379612162521 -0.7686659079766138 -0.1786104968558606 -0.4844877623831112 -0.8972906821490403 -0.6478885112710686 -0.6481721100783691 0.0656960843240415 0.10284352781040673 0.16283792138624786 0.9103698650504095 -0.6745744587668439 -0.78202632938035 -0.35471776902561447 -0.08309020500398279 0.43380099309569875 0.5381894796070541 -0.5874404734548138 -0.3409011897430403 0.8340890922902695 0.32451118367115583 0.6959694017559515 -0.36387927969516487 -0.6180423066408371 0.39368085894696825 -0.33628223533570667 0.8939268408072347 0.18528966009629722 0.09346717335352972 0.6888691067073986 0.2769796871701036 0.5107585451271808 -0.20063176413001438 0.9881074962210283 0.484881392023931 -0.3602011376562304 0.38370070817273616 -0.8545447624114917 0.724082943809301 -0.3472010423827827 -0.35424276010902567 -0.6975520939270976 -0.8651196344016647 0.6428964624734765 -0.3714275236070008 0.24686775997149346 -0.22035104511216286 -0.4021650373391963 0.706326129621083 0.9598519470188758 -0.9287808613146427 0.5918266727314991 -0.8954484432623764 0.988960076476183 0.07880240882657774 -0.8877884362020689 0.8404638927274521 0.37978469854720687 -0.27125586060213136 -0.666451078658739 0.1656339880763591 -0.44532425261209974 -0.2588604631723104 -0.8722947816522357 0.4223042110055941 -0.20671005072575843 -0.05484207871801461 -0.9116118951963998 0.6949072957446008 0.2573175653215658 -0.012444972819551703 -0.516867863857223 -0.06008499086518415 -0.6014384880962773 -0.8483342308262918 -0.974961201656755 0.9590586772642975 0.9920467836985685 0.6746985155977248 -0.1501978356533391 -0.9953675696139155 -0.9112627311887758 -0.2877766756771645 +146 126 -0.5496244324822492 0.49608439987781305 -0.04237263261084534 0.026683917074140195 0.6504432004061729 0.09018168962924267 -0.05384116962412744 -0.12215124938183353 0.9770486475693541 -0.3413011967393589 -0.6371739252632345 -0.3279535138054488 -0.055643100032697124 -0.9029937132698369 -0.7963714863596136 -0.3632582761427319 -0.3926340633947263 0.39676225662725706 -0.6054921567299489 -0.15809221153905462 -0.288219339353714 0.7825673916996609 0.3530485017970528 -0.6879277093017053 0.3793821130531314 0.36760999383961823 -0.9619607117717937 0.19025888428177473 -0.9068479657887263 0.35733419888920603 -0.22554804832554343 -0.5893558432114456 0.16986507696972275 -0.4601153545109882 -0.48285879011436106 -0.7066587765100474 0.8461753292584133 -0.9942459195668292 -0.6405228705188519 0.11262572450317232 0.4244093561134914 0.6434402337958935 0.2868298627351029 0.7895419689787391 -0.508671695086129 0.17917030580112625 0.6590566684912931 0.5544718304526055 0.2639927300721787 0.689529690651645 0.347668729460918 -0.02223769989428237 -0.5215513231958195 0.1873875092476125 0.6336000986479291 -0.11623050306223726 0.5840018865087024 0.28022712649619064 -0.6253093030686441 0.5436369222074249 -0.23795554483627357 -0.5890166811105855 0.6130788553281987 0.9174823820097233 -0.988369931312223 0.6131226898149291 0.8105991872419256 -0.9712375670010749 -0.572525975240699 -0.2541704871651369 -0.8841357531884182 0.4709587172754417 0.148219215511463 0.34432570512368654 -0.12305141005461873 0.598533140741514 -0.26565088680241944 -0.9247486209601303 0.8708423630776319 0.2919241371529595 -0.6767376803753196 -0.1313583554033253 -0.6633866548846592 -0.8706148327700483 -0.030794099667702968 0.37212404448273273 0.3415833428467676 -0.942996275957177 -0.019321552485602522 -0.10063949078469148 0.13714675720278846 0.33874401622386063 0.2395144323727647 -0.22391286831730284 -0.4608423304417282 -0.3241618385697671 +146 127 -0.5931667731660539 0.2849147266637564 -0.47997783959410745 0.6235824473712672 -0.9158442626450933 0.6513888337169209 -0.8281457995899866 -0.28948945865568687 0.4023251693568628 0.11496498013170364 0.5993368436492803 -0.5699906889935387 0.2256248495399018 0.3920248238405408 -0.17529353764364664 0.9735977114259988 -0.6246296152663153 -0.2832261977048389 0.6342452941524226 0.5350989359752201 0.8241852922909536 -0.03669782269452826 -0.4053741885885569 -0.025985963031747605 0.9923120966952854 -0.9981495897808079 0.395645814198349 0.9844872627490118 0.8966895726786919 -0.02270901707454831 0.9086190383561032 0.7992755036657733 -0.918163850698771 -0.6692603498957914 0.7234912118594952 -0.7855819816558738 0.6633238834455122 -0.7013035165141086 -0.7353214825404373 0.17812977112339778 -0.9471435719237145 0.1665937154757211 -0.8897684949705544 0.6256076492372409 -0.5178751007170523 -0.09031210497427722 -0.4897445477388904 0.3925056047506641 -0.5856103108050834 -0.26748800308638665 0.2782377880856717 -0.548032265426676 0.5445411140275072 -0.803248013519493 0.33745796281711526 -0.41472001617612353 0.4667961882606917 0.1402269257077815 -0.9389806954947353 0.7652441460339257 -0.3118399541132655 0.06187472624752277 0.6899681736657115 -0.8409152270928191 -0.8459043555109049 -0.4182826083114084 0.6623356881153697 -0.9768387555944351 -0.5175083609770619 -0.7526734368786325 -0.8772589209228834 -0.7389404297445838 0.5953062632804309 0.4981274771273634 0.03488125595322611 0.24876113929534216 -0.0147713304981274 0.6004799782098473 0.5437677384644868 0.6021499413526858 0.1718601965655948 -0.13443659046195067 -0.27512999477901645 -0.3677370395022088 0.751032041183743 -0.5255839545619767 0.4778670742811646 -0.9828451801496605 0.7276363185787005 -0.3012861016893924 -0.8655282943012028 -0.7437260810112141 0.051834588674156246 0.09854936874461306 0.959888245073627 0.22718495341476386 +146 145 -0.6767907924327532 -0.588461098806363 -0.607066680570572 0.8325781063959738 0.2557796307946989 0.5767381538057201 0.5863357814392598 -0.15729268946173636 0.19596444540692914 0.5927786834220465 -0.6263768108985424 0.8077774593515072 0.059077796551547435 0.3449344740650344 0.044816793535390254 -0.07131712669347334 -0.0403042080409346 0.17333487932605696 -0.7207303677774866 0.7306767696017198 -0.4369130194614881 -0.1463422022542642 -0.3732960206255267 -0.049228088007868154 -0.7974618050057576 0.25785449155247187 0.613571175365415 -0.40209126984224497 0.5609383339343943 -0.6875363054062704 -0.5519436918144789 -0.1369929096442617 -0.7651147509844418 0.9285652904804658 0.854071621676076 -0.5588118024884021 -0.07387941723078617 -0.717980525536069 0.14113142790648658 0.35680629813379783 -0.3294383326409298 -0.4748373351843913 -0.33564856094242823 -0.6892436076208968 0.19108715171542845 -0.9005359517037947 -0.9622760201450846 -0.1908240194243611 0.19796871479642109 -0.7247550591603169 -0.36989533940990604 0.6046645964396498 0.15416108685923047 -0.9122702948934873 0.9507697044015795 -0.8760379979673785 0.14206315662314561 0.7629190673132373 -0.14044044017482982 0.8734226541742476 0.49339931307915696 -0.8126742694751308 -0.98899104698653 -0.9833681215687664 0.6278691334498081 -0.4035941525818012 0.1959968952204747 0.6504693488076021 -0.8160877211801154 0.09646453651644982 0.8894870517505831 0.543813591768405 -0.5880495234388616 -0.8798716277449075 -0.2935408277936087 -0.9365681171825444 -0.4370897768086739 0.6821086689503044 -0.10140824897265843 -0.9699426096594814 0.06462196526655717 0.8096024187626205 0.3296208966861811 -0.11174903772013778 0.15778904786754078 0.6671107769716922 -0.39639408903802664 -0.5424949511957076 -0.7466076445116419 0.4712961321619078 -0.39209454039566727 -0.9833014477898647 -0.8158742313661398 0.6524139900310353 0.8254363122671584 -0.36753932645695975 +146 146 4.896487052111464 4.3812036457124375 3.415016056368279 4.800342588181585 5.62934288414572 3.776615021097527 4.641350325289455 3.1912206040951725 3.539238110682169 4.355333547309938 5.413985216618247 4.2372619744122595 2.641873047673965 4.953786654060604 4.042118996482705 4.590784042729311 3.4908316971565947 4.467405094104604 5.467866216780829 4.661332752239774 4.277819431254346 2.493183936372466 3.2634708859924655 2.800826218496818 5.742572641924297 4.65855316643346 5.0755720902158945 3.58843436304062 4.936113333010813 5.814814047551139 4.973602956288174 5.314679185293155 5.204030058486206 4.977621769791133 4.765789972564704 4.922938488227073 5.083985673251735 5.004376366032054 4.511086198466241 2.854801591668914 4.404531799506826 3.7949632256251284 4.177500602458023 4.966713890868869 4.399198033068023 5.000982520124594 5.2801373595035725 3.9780090257896115 3.5758649330971473 5.4041271845686145 4.376499925405197 5.732620654649969 3.5974733873338414 3.7679209767270394 5.2818764561287335 5.401323062640384 3.9764954552000034 3.79389274486556 3.5676453077880375 4.790610144107968 2.545052318309458 4.77264230903438 6.376437354677954 6.241247762425788 6.0078131106419015 4.399996700966903 5.150423801176309 4.813711815663769 6.000558237817327 4.717515992573587 5.984806375842632 5.149028489158357 4.28333911326152 4.849059569792083 3.326835300621312 4.5169410708980475 3.4342064522261855 5.558745535370562 4.0884282211970575 3.5436809593816783 4.1312430033254355 4.890881292951469 3.892282763411049 3.6168248594859467 4.16558671222698 4.527776072019739 4.1431772545011345 6.674203248183228 5.69121872781418 3.8474640409878087 5.104543892235629 5.01364990390534 3.158393763437853 5.028340723157527 5.92221140747569 3.7259828287116896 +146 147 0.3161532731060914 0.1357305119356349 0.13002953935910133 -0.731417863954652 0.3988868393732723 0.7849481238383271 0.8986838195482474 -0.8618724700344718 -0.5583720561742689 -0.015335397430434439 0.6847199038333178 0.7581494888044715 0.3361512380503997 -0.2176505305580858 -0.3070835008337318 0.8357827930230102 -0.5580240770728011 -0.7246945849445234 -0.5046811030532172 0.5980680486612824 -0.4574570106779683 -0.1359006632983082 0.15707804170438888 0.39301619227576845 0.340077076186708 0.34177878369457604 -0.5307684890565767 0.051368844300938354 0.1784706806787253 0.7882383372794473 -0.8168581128805656 -0.6698745457006379 -0.9680013524334592 -0.7409853002478104 -0.369246743339118 0.6199417070724951 -0.45655890845945146 0.055405738585022624 0.3263262456658216 0.9450906602080913 0.5952850844364399 0.3063646699023972 0.37766731498920825 0.3947334432983225 -0.24036537590850404 -0.756668156443774 -0.25903264611801435 0.16012195030296783 -0.8986237810190882 -0.9522968644867167 -0.912224662838304 -0.765886486977662 -0.03211508887532588 0.22180694110403865 -0.13979688214003083 -0.819752430795214 0.0808083179297594 0.10196997005632902 -0.08553868252906605 0.2660211806830446 -0.1099384500006777 -0.8112723644037263 -0.8895423215053428 0.04290700861789909 -0.35249067563412795 -0.35137373779328906 0.07598366354949304 -0.7083106765762064 -0.6306689159314436 -0.5669789328016828 -0.46155678048311777 0.40311555469938054 -0.20377804988672565 -0.5239558781259852 -0.8309317181537572 0.8211477148271247 0.3801428722313107 -0.999074766655903 0.7350886786858211 -0.47526484058947194 0.3016638119270387 -0.30298202693642917 -0.13772511404740806 -0.8382793764149035 -0.9197750080140501 0.7175065246956234 0.48358862130403346 0.6603722226941846 -0.9468724333084444 0.2783187125171933 -0.182755180849417 0.12577322938150615 -0.3599682428394877 0.21845837834402193 0.8031547716152767 -0.9996876944608128 +146 165 -0.005320650613444222 0.6850714629668742 0.20339982912097887 0.10632318606894753 0.19030009984566787 0.8740750399507986 0.6158007342424754 -0.01235468807389628 0.1252539545581599 0.557342396328826 -0.6161462166013405 0.21593431751934 0.7084430711973337 0.9215960117803781 -0.20999749618194907 0.9609633087709464 0.5624766934815484 0.8124442424573226 -0.8101181703496492 -0.7298427303843833 0.861670714424976 -0.1035767494302322 0.6438743570139165 0.11811435743592469 0.6997446900722475 -0.550995181893605 -0.505842496330607 -0.32615143836917015 -0.9878936625751185 0.841509477517544 0.31186491589209453 -0.5033171862754282 -0.5894968757566423 -0.35092642674977004 -0.40392863138481827 -0.2834299468366872 0.9719452075623751 0.6792870690233386 0.5425918369808787 0.1720596149304061 -0.7590712213067989 -0.8276726069629201 0.26635423750664855 0.12592693480054362 0.12295069104453571 0.5446209722263937 0.8266109259397254 -0.021069200634523222 -0.5464396797700062 -0.14031997080613778 -0.7281698735825333 0.8703136603648576 -0.7281580076295071 -0.050646994643712695 0.5756655697985817 0.8687890292496065 -0.7828687329872994 -0.9518181536654102 0.3538643687474248 -0.4643745503966725 0.09377052056914992 0.29637487944760443 0.23182235458898437 0.666857018237865 -0.8567941695140595 -0.3645411842023363 0.9678704914688485 0.6342679527891701 0.4034909914604936 0.36545915448035937 0.7241714469687062 -0.9476680199370278 0.22756350852121998 -0.8751997603322297 0.7351574174655617 0.34441362234216966 0.11710769372637797 -0.0763429887704532 0.05787509184011541 0.18392750959256454 -0.806851840011445 0.800928725307585 0.6366531413370464 0.4412932097374298 0.7493550728521052 -0.688936782123885 -0.7199090476223726 0.908643523360642 0.13966311068962423 0.34550896654121144 -0.3345337654656504 0.8558886655472073 0.7193992647810998 -0.796952286170096 0.42628159689311196 0.3033519983711357 +146 166 -0.8211447109919359 0.060619584248150504 0.2648410893037674 -0.6830422032715966 -0.733141810386555 -0.018179320935014287 0.3322657270256051 0.004218429088671538 -0.0005472159935304699 0.9925836268633241 0.803676121796961 0.09730653786813148 0.021851485136736626 0.2473785818168588 -0.16231321766549445 0.5154637517967078 0.40712026947788793 -0.15770815535157046 -0.009601661024385644 -0.6999018651595117 -0.6117230029822283 0.21955046698035718 -0.32852962002479735 -0.30890952487229995 0.7366375111786971 -0.6756322001575343 -0.9593814794834101 0.2592820689423725 -0.023526407424054208 0.9358712279689254 0.8537814876895466 -0.4013956755170691 -0.20234384006480255 -0.6151277154919381 -0.5866320448606903 0.6690314200417928 0.6876490054099595 0.9827898308838112 -0.4497491391410935 0.0022700531687191994 -0.5830782296274175 -0.43076916113275554 0.5437103513783048 -0.53926337919648 -0.9338695426381558 -0.9357890330133889 0.013872534677490389 0.8008418471426619 -0.05075670153513112 0.5396970610066938 0.18131184161327685 0.9235503351495249 -0.007658398244443809 0.04967695545398709 0.6070743836433599 0.4474737603265371 0.40902510475591325 0.4501337779690484 -0.779984766812494 0.789551694216591 -0.5846410714215233 -0.49986734784093323 0.9043948723790436 0.6037726857585557 0.8768598777641969 -0.33536248524854106 0.7729707627669438 -0.20215115242114678 0.7707965307326645 -0.6170343122919142 -0.1359125618216641 -0.3014202326850506 0.667213955814552 0.18257103931655405 0.6353416379675432 0.25215449140245383 -0.701905454018863 -0.9261408973239238 -0.37761716731217354 0.16599245003780783 -0.8342553346997368 -0.10380581563739932 0.6134630570041308 -0.1468117368753743 0.09507281949302993 0.3306249304282076 0.19282827100245248 0.9701090425429684 -0.6168722138194305 -0.3663369390329978 -0.6462910637386661 0.3719782539646741 -0.5599198271366022 0.500912978730055 -0.4029641157894728 0.7630596426164638 +146 167 -0.27511229582660346 -0.35748086123439116 0.745680212140917 -0.05075174477777433 -0.6769229297575818 -0.17173565782770805 0.4319737041090925 -0.8630525512636569 -0.05990629125206626 -0.9929417641725902 0.23883494215522183 0.3479275757007725 0.17132727249978474 0.6145428565252673 0.9227454701555025 -0.04116614825565068 0.17672786837347476 0.4806154269263798 -0.8896380057920443 -0.24702964298554653 -0.589421749232881 0.3634007085459625 0.18750313385644501 -0.21251139219175053 -0.6430398804852817 -0.33855724954563815 -0.5705166429152979 0.6433420791334121 -0.8803613995680362 -0.9996000185702354 -0.46028322390157683 -0.9338423828474787 -0.4351991608548733 0.3526539801838875 0.03931147899442289 -0.009848128478481488 0.7586909787115459 -0.3754030842730065 -0.7201478698271384 -0.0254193537297287 0.48868343106735757 0.3066022495330698 -0.6008995195673936 -0.9818271020759233 -0.884792061516406 -0.39421843510816656 0.4560626905133123 0.7567430302952518 0.6152860606414234 -0.8107460823332628 -0.06742658472466312 -0.5349118873405403 -0.5429672016510081 -0.7698494883222495 -0.8499703968866184 0.8124341662483765 -0.7017079547884948 -0.4546363125616175 -0.1310877495168461 0.743069062334692 -0.26307582130729923 0.3909608485337337 0.3506590340600224 -0.9488740824662432 0.7676898422314498 -0.0705446135780623 0.34511051893569133 0.23036140144650274 -0.8097975724256725 -0.6389267661681273 -0.9718014900010152 0.6786416524417465 0.3318773188027395 -0.9483037081791075 -0.022157602436781554 -0.653404247070233 0.1575996582882202 0.8321542044335581 -0.21583562495892328 -0.18030240256247176 0.22371213459639594 -0.9901489832323065 -0.48375094180205935 -0.27370919624112244 0.37990865824171216 0.23844180969835893 0.4889554277871955 -0.6592492069421889 -0.646160143601648 -0.5599732399075124 0.6208359368770631 -0.2739961994339637 -0.049954409378920595 -0.9933345086824774 -0.9605297540022866 0.07655818876617393 +147 126 -0.1554955866280312 -0.8225823370946013 0.7990448870251845 -0.25663806617163787 0.326614513544655 -0.27857018166321756 -0.6005192766945464 0.238890713382369 -0.8889604039964287 -0.4307039779496791 -0.2783438828830933 0.1546141247093109 0.5485112047564416 -0.29440986946166103 0.49159171661894274 -0.3141256845396774 -0.6633161361049076 0.4003554544972694 0.6292153908921068 -0.5244022217507991 -0.7767272506947649 -0.0627593456263067 -0.16625881710565094 0.5701698793841727 -0.9359201197564704 -0.17684704159424558 0.3231004878142092 0.03171449144644889 -0.9580954386436089 -0.08529863715699992 0.5250595288194497 0.9090581231066068 0.26857306046506446 0.16640298488642347 0.25124793804286893 0.14626354341354086 0.6675780489098937 0.10035900684522958 -0.7776424464827434 -0.44771427924036633 0.22685177702410608 0.46166411930927786 0.6651772557928552 -0.9015681683159142 0.7210711235210854 0.3560202123471383 -0.3459306687043924 0.8505320663830553 -0.4419677675481424 -0.8034698372276587 -0.23760417901311937 -0.6942451922318225 -0.541388903485118 -0.8305409609166454 0.09488138707887184 0.6138502969859028 0.3170948057742824 -0.38681739090653977 -0.19452225366791032 0.40124901287008985 -0.027549808911044193 0.1331507049208105 0.6564113907321407 0.2936531742783668 0.0753672934387799 -0.7170320183644212 0.3605673657819064 0.07757161939772272 0.2723647892178733 0.7381087372261841 0.3911025005922111 -0.43605226158564414 0.12161346964764363 -0.618862099965418 -0.37183854991668563 0.4556807121884001 -0.9677460361504011 -0.11940843204962426 0.927265787357858 0.4863577753719557 -0.2519593318204645 0.5226073649914069 0.9803316455591193 0.029665991700429162 0.8082256050249923 0.6956557937074719 0.45870088644661555 -0.3057974227211462 -0.19188178392406297 0.7938231473653874 0.37592665894373645 -0.9673421795106008 -0.46833766911930774 0.4745129524979974 0.0225739037016659 0.7068024090665073 +147 127 0.07797702812794172 0.48083493637529773 -0.14467660867459253 -0.84459914690731 -0.9091186756964145 0.8273880006138286 0.3044371586259622 0.7944134519009456 0.1488629257413172 -0.5024830322463152 -0.14181811359866492 -0.5337528107915892 -0.3719243697681458 -0.20026033009196964 0.22923979344878997 0.6020727033932713 0.4852003400327247 0.026925187264376538 0.6364425536792051 0.29903218288737543 0.574478538630238 -0.4783541460983445 -0.6251261458075328 -0.5046039919103449 0.0784960573321205 -0.5122032267004217 -0.9006399219225423 0.40640365789026744 0.08386502302053667 -0.3981216544751638 0.9765598436702805 0.4520649163260664 -0.6866169928803498 0.6346204753649487 -0.8995824277602285 0.0034691490179821205 -0.02827003418527263 -0.7429910436681464 -0.7368496709730441 0.33386061322746885 -0.2076270056175331 0.3107450849479121 0.9200337253952235 -0.7126825071053662 0.45496202453672296 -0.9135487268234943 0.5336135056420708 0.9316666927041262 -0.773979991321327 0.6183193238749749 0.5618352913574776 -0.1411444617815667 0.03055648140020062 0.4055437102050996 -0.46543310093813206 -0.6378938424171736 -0.7574836375124361 0.6938285703387972 0.29556017482324615 -0.7885999304924836 0.13377875963699704 0.6924954576148867 -0.3663556696682224 -0.19694470106342288 -0.4988425455965222 0.3475771494801132 0.7147347992056698 -0.37038957384246296 0.037253677718095846 0.28697143968504113 0.6530745302452023 -0.03233601448725287 -0.4353454906271508 -0.8388741242471243 0.5754346021945138 0.7886031218647649 -0.15706330658586132 0.008750567316194502 0.8525314684356031 -0.7180700981499839 -0.6110297026923996 0.8131797788043145 -0.14052858078677066 -0.6352867575529664 0.282844742273068 -0.2705884202390507 -0.40714596955849514 0.7520713652599478 -0.773073480163492 0.5295638554880602 -0.09940166049673693 0.3749070217846553 -0.3974225858097129 0.32849438887490034 -0.3508391061418592 0.6731511678509621 +147 128 0.7416837320761864 0.9853556100501994 -0.2582648620581667 -0.9388225292739181 -0.2585670557414632 -0.5485964328307797 -0.240432042168081 0.04835393011757927 0.9426991390556978 -0.417251194058917 0.8846611471811203 -0.847810511650293 0.8408655268591723 0.3849238494532832 -0.33259617309095457 0.71957240242088 0.2780117387900789 0.711368353628153 -0.4406552128282355 0.9322621778708329 0.04221627637362979 0.03442418356654242 -0.3623399028273644 -0.2508319711644922 -0.3109999304095208 0.3228965799486778 0.6439146323921972 -0.5821812216162772 -0.04154792310736899 -0.6432328743618023 -0.10092173507542013 0.6425208396699429 0.20857877038885841 0.5106964511191194 0.03880672571775601 0.4112557728016286 -0.6923093618448526 -0.23754507821974213 -0.8732398386086473 -0.5204727259525799 -0.3678430242380346 -0.2540703759083307 0.3794047213857141 -0.19755496825601604 -0.7387547059122617 0.08119588685696244 0.9043347357815579 -0.9402420699653182 -0.4762286502152966 -0.3440815930598564 0.08601898031460986 -0.8369275926727171 0.4111661332587271 -0.13131257253780215 0.6370405626668765 0.9831291923523238 0.30438192439806855 0.24020692795509446 0.9242677835375857 0.5682140766714066 -0.9949278673856421 -0.14044895929107382 -0.291512505465489 -0.1843499315885022 0.9984974959720909 0.4173484353014072 -0.19500161166762986 -0.6574744818672098 -0.3617038044256389 0.37157067081901185 0.9506621695943707 -0.7966188959607852 0.12147239798066445 -0.5203362414470467 -0.9894413272641953 -0.4770967271984481 -0.5707519416158757 -0.8192471882720098 0.23931304482315574 0.5845800315562621 -0.8542239788837007 0.3714114141765765 -0.1637059800741123 -0.8271643159063744 0.448582408419514 -0.643057736421681 -0.7492772363849842 0.9409893345521672 0.39960950352574276 -0.25847074832809147 0.3746380105581386 -0.7032875772069533 0.015369130309834445 0.4973800891071307 0.2811029173070203 -0.8338040916860725 +147 146 0.3161532731060914 0.1357305119356349 0.13002953935910133 -0.731417863954652 0.3988868393732723 0.7849481238383271 0.8986838195482474 -0.8618724700344718 -0.5583720561742689 -0.015335397430434439 0.6847199038333178 0.7581494888044715 0.3361512380503997 -0.2176505305580858 -0.3070835008337318 0.8357827930230102 -0.5580240770728011 -0.7246945849445234 -0.5046811030532172 0.5980680486612824 -0.4574570106779683 -0.1359006632983082 0.15707804170438888 0.39301619227576845 0.340077076186708 0.34177878369457604 -0.5307684890565767 0.051368844300938354 0.1784706806787253 0.7882383372794473 -0.8168581128805656 -0.6698745457006379 -0.9680013524334592 -0.7409853002478104 -0.369246743339118 0.6199417070724951 -0.45655890845945146 0.055405738585022624 0.3263262456658216 0.9450906602080913 0.5952850844364399 0.3063646699023972 0.37766731498920825 0.3947334432983225 -0.24036537590850404 -0.756668156443774 -0.25903264611801435 0.16012195030296783 -0.8986237810190882 -0.9522968644867167 -0.912224662838304 -0.765886486977662 -0.03211508887532588 0.22180694110403865 -0.13979688214003083 -0.819752430795214 0.0808083179297594 0.10196997005632902 -0.08553868252906605 0.2660211806830446 -0.1099384500006777 -0.8112723644037263 -0.8895423215053428 0.04290700861789909 -0.35249067563412795 -0.35137373779328906 0.07598366354949304 -0.7083106765762064 -0.6306689159314436 -0.5669789328016828 -0.46155678048311777 0.40311555469938054 -0.20377804988672565 -0.5239558781259852 -0.8309317181537572 0.8211477148271247 0.3801428722313107 -0.999074766655903 0.7350886786858211 -0.47526484058947194 0.3016638119270387 -0.30298202693642917 -0.13772511404740806 -0.8382793764149035 -0.9197750080140501 0.7175065246956234 0.48358862130403346 0.6603722226941846 -0.9468724333084444 0.2783187125171933 -0.182755180849417 0.12577322938150615 -0.3599682428394877 0.21845837834402193 0.8031547716152767 -0.9996876944608128 +147 147 4.303410673657954 4.8511928613314055 3.976724450571127 5.367696394352146 5.08416250582241 4.8024413905392915 4.735211858337072 4.886150730462497 4.780272337807249 5.161451975266678 5.246878052357633 4.449653261684207 4.834372789466853 3.320400780576767 3.6740150659093436 5.691648811243985 3.8804259615364973 4.986587136943703 3.956710367512108 4.723334099616859 4.761292728432091 3.480735848326055 3.1744109627024244 3.999305309238336 4.959807010765933 4.030478310355672 4.492854568285997 4.3592911028321915 3.5204616466413174 4.872642182276223 4.14712502482514 4.462925706154996 4.802496329209286 4.188407954331069 4.094409978016696 3.1296250121335762 4.449411897374928 3.7165634760490405 5.732722774383548 4.033597236185546 3.3843986365829943 3.482306797789773 4.895923473032746 5.110369785281458 3.774153800402441 4.877950153009414 5.7239569137815955 4.324544283856101 5.77773980264349 4.971337643449197 3.4806718791540843 6.434906475880212 4.021693523235131 3.8772917029782925 4.683230282773078 6.766751446317396 4.419024899019437 3.0700071737935977 3.8087532311742334 3.8773676882602444 4.4965126585548925 4.14125666223167 4.2245237450435145 2.7843612845858834 3.36039135136181 4.038670930815291 3.378546132073928 4.196407325348015 4.5407410293157975 5.464750491139572 6.168438011813858 5.1411260239352154 3.099666133594119 5.980938225515193 4.89757587113026 4.153210462193843 4.140932427429975 4.71709833837 5.120082775964779 6.402969928152424 3.1423458126799915 4.535265893168692 2.9445431354953975 6.581074317259433 5.791457652607049 4.1735290654898165 4.665261674520772 5.364242746714245 4.2052383652348535 3.499826243830361 2.7449320942033033 6.089598920348882 4.659807636510771 4.6856334889250455 4.258167380201272 4.744180382148543 +147 148 0.8676952587520614 -0.7930017149223827 -0.12391619826720213 -0.6117285540547384 0.6697575512293934 0.424891621637151 0.5949660173099147 0.5776514758758347 0.043646112853737096 0.6514940374836884 0.5753192565625849 -0.9222748735799855 0.7143568803585649 -0.8281297352396029 -0.03842932322475767 -0.1366308629690589 0.3272305656276535 -0.9851114613046423 0.3131016093409542 0.3947319561867091 0.9395027533118057 -0.6689326232646227 0.352545885652626 0.01975767908140802 -0.8030939073494607 0.749951977217032 -0.7109981969678825 0.14319919988080732 0.08920155648619388 -0.9887169352471248 0.07196031462726782 -0.015866632480072917 0.23411356274042383 0.12928043310997572 0.856399151196064 -0.09146764534476515 0.35978827774411815 -0.13053957970981966 -0.09830324335533458 0.19671783611626226 -0.9016094785799986 0.09006281473486433 0.05786491110436587 -0.7869039706584124 0.6668953065904868 -0.9671801300255229 0.9876253710041127 0.06568583498298097 -0.29281577536215986 -0.4684413093133122 -0.27577563252811843 -0.4694432618365829 -0.7568880601998662 0.3245060930123933 -0.7186712678660296 -0.98718878216091 -0.8338219779013507 0.8463472314178733 -0.187666937965983 0.16298383692377327 0.6073770515639727 -0.7556252008380213 -0.3500430334284268 -0.24110674276837307 0.4504660548683548 0.6643796795367658 0.39529128003879443 0.3407984162741775 0.5401795973751824 -0.5842259023174319 -0.9025556647533894 -0.6969405418961434 -0.615426394812767 -0.38772998941940573 -0.4794991232694479 -0.25326052091967743 -0.4569997239683792 0.3091319946964157 0.22875878484416545 -0.8544945065963774 -0.18107592608797418 -0.608828526679408 0.6928634368610367 0.9426185484437077 -0.9341932845832466 -0.1856349496589289 -0.0826751219876587 -0.6682311051016205 -0.03701720469862568 -0.627052438320941 0.029672928098490203 -0.6106970892991004 0.4713695664490718 0.9125855281665669 0.8271631789525442 -0.681208785401513 +147 166 0.9469399157674272 -0.3990585097666539 0.6391414971922516 -0.11579415960839667 -0.921457084469341 -0.12733415924944325 -0.06576477106867373 0.9525531680568695 -0.9072689932491229 -0.5797616519678042 0.915243280864473 0.014408208109757847 0.3622218528023984 0.5945389757388253 0.3619350621194799 -0.4778418840665064 0.16424862663022766 -0.04825957461435104 0.8265455454288655 0.9242138446011134 -0.1178090208873468 0.38416945816151604 0.7357717363214076 -0.2319752420428618 0.6794875725480316 0.23360397027604818 0.08694768107163653 -0.3280540322859027 -0.8771444104801243 0.467573067470735 -0.10239570745801108 -0.6386219228196268 0.739781383372726 -0.2350693873721008 0.18573797518182844 0.29336272067892977 -0.5659094832421596 -0.7074268576076508 0.7388888393451187 -0.13686959247404618 0.10042063328682849 -0.9519065412934544 -0.33244004168604624 -0.9470955767710527 -0.06953349744219128 -0.9727855008408377 -0.8484672694728383 -0.4110240074063256 0.22965895278916104 0.2646224813258007 -0.6468403464561931 0.7652508588330114 -0.17243526519426977 0.9338606115096797 -0.45422309912897396 0.9119309247671812 -0.16980110358602496 0.2211012201042699 0.44719706456818686 0.3624988509422995 0.7252613334983371 0.5616905189159682 0.7017564282712248 0.2892638871737654 -0.7342732251075776 0.2598194067727746 -0.4979036001820407 -0.15541763156713118 0.0829961181020562 -0.999333542950573 -0.8769525193286916 0.08668850197301992 0.17174621571257398 0.9651742857132279 0.11813454958727898 0.2531823284206931 0.2776270615034664 0.16181275640263704 -0.015856441485286865 0.6504315918611372 -0.4632912142673207 -0.4545066221950995 0.17393079466174233 0.9938488388795794 0.6989244157247612 -0.725338966924028 0.7759311737300372 0.9702203293400906 0.21250269402160304 0.18807998457780872 -0.21523958349631278 -0.9400540216892359 0.6850556678457216 -0.05104708952569981 0.8046697862969574 0.24338067426298227 +147 167 0.7468459700176395 -0.9122260604570787 0.5264963200914743 -0.5215260224774285 -0.6178818581299508 -0.6153018410840454 -0.43526288278720027 -0.9637094376892765 0.9240839988593308 -0.6651485792181167 -0.2162917357020182 -0.03505388475457849 -0.33065913711593153 0.6320178943138937 0.5341959262962206 -0.9888609837523987 0.4300647270588449 0.6691611593008806 0.11111948783982961 -0.4003596473098554 -0.6393191423132587 0.243934556326866 0.006742899716251971 -0.7385792455852569 -0.923160010076375 -0.518680921991939 -0.5243907544244952 0.9680622180484357 0.2781326164165814 0.9387559359849094 0.09273267392283935 0.6353974519033287 -0.5110834991639082 0.5900672222931866 -0.6621901265243915 -0.6060195060577174 -0.09176739922431931 -0.6659100840139289 0.9999394964696129 -0.11809847462939316 0.6182196804537967 0.38422335576034095 0.897768499470706 0.1929685206349725 -0.4531675668487005 -0.05202220542827707 -0.7336061840174832 -0.8359707481684451 0.9843250343410899 0.1771825596298744 -0.043317067472482984 0.9454615026374305 -0.24707568700601312 0.2909229750552569 0.9535675504463219 -0.6146573750215194 -0.08679998935210809 0.21477279584870712 0.6957510028862677 -0.10139845657924984 0.907083579719143 -0.37648908132699566 -0.6603433468189834 0.6030929533723122 -0.05098577707740359 0.46000259617814465 -0.46000479440939723 -0.26439933281034245 0.7778690452085921 0.6483694816671188 0.48605530241687656 0.7674075809349377 -0.4562288786026436 -0.7229151658371924 0.7959222640349719 0.5074368782254863 0.516002093889903 0.9998915589812352 0.9635719028551746 0.9005319046388893 0.23758127733657086 0.5585981887125511 -0.02757248373215293 0.949445974922573 0.8665951006183275 -0.15124288262121666 -0.8935586999959437 0.08753003351621147 0.843613955363204 -0.2706634569087536 -0.09808988759781911 0.8121761273009569 -0.5967018702351716 -0.5470028156459605 -0.5866860294944161 -0.223139046424375 +147 168 0.4323259699679034 -0.14023584763033625 -0.9573446486919612 0.9003988556527887 0.6281427087411648 0.4243726634069025 0.6158265993921885 -0.32455903957828736 -0.3553926635435771 0.9380855646642072 -0.9110567393802294 0.7209347896382987 -0.6954386976357676 -0.04568344623872256 0.8365521834672818 0.7554063788014347 -0.814849252054384 -0.7645566933160208 -0.4901771070160328 -0.6352136901182679 0.8242660221286742 0.9442538053828855 -0.7298914167587027 -0.31482159302125523 -0.5615234488689043 -0.4980303329124589 0.16146879638398604 0.8968974309858395 -0.0526768691854933 0.4446980490242094 -0.5049307617206069 0.48028234033138517 0.416552408479929 0.45421111038813033 -0.3362049906808966 -0.9335212281995475 0.5983259110733246 -0.11107317343212397 0.8556550209913687 0.8309391557752599 -0.17190632405842465 -0.30647861045370783 -0.45112295281703463 0.28957832301680897 0.2111642676049721 0.27286295867570964 -0.12488039471188594 0.09081188603159873 -0.9620660582379064 -0.7759315913361584 0.5986091222854477 -0.8647374736417255 -0.9454340644543837 0.40006720144072583 -0.30558204250714605 0.6868302999207898 -0.9444532241265666 -0.3250908400990724 0.5913441301066746 -0.7298445357495278 -0.14195967521137942 0.08879237032249887 0.0043949139599170906 0.9329673427453584 0.13920409646059273 -0.3647684195411345 0.552094100052227 -0.6223976731552396 -0.8711731606374895 -0.35115065799773326 0.4660176453370286 0.9354391386912326 -0.491157568945922 -0.5914326556746419 0.033754010889750274 0.35371618873005306 0.6043772195883341 0.9811476351552735 0.16524342285722016 0.9063319097171065 0.06904838139138003 -0.8215808243445268 0.0667140375485864 -0.555076678319155 -0.7621953623038253 0.08288973234003105 -0.763081468797153 -0.5465504762073929 0.6934811956073486 0.26946997007847195 0.9431127785389715 -0.5616748582070112 0.8743007799810274 -0.8071395128048131 -0.23789271395260903 0.028560702211166467 +148 127 -0.24454100022099579 0.1126825309977415 0.24829451897037047 0.8206822198367818 0.575069312685222 -0.5915610356450787 -0.33455724868212133 0.5455213097747582 0.7303811253004688 -0.8583378651083735 0.5027972665215337 0.4082787514000037 -0.16586023734786126 -0.19648115067951255 0.5251576160898828 0.0908514542477088 0.8363109058050224 -0.3606607427356827 0.9894377012207054 0.9428753287245231 -0.35010380893875537 -0.3519635369188172 -0.8963226735052907 -0.8213353265459831 -0.781435070929595 -0.619208886851311 -0.6943996789663527 0.03728335108494685 -0.9124208492906443 -0.7034089594743196 -0.5986520180341899 -0.3994716306352113 -0.6902778751804293 0.15177976934154902 0.7220897120416101 0.07630121158684511 0.7132892934614143 0.1789666070968552 0.304541336276146 -0.9216295014641849 0.929474378422148 0.6376513019072516 -0.5107700025501782 -0.799781844565671 -0.9577395899311019 -0.012908203545754615 -0.7436228758876051 0.16258246540913213 0.0802986311398508 -0.6717716384709014 -0.10883832308406172 0.22875911777415414 -0.6151919119483429 -0.2110737384964545 0.04928039236661874 -0.8305807159803662 -0.7445257978205291 0.27244246685079054 -0.33330777232257214 0.366403933872685 0.7430564353204558 -0.841995023568374 0.3256806876124114 -0.3702534559091082 0.983053169414192 0.11682887023297561 -0.9408278269587935 0.9614695341849702 -0.22076123006833548 0.7592069021999501 0.15499771778056437 -0.867043984789913 -0.8423387152053416 0.7317847003601066 -0.5284077170877366 0.9193565694355554 -0.049854537703603485 0.40546413253330416 -0.47702788135476726 -0.8410278869834587 -0.7394379431901983 -0.9104241193551015 -0.19919297005461956 -0.7284645308761508 0.6563159216841679 0.9367591598610481 0.9753686242154942 -0.3411095478771553 0.6710691556541541 0.5882365828217382 0.07552348573005263 -0.025179614523961336 0.20663341278840908 0.25046664004862484 -0.7135532551797616 -0.7418600224786103 +148 128 -0.44186307457114404 0.660714183859028 0.6066884854991412 0.7467782591768846 0.790585943318443 -0.024860639432897624 -0.8923399452663405 0.30968118322018 0.3734651436636922 0.09993338611533353 0.8618878214782026 -0.8654964979894759 0.5427090709345286 -0.6897736295067687 0.4023058867650322 -0.7383519478987439 0.40974606151394677 0.7568496399569973 0.9003725881542011 0.34446379470973043 0.7490931338544484 -0.7410310264631885 -0.30370536317908314 -0.996862166376737 -0.6787335419904714 0.30570826728684786 0.38386838693661063 0.8964454404350706 -0.3911195807175536 0.07301450256500841 -0.22586631294434723 -0.3320555450113818 0.5522103231830091 -0.7854718862050976 -0.8200629536727746 0.9179161928964283 0.39748436520820274 0.2042070498254991 -0.0897970549908027 -0.6263413213925437 -0.23652286608046125 0.17410503213466577 -0.23329653924180316 0.7172723371582741 0.024419304132896613 0.7745465068351831 -0.46686684301082737 0.03344146459844022 -0.9918740811007523 -0.9981786546260281 -0.3760950611757825 0.8231439720135472 0.7082590776425552 -0.6354071439894036 0.7465597792133574 -0.8214564196675749 0.23622156315137155 0.18638655926949377 0.048319850518707685 0.7796995945750518 0.9951522189480719 0.8459276456218783 -0.45955567558974453 0.6861514726628464 0.33153206077335895 0.3169821062470495 0.08882229869155456 -0.8385483824861004 -0.9576569806031479 0.2659923634218535 0.18571697089841788 0.7981678352842934 0.6876628011965522 -0.4101499079868334 -0.7717455824093693 0.44572726540075736 -0.561352993542608 0.30192403164034953 -0.12000021119606807 -0.3894123403849119 -0.7806219762305278 0.4097419470133903 0.943005281786139 -0.4400968323531069 0.7882103355337351 0.7831085259517314 -0.5083652071073295 -0.6874659399861134 -0.9291413392254411 0.4490126247677486 -0.5961439079338648 -0.2057653746086472 -0.8623851891753802 0.8243930035676448 0.18557088742946526 -0.8866103263278604 +148 129 -0.7212481114109528 0.16172809094710905 0.055341562342151596 0.64208953411576 -0.971088130110155 -0.19221423338133192 -0.5890816006975768 -0.5017267762145778 -0.7799018003841811 -0.7799622237055626 0.6610424021575894 -0.7780840645440192 -0.1464115798050878 -0.37076015819956076 -0.021647406522973034 0.34764294959220776 0.8584385091631506 0.07056632374697736 -0.9133287369469409 0.15833915378160657 0.35342793669602246 0.9073071387340328 -0.5709346138716278 0.042314585850570685 -0.7991499407254254 0.8746151214098694 0.9723986659295742 -0.8351376084284328 0.9487112727334512 0.7693845566335158 0.4012679325096762 0.11585137201203688 -0.5215343825547845 -0.6591119224901743 0.8073379244658441 -0.42716110706042953 -0.2723453182578641 0.40884283756492446 0.7917895356084004 0.686195895818015 -0.5761888562886692 -0.991528849116867 -0.9084602724962645 -0.3497889590780656 0.8090573407920254 0.9890564496241196 -0.7782643679819425 0.3623384392615472 -0.7534404965292687 -0.8920982698387343 0.8748153024436756 -0.2954821286041942 0.4778855031472231 -0.7236847794615278 -0.9297909989844162 0.6262001416962402 0.010170529573035214 -0.5229414907023566 -0.22928380594147857 -0.9330540366671196 -0.32854964767038175 -0.7539143382121603 -0.6316773141647829 0.9517390693833083 0.31200746105090826 -0.41240017701430665 0.2523361559990074 -0.08081328268872934 -0.16274866540080213 0.332166057475646 -0.8312861401196654 0.8700534522428225 -0.6253697907361166 0.6658839853789176 -0.6429671130074421 0.7235858660025296 -0.5361246897329821 0.18496381390996408 0.6618656481294103 0.59447484393564 -0.2834999478818683 -0.1723103264820991 0.44733561079667505 -0.5425214946532253 -0.4365695621371277 0.06049374428141108 0.3381859560960645 0.46115132270253256 -0.3059074233038712 0.9003649279264381 -0.23709448806356015 0.42661157058726595 0.4710473988087207 -0.9448777536626698 0.687125580502248 -0.02728177022606415 +148 147 0.8676952587520614 -0.7930017149223827 -0.12391619826720213 -0.6117285540547384 0.6697575512293934 0.424891621637151 0.5949660173099147 0.5776514758758347 0.043646112853737096 0.6514940374836884 0.5753192565625849 -0.9222748735799855 0.7143568803585649 -0.8281297352396029 -0.03842932322475767 -0.1366308629690589 0.3272305656276535 -0.9851114613046423 0.3131016093409542 0.3947319561867091 0.9395027533118057 -0.6689326232646227 0.352545885652626 0.01975767908140802 -0.8030939073494607 0.749951977217032 -0.7109981969678825 0.14319919988080732 0.08920155648619388 -0.9887169352471248 0.07196031462726782 -0.015866632480072917 0.23411356274042383 0.12928043310997572 0.856399151196064 -0.09146764534476515 0.35978827774411815 -0.13053957970981966 -0.09830324335533458 0.19671783611626226 -0.9016094785799986 0.09006281473486433 0.05786491110436587 -0.7869039706584124 0.6668953065904868 -0.9671801300255229 0.9876253710041127 0.06568583498298097 -0.29281577536215986 -0.4684413093133122 -0.27577563252811843 -0.4694432618365829 -0.7568880601998662 0.3245060930123933 -0.7186712678660296 -0.98718878216091 -0.8338219779013507 0.8463472314178733 -0.187666937965983 0.16298383692377327 0.6073770515639727 -0.7556252008380213 -0.3500430334284268 -0.24110674276837307 0.4504660548683548 0.6643796795367658 0.39529128003879443 0.3407984162741775 0.5401795973751824 -0.5842259023174319 -0.9025556647533894 -0.6969405418961434 -0.615426394812767 -0.38772998941940573 -0.4794991232694479 -0.25326052091967743 -0.4569997239683792 0.3091319946964157 0.22875878484416545 -0.8544945065963774 -0.18107592608797418 -0.608828526679408 0.6928634368610367 0.9426185484437077 -0.9341932845832466 -0.1856349496589289 -0.0826751219876587 -0.6682311051016205 -0.03701720469862568 -0.627052438320941 0.029672928098490203 -0.6106970892991004 0.4713695664490718 0.9125855281665669 0.8271631789525442 -0.681208785401513 +148 148 5.234175690747499 2.364779644821328 4.00422044480903 5.822455461144075 5.8862033842265795 3.7924118521067864 5.746283063287981 5.24787552792149 4.661523182849464 4.925148469516156 4.847633148149052 6.226999865887692 3.5425913436525196 3.7210918470710483 3.9041024220420883 4.84789170394361 6.102850859989543 5.428091039241638 6.5844025773647 4.540632566213769 5.412290381084109 5.7810432081219645 4.975078701332649 3.5023798999529996 6.574474288648921 6.434037990745612 5.252600453475246 4.256683086406827 6.3192925919218945 4.187438721302475 4.040066307182695 2.5365654487885143 5.230132803258136 3.570930271360742 6.601747233242739 3.102054208738103 4.293080845690105 3.738013917422755 2.8750333241355763 4.648067201626715 4.6342081711926735 5.209102868372106 4.393990499091698 5.745900320254593 4.769989974020059 7.207459808224058 6.220997612787044 3.9006938768313204 5.0063837863511615 4.541166661704662 4.1932685498428555 4.311743910167588 4.2862922888329145 4.099702707572378 5.44059590092307 5.964765567129463 4.699261389091886 3.065391395551198 3.7484231835158472 4.260213214276642 5.082386229938161 5.672149806083489 4.488124772190491 4.712169280030215 4.186649481239432 4.0765769325009495 4.370240308726372 4.777234999288238 4.842507789145456 4.497400968401722 5.421337115793051 5.3024105386432145 4.479659109441882 5.130511197159342 4.585085621084199 4.530044168288521 3.90282133095661 3.0794764574909577 4.124913763093546 5.144668512459815 4.789321944705368 5.951677547475715 4.651999366366126 6.050526524288047 5.8855631605657965 4.887857240894473 4.649496623356979 4.1583748813417305 4.613589756522879 4.37617450439086 3.073576003253172 3.930580915405586 4.735045153764112 5.806017321082262 3.4931559610900136 4.910362639582005 +148 149 0.8767657368479196 0.01723221739684999 0.45067612653048705 0.6205896001248503 0.8929492520070454 0.5295194717973244 -0.8720879092215799 0.49402248086222733 -0.9737289859765266 0.1829817729894574 -0.1819426617791413 0.04904811773895523 -0.4572320677538535 -0.1758890245566398 -0.6656626905729164 -0.7900417237313571 0.7949003942356894 -0.9740156823589796 0.9118887340311848 0.6233869366085869 0.2235892947229341 0.775524299001161 0.6348898308301532 0.23581800327443458 -0.5717248537725648 -0.6561370551224934 -0.30422757385216315 0.24000464585763726 -0.966448424063594 -0.7707468073826056 0.7191993732559028 -0.2025993413626228 0.3226889793315306 -0.045766268393058196 0.9479062677733368 0.02453250538993701 -0.049379005979911295 0.8716890090989509 0.5733309012303371 0.09069100889319537 -0.16794442044217806 -0.9945792287818851 0.2019893675711033 0.9976490260117274 0.10485353823214161 0.8667737128862185 0.4563549200549244 -0.5913642518188498 0.5813674856340159 0.3112555325152482 -0.06822011693855878 0.7587456308679195 -0.3738519337124575 0.27174663418723055 0.28271904976501583 -0.3807367443711269 -0.6316566826611882 0.0881819890018567 -0.3735707844088585 0.10769789276488817 -0.10950526718074838 0.8142997815433446 -0.34129290049128036 -0.21077667601393135 -0.7279649736329621 -0.6170783711252359 0.42964044391741574 0.5903772576060815 0.5613717647252019 0.23698396383119058 0.8508223115561853 0.5333011703813981 0.26790567428701095 0.5357121948902348 0.07723626535811667 0.23025799713380568 -0.06976609185221072 -0.25694754638120876 0.41310931978935117 -0.09307359245256697 -0.43506664958938557 0.7121605463495515 -0.5939521167638833 -0.33513847691672227 0.39567404457711386 -0.8271866023932208 -0.5961694485421924 0.397734460407386 -0.40572193484344066 -0.1456045407257398 -0.18808271671465748 0.45839453957263454 -0.3476487955786898 -0.3584515578785159 -0.16280498811802513 -0.736249700264932 +148 167 -0.11912243066312334 0.0215443763745522 -0.7929523527396685 -0.9922259668277871 -0.4792191695426342 -0.6993022424355462 0.21280486716371083 -0.8514638120578002 0.38548165802144463 0.8972606559411058 -0.6354742183788884 0.9452621960987431 -0.0441736838043969 -0.338809239020494 -0.622101140975934 0.8623637139932692 0.9426395374319989 -0.5239669477844815 0.734839335124263 0.3930286773030274 -0.6134184177663731 -0.1880196777883667 0.5588774221635378 0.41175208207561753 -0.26841266398189734 0.6529369619670826 0.10031301540239856 -0.8626038969084571 0.8979338343754402 0.45083032056656447 -0.3653923418465266 0.20514413185678215 -0.9027905143923975 0.8435430956894683 0.6545229947648599 0.7545639264412642 -0.6132095660640471 -0.2648307538092429 -0.46670750251421866 0.8721940043069296 0.7348894132971189 -0.9994215081517088 -0.9368014511820348 0.8199618068332257 0.9395025598288806 -0.8939976840707609 0.7963970888074756 -0.731187358968765 0.5345291013191649 0.11853859210210893 0.4118828287126155 0.2900353736836583 0.5624314340413885 -0.003905723160045671 -0.17409778020821798 -0.9253667828600718 -0.6236087892547844 -0.08172048871451043 0.8974781076543896 -0.7993744176571207 0.8525978889330617 0.31696648099930624 0.6244064921542736 0.4418261069967 -0.027290202703902366 0.4313857875754503 -0.6954717075260928 0.5824286719445049 -0.8823778514672589 0.8497851310732158 0.8463063687347572 0.7947620787620224 0.2009993964645831 0.5057218927370357 0.8855988039460456 0.6636373458886304 -0.9418842351736658 0.2912915798530462 -0.35505921277408037 0.24808706723803509 0.3289307677236244 -0.8514963598735843 -0.3007849333596897 -0.8732489928060667 0.7550098953948965 0.22530836064890414 -0.6719405193461931 0.6687051574682885 0.10828688676641351 0.4265654935286791 -0.157133300804982 0.5635925915279596 -0.9663598559438666 -0.5170016468268621 0.1368337045510717 0.7922082800040606 +148 168 -0.6233106690413741 -0.18918041881945502 0.86364793129924 0.580529478365738 -0.047349530656091376 -0.8897482729673842 0.8057664639022741 0.1999237579247639 -0.7278438340109814 0.6716957027631323 0.05032269116643917 0.6671555120001438 -0.055220108189987016 0.31677487582208697 -0.9995127279931344 -0.8972357538638116 -0.6202573202045689 -0.783996389245315 -0.9879370713862685 -0.3904166432747769 -0.46132803552678836 -0.9225638008641399 -0.5928918179052753 0.7409738601305365 0.7436760590836904 0.7337220757577283 0.8886295744074346 0.7357054964857226 -0.27595371719832706 -0.1291455655572673 0.651037563726816 -0.44291371986719374 0.5063798315171311 -0.38784782850384425 0.3473738879061774 0.4024927171489836 0.6163064529090418 -0.8169072865957985 -0.35111858883770397 -0.32081774617111924 -0.4973065235497105 -0.42359035862854255 -0.5136866607495085 0.12800757107601246 -0.19481420980135034 0.9437965341567383 0.5609102025306034 -0.012776946921547738 0.06214797812343442 -0.20259527435463331 -0.9418537471093891 -0.42802781908860177 0.059854533546506605 -0.5365547334511367 0.7481310389998748 -0.5045269065714393 0.7418111197925041 0.6832483714861797 0.48274370134979905 0.5101503689484876 -0.21139647539314632 -0.2536732356071807 0.856650572166074 0.0674603075742155 0.2627956933426616 -0.7924680426335835 0.6433552831188516 -0.3579511367867063 -0.7364533569384524 0.7807316303590313 0.8480475233607903 -0.4246729662064179 0.9439511600751722 -0.693082468935956 0.2966156168255951 -0.34712306916752644 0.054301817062552216 0.8213166789616098 0.8076555413920639 -0.9878560876916243 -0.712492781650605 -0.9369235688330815 -0.30102666291313196 0.8160722079546194 -0.9101857771039394 -0.6299372824099758 0.0001429221718451945 -0.31388023134255905 -0.9128336279592348 -0.608419369274235 0.5674948346877009 -0.10464161361212776 -0.7396025328174536 -0.9713598729394712 -0.19025720769953347 -0.5545550351592747 +148 169 0.8088039875309554 -0.23767519662985492 0.5833963869752299 0.8035938265508122 -0.7527497871443214 -0.24519522860023435 -0.9626630646931424 0.8879746377434043 0.21054724156769788 -0.48835405705591084 0.9318113225783209 -0.9276593388870156 -0.9584714946484771 -0.7409068871156723 -0.171194982928083 -0.5484805548434122 0.43373028653399537 -0.5722177327410889 0.26919911680467745 0.9746802110696002 0.9070208646947531 0.426020031669621 -0.3495105082875456 0.11585587135561992 0.9978147968206261 -0.9267971306118385 -0.2222868401700997 0.08417652054378522 0.8417715468832379 -0.07198013867283648 -0.5294688890730648 0.5644993032143071 -0.9094694824941627 -0.5323372612735597 0.9388465740211658 -0.2490545745217554 0.6100385974782452 0.19583716432310738 -0.030308820072945997 0.8394343283639416 -0.48153251400531194 0.7104450256696717 -0.9184884271207561 0.633283682738552 0.685992336791674 -0.8869147234937149 -0.8928708267332413 0.9843997541008229 0.9614139500044072 -0.14973936977108981 -0.32502355725103915 0.21818308154165167 0.6905007694245207 0.47139462586319825 -0.8804022005334469 -0.15831330621862816 -0.776786881960303 0.1606874004442942 0.5532270980506566 0.005003244675303664 0.7626507529111155 -0.6806480431989765 -0.49831277158211584 -0.8906746646634225 0.306272161613083 0.6420069062253504 0.6707141056017554 -0.95464324857873 0.766837077694478 0.25240314327636004 -0.6887201052013014 0.00544674349095442 -0.1716732064086981 0.20424244162057037 0.8415869504357434 -0.7124485155680516 -0.6586497878225501 0.14952347582651648 -0.8441147177750841 -0.9163374673308209 0.5241926316264414 0.45572157983482664 -0.23086384766783397 0.8453838023135547 -0.8063237170832713 0.7203278156577495 -0.7217109252078644 -0.2317645478256538 -0.32525149446080803 -0.0920110111778718 -0.7402731278469146 0.7125784594689282 -0.2187920490705504 0.22856018721638138 -0.29486973133437133 -0.47985704974509513 +149 128 -0.15155347323883261 -0.3669195889264538 -0.6363230535792921 0.02880780080251033 -0.641784454114348 0.30211202310657126 -0.768040120310719 -0.0598966787933084 -0.2807167801258006 -0.7566884390856248 -0.01990438693678387 -0.690417640305401 0.08291117398706938 0.7930035835044749 0.6812217512369101 0.3202086828718902 0.38977638739937626 0.8044974233801863 -0.17832437142498647 -0.10583083494516488 -0.9321668159892549 -0.44382826559720634 0.8801426511025734 -0.7402070991616447 -0.33178583106169635 -0.08518260851696469 -0.5654236630324783 -0.7514699190315179 -0.34741550478637406 -0.5589081163299761 -0.8321791209686105 0.9143629941858233 0.9557210276501165 -0.21486327953974493 -0.6805146079352953 -0.3030043842398291 -0.8245692353588041 -0.45350826778667663 0.6143301283076741 -0.4743982052771891 -0.04769644392279648 0.13626300373614897 -0.5948192358348694 0.6467755757162592 -0.9957008704775221 0.8383651617038788 0.7761707410209602 0.5335108380412481 0.16527271811743138 0.7075557946005835 0.01558691824296421 -0.9404888666579996 -0.8227094792626533 0.8671291745723007 -0.14792164790160967 0.9074548719549693 -0.3470860264272233 0.6838341989424046 -0.6546984928276067 0.1798284543640316 -0.6908508823789263 -0.4380260532029301 -0.5397473850593937 0.3057118130874541 -0.5464994272216328 -0.7822188645656585 0.16517729721171515 0.5201082039655596 0.7151365490733319 0.26855119374089687 0.6149197782349578 0.9173101589211952 -0.9534299282621632 -0.16477582846777583 0.7089813674600458 -0.011300328860865738 -0.358044726248536 0.32938977493034804 -0.7759952407883473 0.7682478827131616 0.343356629835488 -0.6863811472307564 0.2804444375912585 -0.19557226554404883 -0.532188018149212 -0.7305325015894668 0.9017670962577471 -0.43343683300205704 -0.8797325309605717 -0.1297978383383258 -0.3077958364074185 -0.5047667407004219 -0.03647603642952357 0.29134086971706163 0.18449041888344553 -0.8929256896950128 +149 129 -0.40022574323359295 -0.9592462096173222 0.9187837731759647 -0.009889054811745623 -0.4607686458784448 -0.2559010348985258 -0.3455903423233757 -0.7442108628394744 0.03288053021902004 -0.2630684063193067 0.6748249049483555 0.4965861156737825 -0.9246858931178137 -0.3801694032629923 0.802308347656628 0.491787442293377 -0.2338796083578183 0.044900814330867345 -0.6673116995289139 -0.8133627732424535 0.26721934631673094 0.21175913678187475 -0.47808258666137626 -0.34424412413853056 0.8895500169238209 -0.5052491210870347 -0.23998129136403734 -0.49747081901819423 0.8896148788003873 -0.38054429321089533 -0.9387454791602239 0.878777670920686 -0.3777150381266159 0.16537884741291697 -0.273121315359373 0.3729240575030499 -0.28025354582325646 0.5236893549007009 -0.8582528941781169 -0.30076082501793056 0.2153088491989461 0.9615590829908098 -0.3200228557713798 -0.26601660644564706 -0.46387611813928187 0.14172670356992056 -0.5455249076219768 -0.161926011104377 -0.33119887765971434 -0.2222943758625615 -0.6964508898503776 0.6504024226033247 0.2638575568478154 -0.9751346024177379 0.36988007270942425 0.2640388464754295 0.49456114493079073 -0.48820388771347 -0.9557823297723662 0.62393351735387 -0.44889556590368773 0.22764323837811595 -0.7529242270947285 -0.9563154341597164 0.14778578659371355 -0.9986509481475516 -0.783766582505554 0.16338957365529172 0.8752707170200145 -0.2393994479966708 0.4596563610373572 -0.6244087223268242 -0.29914439687211813 -0.7531330927352413 -0.5074544692208238 -0.24795507424806496 0.14661943541723943 -0.6809721288481994 0.14994639649582986 -0.49384863471948814 0.4343259807341866 0.6362635106300982 0.3185204626450642 -0.6033405926690631 -0.8979786090635731 0.5421289228911692 0.42247230697211413 -0.04265629215938205 -0.6224623572997854 0.9280695844141493 0.17395563090024213 0.07397730052938023 -0.9998070459420763 0.7901166579368393 0.28319678261054104 -0.6577247719731216 +149 130 0.10596888714107289 0.7088566226784849 -0.9838047130476579 0.056935354658941284 -0.9872809886921232 0.30370437342041834 -0.01138954385966584 -0.33348131990710783 -0.9999498830892197 -0.5656901342356633 -0.4822509380024793 -0.7769593309774596 0.31571558067290617 0.10101185913201238 -0.7553199001395523 -0.7427936720230408 -0.2664619600026856 0.6236649964263394 -0.6205173047257364 -0.1295464547675318 0.5760645450997712 0.9781228426345736 0.11444465869061471 -0.48980680049026226 0.9382911632734448 -0.31495450518579426 -0.5913136290558163 0.11863324258752272 -0.45697161968109135 0.9760674145872272 0.6001511040314553 -0.00873308926913774 0.9615499575562496 0.4647343219402644 -0.35165385011856887 0.5211081185158783 0.7606775004344857 0.7913749382626616 -0.08411812277094222 -0.4696474314834249 -0.64063564348692 0.19333237766137557 0.0973909103141044 -0.990924423469645 0.9114710243852435 0.5112302932771697 0.8417030223041388 -0.844932517678386 -0.6956952292357246 -0.022193975072089644 0.41470881408270155 -0.23613316518418093 0.93996885930575 -0.8962014061614374 0.44746802640094985 0.414419072713039 0.9240602415207633 0.5114147348428777 0.6313649823203793 0.9602463245854052 -0.4400764120792766 -0.013259445149766957 0.4541145033435059 -0.7540067714677141 0.6268302132242085 0.7214332179512308 0.1358079717226892 -0.5164551268899369 0.31902950662547425 -0.20516857875923167 0.20418110172555504 -0.8438341933346756 0.6167048943983724 0.04617082538158068 -0.7398547522784225 0.3625545250554407 -0.958995836885981 0.7016545355807013 -0.6924970669814621 -0.06636850843990416 -0.2657303775475224 -0.6707089699164923 -0.9084875271111026 0.4434872168424413 0.4503962282303249 0.10915951807167934 0.733988575793808 -0.18321609196007205 -0.7278694088319078 0.10844804691751198 -0.1864919806377039 -0.8451843520884739 -0.5595249615687246 0.6621691236792189 0.10721412717360268 0.80703434954682 +149 148 0.8767657368479196 0.01723221739684999 0.45067612653048705 0.6205896001248503 0.8929492520070454 0.5295194717973244 -0.8720879092215799 0.49402248086222733 -0.9737289859765266 0.1829817729894574 -0.1819426617791413 0.04904811773895523 -0.4572320677538535 -0.1758890245566398 -0.6656626905729164 -0.7900417237313571 0.7949003942356894 -0.9740156823589796 0.9118887340311848 0.6233869366085869 0.2235892947229341 0.775524299001161 0.6348898308301532 0.23581800327443458 -0.5717248537725648 -0.6561370551224934 -0.30422757385216315 0.24000464585763726 -0.966448424063594 -0.7707468073826056 0.7191993732559028 -0.2025993413626228 0.3226889793315306 -0.045766268393058196 0.9479062677733368 0.02453250538993701 -0.049379005979911295 0.8716890090989509 0.5733309012303371 0.09069100889319537 -0.16794442044217806 -0.9945792287818851 0.2019893675711033 0.9976490260117274 0.10485353823214161 0.8667737128862185 0.4563549200549244 -0.5913642518188498 0.5813674856340159 0.3112555325152482 -0.06822011693855878 0.7587456308679195 -0.3738519337124575 0.27174663418723055 0.28271904976501583 -0.3807367443711269 -0.6316566826611882 0.0881819890018567 -0.3735707844088585 0.10769789276488817 -0.10950526718074838 0.8142997815433446 -0.34129290049128036 -0.21077667601393135 -0.7279649736329621 -0.6170783711252359 0.42964044391741574 0.5903772576060815 0.5613717647252019 0.23698396383119058 0.8508223115561853 0.5333011703813981 0.26790567428701095 0.5357121948902348 0.07723626535811667 0.23025799713380568 -0.06976609185221072 -0.25694754638120876 0.41310931978935117 -0.09307359245256697 -0.43506664958938557 0.7121605463495515 -0.5939521167638833 -0.33513847691672227 0.39567404457711386 -0.8271866023932208 -0.5961694485421924 0.397734460407386 -0.40572193484344066 -0.1456045407257398 -0.18808271671465748 0.45839453957263454 -0.3476487955786898 -0.3584515578785159 -0.16280498811802513 -0.736249700264932 +149 149 3.9296488352711987 4.605628977431292 6.08613858192801 3.988559301232115 5.953567153744997 2.821163232735877 4.097057320544442 4.98982071654075 3.6200960583130453 4.243483325472252 4.417099020547736 3.253207072547627 4.3261161752718795 3.4666609886702693 4.374598904306458 5.599137364731875 4.392840957018454 4.699100252645824 3.9247406971943843 4.719796832994124 4.793033263509859 4.201735194238007 5.7522387113734 4.444220618146699 5.445755026611883 3.062634682964419 4.353151842913621 4.242437141210596 5.3585011957756326 4.871258219034735 5.2602171070904395 4.573299501808824 5.209637260150263 3.07231799276157 4.799279182985072 3.450802427299256 4.94808523771591 5.656323911584156 4.990174386964306 4.44233631668153 3.217421638554752 5.897769879372071 4.2513671748868465 4.872023294383337 4.940308175713286 5.117895717504455 4.632914228457759 3.5256003414282917 4.89843368765421 3.951287362279623 2.714943449975236 5.709848394418486 5.092823781413122 6.514573625935639 2.598846189677899 5.859637420467314 5.0655216120656 4.094937192702365 4.804872887065532 3.9271189721463635 3.649291776589484 3.9508224165023043 4.608175806244887 5.578055175280858 5.654713816710398 4.811243488960188 4.189506383107349 2.668274574752557 3.9547095156568 3.62258979266479 5.097048947982807 4.5926228645727525 4.49516923573675 2.66870543529956 4.41828162967354 3.8247972731713715 5.922421435492251 4.012138475672106 4.224280990709695 3.0431845648314186 3.581216818951227 4.239699022191864 5.33845201180478 4.966569136378755 4.250215622781063 4.788196096561079 4.21664809329887 4.534916141730731 4.165714522814877 3.99435283079056 3.0151244726930164 4.450353465484536 4.878010389362766 3.857085898799022 2.2567056466201785 5.7786932025520255 +149 150 -0.7667797207606715 0.14017065144003893 0.5036954543038412 0.7227453667719836 0.7729671484411074 0.12258218980425539 0.496306258288453 -0.7305652274976782 -0.15277602378860178 -0.23071121920731996 -0.2832963431068243 0.3108493457909871 0.5450029740054694 0.43618278019572365 -0.3203136684636183 -0.4895061289964069 -0.946164146113188 0.7054863421483073 -0.4984545428509237 0.5643017150095642 0.9292499978941031 -0.8413303852192471 0.8061534242236486 0.3546631305431036 0.9717476037046597 0.7944784735351151 -0.742357658223675 0.9269712025098353 0.6088453835650751 -0.5000932296353549 -0.06363456183005933 -0.8269642599661471 -0.7490178894434347 -0.7023156262029937 0.12113339539083623 -0.5354373048422918 0.9713689182159446 -0.38770251338847106 -0.3308958184447255 0.39339989183096313 -0.23172862082234835 -0.9880889812199762 0.7441354450598625 -0.9197956592228229 -0.6024596693011983 -0.5708702858626082 0.5554105621032941 0.33776547608715024 0.9021154333565908 -0.6460784577552465 -0.19664160719206292 -0.17057874556739283 -0.5238044967213427 0.17244870715441563 -0.279496089716905 -0.6812898452794256 -0.701490592892712 0.7354802848865922 -0.767485695382363 -0.2879298205620149 0.05176294746763643 -0.08966413471530288 -0.4574455824220345 -0.6322534115594962 0.8330400438165777 -0.059202942247834844 -0.625310116822341 -0.2922291353057227 -0.29239109541436403 -0.5953144859872139 0.4872780053240877 -0.2951181679348902 0.15004629107213474 0.10781090443979102 -0.09561167475761678 0.2199356573038227 -0.9503519336598207 -0.15267877613133618 0.4137278660603265 -0.10243255989038391 0.3652376474633954 -0.5858292260738787 -0.9451335823769629 0.3203305210602825 -0.2915107231614502 -0.7686657031692532 0.09071100266687582 -0.737719924879878 0.46015480553234944 -0.6228683662845056 0.20440653866828562 0.3252304469980458 0.7574503252350537 -0.030146822752036728 -0.6250419026944083 0.4757331005435821 +149 168 0.24487764011114543 -0.9805229553798851 -0.47925125840489646 0.9698837882475977 0.5539325233336319 0.14279139660132412 -0.9245871523263633 0.8079938329495235 -0.2730384365199481 0.940203481844905 -0.7549265637595242 0.3671131281137141 0.5449141336982803 0.054692915048710544 0.3300260473764052 -0.3802581358624959 -0.45551845297221427 0.12725843672824388 0.08453699366266698 -0.39512189090287086 0.31363290482284856 -0.2945845131260678 -0.5948200512246731 0.9745768167626114 -0.4479313223995358 -0.014525579485738627 -0.3538774883968585 -0.2552307087251626 -0.8090144689472076 0.31967102019090454 -0.31641238232143976 0.20740997566547792 -0.9071104504705498 0.17679767117747192 -0.8522839696579803 0.512491159540049 0.8063719141039709 -0.643301427762452 -0.6181344439820236 0.8625877047913544 0.17965567434753638 -0.8504845561766361 -0.8989159516739778 0.12139709328254744 0.5988226648599133 -0.08893077843947239 -0.6749981308322028 -0.2962430305094952 -0.03284854926570824 -0.9667633727914444 -0.5254673445302442 -0.8814783830879986 0.7584328530524531 -0.5986100022309329 0.17552177820869108 0.7665640583002156 0.5153253462764562 -0.18839371605379585 -0.5249152920373668 -0.7947720711433528 0.05645729836634583 0.5463799693180005 -0.6403397560952597 -0.5201829879821898 -0.7713532668111214 -0.5962792195034028 0.8397362118251392 0.022578082370969144 -0.6546482244760483 -0.25915249899747805 -0.724242432587719 -0.11276940405100588 -0.28947864664726586 -0.6949707273797128 -0.8431780364244716 0.402458517341316 0.8438766033386775 -0.41745650977478554 -0.04530984370100044 -0.416730048687298 0.245189183767899 -0.11191898155729163 -0.5472230133184284 -0.8543656111304274 0.40354052282017316 0.6344606154685855 -0.02609192363895163 -0.2751885924399933 0.14448871827698673 -0.071932654379256 0.7228539758542103 -0.9659319203840477 -0.2496758448123113 -0.12602859184141546 0.12587464847578267 -0.9687742335822604 +149 169 -0.38432772093387224 -0.2387767377689365 -0.6979347445765829 -0.8669416910758709 -0.5936298939899398 -0.3729647968894656 -0.44884956503415063 0.6173802821486953 -0.5325914134684446 0.773668081524459 0.7587673726309001 -0.021275585635110117 -0.6052512672744426 0.3488907795025409 -0.7302013082920462 -0.45371806054386576 -0.4507986980536822 0.8801625728110103 0.35286768111434563 0.9186359712849903 -0.7958112562935187 -0.3636614615068985 0.795396457236208 -0.2632034490286479 -0.09369082557504349 -0.40170042183617016 0.927667223714786 0.23623226787159557 0.4614849432808188 0.18319406970122443 -0.5869657142105211 0.8498425441610975 -0.15345479292687525 -0.09975386709682699 -0.36329035032511214 0.4585564369094033 -0.6265837666923975 0.47532964615625417 -0.778008306302937 -0.5096712490813644 0.07825152694293647 0.6433652119702091 0.11952456243560783 0.4819291447314924 -0.5747308767202686 -0.9449807569325206 0.21542196022331228 -0.31878716068378377 -0.5812995745699503 0.31956034193612237 -0.583536888782527 0.7543464270615359 0.06594745795891788 0.881693095845379 -0.06786407300579755 0.6538181691699694 -0.7115363720028227 0.12427547549080886 -0.26889338856207456 -0.1258537909663633 -0.7402610786692496 -0.6905311834927761 -0.5168989479685779 0.9841104528401068 -0.6834318193441415 0.05634991849750359 -0.07163742110347182 0.04656944786200512 -0.2739228647052385 -0.7830287881017235 0.6304597098373952 0.8720838509731736 -0.8733852094921779 0.018050095437476488 -0.42908397680049815 0.5563670118630861 -0.6591965608086248 -0.44514213751489207 0.3454216252029507 -0.2194385234975984 0.6212076619088345 0.18309109291118686 -0.8249896979017048 0.8986778179870814 0.20144735346762332 0.29468956314252637 0.20306062965569938 -0.9553563109187717 -0.35556799100333514 0.7185931595677468 0.8329303532225547 -0.8914685941463096 0.6417932445912362 0.4479930589938239 0.20528739852665012 -0.18229660714121265 +149 170 0.3780759510308003 0.7240374766563737 0.8662206078316808 0.06661480773422457 0.3132412339490025 0.44164419745991745 0.02882395938912219 -0.25169082004476473 0.34635346482233254 0.3697421384478956 0.5756390710101751 -0.08644575768230411 -0.13607297571788046 0.9155807989551505 0.07885831683753808 -0.9321811554927291 0.6189595063418833 -0.18779980285611075 0.29671278905116605 -0.6935543774092481 -0.715921340964677 -0.16037123645831008 0.6832937585980334 0.23225030295197158 0.39431428661230306 -0.256298377605789 -0.17461046321088136 0.9791205212349152 0.6360083926357356 -0.9318131204425697 0.5803585410184502 0.4796932070380735 -0.34984691565553394 -0.3833793698076493 -0.5622072140049008 -0.4978761169872923 0.5760396940973576 0.5614091382452673 -0.9293655903756846 -0.49514298021739345 0.724190156674476 0.33975004141921805 0.61000917555315 0.09029036851701377 -0.5259549349792527 0.3903766469278127 -0.4411456619721248 -0.15007467692469878 0.9044045690667164 -0.6063808755321214 0.10391354903132433 -0.8262435374273183 0.39509399872822293 -0.9466961733626105 0.46580993747984345 0.9188202376390842 0.6190689240768958 -0.5590055350554148 0.5128206584577211 -0.45832042286055485 0.4381073799168478 -0.20355486382660648 0.8960754947075462 -0.2957614147264287 0.507999159534382 0.39944492152952127 -0.6448875470158406 -0.05037676853798145 0.07366932865454956 -0.29833396337866835 -0.48154045505638243 -0.21307899885153936 0.23987874006715848 0.18285442782133643 0.33005488157837015 -0.8992736358551876 0.9815916825918967 -0.8329592940694746 0.9735046806937808 0.8614287939097718 0.6739949020580092 -0.23384418323574296 0.07895444586826317 -0.8938062801993654 0.6631287862782689 0.7932614113641714 -0.7450716114344851 0.584467303677825 0.024847796564056335 0.6441932314943686 0.3228742173746595 0.005276075574029537 -0.8960984066215836 -0.8116511889215694 0.06494922281433402 -0.127054863178087 +150 129 0.5865629698951524 -0.8795090130182643 0.8699526197370764 0.13676742135750874 0.3871328994048997 -0.9124338135649686 0.9443081621979166 0.8413080961433024 0.5775006917558483 0.4950863426952963 -0.3211900589266976 -0.6069882404044367 -0.23114912377373487 0.8624648423839647 0.9814298911655783 -0.2424301284922583 0.9682036401979324 0.718450926579767 -0.22939410272660354 -0.4538652677410815 -0.626875461616333 -0.32784970402961977 0.04546768813843505 0.8394022591825754 0.8869971801617804 -0.5222837065515966 -0.634751923759544 0.9793409087568723 -0.005927634536749826 -0.6893318267561446 0.8135828900857709 -0.014063371538759473 0.5570965618007133 0.8353051784723331 0.37548668677350605 0.31174839502935536 -0.23654646042485128 0.43039225731786424 -0.5831360179608711 0.3266762259477951 -0.16661478360237414 0.2937317325364506 0.679269235420026 -0.688315446989137 -0.7121313167000918 0.9119243362357823 0.26951221989667196 -0.12412222969115994 -0.07189612596795492 -0.0739788651057891 -0.9183624926375458 -0.9807283773867781 0.2869196734124133 -0.010372955095350633 -0.9040387742846494 -0.8315957578464057 -0.05134210222854163 0.5289104352101748 0.04057992316921144 -0.7547805011289148 0.630273247941129 0.043042631206452464 0.5278951715828804 -0.4175988522518759 -0.5219624925139368 0.09048626310155594 0.24809828820793567 0.8496327820208538 0.12245784894218037 -0.7497864729291632 0.5695395532825767 0.11253153617351042 -0.5032416031327862 -0.8596388457579645 -0.6051638912937838 -0.7516237519014097 0.1543573861290044 0.3772153401725129 -0.8070218896412704 0.0905355198867781 0.2609525431718662 -0.8601700760737641 0.22362560292196876 0.6083664905646313 -0.27997679147530397 0.25475626768382753 -0.029156871630784398 -0.6205584139386591 -0.5962987258990053 -0.10543594863831629 0.49967703236530503 -0.08332799490883214 0.05934093991794831 -0.8769686876632623 -0.49570871927603943 -0.06745800648388722 +150 130 -0.41776746871341963 -0.8352221678570482 0.10739533618504127 0.8028320334585466 0.5064742127193469 0.2953253695110698 0.4224567414922342 0.4941553561953802 0.7796054325590733 0.5305955258090069 0.7543951314016648 0.7868866521193227 -0.8940328374161086 -0.6777616652548792 0.49876384490712833 0.375666402200892 0.050970669319656325 -0.07806041571124012 0.25255068268583747 0.6195331408302622 0.27342480145167003 0.29743216272642004 0.42905340032290473 -0.9621564917259897 -0.31455413592836945 -0.6165966825607818 -0.6332154849734117 0.6255404762819234 0.05446071252905749 -0.8220435604278484 -0.29157062211416696 0.7317454327919783 0.9045504830713342 -0.7914442308878575 0.14244129327543775 0.4146356754037839 -0.4670479962375804 0.2230662447011098 0.7267924817352345 0.047021276377078536 0.5326389905608808 0.8452568944583814 -0.2631348819080186 -0.6231901105425524 0.16971644874997538 -0.19865909998197773 -0.418821020701734 -0.7804501040643328 -0.3244808973966178 -0.4121556890905467 -0.6037878085306956 -0.07737673876727413 -0.3362486062266916 -0.505373632247522 0.22991315724338013 -0.018686827834455855 0.6807454868681311 -0.3025281141487619 0.5380782918367566 0.5916668732607688 0.2637950745313773 0.9829698169870449 0.11332930181422562 -0.07335465351839687 -0.6379163029511379 0.07061746375887812 0.6875558029431279 -0.9187899117899616 -0.8707236414863853 0.09400565298615704 -0.6128699693784203 -0.946604805017907 -0.26705761944260353 -0.27909924346594495 -0.8632338489949285 0.71608605869103 0.8765308827626312 0.7700128111421423 0.8594187693549917 0.4484767859799277 -0.4315992515237044 -0.11538148671233217 -0.9181124029666474 0.7821193252676817 0.3038011333684614 -0.5253748975570856 0.4608547051406793 -0.7463289108227429 0.8721906907213997 0.7178104765368081 -0.10825469733329762 -0.14020590757018647 -0.7916018226160912 -0.7392261530500888 -0.6275491027280875 -0.6524638713710449 +150 131 0.6833956390276823 0.25988341648841895 0.36388429171565684 -0.9932931693959259 0.46673648686047486 0.3110259442953931 -0.8567588173119789 0.37422051629107833 0.6315624853056343 0.2997804714195538 0.6240299630748014 0.5536599265207269 0.770701140581904 -0.299346915056963 0.7401517542300979 -0.8490425406031699 -0.8449952649421957 -0.04874216012839372 0.7738261115135652 -0.8094132704831973 -0.6322127422458561 -0.9158091704199449 -0.935084149708902 -0.759790300498594 0.07819201591743297 -0.8465537001675756 0.8378978181699717 -0.4365074229712518 0.7192178692939979 -0.2794048128073823 -0.6052909030336615 -0.7775057250805046 -0.38262793326091793 0.5541052026604583 0.4500234284379028 0.051131662180810444 0.7899326226573171 -0.7243987254458726 -0.09800606332432382 0.06383164509068928 0.5974720602917927 -0.1077659666268358 0.08697557613820828 0.6213902375856606 0.3488048886074413 0.19328052229856074 0.5405078233367322 0.08987423541442907 0.9738776408985557 0.9290784212325462 0.17683544387970018 -0.013600295112291105 -0.3788929675528896 -0.039774767855617954 0.43912206981356827 0.20541581095452055 -0.4977892223029161 0.8214804172669299 -0.8973667763150537 0.7252093316474089 0.9388564281038168 -0.9485957484995091 0.9088613038579216 0.8916085402068088 -0.7267555281638749 0.8622544523852345 0.636857057072151 -0.9147120965429152 0.1361304053793857 0.004082234622231118 0.6913554657686376 -0.36743843135099064 -0.39035453796711206 0.3769369470038768 0.32128262500888716 -0.25355856927135223 -0.9194666003934999 0.2005420794216135 -0.6980114033179703 -0.33096332939101725 -0.6839679664363605 0.7397197973087779 -0.7283392954117152 0.2726883687408632 -0.7060653526858922 -0.8342445181949005 0.6987955290559165 -0.08180745962644886 0.41371309499727493 0.8920917590338617 0.9795768850336819 -0.26808686985858476 -0.6884235938271703 -0.7901974288931128 0.9582034775620842 -0.36087859433739666 +150 149 -0.7667797207606715 0.14017065144003893 0.5036954543038412 0.7227453667719836 0.7729671484411074 0.12258218980425539 0.496306258288453 -0.7305652274976782 -0.15277602378860178 -0.23071121920731996 -0.2832963431068243 0.3108493457909871 0.5450029740054694 0.43618278019572365 -0.3203136684636183 -0.4895061289964069 -0.946164146113188 0.7054863421483073 -0.4984545428509237 0.5643017150095642 0.9292499978941031 -0.8413303852192471 0.8061534242236486 0.3546631305431036 0.9717476037046597 0.7944784735351151 -0.742357658223675 0.9269712025098353 0.6088453835650751 -0.5000932296353549 -0.06363456183005933 -0.8269642599661471 -0.7490178894434347 -0.7023156262029937 0.12113339539083623 -0.5354373048422918 0.9713689182159446 -0.38770251338847106 -0.3308958184447255 0.39339989183096313 -0.23172862082234835 -0.9880889812199762 0.7441354450598625 -0.9197956592228229 -0.6024596693011983 -0.5708702858626082 0.5554105621032941 0.33776547608715024 0.9021154333565908 -0.6460784577552465 -0.19664160719206292 -0.17057874556739283 -0.5238044967213427 0.17244870715441563 -0.279496089716905 -0.6812898452794256 -0.701490592892712 0.7354802848865922 -0.767485695382363 -0.2879298205620149 0.05176294746763643 -0.08966413471530288 -0.4574455824220345 -0.6322534115594962 0.8330400438165777 -0.059202942247834844 -0.625310116822341 -0.2922291353057227 -0.29239109541436403 -0.5953144859872139 0.4872780053240877 -0.2951181679348902 0.15004629107213474 0.10781090443979102 -0.09561167475761678 0.2199356573038227 -0.9503519336598207 -0.15267877613133618 0.4137278660603265 -0.10243255989038391 0.3652376474633954 -0.5858292260738787 -0.9451335823769629 0.3203305210602825 -0.2915107231614502 -0.7686657031692532 0.09071100266687582 -0.737719924879878 0.46015480553234944 -0.6228683662845056 0.20440653866828562 0.3252304469980458 0.7574503252350537 -0.030146822752036728 -0.6250419026944083 0.4757331005435821 +150 150 5.391711035642201 4.732674131213038 5.072820944465166 5.970286135733458 4.803201672999472 3.9125504994033355 5.192779201710685 4.779800036920432 4.6698207884066285 3.6909514968069086 4.712853771712627 4.6128789108493375 4.8895547376330875 4.604631624028764 5.281174548754932 3.5129261102728955 5.885985232543579 4.2465584218893015 4.5897779344448795 4.177672845385915 4.750685163535427 4.441300691982342 5.545207696248635 4.6873070687639915 3.923374854594902 3.88236360569256 4.993253329258585 5.805399412594845 4.658838407494717 5.424352852613827 4.232463589716932 3.7631425971999306 6.0201536324793965 7.169056636393104 2.761340289815352 4.462805333524314 4.672781815357978 4.109785168714094 3.7368802146354283 2.468683520717759 3.0055751606470675 5.249631299929979 3.82811967518925 5.278120316475871 4.486341073619525 3.9618196516073994 3.3939548226722698 3.8659281840046136 4.970398108800778 4.575442613618535 4.398902079090085 4.310311979978035 4.37891385230247 3.175190286294107 3.509251978664567 3.800321859894699 4.290834156738051 5.343176323187957 5.259905384992819 4.165029679385522 4.82225462630665 4.941785780064362 3.86854980810603 4.922480577115281 4.982949518450229 3.96505973868476 6.139878333048241 5.918327161915945 4.987568497576874 3.5025861414408013 5.4880788385092885 3.4990140544184554 3.935056593645767 5.003169947393564 4.037669706189629 4.639657887056238 5.270246541135847 4.013901816249129 5.968822880597108 4.277927716580811 4.080670878655362 4.412212478417642 4.450874211465409 4.393437994805692 3.649010856292054 3.908397110014846 3.6385983077859794 5.406676803374315 4.724097064472154 5.9288990545738045 3.606561654812693 4.015359116091057 3.707433445299354 5.0861368605809965 5.715346071254794 4.6442640829345985 +150 151 0.08439002334675916 -0.026962322142458195 -0.8401570683664803 -0.863622173867183 -0.6921819627910764 0.14567416522728527 0.28947626905483004 -0.6324057918649666 -0.35084348909827834 0.30532929391590513 -0.9904902929674455 -0.5409855924808713 0.33643284986010724 -0.41025950201167705 0.7837639184523539 -0.03650282089193935 0.8996075700014745 -0.8630604632844103 -0.6744984846191082 0.385663426565231 0.0825111030053225 -0.7917056296413936 0.7273608557831848 -0.09323508503472167 -0.22384716682988604 -0.09310854637499233 0.3873891231320885 -0.5657528995630241 -0.6327070821628245 0.6718583755194274 0.9237870589122685 -0.306408892908717 -0.7407785704795327 -0.7404109821068712 -0.22516257712265375 0.9646054220554667 0.5000929718661384 -0.16457048641428385 -0.12502579217015075 -0.16406416946851365 -0.03915172211436335 0.8747513358270798 0.9309424489607332 -0.7420615244236888 0.8251610716589022 0.14738289695349582 -0.6671776784543717 0.6287798185449991 0.0077733173690270885 0.16094404001615814 0.6858466324962473 0.9411720934835581 0.7088901472471973 0.4943460277211633 -0.07704390133878625 -0.1946716690360848 -0.30223407201139074 0.40334088476229235 -0.7810790773812466 -0.33789554769343955 0.12703639075511575 0.4402600211050154 -0.9053622495439455 0.8961618731815271 -0.46228399591588465 0.6236656377577698 0.8439226325143936 -0.4184052250373107 -0.5644558697236615 -0.09987861264559195 -0.13593933537773606 -0.9404094791959592 -0.6022821796939442 0.9002144493630833 -0.3614392755202318 0.5122766414518878 -0.801375558895683 0.46648632611013374 -0.10505302067579048 -0.6016722424175347 0.4098868179671096 0.12118789307712885 -0.03744421148657162 0.2396785209005765 0.21872683282042904 -0.02595060709350716 -0.46650389119464375 0.6476665977727656 -0.35450550297957206 0.2928882984849237 0.9151808612640855 -0.7483222545015427 -0.1977251328751588 0.420740470296725 0.4572374796451051 -0.27893632905706767 +150 169 -0.701551927838852 -0.49834650274593795 0.4274309630482973 -0.8346444985148234 0.45429292604991867 -0.980459120206866 0.2224733622308923 0.037967980020676695 -0.3484709167897917 0.14746078575806387 -0.6717836089676885 0.35556004348694903 0.44171797827850634 -0.5179408852376008 0.5650026511166748 0.06553699357627041 0.21037628069705394 0.25152409671773124 -0.0740688704585799 0.03555668270168133 0.4502433048346208 -0.19626401725065556 -0.46505964313193604 -0.17966343305207366 -0.020683327587114775 0.31397712528427224 0.17122060287930063 0.6947801331295234 0.8591830106968592 0.5761809196790908 -0.703669657871379 -0.1840670483742517 0.6085207016593301 0.8866352437089664 0.6115144640128547 -0.8547979085545316 -0.43915997001643325 -0.6759338763541651 -0.5409205913522077 0.11838002850686835 -0.04148232294281229 0.7574716117517228 -0.24014590391397372 -0.2926702312188001 -0.0114347861253552 0.026914783885568783 -0.09176192147201756 -0.8820314007801986 -0.4872532984948539 -0.4295014282382814 -0.19728415316137693 -0.21827930717766453 0.9461065228499654 0.08669650846546584 -0.02327328141939633 -0.2719256656581477 0.5257951017564064 -0.5487387355855453 -0.9618966542612235 0.07851320734273015 -0.658488380037157 0.12160340745157905 -0.054996898347557055 -0.14712813180499396 -0.6057375574036048 -0.40042288707925433 0.7539623320079454 0.08866235439906656 0.7404903676051344 0.6750396596607573 -0.9485893396990621 0.04919162623698403 0.22498020626734538 0.9513651765748463 0.8746835557859025 -0.672432838722425 -0.8054469931561821 0.39845194415691165 -0.6962609801688517 0.5244353338674976 0.32669484729305487 0.8112144713569716 0.10428403950943466 -0.5678339980319722 -0.019269820260378268 -0.0526640165009451 -0.7128035377867477 -0.7488766775754052 0.8163567488691568 0.7882988055685074 0.21411790683452603 0.9357330736077094 -0.08067506445205841 0.6064131834395496 0.33520121032311057 -0.9560849201097437 +150 170 0.5840508010942738 0.8901007140819894 -0.8164495735517268 0.9259546438424657 -0.8060358371507421 -0.40176854972670517 -0.9342215789802428 0.02485311032545212 -0.6463610642126416 0.41790734106658145 -0.30596439225190397 0.46337668453143555 -0.6337176033046221 -0.6150336820018696 0.030876105201712356 -0.39426740129240256 0.861113103598639 0.09046589098365598 0.6443709395353061 -0.6239620956487408 0.04420852331236569 -0.7770936790262599 0.975649433865956 0.5293363097154413 -0.11614213763207348 -0.05434702237545874 0.6287249820183627 -0.3346933037575983 -0.14502589166180213 -0.6136845487788409 -0.11009901600905758 -0.10963539117106702 -0.3677702337737274 0.8284146438948312 0.1788309930731573 0.6101662687762426 0.7953525678816706 0.46865634165265635 0.5212456443998137 0.12904461470984607 0.13821797617080045 -0.5229888481453064 -0.1854090765812355 -0.8517767290500011 -0.8315847806890473 0.8678264518303196 0.29525811284558023 0.8050630120526217 0.8836975151443087 0.8958454887386083 0.1747730114225543 -0.7849807894597525 -0.23467594243129608 0.6358019564216353 -0.4804058647810303 -0.9990717626793608 0.4858721271857873 0.435610490479134 -0.05043646810179947 0.20465073842592774 0.7193873254772927 0.993953014338923 0.0826105260435046 0.15193105352183545 0.3851608301965661 -0.09269202169260171 0.45401401504565997 0.965473913011315 -0.6392234114507025 0.3506874456991578 0.77446028599788 0.01600488615097917 -0.743310614348033 -0.4259480188201066 0.09087667013448653 0.6097520942551995 -0.4103665952459088 -0.4904980482837722 0.5690055876263389 0.26595837475482886 -0.7482138003275698 -0.2614586575178499 0.2766172352464473 0.5774114885311226 0.38892547428311586 0.3272787596910429 0.38725684265438587 -0.7734187759705828 0.11397546723395746 0.7732506737620128 -0.16961446437455518 -0.11812717674135631 0.7991187718150523 -0.4186027169378719 0.7395141949967403 0.9879666488985701 +150 171 0.787181285936922 -0.8798521320897641 -0.7089057070160107 -0.13943968088166758 -0.66806871376623 0.5591864457015983 0.6434593658021606 0.7625792343144202 -0.3810022986299515 -0.6977550253162585 0.32445427210155287 0.533803610667207 0.9645888070938384 0.009513192790118419 0.8265479335545127 -0.7697431274107487 -0.44097138343017406 -0.5462943633096835 -0.44791380874558206 0.22603178162056037 0.9114266224779886 -0.0046610998341567456 -0.706550407317386 -0.3145325104972505 0.4221977327461084 -0.05783467355330463 -0.15007278787514955 -0.47150344031475777 0.8151494527848915 -0.5476233258311365 -0.35730748732748663 0.38957372133352286 -0.8532385411861314 -0.8540895391978751 -0.10531072461359003 0.04267238835201925 -0.22648742518698306 0.9466208640902125 -0.5861649488605276 -0.6154340848487883 0.6406811283355873 -0.8204491819078865 0.049835491769739004 0.016317084470227616 -0.9758645843837901 -0.07616396211603482 -0.29584657884030263 -0.17906079561320287 -0.37703469109051113 0.7762048855119001 -0.553620309365912 -0.2800593852982496 -0.9388382683551466 -0.9913725446499417 -0.33724345074912265 -0.08764866381175684 0.5130151477862301 0.8271182730687421 -0.9815055741624954 -0.5040839552626755 -0.6636786093469818 -0.9786025449233895 0.03812817444202499 0.8209231313775265 0.4617287316376464 -0.9669343291594807 -0.986278255522343 0.9382027739453378 -0.7003303830474765 0.22153039153050935 0.8213414498382892 -0.22951491292706638 -0.9301185818242765 0.6009821727968654 -0.7123009672458944 0.1296704611907149 -0.12651154659622765 -0.19290180226614217 -0.8925712406480484 -0.9450647508463066 -0.2999136942512215 -0.1619811251158192 -0.8217844391838987 -0.5663166437053804 0.7465334322873232 0.1930125233406128 -0.0449821278383884 -0.7765812901976303 -0.20696209455987358 -0.9051311331274783 0.4672181752319251 0.42172957640783504 -0.32584251681582344 0.7509294180822685 -0.499309761647174 -0.313853453389622 +151 130 0.001937686684364115 0.8663278082494577 -0.5722084089859112 0.7641160757065535 -0.2883245920123243 0.7570642306951096 -0.01586669443202604 -0.6212742278006775 -0.2079229600114405 0.03215005580419783 0.7496099679906882 0.40606625731111845 0.5370989722916919 -0.4012790024492814 -0.7342507170743691 0.46068986265591083 0.03184492567038988 0.4907885839713453 0.23127676977672795 -0.16745636733788527 0.4224597800193144 -0.43706234199388705 -0.6569446010160467 0.7463360452924612 0.7627532437935529 0.754785775336603 0.855791738895022 -0.2443972928479674 -0.44104867096821443 -0.5971213178647539 0.9540263962289914 0.007031557374160613 0.9260428903157669 0.4850767344165676 -0.37351420373503275 0.7547608012000904 -0.6370282490849721 0.9454167459600478 -0.4214930827500578 0.9848952528588957 -0.032868428798894955 -0.35327375542271655 -0.9260250954450036 0.6801048298589882 0.9600289821892847 -0.9084421985197975 0.08021673986921907 -0.9482362304837881 -0.4197419340548143 -0.9785398361905568 -0.1364948492461553 -0.662701147126115 0.270752276075795 0.4618013523510167 -0.509772976377052 0.8186414632470247 -0.8349407252006571 0.8674484417516428 -0.7727676304152076 0.721777946812967 0.8366005302144148 0.9120552394268189 -0.05737206656369431 -0.4887420803041256 -0.272569774592444 -0.07256495211533998 -0.7098637002820323 -0.5720925399267287 0.32593037028028515 0.0032553439887390567 0.039071703199963004 0.9322049905723802 0.5118244344358269 0.8624848982388509 0.18553262098733514 -0.11392234162009718 0.09208967482310348 -0.6162681083529227 -0.8451160971668161 0.21671198238835054 -0.03151946033846653 0.6960375680755935 -0.1974235343839117 -0.3281498354347334 -0.7042193782580335 -0.3984401096814705 0.7077618178119198 -0.03911049723626148 -0.6549024843203197 0.008226164965636773 -0.950476176615169 0.12635107618194286 -0.4294991888254347 -0.9466966290423842 0.5232771604525506 0.5794195935036008 +151 131 -0.7219701900186304 -0.9942297853957951 -0.14348011952574202 -0.014714452258154154 -0.286833737053374 -0.8225512658319338 0.32813516160085876 -0.5749303108124444 -0.6973056750562519 -0.6863949994817617 -0.14676214944333643 -0.7604644447810209 0.6154545868229462 0.40736468495663014 -0.03713156780261273 0.5022972788998457 0.8222377441744471 -0.8957700507875868 -0.7145998262496376 -0.6897832827464225 0.37569172428873876 0.4065690661386221 0.9256199521246 0.10500772980453776 0.13984307074889268 -0.5976915206135842 0.9014406834172 -0.23488798877671035 0.04419922050917369 -0.8056357059207373 0.28186539582866055 -0.01720953975299966 -0.51375964405821 -0.49098344561341123 -0.33921282496145166 0.5315618465153897 -0.0313531634620805 -0.5508266838636879 0.24218049149898757 -0.007638166518839196 -0.14127369836019632 -0.8126116468346201 -0.5554622772973348 0.22736806270798415 0.6011848291885167 -0.7223060319324301 -0.9481763864517896 -0.30272770724684617 -0.2981256923316755 0.2929283447176745 -0.5697130047343448 -0.8123970385578576 0.06157745140863158 -0.4432345607382815 -0.07187992147950806 0.1016387298475323 0.2826706824623013 -0.5425081637481688 0.12040561590795429 -0.7456892865859264 0.5476832706844268 -0.3173305954372567 -0.07084347816356518 0.09324428964030895 -0.259980956625661 0.2622100905069542 0.18726057712319788 -0.5462763016534564 0.4145500056266691 0.5372918856538973 -0.6594341422466796 -0.10089829936337447 0.9856668227459682 0.6666361201920417 0.32565162896523425 -0.30375300951594597 0.7834090108335638 0.7118552065349224 0.8287417101018719 -0.15676957915734713 -0.4764718361683469 -0.7407088505122468 -0.08256160352535225 0.39476574202346293 -0.7641535431572692 0.6589840924455028 -0.8002732073935577 -0.8713222759026871 0.4080159068387894 0.5360174492015195 -0.25527264056023014 -0.81696661361115 -0.16672511041865623 -0.20154599553208796 -0.019616142856199836 -0.7294956132280155 +151 132 0.39717997897383617 -0.14727345909758038 -0.221288547604922 0.07988522285676414 0.9977603126152539 0.4047180342655605 0.8071216761848825 -0.9303631126870515 -0.1560729571723316 -0.6819153344439703 0.3200068728590033 0.6759732336026469 -0.12732949791898873 0.633188116598367 0.6697140856532433 -0.24824640836128742 0.10848207411734845 0.41151514677398926 -0.1717655766592867 0.28387362850250564 -0.12489326557904024 0.7744063522570366 0.7419879669105569 0.9649205881962324 0.719120315221339 0.9087976385664973 0.15280780935911809 -0.41681060576864093 -0.5565341388837066 0.3996577159409638 -0.48160239810027394 -0.08535365659974037 -0.09535088981432316 0.40082524763565175 -0.20323237292396001 0.504630060116291 -0.38584871698165757 0.8480684386459401 0.3434230815989867 -0.5415639742960865 0.6544532218858383 -0.05174460412077919 -0.5219711178547752 0.9909265455995881 0.9410144858348573 0.029179604685777294 0.8367226926403892 -0.10582990747087417 -0.574995388082723 0.871206923826535 0.8738050534482049 0.6731088265625926 -0.7075175478413636 0.5929744078714307 0.23534913100478194 -0.016371322663822907 -0.2962191440820301 -0.09466512416519701 0.709496827543576 0.9683066594111491 -0.4513368325812468 0.586154207991072 0.6181303345834606 0.5145377688561816 -0.5740869148824201 -0.17587755866769195 -0.15785348981430825 -0.9410007418263646 -0.9250666335111448 -0.9115202167276173 -0.4595477625594675 -0.4841798322478903 0.2512115222540112 -0.3413497616034775 0.13279462998330716 -0.5509002575292712 -0.9051413008228437 -0.21653230393471334 0.011476705919946317 -0.8223236595883183 -0.396574634544006 0.01233184586226832 -0.0615852162974202 -0.24400773422251643 -0.6538334522132234 0.5903735597619406 0.8125824130736898 -0.07739805845810532 0.7798085730430131 0.711124299758624 -0.16417442533225168 0.5462534224279372 0.03969799515614558 0.17367930036654577 -0.8286928215769593 -0.5374495963446724 +151 150 0.08439002334675916 -0.026962322142458195 -0.8401570683664803 -0.863622173867183 -0.6921819627910764 0.14567416522728527 0.28947626905483004 -0.6324057918649666 -0.35084348909827834 0.30532929391590513 -0.9904902929674455 -0.5409855924808713 0.33643284986010724 -0.41025950201167705 0.7837639184523539 -0.03650282089193935 0.8996075700014745 -0.8630604632844103 -0.6744984846191082 0.385663426565231 0.0825111030053225 -0.7917056296413936 0.7273608557831848 -0.09323508503472167 -0.22384716682988604 -0.09310854637499233 0.3873891231320885 -0.5657528995630241 -0.6327070821628245 0.6718583755194274 0.9237870589122685 -0.306408892908717 -0.7407785704795327 -0.7404109821068712 -0.22516257712265375 0.9646054220554667 0.5000929718661384 -0.16457048641428385 -0.12502579217015075 -0.16406416946851365 -0.03915172211436335 0.8747513358270798 0.9309424489607332 -0.7420615244236888 0.8251610716589022 0.14738289695349582 -0.6671776784543717 0.6287798185449991 0.0077733173690270885 0.16094404001615814 0.6858466324962473 0.9411720934835581 0.7088901472471973 0.4943460277211633 -0.07704390133878625 -0.1946716690360848 -0.30223407201139074 0.40334088476229235 -0.7810790773812466 -0.33789554769343955 0.12703639075511575 0.4402600211050154 -0.9053622495439455 0.8961618731815271 -0.46228399591588465 0.6236656377577698 0.8439226325143936 -0.4184052250373107 -0.5644558697236615 -0.09987861264559195 -0.13593933537773606 -0.9404094791959592 -0.6022821796939442 0.9002144493630833 -0.3614392755202318 0.5122766414518878 -0.801375558895683 0.46648632611013374 -0.10505302067579048 -0.6016722424175347 0.4098868179671096 0.12118789307712885 -0.03744421148657162 0.2396785209005765 0.21872683282042904 -0.02595060709350716 -0.46650389119464375 0.6476665977727656 -0.35450550297957206 0.2928882984849237 0.9151808612640855 -0.7483222545015427 -0.1977251328751588 0.420740470296725 0.4572374796451051 -0.27893632905706767 +151 151 3.3973058562157012 4.9575843341102726 4.55756247915473 5.589923991967909 6.299296670677304 3.5919196906310464 4.674386426588429 5.604626925214992 4.61228994148732 4.992761794846361 4.4219561773667335 4.278589893120364 3.276511848114393 4.101783541477971 4.421821673819673 4.199539315182481 4.324505699364081 5.028443082435095 4.29922958965339 4.8311786350574595 3.6257087798282996 4.259095654572337 5.4967990475426625 4.651889306441725 3.496496460786671 5.948952332625223 3.2621608480085182 4.846033962478633 4.235880464644419 6.074302895420507 5.856404733246896 3.5407650871419425 5.087532064555152 5.474891922547254 3.826874556607029 5.673002463592267 4.724621014113262 5.677449373840567 3.168370438548451 4.483923880116537 4.413517348549135 3.413820594020646 6.092306586898633 5.31316424360935 5.4445670293240385 3.8768859914127214 4.667476367565673 3.6253734288927415 2.649402809067392 4.581340078997961 4.741782379392886 4.100025151064738 3.1196225647284272 5.058021022377445 3.480341827989172 3.6812693576549695 3.875041775478631 4.45444015722237 5.761556088274966 4.909824333929845 5.294182358658308 4.836877596954748 2.836946768982207 4.351023494250625 4.400607166569339 3.3185043274966235 4.912850169158484 5.126685900807181 5.784342646953378 4.143588665144385 4.194510139601935 4.8650901443379455 4.274767038639443 5.410012667143354 4.249271576099337 3.7827965479493493 5.596373661077622 4.01340970843021 3.9652723318565037 4.108301288674078 4.454935626899065 4.785777561612078 2.904637849875503 3.6188772284844184 4.591119539569058 4.056473993411748 5.209197361294855 4.0602376999297904 5.132433345558912 4.639035679163467 4.523480611758374 4.706819977063631 3.200662961861651 4.065891843188767 3.707379041452114 6.00053860273242 +151 152 -0.7967019980379515 0.5811600020942405 -0.6795472054734677 -0.3729807450346352 -0.7377427086330302 0.012393119995171231 -0.8559972751372178 0.7131187084318125 -0.6610221394280604 0.46463695179063813 0.5442028684494709 -0.2040318281338791 0.3076816314612141 -0.5928662331315397 -0.3236884073735664 0.1974563982440325 -0.8107794216921025 0.8951397803948069 -0.359016423777208 0.3033267229416208 0.32424016713177894 -0.11700139501369233 0.34442806682395144 -0.5096571887703096 0.21052714871684186 -0.5933808101134852 0.4026939884911449 0.993938329420271 -0.45861357716488294 -0.6641457579083008 -0.9567147452430602 0.3231030481185264 0.5080998082843373 0.07319631799132731 0.9760436063465674 0.9010649562565085 0.8282295654008469 -0.8862941420409649 -0.18246293842380412 0.385419962359278 0.8686079834113727 0.20062269471628413 0.9837765086086596 0.24532209631920399 -0.2958866637791304 -0.9683731557856141 -0.4322465241213207 -0.34107985364464555 -0.21794970865881158 0.3864953711258414 -0.6635298943358692 0.08840599332964727 -0.3867726690427864 -0.3423877339377104 0.3885012545317448 -0.5187144474059775 -0.8438703697147303 -0.8831237263547667 -0.8510403911864441 -0.6768105876582078 0.7324532588214492 0.9752561662314683 -0.025604616184638607 -0.6919291436919677 0.5800081568840529 -0.23997926097616196 0.468547412224658 0.4922678442991213 -0.8753057941150848 -0.5388809956705707 0.5463471050839532 -0.31205232655236737 -0.41742008165258926 -0.6534690338145221 -0.6518752636791645 0.8745244899644733 -0.6337033295168422 0.13035043032492832 -0.5815406016136546 0.32404798867946916 0.01277481741087727 -0.8477842847630075 -0.4316499508819738 -0.8294092654405052 0.10398431329194846 0.6348108489439968 -0.2403275742130666 0.7820245717151697 -0.814520802352293 0.9661808921085104 -0.669821149698602 0.3055239921855919 0.043478625421470074 -0.5939728935477282 0.5600864344782484 0.6678281617963482 +151 170 0.4879227036185563 0.8320888639790129 -0.16904615086778496 0.9008937576483442 -0.7706480822858521 -0.10860262591494019 0.7309625839847083 0.5337874376011789 0.5811508100466232 0.30810956670722933 0.1338673246899409 0.8231319777383983 -0.6182834743554511 -0.534412290726539 0.8575966197359957 -0.7952844665026906 -0.1578755179022271 -0.007910678321086495 -0.5551678397114392 -0.9892552657085685 0.5035219099779131 0.20291800430509288 0.9311203014575271 -0.5364749774954993 -0.0595963208624537 -0.33338498259915017 0.08187591685351792 0.2610033008333652 -0.9776416025121042 0.5065636495759034 -0.6490209535655138 -0.7422591800844485 -0.8657556355715204 0.8111286267821152 -0.6284486969357532 -0.7733309386790665 -0.9783754535990432 0.4523413588693421 -0.3023068265663429 0.8140415405861463 -0.8062407816967632 -0.043835355485762006 0.8216052217924397 -0.5739053582620108 0.9164201118610211 0.011794992219086309 0.5324374530041167 -0.22594070062824834 -0.23280431236990062 -0.05899089568134075 -0.42208514895020977 0.22503791942787688 0.3771577835818398 -0.9920267646919887 0.8809010956381647 -0.9654353237821325 0.13369846100133587 -0.2680223554275649 -0.49844987209552083 0.5060271553621685 -0.6595575112366785 0.09997729163409064 0.0004331907624020026 -0.46410044090817104 -0.6153405883533583 -0.47621208433864815 0.6414518764174832 -0.08423621381955892 -0.5439599454264785 -0.6884887563924056 -0.29191464676519496 0.7595000169341686 0.30225466817254487 0.6022801612052002 -0.637258422671658 -0.13440957963641864 -0.24144485444991504 0.28425704819672526 -0.23499993469137248 0.478717562239962 -0.9858149484523859 0.3953509236874817 -0.856686724249268 0.02770022563349328 0.3977550667354395 -0.2837418438056807 0.5115410092053707 -0.4037229658634469 -0.563792607209638 -0.9913241708518741 0.705646253578883 0.9874453650263559 -0.3788577970886462 0.35870516934769214 0.018135706913555927 -0.7844688123373014 +151 171 -0.5103900285129905 0.8361603481558681 0.4855139712359062 -0.7147252208386357 -0.6289835888441309 0.7360314763966938 0.31926109243733625 -0.9874181884238746 -0.24608501463850607 0.6661696532511578 -0.31058205526681837 0.2185930888727463 0.11894734580274657 0.38673385127089865 -0.14113597218537355 -0.6880667533180409 -0.32577189222937153 0.17873151218537497 -0.26736054755324856 0.49556639142342385 0.8855316190594225 -0.7060532234933445 -0.17125665561220327 -0.7325680424369241 -0.89170645823334 -0.8987278306981563 -0.004954068588165272 -0.5207478447719944 -0.5804518770269944 0.599441755922095 -0.7686368477264858 0.6258626069199247 -0.009917438913983778 -0.9512486033022955 -0.14853501050346862 -0.7851499889883022 0.05934091368273542 0.6320247238209462 -0.43337852848329383 -0.20434990627810934 0.7906636015286488 0.7990800834776974 0.4346538606916368 -0.7054484329717801 -0.05533793417706434 0.7428293917411957 0.7520706407995499 0.08324717380565705 -0.16736108071771216 -0.472193238185465 0.9712525228873159 0.03912929448236646 0.2588073535113715 -0.915158111998327 -0.4441645823911937 0.8095929563895288 -0.2854798192555841 0.5356653997648455 0.8672515904623703 -0.18494169945822825 -0.7143388985342329 0.4286103467477549 -0.41112717383805064 -0.40007464774417434 0.8340015643194976 0.47899765871030464 -0.6430415973202053 0.656564466254314 0.6483310539142326 -0.5641493682359864 0.9161168818058942 -0.08663369191668235 0.05954819507710818 -0.3835901892743765 -0.8325139517310134 0.7212607253190262 -0.8348183778768037 0.23185204372412316 0.2270979324399558 0.2595491761137636 0.9175503814373183 0.6955235259632515 -0.5255488093552803 0.5064256772292215 0.5082684781855891 -0.29013818568254757 -0.5683633158900765 0.7950198865732174 -0.6987196914041018 -0.8926245643629238 -0.2771746061911373 -0.6483380227057038 -0.22879993776573238 0.3035681442636846 -0.16654630297685014 -0.9565130826298252 +151 172 0.08773995438544557 0.3820831884900202 0.5354502606358318 0.9031791210367568 0.9529413403862415 -0.019919272803480936 0.5811228049144699 0.5871481014486934 -0.9921632193041636 0.96092555934233 0.9939544450893505 -0.37146723527841674 0.1036007081557877 -0.10173539704626977 0.27989658910033777 0.9201788014086802 0.1921605605429546 0.7834407420298006 0.6639254252576543 0.7664246023915737 -0.0821601322801988 -0.1405828697110041 0.1250934641524224 0.3915151132552859 -0.22836700629169693 -0.8067628081908698 0.09036526101461706 -0.8721068631450857 -0.2907110351361335 0.9000220955762306 -0.4463388688679777 0.8606078684640068 -0.9187675333967447 0.7943938899673797 -0.06367597166595962 -0.43920068644401344 0.882720505890523 0.3351621131094267 -0.18677884881683182 -0.411019457753355 -0.17782613810575532 0.19275398545405276 -0.6626530036303324 -0.30349897328732656 -0.4012724907504801 0.16490241167892705 0.26115708151891504 0.4494483786757375 -0.4937671259685221 -0.6562212230949536 0.22091792269738342 0.14154371318518355 -0.18459788366546892 0.30888212627998946 0.5573707046477865 0.227047201520584 0.44377059898304716 -0.776237655160541 0.632572638038954 -0.11549567195510302 0.6178499359036012 0.8143815649691262 0.2934375141583281 0.7524318919319362 -0.20695498025042136 -0.9227827008569032 0.47942082024541066 0.7278242973490692 -0.7841702837602578 0.025155200379638254 0.4717637327239732 -0.5203630165627657 -0.8212499485743245 0.07793748605397388 -0.6352131486694974 0.14983558187283763 -0.4381599358912889 -0.5172682143141654 0.3872456928597845 0.9884296338526655 -0.5679441699574448 -0.5129581010222208 0.5399398179765762 -0.694397683436577 0.3464574831338034 -0.1930909779540919 0.685095043770203 -0.40759770635651993 -0.27131907494320817 0.026915443600736833 0.06486866760457555 0.25043450694203573 -0.9574927116031793 0.44931176520899285 -0.6100980752397771 0.4978157172881623 +152 131 -0.6710404912443155 0.6336921139842657 -0.13936855430794637 -0.7801249085551478 0.7439135682282361 -0.21681477168239827 -0.7459652983066554 0.80357941048781 0.8690120719404535 0.3561615926001387 0.1698799605854726 -0.3090404063893686 -0.3170979871075279 0.22865722311561365 0.04146807692085974 -0.9967889449939584 -0.27836447126282726 -0.4224204644620586 0.13196145574080442 0.7112567466185633 -0.22314807409187987 0.7851898524090068 0.7968644865933432 -0.2161871138067224 0.03456145115249565 -0.12905685659228627 0.2675809329114882 -0.7962033769998371 0.5078746333368358 0.9447634800616895 0.1691984267917923 0.6941048506985419 -0.12622272643647148 -0.26648094524074417 -0.482403278532092 0.6989572901205223 -0.3685404352339672 -0.0654144239067651 -0.9311233062623492 -0.8743738191300157 -0.7347084532690231 0.6897180992678662 0.20423823254788553 0.5355655274745976 -0.39660502195791625 -0.77031580209561 0.5857504612755018 -0.9419323699144986 0.6830708079871766 0.312679430799256 -0.13291189194394804 -0.33223013596227724 0.7953446178016934 -0.40797539606392164 -0.13557313960933803 0.022964598825576 0.9629678359568372 -0.7406553013809221 -0.08113044586826401 0.9044539965616971 0.9199048883728809 -0.38276604834205474 -0.19870937729136595 -0.6705439644539768 0.9204445184457137 -0.038546423750458025 0.5236819331403675 0.8328790651936113 -0.8252229477587907 0.17686071096906408 -0.996180217997503 0.8881623786810908 -0.11837667922661721 -0.34497261624418596 0.8587465728648234 -0.42564879572288916 0.46256758536127185 -0.31857449240515745 0.5041624069518562 -0.2857577217570495 0.18322465857119807 0.09127586394852027 0.8496984909482688 0.42915604269023033 0.6157525157042489 -0.4007783031179599 -0.6501554217213932 0.16120891579415764 -0.20121718503698127 0.02074330447848416 -0.682643848797591 -0.6213260411095012 -0.6565378991813571 -0.4721211921462778 0.3337868578549621 -0.18496104459601104 +152 132 -0.9021003488763073 -0.8616179991134811 -0.4250581451372337 -0.13903176197864187 -0.20756060709201662 -0.31673490592735565 -0.5598978847573854 -0.30813375617522 0.40136040675584006 -0.05364695027175781 -0.5112244452738497 0.8732017427136813 0.7391280650762511 -0.5617591071642354 0.451427911272543 -0.06001721774701818 -0.15934217779074622 0.47070854915765703 0.04428015777415584 0.2600893955680983 0.9203847064989785 0.7743939442586047 0.6698806353286781 0.7702362535607088 -0.9450190194146262 0.9661641543684929 0.7153345242033575 0.763595394350558 0.79874668566502 -0.11780472341365433 0.8209251352729527 -0.5022854541244302 -0.6589331000980287 0.12349420946504841 -0.3893932100460571 -0.19732462386191352 -0.557392724252668 -0.2857595484972222 0.671585755517931 -0.5747256905944178 0.46844250530032205 0.6586989307889579 -0.9385102577864661 -0.39156965641616925 -0.7427173706814951 0.34657553853110845 -0.6438460695379642 -0.5480176019425251 -0.24897827568399888 -0.4294789302669737 -0.32637762548211846 -0.3537990801370483 -0.7183816064690896 0.7429122847401473 0.8276077128147639 -0.014415185045497658 0.3742520953598045 -0.6083083736904933 -0.5465359583299549 -0.46381714087375414 0.8828426244979002 -0.597802638329791 -0.8385252862063362 0.8095962543905726 -0.9223173662194246 0.4182641914239813 -0.7754796962248462 0.141398306545218 -0.6326486434032719 0.24410612265580056 -0.4869844934396863 0.4316440641829007 -0.6059526845772172 -0.8398549862535756 0.23034930814771082 -0.4343809133315262 0.0027662283227680717 0.5539063287993633 0.3289230210426508 -0.34491562007538623 0.449499679087223 0.8578408921673242 0.8367944262008165 -0.4719910472834441 -0.2271217213643244 0.7272768972568029 0.936145481836129 -0.14905988691795757 0.07331221303779234 0.5085388522240444 -0.4260951709094387 0.9053427391154973 0.06854888026274497 -0.43652740884191266 0.5805835825155059 0.061777964964817134 +152 133 0.501718272123493 0.06333429596494389 -0.04058718283349916 0.9608948911076962 0.39818661090590823 -0.3632043961856599 -0.4561559304180196 0.4475265514524025 0.4818793824572949 0.2933964060806409 0.3168959333505792 0.3777367364287101 -0.0975633645348084 -0.8353429444335556 -0.8339184522991756 -0.6793689964108314 -0.4073875924053776 0.6663854280152901 0.6958754851733431 0.49397076874865586 -0.49836699421256103 -0.5223448944301112 0.09687900357307644 0.7250021190705229 -0.2259030442751706 -0.6318314482150609 0.5149671207234603 0.3112749948880609 0.2680059886018946 -0.6527931566830818 -0.6040738188914072 -0.2869045283443046 -0.7262462491397346 -0.7964127738095288 -0.058875502900215704 0.7704187253067647 0.24227442852089554 0.029523044335842075 -0.8876953224390591 0.22684832636243035 0.6584154322988831 -0.7765312858752111 0.6794332809504193 -0.6789872736366742 -0.74562955371654 0.7969787896349396 -0.714753255840975 0.7527973136347683 -0.9993469773687815 0.21755931048982435 -0.5510826039408672 0.4465171784998725 0.14590924025659158 -0.535575524434537 -0.370739471310374 -0.3560534244537963 -0.4260674861673339 0.604371148981153 -0.9962639680291934 -0.658365865603274 -0.5420751332851999 -0.9148336108115516 0.8569108446384237 -0.19687093881336515 -0.15376206318497387 -0.12445074931622924 0.9603853553946546 0.2991501287306484 -0.03136347012522722 0.16981279962836804 0.6844310612595277 -0.7612019172634505 -0.654831600652817 0.7034951919821235 0.6105812946386482 -0.5534771506007057 0.8945353300631529 -0.49605052622799506 0.46427680906401436 0.13531765001645213 0.5767843922438467 0.6116394826006988 0.15329580249007901 0.21050625416927105 0.7686979240988974 -0.9841252486893908 -0.3377060565796983 -0.8577537759867093 0.03789979530582155 0.5183833081980418 -0.60223372559629 -0.11005652452585823 -0.7230784892062234 0.594569314873193 0.19703098961132715 0.7878940022636023 +152 151 -0.7967019980379515 0.5811600020942405 -0.6795472054734677 -0.3729807450346352 -0.7377427086330302 0.012393119995171231 -0.8559972751372178 0.7131187084318125 -0.6610221394280604 0.46463695179063813 0.5442028684494709 -0.2040318281338791 0.3076816314612141 -0.5928662331315397 -0.3236884073735664 0.1974563982440325 -0.8107794216921025 0.8951397803948069 -0.359016423777208 0.3033267229416208 0.32424016713177894 -0.11700139501369233 0.34442806682395144 -0.5096571887703096 0.21052714871684186 -0.5933808101134852 0.4026939884911449 0.993938329420271 -0.45861357716488294 -0.6641457579083008 -0.9567147452430602 0.3231030481185264 0.5080998082843373 0.07319631799132731 0.9760436063465674 0.9010649562565085 0.8282295654008469 -0.8862941420409649 -0.18246293842380412 0.385419962359278 0.8686079834113727 0.20062269471628413 0.9837765086086596 0.24532209631920399 -0.2958866637791304 -0.9683731557856141 -0.4322465241213207 -0.34107985364464555 -0.21794970865881158 0.3864953711258414 -0.6635298943358692 0.08840599332964727 -0.3867726690427864 -0.3423877339377104 0.3885012545317448 -0.5187144474059775 -0.8438703697147303 -0.8831237263547667 -0.8510403911864441 -0.6768105876582078 0.7324532588214492 0.9752561662314683 -0.025604616184638607 -0.6919291436919677 0.5800081568840529 -0.23997926097616196 0.468547412224658 0.4922678442991213 -0.8753057941150848 -0.5388809956705707 0.5463471050839532 -0.31205232655236737 -0.41742008165258926 -0.6534690338145221 -0.6518752636791645 0.8745244899644733 -0.6337033295168422 0.13035043032492832 -0.5815406016136546 0.32404798867946916 0.01277481741087727 -0.8477842847630075 -0.4316499508819738 -0.8294092654405052 0.10398431329194846 0.6348108489439968 -0.2403275742130666 0.7820245717151697 -0.814520802352293 0.9661808921085104 -0.669821149698602 0.3055239921855919 0.043478625421470074 -0.5939728935477282 0.5600864344782484 0.6678281617963482 +152 152 5.516142305792424 3.998007653690813 4.330395721692785 4.182768725121455 5.237687115734325 4.19319896942865 5.233406270873927 4.25930456986643 4.939318897664097 4.495114960331131 4.041054439822939 4.113686190216155 4.051257240418877 3.7432335058985737 4.697639186207502 4.625885581159675 3.6324824639713977 5.217175720030584 4.1818949824968445 4.490556144288813 3.2732603368591318 3.2087308988330348 4.355731420448385 4.392389466421054 3.9657295659027736 5.453776088382786 5.673289293673456 6.020768993998356 4.833234491920244 6.078550992111497 4.737764897057144 5.414848728116185 3.4224716079565107 3.2431389194969134 4.379264917080841 4.781309599039026 4.814049543645646 5.453706970892561 5.405154989681551 3.591370902087272 5.464149341525843 4.5000996653207075 6.117927322291946 4.433643732837349 5.086126461828659 5.778754434174219 3.7898703961682196 4.436182896575679 5.694717753451529 4.211907539508509 4.452112903843177 4.237466879538227 4.302140295597731 3.795421650700769 3.5930288059093365 3.701580708272729 5.7602507626457875 4.094244689242438 4.192678975252525 6.540527661507664 5.367247436725916 6.190004057513413 4.52584699573441 5.20421640477839 4.763077117225638 3.6926786545734798 6.08654397263962 4.455054900745646 3.7691430322229955 4.451597248280774 5.479796454394991 4.334323454856534 4.0376374314343835 5.754186271243437 4.319127088419592 4.080976553449798 3.3088005443214348 3.5725855770171284 4.423982608404651 3.9819478485446487 3.097673664955863 5.553081231559819 4.741866611435828 5.276578965027406 3.527927324780668 4.989577549310587 5.236709455920627 3.815534136469557 3.683835027763852 3.6928549991834583 5.455311684659496 4.504429494843071 3.9472261322878106 3.756382789783231 4.7460439588022645 4.062020481415792 +152 153 0.5253558572797501 0.06216354273187519 -0.5349871248111111 0.1703249232750148 0.5658522414749179 -0.6678527000304624 0.8350319350855515 -0.25005086916452357 -0.8497952722460393 -0.9041927854938712 -0.6117797127924081 0.21682027511919566 -0.8540981377158208 -0.06451395494124745 -0.7297931826842543 -0.5977181569249332 0.1372176417885571 -0.9687087447547529 -0.7671457591983641 0.9042333242880423 -0.02199449424027189 0.07430938663819542 0.6952046824568727 -0.6932457136796395 0.3859447771568467 -0.7903215887504527 -0.7469228638593255 -0.7356463309319372 0.9023380420420313 0.6018361728973189 -0.9571662656344275 -0.37758815668724455 -0.1892822648539001 0.19980223410153286 0.5313231004152645 0.5984234477164461 -0.22832579320802648 0.8228695571760622 -0.5986865682114704 0.20359517219796808 -0.31863619251437614 0.6965863127291811 0.5488130016054571 -0.6715483495115071 -0.4032893684082175 0.6897597010586105 -0.4635646970415306 0.404569083155901 0.7627024222962839 -0.38759563621388904 -0.30158257215307405 -0.4795756627477985 0.4510074965277244 0.19037798487525026 -0.3266629651574571 0.7009490666942502 -0.9964437020778223 0.08188762142496597 -0.13469573837513882 -0.8768955551573223 -0.9779526434614898 0.5281846285144634 -0.6122535437975967 -0.6705100045425512 -0.20170782641335405 0.4036062270351435 -0.9897841500701201 -0.04570571634790599 -0.46459939872263445 0.7195527930649288 -0.4371290365051228 -0.8851595540713133 0.9988935602861131 0.2713047879819661 0.4026415751034371 -0.4415251744118136 0.3236985836637416 0.36127666610787945 -0.7143911286964024 -0.8245682090279602 0.7097773862403842 0.8595094954099036 0.6789164328998158 0.8404933826158503 -0.4365753620499879 0.5102173374267325 0.6805147004400562 0.32971608094883464 0.4294559387100494 -0.28996231408572637 -0.9505443753548954 -0.6157918306828509 -0.7781360177859831 -0.3232707609934291 0.706600668338226 -0.018411050573451382 +152 171 -0.6921411808740907 0.019575978107077452 0.8275590309327134 -0.5079627405506508 0.5672558682003865 0.7086230186612021 0.8114675145915173 -0.4936160016006701 -0.07568228732366244 -0.9557509696065278 0.6740614370130358 0.6576786320333547 0.3597318781196086 -0.5948796529324667 -0.8341405786262333 0.09937191609100893 -0.771400909671641 -0.8541796553461249 -0.5324531661481435 -0.05997247379094772 0.3977030221416922 -0.754544337589077 -0.3494344031775498 -0.19065569616057343 0.9642232047076609 0.7101418900394081 0.8394306308770889 -0.4049697007742601 0.07889619256088998 -0.3845725814813421 0.07202116178325091 -0.8254525423153123 -0.36747017011334715 0.5745916270348674 0.6148882021227633 -0.8400071522743511 0.15362196851396104 -0.9249631011004691 -0.6924076614096619 -0.71120544271461 -0.5875771077292229 0.16431264011706892 -0.21978625022770282 -0.4616333181526304 0.4232734105531697 0.7261577815301146 0.2518138550822566 -0.7206411484614272 0.8736547091123117 -0.9175160251217542 0.7955402733691608 0.8112874295016186 0.05431170047919487 0.614818503436191 -0.2463058944188612 -0.17065227694321639 -0.6976546607698817 0.5935497697349998 0.015569639689135828 0.7475477328259144 0.0974419920534424 0.8066109918981448 0.7943827945748645 -0.06691979650647872 0.8535062591896867 -0.5791435215624656 -0.894037265430121 0.09359175955805754 0.02028697217735509 0.955539910534916 0.4723939492080733 -0.7732593419889546 -0.1139250632415878 -0.7569346238364749 -0.10116897186987872 0.14234330589711774 0.18485957973282852 0.38096160488020736 0.810551896662359 -0.7004552518372673 0.18184127084366342 0.3670887425522782 -0.9355598195177632 -0.37646336755475795 0.11885842490705278 -0.6400230829518376 -0.6967773960450268 0.2524739757615835 -0.9404237080377362 0.3640583963154138 0.8951327330462919 -0.7820246586434261 -0.025526752839275968 0.271110295314996 0.5173158064591985 0.11953823918114925 +152 172 -0.016845111805294133 0.513825984085968 -0.9194593534449376 -0.6876633471747482 -0.564185098956067 0.535084218976088 -0.06756290105641383 0.5824020710377067 0.33834301442461134 -0.5323899929787212 0.1347766325582085 -0.23661121475910352 0.20511997788522662 -0.3049698743079834 -0.758904098475421 -0.830891370425396 -0.49726647791024603 0.3203860512606782 0.5458143529762305 -0.8743046889270472 0.38610345049995165 0.12078390135594597 -0.22772478267894503 0.11874012356252939 0.13522819158414 -0.5665163893572247 -0.9349992475377964 -0.9234725752462813 -0.6650432524425796 0.819669446821748 -0.476603535999935 -0.5232535276649009 0.01733875024399989 0.773922442490065 0.5483102294318511 0.2549820031576435 0.8752782073634888 0.9936871912082292 -0.6920724539494818 0.3966748442081467 -0.6373334844609655 -0.2542482237279984 0.8820477713697561 -0.9128113710421417 0.513901399004737 0.497368280736848 0.09545231945086474 -0.14759343768980004 -0.5351118325177666 0.21240950161683614 0.5627035426998808 0.35852476191431637 0.2813276298956988 -0.026487628852825962 0.7861620350192651 -0.7170859666728802 0.14877556257801583 0.008919626154524352 -0.9940003734930656 -0.47418056383524343 -0.4444514397193784 0.529467985554176 0.904976633237601 0.8190165281257478 0.3333413664461755 -0.956169333628748 -0.7026135808661138 -0.9985444361715761 0.15336517682069162 0.5448145051783302 0.7321992428749045 0.13793254880137407 0.1334425330642064 0.48260702221972585 0.8964122650062833 0.42639058243604877 0.45501688014197006 -0.27544006344907634 0.24641559119996215 -0.5362535281543312 0.2389931698143195 -0.9859627420326007 -0.1498692975010183 -0.9976976443057364 0.08664706313587334 0.47003039354575016 -0.8903532252593329 -0.6312774031537038 -0.25317992677022083 0.7197927639470325 0.3190189734101665 0.501527287665803 0.972257349246703 -0.018802984562541036 -0.5763551549628627 -0.7130409176826347 +152 173 -0.6343630013799875 -0.4890203543760432 0.3458343204111789 -0.4009122716688316 -0.9502114417661283 -0.672303406253024 -0.7953581312235622 0.6564586001759625 0.4993092406152393 0.5252170603536974 0.7808405783393695 0.26928032188997175 0.46422568679210885 -0.047499441265663966 0.2978376951236539 0.6919380167442069 0.41757536652954896 0.06989768100066596 0.43866424675118854 0.05837233631704897 0.016848928096903304 0.018609806147297903 0.8847251563260385 0.43058051429788136 0.9696373016325528 0.41371602627805104 -0.9198671180596931 0.5628468204648001 0.28368831381523996 0.9047656593302367 -0.2614581710779629 0.976417760561965 0.6644568639900978 0.23903290953287937 0.5421198508540583 -0.4513541358483828 -0.7804974847787405 0.5968255046761324 0.46083404919076987 -0.02126523039836581 0.44886703307384934 0.5430422064907383 -0.7988815520418657 0.17147028868828085 -0.9175475692003481 -0.6213075025359298 0.23634642154512986 0.2269858169770531 -0.6738162795106808 -0.5253355252958634 -0.41762338732238713 -0.8967278519125126 0.6951875047497986 -0.8585497357533738 -0.051727635129298566 0.6241203338371286 -0.5310841739421224 -0.40690157242413894 0.3508611292883588 0.772764295749903 0.398745390140111 0.6399004756462401 -0.14481967734211176 -0.9311841133462595 -0.08043481257420915 0.4924188900021669 -0.1649846535039743 0.7260359396363751 -0.07594392433147501 -0.34363083039183473 -0.9784069572970064 0.07771595260432784 -0.01918844831782751 -0.8392891619430753 -0.23647249194931041 -0.5032931890889003 -0.1260379490795389 -0.8543508846810952 -0.2579040742675105 0.8105385189372836 0.30650480600994645 0.18112325073772428 -0.6093938903138225 -0.6036575599472316 0.5224699047722623 0.4559254423677257 -0.577129161833565 0.001331547531330246 0.43540932477397654 0.09861399725241271 0.8801819833848219 0.21504746492604787 -0.47060266676023854 -0.9115142465546675 0.8497623747248357 0.9124481929720234 +153 132 -0.5888520919279288 0.30010977917868464 0.9174326934003534 -0.32198253244403463 0.5494802676780841 -0.6767225169512505 0.07031127564936823 0.6080040706666265 0.20028553731676135 -0.1204047366661607 0.08778545295682583 -0.010786531195245308 -0.04185932871268028 -0.5213382549329499 0.5987134091526876 -0.2643612919758347 -0.2068808926127037 -0.6168607592739526 0.813525219339738 0.02274916266046123 -0.8469844993476223 0.07925232295606577 -0.8489534462024941 0.04446559702956798 0.8469568325977448 -0.8660495477240258 0.3476957287710072 0.24298409878644445 0.5823564662036327 -0.11225994151821772 0.31401862065760233 0.6252599406676826 0.3792763488923214 0.38442649217787705 -0.9509458355806284 0.44315078680436404 0.683482610721674 0.02487399999592932 -0.8194804616463063 0.09028960293695976 -0.3475499342448791 0.3491283132244991 -0.669589465661059 -0.7899526979634921 0.920264249315744 -0.04283308332264002 0.44804697781644864 0.9053797466078903 0.7417047351662056 -0.08298774838240308 -0.5944482961038637 -0.04764160509580195 -0.4489507301985316 0.43950719368545643 -0.8409532021305353 0.6928602958726073 -0.3811006578342948 -0.751516908002932 -0.899598058680956 0.17987176184835385 0.4325548100021077 0.6940147962924612 0.07497305906706675 0.6475968706978017 -0.9918245274375901 0.6983582087017741 -0.6717347130853113 0.8038450097641416 0.7972512735584047 0.9657614453545069 0.25959758945476197 -0.873072342776303 0.8224589882625026 -0.9800145047592657 -0.9447669834799821 -0.2922458029069024 -0.18892004341257995 0.6541137327026221 0.45864065577875146 -0.5668330886771893 0.6710485648738393 -0.33871403677648604 0.07765257949159898 -0.3454443016490647 -0.5921745823425217 -0.30111370970748363 0.3722735568075677 0.3013404962731794 0.6962282144137171 0.8683244317114371 -0.19902643456190838 0.45419910372965533 -0.9528673098210501 0.7409953807191503 -0.3628739528788414 0.2388936206263652 +153 133 0.4970610094168657 0.5430641039074844 -0.5409117821118181 0.3319592441675481 -0.2920346909530045 -0.23162955558848708 0.9774800683553275 -0.9162539695795844 -0.3199240999979145 0.3065653876216963 -0.03370013526211313 -0.14946913491850933 -0.35847809678526454 0.580390412600714 -0.8949537648235191 0.8358292754203662 0.7318292674329265 0.462789857362673 -0.2335298841682769 -0.36523407866630087 -0.6481403977111628 0.6806378652104841 0.5343743343160865 -0.5407190089828839 0.9530294691795527 -0.7346690331365688 -0.35167519486295395 -0.89178987677399 -0.9519905805413287 -0.9954189941206557 -0.34142284155195557 0.9887138914224849 -0.40455157689787247 0.11502689889898465 -0.805653302238293 -0.17558800577537115 0.711035896420817 0.3889890729229215 -0.7406521691605263 0.5729345485074671 0.14710271685855036 -0.31512523047439833 0.832172507476489 0.9561129834053144 0.5706417550278824 0.9709969602529978 -0.698075626757227 -0.5623180072015224 0.9418257644342125 -0.6312095267114282 -0.8431551257026537 0.9208676786099426 0.15444544510203428 -0.7383907534746474 -0.024257400337558188 -0.8242639287014037 0.17562243894536267 0.1199144939379051 0.6676336582519213 0.8234584530790354 -0.6769150719689345 -0.1898137555609214 -0.7268605082742714 -0.3655266556277601 0.8713014592304962 -0.22636262222694592 0.7161004334250605 -0.14456532625414975 0.5336108147427294 -0.5183698562992585 0.6168099545136625 0.5480957368057653 -0.6336902470103223 0.6024979737714007 -0.5767083719604933 -0.2469804572404466 0.4945516761155737 -0.6790850165437818 -0.2638339971450063 -0.4141696589961166 0.6743017477643323 0.3229353701861384 -0.8362009185719881 -0.5841006826777411 0.7984190072007065 0.19430718042526984 0.5009109553136588 -0.9403040377811831 -0.3453617415056318 -0.9542860502765325 0.9606523504584892 -0.3484748931984609 -0.8588663255389641 0.2502127712407345 -0.9005959756588979 -0.6384611634182173 +153 134 0.07049414101391793 -0.28501647318171486 -0.09244127869455765 -0.044222242619481156 -0.18210657687082765 0.5747700090306924 -0.35276601255983375 -0.9184828501553712 -0.6149906856398739 -0.45982050453318446 0.19719684505662283 -0.9866994522195072 -0.39530264633666157 0.8786854647413629 -0.7863553001765844 0.6538086511174717 0.26030521623981584 -0.9289799564090495 -0.5596720604936443 0.5275788050377603 -0.7667239012009368 0.15651571237333806 -0.26981904577093796 -0.9134117723528321 -0.8808427725389143 -0.18243865420906413 0.6666050213374617 0.37414546486301914 -0.07421463630777825 0.6899928198219374 -0.18804629772767067 0.7934474344315212 -0.10278651036894892 -0.8125014849018846 -0.8143696441508064 0.6941019089254699 -0.32155072899675696 0.4899650129961195 0.23985540460207422 -0.5488449104567168 0.46804164865363385 -0.4267900743895039 -0.430484322189568 -0.3090678564999516 -0.13728390486361386 0.34444905311106533 -0.3354164069977421 -0.9984693166428751 -0.24250884804457185 -0.20717684213561505 -0.15479071726842397 -0.7592332460898736 -0.4529769220300346 0.6968917238974592 -0.9780453354348333 0.19676360505590096 -0.028643720350358448 0.8307676072676191 -0.1011026882236079 0.2505205410666016 0.32886514235595676 -0.07590935606697435 -0.8755709509181453 -0.45562742150191426 0.7769124107800105 -0.3984358453663588 -0.9161591571885466 -0.5895769359977385 -0.1282062331924072 -0.9419114284511065 -0.9893837658393609 -0.9643166862244892 -0.960957857204592 -0.965720244718324 0.2662396637669959 0.940288065237139 -0.8671810833899629 -0.9453419445273246 0.5860998855081334 0.7205439827016134 0.6259183796495393 0.8595497897043995 0.29639484597614985 -0.4973262881155238 -0.3428955217807024 0.7932821973173856 0.3137253336381227 0.7908271819637422 0.6322747096239762 -0.04515764355762841 0.9020437753991661 -0.930163332846915 -0.7601270033338439 0.16424996904028477 0.9925085163834402 0.9903999973404829 +153 152 0.5253558572797501 0.06216354273187519 -0.5349871248111111 0.1703249232750148 0.5658522414749179 -0.6678527000304624 0.8350319350855515 -0.25005086916452357 -0.8497952722460393 -0.9041927854938712 -0.6117797127924081 0.21682027511919566 -0.8540981377158208 -0.06451395494124745 -0.7297931826842543 -0.5977181569249332 0.1372176417885571 -0.9687087447547529 -0.7671457591983641 0.9042333242880423 -0.02199449424027189 0.07430938663819542 0.6952046824568727 -0.6932457136796395 0.3859447771568467 -0.7903215887504527 -0.7469228638593255 -0.7356463309319372 0.9023380420420313 0.6018361728973189 -0.9571662656344275 -0.37758815668724455 -0.1892822648539001 0.19980223410153286 0.5313231004152645 0.5984234477164461 -0.22832579320802648 0.8228695571760622 -0.5986865682114704 0.20359517219796808 -0.31863619251437614 0.6965863127291811 0.5488130016054571 -0.6715483495115071 -0.4032893684082175 0.6897597010586105 -0.4635646970415306 0.404569083155901 0.7627024222962839 -0.38759563621388904 -0.30158257215307405 -0.4795756627477985 0.4510074965277244 0.19037798487525026 -0.3266629651574571 0.7009490666942502 -0.9964437020778223 0.08188762142496597 -0.13469573837513882 -0.8768955551573223 -0.9779526434614898 0.5281846285144634 -0.6122535437975967 -0.6705100045425512 -0.20170782641335405 0.4036062270351435 -0.9897841500701201 -0.04570571634790599 -0.46459939872263445 0.7195527930649288 -0.4371290365051228 -0.8851595540713133 0.9988935602861131 0.2713047879819661 0.4026415751034371 -0.4415251744118136 0.3236985836637416 0.36127666610787945 -0.7143911286964024 -0.8245682090279602 0.7097773862403842 0.8595094954099036 0.6789164328998158 0.8404933826158503 -0.4365753620499879 0.5102173374267325 0.6805147004400562 0.32971608094883464 0.4294559387100494 -0.28996231408572637 -0.9505443753548954 -0.6157918306828509 -0.7781360177859831 -0.3232707609934291 0.706600668338226 -0.018411050573451382 +153 153 3.4083182824770275 3.354916982065816 4.344642340937787 4.484737738996795 4.250668448216316 5.063302194832776 4.69896165845326 5.101022765382453 4.616471466799781 4.418629452603783 3.97799727212852 3.798209816486615 3.2902998304816258 5.176694465844976 6.0145882312960435 4.888669184118877 3.6487539285012582 6.031360795451039 5.240419440653729 4.8778802358924995 5.509873074874442 3.950169803463829 5.9018825227651215 4.885283787319663 5.80982023968913 4.28740796406275 4.095692053020786 4.96911228634473 4.202036221242775 5.9029007313096775 4.149536296429428 5.467687333577851 2.7164502064489358 3.876547191812405 4.9138381635107455 3.7736659082300203 3.8902382288844497 5.09178532662565 6.057128043839965 3.716045730096482 3.2875747807248774 3.9167188096637346 4.659777832682182 4.29458617527027 4.748363809628017 5.209527521087148 4.034854223963923 4.949780259775297 4.607942325295944 4.796316599670108 3.805515538003245 4.441932797335614 3.222048711384032 4.8326232036392245 4.883962821371595 5.320729226303723 3.4773521460301775 4.739647441177164 4.095347454987696 4.643331956731662 4.288871038949059 2.9985187432651217 5.720364821808987 4.139653878414161 5.245148497623901 3.4232724093274665 6.250719060673197 4.293726202143536 4.37438692806244 5.46418662166914 4.567940557153332 5.304464672122846 5.92576323448245 6.654480976350005 5.645809926072479 4.937990443158705 3.4274512682927814 4.69067828994039 3.833226231155066 5.04908682874842 4.948542576809136 5.30530177998794 4.5235100971357 4.583291799510196 5.231284352381687 3.7514604603598665 4.077204016084036 5.241859456166982 4.664892684908049 5.053164661148514 4.97531005632856 4.232305207819475 5.827556884297391 4.778749738473097 6.351031241111912 4.257471375698446 +153 154 -0.192044658899158 -0.46060020892827325 -0.08571839962670968 -0.710237211814932 0.6738138429536258 -0.9617766223208983 -0.6541642619547365 -0.43175400727719904 -0.4222963838150784 0.029559578511488382 -0.658191345083033 0.6608058866212339 0.40933299401322 -0.36914237240670467 -0.9030451240354045 0.7677138783199036 -0.1112344253347115 0.11630408238528545 -0.26686939183517855 0.9277823646078571 0.9810009326939644 0.6788019752772121 0.6486483220618713 0.9684982621867269 -0.9996232314978932 0.23093212619538783 -0.1828663876954717 0.2474424090815286 0.1673253455824355 0.9464731801504433 -0.7679814585633562 0.04926181304042743 -0.09251507780642876 -0.3559344609980446 0.7987790089182878 0.3467747644622299 0.05085440512134687 0.33015146379031646 0.16354770108220418 -0.4090019999922525 0.26432971078605116 -0.7872487543589164 -0.5158070496157343 0.5678516415449191 0.2745573990236585 -0.9082034863513386 0.6087342933123083 -0.041740985858573554 -0.5368236236963242 0.7059425056050961 -0.1579440938335166 0.15596054795259984 -0.2614676997751979 0.9986965630953568 -0.05456613095558693 0.24516804436812545 0.03680325812839924 -0.9243235957073825 0.2927782219207742 0.4561895189545533 -0.36794311785786893 -0.13616791317981947 -0.980187442686298 0.20497183624198545 0.5229893394624276 -0.3785782440169527 0.41711393317503176 0.543958109487888 -0.057454710759274885 -0.8288860409879479 0.11982135034603769 0.5026118748123043 0.6452121786105816 -0.8593083742026326 -0.8628250673165205 0.48127881439232634 0.19302990987110524 0.20156387905879525 -0.005067279815421655 0.05207355650078482 -0.9362037454030621 0.540850177754681 0.6479828014661331 0.5192108569553797 -0.6849384340049087 0.9598980322570279 -0.8844720616034456 0.9884402308484026 0.8275720609020178 -0.7736245834283404 -0.5569791025877764 0.17226790709636908 -0.1752467870201444 0.9330138183363086 -0.7239151901604717 0.8023275515724364 +153 172 -0.2740791276958072 0.23019976566179579 -0.8374540600813889 -0.348219526358184 0.4458769178473925 0.6915869270463557 -0.3264789859616204 0.7543136017208556 0.37708643721722157 -0.8002272729071389 0.6449503564570946 0.5560551766919763 0.46649256922251237 -0.8890421212475927 0.08703868669771753 0.21252726573416258 0.4196961420823013 -0.5052754249977929 -0.9822371304315543 0.6350132045630494 -0.9788380101533756 0.4633315552457753 0.8808441566659806 0.4877091559192268 -0.3923913571712443 -0.7721078476146637 -0.813567877074219 -0.6917168423784956 0.1588232580925466 -0.170634723290497 0.570916791514781 0.6544232455924044 0.8648601814886083 -0.7318368103307695 -0.31281634004150205 -0.7414947180372742 0.27555245715495014 -0.83883306985298 -0.9930733381677292 0.6006663668330121 -0.9943967615933513 -0.18907937021046828 -0.6819697919420848 0.7856874255879629 -0.4465049698546806 -0.14298773527376762 0.11039258169073429 0.737160176595234 0.11044314971921643 -0.7599376395751591 -0.12089881438134409 -0.9053153313145841 -0.5362198992070324 0.7796547384089652 0.3636207547917274 0.6763441116384961 -0.9871278846501899 -0.6661791292653991 0.44577146575426263 -0.8791573713304399 0.1284821014891202 0.11486331647739867 -0.4504252570772762 -0.17146541051262298 -0.6302807689188128 -0.5106536477656156 -0.09135417223991316 0.9230171719977476 0.3867806571925092 -0.3771471282310437 -0.758804499004009 0.7547051817837549 0.17969810440505296 -0.584148808943999 0.20533552055204707 -0.5805352055400701 -0.4606759615256564 -0.15515356242757705 0.6608815678022053 -0.49922362385197405 -0.02089412969539195 -0.10757087007123611 0.18439458763982586 -0.4544309417890193 0.750264980332253 0.13606021830417414 0.3806439590277264 -0.9872447820108441 -0.14423572061655587 0.4066925255845324 -0.013711615046270387 -0.7248478371680966 0.11095264595583476 -0.5494851748584428 -0.7512694548309637 -0.6475901133209638 +153 173 -0.6583820487293144 0.4792440133077087 -0.22767979923858972 0.9426935078470182 -0.5229564393397617 0.42034067443605716 -0.7080612956931727 0.320115785116561 -0.4078677492707772 0.3057569342520561 -0.6424023703803698 0.27837155980794925 -0.6391674736993036 0.6958274415113141 0.8250681926268231 -0.5589637275816497 -0.026512434473948465 0.6956506182167355 0.7840308809300713 0.38780881480217233 0.34980812580139875 -0.7776469871117673 -0.412264288790112 -0.42612289682651716 -0.11228683004940776 -0.2936502879657703 -0.391580087264225 0.6024944024039103 0.5559906650830773 0.4138837073460919 0.06686916749638838 0.837790428105146 -0.6007824035834541 0.4380910523941468 -0.014567997682854994 0.09153700249692642 -0.3032683174135251 -0.7996686712014103 -0.9237401245146206 -0.0822468652250472 0.0016786050134076635 -0.37661039470892566 -0.6364708921864333 0.0809546692575851 -0.3665172853242047 0.7555595592602873 -0.8481124342021165 -0.4548692769750329 -0.07872700658998344 0.42439556048450844 0.09895341925834811 -0.023272637608771518 0.14355908078474888 0.23925770826919113 -0.7450181400945874 0.17997080161707846 0.4081652261740034 -0.5267493559486454 -0.026694434436196346 0.43537668835337606 0.19322650417735332 -0.7811482977927664 -0.22558394334138998 0.5682406906288697 -0.3023079999034408 -0.416774136704398 -0.9081080650151083 -0.8322911844941439 -0.5937308913678625 0.020699539195660366 -0.3517113231455993 -0.40503746646006356 -0.7281613979185011 0.8675028140788235 0.8550667663325175 0.8546351044241729 0.09939553505904208 0.9970403205213096 0.0101178854625259 0.4313977546867127 -0.8592503049648943 0.7253961499805868 -0.2786838799293252 0.8449996673688371 0.5909953858832329 0.2456366118259794 -0.4790215685937136 -0.58594324067165 0.710580455584634 0.21991861857964068 -0.31481945691094393 0.8248500990022509 0.8834639703761378 -0.8363321757974702 -0.7840879061047081 -0.08042288661692787 +153 174 -0.32193922025124033 0.5196039849241032 0.7807440061508952 -0.9914045678226209 0.6736090090966012 -0.03578530887384401 0.5597683198310348 0.5600703050487115 0.8332316148447114 0.9457656726475414 -0.5382322798503896 0.8268992399405031 -0.11029277078161392 -0.8674916663741556 0.7583758731038088 0.36653246931357253 -0.9811275996481488 0.8285351258474345 -0.020490924854395187 -0.2249589319334251 -0.3017825977416835 -0.5734865766725115 0.6818667503139204 0.2652204995700571 0.418076418326349 0.06805350246565389 -0.37524728383744277 -0.9564861799304836 -0.6799078225229607 0.9947458813533725 -0.9106296525079223 0.8202931700381204 0.0034742878225988427 -0.14988355407324505 -0.2636749871031592 -0.6384023343082965 0.41761307841000717 0.40745415463080303 0.6320178253475679 -0.43369214908860587 0.3164261806103261 -0.46903119943285443 -0.1525242690404347 0.007031118291443983 0.853327660864041 0.4279520489474693 -0.16792428978925522 0.5588285059950608 -0.6177743966107376 0.6054683870905682 0.8493786487973387 -0.338563601058091 0.14284818019520218 0.6549246813587883 0.8263807429325194 0.933585241246484 0.07152781218477111 0.31790494099006095 -0.8951764524157559 0.39013583503036653 -0.7919563916639816 0.25213197963496237 -0.9788030799118377 -0.9782073180285888 -0.37189969308222737 0.21986995147315502 -0.543713590992472 0.12870300082784092 -0.5658170838867977 -0.13625250064518712 -0.40721479445897346 0.1959779329095972 0.464547007388477 0.736627978709874 -0.6771671571908897 -0.7805227879900225 0.6642739920911869 -0.35504473339860754 -0.9662592813617308 -0.6787091713816937 0.043843231560700247 -0.5964045766693384 -0.8410209079593174 0.2399138327868342 0.24404929327200775 0.2460534376458492 -0.07094334406894753 0.26894711729243337 0.4263109467526285 -0.8058701769891701 0.8460069789725415 -0.10262274556282058 -0.5721726482311906 0.8576449794342555 0.7374543732305292 -0.5504860453284592 +154 133 0.7442798615187229 -0.022766100869514805 0.3192739201804762 0.16387905329122132 0.7529797134607539 0.1449145227463169 -0.27047572035849643 -0.18324130048656273 -0.22524391667317323 -0.7451799533755714 -0.7954319560923504 -0.5591954258791054 0.5196961219366709 0.5280580293927362 -0.586213024487569 0.6762898895526988 0.9621160562828655 -0.4457421127052381 0.6575929931322528 -0.7377016544917145 -0.9677446797610354 -0.2210272792461514 -0.22628347065421694 -0.8918765045468384 0.36444451977779546 0.7259675064811384 0.056626923950512165 0.31755517084600005 0.8871196423439609 0.5111890896292224 0.5321837736692958 -0.050821634820428896 0.6477106769447456 -0.18580748960212667 0.40600633407438536 0.8617978357091527 0.6713574541863385 0.34519009581889026 0.7776114931913998 0.31665279739077334 0.6213242806223693 -0.6342191679572102 -0.018391307043829075 -0.04463777559062643 -0.6715065614721709 0.462039953761495 -0.9165301553525667 0.05738742611385961 -0.8215060030941876 0.1322207247078353 0.6677068346307407 0.6601670324143691 0.4486515525535828 0.35206619234560677 -0.23643296140788927 -0.46151193765362164 0.12650439687514203 0.09714653316822419 -0.8747324668274785 0.046254436636826046 -0.7133465159468568 -0.13964041606004973 -0.29442009802712654 -0.10651399304966636 -0.7895726680862971 -0.31777694114857 0.8958290412209113 -0.7319429668651376 0.030007970663656014 -0.8798962760438391 -0.3643013502461645 0.7664428750971792 0.7834749758597859 0.5655501780077634 0.5235315265539839 -0.2953922384875267 -0.17653983377189775 -0.05004090724049881 -0.37716151624263516 -0.8387547340679362 0.17583976125403367 0.39217572649992527 -0.3209576071192646 -0.7273646525540687 -0.6059834351739413 0.7647983622183268 0.2897961507183966 0.4668380641766896 0.8970168298951755 0.4110353932916506 0.49705439076864755 0.33246313821013085 -0.7338581965186728 -0.06783797092559651 0.0725384181849793 0.6672744480672472 +154 134 -0.665864200679888 -0.934663370991609 0.39324843996641023 0.30134991139125233 0.2416277604142134 0.6903307226541948 -0.06336380770930594 -0.29247170805799794 0.6378786269999257 0.9927523979329722 -0.5942515697786581 0.13941662933603438 0.1321187019689396 -0.843876662955126 0.09028361735091628 0.2453017034335392 -0.347113337745808 -0.9558641412605204 -0.9794847798979147 -0.31818225996381044 -0.9599095780995135 -0.31643511415754944 0.48431140452701626 -0.5228050551042858 -0.6196086786166006 0.3428261416470495 -0.0024813819083235877 0.880877794653862 0.6751518658610085 0.8828122036608315 0.22175814292035256 -0.7332757028797512 0.7456687052946844 0.3756634252997726 0.40745342749555813 -0.8795514626263181 0.07227349531006677 -0.12338104224185154 0.36436959951957726 -0.4812387950659256 -0.5117332656240043 0.33737164012934606 0.09922642443701801 0.14669117065032733 0.24445898455044235 -0.7981616468821979 -0.643173217689208 0.2381557247480237 -0.7209261215653953 0.3310008825677322 -0.2368301820967269 0.6827619767127722 0.5525751950502118 -0.6902096804447133 0.2866024295349112 -0.267811319346162 0.744070388556104 -0.7395172985754803 -0.7309669437640003 0.2367941233173272 0.4809889520962707 -0.6504958509644554 -0.9668492239308069 -0.008145021452415024 0.6071823163000605 -0.5411733223204793 -0.3417240515804205 -0.3733699217562976 -0.03774220654314453 -0.1901614378521228 0.642550216686721 0.8845986634113521 -0.5873016880070498 0.9061117469718312 0.48201390534582456 -0.3008205461942701 0.09235858189474966 -0.34746609110672866 -0.9039498047874326 -0.3661985370644514 0.6688711771818638 0.05241615248861242 0.5034259049106053 0.5852089664319982 0.20411288026234353 -0.8473969700412176 -0.11372149863897896 0.0003214013432091267 0.7677293273057786 -0.024373271933334717 -0.4727546087250001 0.6017077043672137 -0.5378372566596088 -0.9031441384066552 0.7050526086897033 -0.6991875425086287 +154 135 0.7453629088874436 0.8306883157994904 -0.9349866789288228 0.4629236730761763 0.7210393780519802 0.031012908378695858 0.7341619972887676 -0.24782762335843 0.9684685631793319 0.5227370032759708 0.05993100819638886 -0.2933036882098867 0.8937855578732397 -0.8804479873029003 -0.23925701223140527 0.6153300322929194 0.536070183177487 0.4093142374484773 0.7628143044953322 -0.03081645051703852 -0.20513736402770744 -0.9842055816017694 0.9819300229129213 -0.31270086157079513 0.20139005479215677 -0.9825142733081993 -0.4723712731548959 0.6629158367590529 -0.2633674556493555 0.7913101985867952 0.3228995757351325 -0.6762423143046443 0.04392359827811321 -0.7447414619675061 0.04244409502290236 -0.9379278670914346 -0.7965938686694816 0.28028629428439267 -0.40155563113604753 -0.6412987336900147 -0.8656062077063211 0.2696460489120476 -0.5411082494861128 -0.991205890839749 0.2005390241443663 -0.4112967738484179 0.06293156583764525 0.03828101747388968 -0.8759380574549176 -0.7872715895911637 -0.848135818865648 0.8428621280790496 -0.21415392008872658 -0.79886229354726 -0.700043402431223 0.3158503704395774 0.40480104024630625 0.755428025692422 -0.7122123115351797 -0.308087201594172 0.4498925022674627 0.30302405475172645 -0.6119901382028974 -0.10212201155117051 0.846663268425152 -0.819612215003362 -0.08389313952544297 -0.6377914449190516 0.03171785487120293 -0.7951783791133242 -0.03894972728877222 0.648302285540399 -0.2954625120990342 0.8757739632152883 -0.20122201502416193 0.2898792356588502 -0.9947586940332873 0.43224712938227183 0.09023644293594413 -0.4188790746925988 -0.48536014156453544 -0.43198882759215484 -0.8883549577843233 -0.35034146338799554 0.17782140292227 0.9144910278050637 0.29977875330120174 -0.4699718691334729 0.4253163442983867 -0.11152381132720257 -0.7155257189473265 -0.20980167954231344 0.2071088279760196 -0.8425174503727444 -0.24953252572400664 -0.6823853879874382 +154 153 -0.192044658899158 -0.46060020892827325 -0.08571839962670968 -0.710237211814932 0.6738138429536258 -0.9617766223208983 -0.6541642619547365 -0.43175400727719904 -0.4222963838150784 0.029559578511488382 -0.658191345083033 0.6608058866212339 0.40933299401322 -0.36914237240670467 -0.9030451240354045 0.7677138783199036 -0.1112344253347115 0.11630408238528545 -0.26686939183517855 0.9277823646078571 0.9810009326939644 0.6788019752772121 0.6486483220618713 0.9684982621867269 -0.9996232314978932 0.23093212619538783 -0.1828663876954717 0.2474424090815286 0.1673253455824355 0.9464731801504433 -0.7679814585633562 0.04926181304042743 -0.09251507780642876 -0.3559344609980446 0.7987790089182878 0.3467747644622299 0.05085440512134687 0.33015146379031646 0.16354770108220418 -0.4090019999922525 0.26432971078605116 -0.7872487543589164 -0.5158070496157343 0.5678516415449191 0.2745573990236585 -0.9082034863513386 0.6087342933123083 -0.041740985858573554 -0.5368236236963242 0.7059425056050961 -0.1579440938335166 0.15596054795259984 -0.2614676997751979 0.9986965630953568 -0.05456613095558693 0.24516804436812545 0.03680325812839924 -0.9243235957073825 0.2927782219207742 0.4561895189545533 -0.36794311785786893 -0.13616791317981947 -0.980187442686298 0.20497183624198545 0.5229893394624276 -0.3785782440169527 0.41711393317503176 0.543958109487888 -0.057454710759274885 -0.8288860409879479 0.11982135034603769 0.5026118748123043 0.6452121786105816 -0.8593083742026326 -0.8628250673165205 0.48127881439232634 0.19302990987110524 0.20156387905879525 -0.005067279815421655 0.05207355650078482 -0.9362037454030621 0.540850177754681 0.6479828014661331 0.5192108569553797 -0.6849384340049087 0.9598980322570279 -0.8844720616034456 0.9884402308484026 0.8275720609020178 -0.7736245834283404 -0.5569791025877764 0.17226790709636908 -0.1752467870201444 0.9330138183363086 -0.7239151901604717 0.8023275515724364 +154 154 4.73441587985856 4.6037459425198275 4.170422397218768 3.7485090564957217 4.594607990426804 4.311659347300694 3.7395813431386826 3.2258257329122264 5.228348566882368 6.205131246356611 5.918884846425913 4.0577827065300545 4.3678360853275935 5.886675394922465 4.011461674467305 4.538134750020731 4.560895616272571 4.561976569954395 4.601332026856413 4.436254248369731 4.886200434405156 4.401878933189428 4.462647150028807 4.168175387316977 4.094053372467817 4.842304600134094 2.818282953298046 4.72700776888417 3.716079054325775 5.602974917395669 4.46266541003701 4.430716017205295 4.076133601602837 4.432218032806713 3.8899428804735274 6.301304294558816 4.0066796095471116 3.902729331182775 4.14909944976117 3.900298293578345 4.849968576747424 4.270961485199708 2.537364793823332 4.439306528175238 4.31902287869404 5.440019814734978 5.215209517808299 2.3555634418745637 5.276907903437177 4.961465356607837 5.406959088760193 5.528578382910785 3.8797357746753924 4.983176194420144 4.3876228042497765 3.942668238047389 2.0777533572648457 5.422356602982061 6.676732327187961 3.323698064428828 4.084277904735494 4.407402554059197 5.283621684363728 2.201823002835818 4.9308844770684015 3.6067933539071566 4.09951233802037 3.9788449426254466 2.402622601074585 5.154699573418128 4.218156920297093 5.035283810092272 4.400005149846427 5.724910504987073 6.055292762913274 4.178789407143519 2.858643727018281 4.022079821018716 3.7132601950845503 4.398928234609792 5.388028345010049 4.365691062162963 5.175389704376859 5.280372817553451 3.5616370046002164 5.767895998357391 4.273078631144464 4.208290137793268 4.3785750569467226 5.084582610862674 4.818718158339711 3.968702194254111 5.409628190021075 4.131971010182325 3.8020568877100063 5.055442868298078 +154 155 0.5769683755522741 -0.11287925602166093 -0.9639510887566647 0.8174042728670716 0.2597143908474997 0.35615814849210126 -0.29889441560705543 -0.1877660994061674 0.7667042143191776 -0.6830612160252436 -0.48492058276394245 -0.6227656590591959 0.6977437914061058 0.3688650985185382 -0.5306044700525463 0.3689674130312792 0.5750300603002374 -0.2895507038152676 0.05953595018256741 -0.09919620567574827 0.8903718922405055 -0.6530769075188061 0.5328671896741379 0.42434652980902343 0.4627803305098035 0.7655441547035531 0.12863613840698473 0.016573855684993255 -0.6116415147977081 -0.04477707521409946 -0.5893428922339428 0.8398777751295881 0.54515744522735 -0.6474722717349422 0.41644234791196433 -0.9773813577443276 -0.46145838569133013 0.972106360082037 0.0957093240305591 0.5624815628236879 -0.9996196346787571 -0.6240438323495601 -0.42528954642329775 -0.9249792847950404 0.02269551272120318 0.2541955131656508 0.8588245554363829 0.4090496440156559 0.8562780980924243 -0.2412135671115334 0.308895856907619 -0.7492371735382575 0.34897868349987426 0.5304404401637426 -0.9166101966398199 -0.8866487132560787 -0.0022023297755582316 -0.824334419894658 0.8330910222766184 -0.3461376780677763 0.368283758802046 0.6053141447326895 -0.35763802809089773 0.24541357697754185 -0.564285759719193 0.12883642424895903 0.32429596456840937 0.04506484402394162 -0.5928389826585665 0.47766791693364685 -0.7635871615404561 -0.4814154335079759 -0.5456182808968022 -0.14696366420239126 0.981782793764421 0.4412625717180738 0.0350546883857068 0.9274436436918685 -0.5899829136833958 0.41360571661597345 -0.5635058208642538 -0.9101820934145168 0.5918406707224719 0.841578875962665 0.16477611816979665 0.4536194205636286 0.6159198431118911 0.48720896282464654 -0.71273770511323 0.8009516681022775 -0.26501430818607363 -0.41495869443308986 -0.9137896613557461 0.21217514799749226 0.9041560249645602 0.6063511814682281 +154 173 0.7423095205856978 -0.2602613164259069 0.6775205117490746 -0.15825774166519468 0.2567067167040644 0.3278059075008355 -0.7308791908192596 -0.28938659301750036 -0.16053291288769245 -0.8509449378500784 -0.7843991677454256 -0.782968750047577 -0.7086218453987887 0.7293552211086471 -0.5899493220864891 0.11466969325705878 0.21892708968102492 0.6635301134362881 0.6578997072519843 0.7161022533551611 0.2754959776202828 -0.5875272364874375 0.4048678518651927 0.07718413590590978 -0.07586791175644203 -0.9334833762863202 0.8977107387781653 -0.6858238721377947 -0.14131738311456865 0.751428145207246 0.9463299860987808 0.6320436958897859 -0.6352898244104739 -0.5727482000090809 0.06405619599525925 -0.6292870753933841 0.9930128692684492 0.6136601307562539 -0.4357669111982596 0.36507633710652354 0.6088173434765398 0.014733196098602575 0.009695015491791414 0.16603811252259204 0.5464572636732101 -0.3910423765423363 0.8391861819071764 0.6042968567721041 -0.1711690898843885 -0.7596480918804172 -0.7042158403824723 -0.9958966807321814 0.4036759821319089 -0.8983006073581057 -0.6896856845964248 0.6836071083283095 -0.15903505810053065 0.1665864428508843 -0.9554220768991721 0.20611261898043343 -0.34015114278651426 0.7836621056444775 -0.6876910955477598 -0.26599722814137583 0.45387124455341876 -0.5280219423017962 0.6221256635495835 -0.25527851314765826 0.2517638037354244 0.3886209560217426 0.7642756900135812 -0.12200551728364717 -0.7410796793662002 0.6144010867563061 -0.6559250177791334 0.5417863720398031 0.35450994667179647 -0.46502629525243444 0.2856020961354109 0.4550200494416765 -0.27517978900948825 -0.1430164769260298 0.583751584518545 0.9377895489782972 0.6663234885155598 0.5480977428889207 0.6027177645369717 -0.689220287078923 -0.13711981577742138 0.8761708621941824 0.9192250173053358 0.358283012942493 -0.7292001253979086 -0.12125431821183175 -0.2952416226772536 0.3493443138375345 +154 174 -0.5119074669460606 -0.8301111800213195 -0.6986725854557059 0.039561501045561887 -0.42593760019892213 -0.4829780598567648 0.024995977740202457 -0.2648770823340869 -0.8072857846544228 0.6806827869728234 0.9104898732578222 -0.3316377603076437 0.42149709373877386 -0.6341519728601985 0.8035985672671555 0.37259977322599025 -0.44090485048480654 0.003017957936675364 -0.3243122917014869 -0.20899377423198984 -0.4273943262067028 -0.7002728952415662 -0.16325751651245346 -0.2208283163837339 0.14667426008377582 -0.05215268981272425 0.6974988212765818 -0.9530014480059126 -0.08039289970291352 -0.6243229978021996 0.4099876197005181 0.2926215562395158 -0.7736528761817656 0.5693529727717859 -0.8700896262300917 0.19282973882406673 -0.10131684826165799 0.6138628058188496 -0.4870580138658531 -0.5683552967090448 0.17441834674051582 -0.38651250317878905 0.21151688448725126 -0.9854902942343846 0.5384029759993794 -0.9434361355754726 0.4483609466882874 -0.2769197920332147 0.06066683851822008 0.8428233078593399 -0.9577295916841788 -0.53587645627999 -0.9328655490938358 -0.19004259492865305 -0.3402127382758404 -0.08776698774660985 0.15335748792500903 -0.7595042738725717 0.844484600338256 0.21721460700538509 0.1901147449682501 -0.29811662975577824 -0.6401277818843267 0.2238320421826785 -0.3252993034279592 -0.4947343454558222 0.8202270592872887 0.23702552162893165 -0.2219142068174138 -0.41954151430199316 -0.36519625515246057 0.7955954612280685 -0.12815455818135413 -0.07924009440836288 -0.8735153308154875 -0.6615611749948924 0.417396220197773 -0.610412680125002 0.5324683190927422 0.8897352591976264 -0.9370728533114063 0.3850780990713616 -0.6070041429807367 0.40260763859883153 0.5480809441523682 -0.18369116868682855 0.886388049674288 -0.2593251294320791 -0.17437622242602902 0.6908183903165916 -0.16983379338372329 0.5054315207549964 -0.5528646269449005 -0.17706414633434897 0.3835516386135265 0.07586063516213737 +154 175 0.45157072704538725 -0.637127376970557 -0.013411639065081582 0.2943826997377057 0.8365950491553862 -0.38229672632100287 -0.3137399188364012 0.4500427238919491 -0.9567532185247583 -0.8392229259245989 -0.9745865801205562 -0.07236748522375924 -0.2544235875914509 -0.5628461237080677 -0.1714410910001951 0.43877951391596115 -0.5901794221162853 -0.9724183775484381 0.5967323413899368 -0.7816339201249389 0.15732969145082842 0.11536419152761601 -0.8225230146024336 0.5848011760372738 0.7760315143324203 -0.7570826887594233 0.16096937698192515 -0.15978406788653765 -0.7735851843725166 0.6270381586602536 0.1509839679404512 -0.5285497162078301 0.020185029609333327 0.011180130064693206 -0.7845386566962738 -0.5506908836098858 0.6122008970480608 0.39131205772520605 0.6337006249645294 0.06633909775632274 0.47321404147598267 0.8855375357388995 0.4055639776459734 -0.5769862621869954 -0.9639085827284346 -0.44976540532958564 0.10386791660734751 0.5955293265035426 0.46217266071171736 0.4380636297912168 0.953130940393156 -0.7191039351707524 -0.0019521825320916175 0.2610947387611311 0.4587900182461677 -0.8037693418239387 -0.23760333774127385 0.6136721513565191 -0.6189263835514376 -0.6748915795482178 -0.30004955303621816 -0.7364248504671058 0.33884537451031194 0.5852844743774261 0.5536010015077917 -0.2526894741510244 -0.32679247218649454 -0.8210251355451088 0.8798339464144131 0.6529385198537716 0.464184373566747 -0.4552323760507462 -0.07208546059525012 0.8959372363824964 0.48196158762593067 0.9267305866667859 0.08653605800267639 0.431179151950418 0.1622179670005135 0.32916660320521873 -0.7624300350907847 -0.9021108068451422 0.49574169157905046 0.9104136895245301 0.44255286947403305 0.8704134140703672 -0.16462592704912637 -0.08603338174052788 0.3637372354243791 -0.8018538550864858 -0.5913633313706859 0.5503727490406016 0.7139396572147529 -0.8284303194154574 0.29813882259289604 -0.6510732376395905 +155 134 -0.17543988898194418 -0.7016803688445348 0.2142027971287268 0.22775956478537118 0.23192220242678507 -0.47767392550219134 0.5969539838583384 0.2803602355452346 0.948457471072742 -0.35169285440043274 0.7182476793479935 0.6390482567113058 0.8130702880168108 0.08798001005232647 0.9115275583236109 0.1984462509823084 -0.6034863536625492 0.5818997386946041 0.7891655859835829 -0.7386681498983911 0.0935039302377656 -0.8553592421866183 0.43956393652322934 -0.8915963647125471 0.6402405356804377 0.3217470301599197 -0.201796977365585 0.5418783021457201 -0.23681408354460443 0.7498076899160004 -0.09197035204543358 0.43369617557891305 -0.31928508442904247 0.8142824619412612 -0.2326369494293996 0.8636494180873253 -0.38715086006957167 -0.8695461497064036 -0.6256528680139488 0.8788911608180352 0.7457581187402533 -0.23680750226729774 -0.20423295337433345 0.7173471432438221 0.4337397937605514 -0.7587114700236606 -0.05761766384377798 0.7756310295030195 -0.9737045890771125 -0.8791271284840199 -0.8245218898680109 0.29526001000173707 0.8016725317699482 -0.1533561667470058 0.7250406596800276 -0.49445594524208136 0.80232980658184 0.349780969924961 -0.9028746288078386 -0.25275113873822574 -0.06659944715777977 -0.12752097770022908 -0.7306546227069384 -0.29571302983558834 -0.6184763548711776 0.015067596207356537 -0.4516153416480011 0.14404475065757594 -0.9183577860133323 -0.30230437907307794 -0.7461152479636477 -0.9249044005246536 0.6969636439948532 0.37755708114915065 -0.3208546419913212 -0.4269067816708163 0.9942894700115639 -0.6886980654517378 0.05523657141465588 -0.940087094802285 -0.5786219662108407 -0.3529770270541366 0.74945542946328 -0.3723222865636755 0.8067394491292301 -0.3773360951227631 0.1576278239344513 0.6003977818805302 -0.10946579974010917 0.054316421202962095 -0.22703693759537158 0.43369381231924153 -0.38149863562685793 -0.927535283173542 -0.9725589210950285 -0.6925882667782797 +155 135 0.3183451476418673 -0.17927652038078046 -0.5714561824781614 -0.7238573097805978 0.020679930929277335 -0.9247696063431325 0.735200984568162 0.8312463407816224 0.21161328248167632 -0.6337653780142598 0.9541586578286747 -0.909247089152599 -0.8860805712886906 0.437960745577735 -0.5523292645928701 -0.23202666682966888 -0.6476823143161619 -0.0976928748955126 -0.20902583702026134 0.1963283165107954 0.32005866544517425 0.592474733356078 0.46885804199374514 0.27022617401803495 0.49152489549270606 -0.6681465633520642 0.5976952884815683 0.4138046694555353 0.8678211863493153 -0.22709966821673055 -0.1690539766057082 0.6737769361481136 -0.1274563111841729 0.35285142644180634 0.14299447565050927 0.816727525043629 -0.990637658022749 -0.8729121059434257 -0.8703914915621473 0.18043736991183734 0.7150733976537405 -0.4002309667893378 -0.35931959154748605 -0.8178659678321916 -0.4159440634741838 -0.7218456755014562 -0.04171492455920833 0.5385216295524329 -0.27895939343123555 0.8135789549787171 0.2623135557442726 0.025227949812498096 -0.9030079320329294 -0.8640347566370499 0.48294587916939813 -0.9381865151644218 0.040484714141628686 -0.024905355122189388 -0.5426950439292506 -0.6864018129677001 0.4729082823143398 -0.8566117523059475 0.5433197566551293 -0.2888460823228358 -0.9001716616579691 0.9774562338826551 -0.7220983165953214 -0.7417890701690155 0.2903053266969744 -0.6628844002468557 0.24540930811995132 0.8999060984657727 -0.18696236741829275 0.6995695479536923 -0.04683776702562259 0.08282214261662713 -0.1497376563830437 0.3459779059300627 0.2850747724587932 -0.3383703839934329 0.6791663886093906 0.4922104559233562 0.32985367628259143 0.6994658095916282 -0.7976608507469394 -0.7421929909688754 0.5708866579199012 -0.6580113330674231 0.29428006473446633 -0.5545650847832861 -0.5270781501641115 -0.24024788428075405 -0.34797596624597427 -0.8371177921663593 -0.3473414786216651 -0.079523646858636 +155 136 -0.035647121378798774 0.8615934421988742 -0.08449861553923843 0.2123335455989137 -0.012213829072288185 0.27446088308486627 -0.2166406687739999 0.6435781610532589 -0.5234581230499717 -0.9919006610545458 0.7629191397368327 0.2761588237173578 -0.8059952864737532 -0.9399653303354671 0.4705219913040095 -0.2945370641144327 -0.5135753366590912 -0.6511537686871569 0.3260535553823871 0.19348463685880413 -0.24363005766004808 -0.023771323867746386 0.346541997260539 0.22216082143701765 0.6688549182867964 0.4547887025862425 0.04185813899220214 -0.12198859483325264 -0.8798888430802103 0.012201514980656247 0.839454390050312 0.8996494143049527 0.7064324067507741 -0.8301816842837486 0.051873829924501846 0.2940540086047403 -0.4682454459011982 -0.44988161303376595 -0.252337957846698 -0.5996945819123218 0.2342631284593959 -0.11776350076038855 0.5293634963069693 0.5421921845947764 -0.028278475750915355 -0.671822998811338 -0.14259900442581053 0.9591012741486862 0.1329759421047625 -0.9683916664655428 0.7697245532851713 0.9316423952749024 0.049164427768335406 -0.7792620941192492 -0.9990984588898564 0.05119187666877845 0.748082905641489 0.8892835258945215 -0.7936393629483707 -0.6345645404187032 -0.5720216860246916 -0.6505726291878957 -0.6209928278729566 0.009436047405230186 0.248686030263352 0.3227135308017184 -0.7799875403706049 0.8874991685679086 -0.23833392275506848 0.6043470686604329 0.212299369491733 -0.8301441147569186 0.5127843676861581 -0.10343764612854822 -0.018784135382037492 -0.27152634333583103 -0.9685407683387892 0.9709872068696956 0.8404344016006444 0.015740670920840305 0.21416352949952033 -0.9135023013468746 0.2124363090744137 -0.8591081537056604 -0.43667269391818064 0.24480816061023258 -0.7496681140441646 -0.8085082550188973 -0.09790140786008084 -0.6089903914063786 -0.183786481374955 -0.3519676598573709 -0.5505714935016142 -0.7382727890499314 -0.19578187676075198 0.9575900060171776 +155 154 0.5769683755522741 -0.11287925602166093 -0.9639510887566647 0.8174042728670716 0.2597143908474997 0.35615814849210126 -0.29889441560705543 -0.1877660994061674 0.7667042143191776 -0.6830612160252436 -0.48492058276394245 -0.6227656590591959 0.6977437914061058 0.3688650985185382 -0.5306044700525463 0.3689674130312792 0.5750300603002374 -0.2895507038152676 0.05953595018256741 -0.09919620567574827 0.8903718922405055 -0.6530769075188061 0.5328671896741379 0.42434652980902343 0.4627803305098035 0.7655441547035531 0.12863613840698473 0.016573855684993255 -0.6116415147977081 -0.04477707521409946 -0.5893428922339428 0.8398777751295881 0.54515744522735 -0.6474722717349422 0.41644234791196433 -0.9773813577443276 -0.46145838569133013 0.972106360082037 0.0957093240305591 0.5624815628236879 -0.9996196346787571 -0.6240438323495601 -0.42528954642329775 -0.9249792847950404 0.02269551272120318 0.2541955131656508 0.8588245554363829 0.4090496440156559 0.8562780980924243 -0.2412135671115334 0.308895856907619 -0.7492371735382575 0.34897868349987426 0.5304404401637426 -0.9166101966398199 -0.8866487132560787 -0.0022023297755582316 -0.824334419894658 0.8330910222766184 -0.3461376780677763 0.368283758802046 0.6053141447326895 -0.35763802809089773 0.24541357697754185 -0.564285759719193 0.12883642424895903 0.32429596456840937 0.04506484402394162 -0.5928389826585665 0.47766791693364685 -0.7635871615404561 -0.4814154335079759 -0.5456182808968022 -0.14696366420239126 0.981782793764421 0.4412625717180738 0.0350546883857068 0.9274436436918685 -0.5899829136833958 0.41360571661597345 -0.5635058208642538 -0.9101820934145168 0.5918406707224719 0.841578875962665 0.16477611816979665 0.4536194205636286 0.6159198431118911 0.48720896282464654 -0.71273770511323 0.8009516681022775 -0.26501430818607363 -0.41495869443308986 -0.9137896613557461 0.21217514799749226 0.9041560249645602 0.6063511814682281 +155 155 3.7635144449946627 4.082429578702255 5.2184003436121955 3.6507164319556518 2.9741348288799276 4.94956992909088 4.872777267838977 5.022030617200459 3.695268438631725 5.529412626110742 5.619976631779907 5.4597826502707925 4.476102534939791 3.3707414552401422 4.945427367738721 4.107151985006555 5.450954160451513 3.792471347858564 4.608038120885933 3.792899370399266 4.384719175983166 5.056813140471126 3.8743227694419957 4.70924506684928 5.301318554310075 4.816194544626329 3.463886758969825 3.1355916874769907 4.827437354455656 3.4032236815703394 3.867350378558614 6.2375414456024965 4.504377303685825 5.358308811450723 4.124480773484989 5.097090300380416 4.037101861338105 5.747626566718659 4.268089441670945 4.2393363059773135 5.60019813444061 3.7841958870343175 4.959184278319794 5.70104005006885 3.644344020601431 4.501627491516887 2.706465785005375 5.676676453248956 5.543607116369109 6.229129719323554 5.210029247263969 4.466710404011076 4.99941064487243 4.761582848551353 6.204091637005511 5.285048484604079 3.210703056999419 5.080670732198369 5.33963051914219 3.4620212906721 5.206725034100096 4.8735888361346325 4.808178537713839 3.6549537440388935 4.978836968512292 5.1278313523401025 5.551794820271711 4.513637498156426 4.560489661074002 4.118699866513884 3.57202418913896 5.4020015800474654 5.358906042009053 4.459578451127527 4.389376552287363 3.8089251820043124 4.790861848498985 6.14957704975956 3.7991616179627465 3.9742335167479537 4.452470082474148 4.439758912863663 3.89991372760173 4.729765613737461 4.470834528080177 3.9957963572543136 3.7821514372240816 3.585709636177419 3.896641971431413 3.54740406466911 3.574821639379887 4.203859574003657 4.681058197697154 4.599856628958182 3.796089806404122 3.904887381720606 +155 156 -0.2750462884511171 -0.018436283561809486 -0.4654140913697018 -0.7167805946607553 -0.8062174712110202 0.5949696061736554 -0.25003649692213537 0.7735653825078477 0.16758324189586427 -0.7603654510235318 0.2872512095657367 -0.8439686627376579 0.06792201907261775 -0.4929366943410729 -0.4234399919315919 0.12352616595743382 -0.8672308597497407 -0.6970819924543923 0.7230781677448337 -0.29036170846793197 -0.8139143151726158 0.08331455690356893 -0.6604071222561239 -0.37355303117972727 -0.5291503987248274 0.8084662844546897 0.7894780885856651 0.7238024923184536 -0.9849340625872502 0.8023929581315108 0.8410707846254561 -0.5298629297579467 -0.3643895049304897 -0.481855997679673 0.49935320122669147 0.014661439264386678 -0.1228245382958888 0.7935188684401027 0.06858984625089937 0.08918034810241782 0.3891289325734777 0.9280219106509309 -0.9051321825654033 0.19629214474059298 -0.5598699630812733 0.8125156938831783 -0.17981908845231254 -0.872749588959205 -0.8213031769417798 -0.14893918442505316 0.976932487356418 -0.7062042914074287 -0.7272591713306009 0.8309621972034051 -0.9984709127956712 -0.7010912000705114 0.08908829554834563 0.7987031327815943 -0.2812791674330717 -0.5627807360387123 -0.9327455288584463 -0.7378266371970945 -0.45799447858877573 0.8437320710039713 0.9545958041585219 -0.6419370093462873 -0.753219253685343 -0.9875660260694634 0.9989669274499822 -0.7485128436754351 0.31975798153133805 -0.427350733880973 0.5479046120731339 -0.8888896171605081 -0.4428290882630521 -0.9921607266270678 0.3277321884406701 0.7065214231968784 -0.9494445094167716 -0.31805355974580984 0.29099786641953407 -0.7561978708367105 0.870625486316456 -0.4164771360525916 0.6393404633311879 -0.6420540464911757 0.525463407097351 -0.4098480070967916 0.6337114555527952 -0.3757389139927716 -0.11649246801619162 -0.8230201197347011 0.4147440880883888 0.31387963733784163 -0.12554046757627058 0.5826672116126748 +155 174 -0.9287902975790658 -0.4167859978912085 0.8542170833464653 0.2801332860734631 0.30864684144224674 -0.9187261670699896 -0.8037781505753556 -0.23418775388346513 0.5510469569798422 -0.0263456780828899 0.08288924248478424 0.5953247915522177 0.18857238607570737 -0.3610507979364921 0.9799199326719163 -0.640935814427106 0.10154917487435156 0.0791612392600467 -0.560024351900329 0.37162667140251804 -0.41871883076694316 -0.46698932910030777 -0.12301749094343406 0.8590529413111025 -0.348839886568985 -0.4338965046210921 -0.2984416831182686 0.7243668315942167 -0.01905186984071694 -0.07079277714658616 0.27957889487957943 0.9133417006042133 0.35708976133905046 -0.1077883167615854 -0.9388953352693814 0.9486541514517497 -0.5836407589324861 -0.41438069540295586 -0.5810409054220218 0.3760924061661093 -0.431366590436715 -0.8710850047773795 -0.8651596399282224 -0.41193396936546245 0.29444544894383173 0.23143410909781714 -0.04436778432018951 -0.39062557465216274 -0.03167751025329113 0.4992776337766007 -0.8367035174838933 0.271666880037746 -0.5021489736315272 -0.46246248593096406 0.4077050906140436 0.20478708313967897 -0.3483691340202597 0.5418571657521671 -0.6725605546859783 0.08151481399337701 0.39360682564287375 0.5017479714019781 -0.448660538750121 -0.6875901308003534 0.9327968440178152 0.30674386224154837 -0.7547726595564175 0.25593301047151096 0.5613336848718418 -0.11257149256909615 0.1813835029320412 -0.47956093031120317 0.7621945351885129 -0.5018576862001412 0.22304527239961924 0.6111448422940136 0.1677223497648006 -0.7284152378946303 -0.7349308481445092 0.7283197734224129 -0.09417022841774214 -0.4455263880623912 -0.0615680589513643 0.24316281559192565 0.740115808639122 -0.3917698203588853 0.40302319934201525 0.10727721410148794 -0.40797934064978336 0.11799228109119042 0.9902239314927628 -0.02946437241010247 -0.18996552367167507 0.4375946020766275 0.24603027246248477 -0.041098864782425526 +155 175 -0.5987766123223235 0.9315876261860971 -0.4248119932666563 -0.13417128441088066 0.8267767627474791 -0.22528742517516398 -0.83626513257577 -0.6924311437516311 0.2800906545609667 -0.7767632738085999 0.507185419550984 0.9546966693462151 0.6161333312185251 0.3551858803794059 0.48308006245704593 0.8191206675623466 -0.921975761346087 -0.2747091362278491 0.3717724368515549 -0.9160806554474268 0.7811675255677388 0.8855149255943451 0.30181947583044577 -0.2411232621788486 0.7421396544215086 -0.8859228919420585 0.26786030474926426 -0.07914309429827737 -0.3913644173113291 0.3143969438841918 -0.004658261573867728 0.8744535605676045 -0.8983413085524132 -0.6840421641972843 0.3984682062797802 -0.0077631557141326635 0.538416237981201 0.014886598329079126 -0.1702655372041071 0.6414016455627898 -0.8123894237897575 0.2288145898654168 0.767848820846248 -0.4331199366359324 0.39496032494667865 -0.7271231265511622 0.02568598519182963 -0.86872695168363 -0.8418303505225526 0.9228988870701036 0.11515235795409473 0.31135881026051737 0.7697525658671596 -0.8340877965087554 -0.7501024342535858 0.7103299349351568 0.3356835082372902 0.9893001387977707 -0.7448336215469218 -0.25647421831130734 -0.629213356177488 0.38404593578281254 0.7299756335365253 -0.27718322412576124 0.4060359397207227 0.9863426967486164 0.44907358423079846 0.6970451987810429 -0.8108814410105167 -0.5613387913924457 0.047626656672843826 0.02354669640649454 0.8052909562260357 0.7942614762841036 0.7357292576439163 -0.0975149268549158 -0.623075795319864 0.6757068585415738 -0.10595192956873745 0.6103321467085672 0.42313258645635 -0.003788629663801446 -0.1357991906737006 0.5135378511647741 -0.02266492857237301 -0.31208219803065185 -0.17088624603106295 -0.006814295901916845 -0.3833145530046935 -0.8252827812915311 0.3286028349687313 -0.37146192653874444 0.5060507758621715 -0.18422744493258136 0.2847596894256428 0.34057401187888403 +155 176 -0.276564852501195 -0.3444327508735343 -0.9203656372083497 -0.5051006992650047 -0.46149534395211766 0.6937820708762164 0.987140306287609 -0.8244433888464475 -0.040672366892981815 -0.7466702743758227 -0.8780043399462765 -0.5141993700149496 0.23747081719917817 0.1726300027643013 0.2649304991578252 0.7924103903698574 -0.5795695278581074 -0.27377298381518944 0.786248572293734 -0.48992108351317687 0.5695418854613645 0.6688279529839769 0.671280858088984 -0.9318395269859236 -0.992073179012116 -0.3895597382406246 0.92829165488277 -0.2730167162131427 0.7508709113218304 0.4334927054900437 -0.30278516103947517 0.5234304562427534 0.3250678358886838 -0.4572810874324842 -0.4783188314067468 -0.4035735552335622 -0.14482729139407402 0.9573491710368005 -0.8406964064978846 0.895221083568372 -0.2760475797937374 -0.34308941730129305 0.3446181393655947 -0.6594321744755556 -0.8443134455323626 0.07853663327290739 -0.8498339849745626 0.24351071325086093 0.9895744372936026 -0.8544764769527391 0.5320174245041456 -0.7405317795436961 -0.5231887950452303 0.05242230753896027 -0.05992785436831394 -0.3048232707756775 -0.10260682142745559 -0.5745113106493585 -0.38091194117783944 -0.5032092260179559 0.775571862087193 -0.7314952893468638 0.01517970953060388 -0.8621454414705028 0.13856530674034184 0.785200347699011 0.7760591222206945 0.08658982704517504 -0.018694008342050594 -0.186938369450377 -0.8603532361446851 -0.6665770777160536 0.44453683155441537 0.15722196584578452 -0.9572606098723724 0.6793007895925116 -0.7672378232743504 0.6768349241923717 0.12345563392323111 -0.17039144006468687 0.8076108216139628 -0.1684882407402586 0.48193814257402634 0.7016849087841792 -0.08337474143301216 0.7468937213923343 0.266644999305631 0.2624157564414318 0.5437280557715543 0.12930766279799322 0.7599392679527153 0.702191720787976 0.7227986142537755 0.36731515072565757 0.6040314774747002 0.49543898822753074 +156 135 -0.8214709039643373 -0.5770997944428269 0.8580206800073129 -0.7102632750948223 -0.09607270206051677 -0.03575701458046665 0.705766607806954 -0.2455205789985362 -0.5011637255438495 0.02636586620332948 0.7465396107592335 0.20272692667323433 -0.846472537216789 0.7782685354827696 0.3018850114505578 -0.8449273559126378 0.23888898540020764 -0.598764591842629 -0.7633219809098226 -0.7844521061243177 -0.8732057487826708 0.5988817173167038 -0.9582768798433048 0.585372148943057 0.9952455961727784 0.883378518228159 -0.9219238429287329 0.2392617881732373 0.3390789178640572 0.23674630248587425 -0.5813766010457675 -0.3291901779717157 0.5442472946889114 0.39048710876311965 -0.9791326602434935 -0.7638256346434511 -0.152103188212398 -0.22021424652892874 -0.6951175808276373 0.05747798611708399 0.13070754206372848 0.107748282533221 0.0062236023425095155 0.4383844269031354 0.7797241240272068 0.3738922637349993 0.4531586208560572 0.3019802410923702 -0.18729042416356845 -0.4983308087296181 -0.2573675023124564 0.6069099756624639 0.8279929806589479 0.07416300895016015 0.5715696337357992 -0.3041550647298261 -0.7392429831735514 0.8144295233322205 -0.8885463791805339 0.9363901621117496 0.617433606912484 0.888841673875046 0.5325714146318563 -0.7543768738330106 -0.3471899819433568 -0.05258158381318245 0.28586151296051265 -0.8347742028343323 -0.8530134031354883 -0.9577059460275477 0.5341408907750236 -0.06641256685468755 0.761506083117347 -0.27405395295070156 -0.18326656196505509 0.9048422064719139 0.06967597280403082 -0.787111415754187 0.6078639143892679 0.557792499873369 -0.08321156668393415 0.924701632490124 -0.07991901579361094 0.7922769582936753 -0.19301535931476033 0.2155072123091617 -0.3054142575532126 -0.4235816606470493 -0.2555270384484536 0.6282422188800452 0.9068798077165807 0.15017995858722055 0.7491505857478353 -0.39427596077046223 -0.7701900933221013 -0.08444010001695768 +156 136 -0.2475869616123274 0.8629523436101703 0.8541340867112923 0.2827438025169966 0.18522326145518875 0.9234751976880244 0.4144343174353371 -0.38345195652904307 0.7187387259562568 -0.7408927796908009 0.5648891338295741 0.008104312975631967 -0.5439531135106062 -0.9972044544441951 -0.996777229395148 -0.40141128562957684 -0.07375652125685472 -0.891108683868683 0.7967003971641597 -0.8064942570244693 -0.5574032161584221 0.6479894203532552 -0.3500982275201987 -0.3370545615595397 0.15897241944051843 -0.9864969821978158 0.7112160199477331 -0.4227027358639168 0.12886328053258733 -0.5366073918031324 -0.45833327925057055 0.25769047595377903 -0.8785460200720947 -0.6168808102746492 0.9797476989128535 -0.09058586237317234 0.9423153065979188 -0.2179368853096333 0.01779564836384062 -0.4933330446053903 0.11652528080640434 0.16691984016010886 -0.6422106320555117 -0.632660421509889 -0.5355155234737417 -0.13810135566148563 0.8667582865062358 -0.4489680961013338 0.18044356653176918 0.6518981192481321 -0.18091951806246365 -0.2061254410929536 -0.3493702569713264 0.5750194494348029 0.39075249493894715 -0.9752562376676595 0.8175212066486373 -0.15021056302380908 0.5425527885453472 -0.4268552816919031 -0.2710238570932939 0.44020148211800114 0.8718052447363325 -0.7535049192015755 -0.633727421357924 0.34060884439758343 0.20536080218031905 -0.976625310664893 -0.5983659497496123 -0.37664540241523636 -0.15590135080574674 -0.16452904883629182 0.939788899417173 0.07585068401391881 -0.37825153666559097 0.3892139457881998 -0.32765280461317015 0.5527870534927437 0.6030821862928457 -0.8205424617391719 -0.43245006294639876 -0.6231378767345106 0.8243657567022302 0.07727585634007617 0.7260582637112365 -0.06809871866500705 0.9052774542331186 0.8045879002351968 0.2560247127648574 0.49613436173975933 0.6350354268715213 0.7674291881880515 -0.7122920708121421 -0.6988188972346092 0.837176042846904 -0.42943990864925863 +156 137 -0.618339166512966 0.5941074480804902 0.3561900701370482 -0.59782464365768 0.11849967058145072 -0.21955299570357778 0.5109823979288923 0.49914427123893 -0.8693983560207124 0.7073052326988354 0.736245183705333 -0.7981018077373847 -0.8978030394112444 -0.7180330825800172 0.845289543328811 -0.34427929162715554 -0.7365138735375911 0.37644668493411637 0.8763735317803274 -0.4843094636236551 -0.2295672088024614 -0.9297859046111212 -0.4906483797215355 0.64006535553221 0.23980280352833683 -0.8401458242531068 -0.2328007306360813 0.11450349747538557 0.8569208239892148 -0.8778291301591885 0.47879398404467977 0.007111167321976808 -0.24712162731466436 -0.8623364770235482 0.5853030384568378 -0.6628418978770902 0.6790397472366381 -0.5158707169151069 -0.5376668369588902 -0.16715119565358671 -0.047173459511685056 -0.497141996656024 -0.5888710419409318 -0.42255865181486874 -0.8069248465555776 0.24792608722327225 0.41744175169672126 -0.5960160783421009 0.9105576932935542 -0.08875944896886634 0.2349779814607047 -0.4189762404302495 -0.7964023613313622 -0.6680759581267635 -0.031128403522366677 -0.713952234812572 -0.909778532639234 -0.002433287604933776 0.7192105349135882 -0.18216076148941474 -0.19519313524022452 -0.7229390574055468 -0.42450107581384455 0.039088480652783586 0.8516477806328169 -0.3664117836298655 0.3250482156716388 -0.09874349904928192 -0.2343176021639568 -0.773349471629535 0.011636791774172206 0.36293493934776433 -0.184131390639521 0.4583726524425742 0.18533949730627164 -0.9983121196392655 0.35542002379734683 0.8246452419398027 -0.6606113190468639 0.24759139369070415 0.5087864670067637 -0.32135533166014896 -0.9050022235464259 0.24840680893080558 -0.2411894568307389 0.4202743526351409 0.341872092083241 -0.3296623077594951 -0.8487671894569204 -0.0006413688069200063 -0.6028560329745651 0.354592549144658 0.3489501876632013 -0.08798781808822853 0.9443611225936677 -0.2754113537588181 +156 155 -0.2750462884511171 -0.018436283561809486 -0.4654140913697018 -0.7167805946607553 -0.8062174712110202 0.5949696061736554 -0.25003649692213537 0.7735653825078477 0.16758324189586427 -0.7603654510235318 0.2872512095657367 -0.8439686627376579 0.06792201907261775 -0.4929366943410729 -0.4234399919315919 0.12352616595743382 -0.8672308597497407 -0.6970819924543923 0.7230781677448337 -0.29036170846793197 -0.8139143151726158 0.08331455690356893 -0.6604071222561239 -0.37355303117972727 -0.5291503987248274 0.8084662844546897 0.7894780885856651 0.7238024923184536 -0.9849340625872502 0.8023929581315108 0.8410707846254561 -0.5298629297579467 -0.3643895049304897 -0.481855997679673 0.49935320122669147 0.014661439264386678 -0.1228245382958888 0.7935188684401027 0.06858984625089937 0.08918034810241782 0.3891289325734777 0.9280219106509309 -0.9051321825654033 0.19629214474059298 -0.5598699630812733 0.8125156938831783 -0.17981908845231254 -0.872749588959205 -0.8213031769417798 -0.14893918442505316 0.976932487356418 -0.7062042914074287 -0.7272591713306009 0.8309621972034051 -0.9984709127956712 -0.7010912000705114 0.08908829554834563 0.7987031327815943 -0.2812791674330717 -0.5627807360387123 -0.9327455288584463 -0.7378266371970945 -0.45799447858877573 0.8437320710039713 0.9545958041585219 -0.6419370093462873 -0.753219253685343 -0.9875660260694634 0.9989669274499822 -0.7485128436754351 0.31975798153133805 -0.427350733880973 0.5479046120731339 -0.8888896171605081 -0.4428290882630521 -0.9921607266270678 0.3277321884406701 0.7065214231968784 -0.9494445094167716 -0.31805355974580984 0.29099786641953407 -0.7561978708367105 0.870625486316456 -0.4164771360525916 0.6393404633311879 -0.6420540464911757 0.525463407097351 -0.4098480070967916 0.6337114555527952 -0.3757389139927716 -0.11649246801619162 -0.8230201197347011 0.4147440880883888 0.31387963733784163 -0.12554046757627058 0.5826672116126748 +156 156 3.4813599723213713 4.117646623907017 3.8158082412972893 5.415712861385256 2.7513310562632953 3.1774465965976293 3.8954080051724596 4.872865735428098 4.435975326909396 4.947046141653483 4.288186808783435 5.043701602268869 5.278343512707584 5.021293079437226 5.6803558735482245 3.7813451379629512 4.039792207243307 4.847372005254977 6.354537944629194 5.479233701938138 4.45970381253177 4.343540813216826 4.90411083120572 5.006594999335507 5.078870008863828 7.01112195741266 4.232323540788313 4.153217148133838 4.101889589845378 3.917471798190754 5.506194841068293 3.688245819887089 4.956402089072316 5.360757046145144 6.104411743608157 3.902344525309542 3.6708266427328993 4.379012578403486 4.263142424603213 3.4034925805362537 2.5589209874096763 4.842426984474965 4.178612571800632 5.528354723513231 5.963298683188259 4.1321061597876785 3.5541995550207384 4.613950349047226 3.9751597001563925 4.974176285310025 4.593457347156888 4.117602224827706 4.597262405293941 5.384885441269515 3.898295974057087 5.238367386167987 4.445762718080428 3.8955463013179683 5.4113345409203 5.123833008469884 4.154208065291767 5.298538133758608 4.795492926286605 4.464426384826057 5.726679534213654 4.549507783212773 3.9467581902105735 5.397938997749652 5.148183495169679 4.622653253967121 3.880426868696573 3.344644984887641 5.22763382664555 3.818955427203483 3.6832416870613685 5.492454778196415 4.252087703234029 5.524223736980682 5.24652687480409 4.546224225214095 3.3515766352058964 5.509511391758547 4.923677077903159 4.748668835982966 5.226756556222405 3.5425880183903757 3.5945664351828412 4.719185409137411 3.743520164855367 3.29634170189589 3.9625887638834136 4.735257880322156 4.9904951835291484 3.154902174841257 3.796034079353519 3.44328065821201 +156 157 0.07703309727643881 -0.7177201036059706 -0.5193964211400128 -0.7018414369106316 0.11245993414208444 -0.5567953898708917 0.7252627641577924 -0.7106778984704529 -0.9908186770949194 -0.17944726191546967 0.5088445773236767 0.8248915537386929 -0.681989413513743 -0.8900090266647473 -0.7869429888643569 -0.11466083993215714 -0.4342531571064505 -0.7875685506207777 0.3446574354120975 0.4953688472142208 -0.9084349698212331 -0.41745036467722496 0.10191281330685276 -0.3782612634272968 0.7730209247158819 0.7069622901123338 0.5911082057042147 0.2655331002665753 0.5255522853434518 0.09952384211856535 -0.8665990953877669 0.620219065986815 -0.4790519497181269 0.6937714203012704 -0.5104122937190116 0.11638403371532524 0.0578507302118465 -0.9811607472299908 0.9592422685990709 0.7715291885723963 -0.3390778625859474 -0.3847442537009669 0.25799930645755786 0.7615510652555437 0.6790574665268809 0.7157875231523845 0.16502198053677364 -0.4910618796335815 0.3295862436903432 -0.756683957769416 -0.8371423872939401 -0.028525649751697912 -0.19020276651361256 -0.6209388085413878 0.04525894254487728 0.06825595092458503 -0.049145390458785965 -0.31272438745278297 0.8650132557635797 -0.9290210655609048 0.2079628190123326 0.9990720367333608 -0.8182821690106967 -0.37253980578276735 0.5722044693303474 0.9317210801988904 -0.8637682708455872 -0.9526532986236134 -0.1521422210307386 -0.6646699897477892 -0.6720050740989574 -0.24890887693598707 0.8852698350671133 -0.20400156446575934 0.12154875012873823 -0.5101492809742418 -0.155543426473006 0.5860779035670207 0.41028699330526286 0.2785053519041747 -0.007905788590126805 -0.3814032917019907 -0.37098785828402203 0.8875780254165606 0.13227816195255082 0.08075154416249597 0.4492383034378675 -0.40802352160710487 -0.5492036666360884 -0.3016940051348882 0.10550936107913977 0.43309328058774876 0.11162450590475159 -0.571941618941997 0.031507839047397734 0.49487008071640126 +156 175 0.2567332919859713 -0.07671656149892159 -0.0038656520260778038 0.7972257721102776 -0.5360523392315466 0.14367341764156483 0.40893319017200835 -0.1135410231872489 -0.13750317887629238 -0.5323512764048002 0.6576391578778094 -0.7807057947954201 0.8461971629830338 0.43336771086601455 -0.0038944650604519904 0.6599719909573742 -0.5495742069712568 0.2925659632886459 0.9840102149588543 0.44268261273671494 -0.2395847858911897 0.032606887529390116 -0.3538460431161339 -0.7400406414234464 -0.6191711611988591 -0.9611062149987035 -0.3163467312973278 0.4129195359765345 -0.4658898459893095 0.41715689352106167 0.9145468336944798 0.06929415914572767 -0.06047494279071186 0.029637482482616884 0.5745674997631502 0.17255915107698216 -0.21820157252607397 0.8195005613246813 0.9998234581693128 0.6311502137154972 -0.2164680979023783 -0.8403535945464693 0.24973223643922227 0.8842893677671269 -0.8679818333700586 0.3711651638862139 0.12143827512596772 -0.7358703803457012 -0.39795712942924766 0.819336105376105 -0.8208725598535334 0.05969555351006006 -0.9325409559076834 0.9968729097442834 -0.28617084070734244 0.7279141469661778 -0.6584619171816113 -0.31137881543153734 -0.927362858324589 0.7374705482995625 -0.4848545390030661 -0.697162280783624 -0.09332678791518556 0.44022853760126557 -0.6565328638173897 0.3081656136576665 0.22221278939440148 0.48749179110219565 0.805383048057192 -0.06588304517979116 0.17847723654706815 -0.8828151492349292 -0.4792478404064182 -0.3678581207968432 0.7170056948888068 0.04439961115087354 -0.9604000574490918 0.2778015045155091 0.691578179081896 -0.8458914352033733 0.3312072466229592 -0.8199531178196025 -0.3331687060987394 0.27345710131288903 -0.9603092552600685 -0.8627245458075423 0.19279824149032887 -0.49340392569063285 -0.4206003172457624 -0.4316340397941343 -0.12754676465916726 0.13275027358880953 -0.9590916468840351 0.2911322046817708 0.04758304160670357 0.06919482074096317 +156 176 0.0036063195073587906 -0.3280553488675728 -0.2021258113863018 -0.4350443055203863 -0.4237709310408322 -0.5193923202638342 -0.2799449802977163 -0.6778965655583498 -0.5367520890897559 -0.45336374531316403 0.19250439896476967 0.9794118422145088 -0.3998648575022057 0.2653470436912868 -0.7002516736649897 -0.36413156590534035 -0.19232550480342314 0.4862867684818748 -0.04671157720025021 0.9913853750700032 0.1008493112446418 0.8702226974758669 0.9545694338146609 0.7827423831658376 0.7483145388442698 -0.8918682986621607 -0.20371075085944645 0.3047858404902022 0.1496002482483798 0.16451396509598126 0.9193653464002929 -0.9141887304657583 -0.8706413575197272 -0.9035726018437722 -0.4563917114505627 0.5897367207634541 0.8257934450712991 0.2272371630104557 0.37914340755958076 -0.12131160152519427 -0.46531769077942187 0.9817656063730225 -0.680195863116601 0.607607112632448 -0.3935033127238605 -0.35908467589697457 0.1393554323973003 -0.04410007534676064 -0.6915374793177365 0.8375178578131879 -0.16950008519419302 -0.7590434578965894 -0.04054338826016979 0.6350354308494406 -0.7840170276203595 0.5517370029297466 -0.12016976138749857 -0.4819580146965212 0.23716226070107704 -0.5001693877219906 0.7418191152184839 -0.3815163504723542 -0.4774660301347038 -0.20474246969191068 -0.28729652965833297 0.47069734069535896 -0.1999316706021621 0.16043322670897964 -0.61140573422208 0.2096400336664268 0.7731465897941663 -0.30715503198456195 0.05987426815755059 -0.5757432881753954 -0.9554715965251337 -0.9782070793529052 0.9907199093515864 0.28685283373558956 -0.17933591459842813 0.5120907239232291 -0.6841175710385046 -0.6142314122518586 0.08822446653437521 0.26311237202169013 0.8161591141215163 0.3446436054237423 -0.04613621942839763 0.8876998239906495 -0.08641269745496682 -0.45263281677093103 -0.5252035621369995 -0.30020197370592316 -0.487466400103165 0.09395391046309065 -0.40529950045229146 -0.7512711284908993 +156 177 -0.3375144475823759 0.15856829215396595 -0.211636945790034 0.9031129091798418 0.37367752718166747 0.14289639703218926 -0.5894309665560853 0.8206945668397045 -0.4987742836484952 -0.6373509506175183 0.18482724831031394 0.4026947493521218 -0.8282932934395357 -0.3946402127057975 0.8107861340830662 -0.9053873287041554 -0.3311552530344848 0.23252997177907098 0.9682811798722115 0.2722159709512806 0.3642731267499011 0.14756083310593993 0.9908351154142077 0.5276769346683896 -0.18512645796549987 -0.7572770413613699 -0.40885740267321125 -0.9588342904728522 0.58555542850138 -0.2930024954627872 0.35932837376738447 0.1773934747749608 -0.9535749107074842 -0.39682567258970836 -0.5372295649845296 -0.4975270561110079 -0.0803924433957115 -0.3982307207842737 -0.5563182231653603 -0.6154295465120052 -0.8190616256629306 0.10549420493104056 0.33087548737849226 -0.9502215520428832 0.5996868097037666 0.7400461808070811 -0.5393030078095811 0.516977730658136 0.4363559351236832 0.9906110645495472 -0.8590879438716259 -0.8636195500006887 -0.5864358868467416 -0.8186814844346124 -0.6228593189204061 0.69946507687108 0.7544915775462167 0.7067022042336049 0.14228282417434013 -0.793037538211607 -0.20575037693416665 0.2943651814121768 0.125526275701193 -0.43660739193949816 0.46846612929099174 -0.837680996549347 -0.4838454394927767 0.7556397907096961 -0.08280684603968602 0.748567488593844 0.59249902883399 -0.13603500633158916 -0.47585103640624626 0.5967320679834189 0.24322234429421208 -0.06664890491720943 -0.09395255296991811 -0.8227228927449413 0.7837699304155725 0.4792098939499563 0.7166705373886857 0.15879663646115416 -0.7076771102420241 -0.8176221332884122 0.7553288874580439 0.45195823510975397 0.664564581124057 -0.5000924976627887 -0.21546234973700562 0.04531965224672052 -0.7355239402202496 0.8660830217205577 0.21565196164919187 0.5999371146705597 -0.37604565207167506 -0.4207504780345077 +157 136 -0.5702158530476644 -0.4953457569180886 0.7239290285589028 0.1366545854577752 -0.9096696205376631 -0.5614666504385535 0.47819751190960025 0.676425495313641 0.861558840514765 0.22596741888644178 0.41404220069964426 0.20523576940185162 -0.15457114524205262 0.5611391056100774 0.1485397031977962 0.8641549497590724 -0.4985851613698833 0.8974163479629087 0.5971878232138905 0.43136651218465283 0.43570572677498376 0.14463397052379134 -0.7732993663825254 -0.4026215925143899 0.024615488391720453 0.7719892717300831 0.6094293384571292 0.5722101803359063 0.4271857751457493 0.26846120643270965 -0.9574636819371718 0.2939465875671432 -0.2916443072070982 -0.935167118018889 0.9978268802909442 0.9221864796211787 0.8765717724038167 -0.5848481186541468 -0.926462247561473 0.23289246666175623 0.37773341662372806 0.3366017558086085 -0.3139328886409909 0.6338717606771436 0.22913795818360372 -0.07931159328461934 -0.10145722566066206 0.735497310668966 0.7485809811814899 -0.9818378565908279 0.09780411515500642 0.8970713735203328 -0.48870585126398725 -0.968671293592446 -0.9036076499890289 -0.41433769933830544 -0.1303670907532628 0.6379356578710618 0.5877931973784196 0.021417479640967407 0.6950510763512774 0.04323866231535134 0.28814767642020644 -0.05558208772238049 -0.28033006244106895 -0.7345729275341957 -0.1420043933366235 -0.020676175935067986 0.742830488530343 -0.7904549866087343 -0.33508005222764714 -0.20978998046405373 0.26002416849778265 0.875190875855846 -0.18862554764059292 -0.8463642092007095 -0.37717696095595765 0.8397004519968749 0.6654773398269977 0.4494938048657655 0.2612026067642601 -0.07162028909132578 -0.2797741893464789 0.30748168978445256 -0.12390776979609486 0.646697489061105 0.9734790943917189 -0.6440450630930648 -0.08718778755040568 -0.0022532194747575396 0.1660494391501517 -0.25632595431717164 0.8607196244252784 0.8872971462753829 -0.0969821811703313 -0.3448673497689252 +157 137 -0.425410653957927 0.0925400281850679 0.379996590132873 -0.9968405820990505 -0.6701229045922299 -0.047818304176796556 -0.43184577742635577 0.1492975784961461 0.032677579139759994 -0.46893308271507617 -0.31301968694179405 -0.8091592574440651 -0.018983539447733344 0.7900555734769685 0.3072855010150586 0.8525922114525921 -0.8077520162950671 -0.757688329495172 0.6680350143440639 -0.519216985201423 0.9174872527921016 0.7839978456247356 -0.18632363803146612 0.005665213867237728 0.8549823369203864 0.061962993687164625 0.19422175810228826 0.0943778220561382 -0.4537335415947814 -0.7249889249324872 0.1660834039979111 -0.5094596296964136 -0.6983294631999779 0.6172642181358927 0.39052163268816464 0.20428262424972599 -0.38145077229777424 -0.9583277312144136 0.45831063348982215 0.9645014255532112 0.0007134816556675361 0.6168091544025462 0.03790087077065407 -0.16027682136554122 -0.7670611076107756 0.8724030964857183 -0.6150016847604662 0.9625577770359859 0.6021446629664733 -0.8473297925584 0.8276049559711816 -0.007878629172489049 0.23658495025960802 -0.20044744434631512 -0.46581666309414804 0.772551517554402 -0.8880807497537135 0.257467950244767 -0.20615255669567323 -0.08027264671092582 -0.7837347763938176 0.8176250345055445 0.8781562311430031 0.12473104054484874 0.29659647924927945 -0.7049514515666018 -0.5168877565388827 -0.296247464551451 0.1658802560611552 0.9896543479244047 -0.12694539323245646 0.01056968584465623 0.33541091066681084 -0.15102794586955937 0.7384657410553648 0.7727313213589053 -0.5521308069887125 -0.4622597592385105 0.1251190615410418 -0.7865215555062846 -0.6039497856542231 -0.1063136555250539 0.3912023784676495 0.7367901966394532 0.7748298920260948 0.04059645602808559 0.8005612709879384 -0.15101912049581645 0.3870829826647004 -0.14139438304007834 -0.48988858572767424 -0.1489371793159251 -0.8216511978175718 0.8169248902173862 -0.8744737115747954 -0.5205789011716824 +157 138 -0.7775437520434316 0.7380207593550827 -0.5892018614902654 -0.5938910919102867 0.01334431206681419 0.5160910597576283 0.3835189524787037 0.6723172754875928 0.28350311181444554 -0.11324834236928116 -0.9295839598482727 0.6532085698952326 -0.7700786223826908 0.48513606820327637 -0.1436973806265882 -0.5670816937235452 -0.7769291482699969 0.4509588178106003 0.9271817356294063 -0.9331760936426212 -0.4799186721538842 0.7108040965093068 0.6831619545564211 0.0015190541583229855 -0.5915577062115218 -0.7081761503988664 0.3189645246786368 -0.5219397695475094 -0.7748469373078339 -0.587713763588082 -0.003924556814318025 -0.6546623748053533 0.46819583240186025 -0.3772676443632017 0.3459557084390905 0.12183627112415474 -0.6273437450952437 0.9154286339366116 -0.9153580528152003 0.20702697989084218 0.47721288099538706 -0.8593519485190635 -0.6469548973985282 -0.0657014389090036 0.6404723846901021 -0.4141008016221439 -0.9165601006811517 0.6785715567945141 0.04946271382589318 -0.3556457042379044 -0.5289499279993832 -0.8421412249034508 0.7176699776791151 0.2795816115712222 -0.9433404297440366 -0.8518746229740652 -0.8809238413609257 0.25828578551707393 -0.8908949135779598 -0.7895046415942784 0.30812901624986155 -0.48168817041248846 0.02055068705202645 -0.8370175698100024 -0.5492568720394229 0.8405462184694072 0.5221672912199409 -0.9843029632970628 0.3776417241245378 -0.3794593574499565 -0.767802367934489 0.23840620236300625 -0.35280031958055647 -0.03678699901796767 -0.5548564602514585 -0.25694282089785925 0.3139634047328639 0.9288501588135565 0.5552811625876859 -0.9014015164866089 0.74466419510514 -0.4023895630317269 0.8665545587997021 0.6729945244165623 -0.783935574707951 0.1487830956498608 -0.8361623632168638 0.008410229278458026 0.16142872552832 0.6835716879220235 0.8098260176351952 -0.495974087546895 -0.1772913247311485 -0.6238052042330355 0.23925320319425003 -0.04737609172711266 +157 156 0.07703309727643881 -0.7177201036059706 -0.5193964211400128 -0.7018414369106316 0.11245993414208444 -0.5567953898708917 0.7252627641577924 -0.7106778984704529 -0.9908186770949194 -0.17944726191546967 0.5088445773236767 0.8248915537386929 -0.681989413513743 -0.8900090266647473 -0.7869429888643569 -0.11466083993215714 -0.4342531571064505 -0.7875685506207777 0.3446574354120975 0.4953688472142208 -0.9084349698212331 -0.41745036467722496 0.10191281330685276 -0.3782612634272968 0.7730209247158819 0.7069622901123338 0.5911082057042147 0.2655331002665753 0.5255522853434518 0.09952384211856535 -0.8665990953877669 0.620219065986815 -0.4790519497181269 0.6937714203012704 -0.5104122937190116 0.11638403371532524 0.0578507302118465 -0.9811607472299908 0.9592422685990709 0.7715291885723963 -0.3390778625859474 -0.3847442537009669 0.25799930645755786 0.7615510652555437 0.6790574665268809 0.7157875231523845 0.16502198053677364 -0.4910618796335815 0.3295862436903432 -0.756683957769416 -0.8371423872939401 -0.028525649751697912 -0.19020276651361256 -0.6209388085413878 0.04525894254487728 0.06825595092458503 -0.049145390458785965 -0.31272438745278297 0.8650132557635797 -0.9290210655609048 0.2079628190123326 0.9990720367333608 -0.8182821690106967 -0.37253980578276735 0.5722044693303474 0.9317210801988904 -0.8637682708455872 -0.9526532986236134 -0.1521422210307386 -0.6646699897477892 -0.6720050740989574 -0.24890887693598707 0.8852698350671133 -0.20400156446575934 0.12154875012873823 -0.5101492809742418 -0.155543426473006 0.5860779035670207 0.41028699330526286 0.2785053519041747 -0.007905788590126805 -0.3814032917019907 -0.37098785828402203 0.8875780254165606 0.13227816195255082 0.08075154416249597 0.4492383034378675 -0.40802352160710487 -0.5492036666360884 -0.3016940051348882 0.10550936107913977 0.43309328058774876 0.11162450590475159 -0.571941618941997 0.031507839047397734 0.49487008071640126 +157 157 5.696774914468213 5.024491066338072 4.400866631258809 6.465167052526658 4.462289466885764 3.3256605317265473 4.890948634110655 5.280597638168142 4.705694743748348 3.9260305484091056 4.435904692711268 5.942601775292438 3.921587683772075 4.846037420007589 3.6864770906234345 4.423056894660641 5.101916253547725 6.202976807480826 4.809000328037002 4.57450743784966 5.797531694946284 5.223525563193648 4.390264460295384 4.1697428020987966 5.753325390880824 4.036889264078659 4.603960231971537 4.333055632906169 6.483673662814325 3.440682607976115 5.124030975769536 4.521836702587788 4.23731609657738 4.629416656064544 4.379556859366496 4.627856056879338 5.333799080262331 5.941207992759153 4.913154588214558 5.766935302678507 2.910766935345494 4.344069865788692 3.2772365412077415 4.534331180685006 4.982179180754337 3.3192144121166605 4.642701456005897 5.108020811920641 3.912183696641882 6.970904458592836 3.453376572148704 3.5402609459264065 4.675869381808935 4.767593165667939 4.989520532902694 4.8209420332800565 5.056283533803292 3.179577401787133 5.301889391070857 4.165779274646149 5.7138693887441 4.578237914494757 3.9035104167253305 4.070179895099715 3.6758522417287898 5.89553151454656 4.317776479540334 4.841943324734906 5.030725784457598 6.11298991149375 4.211618804398814 3.741140588860139 5.568240694176843 2.9666345815046498 4.595311352652466 4.990919232859734 3.9516555469502412 5.500037610519497 4.826397990792276 4.019913636150086 4.811984661124035 3.602495514399519 4.188236059857668 6.101282641524434 4.335778826097755 3.2829428535001868 5.683999194659403 3.573383077429339 3.5591326848687213 3.1743395023392194 4.7448950020982466 4.781220873179565 4.1392873553199925 4.950036709903952 2.485354908828522 5.37061999677238 +157 158 -0.5949238712382967 0.3189965781684141 0.259740036982157 0.8588768898864483 -0.7569001871915824 0.38857604158759407 0.43704305815482813 -0.6900553964983813 0.40664564036891826 0.2880266563200684 -0.42132271108910446 -0.933130867889993 -0.1167856276507695 -0.56287348631864 -0.4632356418439625 -0.31018075864535577 0.0850257441890594 0.23774880455751513 -0.7363453575845451 0.26545894246265545 0.612155263601988 -0.5680076757561816 0.11275718672577795 -0.8054868511461875 0.9310576706121061 0.4580876518991883 0.36918465512109133 -0.7641031805023097 0.9345472945895426 -0.7399162912871728 0.826963787713983 0.46209785411046744 0.01331994169714501 -0.4290780319597274 -0.37672817704411377 -0.5958248729635514 -0.8357385536874968 -0.447301174085063 0.2413578375534282 0.5499476536863592 0.5109715817485367 0.4047046614769545 -0.14260417719662422 -0.16240912632100146 -0.6316057672090079 -0.42284822287586166 -0.23736919087592434 -0.6864118948981504 -0.8529921860925329 -0.7468025155125106 -0.13557120900036934 0.3351006109423844 -0.4315811734485697 0.12476515736699212 -0.09004020333896845 0.3403494928189694 0.7661007220993239 0.1478143237026941 -0.4449965440835737 0.5382534750401804 -0.5717847181536997 -0.17994134899705916 -0.23226310487377577 -0.011726244931679286 0.15532419268482833 -0.6296021120343143 -0.28707702778183997 0.33232148952582485 -0.9358162533100527 0.7696443082942903 -0.758335461344674 -0.5480940887074852 0.5663163050115769 0.49261519841096457 -0.029525215028334495 0.7952223405194365 0.6078616906709629 0.37446371541323775 0.8220332252210558 -0.5464978216091534 -0.6116537905220536 0.32389395654213327 0.06213598021648936 -0.7436588375749273 0.10972618283341151 -0.6973875257416693 -0.8733600743223886 0.2765540668852091 -0.3492289808481188 0.025523280558194195 -0.563856559817818 0.5815106520858364 0.21326571778434267 0.26811382479969437 0.09228962611479652 0.46654128722953403 +157 176 0.6414166796736147 0.8741620984079768 -0.3430644535163716 0.9087983196713423 0.059848501887961536 -0.5973634409346777 0.5196650520698367 0.16197763431936374 -0.4928799055813058 -0.9771346432313612 0.45399358455282357 -0.889883893063161 -0.673034829007668 0.28584621738067284 0.56418098721232 -0.12120651918499559 -0.437111689942961 0.32114239581016957 0.46451270074857653 0.6002955466072526 0.40320064035559944 -0.5393849777883712 -0.9923991853898735 0.9805884823454085 0.7750523352138783 -0.08828031452517093 -0.9314066776569851 0.49908507124174806 -0.9424950637345748 0.30711159838234736 -0.8886497731942009 -0.12750683611080826 -0.5634144996650834 -0.12914096740128822 -0.25382382148799354 -0.5714090057555601 0.5080214673446721 0.3444220712286812 -0.5250036842729131 -0.9296112385935398 -0.08638044273185996 0.6198759686673643 -0.11318267635601442 0.1367649382776681 -0.6354059805494092 -0.060583735813394934 -0.27974203583716095 -0.532164330922924 0.756475270496018 0.5125462938768877 0.3984582048295038 0.28118648341136354 0.41961925170184644 0.5463156414333099 -0.7793519448797528 0.23792344995034886 -0.9375701966533594 0.052592585754494214 0.5989056318246719 -0.07599020179508975 0.8292335120829297 0.4712537236793446 -0.44193757142446266 0.6061727314929324 0.1592177300134654 -0.16573112215316033 -0.7881376244642644 0.8210819858480944 0.7689310891367367 -0.9540213004336833 0.46405684061182306 -0.024112122876176922 0.6355636768294559 0.31884919037354553 0.3212661023245289 -0.09033305250614787 -0.2756063261547612 0.9221171453757462 0.21243499413224787 0.5122275521489923 0.3182787762581947 -0.36907407920988833 0.773618843659458 -0.017974717279900077 -0.5447389872402437 -0.6179182263371115 0.42619812466835816 0.44683851877908043 -0.5186863200930361 -0.6901910711401544 -0.5322803538422103 -0.5365096561229652 -0.2968068389253602 -0.405309063650364 -0.44830621728003583 -0.9227701183512675 +157 177 0.816427764405991 0.09522024901562443 -0.1894373022520166 0.9679310746698926 0.6615812721375813 -0.1862858449692646 0.6768786677396776 -0.629961610790053 -0.7581233844511077 -0.35507519066830895 0.10907411207123574 -0.7291169483993409 -0.45738137422062186 -0.48314628765494616 -0.6798970605940786 0.0748660712687903 0.15801370350453015 -0.9718478245513349 -0.11062164978444011 -0.47417484635541074 0.3038477106178634 -0.9227354283989799 -0.7565062078990572 0.5799474491703751 0.26481919215340155 0.7269005694569177 0.8408599551097591 -0.8121586743103504 -0.6024922048087944 0.0006325680065977224 0.4864728679069972 -0.7225115293392486 -0.6720397423451829 0.8455504347070808 -0.82618706993137 -0.7036884643618568 0.8854411725693332 -0.9699457601248918 0.09144335081038957 0.905922861966318 0.4853593572253807 0.7390403016499167 -0.24027982472225173 0.9168536091636561 -0.9154072945942304 -0.08944976827094964 0.5797682227313776 -0.9605509376353465 0.26960401480807583 0.9897544503706963 0.03550845101776012 -0.5335052508208571 0.9786775005354018 -0.7251693712321279 0.17978778744201152 0.7250679058205618 0.3865184745657557 0.7065059408308421 -0.030037396357197377 0.860048632978196 0.7217804055700086 -0.5970460355984599 0.3843446577178815 0.6856255507500388 -0.2279797995755748 -0.7032787233594502 -0.4160883066662906 -0.15410888450402838 0.45698007075488967 -0.09605467216743935 -0.05235456743044353 0.9295158711964069 0.8773477838256658 -0.22839895952466827 0.9923457087823107 0.70886818865404 0.7787951610945774 -0.967871074662791 0.843776029299222 0.21800386109204029 -0.7218315209777213 -0.9863917279511014 -0.8393933257791708 -0.8100159141618317 -0.8112486676880577 0.5947935279845782 0.3102951865323662 -0.7005860727491677 -0.028770472578614426 -0.2693414158556606 0.38629165242364616 0.8836130829406306 0.5533843090192545 -0.9391233631294538 -0.1795478900233316 -0.9817677615808835 +157 178 -0.9291556546549682 0.9909266036217581 0.659046768323474 0.9795687011050258 0.4378635108672737 0.12931464041558294 -0.6991987159335229 -0.7875068428632102 -0.18948617410550073 0.636633851315529 -0.9314616112266829 0.11339474990083587 -0.9613394550602667 0.07391404370797594 -0.16224962955874433 0.7056022215540203 0.9114031627832704 0.9493552926005575 0.031916909050312414 -0.3121974699826202 0.8193802032559969 0.9042174687185607 -0.6384675972238949 -0.9861552098182207 0.9961494507524635 -0.013091065406542368 0.08787724686391418 0.21972283563561135 -0.9936959236139258 0.02270810457283856 -0.24090993820014162 0.5087677016707557 0.4438853379975003 0.33119511350415776 -0.165343005474063 0.8012719403506305 0.7766046655169467 -0.6743354145636606 0.4398258658920542 0.5259250519624628 -0.19678284155100556 0.11221306726270663 0.6015285129743835 0.6992355571814846 0.19978774454364578 -0.15981504719126982 -0.9702036565003276 0.009387596091997574 0.18825804729970663 0.8879210605022847 0.13454116880079292 0.07788614317750597 -0.9915424264439938 -0.45524979060603266 0.9065839672672003 -0.9427904826065783 0.720023317950879 0.02601321997523076 -0.8303593886978577 0.093182193692539 0.9221174930418137 0.9538677329342553 0.6409214914312491 -0.6690223836497942 -0.6708092935156171 -0.6673711878881026 -0.3022359457824022 -0.3740398218155405 -0.5763903694087662 -0.7363740503075495 0.3386241179467915 -0.7451762849942518 0.8253974094504151 0.6140405193816247 -0.8683346718619878 0.2626557520884927 0.7071019851049531 0.33546173486347364 -0.2512396327766133 -0.1480978411647027 -0.9503722075587753 0.5286505424097014 -0.023130149887536477 0.9998317972868087 0.5217680107125955 0.41971448946841017 -0.39150863060410357 -0.7493461691023837 0.7005968302738794 -0.1714769582117115 -0.8518407611288252 -0.7548405408689838 0.17739569913524167 0.40900200098373674 -0.30505225570803085 -0.7047791038054902 +158 137 -0.5431233062704435 -0.8343162904182395 0.5231230205137916 0.03240012343183163 -0.8654792277869809 0.6820488678050107 -0.9063308508535426 0.06103971116359208 -0.3804431731670399 -0.5266889228702727 -0.5897296171251536 -0.6556522577479555 0.022484554797084666 -0.8425916787765062 -0.9092607460752151 -0.4833748099229711 -0.3651330982921335 -0.7987461124399042 0.6477078084844408 -0.6455235787984379 0.65406608016004 0.7276704356234371 -0.7373521593870753 0.9530747698542341 0.5014287715990362 -0.3463670108562249 -0.20008518330110858 -0.631327533453276 0.42824139722135124 -0.6234604763397589 -0.5436129662223046 -0.6122179426610936 0.28021374510921415 -0.8219543991563489 0.2777800877927161 0.7655111794349916 0.447861826791738 0.7378279598556137 0.7733070060409146 0.1927352146756547 0.3614859566714774 -0.48817932779797113 0.2232330940676246 0.08563365491694319 0.06579438220064104 0.27435470081958657 0.38844350764851066 -0.5674849931313442 -0.555828453152293 -0.0019407211899700183 -0.2904499589268592 -0.6534838419752962 0.5645147015284733 0.5471254063111033 0.9740696765619523 -0.6442142631461119 -0.3612229978136441 0.6201984103280445 -0.06690203354043223 0.9574953073615082 0.5648249469976998 -0.8381570647691914 0.2390888147434802 0.4043659917154674 -0.45329028957899054 -0.039726517217378854 0.247006961802954 -0.628346628802466 0.6770048756642404 0.26087095179488684 0.40399852603664965 0.3342084975663686 -0.2519207195690698 0.20627552314231345 -0.24147821466806763 -0.8014634237837779 0.46093317719617355 -0.22813243230515146 -0.8862179055262431 -0.7033770886884751 0.8618260507220727 -0.9427179985091723 0.6773627797712869 -0.11536798183084285 -0.3574865473020723 -0.7965435259243914 -0.6931685781270605 0.40241031776131475 -0.26188252777587695 -0.018520151514551664 0.07205124196493529 0.8101221876990987 0.549840306195728 -0.49293860075977003 0.38530423780273404 -0.4257128304700599 +158 138 -0.6436578012938359 -0.6217720617159466 0.7078000659753838 -0.2330965753286265 -0.8703430624762385 -0.15817200143081833 0.1319945332129553 0.7683980161573871 -0.8753854965356127 0.9841867819213215 -0.33681696690507 -0.379236189539065 -0.6692970817591899 -0.18461732071540138 -0.4343692502478511 -0.22550241306170782 -0.7418142934102279 0.6914118409461025 -0.19353961367960948 0.07509811966507263 0.8174699950633575 0.7582877171567652 0.8498516872693864 0.030209630796503184 0.21133983054717653 0.7663864534727061 0.4677533948259014 -0.9017679693519327 0.18731432326582387 0.7546938050891436 0.9678354538045928 -0.060057602600195104 -0.09322599666529219 0.1834809752520803 0.3009343069369135 0.1362015400881631 0.30066386954391233 0.8462246774883291 -0.8762185533619431 0.786380167046344 0.8200274093045992 0.10843056193543088 0.3735365799180954 -0.18179950361710784 0.02912020518867009 -0.9151456345341169 0.4373739375623844 0.8393751058503993 -0.36036628732673104 0.3579816274282239 -0.9456312679390331 0.402027445043456 0.08421156501988114 0.625922173407129 0.4764432701008843 0.7927944299009568 0.6061206742255196 0.8182101218516418 0.20758005493613196 0.06544266566582979 -0.9152972874921503 -0.7006957966353096 0.8118836742162707 -0.6902352776868328 0.016364887242169113 0.7079687507533441 0.7470717511352511 -0.5664909020721014 0.5034983143578013 -0.5674145725739594 0.8046647581481552 -0.3071920748428696 -0.6734823601568511 -0.05644560147033917 0.4681339736439465 0.7750510824036776 0.4183185763181445 -0.6174490287410748 0.8318717488338896 -0.13235520265881817 -0.3268764787101526 -0.8004849984484221 0.8411374366307571 0.8038458600622709 0.1327572120985494 -0.8369019804505893 0.3532339630545487 0.05227449234582848 -0.03940157582757009 -0.3352848799877328 0.4558727251102628 0.3158230478523236 0.7687349377180224 0.4335198507615128 0.2014396536109866 -0.5613175971720683 +158 139 0.9953453347887116 -0.9730070573912002 0.7014203662791003 -0.03334103393972909 -0.331116761269324 0.47570928963164905 0.8670506740867752 -0.8035990783690867 -0.16449667504037424 -0.9577533483409417 -0.6239036702133567 -0.6722361568922859 -0.30726682850267495 0.5216926560391772 -0.7473910580635517 0.5286173127131284 0.5328759178022093 -0.9500715860346012 0.6144483247325803 0.002325415078498372 -0.3603950338888764 -0.013566050826437248 -0.14926392368528663 -0.28642290473413956 -0.30886284418519594 0.9751089257593579 -0.8702249293397468 -0.35741051315355543 -0.8226231216476165 -0.22950459854047867 -0.14029645485400755 0.6649968536763682 0.8301162689494737 0.8424526929724521 -0.8807551374239535 -0.003086462349414898 0.8688251055740019 0.07025405269803464 0.9274965481159734 0.8546070845134717 -0.12298754691711045 -0.5704312646546483 -0.6218878816578972 -0.7121851248508111 -0.9337225339703328 -0.8277440265413443 -0.003964557452649009 0.28659535994570295 -0.7378652101903131 0.7821092201942594 -0.09406118667378172 0.3034997511063804 -0.8907191580747169 -0.2262658647230973 -0.8633774982094933 0.918544044629932 -0.9857772880072766 0.0803731380825703 -0.04479020446412152 -0.5306269024033072 0.7949720959513631 0.3635416978972299 0.5696745312459437 0.5852639061983351 0.913877681538672 -0.07018881755949735 0.1938154411665458 0.012745954814327165 0.8265839433959807 0.2591787283327862 0.47686053163291886 -0.40511426753015867 -0.17277461647083414 0.6879532187751525 0.8531922697669205 0.8975697008473349 0.11058733253751418 0.4315243535272153 0.48302933575222196 0.4925215035032866 -0.24772195481438275 -0.06772318245198239 0.4380591125053197 0.3867973551188095 0.46722734948008404 -0.8357039631297651 -0.7906961707090876 0.6118332303980047 0.5765511701329853 -0.22771687778032623 -0.8647417929142516 -0.7435461634226295 -0.5553340470645816 0.6281294274639622 0.9450750077868599 0.045702219603078076 +158 157 -0.5949238712382967 0.3189965781684141 0.259740036982157 0.8588768898864483 -0.7569001871915824 0.38857604158759407 0.43704305815482813 -0.6900553964983813 0.40664564036891826 0.2880266563200684 -0.42132271108910446 -0.933130867889993 -0.1167856276507695 -0.56287348631864 -0.4632356418439625 -0.31018075864535577 0.0850257441890594 0.23774880455751513 -0.7363453575845451 0.26545894246265545 0.612155263601988 -0.5680076757561816 0.11275718672577795 -0.8054868511461875 0.9310576706121061 0.4580876518991883 0.36918465512109133 -0.7641031805023097 0.9345472945895426 -0.7399162912871728 0.826963787713983 0.46209785411046744 0.01331994169714501 -0.4290780319597274 -0.37672817704411377 -0.5958248729635514 -0.8357385536874968 -0.447301174085063 0.2413578375534282 0.5499476536863592 0.5109715817485367 0.4047046614769545 -0.14260417719662422 -0.16240912632100146 -0.6316057672090079 -0.42284822287586166 -0.23736919087592434 -0.6864118948981504 -0.8529921860925329 -0.7468025155125106 -0.13557120900036934 0.3351006109423844 -0.4315811734485697 0.12476515736699212 -0.09004020333896845 0.3403494928189694 0.7661007220993239 0.1478143237026941 -0.4449965440835737 0.5382534750401804 -0.5717847181536997 -0.17994134899705916 -0.23226310487377577 -0.011726244931679286 0.15532419268482833 -0.6296021120343143 -0.28707702778183997 0.33232148952582485 -0.9358162533100527 0.7696443082942903 -0.758335461344674 -0.5480940887074852 0.5663163050115769 0.49261519841096457 -0.029525215028334495 0.7952223405194365 0.6078616906709629 0.37446371541323775 0.8220332252210558 -0.5464978216091534 -0.6116537905220536 0.32389395654213327 0.06213598021648936 -0.7436588375749273 0.10972618283341151 -0.6973875257416693 -0.8733600743223886 0.2765540668852091 -0.3492289808481188 0.025523280558194195 -0.563856559817818 0.5815106520858364 0.21326571778434267 0.26811382479969437 0.09228962611479652 0.46654128722953403 +158 158 6.311895174112336 5.930983559029606 4.367745927460697 3.6088636235546803 4.453075346409805 4.172795890667918 4.672816390913759 4.857724403781077 4.687047967684077 4.570558951903282 3.823434613607539 6.055595633906115 4.010079741725326 4.497328410188425 6.170334317842013 4.7087300304544115 3.8523424742255212 4.588527934665029 4.772399295930733 4.114603681402835 4.649524785738312 5.345551888438839 4.178991103721197 4.779171800278668 4.808762559493015 5.710386896324988 4.218688487290363 4.993464271704635 5.261984135015377 5.720803586407277 5.6334557811371795 4.449261694385662 3.6622867516855373 4.901011320465924 3.3929754310502127 4.08403107100482 3.620228511603184 5.182997536622501 4.614113015870547 4.298540875813103 4.614562291682754 3.4036292190574295 3.4810213737794453 4.313380549457074 4.194324188003477 5.734199420615174 3.6802128895735686 4.9788463885588365 3.779931896324973 3.882909162616443 3.809747819934625 3.9797155000500917 4.0223272593539345 4.429359777492282 4.574879508965098 4.960680751942245 6.82146251632079 4.4846884500610855 2.799299832794837 5.296883726926037 5.644820802589212 3.7084271669597655 5.440773554658525 3.7618539194192726 3.393811029948602 3.458742056391648 3.2419677796355195 3.580496473972758 4.788044199288315 3.97094031970145 4.434434763494845 4.243106825369037 3.0804507621567736 3.373779574064874 3.810601374925698 6.036900207603775 3.5917270282793776 3.8119902958987897 4.824309900674513 4.502976124569035 4.625997111731647 4.30198740913654 4.087831114917306 4.86755903996282 3.288773079694026 5.147709255908917 5.347183603052063 3.706297170965107 3.951921323451047 3.878724121520774 5.170329886621065 5.112107740831535 4.25854198241445 5.114644435114867 4.255683762366756 4.487466323343954 +158 159 0.9250118463504229 0.6192817009933651 0.22770945705889356 -0.37660996278082415 -0.012769328750605213 -0.5600511661360104 -0.3862766236860149 0.8338041797867428 -0.38048861007743806 0.13951613082495817 -0.6992453956124789 -0.9630244611543486 0.9478694031421093 0.07616851067684216 0.7139499280425954 0.792335481580861 0.9405568001016424 0.20756964408178824 -0.4631534165018203 0.19251618027217865 0.14209573858858882 0.9998448791547392 -0.6327480833953341 0.7189314095517441 0.8135644123317451 -0.5311724593272691 -0.5286055886964889 0.4111217239506668 -0.18673308320602455 -0.8400047932346704 -0.9117669599090659 0.7348699929024012 0.2560917738818933 -0.9852975342108812 -0.69219766873781 -0.24840424964511376 -0.2764138964223555 -0.5932506966506572 -0.0808077244744867 -0.27725830122124795 0.7199111071268687 -0.18749701919173822 -0.04465751280751129 0.9813260281226421 -0.6324180844347487 -0.9077002900651365 0.4333529942166361 0.541605044850529 -0.35535824320728504 0.581881374965026 0.6183871771717646 0.6018093178166253 0.7287650305347577 -0.4610627043181519 -0.9263551032367014 0.40795756752449774 -0.530586928427262 -0.945160892238728 -0.4823385319013087 -0.8792500688576208 0.32837135065471434 -0.07539363022150591 -0.4983025670027512 0.27796144974194004 0.2617651748170946 -0.749380164464237 -0.7482503537403038 0.4308906351299595 -0.4439067935694534 -0.6246658029170831 0.7639084012321711 0.5720707410808625 0.45224421643779844 0.7766965427111896 -0.6629168428148144 0.5948514109369853 -0.24963101325305748 -0.08481340961482386 0.3456567114122977 -0.8625166386151046 -0.712675726081166 0.32166195322361335 -0.24587327401681147 -0.40347305267139033 -0.03715413619442831 -0.7031403082510619 -0.47865157291475335 -0.09232522945377197 0.44502648051793514 0.573699204956114 0.9887308006896369 0.35513812691679836 -0.1821773488525913 -0.4869638492259758 -0.500993528933694 0.681865623151737 +158 177 0.4278990950368 0.9297456577295296 -0.1928555007554904 -0.5208713836862946 -0.48972016395451945 0.3482983554873318 0.7007189314482343 -0.29362140943457526 -0.7198647981134485 0.13670477408984327 -0.7377881556830534 0.14263801090776163 -0.11267019932133104 0.7096843409624869 0.9665814650720435 0.1778152538698048 -0.22740589042224468 0.8553950053455412 -0.2035866487511524 0.7997564131576849 0.5863011543852414 -0.40588369966607596 -0.13445549473192764 0.2030777477378909 0.3524337850684631 -0.6323170176901121 -0.8021490073660791 -0.6888180790081804 -0.9515514369717322 -0.468917516637263 -0.3296990426934121 -0.439128492815541 0.6760969649971014 -0.29371910479055363 -0.4474808126558667 0.5943414563461518 -0.25837297720120067 0.8955869689465814 0.21332715078680708 0.6171101367662115 0.621203974774919 0.7129197265944807 0.018006088693228506 -0.22249227283047346 -0.3871450200389386 0.8167574835732774 0.46132708535415046 -0.3063046073161688 -0.24003066503438175 0.17021395106557446 -0.026784980753044918 0.6758800441783466 -0.23852263637475568 -0.5828807243922236 0.33672977283778316 -0.7181834450520255 0.9824086720102057 -0.25997268370516724 0.3438129461058519 0.47776341746047124 0.487972892194509 0.05930921312403492 -0.6733794672002165 0.9357278048161386 -0.976755998420832 0.7693657265519209 -0.5289807138661096 0.5459989299858572 -0.0971908308055589 0.17511049115532895 0.3981532291478307 -0.6603042871755993 -0.31955102883656394 0.503361556175975 0.1527134368204992 0.4359522979776127 -0.23501073358470004 0.48215390989776963 0.29622202942486164 -0.6261483848896763 -0.18525996419232538 -0.6252775025496635 -0.9779052099602588 0.6899255000585816 -0.5096041617245026 0.16731603730286815 0.3634878279780882 -0.8568517774820141 0.3426813600227807 -0.713705709062558 0.08222772112803067 0.9381342247992026 -0.025090067605481936 0.8325487518782337 -0.16292889165993096 0.28270031951841434 +158 178 0.9811181461904837 -0.5981655275543856 0.1761953281852522 0.07576015415425363 0.6756702605948253 0.43462712645240686 -0.8653520995565815 -0.3741468891974027 -0.7318085894409527 0.697686700575624 0.3373865547759678 -0.9961363503551284 0.4863054285899777 -0.8153727952126315 0.5890908083023965 -0.9212402983722954 -0.30984798881251097 0.1044365817452686 -0.790246686811584 0.5707715662982735 0.7355557383335278 -0.5086760547762832 -0.020773549075031594 0.6137321801423963 0.11957482293711585 0.362153444986262 -0.49042776816910694 -0.5675595307107391 -0.9713334807257907 -0.7587028485822593 -0.9533809456621909 0.8595257610105871 -0.967155614277722 -0.26583920737737965 0.22780137509486598 0.5641013331949019 0.004313317953184015 0.8278864100287382 0.985196328830827 0.37832766992861155 -0.8763931488590613 -0.28830047270309644 -0.4008227563558573 -0.7285095741350229 0.6199270147622404 0.49400636428844513 -0.7712036841466148 0.588490578252509 0.30424211181253624 0.1660129272477069 0.47112522247742317 0.38626442459099186 0.6559412882336828 -0.8910801587281421 -0.3447479577641035 -0.3739365920138866 0.977633761657341 0.6284442677758861 0.15173632374719803 0.5048796858287858 0.23976214612835434 -0.8343899589313437 0.9663822732736769 -0.500004991861243 0.3041326472615582 0.12475067334558543 0.27407601044802554 0.5262953271051107 -0.6392895503761173 0.8585559662789748 -0.007386474786755359 -0.3068404076024629 -0.1809768627213646 -0.09062081988123083 -0.5529351571578123 -0.812428054581884 0.20713201978255813 0.6043346672202423 0.016620267849249082 -0.13254335729805722 0.7435731025901777 -0.6511123348226613 0.171706768282337 0.7557964588539101 -0.6946790307298014 0.93784201733833 0.4625561999819481 -0.2381218692180378 0.2917187549649767 -0.8118537779075541 0.7080891007734544 -0.7554508897146042 -0.9586549868012679 0.8601614603498664 0.903158099024195 0.6359419036629441 +158 179 -0.990642501086296 -0.06087906334706239 -0.8812557930954117 -0.5555155149308162 -0.24867673831203718 -0.6521740453956648 -0.04813327005389678 -0.6607565831446163 -0.9925914936496745 0.05573975567008782 0.04245559038259805 0.6020712988715808 0.9877951838204697 -0.6166284742078227 -0.6021615325424847 0.9668179707497986 -0.5681345090152801 0.07346900041628568 0.4710970311475269 0.9092290900432318 0.7391976917933643 -0.4982690736930224 0.9029625325099422 -0.7222769071671489 0.9507089226375927 0.6894034419935444 0.368365019752787 0.4497350025949083 -0.08897161975319379 0.8871041702172318 -0.7981102072481225 -0.30295758497621916 0.02938773268374595 -0.2018141276983123 -0.12410071039827164 -0.9862000732352756 -0.3609564910213019 -0.6987616184526035 -0.13837653098877967 -0.5665520744779156 -0.3743316180784295 -0.3034762840570211 -0.9591536081131542 0.4889156523501943 -0.5041231963931756 0.6323831473314507 -0.29472449895045716 0.17189990932828003 -0.34823537521173953 0.1970785514147959 0.4977544420524931 -0.03291430081771396 0.07480107381713319 -0.04691146569915183 -0.5433554149760502 0.6391018047802066 -0.7680889626111724 -0.43949519582087193 -0.12845041431250048 0.49394176835812886 0.8142485767705503 -0.21180550677817256 0.7784442772429239 -0.2163758582456745 0.07626441282127217 0.3070471648803934 -0.0810687644447603 -0.054702377828975246 0.5432137948343985 -0.09717981084878424 0.7428456765914035 -0.711246430256294 -0.12261001019575124 -0.5058727014865063 0.2600254716221313 0.6394388914020739 0.6341489645837288 -0.051084279254657305 -0.7458846174043325 -0.8090114693376664 -0.5172575573821006 0.373027040863795 -0.3573249388757962 -0.6695737257350141 0.687266575173815 0.06432251261325028 0.9805591467008765 0.9103099414818836 -0.6638152825961352 -0.372198266883522 -0.6559751901426694 -0.1090966218387206 -0.41570699593313054 0.8834403848834043 0.8607228675898935 -0.4368226496424843 +159 138 -0.6477252246505913 -0.5680045123497768 -0.22501333111623523 -0.14126138150540668 -0.9152364487100151 0.024085410425690235 -0.2854404755444828 0.5809803707365637 0.6738276063154127 -0.15903943100715656 -0.8969970195739274 -0.6224520164480778 0.48522137826203404 0.29051991624654994 -0.18394151968859096 0.2095901170705099 0.9678921454721425 0.6332391669821822 -0.5912759787279747 -0.31446491972414403 0.26486063053638764 0.23938447873991375 0.5147337518068518 -0.9047710505129745 0.4377670085997516 -0.8533049623791091 -0.5873374446665636 0.27478203651452127 0.510418771711503 0.027403522626264554 0.803169674944334 -0.1429722522490109 0.6732531653922873 0.8347232667947908 0.6698191004504108 -0.6327555810435999 -0.7566007816599567 0.7081964653650481 0.9391141847683913 -0.8191339813339653 -0.19273434587827243 0.5874447369136535 -0.7015888777762902 0.17345123134451534 -0.16646811507403947 -0.20448444390627007 0.18547002711356142 -0.46157782922146184 -0.17424626877677052 -0.3524403597062582 0.48019644144340234 0.7807209672327882 -0.9336954582019283 -0.3605222138095221 0.6399653895110884 0.21822650970574298 0.4778258787081948 -0.40846166047888066 -0.04212231765097307 0.8914877293990562 -0.5548793531066465 0.4850561730045 0.8029396292001441 0.9341263592465603 0.32614947536377303 0.5912865427353016 0.33934053138526243 0.8692544330006096 0.3831165556682128 0.6372479697492253 0.5711022991279913 0.02527967537049869 -0.8608957658235223 0.5183415971517276 0.17388433044275553 -0.0781045004234111 -0.8148173111428998 0.9613784251115547 0.7394781988326713 0.6087958997446195 -0.4415371528828036 -0.5674699084267341 -0.9153049543984746 0.9600497118435438 0.2831345024737266 0.07834233976169847 -0.31956145750064757 0.6989566191124974 -0.6147224101898305 -0.056106487311835096 0.5701200989940984 0.7135838637113472 0.15261336416234372 -0.10723600580098624 -0.40572208149232947 0.7067766632913932 +159 139 0.39998713630063265 -0.5140265723974253 -0.3791015574693479 0.4861083827555097 0.8014496235960615 -0.5040779655875707 -0.15999477035478882 -0.5514525300517736 0.16378869417167063 0.5158504433031286 -0.807512383955584 0.14620424635629492 0.28619151783594554 -0.09615330348079332 0.513891636357134 0.5141194445232524 -0.8848902301116408 -0.2341510798283155 0.8802067784899021 -0.8796264966211929 0.8326801955394747 0.961105954553579 -0.10925837305737152 0.5268778884821048 0.5235083981314275 -0.9378181802748813 0.5256262546266093 -0.08234689552796981 0.1073645412387838 -0.8523795558789267 0.6805040808965177 0.8477046231410015 0.22208465935601773 0.8690057107759868 -0.2542702173372724 -0.27474436245182887 0.6446015232865048 0.7435433452295295 0.5576256390713972 0.07699462671822865 0.2483723449693931 0.2814538233813686 0.7195299247861502 -0.1075348937185776 0.8315105010550492 -0.9101243355681954 0.4211459117257066 -0.6327703464851606 0.7030155571224801 -0.5421947094272339 -0.3700202320750625 -0.09196373820118864 0.9443170022370286 0.9493523349715243 0.24544875318348436 0.14919681047195055 0.11493454921072077 0.3117508626966916 -0.9711475115442243 -0.3174595925191479 0.49445604199688487 0.7465704038168843 -0.96811956515953 -0.7097630328149598 0.35752686698406944 0.3663547313981659 0.5552765961121784 -0.35380261966269866 0.7885065995805445 -0.45154183880390564 0.31848843587525955 0.9065792670188189 -0.38464041241592395 0.7155609304340484 0.07339829856720592 0.9344353783509727 -0.7219360497999632 0.15919881958270565 -0.6606975576383962 0.28842587699016264 0.01247429665143951 -0.33142884701633246 -0.662866038086237 0.5340383742862826 0.7192891249033866 -0.18515558923678466 0.07909611918168835 0.7803812098833094 -0.30272621473919537 0.8594673217415116 0.8916839942386188 -0.5507713412440456 0.005177364110210858 0.6595902007616328 -0.1923493833808858 0.7451976281341208 +159 140 -0.5013920693346434 0.4330587796205976 -0.6569055995087241 0.45350456740667666 -0.08884875247197743 -0.06344600768587272 -0.5204444687051917 0.8476472918626818 0.13503351256242513 -0.6246754498671272 0.25840660602393006 -0.29968984080727745 -0.24252544919684582 0.5377933192864077 0.07107048573848451 -0.596637981839403 -0.7193205785741623 0.6227107874247744 -0.6957333081274035 -0.8790838100076173 -0.4949824828655205 0.18244021634814178 0.36035841463396046 0.5460043622018493 -0.37858343173293796 -0.27683200030631583 0.8894090190015138 -0.5427425103201837 0.1257383561572949 -0.293364592070251 0.36302960006720997 0.3976664401786725 -0.46296850534864853 -0.6112430626326957 -0.9038118441794225 0.5317926764757683 0.7101103720661923 -0.07729360371326166 -0.297348286340654 -0.052605980813435815 0.41590037904879296 0.738619645849397 0.4730912838479644 0.7511349491922994 0.0923961747865214 -0.5100340850374514 0.4498302193358241 -0.27113296453688984 -0.46773206512552745 -0.08333651920526686 0.01009175749493485 0.31385972255345185 0.7777462973474603 -0.27068951353062354 -0.46274958700577784 -0.0982865294056936 0.024901411403112972 0.11243736736336163 -0.9269258085813488 0.31137221844669116 -0.21777425293802444 0.24289198675702384 -0.514884325965759 0.15980501498711197 0.8544853490895281 0.2848291471801929 0.20218737523697006 0.010456975743002639 -0.44222059365562405 0.23605559477762972 -0.9697849679807613 -0.8708751517431867 -0.5438358902866562 0.8690775302496161 0.920188649578163 -0.1754040626442659 0.7746783951194334 -0.31566926755838254 -0.3457497719120852 0.21027910830959629 -0.05598821279653299 0.12738708762845707 -0.47855353982762816 -0.02516546140860565 0.547784480225374 0.4387018127147342 0.16478074001411835 -0.1337072713191334 -0.03659418654309343 -0.6704371191340972 -0.4957545451912815 -0.8286865669127128 -0.15235447237929955 0.1111886473362047 -0.1620872238180575 0.12901557129723762 +159 158 0.9250118463504229 0.6192817009933651 0.22770945705889356 -0.37660996278082415 -0.012769328750605213 -0.5600511661360104 -0.3862766236860149 0.8338041797867428 -0.38048861007743806 0.13951613082495817 -0.6992453956124789 -0.9630244611543486 0.9478694031421093 0.07616851067684216 0.7139499280425954 0.792335481580861 0.9405568001016424 0.20756964408178824 -0.4631534165018203 0.19251618027217865 0.14209573858858882 0.9998448791547392 -0.6327480833953341 0.7189314095517441 0.8135644123317451 -0.5311724593272691 -0.5286055886964889 0.4111217239506668 -0.18673308320602455 -0.8400047932346704 -0.9117669599090659 0.7348699929024012 0.2560917738818933 -0.9852975342108812 -0.69219766873781 -0.24840424964511376 -0.2764138964223555 -0.5932506966506572 -0.0808077244744867 -0.27725830122124795 0.7199111071268687 -0.18749701919173822 -0.04465751280751129 0.9813260281226421 -0.6324180844347487 -0.9077002900651365 0.4333529942166361 0.541605044850529 -0.35535824320728504 0.581881374965026 0.6183871771717646 0.6018093178166253 0.7287650305347577 -0.4610627043181519 -0.9263551032367014 0.40795756752449774 -0.530586928427262 -0.945160892238728 -0.4823385319013087 -0.8792500688576208 0.32837135065471434 -0.07539363022150591 -0.4983025670027512 0.27796144974194004 0.2617651748170946 -0.749380164464237 -0.7482503537403038 0.4308906351299595 -0.4439067935694534 -0.6246658029170831 0.7639084012321711 0.5720707410808625 0.45224421643779844 0.7766965427111896 -0.6629168428148144 0.5948514109369853 -0.24963101325305748 -0.08481340961482386 0.3456567114122977 -0.8625166386151046 -0.712675726081166 0.32166195322361335 -0.24587327401681147 -0.40347305267139033 -0.03715413619442831 -0.7031403082510619 -0.47865157291475335 -0.09232522945377197 0.44502648051793514 0.573699204956114 0.9887308006896369 0.35513812691679836 -0.1821773488525913 -0.4869638492259758 -0.500993528933694 0.681865623151737 +159 159 4.873130348428738 5.103793015164182 4.27253404759162 3.9174214556761964 3.9888369334975033 4.162898122762709 4.995537333668379 4.87342259699723 3.554841909704975 4.107218734314854 5.586625615936587 5.738740965454616 4.139529636439375 3.7572857548453404 2.895952435610705 3.9743475040898693 6.761610067205576 4.466875187728515 4.769602259381916 5.329970801799358 3.9931687257926987 4.711149392876399 4.011087173993877 4.07094484848054 4.903255775335513 3.9644332209018307 4.248544089425615 4.578401120225561 3.7258239384589356 4.245464722343188 4.416948682895737 4.5215125384007795 5.260272382058277 6.145739311961665 4.771765794625818 4.958720553295853 5.851993504224237 4.1107561377072885 3.6049844336122465 3.8358609117928752 4.345488267583598 4.315417197125385 3.5890078015131057 3.8531714989559043 4.739871313012321 4.833170873971717 4.428965310777461 3.2597042702873686 5.400132301289756 3.877103168966032 3.8763549359479494 4.229059186108171 6.1166367120157785 5.2795809031334695 4.868683228113973 3.482778448055005 3.933467294386472 3.8972021097570444 4.032422534496962 4.908249924487386 4.54737374705627 4.67319462895173 5.138257478241146 4.003502336122149 4.427486230184801 5.191365184328772 4.13856848025808 3.8156336348901223 5.103301248881241 4.48628841741178 6.101320453817614 4.873901190821438 4.591525348336103 5.425016713195036 5.445079761602886 3.536452607137888 4.528490467066042 5.291208688211928 3.948061492320981 3.9529502854564336 3.245667057409448 4.127966076644935 4.878662305182908 4.00699766130188 3.971685127294257 4.161676767777177 3.148966608634481 4.242963383139695 3.0032524389790627 4.039604735537695 5.242805142752598 5.984710004285978 3.108347856975695 5.037470429550989 4.539304122715006 5.147748749025192 +159 160 0.7534509218013166 -0.29724218044467765 -0.7038248011963661 0.4918270768424895 0.488592300876739 0.8879301848867949 0.5736503923174787 -0.6863209550470988 -0.348729978515413 0.268610847849577 -0.7209007200353088 0.6282644199310308 0.6740123694767943 -0.293928416512641 -0.01779892250901205 -0.5079725423234278 -0.2831493507734575 0.9678374769635816 -0.6054589004023974 0.1034806827154422 0.4642563237049744 -0.33084633374960726 -0.30252494263828345 0.11404959505324119 -0.8643525159340464 0.12930448877602263 -0.6482500223305174 -0.8069436861500452 0.28369618256619367 -0.598095111183437 0.4405944720801811 0.11481809511522845 -0.27934421388294783 0.7541852086530616 -0.9128861355038169 0.9174464752619231 0.9706618454394724 0.26678289198309013 0.8369276528771481 0.4797557295677086 0.6873259014029403 -0.422573980286129 0.004395162542333075 0.1512561705168718 -0.5478019620148078 -0.49965767020909246 -0.20902516817894212 0.2641061938453122 0.9112135203239575 -0.9712376413700219 0.2867835449339471 0.5705130959390883 0.12334879388435716 0.9621661804384598 -0.17542733087606344 -0.04845439271968943 -0.7944446369423366 -0.6578854827917777 -0.6656551853303279 -0.03380392060405235 0.7156108619187613 -0.939732995567965 -0.5520722043003587 0.5015465629227875 0.4724822704078089 0.8496689737099714 -0.5839494808279462 -0.5587905926226386 -0.013724307366463462 -0.1506193726507028 -0.9044803224774223 0.40491741491331434 -0.3298015108027268 -0.5750589270642541 0.9275890339136603 0.23432935477448513 -0.5071683095844546 -0.5630683124266804 0.061874948540143304 0.510701186809901 -0.9693767041748669 -0.7312606245123217 0.8836506499018801 0.2824240323364786 -0.4392942615481277 0.5672871914824755 0.0972161380051102 0.10104858917745863 -0.06658235271235902 0.08218276473000907 -0.23864101139680938 -0.747355383647045 -0.9792409512018332 -0.8296555080744219 -0.9962990495175921 -0.7913010701148482 +159 178 0.06122120204128856 -0.5879453162823893 0.11862903922061818 0.052889998755534906 0.3515461950946954 0.9372290437483024 0.9774286844298985 0.6649750427643164 0.3227121764478529 0.5457950317422204 0.2841882150692363 -0.7276814280296864 -0.7570557770407653 0.7940548937167282 -0.5658813595531731 -0.506691370376186 -0.8005360031442181 -0.45278529573399484 0.3905159067003774 0.470507617966635 0.5669900094923395 0.17767757228731695 -0.7023330694577823 0.21923141872135998 0.3884987135700517 0.35162914357638253 0.6111192890048658 0.6215914532430795 -0.6657148796738734 0.17839560597207949 0.023654383954086144 -0.7509508804712588 -0.8799166544100203 -0.52134005076846 -0.770771854302724 -0.7858556485171584 0.7285702493317394 0.9997473705845938 0.24863166612425602 0.6503781278755885 -0.5604370328099524 -0.698170239045222 0.814118663681255 -0.819268307570157 0.47712797289301956 0.618295833490458 0.752735927729342 -0.2278503921224957 0.2097279786428734 0.5263428653650588 0.8374504357918644 0.32948791382175946 -0.07649640413699421 0.7288460212531942 -0.7612003679861663 -0.6250082159517252 -0.39696647046302536 -0.13985388192828507 -0.1240199982274881 0.7265626943797217 -0.7038326001559461 -0.7819137180732527 -0.5476607185281541 0.42852075819286006 -0.745652240918316 0.9380554514955828 -0.2641333330296658 0.9900495035000498 0.7113054779832779 -0.723212739588839 -0.9970672333409409 0.13028819174273898 0.09415186655220475 0.7145719856172961 0.9445129856937702 0.055142372220727376 0.4975396264483447 0.9836979896939504 -0.853282185707108 0.6641949160156724 -0.03401222073150256 -0.6894042201551369 -0.1976280836060098 -0.23071830129423154 0.5268135580613384 -0.41412053020221795 -0.80216204180992 0.310655177135589 0.41855066994425605 -0.9874481172726248 -0.6449969390454311 0.6526434909036227 0.5022512135518138 -0.8902265357776902 0.5122155823809937 -0.5183815297041359 +159 179 -0.5683138539593595 0.7288537737852705 0.8534694428288931 -0.8843482261071829 -0.045763108046123824 0.40674183448700596 -0.5996043696550235 0.43705967340302143 -0.5677520612209963 0.5511524936711318 0.8020826047758209 0.875524347022675 -0.23076241435379985 -0.4223996788821145 0.6921954995766209 0.0431965912501211 0.39295176582609126 -0.5992090851725838 0.1903554531483891 -0.9920451704229338 -0.16755547960503603 -0.7938363968127395 -0.47819710695505324 -0.4364435808872609 -0.044169023294231335 0.474329178911147 -0.06657606844912167 -0.5890536942746605 -0.32810494449242356 0.9363165792148762 0.09156866602386726 0.42302206779541907 -0.8286534221322839 -0.6944855579070031 -0.2893896472449411 0.7687158971683199 -0.2911824416631259 -0.16640837066217862 0.5902695698298495 0.9012429109407663 0.9141356566339562 -0.026959227186443613 -0.39772894298014294 -0.030508159613034325 0.6867433170060884 -0.5574474464128554 0.9882389058319478 0.016681589596304836 0.863914213107063 -0.12154746046537657 -0.060551531399233305 0.10935370094307673 -0.7545410571704207 -0.2646859453969119 -0.6603272748640778 0.6438470706334167 -0.6817067675423469 -0.9219936067225221 -0.28713263823165747 0.525926868575832 0.2379890022465776 0.9726752833138432 0.7195249680668085 -0.41450160850792495 -0.49709288570706955 -0.010571336772377204 -0.06444030776655651 0.015637552048117342 -0.46276021452003513 0.7022887138699561 -0.008199059820254373 -0.7334316654895787 0.5462713203584073 0.23955804189995034 0.9513516872942342 0.20718099217551122 -0.1513963856932139 0.8367818745714088 -0.20599251238588367 -0.19812193685882118 0.17005059912221654 -0.7664088501419175 0.5228604426639927 -0.8461752890096441 -0.4912974702488375 -0.7189247129107816 0.15671415988917192 0.39113192164258703 0.2675298645224544 -0.46516195397592885 -0.9085084942964756 0.6460011355723276 0.42173295511542785 -0.7770737394764757 -0.773084931807698 -0.5374131897213661 +159 180 0.38981037675818997 0.623674424057562 -0.24694414563695188 0.35467236361380383 -0.9841044991622023 0.6266342103697158 -0.6814378245522708 0.2034755704169715 0.21153340676673893 -0.7100700347986473 0.12216067458012603 0.7134801887213746 0.3717593954864813 -0.49956916974960763 0.11283798244413856 -0.5451313816225076 -0.8225591554679685 0.5968597816318222 -0.5865720080884 0.7229645575869383 0.7320422874828614 -0.5565306209822827 0.8421917848274902 -0.4525418794344582 -0.7485698898844806 0.2490702338482922 0.014892832133079237 0.302095492877807 0.7440765289767344 -0.31337742469238905 -0.5464258856010125 0.3648520868056928 -0.7816327593152024 -0.5526633386752013 -0.24194827036173416 0.19398239513657733 -0.893396702197947 0.18501599766765575 -0.0007662760842261918 -0.34200607126611016 0.27451442254932057 0.8739696231638001 0.4061650509177661 0.4733404318327916 -0.5643958311737012 0.07525190290878436 0.4274738332410173 0.6381085386715706 -0.8887457966038044 -0.09106893584240261 0.3100953558173045 0.8105168022492342 -0.7912827040949011 -0.3015605686839562 0.7204386284004969 -0.5403696705006342 -0.5985436156751425 0.11788388258923721 0.08790864392191988 -0.42797864843105904 0.533296842743574 0.3112911890355512 0.44851688765076103 -0.2670962163727133 0.6319754597507559 0.8776980709780156 -0.47918490658410295 0.0038738386302425987 -0.8981234508785911 0.7380308317769368 -0.5791209112758897 0.8150478779622252 0.9608522889131499 0.9254886231155597 0.2295002014323948 0.6164118917527355 0.4933451392497916 -0.9102612682025144 -0.2723466052825225 -0.2318066993420138 -0.04096443510250758 0.04729885613186058 -0.45465868012231714 -0.33460823041991516 0.2734412041772203 -0.6317866428654402 0.27643306248859467 -0.9650851832163523 -0.3843014822593862 0.0884441258800357 0.3257214147809633 -0.927581369419598 0.04077304943923088 0.9792556835746782 0.5889054652558714 -0.9446031053175401 +160 139 0.10670156196287928 0.9215938488971984 0.030653450697187612 -0.5948112402156955 -0.3678655056436868 0.5409926384288046 0.16845183991671542 -0.700388783474833 -0.5435170254117827 -0.01112175785891889 0.5359726341857329 -0.012597273534342701 0.22199330838479048 0.8479607126132618 0.6464848819271924 -0.8159822864892092 0.12541001192771328 -0.8193107065942338 -0.2092691802311466 -0.7453547776315834 0.34592815524904297 -0.833886207723425 -0.15220097380406128 -0.12385587471744186 0.7999165855340347 -0.6550840851309212 0.9926709562157987 0.5146374934697351 0.8232018024868859 -0.2926207546250217 0.6193870011932137 0.5062790112732345 -0.8101780053281804 -0.7040233898543493 -0.8361592241307731 0.6315674289119375 0.9020701261932365 0.01851788808994259 -0.3256320772631969 0.09203925030138183 0.1134322142736135 0.3031503472017938 -0.7844868105742151 0.300173273486227 0.4971653937808813 0.5706804417119973 0.01657579183608293 0.834204716305877 -0.3684558655976362 0.5589716219353196 -0.7565767453240346 0.6668960404895683 -0.10944528791920338 -0.3829097674686577 0.14847957111627808 -0.29341448838908213 -0.5536555055041483 0.9563410740295726 0.058854080602380954 0.3423127069589762 -0.07740338311605544 -0.5405622883924841 -0.4739750216473235 0.6841483722435726 -0.9789481589209086 0.7357216096895889 0.09411667550927949 0.6199622177475692 0.47545721866248236 0.8024565360881233 0.691804200558009 -0.9614531039546252 -0.02316089124196319 0.621116597302336 -0.8603192397218062 0.9965943879317583 -0.6490858433230569 0.7513945811153304 -0.7748510628204348 -0.05041265962373531 0.8481175006765156 -0.35688597337443406 0.34739689454871825 0.8812162407323989 0.39287129285100875 -0.22116081970568935 0.20495302268425575 -0.6062408051275432 -0.2203445442051375 0.5770084040195607 -0.21533679445145237 0.7621845584214175 -0.9258062336044213 0.013386392646785206 -0.6541854503472022 0.4933613353822959 +160 140 -0.840687830194053 0.2677087431109444 0.988780039140746 -0.9097739687808231 0.5804927427815301 0.33036366461430244 -0.5832312391314209 -0.026129577106796642 -0.12800702493077365 -0.7262785612079963 0.8391226316355236 -0.5506145193252796 -0.22168908647426533 0.6645559267735486 0.35231527604884505 -0.5420426586574472 -0.15629655145368448 -0.3582898685168432 -0.7052033483532725 -0.6908055965742561 -0.941304580971668 0.7571926836421383 -0.3752872845495314 0.5373517886411472 -0.5805552409441819 -0.7686452517592757 -0.5339844859649658 0.4469218696425119 -0.454776804351251 0.4903656983487603 -0.9487138305097462 -0.8364634594533489 0.6268553454490822 0.3421157076967041 -0.6299197455405454 0.7208631446574494 0.4211078076396946 0.09420447998932024 0.7180048363630345 0.9124807878251271 -0.9101709800376223 0.8193612815724078 0.7928396327524196 -0.37566253774209235 -0.2031861986541592 0.28303270149014903 -0.4962001639024862 -0.1453554635350005 0.0702272470998484 -0.47757257876058623 0.4369920627206323 -0.24606617990677937 -0.5887203889671282 0.46049445172656056 0.06973307420005459 -0.9880950983255825 0.4179985285470209 0.33794968072044007 0.21675723205947883 0.3269104448771889 -0.8135977276172779 -0.5216006019966049 0.4483176949830492 -0.635207728348631 0.5058008658568078 -0.8024242134848452 0.7096932468019306 0.9649817345961358 -0.19180415996025535 -0.8005227442571416 0.8550820022892827 0.20945697443169875 -0.6220468275514941 0.876396669949993 0.9181054451552668 -0.6309296338646062 -0.9964664533029093 -0.051430541132910346 -0.2977349544876613 -0.9767971879634336 0.3132896403243386 0.14072202958750357 -0.7925666396707205 0.3367875681119661 0.25078814835722074 -0.8640661229933273 -0.24950450785078204 0.6965009337319392 0.7612327542283799 0.08851272997137993 -0.7961702793346792 0.8123494456644691 -0.8962880555319499 -0.9954214480581105 0.6726729473547284 0.490201799606363 +160 159 0.7534509218013166 -0.29724218044467765 -0.7038248011963661 0.4918270768424895 0.488592300876739 0.8879301848867949 0.5736503923174787 -0.6863209550470988 -0.348729978515413 0.268610847849577 -0.7209007200353088 0.6282644199310308 0.6740123694767943 -0.293928416512641 -0.01779892250901205 -0.5079725423234278 -0.2831493507734575 0.9678374769635816 -0.6054589004023974 0.1034806827154422 0.4642563237049744 -0.33084633374960726 -0.30252494263828345 0.11404959505324119 -0.8643525159340464 0.12930448877602263 -0.6482500223305174 -0.8069436861500452 0.28369618256619367 -0.598095111183437 0.4405944720801811 0.11481809511522845 -0.27934421388294783 0.7541852086530616 -0.9128861355038169 0.9174464752619231 0.9706618454394724 0.26678289198309013 0.8369276528771481 0.4797557295677086 0.6873259014029403 -0.422573980286129 0.004395162542333075 0.1512561705168718 -0.5478019620148078 -0.49965767020909246 -0.20902516817894212 0.2641061938453122 0.9112135203239575 -0.9712376413700219 0.2867835449339471 0.5705130959390883 0.12334879388435716 0.9621661804384598 -0.17542733087606344 -0.04845439271968943 -0.7944446369423366 -0.6578854827917777 -0.6656551853303279 -0.03380392060405235 0.7156108619187613 -0.939732995567965 -0.5520722043003587 0.5015465629227875 0.4724822704078089 0.8496689737099714 -0.5839494808279462 -0.5587905926226386 -0.013724307366463462 -0.1506193726507028 -0.9044803224774223 0.40491741491331434 -0.3298015108027268 -0.5750589270642541 0.9275890339136603 0.23432935477448513 -0.5071683095844546 -0.5630683124266804 0.061874948540143304 0.510701186809901 -0.9693767041748669 -0.7312606245123217 0.8836506499018801 0.2824240323364786 -0.4392942615481277 0.5672871914824755 0.0972161380051102 0.10104858917745863 -0.06658235271235902 0.08218276473000907 -0.23864101139680938 -0.747355383647045 -0.9792409512018332 -0.8296555080744219 -0.9962990495175921 -0.7913010701148482 +160 160 3.3027828245927457 3.802738956647059 3.612570394137289 3.8870203565641375 1.7540076847785684 3.7429119371161006 2.7141392167755445 3.380062872079262 2.9478202651935357 2.5197585307785344 4.685452454539891 1.8458459742810789 2.675705800324122 4.332688571763902 3.2512313813637768 2.8657982974531553 1.6811646150941975 4.179466675714971 2.868729176741356 3.143260955289019 2.7345117148066076 3.3928243213953873 2.898421676424653 1.6815175373293296 3.5438345081850917 3.040319496693831 3.8166022830249213 4.130853412934286 3.174273720228432 2.38211295521631 3.610052875880779 3.2009784183299184 2.9385717960477886 2.8940813138802888 4.163562608357509 5.170975017154103 3.724482870659048 0.8190664253465254 3.643547316231707 2.6520799257494714 2.9604791484776207 2.5906002888077486 4.226961233868941 2.101646935805338 2.89827735501974 3.0699951059159396 2.6117840082111328 3.100823472807117 2.0119270108920144 4.048132757392753 3.112026904283848 3.1333533141005603 2.1986095518614297 2.6837847698225095 2.198810110567976 2.0168221157196067 3.6129920858826114 3.902494053734455 1.8320582772653233 2.3507486039002696 3.1677393271854424 2.9107019817754876 3.4390832818827306 2.2501143655193765 3.501471094334981 3.9909752750772105 2.2692369274424835 3.91785946446155 1.9660046162267764 3.1694155207064463 4.083713836191193 2.8559632002140836 2.4091674775136944 2.727083475106384 4.069114985666019 3.6788440747383673 4.177882144289698 3.6904003708714788 3.083478641105649 3.485777974191838 3.979028638975992 2.862644371217568 3.92342730359896 3.6133270647062856 3.1639963209039688 4.124783125487947 1.5229900104012746 3.1317422235318126 2.797929201436755 3.0640736502734622 2.87541284705086 3.498147777081035 4.066206142838695 3.8347422231484307 3.7390906115961666 3.0343713232015306 +160 179 -0.9152018149342651 0.6732388585763425 0.739288836048277 0.8862704502462742 -0.1557691582577796 -0.7018588111957775 0.2826496992079075 0.7465564995160066 0.5019075036305276 -0.3847094655659895 0.9392279945015245 0.17035355749166858 -0.46138393325481 0.7243333054113821 -0.809196740225038 0.15631780166686426 0.4338048847330236 0.8418769245682078 0.46255960022660014 -0.9615623200013215 -0.719976380420905 0.3092078571844026 -0.8944853977785758 -0.29384610058657956 -0.3226034707240195 -0.7003896928522069 0.5148728497294255 0.9134062918236134 -0.2073688231760895 0.578857481908821 -0.34116649901223917 -0.4819453766797308 0.2137397834140573 0.909877312342642 -0.6569847035793881 -0.947241658608744 -0.36152026827058625 0.036764847873662854 0.5996992733904467 0.05669796087760015 -0.2564067401828425 0.4094076655275005 0.7207618805754932 0.03324555781637617 -0.5727695544327831 0.564319348870248 -0.3554219098097744 -0.6788435774887938 0.05550312210989983 -0.9312867607699125 -0.7487576445456527 -0.6696548663212254 -0.3105985398006492 -0.22256445042085127 -0.9841813564459709 -0.2832726724316015 0.8127068659396257 0.28034006810949696 -0.0375801327008245 0.20361310818008937 0.7051386417948673 0.04147867964362972 -0.9356284316380397 0.13492017178275084 -0.6296643941967874 0.513207215871589 0.5466938415148235 0.32177285296693725 0.5364352354180157 0.779538650864958 0.017797956976089546 -0.9610116372542239 -0.590671848881879 -0.46086695424585367 0.07514280595817868 0.8166054710501396 0.8232853857457787 0.6062767663150248 -0.3759434360667482 0.5986307523325076 0.4396545979032427 0.7316618710381493 0.6351669560777891 -0.5297536801817253 0.3535960580352069 0.9958102867236562 -0.29569388844458455 0.700772265482932 0.07914889614166376 -0.9334592307392995 0.2600839991252506 0.38031577821526197 0.11313695068000085 -0.31435849022632967 -0.6619822258305719 -0.8253733740597557 +160 180 -0.5016560176797338 0.7447903670002811 -0.5875890482748272 0.5157683657155374 -0.14617155389465952 -0.8462509362349768 0.5448097444853117 0.7896852555196154 -0.9583418503993328 -0.6268291724309512 -0.892758699564772 0.36511121367614674 -0.14020276400145404 -0.9315315466527392 -0.4807908999423771 0.22352335550304026 0.20902792836201178 -0.286459226276756 -0.4961525763686794 0.5118039780734083 0.1487184216703059 -0.8958673689797059 0.49504291854078186 -0.06189528306074443 -0.03391018755215458 0.37966189865336 -0.20128314399498026 0.9470374125289331 0.42425088032566105 0.16984452382996795 -0.753892206665143 -0.4940403651413219 0.077716642896966 -0.06848760004465881 -0.44619379585922125 0.9593315707201449 -0.4146163817938837 -0.2771706003577772 0.5814972919599986 0.5817807840572169 -0.08113951135673503 -0.41169159837574565 0.9299233413647463 -0.9731035517803659 -0.9463165153783155 -0.9114908252864746 -0.9031961324220823 0.2538825084267502 0.310726641858736 -0.9057436593545736 0.8648727596133508 -0.34256549006951387 -0.25289415582827024 -0.1363680692208491 -0.47756320910723815 0.29611415314575895 -0.5693774236582885 0.8428809219423614 -0.8291443956120019 -0.6145021640955544 -0.02673995889681735 0.17511628213010377 -0.6464708710317566 0.12506231109289234 -0.28369949475468204 0.9916493558981319 0.037072383241337103 -0.8693417037704736 0.23801363822256083 -0.35128087013380416 -0.6719855952612885 0.15379156014302242 0.7316005836524748 0.10228115102281232 -0.9658849293179972 0.21836708687039486 -0.3882584216135876 0.8223594732840882 -0.6715698167959827 -0.9805722138342234 0.5909424956889526 0.12039470227213855 0.9275816707973585 0.6845946351784222 0.9580889720320691 0.7215361396815332 0.07722333166058903 -0.09048934383576768 -0.9338525776919939 0.739112937749179 -0.619468927648851 0.7147426977477629 -0.2804107076089022 -0.7937121252939987 -0.23000711412675745 -0.04984306269333172 +161 141 0.6702570297284249 -0.48621117175126427 0.8694136831771133 -0.7247202053501578 0.014317399687693744 0.343624570630122 -0.30629535934651986 0.014477817154551431 -0.6448897886083371 0.8737353809870854 0.4795629293108097 0.5738987053459288 -0.048861091062986306 -0.029748009163811373 0.01514304578303527 0.8422171493736064 0.6437173480817588 0.6666363529203729 0.8322377993892889 -0.32615322736565466 0.08117259606523453 0.2673273216735026 0.23035789129067696 -0.16440798586785 0.07043657483775778 -0.676660641768801 0.7765332689380706 0.8465365879042963 0.293982876700261 0.4617587333007871 0.5682517658353425 0.42669414171622244 -0.8575629970307754 -0.1956977865931251 0.47650844635146616 0.20376406533296687 -0.11709728357522864 -0.2545086962511658 -0.39055128947898976 0.5494760621843082 -0.08406050994740877 -0.35627424295376975 0.5079500172437408 -0.5750129276376421 0.5999277158406491 -0.874860236148369 0.27192414150413646 -0.6031362026888285 -0.11656885100842995 -0.9588013974815623 -0.8898605063321852 0.15030221502638996 -0.7227650643682397 0.8327897469603331 -0.7420221893103562 -0.9684509259067717 -0.5135077819369684 0.8614779215129187 0.11605513666409917 -0.29146079902875943 -0.7884687165379931 -0.7360254317005146 -0.061964648513005205 0.49348939070633224 0.6819636245779628 0.41634849448737277 -0.4335642689430217 -0.520047694385698 0.08393776680721965 -0.6048746358400872 -0.6322409166822731 0.7921692554803381 -0.897512563418218 0.7933609993304112 0.8668041885509314 -0.6542136962210852 0.6311229475820326 0.3927210917646602 0.14762886022099186 0.8053502197071283 0.022516966992472964 -0.9012552516079282 -0.6326153752815107 0.6066051775747687 0.43535374477862 0.4736599911896229 0.4169390028181954 -0.01718865158545224 -0.06376305207735267 0.8906784104658636 0.8232725517307378 0.7021265676955377 0.8805515782378772 -0.8069586294645481 0.5912300400191395 -0.2893275106811497 +161 142 -0.596145638584092 -0.40367869223971464 0.3702081897827041 -0.560000430347467 0.8692813809229101 -0.4294763119431262 -0.43793733494761966 0.0374976779276468 0.25261254563821933 0.020764354538310714 0.21895059561251595 -0.7081259983425641 -0.3888211991301964 0.5735784098262577 0.17582384852401067 -0.6846448085499501 0.9240173124406854 -0.6160362510854183 0.49072312026693843 0.06917898246323562 -0.39150913979708735 0.5165530059907306 0.5866724675007766 -0.6923381289061206 -0.6184256516418769 -0.6081955500550549 -0.041762468988712165 -0.1985334731335262 0.6753946026183397 0.15688543261545207 0.32193374529671615 0.8993066877938114 -0.33281055815788885 0.2881823680026745 -0.4696055474351293 0.906034904883904 -0.3975278220532015 0.2334346460028578 0.9787880409861602 0.14025272341154293 -0.8836121300403157 -0.06541415425284147 0.7899885692024216 0.6417780397315755 -0.6822786065882669 0.816378201810513 0.9936027161649497 0.17299312249876952 -0.06038302275921459 0.9804162899636004 0.41636602578680426 0.9494094849890615 -0.5890886871804544 0.38471198279687635 -0.25904995525701247 0.8310458253948301 0.04500677748479931 0.07555221801144629 -0.6742560069963368 0.13397297433540678 0.30411778476702 0.771890243705807 0.8331104949838171 -0.7597841778192449 -0.9482126510302773 -0.1571537418152058 -0.01835757635318158 0.22339206855055616 0.28170825019509627 0.3294561674932952 0.15997822956927377 0.38719651371520114 0.5157423122001072 -0.7545106635570458 -0.9274073291758589 -0.9389023855088774 -0.3412616680150917 -0.6819867389838297 0.01483659375586277 0.7768912777826624 0.18210648427934473 0.18901315794701445 0.8237607654112689 -0.3644981366070814 -0.11567983533908865 0.5265292515548634 0.3485903001216566 -0.5090216640395737 0.4791844969754284 0.7507810752152988 -0.39133034509740283 0.11887732116442962 -0.0790900872372442 -0.9875670067767561 0.692519239473824 -0.4764089970297083 +161 161 2.8565169192648208 2.363181687022142 3.3497801143348145 3.586272071535422 4.039898293377256 2.3448923735773035 1.8070562266361982 1.8434709201131039 3.4874845827063075 3.3994416331541695 2.813719431049738 2.822681531934022 3.2235190735701575 2.7369034771788305 2.8106543846193244 4.353388255264933 4.040448769811292 2.9594457534997995 2.9551624477255123 1.7567146578447208 3.402154104181606 2.5809197229424545 3.152345099193116 3.617282562446624 2.864704124375086 3.4854178839113503 2.4139085498147965 3.087896304390239 3.5974705793269246 1.8401047765297451 2.4259213012373975 3.1324176483327113 2.3185511177352147 3.2244950480477694 2.1996886257717336 2.8719907272268057 2.68583720398547 1.5168797011689668 2.843489494003019 2.2915707081351315 2.231610413262362 2.6873353407893728 4.709259982929999 3.426850355986291 2.6406230961028614 3.190782135781276 3.6226633832705373 2.47593902312783 2.0069024793679646 4.649653449327249 4.142122417334963 3.262304423265485 3.4379657301755966 4.400998177159661 2.766507996241166 3.9846506616581214 2.8019473449173184 2.56436145590188 2.0777323199491464 2.8063898626059007 3.201095241598301 3.313815386487561 3.4632047304097204 3.8518644363649037 3.823494882342867 1.936169635385808 2.50123993414659 3.0891286293333984 2.5215966166110713 2.959966362703837 4.2928647198610745 3.298120985993955 3.2411222953404977 4.211988841731815 3.103827620377664 3.5226988859713035 3.6733749505861297 3.5637258036488983 2.0522786955596857 3.811910244226418 1.8610012233890554 2.6795906063729005 2.625471117950441 1.7684352235841447 3.2633653175588657 2.1221539017272644 3.200876694993662 2.5994789133050578 3.2690797412948016 3.2547928680986855 3.6829631079478276 2.740740421234535 2.6092579672838947 3.279388779728591 2.5834796220515472 2.8861838289177895 +161 162 0.07343876327374566 0.13410028071723112 0.6375399679702876 -0.921564733444521 -0.746737037061366 0.05462361623744805 -0.6129041160212321 0.6518079114523645 -0.11084166460557277 -0.3966366557323857 0.7327201701106902 0.027006095862427415 -0.7577765249454156 0.5153059471533201 0.47427406180583564 -0.9035575482385356 0.8629134263932265 -0.5967721116358586 0.3563450977779117 0.048890286437359265 -0.7860927082254632 0.15300101074864414 -0.21787648985545505 -0.8932330017256673 -0.7365632424922071 -0.5936324556182271 -0.05665801120841474 0.1376355732092236 -0.06263937979688783 0.4909927029767136 0.03225247403428333 0.277713870069358 -0.4560871579299366 -0.4359405989577718 -0.4312925384475723 0.2992022867680233 0.5227856703215703 0.19562466223458586 -0.01915574139365961 -0.2461147463687281 -0.07499099826412281 -0.44450089359370093 -0.930955115177279 -0.8648569876927015 0.15558043428394797 0.5692879383911393 -0.5925603168185747 0.24309579579901675 -0.3802097729072009 -0.6407007525212489 -0.9351540993870837 -0.5614434345885884 0.882019782049575 -0.9998094904161094 0.4482371296929537 0.7232751149932675 0.9535590313880169 0.03973474663243959 0.15315162454450792 0.02324852505737618 0.35336880652220115 0.4231349054864444 -0.6998181264204262 -0.9441333178926898 -0.7367173086220031 -0.1863965565090402 0.9598849468907746 -0.7408185981990232 0.6007208381655178 0.8495618032440218 0.9946608995599364 -0.4847920081729029 -0.6731680820816341 -0.971429868550632 0.008037750765008456 0.40054992004075074 -0.9126022717168742 -0.4827667450733095 -0.09163044490991346 0.7389688463315762 0.6074000334521961 -0.7062004475998154 0.10009818017262417 0.039380104263734506 -0.982582865483232 -0.17169108064491279 0.1866771908250382 -0.06404987827608255 -0.5692194320216069 0.40074429520484434 0.5284600349187558 -0.6458928113712699 -0.1607350765455937 0.7152111536593975 0.6102174804048444 0.6003629900311982 +161 181 0.2691773165049356 0.42576501717176174 -0.794319162443722 -0.9375502884108848 -0.7421333419012057 0.3984376524103572 0.03626994527865546 -0.45428265556791203 0.9737148760579102 -0.6120578744701481 -0.7403135861687782 0.794450032576143 0.891619076710269 0.9119879274478571 -0.8055218790829517 0.6478144615240362 0.6826651849185648 0.14526648931089015 -0.31492850884027557 0.018495164022214183 -0.8670497555338499 0.42784995803779324 0.15187625358998869 -0.517264137773283 -0.07370265546294141 0.24616517694636642 0.20940539348183673 -0.7564455854463683 -0.9095390468358755 -0.07599693995002421 -0.7695989590673997 0.7834495324233333 -0.030752889971491282 -0.6931355404167345 -0.3268417621600752 -0.28023549172974893 -0.29030082031688065 -0.002605918547171626 0.540226233839544 -0.6277403019848027 0.8454102857116454 0.39314389418100903 0.9024819515189941 0.6570100513869859 -0.2139622251129245 -0.5929408344261999 0.460637278141268 -0.8604667285863701 -0.7235399947937922 0.42417419124091693 0.8027644175065942 0.7264869411946597 -0.4219896658166926 0.6521012318056185 0.16181179719588878 0.7131928226388566 0.8858324868190659 -0.6295069388472525 0.04472782645797846 0.5915815327154261 -0.9695857684213791 0.6968290535894031 0.9880279271444377 -0.7869542172893138 -0.4607665404909942 0.8754070611380462 0.002478475817298653 0.994276587462837 0.5211642063275059 -0.14790150764961196 -0.6832528257966559 0.8619414370516842 -0.7795897097910331 -0.24347174338506616 0.7395691815092449 -0.4079415720281703 0.28715418680937055 -0.5340496925992064 -0.7789536253366787 0.7020982902338562 0.46141738023240153 0.15305003902644598 0.18714567903555857 0.042067535295315484 -0.37433258788571133 -0.44127824366528823 -0.5281028491295485 0.5568763942235762 0.9315963517759456 0.9543213147616141 0.9379554449580394 0.6493528139611053 0.5457733549973918 -0.0678471581131388 -0.37224188212351494 0.2393938179858366 +161 182 0.7955487319902517 -0.14286861822701002 0.6164356783612075 0.2501524480235291 -0.7815292595661811 -0.6637632768391972 -0.02404363794503883 -0.6669354806487637 0.5066168868574576 0.6114786174563889 0.42574612033718373 -0.3346635278846217 0.47479205936696434 -0.5823167388147017 0.916901962535263 -0.5591966582010441 0.17961175177555977 -0.5513211996179472 -0.38154403066228504 0.41407347408172135 0.34750163152995395 -0.5189769331112615 0.9734594705357362 -0.9776781942473289 -0.5472441330115714 -0.7416148044666218 -0.7335069093035425 0.15854173163002017 -0.7179695082299107 -0.2741850720243322 0.7206398931600968 -0.0283452161494393 -0.5492810195233848 0.708482149602818 0.10890778681920521 -0.9647530481675117 -0.3815176096080761 0.6360817111859685 0.8516971561220263 -0.0955808236598803 0.3274488344921458 0.6477227484319741 -0.736196642627533 -0.6190410518435814 0.14814119891160815 -0.2862222221303914 -0.5582985186303222 -0.5912670582869539 0.15355327440918587 0.8676926423440465 0.11004798786888337 -0.20165802595627702 0.13339667806998357 -0.6716970988511328 0.43667064771878006 0.11471363700332282 -0.13119409936468385 -0.9104597896913154 -0.11515986566610503 0.9050544123333597 0.6258077911012208 -0.6548499911550565 0.025870126110542513 0.7179430994128708 -0.3720498102143952 -0.2335659867236033 -0.7286608345958803 0.5588879176835284 0.17529777681422942 -0.4191681579786821 0.864267743421181 -0.5937874942696926 -0.22271966072213334 -0.507003941159414 0.3203401803908077 0.4211642944442917 0.5790469588454414 0.7958449130001408 0.985304519022542 0.08296126964186801 0.3756108256106607 0.505284658245732 0.7216461215132093 -0.05692236388861427 -0.5311466974234709 -0.40541715178408255 0.9568762098181829 -0.8520813060724084 -0.7706191931061457 0.07985899872554825 -0.40047804432046585 0.14012750727729295 -0.8548342597055505 0.5584041511594862 0.2916356968204279 0.509140003054555 +162 141 0.3642272516428937 -0.9143374791552985 -0.5268217826004193 0.36174056477130634 -0.20177336283441671 -0.38034619014591464 -0.5415421092078754 0.8297144760954775 -0.9761432348301271 0.3271993704438634 0.30253766018075434 -0.722903162447796 0.3013727102553887 -0.049817305150591684 0.4544589399971539 -0.7865196951231337 -0.6428872105486203 -0.46219631066014766 -0.6077210982398231 0.030778586380274753 0.9076831634261919 0.6655262186748587 -0.9206842178070482 0.9737225427436669 0.609600883966037 0.9334423271716512 0.9552517223315873 0.3252295171621866 0.038298376600871764 0.36834517829614577 -0.870098416842914 -0.9478000053538245 -0.8946456698534291 0.5146438199805885 -0.6012300604969203 -0.6817405694100311 0.8752887895978678 -0.09329464998484749 0.11333243704873963 0.5758727292603174 -0.4753139791379153 -0.47051863507647673 0.9936751993256148 0.5025126785997522 0.12315439721320853 0.14372148659938833 -0.6885647883403021 0.49162027092879623 -0.6969017201488883 -0.07828556556899757 0.6780849496909567 -0.4415721990486261 0.9972345817244659 -0.5660006195065124 0.6835706249069333 0.9320847778139332 0.6928746630545073 0.9713141107708279 -0.7750521514073625 -0.5246645630634732 -0.6610803342753082 -0.4468070336779866 -0.5370761221510387 -0.5481447623283606 0.2315762383798874 -0.02873073944425064 0.3547979240157604 0.17571243341377762 -0.24614745266873372 -0.9197780497854959 -0.4838094642478479 0.6334138011708743 0.6738989368827288 0.17413287325875815 0.7712330884970393 0.8045502154797235 0.5138940234467788 -0.5296902376871591 -0.20621514709712185 0.852192923301206 0.871370448846507 0.09999713652888409 0.17623258164347355 -0.34313219169924825 -0.37170824905964706 0.4373877822486023 0.29708802194119355 -0.7440269201655756 -0.9850609615926389 -0.7317780043211897 0.24571315707910002 -0.22238540352414038 0.3374579064608132 -0.7322437824166381 -0.15405309126082 -0.43980163794127036 +162 142 -0.7026546816267389 -0.4458498026004458 -0.17288029993334164 0.8381973397761804 -0.8849561652591629 -0.15684235435605753 0.4770745553815492 -0.8720078635230022 0.01869550160427358 -0.8549492337099882 -0.6312713403094341 0.11177264119225017 0.6900818669227418 -0.043354792377795714 0.2231778910441926 0.04760119672354124 -0.04475088103155356 -0.988255131414481 -0.6388708141256694 -0.35614306256154604 -0.788300286128141 -0.03412963473480235 0.9825827505736069 0.3513181425022984 0.8529986455710672 0.5271801923235264 -0.060372399781872144 -0.8640973458546908 -0.19586309760226217 0.03543156357670152 -0.9916494360538561 0.5592294567605018 0.11561022664166765 -0.4107850023234849 0.001937758282333002 0.5377731492327773 0.939618639787211 -0.9909871652906628 0.6783254587280638 0.42694267726911916 -0.980222341130939 0.9806468207674792 0.46484995636286364 -0.3515163701806643 -0.41060937099733597 0.4276932473318691 -0.43652335527187125 -0.08765536227057069 -0.9197218659179445 -0.8768598016261127 0.9420485118111901 -0.9978910189921935 0.8800006217880996 -0.990972312498938 -0.7040621600651218 0.3247088704323453 -0.8115651670893513 0.7072479309600621 -0.0905272750765691 -0.4674840157769782 -0.025203575268753386 -0.1855803410475365 0.49137083277118876 -0.09120629374271316 -0.4055490414111891 0.023915497629088955 0.4756535178070984 0.35176003772117714 -0.03073411989845143 -0.9754730262984086 0.9805782179632165 0.6459525157166617 -0.8208161917082784 -0.7953709203331718 -0.03194972614396985 0.27760788367805644 -0.04281155114784374 0.6579429576167355 -0.15851156403150557 0.5437667885025905 -0.7800510850233258 -0.2753878510396748 -0.450138232207449 -0.07039852551717818 -0.40286274969971214 0.0731942219560886 -0.23563665945350465 0.32696889239838267 0.5709744027468255 0.5337540137393839 -0.008082997897237432 -0.46612778742477023 0.3076132174241104 -0.20612150554908393 0.3245603013882328 -0.5077528257124324 +162 143 0.799059053658387 -0.9767358578264491 0.5806554021383636 -0.42392914596145204 -0.20943723724556396 -0.9089464296953862 0.28833860364753616 -0.5714685116308009 0.381233141118164 -0.7792327218323032 -0.06215433577129681 -0.9027460451997014 0.09229867019203453 0.9594075157766027 -0.7745510958802506 0.9776981551699946 -0.8676465618996756 -0.8499190900371836 -0.2749866350691319 -0.5286738696820141 0.8122855719276172 0.09118915054216803 0.706245386648269 -0.35902352249228486 -0.656255055834414 -0.9834162929021055 0.30409721633265807 0.9076951198825192 -0.9443363290812588 -0.5171224728283124 -0.5508509541161535 -0.22278069984065474 -0.04068193277455068 0.38078922418902095 0.787215919794592 0.7741507830338712 -0.10223184551787012 -0.7357627388812773 -0.671718458268487 0.7504506404324642 -0.947628236146344 0.56885065429564 0.9840748269129367 0.8429528222267224 -0.6340139358710635 0.327299026511199 -0.5389501717200482 -0.2566087887489332 0.7274211947485476 -0.29033812431841644 0.09661028989760223 0.7514823948285836 -0.3312049539589026 0.6048835671145565 -0.5712189638477321 -0.11575987261592169 0.8809796230407119 0.035255769061372844 0.03284176297866792 0.3196302410094509 -0.6279020692889723 -0.6562465869390373 -0.37362270382683915 -0.3683119013440048 0.5050376435434192 -0.6964109595668335 -0.7473692550319566 0.6939713615402263 -0.004905710785199746 -0.3736385306511647 -0.08769520477744486 -0.3887338825758506 -0.053873188231780667 -0.9964690777164429 0.0051614674984414854 0.2413404745941079 -0.03618320949398535 0.6513154699191406 0.28017243558970173 0.8624877719147714 -0.9295030914080746 -0.287121421551479 0.8301779997013528 0.24035188795371343 -0.28331553082561145 -0.8406763045605021 0.522744161269256 -0.8954743978554967 -0.021895941882803305 0.2474369200203561 0.39461117950300717 -0.38148306149118416 -0.1935254629148413 -0.673498401453452 -0.8485919572394804 -0.7002512133008774 +162 161 0.07343876327374566 0.13410028071723112 0.6375399679702876 -0.921564733444521 -0.746737037061366 0.05462361623744805 -0.6129041160212321 0.6518079114523645 -0.11084166460557277 -0.3966366557323857 0.7327201701106902 0.027006095862427415 -0.7577765249454156 0.5153059471533201 0.47427406180583564 -0.9035575482385356 0.8629134263932265 -0.5967721116358586 0.3563450977779117 0.048890286437359265 -0.7860927082254632 0.15300101074864414 -0.21787648985545505 -0.8932330017256673 -0.7365632424922071 -0.5936324556182271 -0.05665801120841474 0.1376355732092236 -0.06263937979688783 0.4909927029767136 0.03225247403428333 0.277713870069358 -0.4560871579299366 -0.4359405989577718 -0.4312925384475723 0.2992022867680233 0.5227856703215703 0.19562466223458586 -0.01915574139365961 -0.2461147463687281 -0.07499099826412281 -0.44450089359370093 -0.930955115177279 -0.8648569876927015 0.15558043428394797 0.5692879383911393 -0.5925603168185747 0.24309579579901675 -0.3802097729072009 -0.6407007525212489 -0.9351540993870837 -0.5614434345885884 0.882019782049575 -0.9998094904161094 0.4482371296929537 0.7232751149932675 0.9535590313880169 0.03973474663243959 0.15315162454450792 0.02324852505737618 0.35336880652220115 0.4231349054864444 -0.6998181264204262 -0.9441333178926898 -0.7367173086220031 -0.1863965565090402 0.9598849468907746 -0.7408185981990232 0.6007208381655178 0.8495618032440218 0.9946608995599364 -0.4847920081729029 -0.6731680820816341 -0.971429868550632 0.008037750765008456 0.40054992004075074 -0.9126022717168742 -0.4827667450733095 -0.09163044490991346 0.7389688463315762 0.6074000334521961 -0.7062004475998154 0.10009818017262417 0.039380104263734506 -0.982582865483232 -0.17169108064491279 0.1866771908250382 -0.06404987827608255 -0.5692194320216069 0.40074429520484434 0.5284600349187558 -0.6458928113712699 -0.1607350765455937 0.7152111536593975 0.6102174804048444 0.6003629900311982 +162 162 4.807680416231459 4.902315962401444 5.098737056011304 5.006439407026731 4.654622822346325 4.1741256388307395 4.8950688405688245 5.417965071324444 2.8634771056132995 5.189084001257901 4.055946660798815 3.5415147924640324 4.68987805121742 4.726989413498998 5.006285241384928 5.61951189678569 4.785141032651785 5.95379004923055 3.457443029581665 2.8094686081814757 5.399766747470717 3.0490716393612627 5.463720090046982 5.627442953979515 4.399425090065544 4.354435660183401 2.911474479073611 4.485617977286553 3.8095543786548873 4.330036153317308 4.5813135226728186 4.422947138605515 4.278390020806304 3.6411144491902654 4.714484165304803 5.796514212712457 3.6641974791792262 4.925913368227674 3.6843900127683327 3.8573798891775746 5.2346315559713 5.5178635584486955 6.655505799245039 4.718650732657558 3.7718752962407915 4.91514615175774 5.324242509900233 3.4491307360581187 4.4792942010063035 3.5516365178376237 5.183637375691292 6.634175681556724 5.915383510777332 6.2486818692857415 4.554739404583677 5.077749034655355 6.028546704937082 4.04296696144687 3.7056259956275066 3.9483248696273283 2.8148514114124525 4.25539518787956 5.817445291916636 4.448929473196233 4.487005653156656 3.365528789581443 4.6327669628507575 4.762650430762685 3.827643588457504 4.822800390554727 6.123998435556631 4.822705318187518 5.127025927183283 5.181964508583106 3.867126207893186 2.7245110163695188 2.9615037764552756 4.435199211482428 2.5100306856874885 5.124592129098662 5.746770373251288 3.991524644144045 4.323166283210582 3.7372889089346586 5.651299329212242 3.8329400545047774 3.42250476089129 4.229305834972276 5.665315713575765 4.889398763580611 3.901215901639909 4.642536203210747 2.3700310144080285 3.931550247881181 5.456092844584666 4.113163677011446 +162 163 -0.9465212998247994 0.8067385664992024 -0.7784452249269038 0.550276852070223 -0.10600146207774053 -0.7188090757810262 0.46439390474550724 0.7420371721055812 -0.08289694935925285 0.5465930234437824 0.3010804418656565 0.4167148140176651 0.10829942902995215 0.5014771872062105 0.24749316414424904 -0.3981141621839066 -0.3151457304004106 0.15161257792519978 -0.2087838657180623 -0.4861068733210758 0.5049038406550286 0.6246265823368276 -0.25320270824060964 -0.27949402981067695 -0.39076503877028057 -0.10671834875022479 0.10109345669362435 0.8553694059666339 -0.3405942871598917 0.9998983105949129 0.557088746269051 0.2471608816026971 0.9614661108255238 0.047187809128751645 -0.17031377817862392 -0.11634958045051058 -0.27311893440864177 -0.9508466410051133 0.1231427180388549 0.29481078343156364 0.5801648263188881 -0.3633650543983271 0.6315155815125957 -0.9074413688834311 0.9295722148036643 0.5054047316228727 0.44687548885590744 0.5888722454055741 0.010674859654817626 -0.324155593123989 -0.5816939319642838 -0.841258168868362 0.30358402366438586 -0.42871942502417504 0.5466960222249404 0.04583288438382627 0.05104132322071142 -0.4058277324556099 -0.7608762860344946 -0.49160267292292614 0.017246653982730953 0.5934307724919885 -0.5035714069856905 -0.5210967124177743 -0.06828746957165066 -0.05397764044766373 0.31729453559708665 -0.9243859970646562 0.23617592604781912 -0.5910523038263782 -0.4854384063911912 -0.7007012902808654 -0.3815666700441498 -0.9614704979073849 0.6002388808529706 -0.44678797155324257 0.4646549474460777 0.7809986629590053 -0.27182662719344863 0.14286520965503402 -0.7232036286676078 -0.5842443859909212 -0.8294599175550341 -0.7470240144501792 -0.8034984694219671 -0.9902619555405532 -0.294111987344291 0.03694672844989788 0.8745123039994365 0.5784346794934863 -0.7748004437020348 0.282410852077132 -0.3619196156516957 -0.5337826113948843 -0.8026954376492945 -0.06040820594223084 +162 181 -0.3782195113973388 -0.2831418439421838 0.5882153140424304 0.5861400244347947 0.23666560122957225 -0.5432546116211487 0.8667314378127959 -0.3090965058201458 0.35472975302079135 -0.6515687780048862 0.3017080189016672 -0.3669502171146508 -0.701290845870467 -0.5647743817492386 -0.6227921356579256 0.7679605650773595 -0.4999337831642392 0.37536197005304617 -0.9100787928522012 0.019321408020572584 0.06510823760627127 0.0069088878147356425 -0.8021174067431267 0.76127750428999 -0.016949466434626803 0.13257455013881803 -0.2335846347407542 0.16489172295919596 0.2199304434975271 -0.18631161801360863 0.5248387667623824 0.7394397162224382 -0.2673439291773123 0.510769446565974 -0.13300041931399909 0.99765143919084 0.2241735241050229 0.05504901975631027 0.9601263362869747 -0.3208459036753717 0.6829169200320166 0.823956847862185 -0.7984204393641987 -0.45833035624161544 0.5021121563666966 -0.5410149048717188 0.9653302079686059 -0.0853538574411592 0.4613826549013902 0.7625037180395653 -0.9859305401288392 -0.8139044132604083 0.8311501842876423 0.984728362407782 0.2664977787268292 -0.3282214261911971 -0.8411358189093492 -0.48859316657994856 -0.5634777652875778 -0.3619948695149189 0.12663581755592146 0.5220741140143863 0.8340289200710311 0.91372938427343 -0.9715007951816381 0.8416333411505177 0.11357042956573737 -0.1456808910279359 -0.5674486058062436 0.06768388096831557 0.759051811419265 -0.5735276687549637 -0.8909097190116821 0.02600922555558327 0.43858836566974424 0.1912540824521014 -0.08272993932315553 -0.8568064910603785 0.7123604577618459 0.1214688038394951 -0.39515615277437033 -0.843937925119391 0.731744557396977 0.7758668005782297 0.5880216997674217 -0.46942273042750315 0.21097887519402136 -0.5139495212126779 0.8507404423844636 0.43940844789700506 -0.5568254446558574 0.9353209488924601 -0.17625432761014626 0.006396138124675765 -0.6711732555328915 0.13602359859751556 +162 182 -0.7279618018526866 -0.12513591273777003 -0.8716457472374355 -0.8426900198489358 -0.5245324893638723 -0.25345575775920914 -0.5446566280769507 -0.6133521553794072 -0.6204032179595314 -0.5503194928944339 -0.7171807102665266 0.17837529834794452 -0.5428542377020007 -0.9640576306585138 0.6614226660386815 0.8231602300416194 0.6565591611817863 0.9262368547747777 0.40698496592545386 -0.11911950367630375 -0.7696195752322825 0.19873832227216814 -0.11686742260695993 0.5502686099058687 0.3651884242654222 -0.5201392084201515 -0.9129950047307989 -0.47695554961842546 -0.5031475112355988 -0.6400267061372502 -0.5476080907828134 0.5598501723903484 0.05362614638639185 0.13633624083146922 0.9576155616791469 0.7697604342308588 -0.10198263125107032 -0.12546245710086623 -0.06601390133216256 0.24167850969685856 -0.28733284364047296 0.9866379541543027 0.20421029691586545 0.3019370181446266 0.020309571433291707 -0.6893095149591899 0.9618669920669738 -0.2710974765324725 0.3803531967086373 -0.21664538230824815 0.03723746319539911 -0.7436244634059344 -0.11260524674072259 0.8611177793055242 0.438678754959849 -0.8202250108335809 -0.5900986272286155 0.38749437927485286 0.46093012145367007 -0.6140448428186751 0.45627140754604345 0.9340665206403151 0.9003144269299641 0.25917744366022233 -0.6039148934075451 0.16335410551441698 0.6325401957074039 0.7899297455429262 -0.7920184022818337 0.17010774496270864 -0.5321160667723877 0.5342794092046521 0.5871491333066436 -0.32322345641156924 0.7640273378840319 -0.2098057733842773 -0.29891792343814716 -0.2824005368081268 -0.25454468863897683 0.5987107575006831 -0.8528417745433368 -0.08947246107554174 -0.6359574801628707 -0.5716554506183595 0.7038012731186727 0.30017113284734065 0.446330219548718 0.5484119351756258 0.6093921011258845 0.6744503543295972 -0.28296988882477936 0.4715530915184325 -0.35838875931504255 0.4704468883934412 -0.7060662492178831 0.4662486809251083 +162 183 -0.3708311949029206 0.9600783645054414 0.6277145584053194 0.1240807747236734 0.7724369545337026 -0.6920491208302084 0.3944226177615271 0.3472849422254749 0.1040636611303345 0.353929005211735 -0.4477770787420181 0.15238979007303177 -0.915487108473857 -0.8313909059717024 -0.5994060400397745 -0.056365901099655114 -0.8894334574915723 -0.6081284326803782 0.05307995989350589 -0.448161721655685 -0.2750112968829612 -0.6585158641645155 -0.7374803169696378 0.5619213406944386 0.5641247384838437 0.014347904955767321 0.16911590164217993 0.7127904062718526 -0.6568867855357592 0.3355496581662829 -0.32209126647865594 0.7811504960194595 -0.9375964874517682 0.7601401628557849 -0.7441153218646801 0.8082770712501093 -0.13915739954663975 0.9070860465151613 -0.47381177197086655 -0.9500352060700732 0.7492276104338007 -0.5965864072756766 0.7910703094516771 -0.28947198687859066 -0.6060972270060079 -0.998871812589144 -0.17936600065267716 0.7076344215262471 -0.08132477508867986 0.09230009559432717 0.7031677854330365 0.7029087485576699 -0.786948028793907 -0.33335360437607986 -0.42166450367046404 -0.8200143697630171 -0.44612454106329147 0.2847008191293665 0.8351858354709014 -0.8082265460332576 0.2637394866721319 -0.3935085123255011 -0.9845136712024913 0.6138777602178307 -0.2792679174940047 -0.9714182647348248 0.6909726811674968 0.0077037937779771415 0.820384781009929 0.49716933925729556 0.9646462699533478 0.20878630324754743 0.2773944903039638 -0.5040827817269058 -0.9971484921350993 -0.15141036503522032 0.1326635227579096 0.08360244527648297 -0.5114170364871156 0.9542995822294009 0.14833738183946177 -0.5811937764380197 0.07041109233551679 -0.4331167750387701 -0.672377798391639 -0.46125486895127144 0.5564394867631801 0.925086353915598 0.6024942958094077 -0.8865449010222866 0.1859699242592796 -0.5857220430311105 -0.29531554616546085 0.14918389408337251 -0.42463759395819234 0.7811494186230663 +163 142 0.46134149593350493 -0.3502742559914165 0.27550639848505676 -0.45466065766706065 -0.7074465881350291 0.642505556891938 0.060420382053796295 0.5711847058458763 -0.5605975369298615 0.759812341619521 -0.20294411032322834 -0.4617268262373664 0.5707568016742428 -0.21377663538191705 0.7139450673547421 0.7624980125503307 -0.7988910671971641 -0.9657997821148834 -0.9231428260243926 0.1993681121352262 0.8419094874882465 -0.17259074874498825 0.9820036774659548 0.7326493445739299 -0.7745036793851332 0.19578720523835935 0.009639615996632767 -0.6878415106780946 -0.6070072887673856 0.5839807062064284 0.8491654673369649 -0.6971368310179409 0.9035464835447593 0.02758137720890841 -0.2207937281483261 0.2874013022342006 0.9006935609108431 -0.35488340679480923 -0.8427720873076159 0.8602487207516865 0.2679117930599477 0.19308520307372845 0.956248084205293 0.44863666061376284 0.05039920762073602 -0.5197553917685462 0.535796111309079 0.8763759321397395 0.7823253116481801 -0.21963804217764382 0.5671451326706733 -0.8136833357265514 0.9014636352324801 0.5116496471812102 0.9641896552521732 0.260055610627852 0.7061794014453389 -0.5632571274649496 0.20340826541176593 -0.4982217652603844 0.40857729803457055 -0.8879442105030995 0.9399160286642885 0.686505867380214 -0.6181248368763124 0.41162503173015974 -0.5279607192284428 -0.7100661174508482 -0.6651882858791034 -0.3979814008085152 -0.19943010784871795 0.5989318377989534 0.4763241563328875 0.2837109606085384 -0.7141342075070258 0.5878709345522801 -0.6878316361005774 -0.04755791842396451 0.4539600538576858 0.44262557786330725 -0.9989693558779622 0.3885614126128305 0.06178338087999613 0.9489269203856066 -0.8351444628549405 0.5584411822864797 0.6702437722286789 0.6789316842012993 0.772331872977124 -0.27223585229829705 0.4184306680873484 -0.37117216600602876 0.6223655752336466 0.2656070773046135 0.5500088639582903 0.11864792617651343 +163 143 -0.33864499508424095 -0.7045601219394084 -0.5662331367747566 -0.7503146742232889 0.5475113485627296 0.7921383246049842 -0.6602476939827977 -0.6544181022311237 -0.12746822901860888 -0.7197343036928767 0.7325000419140066 -0.4945123963326352 0.7282954494178655 -0.6039849790823835 -0.2525843824246108 -0.538260619471254 0.7808365613098782 -0.015754815481525464 -0.5553416802085749 0.9106793427016164 -0.6852102369769468 -0.658867510826987 0.5296268757847009 -0.989072946451838 0.7114203388428579 0.9272300319184228 0.5536533377328796 0.3892504535440071 0.49676196473424206 0.43600839847565265 -0.45302013355307325 -0.8444774604955314 0.33643637345538213 0.4908600060426278 0.17571660947999113 0.2946763707849127 -0.13931693547693502 -0.3949789142429898 -0.4254606576213995 -0.6076728423735553 0.35950571132886733 -0.6576671864770722 0.44064330444034305 0.1571126959302631 -0.6488441142799624 -0.9373583251423265 0.898861205381726 -0.762048918474034 0.2769604971748829 -0.24298681275404888 -0.0961995440542458 0.3407179512143257 0.7661529843399704 -0.2777879281782678 0.826768918836033 0.5248681331625606 -0.9012935933268476 0.8860665150740807 -0.4541455320121346 -0.9952309040388172 -0.10384604240975848 0.38137462250499254 -0.03563735100138521 -0.012291726941539016 0.8335041943997168 -0.582142024368004 0.5701703661938573 -0.7543150454543817 0.5997973368041074 0.3730523032788895 -0.33883757650151525 -0.27916036285485823 0.2860122089533037 -0.8256953885912184 -0.22985336308637305 -0.8962103387700988 0.5414065681237679 0.2488968416448698 0.856375363157259 0.9255392769284265 -0.3053955857060058 -0.9442067134598233 -0.16727544904569247 0.29722283794742244 -0.17736510734127298 -0.7257803269988956 0.6101642865667392 0.1234378800286744 0.8382520451652067 -0.5192739549148955 0.5661537598802333 0.9515033301671869 -0.9844293404731492 -0.3886444963918816 0.262889754269406 -0.18249070480748641 +163 144 -0.6168564685831686 -0.8470293587164048 -0.4881717344804557 0.36265252253558167 -0.621795065515726 -0.3835513822097756 0.8430521708308258 0.7742541703916432 -0.08260820263739799 0.31558980590023467 0.7230356423529034 0.4576053695480511 -0.2817578242327863 -0.0692563273423672 -0.7966918335212578 0.3442971327365041 0.02203537746444928 0.28060484788473317 -0.2798312384726134 0.12190298134690547 0.7964564322117968 0.17506932913192275 0.2781758743953826 0.11743198165110513 0.9111819017455174 -0.9853432150666566 0.3064078442861098 0.04184192958298816 -0.01403219383381793 -0.884553204066413 -0.3003331426995721 0.06935352349323187 -0.5566945144887141 -0.04936737893669574 -0.3103081739402931 0.2886483079944826 -0.2152209307476427 -0.18769360985669392 -0.8293261633691225 0.956157661315612 -0.2441864634768367 0.2537125871759056 0.013484221726957513 0.3205850530557457 -0.17542629341242133 -0.7205616918568851 0.2143899658513031 -0.15273659086102165 -0.2842043366449918 0.38569089569330606 0.7434253321318858 -0.03959438976592389 0.05014158014654657 -0.5731983642954563 0.09746263172377945 -0.5032401199230416 -0.37072902153735665 -0.7751848119006957 -0.6469295942016531 -0.021630997017151543 -0.27485714269221595 -0.5350612745913166 -0.4639221618329463 -0.046232157893854486 0.8304759911079898 -0.8678504785320147 0.567989829525922 0.6835474893783531 -0.6597303596040025 0.8485348857622541 -0.5260399084645124 0.1328573534081896 -0.43235241967220284 -0.12090673365353766 -0.9052671898796407 0.7331028583912573 0.21626402982803583 -0.0011653384708787407 -0.5370087463128526 0.6315298242798866 0.45147096940404374 0.0008317878053398786 0.7088116774872966 0.021924982191961373 -0.18246854090972886 0.7049126264283454 0.12670202892283267 0.1874158316113439 0.27844868881453855 0.2430099377776267 -0.31532777715116533 -0.1421782130800826 -0.4219698315533855 -0.052298199053175454 -0.45069159208065446 0.8970940074155962 +163 162 -0.9465212998247994 0.8067385664992024 -0.7784452249269038 0.550276852070223 -0.10600146207774053 -0.7188090757810262 0.46439390474550724 0.7420371721055812 -0.08289694935925285 0.5465930234437824 0.3010804418656565 0.4167148140176651 0.10829942902995215 0.5014771872062105 0.24749316414424904 -0.3981141621839066 -0.3151457304004106 0.15161257792519978 -0.2087838657180623 -0.4861068733210758 0.5049038406550286 0.6246265823368276 -0.25320270824060964 -0.27949402981067695 -0.39076503877028057 -0.10671834875022479 0.10109345669362435 0.8553694059666339 -0.3405942871598917 0.9998983105949129 0.557088746269051 0.2471608816026971 0.9614661108255238 0.047187809128751645 -0.17031377817862392 -0.11634958045051058 -0.27311893440864177 -0.9508466410051133 0.1231427180388549 0.29481078343156364 0.5801648263188881 -0.3633650543983271 0.6315155815125957 -0.9074413688834311 0.9295722148036643 0.5054047316228727 0.44687548885590744 0.5888722454055741 0.010674859654817626 -0.324155593123989 -0.5816939319642838 -0.841258168868362 0.30358402366438586 -0.42871942502417504 0.5466960222249404 0.04583288438382627 0.05104132322071142 -0.4058277324556099 -0.7608762860344946 -0.49160267292292614 0.017246653982730953 0.5934307724919885 -0.5035714069856905 -0.5210967124177743 -0.06828746957165066 -0.05397764044766373 0.31729453559708665 -0.9243859970646562 0.23617592604781912 -0.5910523038263782 -0.4854384063911912 -0.7007012902808654 -0.3815666700441498 -0.9614704979073849 0.6002388808529706 -0.44678797155324257 0.4646549474460777 0.7809986629590053 -0.27182662719344863 0.14286520965503402 -0.7232036286676078 -0.5842443859909212 -0.8294599175550341 -0.7470240144501792 -0.8034984694219671 -0.9902619555405532 -0.294111987344291 0.03694672844989788 0.8745123039994365 0.5784346794934863 -0.7748004437020348 0.282410852077132 -0.3619196156516957 -0.5337826113948843 -0.8026954376492945 -0.06040820594223084 +163 163 5.654051595375146 4.539401474385972 3.510739063219618 5.457937478094972 5.366576903565031 5.677383918655335 2.8680081306131813 5.158999929715934 3.137438141203508 5.124312662088635 4.370997968954501 3.6982254146845905 3.784259987741593 3.988391205603711 5.78686905942066 4.774428356318286 4.079263261655579 4.232941267671716 4.357261481264257 3.7963425010102236 5.973085778045273 4.319334661103623 4.225777120883312 5.968235698940205 5.679534794128033 5.070175530069441 3.427797366153381 3.8784816656247862 3.9270567106308034 6.761713635242055 5.179063256361314 4.916251637240979 4.127099371584438 3.2707655162949063 2.4542519104058025 4.323047878569198 4.9432348093199385 5.570146887861167 6.535233556403254 4.540220546285943 4.733601172267251 2.621363834456144 5.733714771697002 5.032254630173023 4.47251783284569 4.888251917078928 5.0896270583796825 4.143327228691026 4.300910512428293 4.884269520946543 4.890737188927077 3.5255482821561226 4.135563337656575 4.68984248760454 4.713258195235129 4.103930794202546 4.1473027786694425 4.838329930777482 5.149206346139788 4.053641405523971 4.289636838574915 5.177021756832934 5.538095960567599 3.0125355252902715 4.007896806597444 3.678444174291922 3.5136832553739588 6.18404371770245 4.094783077260008 4.488923047805715 4.865825744245708 4.8663302722409405 2.87390211341811 4.190178439092374 4.396191457855231 6.033110856156828 5.06644855244303 3.41015846491141 3.344432293445734 3.7120396700038887 4.558511379930772 3.497199226121708 3.7117988986470674 5.112494488578386 3.549498252682227 5.239120314131949 3.7267625692281237 3.7535504402244024 5.560169609449231 4.012236031936146 5.3250172974805405 4.119737833389115 5.124016593304498 4.9832353892214885 4.444352057979283 3.2683538276488426 +163 164 0.4928593690140175 -0.16632831368585044 0.658739413422621 0.025210610546507084 -0.724752573490355 -0.9864991563783385 0.07722470615716226 -0.8728472478160703 -0.3961820739934747 -0.7373126295230044 0.9691926862701159 0.3998443460260124 0.40605367694742456 0.09986462459212975 0.8481693067704652 0.28840187403087425 0.6040202404841031 -0.9970310892379659 -0.8026970479995497 0.09401631458129067 0.9935550669064908 0.3715692897757279 -0.21138265849242432 -0.9600905616800623 -0.36412336826747693 -0.28373974573833816 -0.28385371730518005 0.07924999179218273 -0.3260048682272241 -0.946862025639585 -0.9224099500374563 -0.9508104609971362 -0.09612432347512367 0.7804319915210052 0.6108621464910946 0.8256164439279279 -0.5402800631403422 0.9853315895145207 0.8334229332027012 -0.2596939755174441 0.9166686852334576 0.26398105540094985 0.6848852441310769 -0.800224977013064 0.8981794273730257 -0.24517697685537487 -0.7987332095616271 -0.19684289107452768 -0.6425966217088421 0.9958092218845469 0.4285426700224695 0.24936670249465998 -0.2339733040615184 -0.36383035361227867 0.6043702157772199 -0.25970280174327764 0.03315015166029567 -0.5716863444508229 -0.994172987366835 -0.6971044998405216 0.9037356616840353 0.015223370016435034 -0.7318032694273142 0.014205837602331073 -0.5094037168433947 -0.4349534203426024 -0.28904340095349457 -0.5464621476288709 -0.011132483002812776 -0.9201128888389414 -0.8718516540262757 0.19434588207761672 -0.43717674228336767 0.35735557942492435 0.1841258854625254 -0.7947166675467214 0.12090299956496797 0.7169316057270743 0.07381267243152645 -0.7730749239469548 0.7941252375577759 -0.23919445280757623 -0.19613095316712625 0.9027363261999806 0.34229015208532276 0.6642033260635165 0.2935643766418057 -0.6475725464275743 0.9949086539293372 0.8140823589244999 -0.7307220950457529 0.10107737347854151 -0.8300925580334639 0.9324709438664398 -0.29384800112015586 -0.5546570027876974 +163 182 -0.5271518838795302 0.38530349266671826 -0.1741445638525092 -0.958867250912911 0.5740440970858729 0.8122846310040528 0.1430836408666487 0.08721975506578383 0.029122282378708064 0.39237337524907256 -0.42838713809472595 -0.10780605261281706 -0.2860102456441602 -0.9166158293722675 0.8918795971957485 -0.2754845108063839 0.4734830019640661 0.18815216734736073 -0.03318413691916566 0.3183174426134632 -0.22963849331948105 -0.6757877843516791 -0.21827751496243408 0.8326122864540297 0.8463736556216057 -0.9609722763718656 0.9457633275659898 0.09459498815925316 0.8637120339448849 0.7702109077603696 -0.9949694013329811 -0.4338441076744328 -0.021486010130131294 -0.6829901921575603 0.20786624922663122 -0.7070467200604671 0.8904813178587843 -0.38634522386549297 -0.8755208436903397 0.23699398149049467 0.2504938367963985 0.09231828865756131 -0.8863147477729865 0.5903739885920978 0.9989976218468972 0.10113237859347479 -0.4647653802081255 -0.3709099498785273 -0.679128864362522 0.8550388066080223 0.9718451168013105 -0.03145258920995175 0.6627441327292876 -0.7189819074648012 0.6108416694151249 -0.13397072277964917 0.6694447701375594 0.3311949815618713 0.07684586335846233 0.15612310957764364 0.493161675767708 0.5471168101820314 0.9761867920691472 0.1185360903874706 -0.7005926707282633 -0.1294915467761455 -0.750151749394159 -0.590606969406519 -0.6525002463391683 0.5110566334470428 -0.7351069315369141 0.8038270261423885 0.11361691977790755 0.3230600240657384 -0.9124121900747266 -0.8061462380513014 -0.9521544702137372 0.06956656530340011 0.020843316241511367 -0.4858194024545841 -0.10404693686964817 -0.656056858299576 -0.8699786083686278 -0.5541735746795655 0.3607998299597377 -0.44153510093961934 -0.9124306589090692 0.15160117071884338 -0.7088917159930348 0.2719777156677745 -0.16937699265696038 -0.8791705605735018 -0.09235752861602764 0.5191663376743261 -0.826403129081309 0.2621431695407761 +163 183 0.7372681491364521 0.3697489831091463 0.020144763241743524 0.9516290172877231 -0.8487576166647235 0.5938087920794493 -0.08600788711708973 -0.9408211146594088 0.5740352922494905 -0.36216101994680594 -0.609780768515285 0.5786062149810656 -0.36604821394625886 -0.6093762703836139 -0.946730231055841 -0.9648552319190877 0.36951664966279285 -0.76225245333078 -0.5210530024814826 0.629601910506181 -0.9841610657853372 0.825791475970256 0.1262448655427626 -0.9388163236930929 0.4385974214730093 -0.9076300886150133 0.40375711127350633 0.7937411280462376 0.4363154467494412 -0.6144739506997003 -0.23097616324255 0.13697318842616357 -0.5353379841318018 0.8182710551175194 -0.1829655975379183 -0.6676232445197217 0.7617155261608857 0.7048146725790101 0.8100533243436379 -0.13860003376375318 -0.9087053861501164 0.3126580177414531 -0.5945797904737271 -0.7178642915528699 0.48422857409350195 0.6307084679034767 -0.6571454047079419 0.14902314478250034 0.8673361907318142 0.6320737664053084 0.7190954611111184 -0.33052509699924304 -0.08032564421423816 -0.10383751064037616 0.97105329766989 -0.6921146030485583 -0.2538427182208096 -0.4553419812158086 -0.9768913762517015 0.3218511993082487 -0.47207158005759475 0.723554202503093 -0.22639740917509554 -0.5811360333090305 -0.05917067005558341 -0.1875409391413283 0.26873111664450744 0.9571205876273576 0.23030460541078424 -0.1738189060946147 -0.8262492250809084 -0.4885280286319982 -0.014841828478630692 0.9685401930953503 -0.1967158963114677 0.7953359040389287 0.7171340697877586 -0.2733644378105218 -0.2052542490569318 -0.05386593289507613 -0.0795693637105086 0.10490350299742457 0.5157055799738943 0.5114094440935177 -0.18113864301642435 0.5213677507885457 -0.5645545422548555 -0.5060931932483133 -0.12754702863384448 -0.2514465702577353 -0.48061220765958756 0.9680450824930953 -0.566451092415144 -0.8428648568195936 -0.22586246488207218 -0.3290359872974258 +163 184 0.7153710514893934 -0.4590750275181621 0.08909818696213212 0.688730622684617 -0.36911215875863035 0.7116827194508499 0.3956924043683223 -0.3525171160930749 -0.7652236652205058 -0.7148454317513562 0.32929083434288864 -0.2641918094127895 -0.19851408900244594 0.05304892252214932 -0.5952809928086005 -0.6799832510540318 0.019662585682884703 -0.5885043198518987 -0.8601967531931329 0.23035378813279617 -0.7944387299535627 -0.47697402510324083 0.6722961637833631 -0.44028651546530173 0.5544671361728246 -0.2772082090239094 0.5872827128344178 -0.21945394649860628 0.5903365384121848 0.8350205140235605 -0.6014302280824453 0.7329534130637296 -0.4542887604857906 0.21680608497475795 -0.05451352500773443 0.37605390467665356 -0.5281428335366669 0.9375223191109234 0.9699640967350418 0.8775243195499858 -0.8821001191566502 0.3630255174581276 0.9385500561556104 0.513574076750412 -0.15628062142640586 -0.6228890386433086 0.21164267398128267 0.23365683261648273 -0.27947955859474694 0.929393983857812 0.08002557867568183 0.5832262141313209 -0.2905800784580628 0.8777044102276843 -0.018838171289905947 0.9358431652263277 -0.4811477972843523 -0.4428278381183146 -0.8157277539845913 0.23710939112173524 0.6324118478152743 0.9445680176708371 0.9690988612950324 0.22744996997216704 0.06749078475919923 0.24869341074873907 0.1625258299717327 -0.34303793601279975 0.7837292952684156 -0.2946995451776071 0.527740070039572 0.8144090017667498 -0.3705603138175597 -0.048259231455734186 -0.41571586764876 0.016731913034662815 -0.45923897733298547 0.3344548680360646 -0.014329788461730386 0.13942172887017956 -0.5907916957860007 0.35011558395035514 -0.15991938702134112 0.6177546317170812 0.5774157530102457 0.4173279096979541 -0.1225032480760615 -0.6378336944721523 -0.7361575846899355 -0.22235837245378942 0.9437372888863436 -0.38844354967829475 -0.7353326566527911 0.8421871856761314 -0.5887085164172279 -0.7679664255382992 +164 143 -0.6202374703010909 0.4673571395026124 -0.0024522010294054652 -0.08867900965348796 0.10040561269844717 0.5718945222189205 -0.44012806715893604 -0.6501977379228718 0.21672492063652649 0.4075678306834605 -0.15022131150287366 0.3005973755721141 -0.3920650088152877 0.06565216114877481 0.5878571859629871 -0.043884901406200605 -0.7392832457534029 -0.7916558007223031 -0.04061642197652082 -0.013786746495497493 -0.8413598037396137 -0.7043700161362882 0.4374278655387691 0.3534519830477143 0.13814181799433212 0.9016723354791774 0.28722098205691005 -0.608974531857398 0.08544519711450049 0.8937429983726513 -0.7568550796953166 0.9438904127262684 0.6763497562402923 -0.2777628122090896 -0.123677355565732 0.6836196385781506 -0.7604139992412549 0.7655193268829685 0.8065320225937074 0.41759705789828483 0.6760961966007046 -0.11783714947512092 -0.9665931889599659 -0.4700244064285073 0.6396367101009814 0.49152992996791367 0.40365339511454046 -0.02983995520977878 -0.3267004469059174 -0.5140654874695889 0.1104716877078904 -0.7831661957431268 0.9619806322916451 0.3696199602560224 0.32137666297396916 0.6897883130515605 -0.4623791354878528 -0.9268386669806492 -0.9573410552783395 -0.7789502667985269 -0.21900542466728168 -0.021101338608042974 0.11036413133732448 -0.41060997133525556 -0.7309452377547592 -0.4552901563361398 -0.2813464521387872 -0.838292187594331 0.5213290016824736 0.3213213699387316 -0.9625709490896335 -0.3699292234462863 -0.41952935901258925 0.2751893664305525 -0.34900682431666885 0.9607008869762428 -0.7992598520983853 0.30082508324060075 -0.6544498518853246 0.9543649771951035 0.0727300841147509 -0.9646329541801086 -0.6036549170807939 0.08040217272014916 0.4818249442901963 0.9643544274199523 -0.2446003379403181 0.028628338798583952 -0.05865431498237328 0.30678132976521666 -0.5460178153829383 0.5041698425389742 0.4135774046329379 -0.7379334858845401 0.18929528800545525 0.5731515733597827 +164 144 -0.08060301151061311 -0.57674083177114 -0.1907594718467207 0.2310023904763514 0.7447541900664418 -0.9098477793719344 0.2922825594693841 -0.029031500183144043 0.5521109177231425 -0.8854994673843322 -0.9486565653914316 0.23074175202414948 0.36140875431603736 -0.7249651655396114 -0.34315730323207405 -0.22330542385740437 0.8898326530172245 0.887587996223618 0.6786578475546101 0.37965772979796353 0.228223273381867 -0.23928300109402723 0.7492354770609087 0.024244532340407687 0.08849894234391997 0.3576189499164375 0.6715516195002322 0.87183950737532 0.13592713401342316 -0.3642037153006876 0.15594884317401192 0.5163419965963645 -0.8934857364906192 0.8241560910988641 0.8061024854311056 0.753266503743788 -0.0812450684687751 -0.2832269460709702 -0.38070250590718024 0.6950291372322268 0.9111887020003917 -0.2901661332100518 -0.5421062551599634 0.265369507394285 0.22375426745833393 -0.12196357017338566 -0.6747134423022549 0.07612370128923107 0.335604760978401 0.9403386066157171 -0.45300947025352833 -0.3210737262400396 0.2002011579148415 0.45977543165348433 0.09763117088245421 -0.8113130932459252 -0.08209556918665584 -0.869367400723331 0.8399081695060535 -0.6320040582177335 0.10201623917077751 -0.7784491674421847 -0.7812168093541161 0.21142144945075425 -0.27877108225465164 -0.5209819609839059 0.5146704325772848 0.19029787694767664 0.7066309342667632 -0.3313338292968835 -0.7538152566603926 -0.0383800139077084 0.087045403820883 -0.7696341185201603 0.4374921535578713 0.36209726876603243 -0.8456320872225238 0.16727755120925059 -0.5824118339697637 -0.0920836125375517 0.7702787211055357 0.6849356893210041 -0.8996204505108725 0.2663575259211213 -0.7882610195807882 -0.10618053013838802 -0.32783482773684103 0.02828871128590893 -0.6645761129184267 0.09980692177182315 0.7423626410650348 0.03582883961629557 -0.7984024277951081 -0.5772223571842023 0.13364680475602908 0.7335479444382162 +164 145 -0.18937000607770194 0.14296002146248799 -0.09537746126376478 0.3180081115699047 -0.9253740140429079 -0.24905557508404863 0.7187682714645158 0.21417654793299223 -0.8156195021128485 -0.3614707957102128 0.36216061991405835 0.6935079582036321 0.8761685111974009 -0.995116999934831 -0.5403886236188347 0.379391546211453 -0.5550329311713018 -0.8690994897626279 -0.16729473330411238 -0.26591179985082114 0.32172393607016736 -0.4086887364109568 0.8519567945677584 -0.05297777069168097 0.942666929317064 -0.16769378767665555 -0.02081046603613923 0.03755033136188013 0.11461152174771727 -0.19051330830254098 -0.7481766901242282 0.26274295171117035 -0.642179262074847 0.8047317332041077 0.5748535441322866 -0.08897505413698159 0.5227206237513558 0.2848203597817356 0.3697283194472658 0.9563982469660217 0.43132943428056447 -0.7763794803109809 0.3037850644437574 -0.4156184815545634 0.59527107125559 -0.5457392296050063 -0.30876797274185463 0.7239747787594875 0.9416998846455744 0.6179789909074553 0.12340465609768603 -0.9645371784319785 -0.9422781288182729 -0.3570944106536378 0.9868332520862155 0.9456223513934481 0.37045311575604956 0.16139132575780812 0.23970394346917523 -0.5853740465816912 -0.05275889652693211 -0.9297333571695117 -0.9513777797910121 0.196159597933649 -0.9089897689729338 0.8328603144073938 -0.0535677373579011 0.7722981492095791 -0.579866044271276 -0.16896707390070564 0.7840817897053887 -0.30715030572709323 0.26042773364256844 -0.6396666077549489 -0.5343750189010676 0.550843894829244 0.250734174665592 -0.9405192045703858 0.09744680870963585 -0.26496797196960964 0.7815507972066895 -0.5471919427777518 -0.7177182505054038 0.10000983070337321 -0.4536562860400708 -0.32763587715186215 0.09777835537758106 0.5309491864934721 -0.7950145966330204 0.14470594066459164 0.45350396232149004 0.42490587898894083 -0.7497303766976839 0.13510925969904353 -0.20549190735805944 -0.913624445947619 +164 163 0.4928593690140175 -0.16632831368585044 0.658739413422621 0.025210610546507084 -0.724752573490355 -0.9864991563783385 0.07722470615716226 -0.8728472478160703 -0.3961820739934747 -0.7373126295230044 0.9691926862701159 0.3998443460260124 0.40605367694742456 0.09986462459212975 0.8481693067704652 0.28840187403087425 0.6040202404841031 -0.9970310892379659 -0.8026970479995497 0.09401631458129067 0.9935550669064908 0.3715692897757279 -0.21138265849242432 -0.9600905616800623 -0.36412336826747693 -0.28373974573833816 -0.28385371730518005 0.07924999179218273 -0.3260048682272241 -0.946862025639585 -0.9224099500374563 -0.9508104609971362 -0.09612432347512367 0.7804319915210052 0.6108621464910946 0.8256164439279279 -0.5402800631403422 0.9853315895145207 0.8334229332027012 -0.2596939755174441 0.9166686852334576 0.26398105540094985 0.6848852441310769 -0.800224977013064 0.8981794273730257 -0.24517697685537487 -0.7987332095616271 -0.19684289107452768 -0.6425966217088421 0.9958092218845469 0.4285426700224695 0.24936670249465998 -0.2339733040615184 -0.36383035361227867 0.6043702157772199 -0.25970280174327764 0.03315015166029567 -0.5716863444508229 -0.994172987366835 -0.6971044998405216 0.9037356616840353 0.015223370016435034 -0.7318032694273142 0.014205837602331073 -0.5094037168433947 -0.4349534203426024 -0.28904340095349457 -0.5464621476288709 -0.011132483002812776 -0.9201128888389414 -0.8718516540262757 0.19434588207761672 -0.43717674228336767 0.35735557942492435 0.1841258854625254 -0.7947166675467214 0.12090299956496797 0.7169316057270743 0.07381267243152645 -0.7730749239469548 0.7941252375577759 -0.23919445280757623 -0.19613095316712625 0.9027363261999806 0.34229015208532276 0.6642033260635165 0.2935643766418057 -0.6475725464275743 0.9949086539293372 0.8140823589244999 -0.7307220950457529 0.10107737347854151 -0.8300925580334639 0.9324709438664398 -0.29384800112015586 -0.5546570027876974 +164 164 3.712183251082272 3.522095550695116 3.9271632942702634 2.022539726662111 5.2501969541290885 5.212970976579697 4.238112566887276 3.76074893866365 3.7310107408986513 4.964505288749099 5.918326915163766 2.7029405967584057 3.865162844392719 3.8933988565789748 4.90953598772151 2.7651460123684766 4.06598575875867 6.9292372258107875 4.565484814925702 2.5934478603267523 4.610567731521188 4.273275009628549 4.432342437355768 3.6413701241369085 2.0211257896801422 5.296356239241614 2.807748002092774 4.275025161972069 3.6850916481826004 5.868972009519504 4.827059173611842 5.43760790623654 4.391153761884801 5.250621935312793 4.829573910770431 4.4021535669121175 3.946098202891454 4.790978880955813 4.286218800519797 4.282216226847897 5.505899538212864 3.8467544946130174 4.650694847309381 5.448468110170337 5.274921984136505 4.399612683172127 3.580989805330523 2.3005216454639292 5.941497442586851 5.669881098291272 4.035591869159017 4.4465029848493645 5.1385964677385445 3.8112230170477943 3.4719232801255577 6.0267527126582205 1.8573738687456567 5.491561472264557 6.118121260931574 5.110764092270093 4.537270237632592 5.434968712535682 5.5174523149208925 4.111867176728817 5.280525314769514 4.362261688147006 3.5962219403085878 4.157478011416498 4.523437700693455 5.030778770222964 6.992706734157226 2.9252143849930863 4.138383697565072 3.5850382296543835 3.4930931069278346 4.9755328755738555 5.094032951755206 5.0657705914661895 2.8195086980356554 4.6773671544980315 4.604179758795267 3.650326262480245 4.073522280519228 4.10545408729146 4.184939832845968 5.446956007084518 3.2326696536210644 3.540336320741365 4.90681968596688 3.6931972836207043 4.42844516378082 3.0032384307810327 4.890975220451885 4.856497743487283 3.1837712821951447 5.253870605853184 +164 165 0.7076791822590882 0.4742090677110078 -0.45162116717213974 -0.6735050609769362 -0.35191958860108064 0.7447422290930668 0.140432473001753 -0.7535194370237965 0.06626527015348005 -0.22134971033731943 0.2358025705517608 -0.09549542382025455 0.4902328033662846 -0.7792388927380514 -0.49855441774651643 -0.01879471161045254 -0.19690915200457892 0.042452863946935926 -0.5701852127315004 0.08174262505018182 -0.18273309839455876 -0.5975945792884148 -0.012692837024321335 0.10052953007507459 -0.039625430294385255 0.7598058615215237 -0.3027184761623285 -0.21035060412292794 0.883073668864071 -0.9547740522568124 -0.63855325794136 0.45706704053453784 0.7529239998441404 -0.16641428185447138 0.5136070873264764 -0.6693338491164638 0.38653821225327545 0.9884861883630978 0.22437736522504137 -0.7899057803038951 -0.8059020396511762 0.7994836718537102 -0.5758808386181222 0.278294674780728 0.11274975268569665 -0.7086510534815327 -0.1478226311997204 0.3159887860246564 -0.9280511896657448 -0.5757602248990776 0.993699136373984 -0.19820555153668962 0.780702676822959 0.90507594622195 0.08081667691356698 0.76912430100826 -0.06337437056783535 0.7265004963305912 -0.7483274709986973 0.10936057694328372 0.47582928517510337 0.5884605662565958 -0.44589950529259803 0.6447563612378804 0.6489817665341349 -0.4096100957461062 -0.4875128551535579 0.16996770899893043 -0.9088878469648105 -0.7065474342418476 0.6144938046209238 0.09166050235577305 -0.7122811562030424 0.191730224812118 0.698125958932043 0.7936568275938971 -0.2440867332208707 -0.7990971650486118 -0.5120289921518277 -0.4248906870461404 -0.8615397943698841 -0.12678267588703207 -0.03983176520132914 0.30565052861246533 0.4921771974101945 -0.92892846310767 0.5750164227995309 -0.3264589908459985 0.9391218338981249 0.4457134284258435 0.40446287134603653 -0.3922336649336273 0.2522548149124597 0.6200344039701762 0.5951361836240068 0.4847557092774777 +164 183 0.5269993159974633 -0.44037609570955283 0.6403711909141034 -0.27415951712783215 0.9229351130741554 0.45124870271558537 -0.8199324689336496 0.33519910042586787 -0.13774535001340715 0.7436874838744194 0.9133612295038769 0.5560340044338485 0.07539089419531719 -0.46879814620629223 0.15675779376916799 0.9897708998342856 -0.6388161371966323 -0.8703066991307411 -0.8718793103113567 0.12620347785556163 -0.14070359832066015 0.7912429650510922 0.46975790855779476 -0.7625345169436744 -0.018732605526424972 -0.3208225128003219 -0.24414437255754584 -0.7143119368913649 0.8150627693718819 -0.2538085192770383 0.6884248773455339 -0.3168396155783135 -0.9410260997386597 0.6154369618668842 -0.16196384311771328 -0.21660537262815738 0.5067661985393359 -0.5399468429477619 0.7633094097923874 -0.07871068241885215 -0.6425455436094496 -0.46266205916341785 -0.20779061986641945 -0.754081424931081 -0.5334727112270228 -0.715195533178635 -0.22688844777229566 0.5880902927182188 -0.8427352552824854 0.7083825129729677 0.21400257815379176 -0.7008746373402928 -0.17988820122659988 0.7120659041941761 -0.016710783697119647 0.39149832626624725 -0.38199736463451117 0.7699044810706457 0.9096879458703511 0.7379472200628228 -0.837899854668261 -0.8968143489301621 0.9450496049316786 0.6790671248199491 -0.557302060144705 -0.8401606330921838 -0.3796447260549325 0.022511822761623446 -0.5843374746668537 -0.4467698729594365 0.6819794900497125 0.6445306786106257 0.8795244369489559 0.49067677349814454 0.09737321958843359 -0.46247835063041376 -0.9054581454020618 0.476691762604438 -0.41022955793455806 -0.4692825029966996 -0.027792979182150956 -0.24278414177701935 0.26916973729299065 -0.8087244802266065 -0.5532097547408332 0.8234290661365584 0.5134972430634617 -0.6614555397565778 0.10245361456789714 0.15920441179444333 0.3003542861544053 0.2450107258589984 0.6572831400136727 0.9089694577361784 -0.3908396388982296 -0.5797420334389356 +164 184 0.2700478131972235 -0.8726891142246855 -0.41052459514706574 0.22986773841432173 -0.31089555417919135 -0.7580606972306241 -0.8098861455101827 0.718415288264157 0.0437043815210183 -0.09681987436591721 0.7704230125836309 -0.04575111046929159 -0.36783284346465805 -0.42940149729522803 -0.8040422814520187 -0.4898676543349727 0.03660799266137538 0.876162574210011 0.6002798342574798 0.35739167080609 -0.680799663386005 0.013066932076577054 -0.9924521359162171 0.4581503427311935 -0.0427103309907213 -0.8886943550951212 -0.5047839316373457 0.2689984535305756 -0.4283477724257647 -0.7719643532471978 -0.014643258849932117 0.7783498323563005 -0.06501347839261817 0.5299796067794209 0.5069107649359983 0.10505516100342494 0.7436540390790269 -0.7227558295205241 -0.11720587369962132 0.10549556935044979 0.35784579949485473 -0.22325806916894675 -0.7399240754330141 0.6518422125039465 0.8249922137264598 0.6031934488328949 -0.1792246440293539 -0.09833948509787138 -0.8035394736397663 0.3711759565103874 0.6494664998985513 0.18916030215181956 0.7663772332416605 0.4241965803425414 -0.20193581137206995 -0.296017865586361 0.13807653236331152 0.264576287264795 0.7695586095217073 0.57950734136453 0.38159869825887793 -0.6261430938231425 -0.7633775657025412 0.8507002194386151 -0.7784205638514865 -0.27960191891370134 -0.6222535240587961 0.4014694485359589 -0.27196717324065167 0.5688160495240437 0.9173641771688259 -0.20248834230157686 0.6549129703779584 -0.6012652764665325 -0.2450609186265975 0.35449720661870354 0.9449917890732036 0.5486083171982858 0.18996435168321235 -0.3946962801840672 -0.4115561817666462 0.7347578559227173 -0.11852305660061235 -0.9800156278983987 0.06561261977197863 0.2075332109073169 0.5238387853504383 -0.23072308260637553 0.3531136357452971 -0.06808033336985253 -0.25384361445160475 -0.09619508363275986 0.4806885456359724 -0.5419047782672048 -0.7046124651877228 -0.32751366814210514 +164 185 -0.21439639200275007 -0.3605999471537644 0.8274357762339923 0.06276707769942402 0.4447491678659794 0.1492036402517678 -0.09978870500280657 0.09776881134922144 -0.7504431050707476 0.6430813973781955 -0.9618747782729269 0.14805377247282214 0.5432541431725493 -0.17393919440881778 0.607062235704992 -0.3094998738744932 -0.3431588953285465 -0.9669568055688169 -0.5560187665112297 -0.7725842754347609 0.6130257484603645 -0.16910300276376278 -0.17189203400557007 -0.2236675995389823 -0.27978353412971657 -0.9125544945023845 -0.058876118077143325 0.7145239574725404 0.3412056548614246 -0.6288769644240191 0.18358044846070176 0.39113172986739464 -0.1037931932046321 -0.2713897791317539 0.6105138365919998 0.7215128036843104 0.05611567419550978 -0.08118311484383578 -0.019926679371403244 -0.3773185875939433 -0.700746886836642 -0.8807360123009036 0.5056484763395463 0.9659707342610226 -0.9634904064090992 -0.018632416314518396 -0.5483697798151239 -0.07195818066481197 0.35332047306360925 -0.07222141889989153 -0.21836034509619084 -0.7567292192479662 -0.9656418865533603 0.04597112553524174 -0.9238970792732777 -0.9341502666210459 -0.09335932214125653 0.9936248364234768 -0.366474322807129 0.1843605471194547 0.8713637379438193 0.8618427875485035 -0.09601934993490158 -0.41355853179914903 -0.42816834541052495 -0.5693732988399716 0.918767420031084 0.7485003225353795 -0.8762325084476759 0.9707631617823531 0.718159968348512 0.5969711579547448 0.5989283946825923 -0.007905071996198165 0.22292395551071031 -0.13371761176344776 0.7972053162101833 -0.4352407210639375 0.21284654816018866 0.8940093207336188 0.0016902519422523632 0.023846991808516016 -0.4152409199243172 -0.625646859214479 -0.8956712231934725 -0.4892469946574871 -0.1893824599497671 -0.4703538309269335 -0.9237317273470045 0.7454420477330437 -0.7424116445261604 -0.5073899990335411 0.597387077780265 0.08382573600805965 -0.47662679569553745 0.715895405044453 +165 144 -0.10496927867429684 0.11880888869655815 0.6346967083255659 -0.48400217346077246 0.1750747243124373 0.08762342522388367 0.37920184567038384 -0.6367406008420862 0.49777696827492224 -0.8651611715761947 -0.9528000438460928 -0.3194738384010174 -0.27456293129342035 0.3265592118693499 0.8473879765463366 0.08809703885284903 0.1535219435699724 -0.4773775701408667 0.7118428411788846 -0.6991070804172441 -0.2207364861232568 0.20952063154170686 0.07881924180102295 0.45292233237274426 -0.8244086577565839 0.19237666408356247 0.5220359463692097 0.3717990787249956 0.9878663149622546 0.6905192051279925 -0.5230879140767293 0.8828819174121658 0.9888118881995087 -0.06447162663663564 -0.3069947295426818 0.5250947677877091 -0.52104997516972 0.8099572459157542 -0.8053227925848869 -0.5342498849529369 0.3997301949131282 0.7777837303418247 0.3255901432014321 0.18449635870162107 -0.1510467327866527 0.19833789007349112 -0.49225056585246807 0.3796513849726346 0.0654849737766543 -0.47026170271478884 0.7242013743470646 0.8418429083625532 0.8031288252526245 0.839670044330153 0.8869460768714255 0.7083808969587475 -0.7816539715576813 -0.5138414313573865 -0.8041720323521926 -0.1837334622432052 0.6037473485735834 -0.8329986598554198 -0.01480026674612156 -0.1567366269340984 -0.3833804897853741 -0.5735593742643526 -0.22840095004898764 -0.9997844858804115 0.5503382802107306 0.6524735388243001 -0.30944188723974664 -0.6521260206316297 -0.7374076578467992 -0.5302336208402831 0.6731789853977126 -0.3510166053294719 -0.2716102141146317 0.19905458824434108 -0.6163183932816869 -0.2808614422529667 -0.6502551094162106 -0.7809573612196152 -0.7921308929789415 0.06011150669536014 -0.792826830949579 0.08513958811098199 0.5047262903252852 -0.010947292256619834 -0.4684374224041219 -0.9705930067074862 0.42448370367198396 0.27470727871972755 0.2108149088747615 0.3005971820182656 0.2738427953080005 0.8861911172277317 +165 145 0.07685777964748208 -0.8738867260464116 -0.2777381552382203 -0.2706251865927325 0.8534862535375034 -0.35588620681232697 -0.4163430246397577 -0.9631477144881753 -0.1273601940943081 0.48233621706141117 0.40849068171735214 -0.5472292108620418 -0.12342424967577492 -0.39628336770924566 -0.4268086448717565 0.23781813459042622 0.38063125888317617 -0.8233298897374224 -0.9505064418779934 0.7229459048702662 -0.8164779205872117 -0.8177610907203297 -0.17957488233156882 0.5832141730567992 0.514355515898782 0.014562864091719696 -0.6523390554814326 0.4562645433321908 0.019378348908045906 0.07356021340321162 -0.6406960316424495 0.16166877401277047 -0.7195659014567564 -0.8419273629298871 -0.21788715656138158 -0.04069523518035978 0.4317363116496358 -0.8127016380982786 0.9942398683036959 -0.5568087407368565 -0.3056438165696902 -0.6955619346651356 0.8615978511747666 0.71335665087643 -0.47875028715645684 0.33497695324476706 0.2185194561016497 0.6187226257939453 -0.3901415940166284 0.10897818171398743 -0.91690481674363 0.21512602079079768 -0.4791982459008717 -0.7888792128288504 0.07420037687915837 -0.07763267429302956 0.833100594168362 -0.31529412488346664 -0.67959158669493 -0.01747451613067219 -0.5711208914228247 0.33608549019481804 0.6506534048297428 0.7664436241912251 -0.9598459129112955 -0.3679795749091488 0.5049285052838475 -0.6333463587822348 0.2225858087638053 -0.08205767323779156 -0.2366584806652996 -0.17034707795007265 0.8819330888855068 -0.14622819948283072 -0.8493457183162232 0.7134109519625296 -0.8384171787975472 -0.9806210302594303 0.7606410622891877 -0.8908764969586032 -0.8921763166394079 0.22706640726198035 0.1488201956741284 0.12936609954912948 -0.4265768887095793 -0.9593074892246838 0.451065666856693 0.8231949507347562 -0.7876748270350451 -0.9199079342980974 -0.7019635298994547 0.023771926679059918 -0.6691327709105841 -0.35744313472353206 0.6730299487290818 0.8922539821175173 +165 146 -0.005320650613444222 0.6850714629668742 0.20339982912097887 0.10632318606894753 0.19030009984566787 0.8740750399507986 0.6158007342424754 -0.01235468807389628 0.1252539545581599 0.557342396328826 -0.6161462166013405 0.21593431751934 0.7084430711973337 0.9215960117803781 -0.20999749618194907 0.9609633087709464 0.5624766934815484 0.8124442424573226 -0.8101181703496492 -0.7298427303843833 0.861670714424976 -0.1035767494302322 0.6438743570139165 0.11811435743592469 0.6997446900722475 -0.550995181893605 -0.505842496330607 -0.32615143836917015 -0.9878936625751185 0.841509477517544 0.31186491589209453 -0.5033171862754282 -0.5894968757566423 -0.35092642674977004 -0.40392863138481827 -0.2834299468366872 0.9719452075623751 0.6792870690233386 0.5425918369808787 0.1720596149304061 -0.7590712213067989 -0.8276726069629201 0.26635423750664855 0.12592693480054362 0.12295069104453571 0.5446209722263937 0.8266109259397254 -0.021069200634523222 -0.5464396797700062 -0.14031997080613778 -0.7281698735825333 0.8703136603648576 -0.7281580076295071 -0.050646994643712695 0.5756655697985817 0.8687890292496065 -0.7828687329872994 -0.9518181536654102 0.3538643687474248 -0.4643745503966725 0.09377052056914992 0.29637487944760443 0.23182235458898437 0.666857018237865 -0.8567941695140595 -0.3645411842023363 0.9678704914688485 0.6342679527891701 0.4034909914604936 0.36545915448035937 0.7241714469687062 -0.9476680199370278 0.22756350852121998 -0.8751997603322297 0.7351574174655617 0.34441362234216966 0.11710769372637797 -0.0763429887704532 0.05787509184011541 0.18392750959256454 -0.806851840011445 0.800928725307585 0.6366531413370464 0.4412932097374298 0.7493550728521052 -0.688936782123885 -0.7199090476223726 0.908643523360642 0.13966311068962423 0.34550896654121144 -0.3345337654656504 0.8558886655472073 0.7193992647810998 -0.796952286170096 0.42628159689311196 0.3033519983711357 +165 164 0.7076791822590882 0.4742090677110078 -0.45162116717213974 -0.6735050609769362 -0.35191958860108064 0.7447422290930668 0.140432473001753 -0.7535194370237965 0.06626527015348005 -0.22134971033731943 0.2358025705517608 -0.09549542382025455 0.4902328033662846 -0.7792388927380514 -0.49855441774651643 -0.01879471161045254 -0.19690915200457892 0.042452863946935926 -0.5701852127315004 0.08174262505018182 -0.18273309839455876 -0.5975945792884148 -0.012692837024321335 0.10052953007507459 -0.039625430294385255 0.7598058615215237 -0.3027184761623285 -0.21035060412292794 0.883073668864071 -0.9547740522568124 -0.63855325794136 0.45706704053453784 0.7529239998441404 -0.16641428185447138 0.5136070873264764 -0.6693338491164638 0.38653821225327545 0.9884861883630978 0.22437736522504137 -0.7899057803038951 -0.8059020396511762 0.7994836718537102 -0.5758808386181222 0.278294674780728 0.11274975268569665 -0.7086510534815327 -0.1478226311997204 0.3159887860246564 -0.9280511896657448 -0.5757602248990776 0.993699136373984 -0.19820555153668962 0.780702676822959 0.90507594622195 0.08081667691356698 0.76912430100826 -0.06337437056783535 0.7265004963305912 -0.7483274709986973 0.10936057694328372 0.47582928517510337 0.5884605662565958 -0.44589950529259803 0.6447563612378804 0.6489817665341349 -0.4096100957461062 -0.4875128551535579 0.16996770899893043 -0.9088878469648105 -0.7065474342418476 0.6144938046209238 0.09166050235577305 -0.7122811562030424 0.191730224812118 0.698125958932043 0.7936568275938971 -0.2440867332208707 -0.7990971650486118 -0.5120289921518277 -0.4248906870461404 -0.8615397943698841 -0.12678267588703207 -0.03983176520132914 0.30565052861246533 0.4921771974101945 -0.92892846310767 0.5750164227995309 -0.3264589908459985 0.9391218338981249 0.4457134284258435 0.40446287134603653 -0.3922336649336273 0.2522548149124597 0.6200344039701762 0.5951361836240068 0.4847557092774777 +165 165 4.381927471287113 4.817898158738758 5.593382496276901 3.84782128402472 4.414951375304714 3.8915525343494397 3.0339458176158445 4.63658340211051 2.4045856520345126 4.464295821666994 3.5017608107101736 3.1091986696154983 3.617512888493967 3.7298689121335906 3.731526972359314 3.140229431443632 3.2104400171463157 3.9218791258767807 5.219358740811291 4.237130874275229 5.783856651121418 2.8326676611387582 4.299935531832328 3.8891509604578127 4.261607851630128 4.981690122782521 4.804561280288888 3.1319971757328227 5.733244912601734 5.397940586561104 4.919723614756695 4.055702371666378 6.119776532327884 4.447602567171957 4.407784536413397 4.919657099628546 5.744944578286425 6.2903250720236965 5.423989859020709 4.182189702022809 4.799738585354825 5.098539389005266 4.666438650407234 2.899576925275974 2.030746606783261 4.496088283849017 3.8397775662105147 4.092121954159606 4.4144361248415676 3.918528207735802 6.596350553936047 3.805520132741458 6.158967256388324 5.550345329989799 4.916388458655536 4.373045562269848 5.647239757608132 4.462327044409842 5.621338573851206 2.4056142679034775 4.218539814399248 4.832192386802809 4.287635026998571 5.655240607370523 5.003848901943325 3.7348311969654455 4.902563691744062 5.0064428739648426 4.667193609466904 5.031144418265565 5.305012584665317 4.411827604071846 5.146835590993975 2.9792652024270945 5.202477511369101 4.189656026112689 4.40199661664044 3.4339563337872447 4.927158892667744 4.93103942895567 5.932357411345331 5.332389878516489 4.105028462017723 3.4566956300048455 5.91034401282001 5.478365974333906 4.881743548255125 5.00799608343608 4.53444725449115 5.346113634904194 4.868674724807418 4.13683672889764 3.829200855376957 3.9139681657378116 4.939624354936053 4.945091219816826 +165 166 0.593675908256909 0.526884959048435 0.5323476851013518 -0.5339578507766078 0.33227887352230123 0.4228398817001786 -0.776307362462564 0.07770260601969481 0.11505648816867531 -0.25632591526204807 0.1342479912136283 -0.7422851428170549 0.03341977981281863 0.5255715830736356 -0.01636326626866924 -0.36993317379396484 -0.26024099865696204 0.05713656049250315 -0.0026821802020675634 -0.252763365350295 -0.8997106387099001 -0.25258343585137744 0.555552373867167 -0.3256043158635704 0.5701977035571146 -0.8619635347982724 -0.45274901442032145 -0.08532804542434635 -0.0070742921364650435 -0.33639089637354713 -0.7713479259765668 0.008064243477810651 0.8880726588534669 -0.8963623981277835 0.2996759688789912 0.914267797221139 0.928511086524666 -0.7403223509183632 0.5912494718417629 0.35697315787149786 0.7380965535294324 -0.634299098457181 -0.4622280882229426 -0.3142059616984776 -0.16315685620065 -0.509827602461713 -0.374132057384581 0.581527564944768 -0.9670023499674709 0.9739745284335861 -0.7937648238211163 -0.6552536689836601 0.4331422502955051 0.8164812464526097 0.7171155898091852 -0.0797245700105722 -0.7914337138946712 0.07038841665712359 -0.11423126943228268 0.013951275208488267 -0.21373731707754895 0.11865422280392757 0.18502024967966846 -0.6216038775580437 0.0070281731799759495 0.11211375860650463 -0.9607206098127707 0.5244001933068558 0.7461813754566577 0.2092867695890599 -0.8822040680240095 0.6475425781657418 -0.5819919259862001 -0.012667180291123126 -0.41898761273588225 -0.11265125088477546 -0.7471356496342654 0.09315485224995235 -0.8342602779288684 0.9608680962780769 -0.2334741876112254 0.8058497163740683 -0.31172146804974 0.3907863646309382 -0.9105167613089784 -0.8351616106361532 0.4495035079232106 0.46416867835002606 -0.3625811080357526 0.03132104833578131 0.2899586776777823 0.5548429207874068 0.6673587113768229 -0.9196636706865597 0.6005728664538981 0.9483412731892256 +165 184 0.9884343975073546 0.5624649804261328 0.9831001196252849 0.9677039584547906 -0.5136895628462765 -0.11915453290042421 0.6101613137531041 0.8845227882757531 0.26062880195066307 -0.6348141003053822 0.3008420825756868 -0.11061674217152184 0.39538290914450425 -0.0002165952841488572 -0.8167478556201264 -0.6215703474810081 -0.08391171383462637 -0.46523491102234793 0.6834879465226158 -0.046079029491291834 -0.5565115242762004 -0.35663726600954626 0.5175056622065675 0.4393601894529058 0.18563867390733124 0.43886720910999855 -0.9137465887581144 0.47962923551976444 -0.39656563009787793 0.9798054510157013 -0.0578957471203323 -0.10115559495198867 0.7296741656043719 -0.39295210774035727 -0.6920551248061817 0.9611790408308243 0.8322809601253507 0.9250143037932705 -0.9503988542676145 -0.2987059039410387 -0.05345640722782674 0.16380174456032193 -0.4768544707675917 0.5024790403682704 -0.45933010407479835 -0.5136231442834256 0.09249261811215703 -0.4697654237932236 -0.024843323931097894 0.7913809924571227 0.8544990991165995 0.26686152315800427 -0.4385697532435744 0.299402635598214 0.898249374972629 0.15673141585076555 0.08667731661274458 -0.1375585362987919 -0.8286551680600007 0.1673028552021063 0.4864654266009405 -0.6182782709459995 -0.7071720387968712 0.8336135452403399 -0.9112961673506779 0.028533527764482924 -0.19789060266461012 -0.5501682443829508 -0.9264370820024872 0.8752653614265491 -0.7059910913893475 0.2560774201920075 0.25564919860480817 -0.0800414683299635 -0.354255522506395 -0.7315995430458975 0.7161777374617591 0.06641700534309813 -0.08231763451811736 0.19565510221493487 -0.8004436012977008 0.1754968727032069 0.7767901007411517 -0.6839098460632478 0.896887874829309 -0.706404522203149 -0.8620930116541157 -0.4888543810291359 0.46844267006171725 0.7490220604995168 0.9286811254376188 -0.6685487370340897 0.5029055717906035 0.037130946736807724 0.6474080573864571 0.31311077546723154 +165 185 0.5844139858961117 -0.14848897115440773 0.586544541270505 -0.05468432332029405 -0.9764964529538069 -0.2433731416562106 -0.007675594315424972 0.8589476286917459 -0.07164501782807675 -0.6987555174173083 -0.091705361394814 0.030749447418348286 -0.24028534427681514 -0.08486500461016977 0.5739178889423404 -0.4287670776279382 0.8737940818526357 -0.9700894465051475 -0.38978373740780015 0.8879570686206908 -0.9659713517123569 -0.0010510082855257341 0.9821429013440479 -0.9450577686480957 -0.09009323984770856 0.7060265602822484 0.10407811911764497 0.4913719563074703 -0.9479956397037697 -0.9618122114916299 0.7054603789066984 0.930318332713733 -0.478922652603309 -0.7987751437936168 0.8606321308624771 -0.6641018458895613 0.34414050763902915 -0.6919955758635967 0.10024150366013918 -0.7267849481622466 -0.83484986992024 0.24993073716034542 -0.2928969566279065 0.10897093549446168 -0.3499648305954992 -0.952721464287595 0.9653026492984984 0.9269595936135029 -0.8839866862943067 0.20231735130023543 0.07047250904465252 0.15157170735572456 -0.7506348269994514 0.6854722836805129 -0.40715323193396125 0.9236364968618809 -0.6765418652071316 -0.37472014351235816 -0.47037423252561594 0.30654669918436284 -0.5944694067480831 -0.6118715178605316 -0.9954901157232316 -0.233371153052641 0.4918345372567645 -0.5586587284804814 -0.48612101076924774 0.4105294210020509 -0.23184834614292593 0.8986013242480873 -0.9041764961535981 0.2612246072437252 0.5411005598331229 0.019013106064380114 0.012091971257095047 -0.21216252571796534 -0.5820023337754956 -0.3736108414395145 0.3632096593274876 -0.3967457847307041 0.894101149314187 0.9691458259973367 -0.47510709505938187 -0.46272345857470065 0.9072860850117435 0.1626794153703781 0.04688776184431043 -0.4434922394586698 -0.24596745717480584 -0.9238848337207848 0.4401289482865238 0.777771198140726 0.1167840668879323 -0.014410702386748131 -0.9607346094906346 0.7373854784008054 +165 186 0.8477191235049863 0.6091491178084414 -0.9706637757577898 0.727002922346758 0.9326740134142695 -0.9668375762027055 0.05268951755078599 0.3498386789334642 0.4241042243794215 0.09698149819514845 0.44859316763786317 0.6642376642429026 0.8200679482749809 -0.5416285252196431 0.20833949364880588 -0.0015651318037250839 -0.14163780406299709 -0.08764747099542824 -0.49500848095429006 -0.21293254261296046 -0.7293632108372721 -0.385051638831285 -0.7158520788660316 -0.08168868208859159 -0.7053744922655429 -0.546989607770402 -0.723559084549785 -0.29073988241216453 0.7148821560711305 0.10171010139881931 0.5416959301082676 0.6982573255543336 0.22239984861825124 0.36980258544554023 0.6288115134366283 0.49587755521844423 0.969335679254788 0.4468410875606259 0.6395542595621213 -0.5439436555581927 -0.46794946514626257 0.3402164531958598 -0.5237410934620852 0.019905897610473122 -0.08029274542456721 -0.1283579061319713 -0.6202339501702869 -0.002236704611037199 -0.44357205056410454 -0.5300072863203875 0.6265117865313112 0.41625421363331716 0.7469298467409868 -0.6381023293376409 -0.5105137420072476 -0.36710144244856613 0.8395597414986291 -0.6670472257298143 -0.7644922231633924 0.23253794410630535 0.4234149293371374 0.9244801413871078 -0.8528698296285611 0.8830295290837433 0.017069737489673553 0.4591964119618588 -0.8937215212045082 -0.21030478421547838 0.1278124985016429 0.7706887713362258 0.5740608180204281 -0.9952001263427128 -0.7361064095309442 0.986580888933126 -0.6679345349497685 -0.44099606589387386 -0.633004188094173 0.2466816402754355 -0.742363714344233 -0.644239248640452 -0.5782899624987097 -0.8789533359866066 -0.19420501399473067 -0.7997247602670512 0.2567747023547742 -0.5993309510935207 0.886152980603075 0.644839806358561 0.2029732731984335 0.6837065336233179 0.40344843792575946 -0.2737477658999663 0.25006999058009804 -0.6466560492853455 -0.3074780051910204 -0.13920663822637636 +166 145 0.4229558578178949 -0.2620837391465545 0.7610244219310327 -0.8376577770982334 0.03530208825850267 0.8213220403012427 0.32555360607965267 -0.6804687679429673 -0.5698017202815722 0.7912193546269606 -0.8977503023041067 0.4158264509133758 0.7654458441656593 -0.0799243136684924 0.504666791185834 -0.06222056646568919 -0.09009837023539458 0.9119604086246629 0.7739038044114008 -0.12620440788202658 -0.17725664572477218 0.09580568576758486 -0.8542086832231981 0.5736159974488377 0.10573897560517054 0.6464526488951576 -0.8444102743428903 -0.9762419011246639 -0.7562110392718404 0.15422215792309846 0.16110169505741379 -0.43983920621377215 0.9928754503668129 0.7124001743412574 -0.049175127843138045 -0.9436302278376847 -0.12761343228887712 0.3889391297895133 0.7679103005465304 0.5685255556500957 -0.6436217282870007 0.16072612263356234 -0.4691893911587053 -0.19414860435542525 0.638221787101378 0.73444371196341 -0.8098120434898162 0.21832221511320204 0.18139466506660318 -0.6483289770904812 0.12829558187999468 0.3977107721330766 0.6800343057994858 0.35565363016583196 0.7693690570963463 -0.4364979958576032 -0.5476546722405966 -0.010805044575318057 0.7462937726415346 0.31318202396511663 0.3550085101982279 0.07884038965016416 0.7315786022146884 0.6437044992105787 -0.5100664762493707 0.8085094687045808 -0.2990244781477769 -0.3471167159052364 0.335863836868735 -0.22200056018935177 0.6252127806900389 0.1074605156020223 -0.3202877539676958 0.02616921638297831 -0.5649169012420596 0.9660118254685923 0.13546029477125843 -0.9093678399707825 0.6576461922022376 0.1793924270285312 -0.7027409345177347 0.7081398692357226 0.36445686238042363 0.21749962787310384 0.7914482852081519 0.8443854208613972 0.15348433938799055 0.3964376729483756 0.5065041363370666 -0.46532249349956323 0.43203983140941427 -0.052777569461571305 -0.8919454850980653 0.717131056619166 -0.09939879973471011 0.38313456089730047 +166 146 -0.8211447109919359 0.060619584248150504 0.2648410893037674 -0.6830422032715966 -0.733141810386555 -0.018179320935014287 0.3322657270256051 0.004218429088671538 -0.0005472159935304699 0.9925836268633241 0.803676121796961 0.09730653786813148 0.021851485136736626 0.2473785818168588 -0.16231321766549445 0.5154637517967078 0.40712026947788793 -0.15770815535157046 -0.009601661024385644 -0.6999018651595117 -0.6117230029822283 0.21955046698035718 -0.32852962002479735 -0.30890952487229995 0.7366375111786971 -0.6756322001575343 -0.9593814794834101 0.2592820689423725 -0.023526407424054208 0.9358712279689254 0.8537814876895466 -0.4013956755170691 -0.20234384006480255 -0.6151277154919381 -0.5866320448606903 0.6690314200417928 0.6876490054099595 0.9827898308838112 -0.4497491391410935 0.0022700531687191994 -0.5830782296274175 -0.43076916113275554 0.5437103513783048 -0.53926337919648 -0.9338695426381558 -0.9357890330133889 0.013872534677490389 0.8008418471426619 -0.05075670153513112 0.5396970610066938 0.18131184161327685 0.9235503351495249 -0.007658398244443809 0.04967695545398709 0.6070743836433599 0.4474737603265371 0.40902510475591325 0.4501337779690484 -0.779984766812494 0.789551694216591 -0.5846410714215233 -0.49986734784093323 0.9043948723790436 0.6037726857585557 0.8768598777641969 -0.33536248524854106 0.7729707627669438 -0.20215115242114678 0.7707965307326645 -0.6170343122919142 -0.1359125618216641 -0.3014202326850506 0.667213955814552 0.18257103931655405 0.6353416379675432 0.25215449140245383 -0.701905454018863 -0.9261408973239238 -0.37761716731217354 0.16599245003780783 -0.8342553346997368 -0.10380581563739932 0.6134630570041308 -0.1468117368753743 0.09507281949302993 0.3306249304282076 0.19282827100245248 0.9701090425429684 -0.6168722138194305 -0.3663369390329978 -0.6462910637386661 0.3719782539646741 -0.5599198271366022 0.500912978730055 -0.4029641157894728 0.7630596426164638 +166 147 0.9469399157674272 -0.3990585097666539 0.6391414971922516 -0.11579415960839667 -0.921457084469341 -0.12733415924944325 -0.06576477106867373 0.9525531680568695 -0.9072689932491229 -0.5797616519678042 0.915243280864473 0.014408208109757847 0.3622218528023984 0.5945389757388253 0.3619350621194799 -0.4778418840665064 0.16424862663022766 -0.04825957461435104 0.8265455454288655 0.9242138446011134 -0.1178090208873468 0.38416945816151604 0.7357717363214076 -0.2319752420428618 0.6794875725480316 0.23360397027604818 0.08694768107163653 -0.3280540322859027 -0.8771444104801243 0.467573067470735 -0.10239570745801108 -0.6386219228196268 0.739781383372726 -0.2350693873721008 0.18573797518182844 0.29336272067892977 -0.5659094832421596 -0.7074268576076508 0.7388888393451187 -0.13686959247404618 0.10042063328682849 -0.9519065412934544 -0.33244004168604624 -0.9470955767710527 -0.06953349744219128 -0.9727855008408377 -0.8484672694728383 -0.4110240074063256 0.22965895278916104 0.2646224813258007 -0.6468403464561931 0.7652508588330114 -0.17243526519426977 0.9338606115096797 -0.45422309912897396 0.9119309247671812 -0.16980110358602496 0.2211012201042699 0.44719706456818686 0.3624988509422995 0.7252613334983371 0.5616905189159682 0.7017564282712248 0.2892638871737654 -0.7342732251075776 0.2598194067727746 -0.4979036001820407 -0.15541763156713118 0.0829961181020562 -0.999333542950573 -0.8769525193286916 0.08668850197301992 0.17174621571257398 0.9651742857132279 0.11813454958727898 0.2531823284206931 0.2776270615034664 0.16181275640263704 -0.015856441485286865 0.6504315918611372 -0.4632912142673207 -0.4545066221950995 0.17393079466174233 0.9938488388795794 0.6989244157247612 -0.725338966924028 0.7759311737300372 0.9702203293400906 0.21250269402160304 0.18807998457780872 -0.21523958349631278 -0.9400540216892359 0.6850556678457216 -0.05104708952569981 0.8046697862969574 0.24338067426298227 +166 165 0.593675908256909 0.526884959048435 0.5323476851013518 -0.5339578507766078 0.33227887352230123 0.4228398817001786 -0.776307362462564 0.07770260601969481 0.11505648816867531 -0.25632591526204807 0.1342479912136283 -0.7422851428170549 0.03341977981281863 0.5255715830736356 -0.01636326626866924 -0.36993317379396484 -0.26024099865696204 0.05713656049250315 -0.0026821802020675634 -0.252763365350295 -0.8997106387099001 -0.25258343585137744 0.555552373867167 -0.3256043158635704 0.5701977035571146 -0.8619635347982724 -0.45274901442032145 -0.08532804542434635 -0.0070742921364650435 -0.33639089637354713 -0.7713479259765668 0.008064243477810651 0.8880726588534669 -0.8963623981277835 0.2996759688789912 0.914267797221139 0.928511086524666 -0.7403223509183632 0.5912494718417629 0.35697315787149786 0.7380965535294324 -0.634299098457181 -0.4622280882229426 -0.3142059616984776 -0.16315685620065 -0.509827602461713 -0.374132057384581 0.581527564944768 -0.9670023499674709 0.9739745284335861 -0.7937648238211163 -0.6552536689836601 0.4331422502955051 0.8164812464526097 0.7171155898091852 -0.0797245700105722 -0.7914337138946712 0.07038841665712359 -0.11423126943228268 0.013951275208488267 -0.21373731707754895 0.11865422280392757 0.18502024967966846 -0.6216038775580437 0.0070281731799759495 0.11211375860650463 -0.9607206098127707 0.5244001933068558 0.7461813754566577 0.2092867695890599 -0.8822040680240095 0.6475425781657418 -0.5819919259862001 -0.012667180291123126 -0.41898761273588225 -0.11265125088477546 -0.7471356496342654 0.09315485224995235 -0.8342602779288684 0.9608680962780769 -0.2334741876112254 0.8058497163740683 -0.31172146804974 0.3907863646309382 -0.9105167613089784 -0.8351616106361532 0.4495035079232106 0.46416867835002606 -0.3625811080357526 0.03132104833578131 0.2899586776777823 0.5548429207874068 0.6673587113768229 -0.9196636706865597 0.6005728664538981 0.9483412731892256 +166 166 4.674521226756812 3.8222952523529727 4.241432481105461 5.569809056668968 4.965025285912532 2.738311625529956 3.8060627143520747 3.8371710006876665 3.824302961252009 5.214800908354724 5.264720924173787 3.051170541400384 2.641212421890055 4.23077010890026 4.097245334746325 5.035667711970005 3.1015647260608814 2.9198111745500217 4.142712476488246 4.401814857996104 4.542983678979413 3.2972459139898174 5.008291566453123 4.695312527228862 3.680378297650043 5.237796526951735 4.775839003362097 3.0656878840189017 2.278018130187207 4.0151027101662695 4.723944472858458 4.6523580854152 5.6212495530272175 5.911576260257944 4.497081496934427 6.073561281934717 5.290312624809679 5.017177493920426 6.31912073503466 4.383313847787894 2.9302274304903735 4.955097655798127 4.3220063525700825 4.750155912547899 4.554683039814688 7.229490394006274 4.997677783710355 3.28008355674731 4.2101231110599935 4.732904745935549 3.3100698743765165 5.051871079203261 3.4950598950464045 4.169489957214139 5.2296685008208 3.8021519388169605 4.878949072530586 2.8993607055058748 3.974195030181672 3.9350611270373763 4.369142729181643 2.792424153905684 5.459142959466235 5.071309220875948 3.4292247566362724 4.84538645576099 5.6685362778711115 3.160515220168028 3.920209171923192 4.295991357138734 3.457646312633648 2.729130560100298 3.5065973163797226 2.338737798307321 3.688432879954221 3.7509393295444253 4.2104486479782866 4.8628963063324315 4.654491828647508 4.434836762458808 4.060825722898128 4.124753530225992 4.151669714067519 4.336891006173866 5.565535431259448 4.113978210371526 4.365818757746402 5.485562104034614 4.505009665285231 4.1390799761128525 2.6144530515747313 4.59243971087546 6.285891287452074 4.2489363704355965 4.448318919046773 4.300533915390277 +166 167 -0.3366595335846798 0.7416969779440636 0.3594961812576809 -0.5442063164647559 0.9292972135117032 -0.23116181844805483 -0.34597320274031285 0.2534312092081068 0.3651471529723398 -0.848355256883454 -0.5738604366545947 -0.560591254594385 0.2694894883914085 -0.9792631700667453 -0.35838620666495236 0.8728224043317505 -0.8899160763583525 -0.035631996515849806 0.7002050342300135 0.2873638146949089 -0.9480166707867497 0.23494855811367144 0.08866514840213147 -0.7558371887989037 -0.10475381027100261 -0.659980862678555 -0.3276113099971847 -0.2054813327175935 -0.03404879502103464 -0.7509020494603253 0.9689592155916227 0.7531785886647144 -0.3735434300984415 0.532626469808166 0.369733479185427 -0.49096621377184246 -0.4655748352504556 0.2005158670898255 0.9993861262808068 0.4139535500616818 0.2618288623315752 0.4248408912275272 -0.4888623944384114 0.6835884246548753 0.6864193530282476 -0.9053510391482242 -0.8732439476347842 -0.5943857166647233 0.7134904771115123 -0.49943217028736675 -0.28290441053031223 -0.5585676087749638 -0.1882890181864687 -0.7413479783963703 -0.28032510480239203 0.14897719211056848 -0.6157592637553015 0.4124560006851452 0.15725173320237928 -0.6260540822150749 -0.8808265723641424 -0.2517705421523311 0.5689724333489625 0.7767175084018005 0.4753904351223064 -0.9726561898082424 -0.9962641101543765 0.16728692565574232 0.40183796439481 -0.5568244582271504 -0.6413910954002051 0.2312798348040157 0.29194131014769376 0.049971004649518314 0.32044874077880836 0.373065076911804 -0.9171636369634484 -0.8460486468078738 -0.5898703842786539 -0.13252181320548018 0.3150895676429206 -0.37769598572847674 -0.9361212571895778 0.921266654178206 0.08371616877009935 0.1315497890800481 0.6916975640846443 0.9446474554032469 -0.5942371400547664 0.7720033731637503 0.08378696172447397 -0.9305475695215499 -0.9137561666055205 -0.4684475929703036 -0.9024032665692956 -0.3017871479644503 +166 185 -0.0935683941172758 -0.0031736839884870527 0.24002916850360734 0.582692294984263 0.5245501335464982 -0.21347617600153823 0.3898156209320549 0.2595961276867653 -0.6780965076346639 0.6678953079089252 -0.5142536486959037 0.22519446783591168 0.8179044589947391 0.8077081684838527 -0.47168587379453797 -0.8997808349753569 0.4546166815934152 0.4766208422210432 -0.1042209421915734 0.32875911948887016 0.13436179201714693 -0.4336447606867304 -0.15309588479731429 0.532054342141578 -0.1963148919159141 -0.04947655915081395 0.9962769309053674 0.771020881250833 0.2936838301276741 0.011054312836667357 0.9976862912377693 -0.14163537735802678 -0.5086105099133964 0.9867763771839491 0.49243135192032983 -0.8534591095710655 0.8004373060442056 -0.26652694983220804 0.9063516904234903 -0.9170419287214184 0.16065721140403055 -0.6596683591179262 -0.28271103287584287 -0.02702295647109132 0.5935398045673921 0.663366456258986 -0.45427493218784787 -0.10069946607797742 0.5572422220695425 0.6090320168958121 -0.24087021506161355 -0.10782776477085299 0.21713602285084654 -0.28251562175270095 -0.9659173357349089 0.6562477574349848 0.8921259117132401 -0.42264424099262277 0.5473636611980612 -0.0934286865931584 -0.9415562995299729 -0.6111804472821538 0.5456382334486012 -0.15564541105988483 0.039612150375862853 0.2724242168192843 -0.11170856196904122 0.5076044512364684 -0.5360226856149919 0.7709011455678878 0.056195968642755334 -0.8017806997391748 -0.23906384960619254 -0.26437988307433513 0.6763498540760899 0.06214012165857441 0.21351628877847628 0.03674588875830831 0.9096373743833832 0.5467200625808688 -0.4870038003924868 -0.11060494950537003 -0.6220898761069145 -0.3614315306676761 -0.7153121281293369 0.2540945223098874 0.7034823092943743 0.03420967642123429 -0.8517952689845429 0.4042937206181121 0.055612254917540405 -0.8306471182465767 0.6608887609842704 -0.35380045409747196 0.5284622958193665 -0.25133820190010314 +166 186 0.1972693017304905 0.03218515250358611 -0.06290194186774656 0.7516050151621789 -0.60435300827939 -0.3228048147795044 0.1859845929643127 -0.5306130607909203 0.4017611009821256 -0.30424469265321763 -0.6329564775766179 -0.08191801968369483 -0.055110050820426304 0.0038373027331120024 -0.7411941536437956 0.7368342433636288 0.7068659415319449 0.16333915022351086 0.3166045832097766 0.1609233317044636 -0.2903535998950524 0.6195137640896604 0.5077529115401087 0.22280061350072478 0.6586840089801052 -0.9063822993477557 -0.2361144695091153 0.21226693981882927 -0.007152444769227051 0.8694054643093765 0.366290475139883 -0.8726926279016101 -0.49632760264867715 0.5167169162471923 0.8520965652848276 -0.9877895394636418 0.5319954329376049 -0.976770892675878 -0.7942873999675584 -0.8698419416143712 -0.30458317654814704 0.5778783643266532 -0.7197108403868544 -0.9417811927069624 -0.737965028905962 0.7923727698913003 0.12228794935330844 -0.38545880880220684 0.1117280600255659 0.9460407026087667 0.35789641392406835 -0.7142386008173591 -0.7881655399094518 -0.7384932086555418 0.3803513058127208 0.1819782597494437 -0.27542369297895 0.4235066002181347 0.19639361938112554 -0.5887983690271401 0.31804185001526375 -0.31266013230587175 0.5478633605734942 -0.9793146841006906 0.2032045496863355 0.7351318719386928 0.956786871704403 0.38092148236783907 0.6081866187097611 -0.4878118712592785 -0.06329256135441108 0.42412215813852283 -0.45452618611127993 -0.12243234172549444 -0.030633012108264746 -0.5882494446959929 -0.1436832153931371 0.29073143321652917 0.1537135504672118 -0.7364733417358396 0.21306658549604895 0.42110196415439427 0.5594093711205048 -0.24807556111022122 -0.5690556654665657 0.04827915934394644 -0.39466424051548055 -0.61602710131735 0.9514632845853046 -0.7323073395509307 -0.5910811937850922 0.04025558079078584 -0.36243585867416406 -0.7107170637105558 0.2586338875712615 0.115939803388031 +166 187 -0.917973251849383 0.8778166459725785 0.9552314854964186 0.7102821786500959 -0.6298084344485004 0.006764512194362249 -0.7069586693789218 -0.7490550077221236 0.14773089714034504 -0.3127139547759661 0.15963507237073715 -0.058944602230661 0.20363087231686094 0.6935857826292979 -0.5471887675423261 0.10346297625045464 -0.04347100128295023 0.8673886637631611 0.8758150964009832 -0.8130453682176217 -0.8861200386652621 0.5703275185321157 0.8331478182983441 -0.9499353574001206 -0.5123927905054892 0.7695645335306798 -0.09197370671775817 0.001122857865781146 0.2440067405732993 0.21903372289504075 -0.20337332356628623 -0.7342973370805819 0.6915012329030412 -0.5990230541604895 -0.8114934793909321 0.42756911112575136 -0.9443998703475824 -0.42170641727749025 -0.4569819800998769 0.4753663069863505 -0.029294921921399597 0.8021737108136311 -0.8888449435161025 -0.18411126348062812 -0.03443738573247335 0.991790160523232 -0.7381104675961647 -0.1685167857613883 -0.5017798735711185 0.05454701811854035 -0.021824779056085042 -0.404026599455928 0.7115607357207796 0.07620501528911383 0.8517311602919722 0.13380195175694554 -0.7517312607375068 0.8067931361116389 0.7669758997831917 -0.9426902227283049 -0.32751974341228096 -0.14358704453147686 -0.7433289433698962 -0.5140366069098046 -0.41036663819280483 -0.6694638018219481 0.77632755309359 0.07380898486245857 0.2416593202503705 0.02678207760574236 0.10435184591378999 0.04908083939230856 -0.7631725571432246 0.18446000240160387 0.6551680094981307 0.1805616128084917 0.6815602416303967 0.7468672765191664 -0.480442229425478 -0.19641947200569643 0.5456516796164603 0.18204130614096603 0.2036162367853429 0.8461674379615594 0.9300027720516384 -0.2069565462888685 -0.8751594281096975 0.20356910376401438 0.36049168406674026 0.9615056159648849 -0.2530752958016629 -0.5142049251789713 -0.9937154054702326 -0.3766735377546133 -0.5055382597461555 -0.47931678993714955 +167 146 -0.27511229582660346 -0.35748086123439116 0.745680212140917 -0.05075174477777433 -0.6769229297575818 -0.17173565782770805 0.4319737041090925 -0.8630525512636569 -0.05990629125206626 -0.9929417641725902 0.23883494215522183 0.3479275757007725 0.17132727249978474 0.6145428565252673 0.9227454701555025 -0.04116614825565068 0.17672786837347476 0.4806154269263798 -0.8896380057920443 -0.24702964298554653 -0.589421749232881 0.3634007085459625 0.18750313385644501 -0.21251139219175053 -0.6430398804852817 -0.33855724954563815 -0.5705166429152979 0.6433420791334121 -0.8803613995680362 -0.9996000185702354 -0.46028322390157683 -0.9338423828474787 -0.4351991608548733 0.3526539801838875 0.03931147899442289 -0.009848128478481488 0.7586909787115459 -0.3754030842730065 -0.7201478698271384 -0.0254193537297287 0.48868343106735757 0.3066022495330698 -0.6008995195673936 -0.9818271020759233 -0.884792061516406 -0.39421843510816656 0.4560626905133123 0.7567430302952518 0.6152860606414234 -0.8107460823332628 -0.06742658472466312 -0.5349118873405403 -0.5429672016510081 -0.7698494883222495 -0.8499703968866184 0.8124341662483765 -0.7017079547884948 -0.4546363125616175 -0.1310877495168461 0.743069062334692 -0.26307582130729923 0.3909608485337337 0.3506590340600224 -0.9488740824662432 0.7676898422314498 -0.0705446135780623 0.34511051893569133 0.23036140144650274 -0.8097975724256725 -0.6389267661681273 -0.9718014900010152 0.6786416524417465 0.3318773188027395 -0.9483037081791075 -0.022157602436781554 -0.653404247070233 0.1575996582882202 0.8321542044335581 -0.21583562495892328 -0.18030240256247176 0.22371213459639594 -0.9901489832323065 -0.48375094180205935 -0.27370919624112244 0.37990865824171216 0.23844180969835893 0.4889554277871955 -0.6592492069421889 -0.646160143601648 -0.5599732399075124 0.6208359368770631 -0.2739961994339637 -0.049954409378920595 -0.9933345086824774 -0.9605297540022866 0.07655818876617393 +167 147 0.7468459700176395 -0.9122260604570787 0.5264963200914743 -0.5215260224774285 -0.6178818581299508 -0.6153018410840454 -0.43526288278720027 -0.9637094376892765 0.9240839988593308 -0.6651485792181167 -0.2162917357020182 -0.03505388475457849 -0.33065913711593153 0.6320178943138937 0.5341959262962206 -0.9888609837523987 0.4300647270588449 0.6691611593008806 0.11111948783982961 -0.4003596473098554 -0.6393191423132587 0.243934556326866 0.006742899716251971 -0.7385792455852569 -0.923160010076375 -0.518680921991939 -0.5243907544244952 0.9680622180484357 0.2781326164165814 0.9387559359849094 0.09273267392283935 0.6353974519033287 -0.5110834991639082 0.5900672222931866 -0.6621901265243915 -0.6060195060577174 -0.09176739922431931 -0.6659100840139289 0.9999394964696129 -0.11809847462939316 0.6182196804537967 0.38422335576034095 0.897768499470706 0.1929685206349725 -0.4531675668487005 -0.05202220542827707 -0.7336061840174832 -0.8359707481684451 0.9843250343410899 0.1771825596298744 -0.043317067472482984 0.9454615026374305 -0.24707568700601312 0.2909229750552569 0.9535675504463219 -0.6146573750215194 -0.08679998935210809 0.21477279584870712 0.6957510028862677 -0.10139845657924984 0.907083579719143 -0.37648908132699566 -0.6603433468189834 0.6030929533723122 -0.05098577707740359 0.46000259617814465 -0.46000479440939723 -0.26439933281034245 0.7778690452085921 0.6483694816671188 0.48605530241687656 0.7674075809349377 -0.4562288786026436 -0.7229151658371924 0.7959222640349719 0.5074368782254863 0.516002093889903 0.9998915589812352 0.9635719028551746 0.9005319046388893 0.23758127733657086 0.5585981887125511 -0.02757248373215293 0.949445974922573 0.8665951006183275 -0.15124288262121666 -0.8935586999959437 0.08753003351621147 0.843613955363204 -0.2706634569087536 -0.09808988759781911 0.8121761273009569 -0.5967018702351716 -0.5470028156459605 -0.5866860294944161 -0.223139046424375 +167 148 -0.11912243066312334 0.0215443763745522 -0.7929523527396685 -0.9922259668277871 -0.4792191695426342 -0.6993022424355462 0.21280486716371083 -0.8514638120578002 0.38548165802144463 0.8972606559411058 -0.6354742183788884 0.9452621960987431 -0.0441736838043969 -0.338809239020494 -0.622101140975934 0.8623637139932692 0.9426395374319989 -0.5239669477844815 0.734839335124263 0.3930286773030274 -0.6134184177663731 -0.1880196777883667 0.5588774221635378 0.41175208207561753 -0.26841266398189734 0.6529369619670826 0.10031301540239856 -0.8626038969084571 0.8979338343754402 0.45083032056656447 -0.3653923418465266 0.20514413185678215 -0.9027905143923975 0.8435430956894683 0.6545229947648599 0.7545639264412642 -0.6132095660640471 -0.2648307538092429 -0.46670750251421866 0.8721940043069296 0.7348894132971189 -0.9994215081517088 -0.9368014511820348 0.8199618068332257 0.9395025598288806 -0.8939976840707609 0.7963970888074756 -0.731187358968765 0.5345291013191649 0.11853859210210893 0.4118828287126155 0.2900353736836583 0.5624314340413885 -0.003905723160045671 -0.17409778020821798 -0.9253667828600718 -0.6236087892547844 -0.08172048871451043 0.8974781076543896 -0.7993744176571207 0.8525978889330617 0.31696648099930624 0.6244064921542736 0.4418261069967 -0.027290202703902366 0.4313857875754503 -0.6954717075260928 0.5824286719445049 -0.8823778514672589 0.8497851310732158 0.8463063687347572 0.7947620787620224 0.2009993964645831 0.5057218927370357 0.8855988039460456 0.6636373458886304 -0.9418842351736658 0.2912915798530462 -0.35505921277408037 0.24808706723803509 0.3289307677236244 -0.8514963598735843 -0.3007849333596897 -0.8732489928060667 0.7550098953948965 0.22530836064890414 -0.6719405193461931 0.6687051574682885 0.10828688676641351 0.4265654935286791 -0.157133300804982 0.5635925915279596 -0.9663598559438666 -0.5170016468268621 0.1368337045510717 0.7922082800040606 +167 166 -0.3366595335846798 0.7416969779440636 0.3594961812576809 -0.5442063164647559 0.9292972135117032 -0.23116181844805483 -0.34597320274031285 0.2534312092081068 0.3651471529723398 -0.848355256883454 -0.5738604366545947 -0.560591254594385 0.2694894883914085 -0.9792631700667453 -0.35838620666495236 0.8728224043317505 -0.8899160763583525 -0.035631996515849806 0.7002050342300135 0.2873638146949089 -0.9480166707867497 0.23494855811367144 0.08866514840213147 -0.7558371887989037 -0.10475381027100261 -0.659980862678555 -0.3276113099971847 -0.2054813327175935 -0.03404879502103464 -0.7509020494603253 0.9689592155916227 0.7531785886647144 -0.3735434300984415 0.532626469808166 0.369733479185427 -0.49096621377184246 -0.4655748352504556 0.2005158670898255 0.9993861262808068 0.4139535500616818 0.2618288623315752 0.4248408912275272 -0.4888623944384114 0.6835884246548753 0.6864193530282476 -0.9053510391482242 -0.8732439476347842 -0.5943857166647233 0.7134904771115123 -0.49943217028736675 -0.28290441053031223 -0.5585676087749638 -0.1882890181864687 -0.7413479783963703 -0.28032510480239203 0.14897719211056848 -0.6157592637553015 0.4124560006851452 0.15725173320237928 -0.6260540822150749 -0.8808265723641424 -0.2517705421523311 0.5689724333489625 0.7767175084018005 0.4753904351223064 -0.9726561898082424 -0.9962641101543765 0.16728692565574232 0.40183796439481 -0.5568244582271504 -0.6413910954002051 0.2312798348040157 0.29194131014769376 0.049971004649518314 0.32044874077880836 0.373065076911804 -0.9171636369634484 -0.8460486468078738 -0.5898703842786539 -0.13252181320548018 0.3150895676429206 -0.37769598572847674 -0.9361212571895778 0.921266654178206 0.08371616877009935 0.1315497890800481 0.6916975640846443 0.9446474554032469 -0.5942371400547664 0.7720033731637503 0.08378696172447397 -0.9305475695215499 -0.9137561666055205 -0.4684475929703036 -0.9024032665692956 -0.3017871479644503 +167 167 4.131373698876116 6.519195144296727 5.06996894900654 4.5430812646823755 6.015454726041398 3.342732450522874 4.608418035161744 5.844356627754191 4.817900981061241 6.227981989807782 3.629478116982479 4.401860131542148 3.999996191215046 5.324428255663381 4.746702116283446 4.777812066455651 6.093418438541784 5.491351479873073 5.079962379779055 3.5937642438338733 5.467758752727866 3.336846093379978 4.3401414804971825 4.312476763075684 3.4965717541008483 4.393697471096292 2.507765447824537 5.186025526469287 3.250160043396604 4.869663725587299 4.6816204089965225 5.311609607039932 3.7896332566273 4.935504553212111 4.351876698296931 4.3712429055393205 3.417172112901115 4.159198714558182 6.073813890859879 4.44682624461853 5.601021997971986 4.311541487220154 6.905016947173386 4.9824654359111715 4.776333996645396 4.425903681742832 6.081879709502893 4.4129409403421915 4.953548199029178 3.9369831850342836 3.9064931088692187 4.691220108877343 3.48307174293398 4.145844621693582 5.258996415101027 4.644307113453364 4.2851962382182665 3.7621012950267994 3.788102767434461 5.171212985246576 5.935268762562948 3.6366791454470535 4.089287160014919 4.171409342203005 4.150773467828019 4.77139988544622 5.098600617373238 3.394772149402127 4.472087127660983 4.528338721773398 6.335867317557456 4.821601661460892 3.522065366019576 4.4469723811084165 3.605953050965348 5.3679139889829415 6.020017706231525 4.831669923996465 5.100389620062524 5.467629827482659 4.340057698832907 4.136917488073704 3.4176014370573324 5.774132102350479 4.238004291206698 3.3923229767767684 4.61240448240253 5.883417871736133 4.057321601535321 5.536243326559242 4.335881432558972 4.337489712727506 5.0346777686295265 7.149547615804153 5.539140865800133 4.925957179720336 +167 168 -0.09045388778751895 0.9080270695850963 -0.47343839497498674 -0.5240487734591821 0.5639873817854668 0.3297293173980895 0.803925082045456 0.859132693604435 0.1416431895548922 -0.4747532483045518 -0.16010190803486557 0.6473800680346642 -0.5086791498652867 -0.42560065680422876 0.34220418319913803 -0.5892781590787828 -0.7456612839790315 -0.9836259671984295 -0.7285026509585646 -0.6190218153478537 0.7715239402249592 -0.6995613335825093 -0.5179111523992399 -0.35978668711029216 -0.5522878777838036 0.3220128810221139 0.45189859784927355 0.6025082211013733 0.3676303016293647 -0.5811806969163271 0.8310596526705263 0.2377145352674317 -0.6105647821044455 -0.45525241465673894 -0.992101590413299 -0.6125616815049955 -0.14071574815505672 -0.6320445290847791 0.9661967613481497 -0.7799951757438184 0.9977675767061671 0.7473515233883401 0.8475563119714771 0.6481609965837849 0.4373341585657611 -0.11930419402579329 0.574935342908447 -0.0500553450800445 -0.8371231014847522 -0.319987582675497 0.5999766862130185 -0.5463059360373974 -0.005800083694217362 0.2907470311636029 -0.2274993471679143 0.9637791552772212 0.45235516814723 0.9992440272223588 -0.12917911404012994 -0.6505756449150844 -0.9004269843797694 0.683142722180581 0.25071696432433277 -0.1529180909183978 0.924460981910916 0.5567501594330673 0.04803331625090923 -0.19224575993062576 0.5785386968140962 0.5185270624829139 0.4948894238617134 -0.6999605278489851 0.7716774473002868 -0.17528140094564426 0.10249682925209136 0.0486868397532938 0.3041252148697169 0.4000136760766393 -0.576126782643906 0.9039399110604158 -0.37811610954428154 0.42200207317793437 -0.016594835812463238 0.06157077975931813 0.6876519825236169 0.21362606765488912 0.6956100108128855 0.35998392883620745 -0.2967239336064349 -0.9595407090821209 -0.7717353111388594 -0.3878802050715269 0.7929325589437917 0.9660692253015077 0.406403341014137 -0.725580986916355 +167 186 -0.5404431191216024 -0.8984982747932846 0.9295658130255602 0.2238808534035852 -0.983984800958928 0.9409112186750128 0.9184347924128649 -0.13340361930236244 -0.5733285612335728 0.25900099989564573 -0.5686799111385217 -0.8253890789233391 0.7244833297138422 0.9124815299829705 -0.3319002013874448 0.2915988013066051 0.615486258030949 -0.7339055683208235 -0.36402624018187724 0.2956218994723001 0.8590193791877316 0.859248312833991 -0.9471102445817507 -0.005583370971640633 0.12945159256489513 0.7011012691704677 -0.05851152050309705 0.8016389321929329 -0.1573008410784873 0.9220396946103959 -0.6266846248297722 0.8486590734196033 -0.14817595234121606 -0.829222001217433 0.4409933737779699 -0.7656426945155828 -0.18790427231606466 -0.9441983773988873 0.6192975459513674 -0.6722360180904032 -0.7044635471736662 -0.30016332066440365 -0.9487407097282317 -0.3905743737106808 -0.7921070745689103 -0.5005897584095853 -0.7943904305865352 0.36258733960251943 -0.8498372453599412 0.5587345053895147 0.7512191348673847 -0.26926327902450176 -0.10050210427636075 0.4554031894999462 -0.5643254926823495 0.9483648990365705 0.03946578250103738 -0.03546901044382422 0.18760869504911515 -0.23298345214287486 0.2814169508304265 -0.3235523006167169 0.9243794502849523 -0.5503112360866618 0.8763241682794316 0.485007972021966 0.9733997961398533 0.5251184017008068 -0.7489602702787312 0.37673802520259847 -0.9871137545426252 0.3194780805412907 0.023912847954288052 -0.7298862160929007 -0.49176111391907695 -0.9856215848858525 0.7072812262496639 0.22087932327553772 -0.18332369722170627 -0.7588605040413952 -0.01041172420838099 0.19256928259127548 0.26758953359032334 0.9490880938544008 0.14696387836621772 0.7760266799314726 -0.3393917123724861 -0.8243805482599518 -0.234849000239576 -0.8072423002207263 0.8742634862374494 0.6776681703305989 -0.5171422760384199 0.8464929796339506 -0.6161099357652771 0.8640649214483771 +167 187 -0.6251543734905618 0.7065852341831291 0.28151431739621025 0.8763292106009672 -0.9181013678764915 -0.14710120625479073 -0.13528717393349288 0.8478364147872408 -0.8867128189732436 -0.3510998424887841 0.5261116600210707 -0.3794563822785111 0.4667867034193065 0.4236821214443469 0.37159935475862804 -0.5939508118742989 0.31063881717270414 0.8666857645768755 0.8793937704759236 0.3943522806042672 0.3417121002317476 0.12625910388384365 -0.7601717519276219 0.986431597736283 -0.280819094903046 -0.9112987493391 -0.15773604026627508 0.27508352532852753 -0.05028116389078785 -0.07028742751650552 0.9460498451524935 0.5305802417616705 -0.22685951580033126 -0.2533895880807593 -0.28161661597549914 -0.4545767078447436 -0.4650417666089506 -0.7406371349418419 -0.47836079390917075 0.468464021802917 -0.7322365988440742 0.43580398075323856 0.8557042213012389 0.4795646735507939 0.10628036855210299 -0.9556554193077866 -0.9293700834063157 0.5849009842642401 -0.2073639233019433 0.6112425999886826 0.7902890854978162 0.6975819857240018 -0.8327717001000243 0.8166527638923531 0.7359980521991887 -0.014852507089583522 -0.5531800655306223 0.48977431499188206 -0.6164700901370042 0.44400713810806103 -0.9699093230525182 -0.16528538010010996 0.24846212583722127 0.028912984960655086 0.20744211200023321 -0.3612969212179673 -0.9405378373984876 -0.28524374179365997 0.16276660710379676 -0.6355521382138911 0.8005032751572574 -0.20739142694686596 0.5419841091128721 0.05467920630552858 -0.3002778227894578 0.9928899728622789 0.9476128420554091 -0.2358711721467177 -0.7781874523474701 -0.434306322628798 -0.8775489330282169 0.2725102203498362 -0.742089992860246 0.7698973587322735 -0.7515949002469284 -0.9919093450634211 0.5687483992581657 -0.5422376460750145 0.5825846102603891 -0.4972805959218469 0.9886517701830266 -0.10246159815732114 0.8461429707860169 0.9433240156642355 0.4728384483434862 -0.1375903534093481 +167 188 0.6964133085742434 0.994298563515311 0.8491928877842974 -0.045917200553842186 0.2627486235771137 -0.1265075560050659 0.7938672429430724 0.3737741830656691 -0.885110477812393 0.9893654894459365 -0.017765323800026156 0.19611095922669897 0.7853546319914768 -0.6296644726210445 -0.6780378122603208 0.10789291859147543 -0.986286993676075 -0.7194796452853427 0.16806246210101783 0.7284576560134648 0.49701252534635487 0.3989294460397905 -0.9644158428823721 -0.42899472666616645 -0.24596705447872225 0.16704914692887263 0.27935936122923 -0.29398507779575156 0.5602889534340563 -0.054322994833486016 0.330058165271778 -0.4498215724768875 -0.41964108795686705 -0.9303150377245604 0.21967934562420122 0.2753702211163327 0.6603549246609559 0.08736606871243846 -0.07743056983016117 0.606575308739195 -0.18519167084483357 -0.3677444489998334 0.8599239744031173 0.18662469004506477 0.37023970398671113 0.2147602103294466 0.41736375114205826 -0.009320754046772572 -0.2012328677648192 0.37674817206284694 0.41503748861045686 0.3532653430007613 0.7257441981952211 -0.4050945733259925 -0.7292903425764243 0.21105090856918562 0.718053762940497 0.6577184168003236 -0.3679308751966255 0.7036044793181204 0.3468577480559689 -0.6207570881926994 -0.39704182326372917 -0.6326065337175886 0.19043867336920695 0.5061343969053631 0.21360921526963628 0.27448267085758626 0.04414215195652971 -0.23259914695201145 -0.9948831614396547 -0.3455942301218877 0.7521054300640078 0.3974109650863189 -0.3141361320870051 -0.5136382705838962 0.8394054765528411 -0.5396964163279454 -0.8238723840376534 -0.9943152610459443 0.9905999297593076 -0.12719653400627706 0.16739539614507493 0.2675278637203766 -0.006480912001664008 -0.36153258307695024 0.19489658630445716 -0.9863710685722475 0.4133614436465507 -0.6269716087122916 0.08391861899032893 0.5420233810154855 -0.021410047682239863 0.983186524633292 -0.8734821270105326 0.9225450023161679 +168 147 0.4323259699679034 -0.14023584763033625 -0.9573446486919612 0.9003988556527887 0.6281427087411648 0.4243726634069025 0.6158265993921885 -0.32455903957828736 -0.3553926635435771 0.9380855646642072 -0.9110567393802294 0.7209347896382987 -0.6954386976357676 -0.04568344623872256 0.8365521834672818 0.7554063788014347 -0.814849252054384 -0.7645566933160208 -0.4901771070160328 -0.6352136901182679 0.8242660221286742 0.9442538053828855 -0.7298914167587027 -0.31482159302125523 -0.5615234488689043 -0.4980303329124589 0.16146879638398604 0.8968974309858395 -0.0526768691854933 0.4446980490242094 -0.5049307617206069 0.48028234033138517 0.416552408479929 0.45421111038813033 -0.3362049906808966 -0.9335212281995475 0.5983259110733246 -0.11107317343212397 0.8556550209913687 0.8309391557752599 -0.17190632405842465 -0.30647861045370783 -0.45112295281703463 0.28957832301680897 0.2111642676049721 0.27286295867570964 -0.12488039471188594 0.09081188603159873 -0.9620660582379064 -0.7759315913361584 0.5986091222854477 -0.8647374736417255 -0.9454340644543837 0.40006720144072583 -0.30558204250714605 0.6868302999207898 -0.9444532241265666 -0.3250908400990724 0.5913441301066746 -0.7298445357495278 -0.14195967521137942 0.08879237032249887 0.0043949139599170906 0.9329673427453584 0.13920409646059273 -0.3647684195411345 0.552094100052227 -0.6223976731552396 -0.8711731606374895 -0.35115065799773326 0.4660176453370286 0.9354391386912326 -0.491157568945922 -0.5914326556746419 0.033754010889750274 0.35371618873005306 0.6043772195883341 0.9811476351552735 0.16524342285722016 0.9063319097171065 0.06904838139138003 -0.8215808243445268 0.0667140375485864 -0.555076678319155 -0.7621953623038253 0.08288973234003105 -0.763081468797153 -0.5465504762073929 0.6934811956073486 0.26946997007847195 0.9431127785389715 -0.5616748582070112 0.8743007799810274 -0.8071395128048131 -0.23789271395260903 0.028560702211166467 +168 148 -0.6233106690413741 -0.18918041881945502 0.86364793129924 0.580529478365738 -0.047349530656091376 -0.8897482729673842 0.8057664639022741 0.1999237579247639 -0.7278438340109814 0.6716957027631323 0.05032269116643917 0.6671555120001438 -0.055220108189987016 0.31677487582208697 -0.9995127279931344 -0.8972357538638116 -0.6202573202045689 -0.783996389245315 -0.9879370713862685 -0.3904166432747769 -0.46132803552678836 -0.9225638008641399 -0.5928918179052753 0.7409738601305365 0.7436760590836904 0.7337220757577283 0.8886295744074346 0.7357054964857226 -0.27595371719832706 -0.1291455655572673 0.651037563726816 -0.44291371986719374 0.5063798315171311 -0.38784782850384425 0.3473738879061774 0.4024927171489836 0.6163064529090418 -0.8169072865957985 -0.35111858883770397 -0.32081774617111924 -0.4973065235497105 -0.42359035862854255 -0.5136866607495085 0.12800757107601246 -0.19481420980135034 0.9437965341567383 0.5609102025306034 -0.012776946921547738 0.06214797812343442 -0.20259527435463331 -0.9418537471093891 -0.42802781908860177 0.059854533546506605 -0.5365547334511367 0.7481310389998748 -0.5045269065714393 0.7418111197925041 0.6832483714861797 0.48274370134979905 0.5101503689484876 -0.21139647539314632 -0.2536732356071807 0.856650572166074 0.0674603075742155 0.2627956933426616 -0.7924680426335835 0.6433552831188516 -0.3579511367867063 -0.7364533569384524 0.7807316303590313 0.8480475233607903 -0.4246729662064179 0.9439511600751722 -0.693082468935956 0.2966156168255951 -0.34712306916752644 0.054301817062552216 0.8213166789616098 0.8076555413920639 -0.9878560876916243 -0.712492781650605 -0.9369235688330815 -0.30102666291313196 0.8160722079546194 -0.9101857771039394 -0.6299372824099758 0.0001429221718451945 -0.31388023134255905 -0.9128336279592348 -0.608419369274235 0.5674948346877009 -0.10464161361212776 -0.7396025328174536 -0.9713598729394712 -0.19025720769953347 -0.5545550351592747 +168 149 0.24487764011114543 -0.9805229553798851 -0.47925125840489646 0.9698837882475977 0.5539325233336319 0.14279139660132412 -0.9245871523263633 0.8079938329495235 -0.2730384365199481 0.940203481844905 -0.7549265637595242 0.3671131281137141 0.5449141336982803 0.054692915048710544 0.3300260473764052 -0.3802581358624959 -0.45551845297221427 0.12725843672824388 0.08453699366266698 -0.39512189090287086 0.31363290482284856 -0.2945845131260678 -0.5948200512246731 0.9745768167626114 -0.4479313223995358 -0.014525579485738627 -0.3538774883968585 -0.2552307087251626 -0.8090144689472076 0.31967102019090454 -0.31641238232143976 0.20740997566547792 -0.9071104504705498 0.17679767117747192 -0.8522839696579803 0.512491159540049 0.8063719141039709 -0.643301427762452 -0.6181344439820236 0.8625877047913544 0.17965567434753638 -0.8504845561766361 -0.8989159516739778 0.12139709328254744 0.5988226648599133 -0.08893077843947239 -0.6749981308322028 -0.2962430305094952 -0.03284854926570824 -0.9667633727914444 -0.5254673445302442 -0.8814783830879986 0.7584328530524531 -0.5986100022309329 0.17552177820869108 0.7665640583002156 0.5153253462764562 -0.18839371605379585 -0.5249152920373668 -0.7947720711433528 0.05645729836634583 0.5463799693180005 -0.6403397560952597 -0.5201829879821898 -0.7713532668111214 -0.5962792195034028 0.8397362118251392 0.022578082370969144 -0.6546482244760483 -0.25915249899747805 -0.724242432587719 -0.11276940405100588 -0.28947864664726586 -0.6949707273797128 -0.8431780364244716 0.402458517341316 0.8438766033386775 -0.41745650977478554 -0.04530984370100044 -0.416730048687298 0.245189183767899 -0.11191898155729163 -0.5472230133184284 -0.8543656111304274 0.40354052282017316 0.6344606154685855 -0.02609192363895163 -0.2751885924399933 0.14448871827698673 -0.071932654379256 0.7228539758542103 -0.9659319203840477 -0.2496758448123113 -0.12602859184141546 0.12587464847578267 -0.9687742335822604 +168 167 -0.09045388778751895 0.9080270695850963 -0.47343839497498674 -0.5240487734591821 0.5639873817854668 0.3297293173980895 0.803925082045456 0.859132693604435 0.1416431895548922 -0.4747532483045518 -0.16010190803486557 0.6473800680346642 -0.5086791498652867 -0.42560065680422876 0.34220418319913803 -0.5892781590787828 -0.7456612839790315 -0.9836259671984295 -0.7285026509585646 -0.6190218153478537 0.7715239402249592 -0.6995613335825093 -0.5179111523992399 -0.35978668711029216 -0.5522878777838036 0.3220128810221139 0.45189859784927355 0.6025082211013733 0.3676303016293647 -0.5811806969163271 0.8310596526705263 0.2377145352674317 -0.6105647821044455 -0.45525241465673894 -0.992101590413299 -0.6125616815049955 -0.14071574815505672 -0.6320445290847791 0.9661967613481497 -0.7799951757438184 0.9977675767061671 0.7473515233883401 0.8475563119714771 0.6481609965837849 0.4373341585657611 -0.11930419402579329 0.574935342908447 -0.0500553450800445 -0.8371231014847522 -0.319987582675497 0.5999766862130185 -0.5463059360373974 -0.005800083694217362 0.2907470311636029 -0.2274993471679143 0.9637791552772212 0.45235516814723 0.9992440272223588 -0.12917911404012994 -0.6505756449150844 -0.9004269843797694 0.683142722180581 0.25071696432433277 -0.1529180909183978 0.924460981910916 0.5567501594330673 0.04803331625090923 -0.19224575993062576 0.5785386968140962 0.5185270624829139 0.4948894238617134 -0.6999605278489851 0.7716774473002868 -0.17528140094564426 0.10249682925209136 0.0486868397532938 0.3041252148697169 0.4000136760766393 -0.576126782643906 0.9039399110604158 -0.37811610954428154 0.42200207317793437 -0.016594835812463238 0.06157077975931813 0.6876519825236169 0.21362606765488912 0.6956100108128855 0.35998392883620745 -0.2967239336064349 -0.9595407090821209 -0.7717353111388594 -0.3878802050715269 0.7929325589437917 0.9660692253015077 0.406403341014137 -0.725580986916355 +168 168 4.202355571311572 3.8335822041218557 5.064469159561137 4.999060835798034 4.577030843447229 4.062395545202897 6.557321093670787 4.311671953855553 3.6606471620554 4.834459997471932 4.6400508911491265 4.043570619854792 5.404017801389113 3.9002768136408426 5.022373369827804 5.518439303312802 5.86849606579423 4.759891298195432 6.116342124713196 4.101344241028624 5.374444952652902 5.475218900889145 3.874631910553797 3.831373811505107 4.87919225182078 2.5087030287437235 3.9714583983204657 5.0139868542679125 4.0066305685377035 4.3689556511184895 5.043984716444951 3.460738069149796 4.125488346338367 2.901833217146413 4.48640499479459 4.458157917454351 4.157870726725864 5.473039383177449 5.617004921286453 5.041154797976634 5.464623991880518 3.638589540958379 5.439092477294859 4.671249094532744 4.5136838760916955 4.059459924594199 6.216794283191817 2.4000430906356947 3.2562867068159154 4.929800492380667 5.263017986773643 4.55931554290539 5.077336329485075 4.224019405233617 3.070417383319292 4.8857698976501505 5.575682272340737 5.770198399960621 5.468667779146888 5.21755899685011 4.817463476948489 3.4104237907487063 4.496630449487198 4.074458618084099 4.852838006082084 5.493145131308672 4.4525336123170085 4.3632895840236365 5.374396710103081 4.402995279293547 4.657156323576563 5.1723485752677325 4.223092191238612 4.045516789530408 3.766449938047734 3.489744648353878 3.875952620675392 4.482058207938119 4.461566867813518 4.877891138999026 4.760584757323816 4.083527074099487 2.5541283216079815 4.707354796605072 5.204500178749285 4.3712312403069795 4.479591071111356 3.660632245434585 5.130092055033663 5.31677387731273 5.258929195331778 4.9250692442471475 4.447656340031394 5.904657684476515 3.024944504071675 4.600766830220555 +168 169 0.9581139935442673 0.06285058952762634 -0.24777517168546148 -0.18670251973953844 -0.6407309787864759 -0.6144471911963718 -0.5266399299685569 -0.3479984055013976 0.30697967811181326 0.43171553850264877 -0.8335140679760913 -0.10074004382974655 0.35812170341694305 0.9959238040011074 -0.14200500119838155 -0.6896170399691193 0.6760796095738386 0.3361486704687826 -0.7631907790984613 -0.43872475756453566 0.8746535020231014 0.7457410292817177 -0.2543772533342401 -0.08106548983544593 0.44618950606738084 0.06748257022780724 0.7989820241743142 0.6081701084213147 0.8964311469315225 0.8373612638559442 -0.4143441835363286 -0.6610088154678049 -0.11826611359102923 0.12255900522864427 -0.3614147817970277 0.6447687566305726 -0.252696247598557 0.7100978582606479 -0.23119956810935327 0.9813429418965651 0.35778598737805245 -0.21340874251583486 0.14113986590789063 0.7374867925525554 -0.9725686338576667 -0.6258537041094694 -0.590096138024184 0.38103742195826706 0.010300267559581577 0.576555745603988 -0.8002666658413924 -0.2965127929785176 -0.7891456547525215 -0.4682044329736408 -0.21528062090121391 -0.4909369613085959 -0.6047538733062996 -0.731718653523701 -0.899069224273473 0.6400395043717015 -0.8538166676474201 0.8560344295380411 0.19713449770650526 -0.1875172632651536 0.1659746437057339 -0.708083020922206 0.25304446375249356 -0.6586543684955941 0.7765597005909133 -0.19710515037635945 -0.30066078811294306 0.7242325603056743 0.17364529992977285 -0.5058265331632836 0.896204739139334 -0.9050090825522785 0.18898989764373963 0.2301090701145745 -0.41039856188882906 0.2495113627057861 0.8130725905812144 0.47514560074010204 -0.7445709629028934 -0.7006011657746025 -0.5555664262862383 0.3849495906600635 0.311610706549295 0.6819013349302909 0.27037576560575505 -0.6023083390146986 -0.35922377975214337 -0.23903565909948687 0.057973718053294876 0.7942826480374008 0.94511301178687 -0.7236537396749054 +168 187 0.24384526996987566 0.30063681382993823 -0.19567952313417258 0.6675547236286568 -0.45705454702578363 0.17538569767409173 0.8309536717767991 0.393577382137716 -0.7876252337245728 0.25470896939707544 0.5503192538423263 -0.14844860129632287 0.8147011474124981 -0.3289339320643281 -0.1716154068150495 -0.07992754417414383 0.6255034941786766 -0.2798980631011654 -0.9043733624078563 0.6314548145547727 0.6047652730090036 0.890639510427989 0.22829733685701936 0.1473150188909902 -0.22264193690948364 -0.43345766485549886 -0.20559239776628102 0.8197244819968608 0.29794276942043907 0.6853946586083908 0.38976050119940564 0.039003210529376275 0.38283391250123766 0.019270646853007722 -0.002941405465333835 -0.7071833127690266 0.17572187676992002 -0.2955219222366192 0.7257460809142069 0.20744247056668486 0.3838320364104846 -0.5199860594273176 0.9617445038959036 -0.8224393362863671 -0.9808832559705374 0.12837213633581768 -0.9457874347948751 -0.24630020827197452 0.6977605931068123 -0.8539595676296481 -0.1826599129083426 -0.4651610702365647 -0.4148543263862541 -0.842607953518588 0.7004304810062938 0.01246446257702849 -0.5993359951037802 -0.6310200405429396 -0.5552804927939745 -0.324316830908866 -0.7724356917838102 0.33886166997033307 0.8066126840969108 -0.7663470760059434 -0.7674316370264758 -0.4314843418261678 -0.39855486584059974 0.5752309183103961 0.3946711045215532 0.8815523569842043 0.9003121192932999 0.9858869270151107 0.43100988557837305 -0.34053490836547073 0.9540802376229385 -0.30334081514917144 0.2176547920997498 -0.811814464642165 0.8065593540477924 -0.13788808084978443 0.9352870715249508 -0.032054965907327704 -0.10070244866170142 0.8826643023528196 0.839714471209706 0.6580560839776552 0.5514179561740411 -0.12253823918049611 0.42645215310223694 -0.17877591610399857 0.19386346931847886 -0.159018294397975 0.22361764603132683 0.6173220154484347 0.4533060769551689 0.3398257920884178 +168 188 0.771398694452236 0.01663482106826275 0.1618285804359576 -0.27462304234028956 -0.7079884734275543 0.17906218314641054 0.9417239662603873 -0.5825825736333956 -0.5849007386164369 -0.9244328155940202 -0.1317424508077798 -0.45980897776032914 -0.8899369217263784 0.3752758579969617 0.7992553381028682 -0.8736986169323515 -0.9366080869488034 -0.12184998239751188 -0.4259392491385414 0.553176496783248 0.08812521569622267 0.5594764108401169 -0.46466198922059765 -0.8600725047212048 -0.6596311119285228 -0.11642434769436649 0.06719109147430569 -0.9141089236297621 -0.6056226834635023 0.5366980003122679 0.8763365376859675 0.27797510192003805 -0.5088081493662255 -0.030378354486053416 -0.648715339339283 -0.16553622644573474 0.7849313855936919 0.5648663533725875 0.6500465329802345 -0.49036890835983615 0.9625723115177425 -0.020128148448716576 -0.7175922906244709 -0.8606739110643375 -0.16019430428063686 -0.7257939145387322 0.8570387315347636 -0.2133456650071217 0.14219739023446554 -0.06889899202097616 0.009489221092567002 -0.3171243399206345 0.6856256399992073 0.591435565707968 0.242840946936413 -0.3318902833737465 -0.06491605694597724 -0.549928412124292 0.47726571362237147 -0.6454682759867767 0.5268507186580023 -0.03176722393422815 0.6409532169572079 0.08749669989167996 -0.7986425915046871 -0.7765324500579289 0.24144186498455888 0.9483683359260011 -0.41789152710641586 0.010611571897630068 0.253730616337126 0.06674793407754609 -0.7451457783101205 0.3279955713308629 -0.046078337396888935 -0.5653663036996686 0.3824423352351538 -0.00485804006916557 0.7104898074928532 -0.32889109932151706 0.6778663703424057 -0.290140006717144 -0.11116656482301912 0.17336046938099448 -0.447873366792257 -0.7960624580929958 -0.9427226996195905 0.6816309823149742 0.8566669216945182 -0.8136468575477387 -0.37535950862141654 0.9820606985187681 0.7069398039043928 0.7042018728508763 0.460965811551441 0.6790874137410745 +168 189 -0.20331748374751335 0.5956233967922882 0.7481873826736094 0.43227564409117547 0.5827415393723434 -0.32499049273750025 0.9755679665571042 0.5931281273206108 0.4593523960465351 0.02814909555960865 0.9305426530596637 0.16146480333342028 -0.7100050616180962 0.4155503496350448 0.46656520265531176 0.9230133853486098 -0.5601358527909108 0.7496207263757522 0.7950421753934773 0.13147147425247474 -0.7123034872107874 -0.07487289359205707 -0.312687299248704 0.18246057886608447 -0.3612476683507 0.18847213586231093 -0.5908845326624099 0.04084363225638099 0.6072685871422927 -0.2835979066024479 0.10051630003569167 0.6925277904479641 0.4333265000496547 0.6860125140454785 0.3141990709751239 0.2990763572875519 -0.5837321770779953 -0.7527673362516742 -0.8052901420730858 0.015767642261180326 -0.9472160223003572 -0.1778148943686182 -0.38509630876493817 0.910747195801221 -0.6927328260734797 -0.9979390161780668 0.9633569929035963 -0.3388993309821162 -0.19430716930273895 0.4081170206272542 -0.6604157449240775 -0.10149720678350138 -0.660039245142269 0.34432362138957395 0.24961814054456455 0.7535601466243744 -0.9156972616286279 0.9322619421177807 0.8485548696099974 -0.04210926632144307 -0.46957630035489006 0.12424861975087587 -0.4895771600567711 -0.694055685363949 0.9462026584530916 -0.5595648798861579 -0.9141903883745783 0.1539712590640272 -0.7837746567150403 0.5858841781229742 -0.09359047153683275 -0.42855588972568714 0.22759761935601341 0.12836573788779448 -0.10231384558460688 0.2751217223111042 0.4906033882346821 0.11369509411863965 0.7620300208436843 -0.614501517045555 -0.530378734584593 0.2963932764631172 0.26304509766816664 -0.19799188532771939 -0.1858313589032241 0.16144799798762466 -0.3450046692141784 -0.25223708303748005 0.7681306496110512 0.9448578317046663 -0.8720345243582512 -0.726535296418604 -0.45242572171011464 -0.6424725661590509 0.18736595168083126 -0.13829592355187015 +169 148 0.8088039875309554 -0.23767519662985492 0.5833963869752299 0.8035938265508122 -0.7527497871443214 -0.24519522860023435 -0.9626630646931424 0.8879746377434043 0.21054724156769788 -0.48835405705591084 0.9318113225783209 -0.9276593388870156 -0.9584714946484771 -0.7409068871156723 -0.171194982928083 -0.5484805548434122 0.43373028653399537 -0.5722177327410889 0.26919911680467745 0.9746802110696002 0.9070208646947531 0.426020031669621 -0.3495105082875456 0.11585587135561992 0.9978147968206261 -0.9267971306118385 -0.2222868401700997 0.08417652054378522 0.8417715468832379 -0.07198013867283648 -0.5294688890730648 0.5644993032143071 -0.9094694824941627 -0.5323372612735597 0.9388465740211658 -0.2490545745217554 0.6100385974782452 0.19583716432310738 -0.030308820072945997 0.8394343283639416 -0.48153251400531194 0.7104450256696717 -0.9184884271207561 0.633283682738552 0.685992336791674 -0.8869147234937149 -0.8928708267332413 0.9843997541008229 0.9614139500044072 -0.14973936977108981 -0.32502355725103915 0.21818308154165167 0.6905007694245207 0.47139462586319825 -0.8804022005334469 -0.15831330621862816 -0.776786881960303 0.1606874004442942 0.5532270980506566 0.005003244675303664 0.7626507529111155 -0.6806480431989765 -0.49831277158211584 -0.8906746646634225 0.306272161613083 0.6420069062253504 0.6707141056017554 -0.95464324857873 0.766837077694478 0.25240314327636004 -0.6887201052013014 0.00544674349095442 -0.1716732064086981 0.20424244162057037 0.8415869504357434 -0.7124485155680516 -0.6586497878225501 0.14952347582651648 -0.8441147177750841 -0.9163374673308209 0.5241926316264414 0.45572157983482664 -0.23086384766783397 0.8453838023135547 -0.8063237170832713 0.7203278156577495 -0.7217109252078644 -0.2317645478256538 -0.32525149446080803 -0.0920110111778718 -0.7402731278469146 0.7125784594689282 -0.2187920490705504 0.22856018721638138 -0.29486973133437133 -0.47985704974509513 +169 149 -0.38432772093387224 -0.2387767377689365 -0.6979347445765829 -0.8669416910758709 -0.5936298939899398 -0.3729647968894656 -0.44884956503415063 0.6173802821486953 -0.5325914134684446 0.773668081524459 0.7587673726309001 -0.021275585635110117 -0.6052512672744426 0.3488907795025409 -0.7302013082920462 -0.45371806054386576 -0.4507986980536822 0.8801625728110103 0.35286768111434563 0.9186359712849903 -0.7958112562935187 -0.3636614615068985 0.795396457236208 -0.2632034490286479 -0.09369082557504349 -0.40170042183617016 0.927667223714786 0.23623226787159557 0.4614849432808188 0.18319406970122443 -0.5869657142105211 0.8498425441610975 -0.15345479292687525 -0.09975386709682699 -0.36329035032511214 0.4585564369094033 -0.6265837666923975 0.47532964615625417 -0.778008306302937 -0.5096712490813644 0.07825152694293647 0.6433652119702091 0.11952456243560783 0.4819291447314924 -0.5747308767202686 -0.9449807569325206 0.21542196022331228 -0.31878716068378377 -0.5812995745699503 0.31956034193612237 -0.583536888782527 0.7543464270615359 0.06594745795891788 0.881693095845379 -0.06786407300579755 0.6538181691699694 -0.7115363720028227 0.12427547549080886 -0.26889338856207456 -0.1258537909663633 -0.7402610786692496 -0.6905311834927761 -0.5168989479685779 0.9841104528401068 -0.6834318193441415 0.05634991849750359 -0.07163742110347182 0.04656944786200512 -0.2739228647052385 -0.7830287881017235 0.6304597098373952 0.8720838509731736 -0.8733852094921779 0.018050095437476488 -0.42908397680049815 0.5563670118630861 -0.6591965608086248 -0.44514213751489207 0.3454216252029507 -0.2194385234975984 0.6212076619088345 0.18309109291118686 -0.8249896979017048 0.8986778179870814 0.20144735346762332 0.29468956314252637 0.20306062965569938 -0.9553563109187717 -0.35556799100333514 0.7185931595677468 0.8329303532225547 -0.8914685941463096 0.6417932445912362 0.4479930589938239 0.20528739852665012 -0.18229660714121265 +169 150 -0.701551927838852 -0.49834650274593795 0.4274309630482973 -0.8346444985148234 0.45429292604991867 -0.980459120206866 0.2224733622308923 0.037967980020676695 -0.3484709167897917 0.14746078575806387 -0.6717836089676885 0.35556004348694903 0.44171797827850634 -0.5179408852376008 0.5650026511166748 0.06553699357627041 0.21037628069705394 0.25152409671773124 -0.0740688704585799 0.03555668270168133 0.4502433048346208 -0.19626401725065556 -0.46505964313193604 -0.17966343305207366 -0.020683327587114775 0.31397712528427224 0.17122060287930063 0.6947801331295234 0.8591830106968592 0.5761809196790908 -0.703669657871379 -0.1840670483742517 0.6085207016593301 0.8866352437089664 0.6115144640128547 -0.8547979085545316 -0.43915997001643325 -0.6759338763541651 -0.5409205913522077 0.11838002850686835 -0.04148232294281229 0.7574716117517228 -0.24014590391397372 -0.2926702312188001 -0.0114347861253552 0.026914783885568783 -0.09176192147201756 -0.8820314007801986 -0.4872532984948539 -0.4295014282382814 -0.19728415316137693 -0.21827930717766453 0.9461065228499654 0.08669650846546584 -0.02327328141939633 -0.2719256656581477 0.5257951017564064 -0.5487387355855453 -0.9618966542612235 0.07851320734273015 -0.658488380037157 0.12160340745157905 -0.054996898347557055 -0.14712813180499396 -0.6057375574036048 -0.40042288707925433 0.7539623320079454 0.08866235439906656 0.7404903676051344 0.6750396596607573 -0.9485893396990621 0.04919162623698403 0.22498020626734538 0.9513651765748463 0.8746835557859025 -0.672432838722425 -0.8054469931561821 0.39845194415691165 -0.6962609801688517 0.5244353338674976 0.32669484729305487 0.8112144713569716 0.10428403950943466 -0.5678339980319722 -0.019269820260378268 -0.0526640165009451 -0.7128035377867477 -0.7488766775754052 0.8163567488691568 0.7882988055685074 0.21411790683452603 0.9357330736077094 -0.08067506445205841 0.6064131834395496 0.33520121032311057 -0.9560849201097437 +169 168 0.9581139935442673 0.06285058952762634 -0.24777517168546148 -0.18670251973953844 -0.6407309787864759 -0.6144471911963718 -0.5266399299685569 -0.3479984055013976 0.30697967811181326 0.43171553850264877 -0.8335140679760913 -0.10074004382974655 0.35812170341694305 0.9959238040011074 -0.14200500119838155 -0.6896170399691193 0.6760796095738386 0.3361486704687826 -0.7631907790984613 -0.43872475756453566 0.8746535020231014 0.7457410292817177 -0.2543772533342401 -0.08106548983544593 0.44618950606738084 0.06748257022780724 0.7989820241743142 0.6081701084213147 0.8964311469315225 0.8373612638559442 -0.4143441835363286 -0.6610088154678049 -0.11826611359102923 0.12255900522864427 -0.3614147817970277 0.6447687566305726 -0.252696247598557 0.7100978582606479 -0.23119956810935327 0.9813429418965651 0.35778598737805245 -0.21340874251583486 0.14113986590789063 0.7374867925525554 -0.9725686338576667 -0.6258537041094694 -0.590096138024184 0.38103742195826706 0.010300267559581577 0.576555745603988 -0.8002666658413924 -0.2965127929785176 -0.7891456547525215 -0.4682044329736408 -0.21528062090121391 -0.4909369613085959 -0.6047538733062996 -0.731718653523701 -0.899069224273473 0.6400395043717015 -0.8538166676474201 0.8560344295380411 0.19713449770650526 -0.1875172632651536 0.1659746437057339 -0.708083020922206 0.25304446375249356 -0.6586543684955941 0.7765597005909133 -0.19710515037635945 -0.30066078811294306 0.7242325603056743 0.17364529992977285 -0.5058265331632836 0.896204739139334 -0.9050090825522785 0.18898989764373963 0.2301090701145745 -0.41039856188882906 0.2495113627057861 0.8130725905812144 0.47514560074010204 -0.7445709629028934 -0.7006011657746025 -0.5555664262862383 0.3849495906600635 0.311610706549295 0.6819013349302909 0.27037576560575505 -0.6023083390146986 -0.35922377975214337 -0.23903565909948687 0.057973718053294876 0.7942826480374008 0.94511301178687 -0.7236537396749054 +169 169 5.899464056763879 3.673471432944054 4.536498893212146 5.0575708633075935 6.329542809280058 5.163342458674755 3.743550119775737 4.317326195697579 5.0607368110876525 4.224277024853442 5.568535271728193 4.665613545949082 5.076907319503599 6.338155267757689 4.529722774575166 4.086399502420849 3.5021602738362394 4.882718322329589 4.435027313050098 4.507304693550499 6.729172788244087 3.911376211936384 4.508977141737799 3.0223166853266488 4.069737932281707 3.185643848023636 3.6825265044191293 2.999746837401573 5.4867933286653345 4.2657168646603445 5.247359182403574 4.431838437095611 5.0256960737887 4.012237682382963 4.361573341295345 5.067209959446284 3.724356237952973 4.362513998687234 4.182315264913479 6.0910946179415975 2.85878492342837 3.856020834253663 3.4494318586695947 3.9696592542561473 3.6389498542180823 5.270689712192764 4.359384304136922 4.527765723370792 3.941772018488651 3.8807898458803556 4.580688858659931 4.908172249078464 5.948118791752283 4.40609553167295 3.589561263112587 3.534987033374547 6.0799419741826455 3.997284652827855 5.1580575906874975 3.370696202826778 6.2121988479147365 5.167256591429174 4.170722220950692 3.833145729948992 5.515633559125084 4.58320272995169 3.549565858218103 4.836463034407844 5.465403460384777 4.6167022761820995 4.7637352086342215 4.636732164886192 2.858503139234144 3.570742906513628 6.218381585125186 5.356940583484183 5.929429104033344 4.088492036966759 4.302479818842993 3.5083523300092883 4.930321382648722 5.107622790753336 4.000577593896773 5.268874342344509 3.9679311255124743 3.529733428647252 2.463656777431387 5.233362120323736 5.326707118554694 5.199978899657155 3.967026442269646 6.6300862849068505 3.0455228259928804 5.214701751734912 4.6082712372556545 5.031016677410143 +169 170 -0.499596163261782 -0.5544920349714866 0.6916359404922443 0.5285784011951515 -0.8149933437594328 -0.6716370475432936 -0.25996964234033215 0.543714166108423 0.9905541499449817 0.8940890233485497 0.6162951132868071 0.8401400833294088 -0.05604752270924451 -0.989984303951549 -0.4928723497458627 -0.7904397157951062 -0.6034291170854045 -0.658858203668629 -0.280113527161326 0.23530018046681067 -0.4879425176189822 0.32243412091793777 0.09850833845904838 -0.13881781746237554 0.5890093823550551 -0.530302294252992 -0.2675740228246124 0.2914967600918852 0.5207346638722619 -0.8240267981915668 -0.6325938627092784 0.5160142903803155 0.14873485716174772 0.8956276322724119 -0.29848777519565983 -0.689074818233202 0.29741354781423524 -0.5242525339962589 -0.12129195738157494 0.9530743371878574 0.7670862473126479 -0.1810581031526437 -0.8834258834003264 -0.4830765308500824 0.20997337101791502 -0.2765260463054149 -0.8982805551430424 0.5523295515012709 0.2547928517891307 0.3912295984133871 -0.47644774716170857 0.9869787611948586 0.8872409751734129 0.7604304636807475 0.6394193380524882 -0.5452177239723566 0.9712949912174598 -0.27207378294939555 -0.3493259734873826 -0.05189774401723146 0.09702157935780464 0.6399806534330008 0.5051906101312027 -0.6243368287900579 -0.7144413976253028 0.48339314684041224 0.41974485428574226 0.5937535005834527 -0.31273147793468836 0.16902950118123283 -0.8443056722935172 0.870437408043996 0.4388392570149391 -0.3266798688058383 0.7008729933461015 -0.07116745431951377 -0.6791692013909214 0.5000121318088091 0.2460155427763826 0.47893253583527473 -0.8126885129452865 -0.5902099281702664 0.37378492497821814 -0.07972213210392232 0.48743890107229726 -0.4319198308610632 0.12315941950596265 0.1508171242825347 0.7935508262328392 -0.7790511484131795 0.3204982780375776 -0.4133355578626523 0.1620953100053626 0.8514339427451876 0.48786186695775835 0.8749135668768835 +169 188 -0.7044963583198713 -0.9329591671354234 -0.46651415247155326 -0.9574183480698306 0.961261251501023 -0.6358993701124491 -0.7683301158570486 -0.5753894840832172 -0.920345133208821 -0.1933474027251465 0.9013016629486859 0.100345807707648 -0.5146963604532855 -0.8043810191910921 -0.7413582410306414 0.09363561349240301 0.36798127135512426 0.8016062127705126 -0.4006432169336105 -0.5672131619632677 0.7057254103384623 -0.7135883998874231 -0.48337083523469615 0.37495709186448867 -0.4854746831701995 0.5391524860746562 0.29885983328105725 -0.17456386571312899 0.3034342756691564 -0.6377879462537646 -0.5447282948651386 0.08703132753089604 -0.8553948201569626 0.16392650415618992 0.1163628283286895 -0.17392052802917446 0.44676755615130936 -0.16755855184864732 -0.6875578032264809 -0.4507531298816536 -0.4133355734805815 -0.5054161531173014 0.17311510399850483 0.5705047198413618 0.291908095150339 0.71741379053967 -0.09629652203955974 -0.7837378513022943 -0.21981653738751383 0.5599022855997091 0.6763193655301594 0.17478222674147426 -0.20688613841763703 0.8149681640555824 0.9505233031231277 0.7421197178266254 -0.8738206987962784 0.48561282322683996 -0.7537054031416459 0.27798674855622685 -0.864349338970624 0.5248314323319381 0.6457734874418395 0.2507161342898634 0.7067263814785447 -0.9570907497439951 0.3532170877026797 0.907069988964134 -0.23363698153003787 0.6196320807441598 -0.5030508572073911 0.5425859646923785 -0.16772211830912886 -0.49996228651575536 -0.36711613108776686 -0.6131032265382454 0.6314760169490161 -0.14886467119802083 -0.12346012158388686 -0.2590570621547277 0.7693134361828058 0.9451738435697845 0.2782086283157166 0.8632463991687431 0.19655197726241647 0.44565507846397767 0.01063865989093471 -0.8969352762250302 0.8885929264356418 0.13542206390330724 -0.20376515969437103 0.9915834633265908 0.3525280201744887 -0.7395585601171057 -0.034101727967104534 -0.3194684131720513 +169 189 0.510279912072692 0.7734272860095883 -0.06382877269403209 -0.07252563769471543 -0.8978986046519344 -0.8694978536843969 0.1346458969289317 0.5611459347446026 0.6703208198755202 0.45508626191788304 -0.2590459314888176 -0.9252003219571132 -0.3074167718988712 -0.6122163892696499 0.584110178312069 -0.751924273549569 -0.0773897196215938 -0.8613017646525125 0.7341153858075642 0.5985757816806552 -0.9765563444334293 -0.6764061618422887 -0.9348853341448142 -0.9116579163729457 -0.845008280665803 -0.2552329885584954 0.34514304773836835 -0.3329709352707677 0.640477991588746 0.5771696818161094 -0.22966990584225555 0.28856595209134484 0.4271207758200892 -0.2124335398721997 0.26338236981866703 0.37571357641456804 0.3237809469861541 -0.7351952528018979 0.6182663916932527 0.3609307668881161 0.23693112613837308 -0.08889649984939285 -0.3356642727790229 -0.4248986716871208 -0.5266519523596624 0.5822698154495032 0.7054791942526881 0.30908034605788304 0.9358255579317869 -0.32457048726084614 -0.17917150191683695 0.390007829096475 -0.6108778608545882 0.16803647717406944 -0.2006263895874727 -0.30854525453283976 -0.5397531565096296 0.6286879295845527 -0.307925987170548 0.8784126486885735 -0.24988883533458806 0.24319061681210496 -0.6001624723278876 -0.1059837579655889 0.9176404418970716 0.4452265458362261 -0.6325668671289626 0.48305381395944536 -0.8101646436347378 0.5355649459693714 0.4426412394539194 -0.6061958705644137 -0.7953643812587474 -0.7468353484979564 0.9796704442134245 -0.16432261889487232 -0.9047526441100864 -0.7155089324214088 -0.540334286006086 0.16556144630931624 0.325899093430444 -0.9899122593357601 -0.46052475291626505 0.6979909138684848 -0.5411838492227459 -0.9109370483993091 -0.07912963635997916 -0.09282435916972975 0.34372904518450165 0.9692221155410439 -0.2266199147589658 -0.8801491957009642 0.7171716432690849 0.18004399720782382 -0.5892414861991957 0.06757403056295486 +169 190 0.7503720836656627 0.06402882063262094 -0.39854136280405217 0.28205693836476997 -0.4361586385702405 -0.34783982597362906 0.2315039922531026 0.6388797352459847 0.3712191555627071 -0.11160765949627627 -0.07214925696655805 -0.9420095900167746 0.8957383927985041 0.6245384357881509 -0.9648082658862411 0.4010890981417452 0.5690841254149608 0.3428623727856033 -0.5840775958183175 0.6015728528429902 0.6094677047333152 0.3103918136032724 0.9197529831586932 0.038314961611478404 0.3276233530031847 -0.10464376471459658 0.44488477543807603 0.18683422202051947 -0.1294264615587959 0.17664386381235397 -0.9805188275161223 -0.3769995517356133 0.97057149369679 0.3228399369580268 0.4712764992035552 -0.7251570717068803 0.3381659135593671 -0.2102253829807994 -0.946323362745146 -0.9007380013689668 0.14176754525337465 0.08297850862517508 0.622223899230206 0.19783439728844243 0.2571122664326937 -0.80328869826698 -0.700000748087193 0.12469666793106282 -0.4687359278770551 -0.39131753408721215 -0.5495695155584179 -0.9621295022067589 0.7570694759604402 0.46264307928183834 -0.150697483562916 0.12724726992515567 0.10609414350718538 -0.23872062101640212 -0.3313280542649457 -0.5909617475712332 -0.9873823703616968 0.48166618557962715 0.6401655759619662 0.34878904305504843 -0.5820115394307945 -0.4110204325181954 0.045165691919262674 0.3857412910331932 0.814869507242441 -0.9731575303030007 0.14272509975894776 -0.8527300050650066 -0.0038409717837322166 0.11156479370482386 0.7527806262549184 -0.7973576512001508 0.976622612867424 0.8334482859067063 -0.23314291406108612 -0.5543265594715945 -0.42300434306504275 -0.49916579760700497 0.9377938251304425 0.4985209140147133 -0.9277845497954313 -0.268853656402932 0.04400681297736164 -0.9971416430209257 -0.6020306923970884 0.978927536036249 -0.6859135163010213 -0.5906360553656413 -0.3213212721522847 0.8479788735553115 0.9382108297825305 0.45071951336203164 +170 149 0.3780759510308003 0.7240374766563737 0.8662206078316808 0.06661480773422457 0.3132412339490025 0.44164419745991745 0.02882395938912219 -0.25169082004476473 0.34635346482233254 0.3697421384478956 0.5756390710101751 -0.08644575768230411 -0.13607297571788046 0.9155807989551505 0.07885831683753808 -0.9321811554927291 0.6189595063418833 -0.18779980285611075 0.29671278905116605 -0.6935543774092481 -0.715921340964677 -0.16037123645831008 0.6832937585980334 0.23225030295197158 0.39431428661230306 -0.256298377605789 -0.17461046321088136 0.9791205212349152 0.6360083926357356 -0.9318131204425697 0.5803585410184502 0.4796932070380735 -0.34984691565553394 -0.3833793698076493 -0.5622072140049008 -0.4978761169872923 0.5760396940973576 0.5614091382452673 -0.9293655903756846 -0.49514298021739345 0.724190156674476 0.33975004141921805 0.61000917555315 0.09029036851701377 -0.5259549349792527 0.3903766469278127 -0.4411456619721248 -0.15007467692469878 0.9044045690667164 -0.6063808755321214 0.10391354903132433 -0.8262435374273183 0.39509399872822293 -0.9466961733626105 0.46580993747984345 0.9188202376390842 0.6190689240768958 -0.5590055350554148 0.5128206584577211 -0.45832042286055485 0.4381073799168478 -0.20355486382660648 0.8960754947075462 -0.2957614147264287 0.507999159534382 0.39944492152952127 -0.6448875470158406 -0.05037676853798145 0.07366932865454956 -0.29833396337866835 -0.48154045505638243 -0.21307899885153936 0.23987874006715848 0.18285442782133643 0.33005488157837015 -0.8992736358551876 0.9815916825918967 -0.8329592940694746 0.9735046806937808 0.8614287939097718 0.6739949020580092 -0.23384418323574296 0.07895444586826317 -0.8938062801993654 0.6631287862782689 0.7932614113641714 -0.7450716114344851 0.584467303677825 0.024847796564056335 0.6441932314943686 0.3228742173746595 0.005276075574029537 -0.8960984066215836 -0.8116511889215694 0.06494922281433402 -0.127054863178087 +170 150 0.5840508010942738 0.8901007140819894 -0.8164495735517268 0.9259546438424657 -0.8060358371507421 -0.40176854972670517 -0.9342215789802428 0.02485311032545212 -0.6463610642126416 0.41790734106658145 -0.30596439225190397 0.46337668453143555 -0.6337176033046221 -0.6150336820018696 0.030876105201712356 -0.39426740129240256 0.861113103598639 0.09046589098365598 0.6443709395353061 -0.6239620956487408 0.04420852331236569 -0.7770936790262599 0.975649433865956 0.5293363097154413 -0.11614213763207348 -0.05434702237545874 0.6287249820183627 -0.3346933037575983 -0.14502589166180213 -0.6136845487788409 -0.11009901600905758 -0.10963539117106702 -0.3677702337737274 0.8284146438948312 0.1788309930731573 0.6101662687762426 0.7953525678816706 0.46865634165265635 0.5212456443998137 0.12904461470984607 0.13821797617080045 -0.5229888481453064 -0.1854090765812355 -0.8517767290500011 -0.8315847806890473 0.8678264518303196 0.29525811284558023 0.8050630120526217 0.8836975151443087 0.8958454887386083 0.1747730114225543 -0.7849807894597525 -0.23467594243129608 0.6358019564216353 -0.4804058647810303 -0.9990717626793608 0.4858721271857873 0.435610490479134 -0.05043646810179947 0.20465073842592774 0.7193873254772927 0.993953014338923 0.0826105260435046 0.15193105352183545 0.3851608301965661 -0.09269202169260171 0.45401401504565997 0.965473913011315 -0.6392234114507025 0.3506874456991578 0.77446028599788 0.01600488615097917 -0.743310614348033 -0.4259480188201066 0.09087667013448653 0.6097520942551995 -0.4103665952459088 -0.4904980482837722 0.5690055876263389 0.26595837475482886 -0.7482138003275698 -0.2614586575178499 0.2766172352464473 0.5774114885311226 0.38892547428311586 0.3272787596910429 0.38725684265438587 -0.7734187759705828 0.11397546723395746 0.7732506737620128 -0.16961446437455518 -0.11812717674135631 0.7991187718150523 -0.4186027169378719 0.7395141949967403 0.9879666488985701 +170 151 0.4879227036185563 0.8320888639790129 -0.16904615086778496 0.9008937576483442 -0.7706480822858521 -0.10860262591494019 0.7309625839847083 0.5337874376011789 0.5811508100466232 0.30810956670722933 0.1338673246899409 0.8231319777383983 -0.6182834743554511 -0.534412290726539 0.8575966197359957 -0.7952844665026906 -0.1578755179022271 -0.007910678321086495 -0.5551678397114392 -0.9892552657085685 0.5035219099779131 0.20291800430509288 0.9311203014575271 -0.5364749774954993 -0.0595963208624537 -0.33338498259915017 0.08187591685351792 0.2610033008333652 -0.9776416025121042 0.5065636495759034 -0.6490209535655138 -0.7422591800844485 -0.8657556355715204 0.8111286267821152 -0.6284486969357532 -0.7733309386790665 -0.9783754535990432 0.4523413588693421 -0.3023068265663429 0.8140415405861463 -0.8062407816967632 -0.043835355485762006 0.8216052217924397 -0.5739053582620108 0.9164201118610211 0.011794992219086309 0.5324374530041167 -0.22594070062824834 -0.23280431236990062 -0.05899089568134075 -0.42208514895020977 0.22503791942787688 0.3771577835818398 -0.9920267646919887 0.8809010956381647 -0.9654353237821325 0.13369846100133587 -0.2680223554275649 -0.49844987209552083 0.5060271553621685 -0.6595575112366785 0.09997729163409064 0.0004331907624020026 -0.46410044090817104 -0.6153405883533583 -0.47621208433864815 0.6414518764174832 -0.08423621381955892 -0.5439599454264785 -0.6884887563924056 -0.29191464676519496 0.7595000169341686 0.30225466817254487 0.6022801612052002 -0.637258422671658 -0.13440957963641864 -0.24144485444991504 0.28425704819672526 -0.23499993469137248 0.478717562239962 -0.9858149484523859 0.3953509236874817 -0.856686724249268 0.02770022563349328 0.3977550667354395 -0.2837418438056807 0.5115410092053707 -0.4037229658634469 -0.563792607209638 -0.9913241708518741 0.705646253578883 0.9874453650263559 -0.3788577970886462 0.35870516934769214 0.018135706913555927 -0.7844688123373014 +170 169 -0.499596163261782 -0.5544920349714866 0.6916359404922443 0.5285784011951515 -0.8149933437594328 -0.6716370475432936 -0.25996964234033215 0.543714166108423 0.9905541499449817 0.8940890233485497 0.6162951132868071 0.8401400833294088 -0.05604752270924451 -0.989984303951549 -0.4928723497458627 -0.7904397157951062 -0.6034291170854045 -0.658858203668629 -0.280113527161326 0.23530018046681067 -0.4879425176189822 0.32243412091793777 0.09850833845904838 -0.13881781746237554 0.5890093823550551 -0.530302294252992 -0.2675740228246124 0.2914967600918852 0.5207346638722619 -0.8240267981915668 -0.6325938627092784 0.5160142903803155 0.14873485716174772 0.8956276322724119 -0.29848777519565983 -0.689074818233202 0.29741354781423524 -0.5242525339962589 -0.12129195738157494 0.9530743371878574 0.7670862473126479 -0.1810581031526437 -0.8834258834003264 -0.4830765308500824 0.20997337101791502 -0.2765260463054149 -0.8982805551430424 0.5523295515012709 0.2547928517891307 0.3912295984133871 -0.47644774716170857 0.9869787611948586 0.8872409751734129 0.7604304636807475 0.6394193380524882 -0.5452177239723566 0.9712949912174598 -0.27207378294939555 -0.3493259734873826 -0.05189774401723146 0.09702157935780464 0.6399806534330008 0.5051906101312027 -0.6243368287900579 -0.7144413976253028 0.48339314684041224 0.41974485428574226 0.5937535005834527 -0.31273147793468836 0.16902950118123283 -0.8443056722935172 0.870437408043996 0.4388392570149391 -0.3266798688058383 0.7008729933461015 -0.07116745431951377 -0.6791692013909214 0.5000121318088091 0.2460155427763826 0.47893253583527473 -0.8126885129452865 -0.5902099281702664 0.37378492497821814 -0.07972213210392232 0.48743890107229726 -0.4319198308610632 0.12315941950596265 0.1508171242825347 0.7935508262328392 -0.7790511484131795 0.3204982780375776 -0.4133355578626523 0.1620953100053626 0.8514339427451876 0.48786186695775835 0.8749135668768835 +170 170 5.128099764504006 5.792353390912554 5.043805309369974 5.220639631036194 4.613439532784421 3.4391313133420898 4.036250397405337 3.1229403283448334 5.31006394601703 5.026002582261245 3.049941931867769 3.8523418544582775 4.9402048987800145 5.3441119708312534 3.7418811449485023 3.8051210574539662 6.338527274670733 3.077597608358007 3.8439377007513937 5.765592458057132 5.038471257931391 2.9969164420438146 4.709157912179553 4.529886152735099 3.272530389443241 3.2911412042197448 3.631760020011267 4.053998196830719 5.046526141277 5.782285758765722 4.393070952261192 3.600801827915532 3.32721804490009 5.810453721514727 4.530700625366059 6.0425028080103695 4.914842289405967 4.592668089739608 5.600257976772941 4.983862168642888 5.460859344802996 3.2554543750394203 5.7391428540141085 4.70817238471761 5.402217439963609 3.9766713848349995 4.123248370313464 2.9932142341128127 5.352720566082519 4.471567206289391 5.037040136079257 5.498096478143791 4.813268099856451 5.447303410075797 4.332102681528767 6.716731510658624 2.8970136086364304 3.7473065825575187 4.0235025048838295 3.9579667657520186 5.088518837064218 4.7739309073164025 4.928648735824534 4.732635648747905 5.452691580617824 3.675085890644497 4.671617935160899 3.8095506345839816 4.483167103755303 4.0497216316895495 4.228600069566522 3.38050784985906 4.628413971334229 3.900848731247957 4.463003878663195 4.363239290151168 5.632691290547417 5.3729146392642955 4.2326113204839295 5.346784234696074 5.741132392851967 4.64847232570409 4.067677247075726 3.539104165608686 3.438644879683685 4.291274772270656 4.024605111415596 4.363391659891741 4.341467834776559 5.81176183817709 3.962804432172562 3.7818848617132828 5.372390614741843 5.657568123450144 2.8133098721435887 6.495971018867035 +170 171 0.9080782142736532 0.8033887043207757 -0.30513993177356435 -0.5496542061945204 0.7565861827777283 -0.7088168350042923 -0.781154575713052 -0.9207153101993437 -0.3277425959788096 -0.8692618300967034 -0.04706071396216083 0.005640525516569905 0.9195199946444104 0.23067362963650417 0.45090279973331726 -0.45641702638719517 -0.6546425957675208 -0.6589557045651548 -0.27965872053398644 -0.6647244492079318 0.2599761498049513 0.2802265623758555 0.6804312091097864 0.7502258890120983 0.11321038061926525 0.25989967091581145 -0.41308597289313975 0.8711881261550107 -0.6777343048744191 0.5439820166789284 0.229173783661915 0.12642172690518882 0.17275134492929722 -0.996504753883652 0.8489915738180809 0.8975471400779425 -0.6836185052564041 0.7060849248492802 -0.8275572078669657 -0.22826852362831818 0.7489074569314982 0.0691803373886517 -0.7820245916876087 0.9815856098199209 0.5130050543349534 -0.9877515436127178 -0.5522073939940799 -0.12267572937238969 -0.277154452422792 -0.7021074868196229 0.9181290119593308 0.3074395889239041 0.4134868624596686 0.10090498281859861 0.19017350503582175 0.8385880782187825 0.4629439950476799 -0.9573906140026021 -0.8793175829028557 0.31473495824560427 0.5147639510284938 0.8926561076510573 0.37258287283573477 0.8795416532221807 0.9051858053982178 -0.007963488497683358 -0.04124089328950209 0.41934489013209664 -0.7365566901195237 0.6819992194919926 0.5521571067237727 -0.41041781227745733 0.3748335665654907 -0.9894231222430732 0.7405784838612153 0.5596112480522488 -0.2934051891812679 0.9450829458977481 -0.31376931801742014 -0.5392672833363601 -0.10036692119985546 0.7584844967324678 -0.28511209644846947 0.8259031465207713 0.1029434777896745 -0.25972608578554657 -0.2674801494852559 -0.745167048267821 -0.42382674352345684 -0.48405139918777573 -0.8556184414478833 -0.4682215606810849 -0.9178120945916926 -0.41320064930276557 0.8052849245881821 -0.8343020808794404 +170 189 -0.9382568020035431 0.4545460122300149 -0.8226513223586314 0.9501027872972887 0.5461762299848656 -0.21273854686998583 -0.053817519980795536 0.26523859639338654 0.3828572487781412 -0.3911095380352372 -0.2925157014532631 0.6525089547075671 -0.7004950018190887 0.6737174185513706 -0.31732554020018533 0.3603038155688467 -0.9708764204591069 -0.14029755429744695 0.9548739467433109 0.563909629043873 -0.5533557468950172 -0.2670374720463111 -0.1208502396288953 -0.5878884482588245 0.2603145818878505 -0.7089769559533652 0.4642036141284067 0.02867181209134584 0.9529843889901888 -0.9818909178016242 0.9732551894481569 0.0392821987341454 0.8795502326972515 0.7674630827650111 -0.74366081589337 0.5911602530183488 -0.7811336772229769 0.05596003814392869 -0.7476090751060063 0.895990366815145 -0.6307025359090308 0.7190552846965517 0.9067642881544211 0.46348850474422654 -0.3315319829893031 0.0038819294843572827 0.5206292592129942 -0.28722606380440197 0.7477129527076665 0.7571109711277013 0.9612177768522003 0.6327145332703139 0.2739010263701267 -0.2755419315016703 -0.5600759626019782 0.6141209070256879 0.022176088014779882 0.4249424838908755 0.9065602880272587 0.7027916393610816 -0.3664848717349789 0.5865719856469191 0.5006245442028998 0.6688838722605179 -0.584539143301452 0.15135091561230252 -0.3818529042870893 -0.2334569616757456 0.28699216161688046 0.4624354797716477 0.13199656192017972 -0.320625069826987 -0.408959159199594 -0.29917866162968787 0.15013593589150198 -0.17987194029945153 0.9839501672614195 0.3033647138868558 -0.29118632963655067 0.4982522750080556 0.8425125255968402 0.37984465204821993 -0.878381126194296 -0.003010004960018131 0.6028800397961553 -0.2535238329786835 -0.4075905201438803 -0.8434045067801434 -0.3484849190252952 -0.5239976843191267 0.12082001127311193 -0.5030847855428742 0.7347947511571176 0.3740556969495936 -0.2696308362147519 0.5921022566824898 +170 190 0.7549790697506595 -0.6087844754993137 -0.4978264666230545 -0.3511550198879967 0.2789034886883457 -0.08289736883971321 0.21546139331484437 0.23233886990575714 0.6629386638546815 -0.009617397051654208 -0.3308029419904097 0.18905870527004032 -0.7872412283022112 0.04290218531471823 0.5344000701779734 -0.002953368359116526 0.8222579735138114 -0.2350905405675341 0.385198071663416 -0.8641467920058123 -0.6376382884588427 0.6063728556268009 0.061940432368488896 0.38728478038503833 0.9921147570251514 -0.16638266824665182 -0.02379508153260823 0.7858495494410238 0.07908703963687413 -0.17592610768018813 0.32725721186732115 -0.5024881602103923 -0.25334738489828057 -0.11373218717537115 -0.15337877633523211 -0.8760739521813927 0.4964932814320355 -0.16827845538259711 0.8444939748443447 0.3727132374460369 0.538010129690857 -0.3970978490018191 0.14151316777000833 0.18539259187110702 0.7928912668707853 0.3081434739410749 0.6237280368179157 -0.6609516116594367 -0.8092258251100275 -0.19825629138489131 -0.17428167758578783 -0.18775619570495228 -0.5724011381034366 -0.7222394939208319 -0.31831769754865746 0.5417212491371484 -0.030626503701876917 -0.4516678910298244 0.2170955592002104 0.552598975867868 -0.8459900435460004 -0.47816404207478924 -0.8827784726392507 0.3257801632745785 0.4968979544625072 0.52805429619681 0.7923307319759549 0.5205559166496805 0.6234163536434432 -0.5489612898261658 0.13474924857863968 -0.5183588854115122 -0.6628740319083284 -0.5050144516259989 0.029138975276989276 0.6700658174600771 0.592846488964264 -0.9260923360293718 -0.20727393801746397 -0.7539521185817293 -0.47761404488497194 -0.9720412647842984 0.8318835866434824 -0.47327289498733793 -0.07917375938597582 -0.14178739791701478 -0.6123508546950862 0.2755560410308051 0.6952426620523575 -0.9594948572936055 -0.5798649508454949 -0.5471205319737327 -0.25746693341804816 0.7876594964639376 0.1602519315603348 0.8351802937717028 +170 191 -0.11838189767695306 0.17396097608882188 -0.5310813928325775 -0.03168737878237593 0.1916489894460145 -0.15849549643418004 -0.9211509167325425 -0.2372240852161429 -0.9289565854926463 0.9967824350699146 -0.14002621580248853 0.3411642757234097 0.19067422122543642 -0.509754534007214 0.2899848440347792 -0.0642707371258191 0.95402475083406 -0.440921319120712 -0.2684196704591417 0.94975458353791 -0.8619582010877165 -0.16533982432012695 0.47547188212919544 -0.5961457372445327 -0.34910885963508487 0.7661214243835486 0.9478091614176753 -0.21326820590816586 0.9919897533672579 -0.48467010751603334 -0.34347107201075766 0.9053968030324113 0.1473661813957221 0.31428610885203523 0.5839094577757671 0.8729273547870602 0.1360343493353513 -0.9516263178848074 -0.5066740444912257 0.9184998748036137 -0.9213694592328747 -0.2520262315085404 -0.9884774457046364 0.1073536659836134 0.9312895900976121 0.8884825727738712 0.15134801048711566 0.05742380915254297 -0.3963135422027757 -0.42613597922209356 -0.9717178839563556 -0.7060374704514618 0.7683818769660358 0.1191931910756272 0.07376392397167963 0.7237542891569153 -0.05043342208221069 0.19331108987606505 0.17034657796994312 -0.8657232395019836 0.9916456950171431 -0.16146031211077005 0.6923194391989653 0.39368276324600804 -0.3008172627567043 -0.6320284193052805 -0.782627536415625 -0.5757820689040918 0.7095542814744016 -0.26562409994652225 -0.6909170688555355 0.09904277153178098 0.6330747374728576 -0.4514284396360011 -0.8113402167454475 0.5151304581075871 -0.8219406632409352 -0.4867430421780281 -0.5372326460380035 0.7195591895476885 0.16415408159404055 -0.5760129097811211 -0.317884035685142 0.1527944536457042 -0.6773187955393241 0.8333874219832249 -0.10947111022443745 0.19037047174379174 0.7246039852267707 0.22265639419027905 0.43770506003138965 0.35232736894935845 0.35258735139428476 -0.9224729484663352 -0.027158680425116044 0.5674410846351419 +171 150 0.787181285936922 -0.8798521320897641 -0.7089057070160107 -0.13943968088166758 -0.66806871376623 0.5591864457015983 0.6434593658021606 0.7625792343144202 -0.3810022986299515 -0.6977550253162585 0.32445427210155287 0.533803610667207 0.9645888070938384 0.009513192790118419 0.8265479335545127 -0.7697431274107487 -0.44097138343017406 -0.5462943633096835 -0.44791380874558206 0.22603178162056037 0.9114266224779886 -0.0046610998341567456 -0.706550407317386 -0.3145325104972505 0.4221977327461084 -0.05783467355330463 -0.15007278787514955 -0.47150344031475777 0.8151494527848915 -0.5476233258311365 -0.35730748732748663 0.38957372133352286 -0.8532385411861314 -0.8540895391978751 -0.10531072461359003 0.04267238835201925 -0.22648742518698306 0.9466208640902125 -0.5861649488605276 -0.6154340848487883 0.6406811283355873 -0.8204491819078865 0.049835491769739004 0.016317084470227616 -0.9758645843837901 -0.07616396211603482 -0.29584657884030263 -0.17906079561320287 -0.37703469109051113 0.7762048855119001 -0.553620309365912 -0.2800593852982496 -0.9388382683551466 -0.9913725446499417 -0.33724345074912265 -0.08764866381175684 0.5130151477862301 0.8271182730687421 -0.9815055741624954 -0.5040839552626755 -0.6636786093469818 -0.9786025449233895 0.03812817444202499 0.8209231313775265 0.4617287316376464 -0.9669343291594807 -0.986278255522343 0.9382027739453378 -0.7003303830474765 0.22153039153050935 0.8213414498382892 -0.22951491292706638 -0.9301185818242765 0.6009821727968654 -0.7123009672458944 0.1296704611907149 -0.12651154659622765 -0.19290180226614217 -0.8925712406480484 -0.9450647508463066 -0.2999136942512215 -0.1619811251158192 -0.8217844391838987 -0.5663166437053804 0.7465334322873232 0.1930125233406128 -0.0449821278383884 -0.7765812901976303 -0.20696209455987358 -0.9051311331274783 0.4672181752319251 0.42172957640783504 -0.32584251681582344 0.7509294180822685 -0.499309761647174 -0.313853453389622 +171 151 -0.5103900285129905 0.8361603481558681 0.4855139712359062 -0.7147252208386357 -0.6289835888441309 0.7360314763966938 0.31926109243733625 -0.9874181884238746 -0.24608501463850607 0.6661696532511578 -0.31058205526681837 0.2185930888727463 0.11894734580274657 0.38673385127089865 -0.14113597218537355 -0.6880667533180409 -0.32577189222937153 0.17873151218537497 -0.26736054755324856 0.49556639142342385 0.8855316190594225 -0.7060532234933445 -0.17125665561220327 -0.7325680424369241 -0.89170645823334 -0.8987278306981563 -0.004954068588165272 -0.5207478447719944 -0.5804518770269944 0.599441755922095 -0.7686368477264858 0.6258626069199247 -0.009917438913983778 -0.9512486033022955 -0.14853501050346862 -0.7851499889883022 0.05934091368273542 0.6320247238209462 -0.43337852848329383 -0.20434990627810934 0.7906636015286488 0.7990800834776974 0.4346538606916368 -0.7054484329717801 -0.05533793417706434 0.7428293917411957 0.7520706407995499 0.08324717380565705 -0.16736108071771216 -0.472193238185465 0.9712525228873159 0.03912929448236646 0.2588073535113715 -0.915158111998327 -0.4441645823911937 0.8095929563895288 -0.2854798192555841 0.5356653997648455 0.8672515904623703 -0.18494169945822825 -0.7143388985342329 0.4286103467477549 -0.41112717383805064 -0.40007464774417434 0.8340015643194976 0.47899765871030464 -0.6430415973202053 0.656564466254314 0.6483310539142326 -0.5641493682359864 0.9161168818058942 -0.08663369191668235 0.05954819507710818 -0.3835901892743765 -0.8325139517310134 0.7212607253190262 -0.8348183778768037 0.23185204372412316 0.2270979324399558 0.2595491761137636 0.9175503814373183 0.6955235259632515 -0.5255488093552803 0.5064256772292215 0.5082684781855891 -0.29013818568254757 -0.5683633158900765 0.7950198865732174 -0.6987196914041018 -0.8926245643629238 -0.2771746061911373 -0.6483380227057038 -0.22879993776573238 0.3035681442636846 -0.16654630297685014 -0.9565130826298252 +171 152 -0.6921411808740907 0.019575978107077452 0.8275590309327134 -0.5079627405506508 0.5672558682003865 0.7086230186612021 0.8114675145915173 -0.4936160016006701 -0.07568228732366244 -0.9557509696065278 0.6740614370130358 0.6576786320333547 0.3597318781196086 -0.5948796529324667 -0.8341405786262333 0.09937191609100893 -0.771400909671641 -0.8541796553461249 -0.5324531661481435 -0.05997247379094772 0.3977030221416922 -0.754544337589077 -0.3494344031775498 -0.19065569616057343 0.9642232047076609 0.7101418900394081 0.8394306308770889 -0.4049697007742601 0.07889619256088998 -0.3845725814813421 0.07202116178325091 -0.8254525423153123 -0.36747017011334715 0.5745916270348674 0.6148882021227633 -0.8400071522743511 0.15362196851396104 -0.9249631011004691 -0.6924076614096619 -0.71120544271461 -0.5875771077292229 0.16431264011706892 -0.21978625022770282 -0.4616333181526304 0.4232734105531697 0.7261577815301146 0.2518138550822566 -0.7206411484614272 0.8736547091123117 -0.9175160251217542 0.7955402733691608 0.8112874295016186 0.05431170047919487 0.614818503436191 -0.2463058944188612 -0.17065227694321639 -0.6976546607698817 0.5935497697349998 0.015569639689135828 0.7475477328259144 0.0974419920534424 0.8066109918981448 0.7943827945748645 -0.06691979650647872 0.8535062591896867 -0.5791435215624656 -0.894037265430121 0.09359175955805754 0.02028697217735509 0.955539910534916 0.4723939492080733 -0.7732593419889546 -0.1139250632415878 -0.7569346238364749 -0.10116897186987872 0.14234330589711774 0.18485957973282852 0.38096160488020736 0.810551896662359 -0.7004552518372673 0.18184127084366342 0.3670887425522782 -0.9355598195177632 -0.37646336755475795 0.11885842490705278 -0.6400230829518376 -0.6967773960450268 0.2524739757615835 -0.9404237080377362 0.3640583963154138 0.8951327330462919 -0.7820246586434261 -0.025526752839275968 0.271110295314996 0.5173158064591985 0.11953823918114925 +171 170 0.9080782142736532 0.8033887043207757 -0.30513993177356435 -0.5496542061945204 0.7565861827777283 -0.7088168350042923 -0.781154575713052 -0.9207153101993437 -0.3277425959788096 -0.8692618300967034 -0.04706071396216083 0.005640525516569905 0.9195199946444104 0.23067362963650417 0.45090279973331726 -0.45641702638719517 -0.6546425957675208 -0.6589557045651548 -0.27965872053398644 -0.6647244492079318 0.2599761498049513 0.2802265623758555 0.6804312091097864 0.7502258890120983 0.11321038061926525 0.25989967091581145 -0.41308597289313975 0.8711881261550107 -0.6777343048744191 0.5439820166789284 0.229173783661915 0.12642172690518882 0.17275134492929722 -0.996504753883652 0.8489915738180809 0.8975471400779425 -0.6836185052564041 0.7060849248492802 -0.8275572078669657 -0.22826852362831818 0.7489074569314982 0.0691803373886517 -0.7820245916876087 0.9815856098199209 0.5130050543349534 -0.9877515436127178 -0.5522073939940799 -0.12267572937238969 -0.277154452422792 -0.7021074868196229 0.9181290119593308 0.3074395889239041 0.4134868624596686 0.10090498281859861 0.19017350503582175 0.8385880782187825 0.4629439950476799 -0.9573906140026021 -0.8793175829028557 0.31473495824560427 0.5147639510284938 0.8926561076510573 0.37258287283573477 0.8795416532221807 0.9051858053982178 -0.007963488497683358 -0.04124089328950209 0.41934489013209664 -0.7365566901195237 0.6819992194919926 0.5521571067237727 -0.41041781227745733 0.3748335665654907 -0.9894231222430732 0.7405784838612153 0.5596112480522488 -0.2934051891812679 0.9450829458977481 -0.31376931801742014 -0.5392672833363601 -0.10036692119985546 0.7584844967324678 -0.28511209644846947 0.8259031465207713 0.1029434777896745 -0.25972608578554657 -0.2674801494852559 -0.745167048267821 -0.42382674352345684 -0.48405139918777573 -0.8556184414478833 -0.4682215606810849 -0.9178120945916926 -0.41320064930276557 0.8052849245881821 -0.8343020808794404 +171 171 5.820238847220336 4.400037350993854 5.4662517265936135 4.0173343475204994 4.47431700120754 4.637986263826352 4.880524675063319 4.744279965854515 1.8405472086652859 5.839274455935499 3.83800382481376 3.2752096280983656 4.732453910045645 4.6780264867508095 3.9616626554182828 4.776267153861672 5.337391220493005 4.923874447210533 3.0369061239257706 3.787941031021603 4.319800650357628 4.374755511671667 3.884808990339469 3.552889084344423 6.076947542890025 4.263370191542672 2.9026853632811704 5.44030568327311 3.7933699960626646 5.782119554754802 4.481554776696824 3.8868150456892074 4.662038494451817 6.006121049802806 4.496617714948753 5.217391316388603 4.676118319751667 5.972975961403566 4.175952388807589 3.579611777875245 6.753876553325833 4.014623639103403 4.1747135300335145 3.8865183123496063 5.430840229388291 4.101988073527467 4.44978274708632 2.9606702433066596 4.699861209056854 5.075965106480466 5.331135640383926 3.619919823771662 4.896833262918277 4.697234629943661 4.050128293107684 5.684729165108109 5.233990816385001 4.765235629692048 5.45296763127965 4.93508659819029 5.083368364365265 5.434681327996999 4.381554300316233 4.061998703602757 7.060493941196674 5.376619411557602 4.716261041961181 4.075921042068209 4.351169073601662 4.136424219059371 4.139893549227034 5.50192376262165 2.9387688035452992 5.897060405014324 4.130766051553387 4.758212060287537 4.130569565878822 2.9944944371260087 5.021043121928365 4.834658547916007 4.890009878027547 4.154537125111311 4.517639255490625 4.223594143034244 3.5135398573756467 3.84136762248792 4.479399598893542 4.9415725783395565 4.126642616448191 5.196218008758038 5.829779911241523 5.6497169960791345 3.7743904430346427 4.333178965290789 3.1086879754812697 3.0766399578308143 +171 172 0.8530675308065905 0.10504388791288721 -0.7816067832417706 0.059883961604441316 0.28412113424890895 -0.2186053824948917 -0.23828471259304473 -0.009134926990614467 -0.1290253843203808 0.17446122819308685 0.5889247844704584 -0.572828967458898 0.37753686050857826 0.766977012081135 -0.04276046615664164 -0.17886954407982913 0.48127775792071104 -0.834452396128025 -0.1695808383668027 0.3501300928066391 -0.6175221924988794 -0.07437603888604394 0.15177132099767365 -0.49792878044701805 0.7540471100664998 -0.6007237599576407 0.16474847467698317 0.9215342641617807 -0.2268017944673706 0.3636633637622413 0.94742500409204 -0.4866925479283466 0.33852710667678876 -0.4907156875509533 -0.3379661932838338 -0.6886740732510044 0.8352281939427266 -0.08843672657962509 -0.17117693703127235 -0.013189589767539145 0.46301234740164166 0.2857276736236931 0.3268701538695158 -0.32068886380737927 -0.7299339980261945 0.31490681681583 0.49644561766958684 0.31212480298874246 -0.5427780741853907 -0.2737403934714906 -0.26955063740892493 -0.4538747555335574 0.2761403931468218 0.5501859656845463 0.5937211786304293 0.98113002984343 -0.9643963107673308 0.5961963905930772 -0.03413875527587895 -0.5553301379036593 -0.9798521015393462 -0.4115546315039422 0.9791025323919802 -0.3498565941354832 0.7809810579282603 -0.1515582812571472 0.4373579208645497 0.0542251555111366 0.24766681168143068 0.625689116853132 0.12328636055679842 -0.7603796792673163 0.1263698186870863 0.6423581817349147 -0.9425628509611443 -0.8517067307958532 -0.7091320695790986 -0.24891136116784818 0.9320904077090058 -0.6111404713131403 0.18271980663067677 0.057521062728794314 -0.14847228918882593 -0.26672215656274467 -0.32313116182097645 -0.06139349938512639 0.28941884681699626 -0.02358658730340424 0.3433081251228802 0.3867612368767812 0.838108994194221 -0.5927168654727397 0.4241640290494466 -0.7753302491933183 0.03537138805027151 -0.06391058533322336 +171 190 -0.4802589180653396 0.5348099256893408 -0.6965672209997782 0.09320519906062863 0.11872645036208285 0.288848854082852 -0.4810111838191009 -0.4603006089146131 0.23521811206307341 0.28425653171839316 -0.00412208088235233 0.5652223636548737 -0.7671371163469243 0.8978962391434415 0.028675429621606074 0.21841426094545868 0.9302835182186013 0.3200374963411161 0.05727652858437504 -0.56415032417067 -0.18606781075568857 0.1693333429613313 -0.4550858239155613 -0.1430585540256546 0.3976705914327945 -0.3025526949353703 0.7394639550938173 -0.3441906293971997 -0.3399522267391861 0.8530793171642248 0.6399544994268747 0.40212217748041423 -0.8235433464107595 -0.652469172718694 -0.23963622507281657 -0.42467986080365194 0.6815233513232659 -0.8971708327038108 0.5501367465766083 0.7908177193932722 0.8735783817951746 0.4355938417649394 0.4888597740673535 0.1358928843175753 -0.9831434593468369 -0.2818831909195061 -0.7184212244609647 0.5932674567243696 0.9024309698061197 -0.4875184330376665 -0.6889245306406113 -0.8426586537581369 0.704302540032063 0.013381356932356203 -0.6505521323074417 0.4263233558611561 0.744782146218474 0.09619124240878874 -0.9601788835973175 0.06711964442400076 0.48550772781647455 -0.44433056645949764 -0.23961309553408716 -0.29684304124911254 -0.5033707842506696 0.950052308579844 0.8042101377528721 0.9180813421387228 -0.6847864727815154 0.012000650639004462 0.18998251229263308 -0.9185791938331431 0.029184037871884394 -0.8487001642765302 0.11850895174737341 -0.2510764808563526 0.2777142875134253 -0.05423313067918989 0.6418751051104015 0.33295914652533387 0.6697591465415211 0.8619656593397034 0.8178080128685743 0.6474135850660931 -0.5699987259345825 -0.20005624189811422 0.7054575509274896 -0.3480779686577531 0.18901604310653863 0.751931753964139 0.9411611753557889 0.5987103346873004 0.15790922313628575 0.7749069804001003 -0.6059655180924508 -0.2849134148857442 +171 191 -0.02052578245508463 0.11225240160028549 0.45804512456752833 0.7081251600725424 0.5016550082023501 0.30766423316228564 -0.7178499769992621 0.1247163198009682 -0.20289923355308037 0.7817411881179128 -0.8916965087462534 -0.35144522144374024 -0.3149935535111459 -0.43380893846020063 0.5608725115518025 -0.8339993091872531 0.9740107494509027 0.9523332329298528 -0.549089941108865 0.31526329495838334 -0.7314278908438514 -0.6881595294541789 -0.387165650474389 -0.3499119506723569 0.7071008108587715 -0.5528871123303751 -0.136598106988975 -0.7607331441896219 0.12149792394335002 0.9812936187600609 0.07371202375367769 0.43840211828458675 -0.3126588853243324 -0.621042519787137 0.5625564775128458 0.5098691690642998 0.7376167004452792 0.4056848612131141 -0.4511659536189936 0.5018576691095151 0.8798552167117346 0.45621740351360174 -0.32330380625484856 -0.12034017825906695 0.5907013548162878 -0.31051653640579024 -0.33663253411501737 0.6815877221872535 0.290390591165705 -0.5927795937596485 -0.36505692428901715 -0.323594250167476 -0.6149552819744641 0.593673372147318 0.26806805031763825 0.6975340326258135 -0.9344950299171881 0.06098413005278225 -0.7440739244687182 -0.759813750433245 0.3909825042285966 -0.21687785804616588 0.4573632215185053 0.992255058079524 0.8857130734084595 0.7362713917293007 -0.3682859782150947 0.34498128471981415 0.48541918822025343 0.04693365331730526 -0.6075246909642957 0.5222522812856776 -0.42347966739737 -0.9456824705829534 -0.19638795078707094 -0.723454467286673 -0.9018258939102959 -0.629701277556074 -0.7750279026069873 -0.13122105136846818 0.8936469083908256 0.13359742529804897 -0.438355497620204 0.6320716960108159 0.2721049072894748 -0.8898203333931545 0.4711985702699617 -0.06867390694420772 0.39051056869812584 0.05576418751970125 0.7679584213599244 -0.7017132107017836 -0.5709431362276844 -0.399172229224821 -0.22833179232939615 0.055988037842793714 +171 192 0.9716378311167941 0.4467735935426578 -0.8438239198388477 0.6241351301061422 0.8725955178154965 0.3824093134415889 0.8688214188744972 0.236660940861801 -0.17569766503417084 0.9560449096922601 0.2268517621457553 0.3283864235140268 0.12729862768480094 -0.580117209824865 -0.08141507016783334 -0.9821693628823571 -0.5008494535051073 -0.16000429896684798 0.6435179410108636 0.6701003328345845 0.109399090150748 0.860524653159858 -0.4729831128060127 -0.2896526360249636 0.9533869943646096 -0.4984477979408657 -0.3659545525993917 -0.487293909839734 0.4192223021633963 -0.8581321383343665 -0.9377828417727103 -0.27560905403557334 0.9042143009936918 -0.2798944037995168 -0.9985332544146948 -0.6889350257994802 0.5185774775763816 0.6686397101566015 0.43892388411102856 -0.1947433546597941 0.9392266077153566 0.21031115083992447 0.6933063539106947 -0.17276578861045455 -0.25833058517496443 0.037524186045383434 -0.9016820772971743 -0.18298442757127376 0.8123875759503891 0.39340291512890246 0.317376199240589 0.11022302083227875 -0.9808851826429503 0.5049212343845975 -0.7259621501400042 0.7240408847887112 -0.3746217019315037 -0.5205006262420206 -0.897647428662562 0.8638045447518925 -0.5803341427783999 -0.6123425501145903 -0.7165632055319404 -0.1646688971853747 0.9099116743071007 -0.9695183283796058 0.09158970661211208 0.6144074235695807 0.6070559104220008 -0.5081176773177849 0.28025990596878647 0.828407254160427 -0.3202668978077856 -0.45844164854960145 -0.10383070835498276 0.584957174390625 0.7511551752186723 0.2701934085723148 0.18322332900540017 0.48695858064502806 -0.8352884178483926 -0.1742886348645447 0.20183744162659178 -0.0047406428562524194 -0.4092010936909356 -0.8775935849758234 -0.7976262034925434 -0.9900628889007792 -0.39760415652054215 -0.4869861471996537 0.7463199321754299 0.8527635906841189 -0.6418661345592183 -0.6044095834761891 0.13021882616540847 0.2941209245096785 +172 151 0.08773995438544557 0.3820831884900202 0.5354502606358318 0.9031791210367568 0.9529413403862415 -0.019919272803480936 0.5811228049144699 0.5871481014486934 -0.9921632193041636 0.96092555934233 0.9939544450893505 -0.37146723527841674 0.1036007081557877 -0.10173539704626977 0.27989658910033777 0.9201788014086802 0.1921605605429546 0.7834407420298006 0.6639254252576543 0.7664246023915737 -0.0821601322801988 -0.1405828697110041 0.1250934641524224 0.3915151132552859 -0.22836700629169693 -0.8067628081908698 0.09036526101461706 -0.8721068631450857 -0.2907110351361335 0.9000220955762306 -0.4463388688679777 0.8606078684640068 -0.9187675333967447 0.7943938899673797 -0.06367597166595962 -0.43920068644401344 0.882720505890523 0.3351621131094267 -0.18677884881683182 -0.411019457753355 -0.17782613810575532 0.19275398545405276 -0.6626530036303324 -0.30349897328732656 -0.4012724907504801 0.16490241167892705 0.26115708151891504 0.4494483786757375 -0.4937671259685221 -0.6562212230949536 0.22091792269738342 0.14154371318518355 -0.18459788366546892 0.30888212627998946 0.5573707046477865 0.227047201520584 0.44377059898304716 -0.776237655160541 0.632572638038954 -0.11549567195510302 0.6178499359036012 0.8143815649691262 0.2934375141583281 0.7524318919319362 -0.20695498025042136 -0.9227827008569032 0.47942082024541066 0.7278242973490692 -0.7841702837602578 0.025155200379638254 0.4717637327239732 -0.5203630165627657 -0.8212499485743245 0.07793748605397388 -0.6352131486694974 0.14983558187283763 -0.4381599358912889 -0.5172682143141654 0.3872456928597845 0.9884296338526655 -0.5679441699574448 -0.5129581010222208 0.5399398179765762 -0.694397683436577 0.3464574831338034 -0.1930909779540919 0.685095043770203 -0.40759770635651993 -0.27131907494320817 0.026915443600736833 0.06486866760457555 0.25043450694203573 -0.9574927116031793 0.44931176520899285 -0.6100980752397771 0.4978157172881623 +172 152 -0.016845111805294133 0.513825984085968 -0.9194593534449376 -0.6876633471747482 -0.564185098956067 0.535084218976088 -0.06756290105641383 0.5824020710377067 0.33834301442461134 -0.5323899929787212 0.1347766325582085 -0.23661121475910352 0.20511997788522662 -0.3049698743079834 -0.758904098475421 -0.830891370425396 -0.49726647791024603 0.3203860512606782 0.5458143529762305 -0.8743046889270472 0.38610345049995165 0.12078390135594597 -0.22772478267894503 0.11874012356252939 0.13522819158414 -0.5665163893572247 -0.9349992475377964 -0.9234725752462813 -0.6650432524425796 0.819669446821748 -0.476603535999935 -0.5232535276649009 0.01733875024399989 0.773922442490065 0.5483102294318511 0.2549820031576435 0.8752782073634888 0.9936871912082292 -0.6920724539494818 0.3966748442081467 -0.6373334844609655 -0.2542482237279984 0.8820477713697561 -0.9128113710421417 0.513901399004737 0.497368280736848 0.09545231945086474 -0.14759343768980004 -0.5351118325177666 0.21240950161683614 0.5627035426998808 0.35852476191431637 0.2813276298956988 -0.026487628852825962 0.7861620350192651 -0.7170859666728802 0.14877556257801583 0.008919626154524352 -0.9940003734930656 -0.47418056383524343 -0.4444514397193784 0.529467985554176 0.904976633237601 0.8190165281257478 0.3333413664461755 -0.956169333628748 -0.7026135808661138 -0.9985444361715761 0.15336517682069162 0.5448145051783302 0.7321992428749045 0.13793254880137407 0.1334425330642064 0.48260702221972585 0.8964122650062833 0.42639058243604877 0.45501688014197006 -0.27544006344907634 0.24641559119996215 -0.5362535281543312 0.2389931698143195 -0.9859627420326007 -0.1498692975010183 -0.9976976443057364 0.08664706313587334 0.47003039354575016 -0.8903532252593329 -0.6312774031537038 -0.25317992677022083 0.7197927639470325 0.3190189734101665 0.501527287665803 0.972257349246703 -0.018802984562541036 -0.5763551549628627 -0.7130409176826347 +172 153 -0.2740791276958072 0.23019976566179579 -0.8374540600813889 -0.348219526358184 0.4458769178473925 0.6915869270463557 -0.3264789859616204 0.7543136017208556 0.37708643721722157 -0.8002272729071389 0.6449503564570946 0.5560551766919763 0.46649256922251237 -0.8890421212475927 0.08703868669771753 0.21252726573416258 0.4196961420823013 -0.5052754249977929 -0.9822371304315543 0.6350132045630494 -0.9788380101533756 0.4633315552457753 0.8808441566659806 0.4877091559192268 -0.3923913571712443 -0.7721078476146637 -0.813567877074219 -0.6917168423784956 0.1588232580925466 -0.170634723290497 0.570916791514781 0.6544232455924044 0.8648601814886083 -0.7318368103307695 -0.31281634004150205 -0.7414947180372742 0.27555245715495014 -0.83883306985298 -0.9930733381677292 0.6006663668330121 -0.9943967615933513 -0.18907937021046828 -0.6819697919420848 0.7856874255879629 -0.4465049698546806 -0.14298773527376762 0.11039258169073429 0.737160176595234 0.11044314971921643 -0.7599376395751591 -0.12089881438134409 -0.9053153313145841 -0.5362198992070324 0.7796547384089652 0.3636207547917274 0.6763441116384961 -0.9871278846501899 -0.6661791292653991 0.44577146575426263 -0.8791573713304399 0.1284821014891202 0.11486331647739867 -0.4504252570772762 -0.17146541051262298 -0.6302807689188128 -0.5106536477656156 -0.09135417223991316 0.9230171719977476 0.3867806571925092 -0.3771471282310437 -0.758804499004009 0.7547051817837549 0.17969810440505296 -0.584148808943999 0.20533552055204707 -0.5805352055400701 -0.4606759615256564 -0.15515356242757705 0.6608815678022053 -0.49922362385197405 -0.02089412969539195 -0.10757087007123611 0.18439458763982586 -0.4544309417890193 0.750264980332253 0.13606021830417414 0.3806439590277264 -0.9872447820108441 -0.14423572061655587 0.4066925255845324 -0.013711615046270387 -0.7248478371680966 0.11095264595583476 -0.5494851748584428 -0.7512694548309637 -0.6475901133209638 +172 171 0.8530675308065905 0.10504388791288721 -0.7816067832417706 0.059883961604441316 0.28412113424890895 -0.2186053824948917 -0.23828471259304473 -0.009134926990614467 -0.1290253843203808 0.17446122819308685 0.5889247844704584 -0.572828967458898 0.37753686050857826 0.766977012081135 -0.04276046615664164 -0.17886954407982913 0.48127775792071104 -0.834452396128025 -0.1695808383668027 0.3501300928066391 -0.6175221924988794 -0.07437603888604394 0.15177132099767365 -0.49792878044701805 0.7540471100664998 -0.6007237599576407 0.16474847467698317 0.9215342641617807 -0.2268017944673706 0.3636633637622413 0.94742500409204 -0.4866925479283466 0.33852710667678876 -0.4907156875509533 -0.3379661932838338 -0.6886740732510044 0.8352281939427266 -0.08843672657962509 -0.17117693703127235 -0.013189589767539145 0.46301234740164166 0.2857276736236931 0.3268701538695158 -0.32068886380737927 -0.7299339980261945 0.31490681681583 0.49644561766958684 0.31212480298874246 -0.5427780741853907 -0.2737403934714906 -0.26955063740892493 -0.4538747555335574 0.2761403931468218 0.5501859656845463 0.5937211786304293 0.98113002984343 -0.9643963107673308 0.5961963905930772 -0.03413875527587895 -0.5553301379036593 -0.9798521015393462 -0.4115546315039422 0.9791025323919802 -0.3498565941354832 0.7809810579282603 -0.1515582812571472 0.4373579208645497 0.0542251555111366 0.24766681168143068 0.625689116853132 0.12328636055679842 -0.7603796792673163 0.1263698186870863 0.6423581817349147 -0.9425628509611443 -0.8517067307958532 -0.7091320695790986 -0.24891136116784818 0.9320904077090058 -0.6111404713131403 0.18271980663067677 0.057521062728794314 -0.14847228918882593 -0.26672215656274467 -0.32313116182097645 -0.06139349938512639 0.28941884681699626 -0.02358658730340424 0.3433081251228802 0.3867612368767812 0.838108994194221 -0.5927168654727397 0.4241640290494466 -0.7753302491933183 0.03537138805027151 -0.06391058533322336 +172 172 3.592979370125704 4.797949612082997 4.818342455003908 5.146846937471821 4.919186372330474 3.850926929916364 3.3259361216229486 5.3512640512334695 4.498792738880513 4.790755279727081 5.248083519860762 3.999440333338861 4.070700185480893 4.230396500728608 4.074285300039371 5.756169155395567 3.8206641408284847 4.979935252585066 4.738767709854152 4.582798635149761 5.502415765356821 2.6788680679559578 4.69978620330034 3.672322522956539 3.081023645311848 6.229886906631549 4.000328694631133 5.89346545758412 3.9453140711005226 5.50661704663392 4.9611830254856715 5.413545099800757 4.484771272029043 5.556894425296685 3.0493519725605336 5.389971648415355 4.766638850405871 4.483755685055495 4.309597546098657 3.745882504099405 4.673708055151911 4.186253891387281 4.261169186290412 5.287783841247873 5.10640554766549 3.989203913458332 3.009285058813647 3.0938600716273 4.128672305488571 4.127774198813981 2.5381478518834775 4.007567668777285 4.001566530015111 4.330263668388402 3.7771262397770817 6.068061788157426 6.09272814957272 5.07838044128247 5.098808942232299 4.452571277309253 5.027993813526502 3.13310567572679 5.830595399930197 3.5545621601563653 3.499285557680265 5.649090345347841 4.85798435733965 4.824459977110553 4.6671048336922905 4.051737579943981 3.939754836054064 3.8378089684608563 3.6099554559154443 4.616633374766281 5.941527144718858 4.963868659195045 4.029556150767155 3.2459996466143144 5.3888682660989 4.96323999451654 3.0417383064431007 4.349716061313759 4.489429743551618 4.2731287063241 4.158346455015695 4.407953725770132 4.149316763587781 5.315198041772001 4.190622015846493 3.9856431978401883 2.0677732266425277 3.867799645055279 5.804720624676084 3.9388645672815845 3.8485772897366686 4.592388784948088 +172 173 0.7408899210988789 0.2746952571975454 -0.29141651147285463 -0.4419642227190721 0.11050611352167627 0.46852755982569017 0.1032990415513495 0.6678425020799781 -0.6401654114420281 -0.7927123071505531 0.9929773663151626 0.9103004294236448 0.6585242325839258 0.09359973345971495 -0.6417090082195533 0.45923274236616507 -0.8594356767267108 0.4566449058044699 0.6335201451267092 -0.4420371783034629 0.49544822510232644 -0.034421059257540465 -0.3923076512338366 -0.054243891507520736 0.1653965366411252 -0.3295365964792061 0.6589353772498485 0.5979797463942029 -0.32250611065461143 0.9625157538357947 0.7940159121195187 0.6843679459200169 0.04403225175148129 0.7311151618547553 -0.025226317247124097 0.8247734333163674 -0.6695669748996103 -0.06724998504937307 0.4971595945824563 -0.6226803354637267 -0.3998872966983711 0.9901871274632774 -0.03972535637890262 -0.45481960313188696 -0.8380540828497907 0.6035658441938152 0.3393391275073254 -0.1291643454650222 0.6760941507624134 -0.9729020256915422 0.29712529390180453 0.8696843970189296 0.3278464335639486 -0.14484614910646698 0.22770643049498274 0.12231669776803589 0.06176396537923434 0.7712287596335861 0.593787204749193 0.3368840000465918 -0.02304474116073907 -0.492758779045102 -0.09076197718502699 -0.22674586115984563 0.3276706921064809 0.7830176904907444 -0.4124144870958424 -0.3843932262267664 0.8321798229266093 -0.36029514534299434 -0.30045658308275525 0.3525951294017917 0.7407671335698582 0.9785660640125169 0.7186848569487241 0.7942656613363515 -0.8906715715107381 0.9307361418669757 0.7170009227554666 0.17076190556777604 0.2188962983631657 0.902855736174945 -0.25682242403242306 0.840361263492488 -0.8850476067173119 -0.9010508286720298 0.7758997396364844 -0.9688097210223003 0.6170419329440826 0.9633836743622499 0.07918438736296074 -0.23310155101702268 0.5376136367241979 0.7191972255564252 -0.9202737359099489 -0.9830105619991012 +172 191 -0.20762671073487016 -0.7329903344520063 -0.7138668295798309 -0.566517287056119 -0.8651228780697624 -0.04218327435557323 0.5398322484910469 0.7779926329749098 0.8188835395109457 0.1053770418253146 0.768483055784648 -0.30429629383464896 -0.8494926628147987 -0.4920067400077659 -0.7189904635793454 -0.7545392416165624 -0.05362587322814516 0.49735808308673435 -0.050146563446611614 0.31810512653094447 0.8263665745508106 0.3926168110014654 0.9539443104365273 0.3701606990299835 -0.3054830721127637 0.5976503909926261 0.11612899923966058 -0.8680514890521118 0.28668039245541266 0.2560490662095942 0.41867037574204025 -0.6636624173157053 0.9412431216609527 0.8586334724126066 -0.6639511614477294 0.7049544471417186 0.3439849856740169 0.7238502936393403 -0.8015461665148798 0.8816829881180144 -0.11681357482558608 -0.41764005750688704 0.42354325869355236 0.8583038586340603 -0.6598413367399636 0.4077804256718107 0.4213987091701037 -0.3875952462347849 0.7217114054567637 -0.04589262975647834 -0.02725505424099417 0.10663430502742832 -0.4700174922746754 0.8949821187828582 -0.5943713169050182 0.6175264694713374 0.9717605366454556 -0.7791228153335923 -0.5371083980292171 -0.6310611365881194 0.5769823463823376 0.09878163774031079 0.584108116956473 0.17496863071911317 0.2943754686847315 0.8634505642291865 -0.6673148864448266 0.0603008312954918 0.09772724738988825 -0.2824998905468712 -0.769022757250412 -0.3019199036249123 0.760460596949077 0.6009032486088044 0.5033951143498026 0.3194845717747028 0.038115370309418806 -0.9143063573887247 0.7752230215290783 0.09190807650533839 0.6732117400799664 0.6787939548523572 0.996220022406991 0.33272553516779224 -0.38033485582987003 0.5391539662127449 -0.6542869524610824 0.828946064731723 0.867516701005282 0.6295236045196375 0.24973509365509106 -0.34175194752744265 -0.8335617828352142 -0.32636346622831836 0.031147500327308508 -0.6333575878160902 +172 192 -0.5552130885514672 0.8504899766402749 -0.12355878504163198 -0.4185902434365827 0.31008630271097437 -0.1573309195502237 -0.9704208022709064 0.7390748178657647 -0.45935798282654194 -0.17144637316866373 0.612200619402701 -0.26501891660552923 -0.4483092231090775 0.517966646920045 -0.6031076438173439 0.960759648974669 -0.5584623477775037 0.2512873739599435 0.7716959669852133 0.19906046918075426 0.7019505368544379 -0.32554982408303523 -0.22465572411260215 -0.0004683484416012629 0.6991908928007629 -0.8462351375201262 -0.5341880821513054 0.09602278209444037 0.3125833088846086 -0.5485421821232259 -0.8444743619070267 0.03029893849585452 -0.23452472724173212 -0.1368710489331011 -0.14401945883276657 -0.44280449458420956 0.08598174647804835 -0.43612126528671546 -0.07286254561341154 -0.3177113654537098 0.9900908564936313 0.2348625935940043 0.19215336455521137 0.35811686517385577 -0.052776060274743575 -0.6050778332155202 -0.9957026018765527 0.3258902758189235 0.03669801416204588 0.48243169236054717 0.3496359687632493 -0.11059988360873763 -0.8623101792232148 0.7849797888929324 -0.13056958717288558 0.8053532442945408 -0.8558461853586974 -0.39128353223025747 -0.22126603681218637 -0.2324034100409882 0.8100360546209504 0.2655947126378928 0.9580291760957071 -0.7404671412896939 -0.23980145694439226 -0.06761703532732244 0.5465234859108932 -0.9066080799704328 0.870337868237379 -0.6790648298750626 -0.13376499581486434 0.01177355550563397 0.36222106724951786 0.6670106579629091 -0.6284372718552842 -0.7551976527865021 0.08615352433620815 -0.0365357910572095 0.057985883779983594 0.594518796135749 0.8828550792595751 0.6276694029444725 0.6417705816362604 -0.05526607107813408 0.05842131898094083 -0.8567589332656442 -0.30981476849512024 -0.986602621480761 -0.05839182426582301 0.5301212716511923 -0.09840390204258842 0.9676189083135203 0.6295197044224028 -0.1584278204670484 0.12435727077727732 0.5431629868737218 +172 193 0.010607214842932366 0.8096493361243282 0.2513703478188145 0.9693149189078996 -0.7247653236532314 -0.9136276936763079 0.17881903560117363 -0.2635966012539983 -0.25236011934488634 -0.5786621028788912 -0.24837029824260348 0.009076068512070101 -0.9574775336879848 -0.4508787648584396 -0.27855506966403576 -0.9852920174073134 0.4239540859857234 -0.8293078932430014 0.3388458953546898 -0.9786913795078287 0.6989844270460814 -0.6478100792213572 0.9539581188506319 0.9061567892343092 0.011734195984538953 -0.7254303664801438 -0.5451986581678301 0.5637438615826236 -0.8815201943145787 -0.6326573373269531 0.08180494769630431 -0.8832691314760015 -0.3444163957741444 -0.8071536782419846 -0.7041632868324457 0.4670667600878069 0.2038964664251781 -0.048385319545231065 -0.16682983680507912 0.291320633043475 0.4944698288417899 -0.9085163977615289 0.528173239208493 -0.7361529219871692 0.6011131691153613 -0.5516120686169914 -0.04046288279673815 0.27293893046819573 0.6911657635641126 0.5431454804252605 0.44198342780457933 -0.08679165286567336 -0.588775510905827 0.563229044523391 0.2854830330392515 -0.9705523770628361 0.8098205924405699 0.8604873828785307 -0.7701861272868842 0.9741259043303714 -0.9264911919429886 -0.13434217954572114 -0.8693378230032858 0.23254574894630253 0.684605651959024 -0.9508688911929752 0.8093962749218369 -0.7194467839373089 -0.4043287345885136 0.9450123001226993 -0.024804305305105023 0.3647906031962165 -0.12373468059423276 0.4420103152861563 0.7954499727530753 -0.10727404904352622 0.7813385638614858 0.08434087327921436 -0.73141563840764 -0.5599902255902598 0.035658690903848544 0.056551320047432574 0.6722594932137573 0.09109597781012702 0.7111486995803498 0.7516438486299861 -0.02401588720172243 -0.09676674216426062 0.705359388966698 -0.026959165561613263 -0.3002049267326956 -0.13051379880913028 0.8811843880277024 -0.5894918530425408 -0.10621606404349748 0.3105337229226848 +173 152 -0.6343630013799875 -0.4890203543760432 0.3458343204111789 -0.4009122716688316 -0.9502114417661283 -0.672303406253024 -0.7953581312235622 0.6564586001759625 0.4993092406152393 0.5252170603536974 0.7808405783393695 0.26928032188997175 0.46422568679210885 -0.047499441265663966 0.2978376951236539 0.6919380167442069 0.41757536652954896 0.06989768100066596 0.43866424675118854 0.05837233631704897 0.016848928096903304 0.018609806147297903 0.8847251563260385 0.43058051429788136 0.9696373016325528 0.41371602627805104 -0.9198671180596931 0.5628468204648001 0.28368831381523996 0.9047656593302367 -0.2614581710779629 0.976417760561965 0.6644568639900978 0.23903290953287937 0.5421198508540583 -0.4513541358483828 -0.7804974847787405 0.5968255046761324 0.46083404919076987 -0.02126523039836581 0.44886703307384934 0.5430422064907383 -0.7988815520418657 0.17147028868828085 -0.9175475692003481 -0.6213075025359298 0.23634642154512986 0.2269858169770531 -0.6738162795106808 -0.5253355252958634 -0.41762338732238713 -0.8967278519125126 0.6951875047497986 -0.8585497357533738 -0.051727635129298566 0.6241203338371286 -0.5310841739421224 -0.40690157242413894 0.3508611292883588 0.772764295749903 0.398745390140111 0.6399004756462401 -0.14481967734211176 -0.9311841133462595 -0.08043481257420915 0.4924188900021669 -0.1649846535039743 0.7260359396363751 -0.07594392433147501 -0.34363083039183473 -0.9784069572970064 0.07771595260432784 -0.01918844831782751 -0.8392891619430753 -0.23647249194931041 -0.5032931890889003 -0.1260379490795389 -0.8543508846810952 -0.2579040742675105 0.8105385189372836 0.30650480600994645 0.18112325073772428 -0.6093938903138225 -0.6036575599472316 0.5224699047722623 0.4559254423677257 -0.577129161833565 0.001331547531330246 0.43540932477397654 0.09861399725241271 0.8801819833848219 0.21504746492604787 -0.47060266676023854 -0.9115142465546675 0.8497623747248357 0.9124481929720234 +173 153 -0.6583820487293144 0.4792440133077087 -0.22767979923858972 0.9426935078470182 -0.5229564393397617 0.42034067443605716 -0.7080612956931727 0.320115785116561 -0.4078677492707772 0.3057569342520561 -0.6424023703803698 0.27837155980794925 -0.6391674736993036 0.6958274415113141 0.8250681926268231 -0.5589637275816497 -0.026512434473948465 0.6956506182167355 0.7840308809300713 0.38780881480217233 0.34980812580139875 -0.7776469871117673 -0.412264288790112 -0.42612289682651716 -0.11228683004940776 -0.2936502879657703 -0.391580087264225 0.6024944024039103 0.5559906650830773 0.4138837073460919 0.06686916749638838 0.837790428105146 -0.6007824035834541 0.4380910523941468 -0.014567997682854994 0.09153700249692642 -0.3032683174135251 -0.7996686712014103 -0.9237401245146206 -0.0822468652250472 0.0016786050134076635 -0.37661039470892566 -0.6364708921864333 0.0809546692575851 -0.3665172853242047 0.7555595592602873 -0.8481124342021165 -0.4548692769750329 -0.07872700658998344 0.42439556048450844 0.09895341925834811 -0.023272637608771518 0.14355908078474888 0.23925770826919113 -0.7450181400945874 0.17997080161707846 0.4081652261740034 -0.5267493559486454 -0.026694434436196346 0.43537668835337606 0.19322650417735332 -0.7811482977927664 -0.22558394334138998 0.5682406906288697 -0.3023079999034408 -0.416774136704398 -0.9081080650151083 -0.8322911844941439 -0.5937308913678625 0.020699539195660366 -0.3517113231455993 -0.40503746646006356 -0.7281613979185011 0.8675028140788235 0.8550667663325175 0.8546351044241729 0.09939553505904208 0.9970403205213096 0.0101178854625259 0.4313977546867127 -0.8592503049648943 0.7253961499805868 -0.2786838799293252 0.8449996673688371 0.5909953858832329 0.2456366118259794 -0.4790215685937136 -0.58594324067165 0.710580455584634 0.21991861857964068 -0.31481945691094393 0.8248500990022509 0.8834639703761378 -0.8363321757974702 -0.7840879061047081 -0.08042288661692787 +173 154 0.7423095205856978 -0.2602613164259069 0.6775205117490746 -0.15825774166519468 0.2567067167040644 0.3278059075008355 -0.7308791908192596 -0.28938659301750036 -0.16053291288769245 -0.8509449378500784 -0.7843991677454256 -0.782968750047577 -0.7086218453987887 0.7293552211086471 -0.5899493220864891 0.11466969325705878 0.21892708968102492 0.6635301134362881 0.6578997072519843 0.7161022533551611 0.2754959776202828 -0.5875272364874375 0.4048678518651927 0.07718413590590978 -0.07586791175644203 -0.9334833762863202 0.8977107387781653 -0.6858238721377947 -0.14131738311456865 0.751428145207246 0.9463299860987808 0.6320436958897859 -0.6352898244104739 -0.5727482000090809 0.06405619599525925 -0.6292870753933841 0.9930128692684492 0.6136601307562539 -0.4357669111982596 0.36507633710652354 0.6088173434765398 0.014733196098602575 0.009695015491791414 0.16603811252259204 0.5464572636732101 -0.3910423765423363 0.8391861819071764 0.6042968567721041 -0.1711690898843885 -0.7596480918804172 -0.7042158403824723 -0.9958966807321814 0.4036759821319089 -0.8983006073581057 -0.6896856845964248 0.6836071083283095 -0.15903505810053065 0.1665864428508843 -0.9554220768991721 0.20611261898043343 -0.34015114278651426 0.7836621056444775 -0.6876910955477598 -0.26599722814137583 0.45387124455341876 -0.5280219423017962 0.6221256635495835 -0.25527851314765826 0.2517638037354244 0.3886209560217426 0.7642756900135812 -0.12200551728364717 -0.7410796793662002 0.6144010867563061 -0.6559250177791334 0.5417863720398031 0.35450994667179647 -0.46502629525243444 0.2856020961354109 0.4550200494416765 -0.27517978900948825 -0.1430164769260298 0.583751584518545 0.9377895489782972 0.6663234885155598 0.5480977428889207 0.6027177645369717 -0.689220287078923 -0.13711981577742138 0.8761708621941824 0.9192250173053358 0.358283012942493 -0.7292001253979086 -0.12125431821183175 -0.2952416226772536 0.3493443138375345 +173 172 0.7408899210988789 0.2746952571975454 -0.29141651147285463 -0.4419642227190721 0.11050611352167627 0.46852755982569017 0.1032990415513495 0.6678425020799781 -0.6401654114420281 -0.7927123071505531 0.9929773663151626 0.9103004294236448 0.6585242325839258 0.09359973345971495 -0.6417090082195533 0.45923274236616507 -0.8594356767267108 0.4566449058044699 0.6335201451267092 -0.4420371783034629 0.49544822510232644 -0.034421059257540465 -0.3923076512338366 -0.054243891507520736 0.1653965366411252 -0.3295365964792061 0.6589353772498485 0.5979797463942029 -0.32250611065461143 0.9625157538357947 0.7940159121195187 0.6843679459200169 0.04403225175148129 0.7311151618547553 -0.025226317247124097 0.8247734333163674 -0.6695669748996103 -0.06724998504937307 0.4971595945824563 -0.6226803354637267 -0.3998872966983711 0.9901871274632774 -0.03972535637890262 -0.45481960313188696 -0.8380540828497907 0.6035658441938152 0.3393391275073254 -0.1291643454650222 0.6760941507624134 -0.9729020256915422 0.29712529390180453 0.8696843970189296 0.3278464335639486 -0.14484614910646698 0.22770643049498274 0.12231669776803589 0.06176396537923434 0.7712287596335861 0.593787204749193 0.3368840000465918 -0.02304474116073907 -0.492758779045102 -0.09076197718502699 -0.22674586115984563 0.3276706921064809 0.7830176904907444 -0.4124144870958424 -0.3843932262267664 0.8321798229266093 -0.36029514534299434 -0.30045658308275525 0.3525951294017917 0.7407671335698582 0.9785660640125169 0.7186848569487241 0.7942656613363515 -0.8906715715107381 0.9307361418669757 0.7170009227554666 0.17076190556777604 0.2188962983631657 0.902855736174945 -0.25682242403242306 0.840361263492488 -0.8850476067173119 -0.9010508286720298 0.7758997396364844 -0.9688097210223003 0.6170419329440826 0.9633836743622499 0.07918438736296074 -0.23310155101702268 0.5376136367241979 0.7191972255564252 -0.9202737359099489 -0.9830105619991012 +173 173 4.990141826517672 3.948782456835595 3.844552896252269 4.1339122518007425 4.879057473011745 5.172390917026201 4.695327921450549 5.131918309871396 4.151611822145285 5.972304648323233 5.944883943186127 5.3684418074319336 4.6614417028389745 4.58285830967551 3.9390538488200235 4.230218702498036 3.6173244984613 5.653627600472557 5.226481968914534 3.641821983609007 4.499654313861854 3.883727363151264 3.974446254299957 2.6123477608800245 3.945768596248514 4.396928970006218 5.348290250266224 5.034594295151479 3.659684066702531 4.664556054553412 4.097268239528174 5.085601525982592 5.202978485951637 3.8147308400920297 4.757240318495978 3.73826447737924 5.806353152936868 4.393473256923239 4.817157430299859 3.910781271014345 4.167623636482808 4.969545025253224 3.932046299352046 4.0843091833258205 5.2317046632372035 5.646788628797748 5.560827103754047 2.6304684174547766 3.8673547711719936 5.39891581008206 4.114515128676095 5.412053041254655 2.956066194381191 4.041831823442294 5.605344978222121 4.54004039105199 3.8413913654190095 5.737480465210176 2.7584183033695826 3.9867273027907197 2.3817573962272447 4.867759259183018 3.688005653594126 4.444478610383607 3.7185200364091355 4.410217363279825 4.006497077020639 4.089049604593042 3.96057796583772 3.177743275251034 5.527041264646856 3.1740814513697373 4.796782914262663 6.1112343410850585 4.184463760626964 4.814599141542103 3.4766387681615405 5.215361665754241 3.8765877331364678 3.5390532620290545 4.850863186351694 3.915944234452423 3.0201525592624785 6.4632992354297585 4.447305227535172 5.415602354916189 5.7897100589434265 4.132236489564437 3.3303305667085956 4.214347631914528 3.469442625782616 3.967881482526775 4.83549828633132 3.9914550524175794 5.318648546623409 3.0572899447075947 +173 174 0.942294077162932 0.30996139725207006 -0.48659666825037906 -0.17559303144415628 0.952836923564329 -0.8612874750241635 0.26096448690134433 0.8769425585854833 -0.7332179851993241 -0.735178461301778 0.6416473441676742 0.5013988104893989 0.42262158176006714 0.6237190852627608 -0.016790329265935044 -0.5146148964033437 0.6130358726584977 -0.8989595876681897 -0.9736699013949979 -0.06877670932782887 0.9851993397486367 0.4262465318150117 0.36988684891481594 0.8973609486608494 -0.16005529705405963 0.22409609998419944 0.8184663814066455 0.6133087262396806 0.7228603521004844 0.033109620006124274 0.4713618747164703 -0.3392121211976249 -0.20433514652741347 -0.24569426823609986 0.963267833905153 -0.22001930409309445 0.9936935310522437 0.8832837187367477 -0.8773399596817755 -0.547335802718804 -0.9270852180733387 -0.5431970402973176 0.0795298238450397 0.9431650454082254 0.5727952095301461 -0.14405577211429366 -0.29422323284442764 0.08827188841886269 -0.5598602732722031 -0.31838402134525245 -0.9787561350485816 -0.0931372906771788 0.3451364740989227 -0.3069716483009506 -0.9659032286865377 -0.1487407179699094 -0.5320281339759136 -0.6061913561204519 0.02892169547775514 -0.31700105754634866 0.05662237596884756 -0.5796976795885267 -0.6585670393423126 0.10401556071388462 0.7881399618513949 0.5631183248142244 0.31053820229565976 0.39782794590143933 0.3063408831319576 0.2364003780121322 -0.3173505657522311 0.4880280424111907 0.7256951658705446 -0.8065041207699164 0.009244119095746628 -0.5023054565150253 -0.9735685583003741 -0.15888487038054877 -0.44641004123758776 0.3011059282030204 -0.7021537731601379 0.5952554342904548 0.29453146023767407 -0.1461161805203779 0.3177251415691493 0.3949664992762736 -0.8012710306580688 0.33728896196524727 0.24950956512459443 -0.3466795667217386 0.6142180576441889 -0.19014226272691404 -0.7768474931983338 0.050015988679884105 -0.20000115573445076 -0.2768465680400165 +173 192 0.6723550849848208 0.6430486995508304 -0.020888984734908966 0.9303486604021725 0.1384490581272415 -0.9774281699240472 -0.7310382678442824 -0.8367655252464437 -0.9658926103079146 0.6849093981904457 0.9227328478285766 0.6313084374375455 -0.23696888072574818 -0.5129172221122615 -0.08837078272806309 0.17078360099248124 -0.6364850939119133 0.8131333318310008 0.25357195326181237 0.39524182487916915 -0.7836911644502063 -0.31924141214373924 0.6928500494968606 -0.4903520861052786 0.6053391083525843 0.28202932412579074 -0.7833977494149815 -0.941773220103336 0.04193260665052345 -0.47152162368817097 0.07011280496198058 0.13195319663847105 -0.8097582650633406 0.3451783942049109 0.8592184600134645 0.005342611561041988 -0.08382197947606929 0.814995276866791 -0.3309356618551662 0.08558806979058109 0.6373700412207135 -0.4239376706350233 -0.7617372678662075 0.19152803818827757 0.8290486706205622 0.9134275037672615 0.7337223911743418 -0.07491454097254624 0.8001792363776961 -0.6720503535977664 -0.2904147590594186 0.693618663436705 -0.2929532464249347 -0.22542270428182865 -0.5383477281811275 -0.6888565867867407 0.5669134141935277 -0.8927446888069344 0.2376948209739771 0.6583158893726244 -0.6881404188685771 0.42216524653524856 -0.6016057427475039 0.7000520005663746 -0.21714145071351298 0.3609200537729249 -0.024379674452913003 -0.36803219952656274 -0.36827274620744066 0.2708875839760079 0.7348622669493912 0.5872804395861233 0.5206645958317975 0.30893209713330827 -0.04947521429573376 -0.478774663002701 -0.14611534921524294 -0.26825044029976164 -0.7500103497461352 0.5908110326992431 -0.8938559683186214 0.2611045722528884 -0.1297749742031855 -0.9194215415970739 0.8262771111654785 0.2835050977804021 -0.6005316858376082 -0.3686680022500779 0.9516855049048418 0.22350850606451567 -0.05804882796499933 0.2993351214806155 -0.11507302798149355 0.14327018915248035 -0.8942946822659703 0.01473919623142872 +173 193 0.24758351122505995 0.36814942899104763 -0.009471262555798443 -0.28833501988255383 0.23810297303075068 -0.6273925949483206 -0.3388261366422447 -0.7036908520501155 0.08930125968799985 0.4654166984713992 -0.26424165926614385 -0.9820515864679158 -0.5383040750167758 -0.37720924125284183 0.7672946348650156 -0.6704990604875982 0.1000110179040079 0.25289211462691563 -0.2546793404724472 0.4395571539501888 0.6310903885085632 -0.10999610757823719 -0.07467353747252026 -0.11864762492517156 -0.8691631915550713 0.8260459242665075 0.4574395125941213 0.8103191440619228 -0.8191415764751069 0.04019544853522361 -0.9506172516097846 -0.5191278077930803 0.9371862978539431 0.12019982618278746 -0.9992239009686277 -0.6557090271585893 0.13375364878275042 0.13972228558482902 0.6874578084414633 -0.8905821584285025 -0.3706819040577818 -0.7685912562607782 0.2767683368505065 0.8425540117413766 0.8455998870495591 -0.6330383389729974 0.6649721547741214 -0.6128606016004647 0.3752278676541987 0.9733618868681868 0.166836915833793 0.7595754191948028 -0.08751978419942041 0.5859560308310743 0.6003869521333367 -0.762918824292647 0.5744936228210036 -0.7913744330533581 -0.364082838845998 -0.48298468072480705 -0.5965171555179778 -0.10912742160126077 0.047880991376309634 -0.6333458253508613 -0.4548765394759404 0.3956803796185804 -0.6670719824113558 -0.3635148615537769 0.9618645623841939 0.33974541580410866 0.7489915863004701 0.3519104295208393 0.9596432729164459 -0.6456040977259812 0.5118573709446284 0.5001520707064799 -0.41001486035677126 0.5572380137301336 -0.415022498599944 -0.03300963626080744 0.3717360854690728 -0.17736973731398686 -0.11409856132482021 0.35049315868371456 0.5588741297178907 -0.8097649962594513 0.5277852708739195 -0.2614517805338419 0.1823623955754745 -0.2824505263281105 0.05688080747114488 -0.6747487066403521 0.16410599980252027 0.25086362114933114 -0.17734554571396433 -0.24453808593396764 +173 194 -0.2862687112002651 -0.9918548858730261 0.8319917379278194 -0.21464641196221246 -0.9653814846040611 0.7822574171463355 0.4756813887871141 -0.4314767287477348 -0.06284029582292927 0.762025531989281 -0.6835401766204845 -0.750575027431081 0.974421773773126 0.7170821809796735 0.5350582621211852 -0.5632577076122349 0.33932153809329124 0.8518605058940967 0.6675224566233686 0.5880624968855261 0.40258011344866707 -0.6911491557385927 -0.4891592347545548 -0.0788489800109966 -0.4756201729663361 -0.7749604619889319 -0.30761338112797687 -0.017201528915602005 -0.4122433298893544 -0.6275585501189946 0.09003908227240864 -0.36654677971869654 -0.4132385329847672 0.8538148745248852 0.9622783541353528 -0.035064050850027284 0.9031628617235246 0.09651033220273786 -0.12233219588082012 -0.7232934790327801 -0.14306830449313623 0.7660990227565778 0.5511966256549716 0.7317147740451322 -0.23386477666519734 -0.6775956784482589 -0.6105261480211768 -0.241619811435402 -0.47591382471677 -0.6953011863652818 -0.2054787116998278 -0.419135849987869 -0.4978360675707505 -0.6201142084974285 0.9662900588689456 0.5017448900295829 -0.7830083144716442 0.8957242119136222 0.16796413509462838 -0.4715068208953064 0.06382122821851599 -0.4104273585516405 0.6808627215131273 0.3018766369277994 -0.19964779011886202 -0.43564748701191136 0.2980425122860886 -0.3227688517070806 -0.4081744352952079 -0.6807002679443543 -0.8512547574023406 -0.6539664628969863 0.2206696924600271 -0.10306495248400038 0.8922852875027907 -0.5589937294521945 0.2564753215125646 -0.8298311661516571 -0.3884291997741989 -0.2432739142696192 -0.6346351128174303 -0.040889521970367326 -0.38763514194302484 0.9333363201499467 -0.07499693765657223 -0.8681271848323464 0.5400704274772405 -0.6767123727366045 0.030733845953767824 -0.6653793746466765 -0.41993803495761206 0.38167597786129837 -0.2677923327534828 0.05246934727625474 -0.743696470573235 -0.10331420086941723 +174 153 -0.32193922025124033 0.5196039849241032 0.7807440061508952 -0.9914045678226209 0.6736090090966012 -0.03578530887384401 0.5597683198310348 0.5600703050487115 0.8332316148447114 0.9457656726475414 -0.5382322798503896 0.8268992399405031 -0.11029277078161392 -0.8674916663741556 0.7583758731038088 0.36653246931357253 -0.9811275996481488 0.8285351258474345 -0.020490924854395187 -0.2249589319334251 -0.3017825977416835 -0.5734865766725115 0.6818667503139204 0.2652204995700571 0.418076418326349 0.06805350246565389 -0.37524728383744277 -0.9564861799304836 -0.6799078225229607 0.9947458813533725 -0.9106296525079223 0.8202931700381204 0.0034742878225988427 -0.14988355407324505 -0.2636749871031592 -0.6384023343082965 0.41761307841000717 0.40745415463080303 0.6320178253475679 -0.43369214908860587 0.3164261806103261 -0.46903119943285443 -0.1525242690404347 0.007031118291443983 0.853327660864041 0.4279520489474693 -0.16792428978925522 0.5588285059950608 -0.6177743966107376 0.6054683870905682 0.8493786487973387 -0.338563601058091 0.14284818019520218 0.6549246813587883 0.8263807429325194 0.933585241246484 0.07152781218477111 0.31790494099006095 -0.8951764524157559 0.39013583503036653 -0.7919563916639816 0.25213197963496237 -0.9788030799118377 -0.9782073180285888 -0.37189969308222737 0.21986995147315502 -0.543713590992472 0.12870300082784092 -0.5658170838867977 -0.13625250064518712 -0.40721479445897346 0.1959779329095972 0.464547007388477 0.736627978709874 -0.6771671571908897 -0.7805227879900225 0.6642739920911869 -0.35504473339860754 -0.9662592813617308 -0.6787091713816937 0.043843231560700247 -0.5964045766693384 -0.8410209079593174 0.2399138327868342 0.24404929327200775 0.2460534376458492 -0.07094334406894753 0.26894711729243337 0.4263109467526285 -0.8058701769891701 0.8460069789725415 -0.10262274556282058 -0.5721726482311906 0.8576449794342555 0.7374543732305292 -0.5504860453284592 +174 154 -0.5119074669460606 -0.8301111800213195 -0.6986725854557059 0.039561501045561887 -0.42593760019892213 -0.4829780598567648 0.024995977740202457 -0.2648770823340869 -0.8072857846544228 0.6806827869728234 0.9104898732578222 -0.3316377603076437 0.42149709373877386 -0.6341519728601985 0.8035985672671555 0.37259977322599025 -0.44090485048480654 0.003017957936675364 -0.3243122917014869 -0.20899377423198984 -0.4273943262067028 -0.7002728952415662 -0.16325751651245346 -0.2208283163837339 0.14667426008377582 -0.05215268981272425 0.6974988212765818 -0.9530014480059126 -0.08039289970291352 -0.6243229978021996 0.4099876197005181 0.2926215562395158 -0.7736528761817656 0.5693529727717859 -0.8700896262300917 0.19282973882406673 -0.10131684826165799 0.6138628058188496 -0.4870580138658531 -0.5683552967090448 0.17441834674051582 -0.38651250317878905 0.21151688448725126 -0.9854902942343846 0.5384029759993794 -0.9434361355754726 0.4483609466882874 -0.2769197920332147 0.06066683851822008 0.8428233078593399 -0.9577295916841788 -0.53587645627999 -0.9328655490938358 -0.19004259492865305 -0.3402127382758404 -0.08776698774660985 0.15335748792500903 -0.7595042738725717 0.844484600338256 0.21721460700538509 0.1901147449682501 -0.29811662975577824 -0.6401277818843267 0.2238320421826785 -0.3252993034279592 -0.4947343454558222 0.8202270592872887 0.23702552162893165 -0.2219142068174138 -0.41954151430199316 -0.36519625515246057 0.7955954612280685 -0.12815455818135413 -0.07924009440836288 -0.8735153308154875 -0.6615611749948924 0.417396220197773 -0.610412680125002 0.5324683190927422 0.8897352591976264 -0.9370728533114063 0.3850780990713616 -0.6070041429807367 0.40260763859883153 0.5480809441523682 -0.18369116868682855 0.886388049674288 -0.2593251294320791 -0.17437622242602902 0.6908183903165916 -0.16983379338372329 0.5054315207549964 -0.5528646269449005 -0.17706414633434897 0.3835516386135265 0.07586063516213737 +174 155 -0.9287902975790658 -0.4167859978912085 0.8542170833464653 0.2801332860734631 0.30864684144224674 -0.9187261670699896 -0.8037781505753556 -0.23418775388346513 0.5510469569798422 -0.0263456780828899 0.08288924248478424 0.5953247915522177 0.18857238607570737 -0.3610507979364921 0.9799199326719163 -0.640935814427106 0.10154917487435156 0.0791612392600467 -0.560024351900329 0.37162667140251804 -0.41871883076694316 -0.46698932910030777 -0.12301749094343406 0.8590529413111025 -0.348839886568985 -0.4338965046210921 -0.2984416831182686 0.7243668315942167 -0.01905186984071694 -0.07079277714658616 0.27957889487957943 0.9133417006042133 0.35708976133905046 -0.1077883167615854 -0.9388953352693814 0.9486541514517497 -0.5836407589324861 -0.41438069540295586 -0.5810409054220218 0.3760924061661093 -0.431366590436715 -0.8710850047773795 -0.8651596399282224 -0.41193396936546245 0.29444544894383173 0.23143410909781714 -0.04436778432018951 -0.39062557465216274 -0.03167751025329113 0.4992776337766007 -0.8367035174838933 0.271666880037746 -0.5021489736315272 -0.46246248593096406 0.4077050906140436 0.20478708313967897 -0.3483691340202597 0.5418571657521671 -0.6725605546859783 0.08151481399337701 0.39360682564287375 0.5017479714019781 -0.448660538750121 -0.6875901308003534 0.9327968440178152 0.30674386224154837 -0.7547726595564175 0.25593301047151096 0.5613336848718418 -0.11257149256909615 0.1813835029320412 -0.47956093031120317 0.7621945351885129 -0.5018576862001412 0.22304527239961924 0.6111448422940136 0.1677223497648006 -0.7284152378946303 -0.7349308481445092 0.7283197734224129 -0.09417022841774214 -0.4455263880623912 -0.0615680589513643 0.24316281559192565 0.740115808639122 -0.3917698203588853 0.40302319934201525 0.10727721410148794 -0.40797934064978336 0.11799228109119042 0.9902239314927628 -0.02946437241010247 -0.18996552367167507 0.4375946020766275 0.24603027246248477 -0.041098864782425526 +174 173 0.942294077162932 0.30996139725207006 -0.48659666825037906 -0.17559303144415628 0.952836923564329 -0.8612874750241635 0.26096448690134433 0.8769425585854833 -0.7332179851993241 -0.735178461301778 0.6416473441676742 0.5013988104893989 0.42262158176006714 0.6237190852627608 -0.016790329265935044 -0.5146148964033437 0.6130358726584977 -0.8989595876681897 -0.9736699013949979 -0.06877670932782887 0.9851993397486367 0.4262465318150117 0.36988684891481594 0.8973609486608494 -0.16005529705405963 0.22409609998419944 0.8184663814066455 0.6133087262396806 0.7228603521004844 0.033109620006124274 0.4713618747164703 -0.3392121211976249 -0.20433514652741347 -0.24569426823609986 0.963267833905153 -0.22001930409309445 0.9936935310522437 0.8832837187367477 -0.8773399596817755 -0.547335802718804 -0.9270852180733387 -0.5431970402973176 0.0795298238450397 0.9431650454082254 0.5727952095301461 -0.14405577211429366 -0.29422323284442764 0.08827188841886269 -0.5598602732722031 -0.31838402134525245 -0.9787561350485816 -0.0931372906771788 0.3451364740989227 -0.3069716483009506 -0.9659032286865377 -0.1487407179699094 -0.5320281339759136 -0.6061913561204519 0.02892169547775514 -0.31700105754634866 0.05662237596884756 -0.5796976795885267 -0.6585670393423126 0.10401556071388462 0.7881399618513949 0.5631183248142244 0.31053820229565976 0.39782794590143933 0.3063408831319576 0.2364003780121322 -0.3173505657522311 0.4880280424111907 0.7256951658705446 -0.8065041207699164 0.009244119095746628 -0.5023054565150253 -0.9735685583003741 -0.15888487038054877 -0.44641004123758776 0.3011059282030204 -0.7021537731601379 0.5952554342904548 0.29453146023767407 -0.1461161805203779 0.3177251415691493 0.3949664992762736 -0.8012710306580688 0.33728896196524727 0.24950956512459443 -0.3466795667217386 0.6142180576441889 -0.19014226272691404 -0.7768474931983338 0.050015988679884105 -0.20000115573445076 -0.2768465680400165 +174 174 6.313129116777207 5.221468152077456 5.107092987279225 4.868063204788368 4.865921499980898 4.3721969139807495 4.071595425032182 3.920586085810555 5.699225610214891 5.018257456706168 4.411035488615779 3.3970627410173937 2.968112045665139 5.5231785077307824 4.599811893543787 5.111512895192595 4.240446714299281 3.1861479540550075 4.416103421594955 4.5261029263521 4.431754701302706 5.561595717815686 4.340970166484309 4.883322601864181 4.567870127558844 3.5849915583306817 4.411712472090021 5.833428580315845 3.1018035985185684 3.8160654115623727 3.4003149452166945 4.235051680034309 3.5906155224952983 3.696221348333119 5.732687639275492 4.414092594002625 4.59166908290811 4.69206193095611 5.429264568534159 5.0632757873454475 3.9778908837010523 4.496195603103687 4.821403835323401 5.460095894875933 4.7049575193801365 3.615399740647389 2.1834330565823588 3.7521555405121774 3.406851176594346 4.460536964022667 6.140021580428153 5.248397664484772 3.6286269739969033 4.68143109541776 4.442858976407624 4.295042147922926 3.984368933945311 5.20715766534385 5.95464269423781 2.4954284627115664 4.012016530532626 4.08325762556923 5.53784989535171 5.01101452598774 4.694922774969939 4.024476563781652 5.408070430776146 2.7011755728630225 4.345957386464913 3.5450132901851195 4.231989424008085 3.5018779136437397 3.2987645649120547 4.6279547635689635 4.754030964197449 5.187990814664149 4.400274143966252 4.9847138228488035 4.066681728180432 4.6310160278565995 3.4438344455752983 5.032721535420902 4.2324087773467 3.9044326140546453 4.753679685506803 4.638616637697922 4.199432596542373 3.9999021876766037 3.4436601300526526 3.8074966851931515 5.233229163990787 2.7564166373148513 5.103896580695628 3.9529856864125836 3.9105959822711878 3.0923403900580184 +174 175 -0.9694407991932521 -0.903195254955176 0.22063920672272497 -0.5431136890033157 -0.9471794371622515 -0.5516009264621644 -0.1829000733060011 0.24832807903488407 -0.49773582820452456 0.17669519062583428 0.6206075083021501 0.41487957724820634 0.2633213942213217 -0.68578279667345 0.9175884932039402 -0.8569456503154438 0.5110389267833639 0.48645345173250054 0.4564304046803951 0.14716222819444313 -0.04384596860968659 -0.7554780642288408 -0.38656980692793774 -0.7883073122716022 -0.9793846680201885 0.11889703813065466 0.13917174894712692 0.3672299454412402 0.21656742800714435 0.2685370766168247 -0.23269903971536499 -0.12633822545440165 0.15172162810323075 -0.602207470986682 0.3059966859117276 -0.2985206836454599 -0.28010272078910625 -0.35143925109145435 -0.35822742533502483 0.12531892384803278 -0.8260494321032636 -0.6569546749837245 -0.7529980276288792 -0.6823233524049699 -0.6682100682029657 0.23469987730071384 -0.22331647761209372 0.5938818245763016 -0.34815997394097176 0.1424831669415736 0.9487818102673968 0.6788370348835364 -0.36368690851794705 0.861387148340323 -0.31040972857614313 0.8874064852289074 0.49404811198376675 -0.12236378313068452 -0.5714301808519273 0.42070319651828947 -0.21975138407610584 0.20265296325695137 0.7101082585444993 -0.441435658724036 -0.3467306973982993 0.8208268562972598 -0.6146263532997829 -0.47607354211464026 0.1647040373659301 -0.20287324324844636 -0.8448620003621814 -0.6073890196928711 0.2774138104701893 -0.7182943377337039 0.3771168517199597 -0.9582532651022642 -0.1860091683484808 0.8501223005628917 -0.17207023928475573 -0.44402757259324166 -0.8983122104802601 -0.922186943841965 0.9244147620542296 0.5083173152548695 -0.4091119836485939 0.9970278797593155 -0.7573280171276375 -0.020963872106459336 0.01314704427221458 0.9011254374200637 0.3097762600128404 -0.6740976571038921 -0.7913622899517256 0.36795130956567035 -0.8938239969275321 -0.020614189285731443 +174 193 0.7236005714896023 -0.2701915596054254 -0.26131053239004465 -0.6239517316321457 -0.10218368233051356 0.15647011625469553 -0.4297211985977123 0.34136921655407915 -0.7035802753242628 -0.7797270401845047 0.03905343143106643 -0.00781285283197719 -0.16324125566143244 -0.3265058115217243 0.664931761496421 0.5548752279044307 -0.15567494608683874 0.4041241097986106 0.9415364834420581 -0.8688788078930065 0.8940819551982155 0.18716783641985768 -0.3181218549027567 0.5430837769312207 -0.9523480929950723 -0.8332048344480609 0.39603215741139564 -0.02602110226324794 0.9289145569400987 0.19045076156779883 -0.28901697591467324 -0.6360708157044266 0.2941740539651094 -0.5397323710276598 0.36305767934627764 0.5737201427466585 -0.45194416952713223 0.7209016888795279 -0.43917086252136706 0.986860214923851 0.09371793902810799 -0.5675140278868334 0.7321635515590812 -0.1755386215608028 -0.10841506484250973 -0.2462874278195717 0.4191914739076359 -0.2627556999696785 0.594036462729586 0.8973180905744669 0.21045967525943898 -0.875079079027288 -0.5558233707848159 -0.153782491139983 0.5534159481862624 0.27755253389173373 0.9984708233470585 0.9181387528159604 0.7874930226976151 -0.19688315265496614 -0.5338896900327701 0.7485951291291164 0.41547722427695644 -0.7587984634920995 -0.5621441331306591 -0.2778845479539336 -0.8657538695536349 -0.37660000286708417 -0.10925486044964261 -0.21219945639904836 0.1698843410171298 0.21735831932699856 0.6525824579757153 -0.8892319044837482 -0.045035768770929296 -0.37826117969448747 0.5250751522663228 -0.7119740597840936 0.24375550245389177 -0.5139500811053075 0.2604942293846306 0.7210182125134759 0.13537263530880073 0.870255253223057 -0.8024769869177721 -0.7700942143185474 -0.14150291517234148 0.6510378820561509 -0.7057057868447898 0.22251893361646147 -0.26219179784219193 0.09603388681244351 -0.550492100344701 -0.2840773995498087 -0.16808495866313766 -0.7423994128088711 +174 194 -0.024927513939757118 0.2018659154464717 0.34859939437391074 -0.6544002457930984 -0.2995067318660156 0.17109712989944592 -0.14688891290916417 -0.4183618545648218 0.5344814940560885 -0.8508274202716943 0.9542953484349685 -0.28470481246686674 0.03394053987956713 -0.9338253151039333 0.3873509399594044 0.715019103208266 -0.1715192379079069 -0.20899439320661584 0.642825999215697 -0.9598813586212618 -0.6374922161767891 0.7926724046635361 -0.6246704328586443 -0.45999188987200057 0.6846195442033278 0.9864016974539975 -0.47139253036834905 0.937514868998103 0.01862696406945563 0.6718408868067565 -0.12421024052327811 0.2470966714787377 -0.9038879796164343 0.2893072969393584 -0.8409009047389624 -0.8199389081055555 0.21535614695056582 0.32929781605993447 0.948773722159703 -0.7568001758998586 0.3358217507566479 0.11120975938968325 0.9732676018429962 -0.8867937671397192 0.9046247293015981 -0.5980830415524341 0.08563808108257875 -0.1488666326286543 0.4134069622749905 -0.5486921985314455 0.5910981654684009 0.8026846719146015 -0.13617228578336005 -0.613599877565671 0.4699702265725605 -0.9210641283753587 -0.7517804643762622 0.1967498972286632 -0.9912152810279926 0.33388790137446955 -0.6644733383439652 -0.4659953401137895 -0.7849519872486501 -0.16508130917443253 0.0372884321446858 0.6580496624410075 0.0385226598411228 -0.27499506312308153 -0.9791205436996693 0.6876309746771003 0.37481577436628033 -0.12460103211434381 0.24653022162768834 -0.12008031220117776 0.6976618613683108 -0.49633933670948416 -0.7432112197048142 0.8982238903486996 0.8835950932607186 -0.12736695538059406 0.14261273967020527 -0.03399399696235683 0.033968976879294566 0.003563067478048243 0.8560888918512193 0.787188225909949 -0.7283443923974953 0.8837792118234948 0.7023478239914129 0.07746581939479413 0.990431037441277 -0.8552551238465056 -0.7121776349617097 0.1874800328677655 -0.3294538548313408 -0.30151467702000145 +174 195 -0.9384773019536365 0.8382156679723951 -0.8645741735635784 -0.6291902159000984 0.7773577415804147 0.4012195580935429 0.7469770199980998 0.7475111207124407 0.12224033412899526 -0.48119949259947603 -0.011267412571039248 0.03513869613720422 0.9432421052249347 0.641302954554859 -0.04844640460687444 -0.11834124667783485 -0.3818053841323916 0.13976518544243577 -0.3525210973971209 0.9240139985753884 0.09559515491771586 0.8855397631992659 0.932266775486932 -0.5546540665069366 0.3624251374028853 -0.5031553179426298 0.8777102964395223 -0.5674824943224137 -0.05834420080221969 0.2953517851783254 -0.27446340906717515 0.28298911663312154 -0.2176343555371616 0.8080481400818618 0.39947400626055374 0.38631613512537544 0.7199018538255553 0.07679348973328826 0.7436824566827811 -0.9835708920167374 0.6790134995998516 0.5772023704070628 -0.9040436413346973 -0.5384989645267961 0.21232961041255272 0.17239164945077756 0.13053647636857502 -0.6497524693782644 -0.613203875275163 0.3751923972790099 0.6316103026018456 0.9451330709910901 -0.06918660546930422 -0.4706102773034402 -0.16618038089706477 -0.4302986867191183 -0.022709164014407257 -0.9927401745765543 -0.6344879352777593 -0.16944030061155835 0.6607844549754682 0.24558970242825962 -0.5282738176743866 0.8204246836170039 0.6652500894695357 -0.16260243797381313 -0.47240882698919706 -0.11503337909006284 -0.8750160687770994 0.8516115185752995 0.5915581344575449 0.4709071719533635 -0.022927543694778674 0.2906795172200449 0.8820844596626403 -0.659382644064864 0.13833314386578333 0.3010439822566604 0.058215993828284684 0.6090790124513243 -0.02161444761819964 0.7963832259318588 -0.42940403615623457 -0.5513293341102055 -0.2968117899644682 -0.36831210961310346 0.26827352084343525 -0.6189189652813343 -0.4798365079214475 -0.1176943134474826 -0.8301090484994997 -0.08178712241340258 0.45343546327643747 0.9526039552720489 -0.6570038129751321 -0.7566715682317651 +175 154 0.45157072704538725 -0.637127376970557 -0.013411639065081582 0.2943826997377057 0.8365950491553862 -0.38229672632100287 -0.3137399188364012 0.4500427238919491 -0.9567532185247583 -0.8392229259245989 -0.9745865801205562 -0.07236748522375924 -0.2544235875914509 -0.5628461237080677 -0.1714410910001951 0.43877951391596115 -0.5901794221162853 -0.9724183775484381 0.5967323413899368 -0.7816339201249389 0.15732969145082842 0.11536419152761601 -0.8225230146024336 0.5848011760372738 0.7760315143324203 -0.7570826887594233 0.16096937698192515 -0.15978406788653765 -0.7735851843725166 0.6270381586602536 0.1509839679404512 -0.5285497162078301 0.020185029609333327 0.011180130064693206 -0.7845386566962738 -0.5506908836098858 0.6122008970480608 0.39131205772520605 0.6337006249645294 0.06633909775632274 0.47321404147598267 0.8855375357388995 0.4055639776459734 -0.5769862621869954 -0.9639085827284346 -0.44976540532958564 0.10386791660734751 0.5955293265035426 0.46217266071171736 0.4380636297912168 0.953130940393156 -0.7191039351707524 -0.0019521825320916175 0.2610947387611311 0.4587900182461677 -0.8037693418239387 -0.23760333774127385 0.6136721513565191 -0.6189263835514376 -0.6748915795482178 -0.30004955303621816 -0.7364248504671058 0.33884537451031194 0.5852844743774261 0.5536010015077917 -0.2526894741510244 -0.32679247218649454 -0.8210251355451088 0.8798339464144131 0.6529385198537716 0.464184373566747 -0.4552323760507462 -0.07208546059525012 0.8959372363824964 0.48196158762593067 0.9267305866667859 0.08653605800267639 0.431179151950418 0.1622179670005135 0.32916660320521873 -0.7624300350907847 -0.9021108068451422 0.49574169157905046 0.9104136895245301 0.44255286947403305 0.8704134140703672 -0.16462592704912637 -0.08603338174052788 0.3637372354243791 -0.8018538550864858 -0.5913633313706859 0.5503727490406016 0.7139396572147529 -0.8284303194154574 0.29813882259289604 -0.6510732376395905 +175 155 -0.5987766123223235 0.9315876261860971 -0.4248119932666563 -0.13417128441088066 0.8267767627474791 -0.22528742517516398 -0.83626513257577 -0.6924311437516311 0.2800906545609667 -0.7767632738085999 0.507185419550984 0.9546966693462151 0.6161333312185251 0.3551858803794059 0.48308006245704593 0.8191206675623466 -0.921975761346087 -0.2747091362278491 0.3717724368515549 -0.9160806554474268 0.7811675255677388 0.8855149255943451 0.30181947583044577 -0.2411232621788486 0.7421396544215086 -0.8859228919420585 0.26786030474926426 -0.07914309429827737 -0.3913644173113291 0.3143969438841918 -0.004658261573867728 0.8744535605676045 -0.8983413085524132 -0.6840421641972843 0.3984682062797802 -0.0077631557141326635 0.538416237981201 0.014886598329079126 -0.1702655372041071 0.6414016455627898 -0.8123894237897575 0.2288145898654168 0.767848820846248 -0.4331199366359324 0.39496032494667865 -0.7271231265511622 0.02568598519182963 -0.86872695168363 -0.8418303505225526 0.9228988870701036 0.11515235795409473 0.31135881026051737 0.7697525658671596 -0.8340877965087554 -0.7501024342535858 0.7103299349351568 0.3356835082372902 0.9893001387977707 -0.7448336215469218 -0.25647421831130734 -0.629213356177488 0.38404593578281254 0.7299756335365253 -0.27718322412576124 0.4060359397207227 0.9863426967486164 0.44907358423079846 0.6970451987810429 -0.8108814410105167 -0.5613387913924457 0.047626656672843826 0.02354669640649454 0.8052909562260357 0.7942614762841036 0.7357292576439163 -0.0975149268549158 -0.623075795319864 0.6757068585415738 -0.10595192956873745 0.6103321467085672 0.42313258645635 -0.003788629663801446 -0.1357991906737006 0.5135378511647741 -0.02266492857237301 -0.31208219803065185 -0.17088624603106295 -0.006814295901916845 -0.3833145530046935 -0.8252827812915311 0.3286028349687313 -0.37146192653874444 0.5060507758621715 -0.18422744493258136 0.2847596894256428 0.34057401187888403 +175 156 0.2567332919859713 -0.07671656149892159 -0.0038656520260778038 0.7972257721102776 -0.5360523392315466 0.14367341764156483 0.40893319017200835 -0.1135410231872489 -0.13750317887629238 -0.5323512764048002 0.6576391578778094 -0.7807057947954201 0.8461971629830338 0.43336771086601455 -0.0038944650604519904 0.6599719909573742 -0.5495742069712568 0.2925659632886459 0.9840102149588543 0.44268261273671494 -0.2395847858911897 0.032606887529390116 -0.3538460431161339 -0.7400406414234464 -0.6191711611988591 -0.9611062149987035 -0.3163467312973278 0.4129195359765345 -0.4658898459893095 0.41715689352106167 0.9145468336944798 0.06929415914572767 -0.06047494279071186 0.029637482482616884 0.5745674997631502 0.17255915107698216 -0.21820157252607397 0.8195005613246813 0.9998234581693128 0.6311502137154972 -0.2164680979023783 -0.8403535945464693 0.24973223643922227 0.8842893677671269 -0.8679818333700586 0.3711651638862139 0.12143827512596772 -0.7358703803457012 -0.39795712942924766 0.819336105376105 -0.8208725598535334 0.05969555351006006 -0.9325409559076834 0.9968729097442834 -0.28617084070734244 0.7279141469661778 -0.6584619171816113 -0.31137881543153734 -0.927362858324589 0.7374705482995625 -0.4848545390030661 -0.697162280783624 -0.09332678791518556 0.44022853760126557 -0.6565328638173897 0.3081656136576665 0.22221278939440148 0.48749179110219565 0.805383048057192 -0.06588304517979116 0.17847723654706815 -0.8828151492349292 -0.4792478404064182 -0.3678581207968432 0.7170056948888068 0.04439961115087354 -0.9604000574490918 0.2778015045155091 0.691578179081896 -0.8458914352033733 0.3312072466229592 -0.8199531178196025 -0.3331687060987394 0.27345710131288903 -0.9603092552600685 -0.8627245458075423 0.19279824149032887 -0.49340392569063285 -0.4206003172457624 -0.4316340397941343 -0.12754676465916726 0.13275027358880953 -0.9590916468840351 0.2911322046817708 0.04758304160670357 0.06919482074096317 +175 174 -0.9694407991932521 -0.903195254955176 0.22063920672272497 -0.5431136890033157 -0.9471794371622515 -0.5516009264621644 -0.1829000733060011 0.24832807903488407 -0.49773582820452456 0.17669519062583428 0.6206075083021501 0.41487957724820634 0.2633213942213217 -0.68578279667345 0.9175884932039402 -0.8569456503154438 0.5110389267833639 0.48645345173250054 0.4564304046803951 0.14716222819444313 -0.04384596860968659 -0.7554780642288408 -0.38656980692793774 -0.7883073122716022 -0.9793846680201885 0.11889703813065466 0.13917174894712692 0.3672299454412402 0.21656742800714435 0.2685370766168247 -0.23269903971536499 -0.12633822545440165 0.15172162810323075 -0.602207470986682 0.3059966859117276 -0.2985206836454599 -0.28010272078910625 -0.35143925109145435 -0.35822742533502483 0.12531892384803278 -0.8260494321032636 -0.6569546749837245 -0.7529980276288792 -0.6823233524049699 -0.6682100682029657 0.23469987730071384 -0.22331647761209372 0.5938818245763016 -0.34815997394097176 0.1424831669415736 0.9487818102673968 0.6788370348835364 -0.36368690851794705 0.861387148340323 -0.31040972857614313 0.8874064852289074 0.49404811198376675 -0.12236378313068452 -0.5714301808519273 0.42070319651828947 -0.21975138407610584 0.20265296325695137 0.7101082585444993 -0.441435658724036 -0.3467306973982993 0.8208268562972598 -0.6146263532997829 -0.47607354211464026 0.1647040373659301 -0.20287324324844636 -0.8448620003621814 -0.6073890196928711 0.2774138104701893 -0.7182943377337039 0.3771168517199597 -0.9582532651022642 -0.1860091683484808 0.8501223005628917 -0.17207023928475573 -0.44402757259324166 -0.8983122104802601 -0.922186943841965 0.9244147620542296 0.5083173152548695 -0.4091119836485939 0.9970278797593155 -0.7573280171276375 -0.020963872106459336 0.01314704427221458 0.9011254374200637 0.3097762600128404 -0.6740976571038921 -0.7913622899517256 0.36795130956567035 -0.8938239969275321 -0.020614189285731443 +175 175 5.172933437829658 5.5661751049802675 2.989603181758512 3.8004877454964063 6.007215079697838 3.6311857625056314 3.3169489500268563 4.626814254291582 4.541382325197737 4.408081703872531 5.615604285155786 4.1913785851861665 4.51982578547326 4.918645597457994 3.7397488468859534 6.002941986769646 4.050751591361331 4.740324986884163 4.847434707270449 4.9025338720330645 3.470058549487953 3.7338528090461702 3.910743357225737 5.632433612957728 5.514087252996328 5.033868132331822 3.6051688114131233 3.6887449616061003 3.8015118900959592 3.4092854979349756 4.006194632182275 4.755308712987628 3.1668644988912664 2.5107228452958363 3.9319218792092414 3.4258040344287704 3.0585693171951363 4.7718746090433335 3.802244966132803 3.09764568962384 5.584417006629839 6.825799901220222 4.378344154144905 5.4172890683384445 6.697959020538104 3.99554199276982 2.837481282287166 4.959262058733324 5.392751433478915 5.15322551331432 4.923317172347861 3.693116363151128 5.276746559127613 5.444591703099703 3.8784073004675044 6.505582223290239 4.625102544725817 5.279700228195566 6.494642089608662 5.807820509932222 4.368003901883169 5.5267990416889266 4.46199572924399 5.276633398859713 4.374355708094944 5.0787307044150625 4.400914957289772 5.025329343486734 5.09549892878265 3.1409179396743747 4.471249482697747 4.6251467717015435 3.6128187722395673 5.759391137337122 5.151404053659091 3.3930691300825853 3.7727288815197255 5.051575740953431 3.9492140894824415 3.6899241275018717 4.508516041656178 5.99168695175372 3.9169153487698445 4.911171875799121 4.767551764171994 5.040213733951183 5.119980111882835 2.0815246763971453 4.527105857614735 5.365276368789036 3.1474469512441496 3.609111614469138 6.185783073367788 4.690946811070171 3.9887491206369656 3.268002774255194 +175 176 0.9394406265548505 0.6407103732994612 0.4186613046184673 -0.5612630003333041 0.30910408738028594 0.4811849699891657 -0.33769107840802093 -0.5170750982563348 0.352713667531076 0.4819892833188735 -0.31241511236153374 0.1971621499208016 0.42680632001834073 -0.8951245253388969 -0.2666068626840865 0.8854605198760706 -0.15912639898740832 -0.891688960566263 -0.12316011946842509 0.41640712379470957 0.21991016955233267 0.1941407899846459 0.019718919955121095 0.7115174075731339 -0.16431217034350953 -0.5302396794516349 -0.40884994891656934 -0.14298480640937417 0.08819906674380551 -0.6426632320135608 -0.23277451128138216 0.7019960992225067 -0.2476840932604154 0.5471472264758195 0.17969199381179002 -0.6857995482583243 0.19078900231582896 -0.9554504586773132 -0.20312264680076142 0.4815872285504901 0.5870936206559185 -0.8342646743800806 0.5870869465415045 -0.5375393093780481 0.7896539297574314 -0.9592182448406745 -0.931776158245015 0.6292338909317916 -0.34399765344299227 -0.7215927914989477 -0.3597063897253585 0.09986549084287244 0.5610804064512169 0.5205442947500776 -0.40746262574409475 -0.9832256315142252 0.8030668952346318 0.8029832357837954 0.7538367629709075 -0.9220466320339074 -0.00889312189992797 0.6925644211707171 0.5975366252924106 0.7001179232759118 0.015210825232001124 0.8469977253595888 -0.9516174976012488 0.6616336675385226 0.3847868526380742 -0.796728737698005 -0.7042280106811998 -0.7728363947817065 -0.9731137244890109 -0.7847397115509975 -0.8380894932866261 -0.49602055916856425 0.3613311252431506 0.9022145530462695 0.46371975331819004 -0.0747597379116316 0.38326204967414434 -0.716753414994264 0.3503706061501122 0.6142517727825536 -0.4730319776414671 -0.07776958695185265 -0.9011082595635023 -0.0015876253998510226 -0.20984590464983643 0.5381796127343736 0.6419890525534984 0.04294997355411767 -0.734455834315797 -0.4783433184120258 0.5562382514026352 0.07573542939911304 +175 194 -0.8880697061519387 -0.6543957289502853 -0.8465161616652881 0.8394381030496523 -0.935839314500958 0.0610565868263524 -0.03411031112063623 -0.7202978622716554 0.5393992879619545 -0.3360578414262534 -0.9882674392126105 -0.3530343158482536 0.08588300727257381 0.9826359271507465 -0.37526237159450115 -0.758297794895521 0.4626043788737979 -0.7880532055977569 0.6026844598241956 0.3055951491620075 -0.6958589218779156 0.764776394585091 0.3984343746230885 0.26550190998723 0.4111219611624337 -0.3177036337429773 0.11858159851250472 0.3968528165009466 -0.5861572864370903 0.2912639494108533 -0.9156745339060886 -0.9469289706101018 -0.7689676133441294 0.07527191999282401 0.9171781676868354 -0.7594028568223194 -0.7219602212079879 0.8629997709186112 0.1634339097496964 -0.2866272191723447 0.8010195192092371 -0.865700769014978 0.6441588167928001 0.4473809287203001 0.7390608147991131 -0.5800528509438825 -0.7096317210633838 0.8645170705445941 0.9978515418416365 0.5503042617916449 0.6574976830724728 -0.858415184962237 0.8257545009485663 0.0988766813582096 0.20093995454730473 0.8171703216758994 0.597564153225056 0.9232562871123129 0.5724094378009814 -0.9638331520198646 0.25228395219621813 0.3526571819763722 0.28495980073928573 0.567981489287589 -0.7617665078774691 -0.12043819033418268 -0.30380812955605685 -0.6124899375982178 0.07876789279854934 0.1475832448389789 -0.1603785726986473 0.6893215108580801 0.008750157674041192 0.9088263997114474 0.8116179352638482 0.10926185936060584 -0.7113767336655363 0.6205046673674508 -0.540023548734637 0.31155829323721496 -0.03653463882320729 -0.9899706900025511 -0.12237855588017599 -0.19142456719647205 -0.009830228080161874 -0.7639858663901531 0.6952823508599713 0.07669540332578428 0.8055190602969666 0.30674130762666496 0.3570268196705728 0.5908103351760794 -0.09260661127747372 -0.3245045777128768 -0.22696130261304148 -0.585887624751529 +175 195 0.19551389038336042 0.7137805893147431 -0.18461459851965567 -0.18717685538225326 0.43736763333014195 0.3629524615555868 0.06170514335303423 0.8169956031494241 0.6205828748115945 -0.04138101335458355 -0.4696906777798291 0.6305650976302077 0.8127392204128654 -0.18379326447777267 -0.873897588971704 -0.7832707242553156 0.7471624055309054 0.07102006592344501 0.8196825604802682 0.9838526569046098 0.5149856589374424 0.027006539403989338 -0.5529188398481502 0.8014454759608796 0.5835131107282914 0.48075129542373163 0.5740920871687527 0.5522724455936701 0.4544366637345556 -0.26045437148931105 0.000659205234875726 -0.9181446213462121 0.06169866593616491 -0.2794493354694154 0.07775755743487833 -0.03784814444121021 0.271114594610103 0.003019957046585642 -0.7262713485527958 -0.011050533433193621 -0.8599653311416009 -0.7055944144581523 -0.20671417898356714 -0.5733782219191259 -0.32815848407790527 -0.05131947855364061 0.10621484551693205 -0.08040059659004273 0.40380503475290097 -0.2844573946611646 0.3698017346886713 -0.29994991780324054 0.7072609800013474 0.6467145500480267 -0.3546372772894004 -0.13668702114321163 -0.29057408679222885 0.16541760959934426 0.7187595979261463 0.9453739829854728 -0.8185322816922391 0.7163142705138927 -0.8113871234777035 0.9814689459478618 -0.4549765991002612 -0.5683393796226857 0.5537035957605239 -0.2948742673519027 0.8290741004163014 -0.13301155048989388 -0.7996078919454752 -0.7493036824016159 0.6105293334957249 -0.6254263234698918 0.39911116649140577 -0.28080177093401004 0.33985331809458885 -0.4388976300040983 -0.911951389561096 0.224595474291706 0.2592759039493093 0.7222811240244151 -0.3463147112968916 -0.7907606024827853 0.5229246579920472 0.36778279965872396 0.7241956371837734 0.16466482723831377 -0.7357105754467195 -0.7923457266858058 -0.029475123879864062 -0.8182247570823424 -0.968470742403156 -0.8729004032577363 -0.5518446022899388 -0.6924499093834626 +175 196 -0.6695305029210565 0.19487706198695953 -0.0007589954090005957 0.05946338977344556 -0.9374229822145352 -0.43511503924778516 0.4536757283244828 -0.8148362424426892 -0.9458704231505368 0.40195381950771814 -0.8982930592797835 0.03471406732863547 0.6390500020147263 0.5216178171713348 -0.23924977608977427 0.06716030346094048 0.030155439726866407 0.22947060052469292 -0.23259977587904612 0.1971554110099043 -0.044528250802754465 0.5929894205566475 0.6764765546261262 -0.9331154629680742 0.35076906991973456 0.35233447022045494 -0.779447994924402 -0.6910547656087924 0.5527668417589842 0.449484003978742 0.9753920689546478 -0.018944171799065934 -0.5616915945101544 -0.11889019247816779 0.6702698114695258 0.8175267319435393 0.12855155020441345 0.48217913456845984 -0.3539324373810595 -0.10550413805812298 0.16081805134506588 0.9345874225956305 0.24602072417347576 -0.8843075706266212 0.9660816979841242 0.38279941807552786 0.45463477449517553 -0.23159077069029 0.6051549788522932 -0.5581168377305981 -0.4500779565465618 -0.6598270276135865 -0.8751290415375332 -0.5744054893126547 -0.5094215972020548 0.4555482524868424 -0.7304363543239887 0.45731132038969124 -0.8180407066512938 -0.815401408442328 -0.7944459637792409 0.7666749813976297 0.15626847797362076 0.9989981133014778 -0.7257715006688312 -0.8335615942589463 0.07244431962796516 0.5088134969652007 0.19722145183200412 0.5155138959748717 -0.4647674593670479 0.024410172515998196 0.2615588924153027 0.20673023447886463 -0.7385833761315628 0.26153287735241104 -0.03552035256787378 0.8547451190688173 0.5028207349505449 0.48737248959078916 0.6421490621480881 -0.229221380531744 0.7037554079827217 -0.8548449115201542 0.9750666530828094 0.45585948840678037 0.7676928734230799 -0.582809145914934 -0.8156787902119267 0.46811623828986937 -0.37779417664358594 0.38920459122809614 -0.9596517914336056 0.5071574844332867 0.8860222879304749 -0.5738321822753472 +176 155 -0.276564852501195 -0.3444327508735343 -0.9203656372083497 -0.5051006992650047 -0.46149534395211766 0.6937820708762164 0.987140306287609 -0.8244433888464475 -0.040672366892981815 -0.7466702743758227 -0.8780043399462765 -0.5141993700149496 0.23747081719917817 0.1726300027643013 0.2649304991578252 0.7924103903698574 -0.5795695278581074 -0.27377298381518944 0.786248572293734 -0.48992108351317687 0.5695418854613645 0.6688279529839769 0.671280858088984 -0.9318395269859236 -0.992073179012116 -0.3895597382406246 0.92829165488277 -0.2730167162131427 0.7508709113218304 0.4334927054900437 -0.30278516103947517 0.5234304562427534 0.3250678358886838 -0.4572810874324842 -0.4783188314067468 -0.4035735552335622 -0.14482729139407402 0.9573491710368005 -0.8406964064978846 0.895221083568372 -0.2760475797937374 -0.34308941730129305 0.3446181393655947 -0.6594321744755556 -0.8443134455323626 0.07853663327290739 -0.8498339849745626 0.24351071325086093 0.9895744372936026 -0.8544764769527391 0.5320174245041456 -0.7405317795436961 -0.5231887950452303 0.05242230753896027 -0.05992785436831394 -0.3048232707756775 -0.10260682142745559 -0.5745113106493585 -0.38091194117783944 -0.5032092260179559 0.775571862087193 -0.7314952893468638 0.01517970953060388 -0.8621454414705028 0.13856530674034184 0.785200347699011 0.7760591222206945 0.08658982704517504 -0.018694008342050594 -0.186938369450377 -0.8603532361446851 -0.6665770777160536 0.44453683155441537 0.15722196584578452 -0.9572606098723724 0.6793007895925116 -0.7672378232743504 0.6768349241923717 0.12345563392323111 -0.17039144006468687 0.8076108216139628 -0.1684882407402586 0.48193814257402634 0.7016849087841792 -0.08337474143301216 0.7468937213923343 0.266644999305631 0.2624157564414318 0.5437280557715543 0.12930766279799322 0.7599392679527153 0.702191720787976 0.7227986142537755 0.36731515072565757 0.6040314774747002 0.49543898822753074 +176 156 0.0036063195073587906 -0.3280553488675728 -0.2021258113863018 -0.4350443055203863 -0.4237709310408322 -0.5193923202638342 -0.2799449802977163 -0.6778965655583498 -0.5367520890897559 -0.45336374531316403 0.19250439896476967 0.9794118422145088 -0.3998648575022057 0.2653470436912868 -0.7002516736649897 -0.36413156590534035 -0.19232550480342314 0.4862867684818748 -0.04671157720025021 0.9913853750700032 0.1008493112446418 0.8702226974758669 0.9545694338146609 0.7827423831658376 0.7483145388442698 -0.8918682986621607 -0.20371075085944645 0.3047858404902022 0.1496002482483798 0.16451396509598126 0.9193653464002929 -0.9141887304657583 -0.8706413575197272 -0.9035726018437722 -0.4563917114505627 0.5897367207634541 0.8257934450712991 0.2272371630104557 0.37914340755958076 -0.12131160152519427 -0.46531769077942187 0.9817656063730225 -0.680195863116601 0.607607112632448 -0.3935033127238605 -0.35908467589697457 0.1393554323973003 -0.04410007534676064 -0.6915374793177365 0.8375178578131879 -0.16950008519419302 -0.7590434578965894 -0.04054338826016979 0.6350354308494406 -0.7840170276203595 0.5517370029297466 -0.12016976138749857 -0.4819580146965212 0.23716226070107704 -0.5001693877219906 0.7418191152184839 -0.3815163504723542 -0.4774660301347038 -0.20474246969191068 -0.28729652965833297 0.47069734069535896 -0.1999316706021621 0.16043322670897964 -0.61140573422208 0.2096400336664268 0.7731465897941663 -0.30715503198456195 0.05987426815755059 -0.5757432881753954 -0.9554715965251337 -0.9782070793529052 0.9907199093515864 0.28685283373558956 -0.17933591459842813 0.5120907239232291 -0.6841175710385046 -0.6142314122518586 0.08822446653437521 0.26311237202169013 0.8161591141215163 0.3446436054237423 -0.04613621942839763 0.8876998239906495 -0.08641269745496682 -0.45263281677093103 -0.5252035621369995 -0.30020197370592316 -0.487466400103165 0.09395391046309065 -0.40529950045229146 -0.7512711284908993 +176 157 0.6414166796736147 0.8741620984079768 -0.3430644535163716 0.9087983196713423 0.059848501887961536 -0.5973634409346777 0.5196650520698367 0.16197763431936374 -0.4928799055813058 -0.9771346432313612 0.45399358455282357 -0.889883893063161 -0.673034829007668 0.28584621738067284 0.56418098721232 -0.12120651918499559 -0.437111689942961 0.32114239581016957 0.46451270074857653 0.6002955466072526 0.40320064035559944 -0.5393849777883712 -0.9923991853898735 0.9805884823454085 0.7750523352138783 -0.08828031452517093 -0.9314066776569851 0.49908507124174806 -0.9424950637345748 0.30711159838234736 -0.8886497731942009 -0.12750683611080826 -0.5634144996650834 -0.12914096740128822 -0.25382382148799354 -0.5714090057555601 0.5080214673446721 0.3444220712286812 -0.5250036842729131 -0.9296112385935398 -0.08638044273185996 0.6198759686673643 -0.11318267635601442 0.1367649382776681 -0.6354059805494092 -0.060583735813394934 -0.27974203583716095 -0.532164330922924 0.756475270496018 0.5125462938768877 0.3984582048295038 0.28118648341136354 0.41961925170184644 0.5463156414333099 -0.7793519448797528 0.23792344995034886 -0.9375701966533594 0.052592585754494214 0.5989056318246719 -0.07599020179508975 0.8292335120829297 0.4712537236793446 -0.44193757142446266 0.6061727314929324 0.1592177300134654 -0.16573112215316033 -0.7881376244642644 0.8210819858480944 0.7689310891367367 -0.9540213004336833 0.46405684061182306 -0.024112122876176922 0.6355636768294559 0.31884919037354553 0.3212661023245289 -0.09033305250614787 -0.2756063261547612 0.9221171453757462 0.21243499413224787 0.5122275521489923 0.3182787762581947 -0.36907407920988833 0.773618843659458 -0.017974717279900077 -0.5447389872402437 -0.6179182263371115 0.42619812466835816 0.44683851877908043 -0.5186863200930361 -0.6901910711401544 -0.5322803538422103 -0.5365096561229652 -0.2968068389253602 -0.405309063650364 -0.44830621728003583 -0.9227701183512675 +176 175 0.9394406265548505 0.6407103732994612 0.4186613046184673 -0.5612630003333041 0.30910408738028594 0.4811849699891657 -0.33769107840802093 -0.5170750982563348 0.352713667531076 0.4819892833188735 -0.31241511236153374 0.1971621499208016 0.42680632001834073 -0.8951245253388969 -0.2666068626840865 0.8854605198760706 -0.15912639898740832 -0.891688960566263 -0.12316011946842509 0.41640712379470957 0.21991016955233267 0.1941407899846459 0.019718919955121095 0.7115174075731339 -0.16431217034350953 -0.5302396794516349 -0.40884994891656934 -0.14298480640937417 0.08819906674380551 -0.6426632320135608 -0.23277451128138216 0.7019960992225067 -0.2476840932604154 0.5471472264758195 0.17969199381179002 -0.6857995482583243 0.19078900231582896 -0.9554504586773132 -0.20312264680076142 0.4815872285504901 0.5870936206559185 -0.8342646743800806 0.5870869465415045 -0.5375393093780481 0.7896539297574314 -0.9592182448406745 -0.931776158245015 0.6292338909317916 -0.34399765344299227 -0.7215927914989477 -0.3597063897253585 0.09986549084287244 0.5610804064512169 0.5205442947500776 -0.40746262574409475 -0.9832256315142252 0.8030668952346318 0.8029832357837954 0.7538367629709075 -0.9220466320339074 -0.00889312189992797 0.6925644211707171 0.5975366252924106 0.7001179232759118 0.015210825232001124 0.8469977253595888 -0.9516174976012488 0.6616336675385226 0.3847868526380742 -0.796728737698005 -0.7042280106811998 -0.7728363947817065 -0.9731137244890109 -0.7847397115509975 -0.8380894932866261 -0.49602055916856425 0.3613311252431506 0.9022145530462695 0.46371975331819004 -0.0747597379116316 0.38326204967414434 -0.716753414994264 0.3503706061501122 0.6142517727825536 -0.4730319776414671 -0.07776958695185265 -0.9011082595635023 -0.0015876253998510226 -0.20984590464983643 0.5381796127343736 0.6419890525534984 0.04294997355411767 -0.734455834315797 -0.4783433184120258 0.5562382514026352 0.07573542939911304 +176 176 3.894523892498743 3.2516532420973854 3.2129143097225716 5.971201492168852 4.302880507076808 5.1418137729966436 4.115114005605736 4.200580365524666 3.3710654628169223 4.904383379320807 5.338707654694126 5.341786700745275 4.171028828556926 5.248984966749033 3.445279401910202 4.246986311351149 3.854731793799957 5.137541769323715 4.16507973349241 4.565993602904678 3.882602246647341 4.156397278140312 5.527425401702126 5.953464141152442 4.190862232357684 5.724319175624155 4.94176893592909 3.335171177025714 3.949555641658689 4.438640662544486 5.381438250904413 4.891466614484144 4.842547593172118 5.98622009844037 3.7700630851300327 4.991859361153765 4.33299635346485 3.795804822292695 5.062112880401374 5.262756119743457 3.6560233571069407 4.358510624006163 4.111138060843339 3.8331988378520143 4.4989337136855525 4.375755181282528 4.681337101357947 3.9463823100366193 4.218513966226573 5.717805666224857 3.7893186803688974 4.114039529996004 4.614085262723169 3.3239756982359383 4.554884153299335 4.805672140227593 4.422889551289741 3.99323404194696 4.52251613853848 4.281681089617988 5.417350170668095 5.949414314181633 3.586250951173583 5.326686791341829 2.4823589372042316 4.211108797831411 5.33398784754941 3.8998719896437644 4.29119404442188 4.711886357404246 7.1361036010314365 5.150945422163433 4.339072170225236 4.592441757898271 5.221493773786963 3.4169103637778937 5.048168457228926 5.489214208853506 2.8298894417529272 4.654765536511247 5.181833573315727 4.890885060263644 3.479738098630011 3.4083820338193576 3.062612264022187 3.7623700578490964 4.321095782852517 4.324394003506386 2.7866523248949466 5.096894148989075 4.615979843594092 4.660573484606214 4.745728666312887 4.187283607774919 4.390528172959566 4.618854539622903 +176 177 0.6075920101896963 -0.27406169435628835 0.19583006709264783 0.9631125480293279 0.7900127793534519 -0.729001801304958 0.7625741900123981 -0.15054186873585307 0.6636430180465833 -0.21024168086668404 -0.5654439142669083 -0.8103187769822722 -0.405769741037006 0.9723161547105128 -0.4377494583772623 -0.09721633164192744 -0.6117223884866179 -0.906848935335284 0.8013732364860717 0.123078556713893 0.25083560126963933 0.3295055110952898 -0.7739254661771364 -0.6269027376733263 0.0617252068451446 -0.9658245990803431 0.2953789067062089 0.8857305763857257 0.6597925921555114 -0.38850081581679796 -0.45113391610437303 -0.830230243367347 -0.3204595287850278 0.5607687465984585 0.38997008280245105 0.7429506370158525 0.9345206860094146 0.033931778328395445 0.9798374894914952 0.6464906543803393 0.1420394962662621 0.9424078939958938 -0.6066371788547074 0.305753637168918 -0.16428348903666 -0.23251790123240457 -0.16085074599914662 -0.6089231002320576 -0.07777384390449416 -0.5782587638113748 0.52653184334206 0.8705295358330152 -0.2973330683744937 -0.7444910128543671 0.941960007397336 -0.7057829047926181 -0.8607818968094931 0.46964790035071413 -0.5902875990813841 -0.2775615902318844 0.5070490993763332 -0.5496806017368805 0.3943747519212326 0.28458511993930635 -0.5390591025664462 0.4628633108627749 0.8425060526985504 -0.7675868985319165 -0.7383400481205877 0.7088342755409405 -0.5202559136584735 0.45227572918848913 -0.38028486361334823 -0.7821925746216976 0.026643386738691932 -0.2389430779778745 0.07273672233021022 0.7086362458542579 0.038416299233011264 -0.19352639801515936 0.6586308959098954 -0.5975678339855213 0.14302326755363604 -0.38853097207040777 0.17457834065648647 0.6530762280247013 -0.6909032393893326 0.8616800259186772 -0.7796045192668468 0.9651768010849382 -0.5666781889399573 0.7490216045996856 0.8575225102895687 -0.29834185082237163 0.3451014619785926 0.7266824179991471 +176 195 0.3993234278229527 0.028939108356483167 -0.6609678741410423 0.7117954424006343 -0.613499180370237 -0.8219398738729677 0.5376778981653161 -0.3887885243493576 0.5028331966579729 -0.7593490906960609 -0.547275639834883 0.6832447746153021 0.9211798346848306 -0.941497780438898 -0.14098624586192132 0.7427807833476081 0.47324033718368175 -0.7317703299240426 0.7739518127344698 0.6535213563263262 0.8730252099844453 0.4936148006269925 0.41301179565540047 -0.4232813428647342 0.6089922178967115 0.7403039605044881 -0.46566333527939485 -0.3242391014562318 -0.012906173881497285 -0.0954889527359919 -0.8284294260074117 -0.46990209259831706 0.21067653239715223 -0.9539034932828312 0.6240088567296049 -0.16117608259296823 0.2637246412110026 0.1153003331856044 -0.2280682590445915 -0.046165612177991866 0.711371255121561 -0.10659590721506351 0.7665993662861059 0.4066074387225085 -0.44235009017486493 -0.37136796009886175 -0.5307043817760404 0.21852611554311663 -0.2442674456433318 0.5680483546304915 0.16704608616690764 -0.6552941223960096 0.9221354029518027 0.07198089547252962 0.9883104033323697 -0.5716387451507132 -0.23590431475968066 -0.7691949341332984 0.7335034374069656 -0.2641057870030816 0.87968694615478 -0.9466794119947928 0.11027201865815894 -0.8425484219738955 0.025605585316981427 -0.2569670162290192 0.006186795652860955 0.3574704444361765 -0.21730862976230436 0.5264182107147817 -0.982312334113145 -0.5534618817902379 0.26367817011474237 -0.2692327688715379 0.8921893569856871 0.32429024062038625 0.36437712253268106 -0.6974151664222603 -0.7214393981414691 0.9104484639692207 0.8286451965700867 -0.3059970196438435 0.08666224283886326 -0.5096117947042127 0.4566122868968452 0.09555108944779422 -0.7414720251529152 0.4461468272374096 -0.1417863579282972 0.24323194121983027 -0.44795837399990623 -0.8422103072720062 0.2161403598818481 0.8359339231095568 0.5074364829374416 0.5173300905535885 +176 196 -0.09107571467485487 0.056661125791961586 -0.013038143483691256 0.7343011992880009 0.8525835542225979 -0.12525215866183248 0.02337708207780964 -0.8435575871043846 -0.13550401990792094 0.11454750832590244 0.902722227836342 -0.9623049464300673 0.04292000306624244 0.739565887515224 0.15098917140474244 -0.2680364066922323 0.6234430282384569 0.22775884022257076 -0.5091281638344203 0.41887131546653844 -0.9386938341085054 -0.4376100371753122 -0.9478063099597132 -0.30378092627264985 0.45355664867177414 -0.9059308196567766 -0.9179672284405289 0.15395038964482066 0.9335762545303943 0.9512132838077672 -0.7901926783011952 -0.8354949342052036 0.8253483581017687 0.9982517243541356 0.14066333448264134 -0.94436504574244 -0.5103255271043947 -0.045771448304216866 0.4309127231183614 0.2075883982588007 0.2943954128413526 -0.27352073946299194 0.2222102761832765 -0.06395746557656268 -0.24325999220748917 -0.7051783780440264 -0.3925649472952566 0.7702159628568692 0.25673295020960896 0.6921212100154475 0.2066868610602357 0.11843462866631094 -0.5560908167514287 -0.2249441299736965 -0.4564531884519496 -0.5538058216542614 0.35863663750349595 0.4228946223035539 -0.468260842139274 -0.596806878998239 0.4071363846884639 0.9983353388357816 0.7014893450350679 -0.5328509113272808 -0.9803523044139633 -0.12429198161491861 -0.7363059930667835 -0.5151022550442605 0.8725067980666883 0.027719269132658875 0.8547791033241241 0.9682436501106877 0.15836830104979938 0.8431414737028933 -0.3898143509505807 -0.3198348924838914 0.910037427713617 -0.06236247649677207 0.44912646175852156 -0.9066769217014794 0.7772793988340592 0.8376916129225769 0.6569304929055917 -0.47510186108090435 0.18203040645982638 -0.12000304472902412 -0.8363376411542227 -0.1730032000930326 0.31883221824419405 -0.5293037290878193 0.1097112302673946 -0.14104846008478944 -0.6980660508617356 0.13658492296594948 -0.11026193837851705 -0.44184605087819184 +176 197 0.08878725957830591 -0.31721407002462376 0.3892285462038949 -0.23092555474181164 -0.14642829507101052 0.6117573349518719 -0.11871340336003189 -0.5338836040651822 0.5065479574039049 0.7067209310172737 -0.5544989783914729 0.20336211361373402 -0.5641894530544707 -0.9685293767111487 -0.04198055006430379 0.628935929148283 -0.4910689594658373 0.7495297408559831 0.2173620560915417 0.763306000221317 0.24974047059095672 -0.35826901463890626 -0.08072950325352313 0.8737742017510801 0.34571148635191595 0.9227811708536069 0.2984200387942233 0.6625484126117731 0.3296244367297465 0.5023700128650006 0.047632644291849324 -0.10545118367952067 -0.9526682432833811 -0.7602304451959658 0.2578465992404806 0.690507374770915 -0.2960551744624993 -0.8895779315148957 0.7602574861015932 0.9913598224078681 0.7181904875219278 -0.12782347103497238 0.45953128574557045 -0.6127081058400434 0.46775728878636746 -0.9783436120544837 0.43038231307038566 -0.158698286487317 0.6541513367507166 0.8684106508311003 0.8253397194576695 -0.5788623997681788 0.8695966607484249 -0.42966560634303064 0.0544055681432174 0.5791891313948776 -0.014959709175633273 0.39982742269467897 -0.0330744407167789 -0.920870281503062 0.832712279356475 -0.39472693116181734 -0.7101561592144046 0.5962638496345818 0.28582333140643845 0.740929863767489 -0.8799172163190063 -0.07239731168093289 0.5205963597073706 -0.7676317690394341 0.982567980990676 -0.6990116039672714 -0.5907911204779142 0.8213588937453413 -0.803454828183346 0.17087380856619472 0.9886693009149907 -0.4221646564064565 0.17232479797521894 -0.40331558454644467 -0.13172890436622153 -0.3541585547447825 -0.8789948636914475 -0.044452572187122064 0.20750172085180418 0.38518194513375903 0.3650083392218486 -0.9549284319375835 -0.05517234129795612 0.8378209398214616 -0.937515896493774 -0.627850299893081 0.17677111294340864 -0.7194936629178821 -0.7887745546642762 -0.3489753227949963 +177 156 -0.3375144475823759 0.15856829215396595 -0.211636945790034 0.9031129091798418 0.37367752718166747 0.14289639703218926 -0.5894309665560853 0.8206945668397045 -0.4987742836484952 -0.6373509506175183 0.18482724831031394 0.4026947493521218 -0.8282932934395357 -0.3946402127057975 0.8107861340830662 -0.9053873287041554 -0.3311552530344848 0.23252997177907098 0.9682811798722115 0.2722159709512806 0.3642731267499011 0.14756083310593993 0.9908351154142077 0.5276769346683896 -0.18512645796549987 -0.7572770413613699 -0.40885740267321125 -0.9588342904728522 0.58555542850138 -0.2930024954627872 0.35932837376738447 0.1773934747749608 -0.9535749107074842 -0.39682567258970836 -0.5372295649845296 -0.4975270561110079 -0.0803924433957115 -0.3982307207842737 -0.5563182231653603 -0.6154295465120052 -0.8190616256629306 0.10549420493104056 0.33087548737849226 -0.9502215520428832 0.5996868097037666 0.7400461808070811 -0.5393030078095811 0.516977730658136 0.4363559351236832 0.9906110645495472 -0.8590879438716259 -0.8636195500006887 -0.5864358868467416 -0.8186814844346124 -0.6228593189204061 0.69946507687108 0.7544915775462167 0.7067022042336049 0.14228282417434013 -0.793037538211607 -0.20575037693416665 0.2943651814121768 0.125526275701193 -0.43660739193949816 0.46846612929099174 -0.837680996549347 -0.4838454394927767 0.7556397907096961 -0.08280684603968602 0.748567488593844 0.59249902883399 -0.13603500633158916 -0.47585103640624626 0.5967320679834189 0.24322234429421208 -0.06664890491720943 -0.09395255296991811 -0.8227228927449413 0.7837699304155725 0.4792098939499563 0.7166705373886857 0.15879663646115416 -0.7076771102420241 -0.8176221332884122 0.7553288874580439 0.45195823510975397 0.664564581124057 -0.5000924976627887 -0.21546234973700562 0.04531965224672052 -0.7355239402202496 0.8660830217205577 0.21565196164919187 0.5999371146705597 -0.37604565207167506 -0.4207504780345077 +177 157 0.816427764405991 0.09522024901562443 -0.1894373022520166 0.9679310746698926 0.6615812721375813 -0.1862858449692646 0.6768786677396776 -0.629961610790053 -0.7581233844511077 -0.35507519066830895 0.10907411207123574 -0.7291169483993409 -0.45738137422062186 -0.48314628765494616 -0.6798970605940786 0.0748660712687903 0.15801370350453015 -0.9718478245513349 -0.11062164978444011 -0.47417484635541074 0.3038477106178634 -0.9227354283989799 -0.7565062078990572 0.5799474491703751 0.26481919215340155 0.7269005694569177 0.8408599551097591 -0.8121586743103504 -0.6024922048087944 0.0006325680065977224 0.4864728679069972 -0.7225115293392486 -0.6720397423451829 0.8455504347070808 -0.82618706993137 -0.7036884643618568 0.8854411725693332 -0.9699457601248918 0.09144335081038957 0.905922861966318 0.4853593572253807 0.7390403016499167 -0.24027982472225173 0.9168536091636561 -0.9154072945942304 -0.08944976827094964 0.5797682227313776 -0.9605509376353465 0.26960401480807583 0.9897544503706963 0.03550845101776012 -0.5335052508208571 0.9786775005354018 -0.7251693712321279 0.17978778744201152 0.7250679058205618 0.3865184745657557 0.7065059408308421 -0.030037396357197377 0.860048632978196 0.7217804055700086 -0.5970460355984599 0.3843446577178815 0.6856255507500388 -0.2279797995755748 -0.7032787233594502 -0.4160883066662906 -0.15410888450402838 0.45698007075488967 -0.09605467216743935 -0.05235456743044353 0.9295158711964069 0.8773477838256658 -0.22839895952466827 0.9923457087823107 0.70886818865404 0.7787951610945774 -0.967871074662791 0.843776029299222 0.21800386109204029 -0.7218315209777213 -0.9863917279511014 -0.8393933257791708 -0.8100159141618317 -0.8112486676880577 0.5947935279845782 0.3102951865323662 -0.7005860727491677 -0.028770472578614426 -0.2693414158556606 0.38629165242364616 0.8836130829406306 0.5533843090192545 -0.9391233631294538 -0.1795478900233316 -0.9817677615808835 +177 158 0.4278990950368 0.9297456577295296 -0.1928555007554904 -0.5208713836862946 -0.48972016395451945 0.3482983554873318 0.7007189314482343 -0.29362140943457526 -0.7198647981134485 0.13670477408984327 -0.7377881556830534 0.14263801090776163 -0.11267019932133104 0.7096843409624869 0.9665814650720435 0.1778152538698048 -0.22740589042224468 0.8553950053455412 -0.2035866487511524 0.7997564131576849 0.5863011543852414 -0.40588369966607596 -0.13445549473192764 0.2030777477378909 0.3524337850684631 -0.6323170176901121 -0.8021490073660791 -0.6888180790081804 -0.9515514369717322 -0.468917516637263 -0.3296990426934121 -0.439128492815541 0.6760969649971014 -0.29371910479055363 -0.4474808126558667 0.5943414563461518 -0.25837297720120067 0.8955869689465814 0.21332715078680708 0.6171101367662115 0.621203974774919 0.7129197265944807 0.018006088693228506 -0.22249227283047346 -0.3871450200389386 0.8167574835732774 0.46132708535415046 -0.3063046073161688 -0.24003066503438175 0.17021395106557446 -0.026784980753044918 0.6758800441783466 -0.23852263637475568 -0.5828807243922236 0.33672977283778316 -0.7181834450520255 0.9824086720102057 -0.25997268370516724 0.3438129461058519 0.47776341746047124 0.487972892194509 0.05930921312403492 -0.6733794672002165 0.9357278048161386 -0.976755998420832 0.7693657265519209 -0.5289807138661096 0.5459989299858572 -0.0971908308055589 0.17511049115532895 0.3981532291478307 -0.6603042871755993 -0.31955102883656394 0.503361556175975 0.1527134368204992 0.4359522979776127 -0.23501073358470004 0.48215390989776963 0.29622202942486164 -0.6261483848896763 -0.18525996419232538 -0.6252775025496635 -0.9779052099602588 0.6899255000585816 -0.5096041617245026 0.16731603730286815 0.3634878279780882 -0.8568517774820141 0.3426813600227807 -0.713705709062558 0.08222772112803067 0.9381342247992026 -0.025090067605481936 0.8325487518782337 -0.16292889165993096 0.28270031951841434 +177 176 0.6075920101896963 -0.27406169435628835 0.19583006709264783 0.9631125480293279 0.7900127793534519 -0.729001801304958 0.7625741900123981 -0.15054186873585307 0.6636430180465833 -0.21024168086668404 -0.5654439142669083 -0.8103187769822722 -0.405769741037006 0.9723161547105128 -0.4377494583772623 -0.09721633164192744 -0.6117223884866179 -0.906848935335284 0.8013732364860717 0.123078556713893 0.25083560126963933 0.3295055110952898 -0.7739254661771364 -0.6269027376733263 0.0617252068451446 -0.9658245990803431 0.2953789067062089 0.8857305763857257 0.6597925921555114 -0.38850081581679796 -0.45113391610437303 -0.830230243367347 -0.3204595287850278 0.5607687465984585 0.38997008280245105 0.7429506370158525 0.9345206860094146 0.033931778328395445 0.9798374894914952 0.6464906543803393 0.1420394962662621 0.9424078939958938 -0.6066371788547074 0.305753637168918 -0.16428348903666 -0.23251790123240457 -0.16085074599914662 -0.6089231002320576 -0.07777384390449416 -0.5782587638113748 0.52653184334206 0.8705295358330152 -0.2973330683744937 -0.7444910128543671 0.941960007397336 -0.7057829047926181 -0.8607818968094931 0.46964790035071413 -0.5902875990813841 -0.2775615902318844 0.5070490993763332 -0.5496806017368805 0.3943747519212326 0.28458511993930635 -0.5390591025664462 0.4628633108627749 0.8425060526985504 -0.7675868985319165 -0.7383400481205877 0.7088342755409405 -0.5202559136584735 0.45227572918848913 -0.38028486361334823 -0.7821925746216976 0.026643386738691932 -0.2389430779778745 0.07273672233021022 0.7086362458542579 0.038416299233011264 -0.19352639801515936 0.6586308959098954 -0.5975678339855213 0.14302326755363604 -0.38853097207040777 0.17457834065648647 0.6530762280247013 -0.6909032393893326 0.8616800259186772 -0.7796045192668468 0.9651768010849382 -0.5666781889399573 0.7490216045996856 0.8575225102895687 -0.29834185082237163 0.3451014619785926 0.7266824179991471 +177 177 4.236003527174406 4.952118364406155 4.486331120184131 5.291691225335363 5.045717877897843 3.6735021532829544 5.359013509737047 3.572755932152069 5.877814919491875 4.287650872966696 3.340627087644207 3.5711764058997453 4.616562473765116 5.101951371081793 4.9265301048854155 2.5764964941971504 3.060257999927642 6.396974803472056 4.489560279759466 4.71316554575022 4.959861102150002 4.1691522783499115 5.689962605388812 4.532627624207111 3.2024226006364334 5.715779745432505 4.973929169421595 6.472513549216728 5.142353392121981 2.392541049461199 4.435486018665504 4.214984644426194 6.114875096038001 5.473409194842048 5.812582217908093 5.081660066725156 4.010506529195258 3.639807214465141 3.319504221822477 5.448636871699611 4.923902887746229 4.972580546050096 4.554821623649586 6.624741749943753 4.392720664233963 4.605349654322868 4.889604346820179 4.890807441939015 3.5819263721310044 6.165563308338294 3.4807693253619805 5.758036345635395 4.766426856106081 5.428982195121482 3.9329096883291608 4.768500370271521 5.17513682718255 4.995406827660011 3.628784647800037 5.382506953222446 4.7228748537125895 5.005246530526913 2.8791214288487303 5.375549380307289 4.207502827426529 4.978781644931267 5.672000859852993 4.190178055811433 3.2474915675641354 4.79801103149462 3.088265043773026 4.368665480463428 3.5891805582728957 4.145491524026083 3.593075247100388 2.923604590666036 4.530534061493016 4.884204991276367 4.407995855820813 3.7671142542912195 4.53993042805354 4.606641580381371 4.4338103410635785 5.932989554493817 4.818040036126154 3.6931045593236647 4.43563067063501 5.019289032211002 4.098143651408113 4.261086207170916 4.163290173616186 7.202163953193817 3.4858645873594973 4.7745843580036125 4.258880365645018 3.6688919440009515 +177 178 -0.4336016241866745 -0.965387363401617 0.8463141178215126 0.3928273757151024 0.8675757162449604 -0.3692736539250512 0.33473550427675547 0.09444963668609452 -0.6015956567313208 -0.46790928014784394 0.5153823253293055 0.024149948549529787 0.7733330921368713 0.9557152914269968 0.429813212116418 0.23454109950004742 0.4068297549541202 0.8415502164750968 0.4018454293943059 0.924315792368368 -0.87323444082982 0.41070374133881904 -0.6732665352987468 0.8792251192371514 -0.5753510153735724 -0.42840087764487866 0.956155520841929 0.13759199069420713 0.62815592605665 -0.056072072252469685 -0.6105481560333412 -0.8017057253061892 -0.9256631492629332 0.49961151735243337 0.9148445237394824 0.3031494032044737 -0.15793644307042554 -0.3342315101185691 -0.14560642213087194 0.7736817432495935 -0.871361808840613 -0.45888276663572825 -0.6692441211455209 0.9309929099057996 0.175183866743869 -0.44728028151603505 -0.5485305946434191 -0.30794647439342593 0.7966809794122376 -0.6641823658682233 -0.19804649573663013 0.8236943668022119 0.9568013145429637 -0.8024716256562232 -0.44645364225168316 -0.5670727273897713 0.4474860407914587 0.31591152433224656 -0.32683297830080793 -0.2994125579230511 0.611655725758238 0.08918766766365294 0.28373927548595756 0.7876773518829194 0.4360007481774655 0.5631459461495663 -0.6900795212041233 -0.30673521697191775 -0.8963209871978255 -0.2095760026422706 0.03976447428031826 -0.5722299794175731 0.33188483091739496 -0.26279733183935017 0.3488937451826102 -0.3210376531778809 -0.7703823379681054 0.0038786688460901164 -0.9030054576913888 0.2637557010827023 0.1730119747034855 -0.583480778988656 0.004351842451985499 0.953638796341381 -0.2857841647812589 0.8181844314155928 -0.485675536569546 0.7979945853915684 0.7777161930405871 -0.11701940538360756 -0.025499845543361932 -0.7607099481236173 -0.5933703910827008 0.20543288976188223 0.894872419780703 0.22892791899249976 +177 196 -0.9030726841215395 0.4129558796708197 -0.9409157254451148 0.5284351948457251 -0.32430730801584007 -0.45506334089688627 -0.5881015464610788 0.295269957402025 0.543654034127667 0.6948583209680546 0.4517700734698582 -0.1142668169326968 -0.0015230741920575497 0.09151644265507186 0.7735340370016393 0.6113822971867833 0.06627713383052547 0.6821813632856646 -0.2815379646526983 0.6009943087224519 0.7692724072433605 -0.9570259152075888 0.16944612432129613 0.37452241438181333 -0.1920656238199272 -0.9430899235199601 0.6513988710422245 0.48455176921015974 -0.8593614360280635 -0.10380078044601482 -0.350355444046889 0.14022949646875382 0.8036233653213987 0.15560530855584487 0.30967361768009694 0.4957090632722865 -0.23214785785143643 0.14449066375691277 -0.13617301614099575 0.6636107382420535 -0.3080395235292628 0.3037435662702521 -0.7366232075621908 -0.8307037858215236 0.290063253136031 0.43328844062910554 0.5935398764822373 -0.7800309795806515 -0.42230997166010376 0.37276090773964143 0.8065173206337468 -0.8482285683631621 0.45859400908728376 0.4293703830169384 0.025983467865603682 -0.19903375017682423 0.9960891221376804 -0.9684844077673238 -0.6044150590526953 -0.11484310209195159 -0.4015071595336228 -0.9020420262241802 0.141169610825705 0.33082911010764593 -0.4558345833053161 0.37066066470276793 -0.943240670555699 -0.4594047810510584 0.19434423424200697 -0.921976938199849 0.8932763792717118 -0.37165641283370854 -0.42945597539414315 0.19837934332720364 -0.5476548848204059 -0.8071117192480048 0.596128311616775 -0.9414628459345877 0.2697108715453691 -0.06404880984680905 0.3551741924543934 -0.32473843082217524 -0.09954649703000662 -0.2930785196126424 -0.03921379471607778 -0.11494818430073539 0.03721037677964967 -0.6141806311851679 0.7684722514351514 -0.9360996303530131 -0.1931256562739132 -0.8814320048391708 -0.045822572704767195 -0.8833251667952486 0.5074220528985607 0.11319465476261681 +177 197 0.28163459197331897 0.38683417176262025 -0.9191329344334329 0.6410182873519668 0.721432815865189 0.514316841743615 0.29557381245234415 -0.15788209056619817 0.6053849172404635 0.3441327936210552 -0.052653353566268324 -0.4026941416720151 -0.6068956255484861 0.3835796855636533 -0.013862392622990383 -0.0989514116689858 -0.7061058577872426 0.12304180929284247 -0.28915488032594827 0.39293879768751205 -0.7478902152683173 0.4257181555885907 -0.9164936038246467 -0.8043687020147752 0.7387544343292689 -0.009235137869052501 0.17754411702964012 0.6554965495262448 0.25190327303202054 0.24687627729118566 -0.6749027905896969 -0.4210825310791122 0.46228472241525154 0.8668664413952607 -0.9119727923636662 0.6188829691056157 0.6930585397969458 -0.046850179249541046 0.6403981575868181 0.411910661154292 0.45317701155167645 0.6363589491696275 0.8536759063931163 -0.9922642187096629 0.7553739229674663 0.599659435086954 0.7348462964829496 0.06112723568531142 0.09148685248719657 0.7366963024127808 0.15106811501493844 -0.4102593344929246 -0.47628590310004215 0.5214551620671009 -0.6410055469838563 -0.5666791822802133 -0.3241536584282201 0.7836953507479116 0.9557315581378572 -0.8420273315527311 -0.3618748300471022 0.7127460461052242 0.4840741208802892 -0.6758064627206017 -0.7869973505042416 0.36862318114951265 -0.18951026515277225 -0.43342654858673835 -0.15189285029037247 0.373368841170844 0.14628147943942071 -0.7078831889557649 0.22361540288435378 -0.5652532035449933 0.5957022049379583 -0.08440215932068051 0.24471621473222704 0.3790495907363167 0.40556366418350875 -0.3151182881459773 0.5734395888712682 0.8198454630439447 0.7603425690044332 -0.789332782493622 -0.5775466476142788 -0.25498112331803324 0.6795425771478785 0.4426411838482103 -0.2482950502205752 -0.3745139342605641 -0.5269806331281779 0.8472791013148495 -0.5453110702559092 0.5162149237587592 -0.8739200455961347 -0.18173964489227057 +177 198 0.10500230989847847 0.8005649691899146 0.6930536619683705 -0.27072507365105425 0.3215789311227668 -0.5025818485598943 0.7511603695990263 0.5692024916987586 0.524790515712876 -0.5258641241447413 0.17195627494328458 -0.3466766480268628 0.9906311384639575 0.5162569890561199 -0.22253958757420333 -0.30540299893736034 0.3452894168157594 -0.8223068690661339 0.8773540887938149 -0.6714831564426278 0.3567631378412379 -0.36943236202410845 -0.9418531225259448 0.5259521178920346 -0.31611726329902434 0.25823224478986284 -0.3999901104739867 0.9480332505946409 -0.47343244953412134 -0.060397500414045346 0.4827464960646819 0.09723842194891263 -0.5460262184273592 -0.8699642838297728 0.7107031302359157 0.3484887774358787 0.26126717460712356 0.24667782389714454 0.34637567832045746 -0.37787279602706003 0.26633543628044376 -0.5625824031679507 -0.7193453543373007 -0.6645570653668562 0.8325972438029998 0.33648854211453627 0.4959132909651862 -0.6265167461172003 -0.7873667802520254 -0.7054016771653147 0.8083373272272605 0.023364888251148797 0.03649346847274004 -0.4806749335070897 -0.05093464885558152 0.3513590428976905 0.04469929912102222 0.45813086106447876 0.17938249174904541 -0.7920831673720115 0.838022963479609 -0.9158796609145996 0.285482245809382 -0.48842681570823454 0.18701237168392915 -0.02527259227679246 0.6933038079537586 0.42500309824266713 0.27050059684292904 -0.781878913994178 0.09601604400695418 -0.25418109760106655 0.28043434492535857 -0.2555807011951132 0.4130969203019834 0.05918830152058008 -0.9011915727520792 0.002377964290551482 0.2276437317566855 -0.6556105094338489 0.9122085012756165 0.1290429483604687 -0.7419238402691266 0.362785697301822 0.8015648423021455 -0.032627113208184566 -0.9281310375341167 0.08196443030673595 0.38998211259175597 0.12322197384850297 0.9357683445992302 0.6035382747975928 -0.16636503634972688 -0.3376601177667091 0.7613143108285756 0.542979170082617 +178 157 -0.9291556546549682 0.9909266036217581 0.659046768323474 0.9795687011050258 0.4378635108672737 0.12931464041558294 -0.6991987159335229 -0.7875068428632102 -0.18948617410550073 0.636633851315529 -0.9314616112266829 0.11339474990083587 -0.9613394550602667 0.07391404370797594 -0.16224962955874433 0.7056022215540203 0.9114031627832704 0.9493552926005575 0.031916909050312414 -0.3121974699826202 0.8193802032559969 0.9042174687185607 -0.6384675972238949 -0.9861552098182207 0.9961494507524635 -0.013091065406542368 0.08787724686391418 0.21972283563561135 -0.9936959236139258 0.02270810457283856 -0.24090993820014162 0.5087677016707557 0.4438853379975003 0.33119511350415776 -0.165343005474063 0.8012719403506305 0.7766046655169467 -0.6743354145636606 0.4398258658920542 0.5259250519624628 -0.19678284155100556 0.11221306726270663 0.6015285129743835 0.6992355571814846 0.19978774454364578 -0.15981504719126982 -0.9702036565003276 0.009387596091997574 0.18825804729970663 0.8879210605022847 0.13454116880079292 0.07788614317750597 -0.9915424264439938 -0.45524979060603266 0.9065839672672003 -0.9427904826065783 0.720023317950879 0.02601321997523076 -0.8303593886978577 0.093182193692539 0.9221174930418137 0.9538677329342553 0.6409214914312491 -0.6690223836497942 -0.6708092935156171 -0.6673711878881026 -0.3022359457824022 -0.3740398218155405 -0.5763903694087662 -0.7363740503075495 0.3386241179467915 -0.7451762849942518 0.8253974094504151 0.6140405193816247 -0.8683346718619878 0.2626557520884927 0.7071019851049531 0.33546173486347364 -0.2512396327766133 -0.1480978411647027 -0.9503722075587753 0.5286505424097014 -0.023130149887536477 0.9998317972868087 0.5217680107125955 0.41971448946841017 -0.39150863060410357 -0.7493461691023837 0.7005968302738794 -0.1714769582117115 -0.8518407611288252 -0.7548405408689838 0.17739569913524167 0.40900200098373674 -0.30505225570803085 -0.7047791038054902 +178 158 0.9811181461904837 -0.5981655275543856 0.1761953281852522 0.07576015415425363 0.6756702605948253 0.43462712645240686 -0.8653520995565815 -0.3741468891974027 -0.7318085894409527 0.697686700575624 0.3373865547759678 -0.9961363503551284 0.4863054285899777 -0.8153727952126315 0.5890908083023965 -0.9212402983722954 -0.30984798881251097 0.1044365817452686 -0.790246686811584 0.5707715662982735 0.7355557383335278 -0.5086760547762832 -0.020773549075031594 0.6137321801423963 0.11957482293711585 0.362153444986262 -0.49042776816910694 -0.5675595307107391 -0.9713334807257907 -0.7587028485822593 -0.9533809456621909 0.8595257610105871 -0.967155614277722 -0.26583920737737965 0.22780137509486598 0.5641013331949019 0.004313317953184015 0.8278864100287382 0.985196328830827 0.37832766992861155 -0.8763931488590613 -0.28830047270309644 -0.4008227563558573 -0.7285095741350229 0.6199270147622404 0.49400636428844513 -0.7712036841466148 0.588490578252509 0.30424211181253624 0.1660129272477069 0.47112522247742317 0.38626442459099186 0.6559412882336828 -0.8910801587281421 -0.3447479577641035 -0.3739365920138866 0.977633761657341 0.6284442677758861 0.15173632374719803 0.5048796858287858 0.23976214612835434 -0.8343899589313437 0.9663822732736769 -0.500004991861243 0.3041326472615582 0.12475067334558543 0.27407601044802554 0.5262953271051107 -0.6392895503761173 0.8585559662789748 -0.007386474786755359 -0.3068404076024629 -0.1809768627213646 -0.09062081988123083 -0.5529351571578123 -0.812428054581884 0.20713201978255813 0.6043346672202423 0.016620267849249082 -0.13254335729805722 0.7435731025901777 -0.6511123348226613 0.171706768282337 0.7557964588539101 -0.6946790307298014 0.93784201733833 0.4625561999819481 -0.2381218692180378 0.2917187549649767 -0.8118537779075541 0.7080891007734544 -0.7554508897146042 -0.9586549868012679 0.8601614603498664 0.903158099024195 0.6359419036629441 +178 159 0.06122120204128856 -0.5879453162823893 0.11862903922061818 0.052889998755534906 0.3515461950946954 0.9372290437483024 0.9774286844298985 0.6649750427643164 0.3227121764478529 0.5457950317422204 0.2841882150692363 -0.7276814280296864 -0.7570557770407653 0.7940548937167282 -0.5658813595531731 -0.506691370376186 -0.8005360031442181 -0.45278529573399484 0.3905159067003774 0.470507617966635 0.5669900094923395 0.17767757228731695 -0.7023330694577823 0.21923141872135998 0.3884987135700517 0.35162914357638253 0.6111192890048658 0.6215914532430795 -0.6657148796738734 0.17839560597207949 0.023654383954086144 -0.7509508804712588 -0.8799166544100203 -0.52134005076846 -0.770771854302724 -0.7858556485171584 0.7285702493317394 0.9997473705845938 0.24863166612425602 0.6503781278755885 -0.5604370328099524 -0.698170239045222 0.814118663681255 -0.819268307570157 0.47712797289301956 0.618295833490458 0.752735927729342 -0.2278503921224957 0.2097279786428734 0.5263428653650588 0.8374504357918644 0.32948791382175946 -0.07649640413699421 0.7288460212531942 -0.7612003679861663 -0.6250082159517252 -0.39696647046302536 -0.13985388192828507 -0.1240199982274881 0.7265626943797217 -0.7038326001559461 -0.7819137180732527 -0.5476607185281541 0.42852075819286006 -0.745652240918316 0.9380554514955828 -0.2641333330296658 0.9900495035000498 0.7113054779832779 -0.723212739588839 -0.9970672333409409 0.13028819174273898 0.09415186655220475 0.7145719856172961 0.9445129856937702 0.055142372220727376 0.4975396264483447 0.9836979896939504 -0.853282185707108 0.6641949160156724 -0.03401222073150256 -0.6894042201551369 -0.1976280836060098 -0.23071830129423154 0.5268135580613384 -0.41412053020221795 -0.80216204180992 0.310655177135589 0.41855066994425605 -0.9874481172726248 -0.6449969390454311 0.6526434909036227 0.5022512135518138 -0.8902265357776902 0.5122155823809937 -0.5183815297041359 +178 177 -0.4336016241866745 -0.965387363401617 0.8463141178215126 0.3928273757151024 0.8675757162449604 -0.3692736539250512 0.33473550427675547 0.09444963668609452 -0.6015956567313208 -0.46790928014784394 0.5153823253293055 0.024149948549529787 0.7733330921368713 0.9557152914269968 0.429813212116418 0.23454109950004742 0.4068297549541202 0.8415502164750968 0.4018454293943059 0.924315792368368 -0.87323444082982 0.41070374133881904 -0.6732665352987468 0.8792251192371514 -0.5753510153735724 -0.42840087764487866 0.956155520841929 0.13759199069420713 0.62815592605665 -0.056072072252469685 -0.6105481560333412 -0.8017057253061892 -0.9256631492629332 0.49961151735243337 0.9148445237394824 0.3031494032044737 -0.15793644307042554 -0.3342315101185691 -0.14560642213087194 0.7736817432495935 -0.871361808840613 -0.45888276663572825 -0.6692441211455209 0.9309929099057996 0.175183866743869 -0.44728028151603505 -0.5485305946434191 -0.30794647439342593 0.7966809794122376 -0.6641823658682233 -0.19804649573663013 0.8236943668022119 0.9568013145429637 -0.8024716256562232 -0.44645364225168316 -0.5670727273897713 0.4474860407914587 0.31591152433224656 -0.32683297830080793 -0.2994125579230511 0.611655725758238 0.08918766766365294 0.28373927548595756 0.7876773518829194 0.4360007481774655 0.5631459461495663 -0.6900795212041233 -0.30673521697191775 -0.8963209871978255 -0.2095760026422706 0.03976447428031826 -0.5722299794175731 0.33188483091739496 -0.26279733183935017 0.3488937451826102 -0.3210376531778809 -0.7703823379681054 0.0038786688460901164 -0.9030054576913888 0.2637557010827023 0.1730119747034855 -0.583480778988656 0.004351842451985499 0.953638796341381 -0.2857841647812589 0.8181844314155928 -0.485675536569546 0.7979945853915684 0.7777161930405871 -0.11701940538360756 -0.025499845543361932 -0.7607099481236173 -0.5933703910827008 0.20543288976188223 0.894872419780703 0.22892791899249976 +178 178 5.801622665704589 5.770287374680499 5.3596657355153425 3.609773366210259 5.505793193152491 4.158455567967432 4.951698076414278 5.537960298781015 4.854393972861463 4.320143219548127 4.077884634537069 4.363126098744292 4.117910593118445 3.779572933613002 4.840089550469756 4.94949921262117 4.541386454882979 4.722717795394161 3.3019325704430678 5.752577718558382 5.317757217080071 4.4717083959309525 4.389961623606979 6.061025296641398 3.4293653467359393 4.121461940370994 4.957198119808013 3.3154811727299287 5.966910578433367 4.326072533405391 4.514152448414574 4.823624627361918 5.0266079042295075 4.188935019977354 3.634617725809325 4.535504803129701 4.21537014309815 5.606400220588871 4.346565489566484 5.05952213383047 5.103445578407866 3.8097456654215502 4.919316569021337 4.9745692419771315 3.882539593493705 4.355705800195434 6.729209390548045 3.432901499376671 3.841245057319523 4.6642623328667545 3.2266626938124103 3.3616694730661334 5.719107665851934 5.868970113844235 4.367060396013905 4.703821035586683 4.396140170420312 3.4200007336827856 4.664095827530738 3.733735691049407 4.773783275543827 5.9438195915766325 5.311209201779315 4.956699222959919 5.116993680092366 4.720990392677263 4.408348628683662 4.6911015916262535 5.976891973719111 5.329655831599872 3.16272441541237 6.078539415471348 3.9017352981969697 5.33991877450322 6.725297295386614 3.135975309319314 4.7001517913277215 5.224448061244895 5.012638415787103 3.8590096977984354 5.100754908243277 5.258516638107846 3.079249186001257 5.245962205925501 5.003403036625571 4.5046163195425875 4.109263120564146 3.3032859790143827 4.456821766231935 3.525061743757716 4.25209895102093 6.095517327699787 4.265688373979623 5.086299424205488 5.076900289290485 4.944033860446697 +178 179 -0.6577542205106126 -0.33124470859990307 0.2863379843707461 0.1407429425117157 0.7297547944991942 -0.01761555068731413 -0.6080043718499113 0.8484881047466475 0.6978289761153387 -0.6560978570739164 -0.298279476802195 -0.428002556646246 0.11870095374914502 0.40280682346422836 0.8693371927055895 0.6160079868368733 -0.3008218985795654 -0.33851294211889615 0.6348323312879631 -0.8074017943848004 0.6943076427434067 0.17869758009622827 0.5387255318002397 0.8576195704720353 -0.24157625519771986 -0.6817242157419918 0.6982881338333757 0.6970947555395053 0.21948829868542896 0.7297959587459193 -0.35178867301871786 0.5985021848098326 -0.2355366055660315 -0.09717762704380628 0.06998147940147126 -0.02241006840829174 0.6263127490158584 -0.5874285633548506 0.6579785020185123 0.9376776582651758 0.0590561105934333 -0.9620007513381981 0.1654446823412532 0.5605715259549138 -0.8335027657902923 0.8766443734461506 -0.6352875431450979 -0.13255953513851337 0.8107153277672821 -0.7691232403724488 0.3390029938495256 -0.901728018806542 0.6244227598103076 0.8176137426422998 -0.24813501528532722 0.6541444037514217 0.3183026555953443 0.4418124193024757 -0.5455456126810843 -0.1275350752040183 -0.9524234885619272 0.8767736835056652 -0.49239708841476837 -0.3905609495780318 -0.39550783145993584 -0.1084254576693493 0.8059835879057846 0.002376556790694151 0.5297164990564853 -0.2890824264512879 -0.2516994817329463 0.7919501594929967 0.5294076516660289 0.981271505217624 0.799544775272508 -0.06244521300605177 0.39719374164257415 -0.8078580010265972 0.4086068433540453 0.8981210199991561 0.6600015539909214 0.39842721238453405 0.6105184833082502 -0.29386561075681716 0.3714602207356139 -0.0950886426959936 -0.6946746454928177 -0.09094874927360119 -0.6936667968891814 0.14405198903313043 0.0682642139597347 -0.8794649272332438 -0.683556550196448 0.37750519170112473 -0.6698534585041345 0.5360660233680354 +178 197 -0.32946441424017747 0.7006310399420892 -0.8221677932760223 0.6673380052023166 -0.9902750205173574 0.7932228989434384 -0.2528444867830313 0.9386395024910115 -0.3813095851710915 0.45788583020643525 -0.8045756476599046 0.9125892728955582 0.18444794372932494 -0.08199544917380619 -0.4049497558861761 -0.6651936259111151 -0.46075037047990874 -0.1722965436883359 -0.4810598369916723 0.7004990701793083 0.029043373329820543 0.8185459204903143 -0.621641893457825 -0.7033910673466428 -0.07875546394838517 0.5409643575109018 -0.6996835077368186 0.054738782978011935 -0.16447228342734954 0.9810625053669038 -0.9887595712917949 -0.5660019998776373 0.6958971891046855 -0.9398697522864732 0.23016656811332536 0.7007075259285127 -0.7115348109503283 0.8804988696187395 -0.48000373280868924 -0.8397259444782956 0.9662194325156557 0.5910553307745301 0.24039970971035118 0.6791446920129813 0.9106884957237187 -0.001917611802390029 0.8388126523747108 0.2573455668243214 0.755167790532733 0.3703785286546939 -0.43763770348331765 -0.1422160454856678 0.053831573128347854 0.14210424225883056 0.025838758511632642 -0.8395757814233087 0.04597172282767281 0.45179195865412036 0.5964063868145415 0.2682579611507585 -0.8384655604763718 0.7274685558703655 -0.15233451397433262 -0.9726537748785451 -0.6286337174138159 -0.8533090845726541 0.7734008203873253 -0.9193975953639162 -0.966994241011687 -0.2960899358035769 -0.2536975971079125 -0.9648019971315058 0.6204190185643801 -0.6562901934423704 0.7523122690393691 -0.27173969456924496 -0.27757501071000923 -0.007871674555907981 0.7958348833217022 -0.4348761446492371 -0.5609139620195649 0.8995015724677833 0.5482025987217489 0.6401249743525883 0.9705241734960874 0.7644718185075468 -0.22973629314317012 0.06736387072284944 0.2645128436549524 0.9072222478754173 -0.21702318675691745 -0.9192814545476848 0.17827322957131253 0.37094041969851577 -0.09574572804094617 0.9140656071757203 +178 198 -0.8495409287626556 -0.527811813693589 -0.499739653101007 0.031067674115172306 -0.3899544437954594 -0.4967631500235725 -0.806656178554882 0.5967399418440735 -0.6941009133158056 -0.2673186871924562 -0.059320302856501694 -0.7150733151667901 -0.15989920897258703 -0.02656816393591388 -0.7977456331014752 0.5301539095652066 -0.30354129265498186 0.1370802807222089 -0.3548224087642162 0.3769029827227526 -0.11244638039302379 -0.040529528615091515 -0.20146442452296665 0.6479481671006992 0.6756178451194399 0.9636501027073856 -0.4526530205166195 0.7457891311562959 0.9740801817556726 0.5690584230752023 0.20781678339499 -0.6238721362332278 -0.34074105954096456 0.8944665503279161 0.1393847909926489 0.8217545763168015 0.5072593775859224 0.2546608535441903 0.39181110766321936 -0.04080647560181072 -0.685378876177192 -0.033923605674564206 0.8998974936687285 -0.1382474673021532 -0.15856523367720765 0.8029081978270232 -0.31262052693135245 -0.4353382827974206 -0.071920163971263 -0.5437862485869289 0.015613239330052542 -0.33955787931887094 -0.6764286959880434 -0.9063509502851801 0.45595052501105804 0.06706736841531069 -0.943090825270817 -0.4198655213525695 0.7126373828538066 -0.7614065458313533 -0.2783250804234929 -0.6121050449430099 -0.6561883652712903 0.461795792757562 0.695166614139455 -0.3879973116492861 -0.7246353442244151 0.4447756950853643 -0.46093730032862346 0.9963947054792199 0.4096342448934007 -0.7853364857126457 0.5552134749681519 0.9797812509938348 -0.9271434019953488 0.2447867434148443 0.4276432547309357 0.8211678088860117 0.7996194095834399 -0.5731336419140056 -0.2909964212746545 0.18430209581804036 0.432950968278361 0.025581697353023847 0.6737884623253023 0.022805414664899937 -0.13496200448106643 0.009696865235364394 -0.5441203897816498 -0.01376101531577767 0.9972197467165904 -0.905755430460683 0.6544284674910432 0.437975339895603 0.47452293482003505 -0.8600761729821358 +178 199 -0.7153477173768517 0.6142596237818747 0.9595725192956452 -0.7140346788171634 -0.10712268136002812 -0.5988780303450498 0.36301453152270224 0.9845324142140932 -0.23789665462978804 -0.12356698052903603 -0.28656717497436857 -0.0696171820436211 0.26987373312395957 -0.08217849010887135 -0.617302477772601 0.41648036624019924 0.5321484654059352 0.9723973699247836 -0.0810812168349071 -0.9970567087568867 -0.9750310422407305 -0.9714974532662441 -0.23783668060994656 -0.927554221047346 0.06022248130443386 -0.5652902814586904 -0.4523620464141629 0.16024328519843012 0.3595582263358954 0.9360848606217709 0.7328716693252937 -0.024138557924451742 -0.031216580594464416 -0.3769407179587505 0.8745096070240808 0.2846620545468619 0.629877481646042 0.28456468559651227 0.35610128045148914 -0.8062688102924158 -0.4226561135568194 0.580115417420749 -0.26671133703789307 0.04876932254651134 0.45808102086603375 0.7275194526889739 -0.9970176558859791 -0.6992026662129522 0.2447546661657658 -0.397759003470858 0.285668366914811 -0.26156959372314903 0.9683086615850403 -0.5361571621465195 0.25255977083473 -0.11823896163483982 0.47378851223328633 -0.8406837311977835 -0.8035656688602335 0.8001206400601713 -0.1712179426556366 -0.21982880011092054 0.8838525004393509 0.20380180369759704 0.9048247078520593 0.5937297649752014 -0.17369483272416186 -0.8445845721291614 0.22134375628922554 -0.4477200559689205 0.7853885632537121 0.9526161196773844 0.4763400486964844 -0.7951823375098037 -0.593257598558282 -0.16187076778345633 0.5311086921706196 -0.9785050732115839 -0.10868340763318485 0.1410971426904739 0.7966798673084599 0.7045833531288068 0.8322037156930009 -0.4581138889341687 -0.6041726293163863 -0.7654314525985508 -0.12822494991431665 -0.6443470599414245 0.727451363176771 -0.22936540619999768 -0.4889819605168486 0.003143308001124945 -0.08613438722937472 0.5486347830069984 0.983886541618517 -0.4564040730089187 +179 158 -0.990642501086296 -0.06087906334706239 -0.8812557930954117 -0.5555155149308162 -0.24867673831203718 -0.6521740453956648 -0.04813327005389678 -0.6607565831446163 -0.9925914936496745 0.05573975567008782 0.04245559038259805 0.6020712988715808 0.9877951838204697 -0.6166284742078227 -0.6021615325424847 0.9668179707497986 -0.5681345090152801 0.07346900041628568 0.4710970311475269 0.9092290900432318 0.7391976917933643 -0.4982690736930224 0.9029625325099422 -0.7222769071671489 0.9507089226375927 0.6894034419935444 0.368365019752787 0.4497350025949083 -0.08897161975319379 0.8871041702172318 -0.7981102072481225 -0.30295758497621916 0.02938773268374595 -0.2018141276983123 -0.12410071039827164 -0.9862000732352756 -0.3609564910213019 -0.6987616184526035 -0.13837653098877967 -0.5665520744779156 -0.3743316180784295 -0.3034762840570211 -0.9591536081131542 0.4889156523501943 -0.5041231963931756 0.6323831473314507 -0.29472449895045716 0.17189990932828003 -0.34823537521173953 0.1970785514147959 0.4977544420524931 -0.03291430081771396 0.07480107381713319 -0.04691146569915183 -0.5433554149760502 0.6391018047802066 -0.7680889626111724 -0.43949519582087193 -0.12845041431250048 0.49394176835812886 0.8142485767705503 -0.21180550677817256 0.7784442772429239 -0.2163758582456745 0.07626441282127217 0.3070471648803934 -0.0810687644447603 -0.054702377828975246 0.5432137948343985 -0.09717981084878424 0.7428456765914035 -0.711246430256294 -0.12261001019575124 -0.5058727014865063 0.2600254716221313 0.6394388914020739 0.6341489645837288 -0.051084279254657305 -0.7458846174043325 -0.8090114693376664 -0.5172575573821006 0.373027040863795 -0.3573249388757962 -0.6695737257350141 0.687266575173815 0.06432251261325028 0.9805591467008765 0.9103099414818836 -0.6638152825961352 -0.372198266883522 -0.6559751901426694 -0.1090966218387206 -0.41570699593313054 0.8834403848834043 0.8607228675898935 -0.4368226496424843 +179 159 -0.5683138539593595 0.7288537737852705 0.8534694428288931 -0.8843482261071829 -0.045763108046123824 0.40674183448700596 -0.5996043696550235 0.43705967340302143 -0.5677520612209963 0.5511524936711318 0.8020826047758209 0.875524347022675 -0.23076241435379985 -0.4223996788821145 0.6921954995766209 0.0431965912501211 0.39295176582609126 -0.5992090851725838 0.1903554531483891 -0.9920451704229338 -0.16755547960503603 -0.7938363968127395 -0.47819710695505324 -0.4364435808872609 -0.044169023294231335 0.474329178911147 -0.06657606844912167 -0.5890536942746605 -0.32810494449242356 0.9363165792148762 0.09156866602386726 0.42302206779541907 -0.8286534221322839 -0.6944855579070031 -0.2893896472449411 0.7687158971683199 -0.2911824416631259 -0.16640837066217862 0.5902695698298495 0.9012429109407663 0.9141356566339562 -0.026959227186443613 -0.39772894298014294 -0.030508159613034325 0.6867433170060884 -0.5574474464128554 0.9882389058319478 0.016681589596304836 0.863914213107063 -0.12154746046537657 -0.060551531399233305 0.10935370094307673 -0.7545410571704207 -0.2646859453969119 -0.6603272748640778 0.6438470706334167 -0.6817067675423469 -0.9219936067225221 -0.28713263823165747 0.525926868575832 0.2379890022465776 0.9726752833138432 0.7195249680668085 -0.41450160850792495 -0.49709288570706955 -0.010571336772377204 -0.06444030776655651 0.015637552048117342 -0.46276021452003513 0.7022887138699561 -0.008199059820254373 -0.7334316654895787 0.5462713203584073 0.23955804189995034 0.9513516872942342 0.20718099217551122 -0.1513963856932139 0.8367818745714088 -0.20599251238588367 -0.19812193685882118 0.17005059912221654 -0.7664088501419175 0.5228604426639927 -0.8461752890096441 -0.4912974702488375 -0.7189247129107816 0.15671415988917192 0.39113192164258703 0.2675298645224544 -0.46516195397592885 -0.9085084942964756 0.6460011355723276 0.42173295511542785 -0.7770737394764757 -0.773084931807698 -0.5374131897213661 +179 160 -0.9152018149342651 0.6732388585763425 0.739288836048277 0.8862704502462742 -0.1557691582577796 -0.7018588111957775 0.2826496992079075 0.7465564995160066 0.5019075036305276 -0.3847094655659895 0.9392279945015245 0.17035355749166858 -0.46138393325481 0.7243333054113821 -0.809196740225038 0.15631780166686426 0.4338048847330236 0.8418769245682078 0.46255960022660014 -0.9615623200013215 -0.719976380420905 0.3092078571844026 -0.8944853977785758 -0.29384610058657956 -0.3226034707240195 -0.7003896928522069 0.5148728497294255 0.9134062918236134 -0.2073688231760895 0.578857481908821 -0.34116649901223917 -0.4819453766797308 0.2137397834140573 0.909877312342642 -0.6569847035793881 -0.947241658608744 -0.36152026827058625 0.036764847873662854 0.5996992733904467 0.05669796087760015 -0.2564067401828425 0.4094076655275005 0.7207618805754932 0.03324555781637617 -0.5727695544327831 0.564319348870248 -0.3554219098097744 -0.6788435774887938 0.05550312210989983 -0.9312867607699125 -0.7487576445456527 -0.6696548663212254 -0.3105985398006492 -0.22256445042085127 -0.9841813564459709 -0.2832726724316015 0.8127068659396257 0.28034006810949696 -0.0375801327008245 0.20361310818008937 0.7051386417948673 0.04147867964362972 -0.9356284316380397 0.13492017178275084 -0.6296643941967874 0.513207215871589 0.5466938415148235 0.32177285296693725 0.5364352354180157 0.779538650864958 0.017797956976089546 -0.9610116372542239 -0.590671848881879 -0.46086695424585367 0.07514280595817868 0.8166054710501396 0.8232853857457787 0.6062767663150248 -0.3759434360667482 0.5986307523325076 0.4396545979032427 0.7316618710381493 0.6351669560777891 -0.5297536801817253 0.3535960580352069 0.9958102867236562 -0.29569388844458455 0.700772265482932 0.07914889614166376 -0.9334592307392995 0.2600839991252506 0.38031577821526197 0.11313695068000085 -0.31435849022632967 -0.6619822258305719 -0.8253733740597557 +179 178 -0.6577542205106126 -0.33124470859990307 0.2863379843707461 0.1407429425117157 0.7297547944991942 -0.01761555068731413 -0.6080043718499113 0.8484881047466475 0.6978289761153387 -0.6560978570739164 -0.298279476802195 -0.428002556646246 0.11870095374914502 0.40280682346422836 0.8693371927055895 0.6160079868368733 -0.3008218985795654 -0.33851294211889615 0.6348323312879631 -0.8074017943848004 0.6943076427434067 0.17869758009622827 0.5387255318002397 0.8576195704720353 -0.24157625519771986 -0.6817242157419918 0.6982881338333757 0.6970947555395053 0.21948829868542896 0.7297959587459193 -0.35178867301871786 0.5985021848098326 -0.2355366055660315 -0.09717762704380628 0.06998147940147126 -0.02241006840829174 0.6263127490158584 -0.5874285633548506 0.6579785020185123 0.9376776582651758 0.0590561105934333 -0.9620007513381981 0.1654446823412532 0.5605715259549138 -0.8335027657902923 0.8766443734461506 -0.6352875431450979 -0.13255953513851337 0.8107153277672821 -0.7691232403724488 0.3390029938495256 -0.901728018806542 0.6244227598103076 0.8176137426422998 -0.24813501528532722 0.6541444037514217 0.3183026555953443 0.4418124193024757 -0.5455456126810843 -0.1275350752040183 -0.9524234885619272 0.8767736835056652 -0.49239708841476837 -0.3905609495780318 -0.39550783145993584 -0.1084254576693493 0.8059835879057846 0.002376556790694151 0.5297164990564853 -0.2890824264512879 -0.2516994817329463 0.7919501594929967 0.5294076516660289 0.981271505217624 0.799544775272508 -0.06244521300605177 0.39719374164257415 -0.8078580010265972 0.4086068433540453 0.8981210199991561 0.6600015539909214 0.39842721238453405 0.6105184833082502 -0.29386561075681716 0.3714602207356139 -0.0950886426959936 -0.6946746454928177 -0.09094874927360119 -0.6936667968891814 0.14405198903313043 0.0682642139597347 -0.8794649272332438 -0.683556550196448 0.37750519170112473 -0.6698534585041345 0.5360660233680354 +179 179 5.79156959287717 4.447285240325017 5.384565000535986 4.293903465042092 4.720270092149245 4.518680460956942 4.103335625711738 4.045242386310976 5.461428510305058 3.0802341542581564 5.378078041657739 3.9193317397283036 4.653426394834613 3.818650099823608 6.1708367414992935 3.845901440021212 5.202822079507135 5.753257292175672 4.686079859125239 5.815513495071206 3.8557618128004365 3.157114750352603 4.487966024542694 4.827664789347173 2.4316816469308047 5.374184880617404 4.351871723317893 5.566846884812569 4.38200015956722 5.422703180194116 4.3862395762839315 3.8029619496166682 3.96828633807434 4.635033203124851 3.3438157099432226 4.132618353050595 3.5419550284325343 3.3961067589196468 4.165244476496103 5.094316266056471 3.2381156956996007 5.234861808551411 4.916938367999913 3.026430675797592 4.790591042406692 4.564187075979023 4.30623467280321 3.1217057063158165 4.915886085494617 4.755500693274477 4.893355875265573 3.3777923806646015 5.231862797176457 4.76005354290743 4.7093515363591765 5.288412322497113 4.290969313001156 5.037056255370517 3.22876096331068 4.195737592649925 5.047744673852744 3.4681551219749727 4.573543348215654 3.1424056849736877 4.257761012172621 3.299084746899326 3.3949357119906676 4.249731090287762 3.668841942032605 4.537813472680615 3.5608873229654217 5.3993908161777595 4.231711447942955 5.712968155862063 4.718429977507421 4.619262497536303 3.977855310635505 4.272711760106488 4.412484002484861 4.0236618377941555 5.237850124909133 4.120594565135746 4.785426639346182 5.632759995094436 4.4258561437554205 4.146869482026101 5.024786404238136 4.912679391054175 4.863861809619973 5.056301849440909 3.3630739572870385 5.296366318564184 4.87950161205676 5.158629083000241 6.50527248482476 4.867839652771583 +179 180 0.6475866086837472 -0.9258769617774731 0.98379635883485 0.773119666855028 -0.9748611723920244 -0.5181413065125222 -0.6586666533235535 0.013056262821616427 -0.5222148912706654 0.5716431504429178 -0.9054372547478702 -0.6499478903629599 -0.202260863673291 -0.010917698407622245 0.6638400664385571 0.25856408403254494 0.4941415497264112 0.5869865493349609 -0.5466521751082796 0.9394054164990389 -0.31746352401314537 0.2799839081634772 0.19395870361494616 0.09739791865589242 0.2785177593529131 0.7448157533382114 -0.3673440914272006 -0.022135731905179812 -0.6111816005420525 0.945592054087711 0.2580558323349209 -0.520378634257509 -0.4500834582145994 0.3163584484458184 -0.7877745353471415 -0.7766276805206975 -0.19514261354137274 0.4441020720916167 -0.10040206974620824 -0.5541907903833414 -0.4567965441313311 -0.29869373433519164 -0.6165164691920573 0.14531238999163487 -0.44337723306996657 0.047181684561949266 -0.16437401632804782 -0.010468824655027742 -0.6045743511846009 0.6769405283836103 -0.6615463632394574 -0.08750372697613673 -0.9447931630910402 -0.7981751734682261 -0.7609210472487662 0.883483484392183 -0.25719286748347336 0.26593425997405196 -0.6277925194768201 0.561603711562265 0.010698571301837934 0.32188893830543064 -0.48895843936580397 0.1689901125155373 0.3378236071397971 0.04100396113151539 0.4547044585643689 0.7653960546234941 0.20156042227344573 -0.7932614435993388 0.36225313288184613 -0.6357101665362033 0.7811155155995859 -0.7507112212706275 -0.6227968035589542 0.3471515661238138 0.7045682436678196 -0.8869116129673074 -0.37691018335964976 -0.19618543382069364 -0.3935730562029778 0.3249679070194076 0.3661934586117628 0.980809958499461 0.6514647685675934 -0.3606325573156195 -0.8115863673165511 -0.8166810142942871 0.6355244581358239 -0.5785452231441823 0.18928324261389085 -0.15618690362289778 0.5883019529006872 0.4821975469676716 0.6647020724132253 0.16248271875701836 +179 198 -0.3069935796736636 0.47515920464879335 -0.3186066829953871 0.4916957140226397 -0.9654993439880044 -0.5722967645469426 0.7359430390789121 0.13380702921214604 -0.9571795074213651 -0.07244943210705701 0.7876612288061862 0.3287585432037514 0.9623546523647659 0.5185416263588114 -0.6248410896048839 -0.3988520946898706 0.8328800253601596 -0.7808491869754359 0.11569651858163321 -0.3551007875506933 -0.04150341694076709 0.950623074750609 -0.5462267726108105 -0.7160055812223998 0.02585920440631373 0.033560856826962526 -0.7396701135469816 -0.7898199943173321 -0.988027630271181 0.6216966485285418 -0.9466449418759617 0.42915467325916556 0.36028006482055464 0.7923732443236684 0.09727561284308495 -0.002568502453399235 0.8333540388123182 0.0746066107065877 -0.9175795020391371 -0.6184434026096781 0.40213004286567644 -0.6539966774359396 0.7756047867973197 0.4790534743685906 0.42373703750837843 0.41874417862097735 -0.12243838176891497 -0.06703476839681888 -0.5689162512973978 0.9703160729567912 0.3412618719713707 -0.5884997042536635 -0.647283781695553 -0.4279023276610705 -0.37670015603088336 -0.09336314797581036 0.6343607497641743 0.6288476175225031 -0.17942376815513383 0.03486705993779027 -0.4383204302859893 0.005711826801773068 0.12782957325464928 -0.5571395599831046 0.47661749351116645 -0.13060489156041788 0.555135681161286 0.6269267467022657 0.6226569197675702 -0.3430967560914444 -0.6094365767568266 0.23048909623202873 0.6247624379735157 -0.7147051932665944 -0.2551115814307443 0.03490003713899603 -0.28514815396091153 0.2611752034464687 -0.1234944266258684 0.26578599583879936 0.517308586722566 -0.18032911545257924 -0.9795544173751238 -0.5085184052506071 -0.6191903661324765 -0.6400901880154206 0.5739604781094354 -0.6030663496899751 -0.2990629818988235 -0.17981314838783513 -0.10864738851000633 -0.8381433147240638 -0.7688378607958586 -0.5638778869494747 -0.9052808270534713 -0.2121956247956771 +179 199 0.716404383252137 0.36821115360759427 -0.256533500364881 0.2089638921012884 -0.6662924259882557 -0.43329259426252187 -0.23428398106482673 -0.28983278033716986 -0.10479098415000121 -0.5539232007682997 -0.5896749831108945 0.3681457681345537 -0.7273686298213577 0.10312168635594565 -0.9229001815039553 0.7253738794737679 -0.657243520631821 -0.7962382200869549 -0.8600589115615997 0.29221702653422943 -0.11990441040405342 -0.008136952753444504 -0.13713322535946837 0.6640430224336573 0.04280240696013493 -0.15516182537249934 -0.7370250603892126 -0.6629944161440555 0.6973844827804629 0.07691325674663019 -0.4527478140419434 -0.3573926340698703 0.3627167476288937 -0.6034009397497726 -0.5175396449027245 0.09206399006962696 -0.04427410193519532 0.18145084566878444 0.016276001421812625 -0.04897072402458047 0.15274562437351258 -0.8839274465208466 0.2762704368024953 -0.3229090352445625 -0.09759513513851248 -0.08139977164684842 -0.9784550366822218 0.857453409463391 -0.8279035872863667 0.04014021129852119 -0.7690758617317757 -0.09341427379596645 0.516186166117651 0.5724431963956209 0.18007793324970867 0.8803723914430825 -0.40989677713477257 0.8854467869538751 -0.6184695808510052 0.8613000718975685 -0.7822126493357995 0.8812282350993346 -0.05979220809598007 0.38824805877611923 0.8129465033826446 0.771697515179123 0.4217107931228383 -0.9216989192627543 -0.15905330940802576 -0.6943500464616805 -0.8641336930500545 -0.7873415319116019 0.512234674941545 -0.658965096198878 -0.5221849592827785 0.9947780630665799 -0.48283665721995606 -0.227003747466769 -0.9415731898150952 -0.14468280152174473 -0.7620905891178471 0.8073690129329318 -0.08724042044800528 -0.08534698785825645 0.2943398643861497 0.2532593419173259 -0.5117063296112705 0.2976805972457608 -0.8411032290095297 -0.9806959450489117 -0.1411086874731482 0.9111651664360274 0.41931048205640264 0.91923610868478 0.8742574153440359 0.43303768071530335 +179 200 -0.659364205736068 0.20434606345427997 0.1768422882546692 -0.19483900147265087 -0.4815001638985936 -0.7327933272778591 -0.8165404501280737 -0.6401400154919081 -0.5060478969045124 -0.011080155939591663 -0.21517035702677756 -0.05465322343271817 0.6669242725249769 0.62839463925044 -0.0254065651654789 0.3362975817450249 -0.9641461991384179 -0.9874294935595371 0.7174123687572427 0.19607695599388464 -0.9401252142945316 0.06038517898299145 0.7523947075844448 -0.6844169064137224 -0.12272073605298583 0.929057991989763 -0.18836832425513683 -0.5528958353129916 -0.9520881829226362 0.378036730059625 0.7596897767950821 -0.43241404189094856 0.5330028886274982 0.6633967902875708 -0.10235173061794556 0.26205367487650744 0.01987329883828881 -0.6248363324169703 0.8533545933761066 0.761249458704544 -0.12513388817470972 -0.7275820037326799 0.3459753767693132 0.8344587744501033 0.6500388727422821 -0.9944908941856019 -0.19999442642359666 -0.9103451753475995 0.18483603341101595 -0.1809077631178302 -0.5575159227380821 0.7206118469262293 0.9068788110746393 -0.9687738722942196 -0.012388118690722871 0.7908500563787109 -0.07534952752233837 0.6261341177140567 0.5686393149626294 0.5327753174642444 -0.6844947391458056 -0.008250217773691837 0.1652601455696221 -0.7972441234852996 0.12668065459098976 0.5038008757905661 -0.30148580230780553 0.6732527655036269 -0.5594831302100922 -0.6707069889471127 -0.22813380512792913 -0.028156974453378725 -0.5228827892682661 0.8076875846955791 0.3241934456002251 -0.7527252774480386 -0.30854636741582264 -0.1106054203312421 0.7386583598321572 -0.002259014472493881 -0.9702184562255656 0.16399280078643508 0.8021888686466072 -0.9956702695092219 -0.05642086921173406 -0.030595104786223848 -0.747921957033763 -0.2525698910467662 -0.5586967335098068 -0.6355396494963996 -0.7290650165778265 -0.7780720523930662 0.6182493871414843 0.8244796048954635 0.23367392994008163 -0.7535645580785375 +180 159 0.38981037675818997 0.623674424057562 -0.24694414563695188 0.35467236361380383 -0.9841044991622023 0.6266342103697158 -0.6814378245522708 0.2034755704169715 0.21153340676673893 -0.7100700347986473 0.12216067458012603 0.7134801887213746 0.3717593954864813 -0.49956916974960763 0.11283798244413856 -0.5451313816225076 -0.8225591554679685 0.5968597816318222 -0.5865720080884 0.7229645575869383 0.7320422874828614 -0.5565306209822827 0.8421917848274902 -0.4525418794344582 -0.7485698898844806 0.2490702338482922 0.014892832133079237 0.302095492877807 0.7440765289767344 -0.31337742469238905 -0.5464258856010125 0.3648520868056928 -0.7816327593152024 -0.5526633386752013 -0.24194827036173416 0.19398239513657733 -0.893396702197947 0.18501599766765575 -0.0007662760842261918 -0.34200607126611016 0.27451442254932057 0.8739696231638001 0.4061650509177661 0.4733404318327916 -0.5643958311737012 0.07525190290878436 0.4274738332410173 0.6381085386715706 -0.8887457966038044 -0.09106893584240261 0.3100953558173045 0.8105168022492342 -0.7912827040949011 -0.3015605686839562 0.7204386284004969 -0.5403696705006342 -0.5985436156751425 0.11788388258923721 0.08790864392191988 -0.42797864843105904 0.533296842743574 0.3112911890355512 0.44851688765076103 -0.2670962163727133 0.6319754597507559 0.8776980709780156 -0.47918490658410295 0.0038738386302425987 -0.8981234508785911 0.7380308317769368 -0.5791209112758897 0.8150478779622252 0.9608522889131499 0.9254886231155597 0.2295002014323948 0.6164118917527355 0.4933451392497916 -0.9102612682025144 -0.2723466052825225 -0.2318066993420138 -0.04096443510250758 0.04729885613186058 -0.45465868012231714 -0.33460823041991516 0.2734412041772203 -0.6317866428654402 0.27643306248859467 -0.9650851832163523 -0.3843014822593862 0.0884441258800357 0.3257214147809633 -0.927581369419598 0.04077304943923088 0.9792556835746782 0.5889054652558714 -0.9446031053175401 +180 160 -0.5016560176797338 0.7447903670002811 -0.5875890482748272 0.5157683657155374 -0.14617155389465952 -0.8462509362349768 0.5448097444853117 0.7896852555196154 -0.9583418503993328 -0.6268291724309512 -0.892758699564772 0.36511121367614674 -0.14020276400145404 -0.9315315466527392 -0.4807908999423771 0.22352335550304026 0.20902792836201178 -0.286459226276756 -0.4961525763686794 0.5118039780734083 0.1487184216703059 -0.8958673689797059 0.49504291854078186 -0.06189528306074443 -0.03391018755215458 0.37966189865336 -0.20128314399498026 0.9470374125289331 0.42425088032566105 0.16984452382996795 -0.753892206665143 -0.4940403651413219 0.077716642896966 -0.06848760004465881 -0.44619379585922125 0.9593315707201449 -0.4146163817938837 -0.2771706003577772 0.5814972919599986 0.5817807840572169 -0.08113951135673503 -0.41169159837574565 0.9299233413647463 -0.9731035517803659 -0.9463165153783155 -0.9114908252864746 -0.9031961324220823 0.2538825084267502 0.310726641858736 -0.9057436593545736 0.8648727596133508 -0.34256549006951387 -0.25289415582827024 -0.1363680692208491 -0.47756320910723815 0.29611415314575895 -0.5693774236582885 0.8428809219423614 -0.8291443956120019 -0.6145021640955544 -0.02673995889681735 0.17511628213010377 -0.6464708710317566 0.12506231109289234 -0.28369949475468204 0.9916493558981319 0.037072383241337103 -0.8693417037704736 0.23801363822256083 -0.35128087013380416 -0.6719855952612885 0.15379156014302242 0.7316005836524748 0.10228115102281232 -0.9658849293179972 0.21836708687039486 -0.3882584216135876 0.8223594732840882 -0.6715698167959827 -0.9805722138342234 0.5909424956889526 0.12039470227213855 0.9275816707973585 0.6845946351784222 0.9580889720320691 0.7215361396815332 0.07722333166058903 -0.09048934383576768 -0.9338525776919939 0.739112937749179 -0.619468927648851 0.7147426977477629 -0.2804107076089022 -0.7937121252939987 -0.23000711412675745 -0.04984306269333172 +180 179 0.6475866086837472 -0.9258769617774731 0.98379635883485 0.773119666855028 -0.9748611723920244 -0.5181413065125222 -0.6586666533235535 0.013056262821616427 -0.5222148912706654 0.5716431504429178 -0.9054372547478702 -0.6499478903629599 -0.202260863673291 -0.010917698407622245 0.6638400664385571 0.25856408403254494 0.4941415497264112 0.5869865493349609 -0.5466521751082796 0.9394054164990389 -0.31746352401314537 0.2799839081634772 0.19395870361494616 0.09739791865589242 0.2785177593529131 0.7448157533382114 -0.3673440914272006 -0.022135731905179812 -0.6111816005420525 0.945592054087711 0.2580558323349209 -0.520378634257509 -0.4500834582145994 0.3163584484458184 -0.7877745353471415 -0.7766276805206975 -0.19514261354137274 0.4441020720916167 -0.10040206974620824 -0.5541907903833414 -0.4567965441313311 -0.29869373433519164 -0.6165164691920573 0.14531238999163487 -0.44337723306996657 0.047181684561949266 -0.16437401632804782 -0.010468824655027742 -0.6045743511846009 0.6769405283836103 -0.6615463632394574 -0.08750372697613673 -0.9447931630910402 -0.7981751734682261 -0.7609210472487662 0.883483484392183 -0.25719286748347336 0.26593425997405196 -0.6277925194768201 0.561603711562265 0.010698571301837934 0.32188893830543064 -0.48895843936580397 0.1689901125155373 0.3378236071397971 0.04100396113151539 0.4547044585643689 0.7653960546234941 0.20156042227344573 -0.7932614435993388 0.36225313288184613 -0.6357101665362033 0.7811155155995859 -0.7507112212706275 -0.6227968035589542 0.3471515661238138 0.7045682436678196 -0.8869116129673074 -0.37691018335964976 -0.19618543382069364 -0.3935730562029778 0.3249679070194076 0.3661934586117628 0.980809958499461 0.6514647685675934 -0.3606325573156195 -0.8115863673165511 -0.8166810142942871 0.6355244581358239 -0.5785452231441823 0.18928324261389085 -0.15618690362289778 0.5883019529006872 0.4821975469676716 0.6647020724132253 0.16248271875701836 +180 180 2.7905444716754415 3.3902274067425804 3.4816943939901117 2.5513229640910513 4.110920419884351 2.9311117697233584 4.1312564535885326 2.76048832290639 3.379095680465764 4.1949086527584125 3.4862279827230482 3.350526541117974 2.2368315956723874 2.872678107719862 2.5900563339496303 1.721879473690668 3.108657258623169 2.5336883361961533 3.116474938209387 3.163834742136073 3.0537793074715034 3.50536984347394 3.071659325282228 2.851836128170331 3.097089921352806 2.6877627760233747 1.927403687573205 2.675481752475804 4.065038566704393 3.2085769165745956 2.857010459321018 2.368739082031591 3.080326363997243 2.4658642870348317 2.979122270330484 4.728363822692181 2.9493116986946872 2.171962943758909 1.3936738468781364 2.832404596585914 2.927485526968577 3.997731987699809 3.986128467587249 3.188609735579134 2.8839425458319403 2.8744304089059436 2.0810719986749597 3.0051005400078106 3.877117415043523 3.7458796205067975 2.9815704635781177 1.8739418947199091 3.899032776141932 2.3017551417701645 2.843228794231832 3.46291098803722 2.4103903328249277 2.213710161171025 2.6658373525811943 4.194132145885018 3.2449549374154985 2.0515464633640237 3.4556611843113316 1.3870812397297254 1.9347519489074292 3.8241251211510705 2.9536334284638324 3.1069045288927315 2.6447326231504267 3.8243036079417325 3.4228976438920347 2.8767297754028327 4.385846447824606 3.0026488248008616 3.4445293882426857 2.2625489140058663 3.646121515715553 4.708149927971042 2.867799954793009 3.7305266829529264 2.4451800217388175 1.6876824579037641 4.486981240136664 4.550223166136811 3.599904093849713 3.3506243572589836 2.604848396867719 3.1352195751242466 3.154496240006095 3.3081998498289877 2.490229772190917 2.5309787390032996 2.9375339426882183 3.9922153123671587 3.723441371142837 2.980020504236249 +180 199 -0.006498770593241776 -0.03322038051812726 -0.9214486777978577 0.13430992716014023 -0.7898863337812609 0.04463355965977822 -0.9865938160274121 -0.29375538070171525 -0.5324497930964514 0.6951148895572332 0.20405326843963167 0.6283694793719812 0.9550248720329335 -0.34533487951096653 0.10811020831450513 -0.5112423051557173 0.20563088459431267 0.12731468042189253 -0.8068638575991744 0.4654709861236983 -0.4826891852108963 0.13361115187811023 -0.2498898107679648 -0.5244887078242222 -0.5109039532517434 0.42921000431148415 -0.8053067519032822 0.9193415410105212 -0.7869499320363327 -0.5275194673408594 -0.12199053025008899 0.10664250714441947 -0.025747094297537743 0.2161944327150398 0.5646708106210852 0.9020252527672312 0.17783945456108396 -0.8185886483988423 0.18823909077603074 0.6673799556889544 0.650761088801274 -0.9032485004634931 0.9791508827578688 -0.71075523069052 -0.28621767871607817 0.14379502563705548 0.00496548469172442 -0.9130592967656468 0.7578810287204556 0.4349765567753139 -0.643107136384524 0.424152134717537 0.5713550003383072 -0.23585989225371584 0.4968919308344355 -0.44512975630765395 0.08400800804133679 -0.2561936756291441 0.43374201905849286 -0.8432071269640549 -0.9813440279626637 -0.3205626221887674 -0.9660787382392393 -0.6088120563751604 -0.6355419816501058 0.847320378647052 -0.2734575523789595 0.4464756350879837 0.23141290684197857 0.5855794334991757 -0.9778624965605864 0.26706273802785363 0.9618541615208751 -0.43177219527047916 -0.7762704563495608 0.3519765632158989 -0.37860306432493407 0.6048717034780664 -0.9811453969156703 -0.675540991151701 0.8946942852709225 -0.14362506031233768 0.9885607887842327 0.7750538084717322 0.6423900753750742 0.40979641112333565 -0.2963198562760989 0.1940796129465423 -0.6314177701984693 -0.9118757264255837 -0.7392804899126506 -0.27782043831154657 0.9052998658419031 0.11512091757806986 0.951831190333922 -0.9112692600309547 +180 200 -0.9198532411065745 -0.11082797917668707 0.25594401485895824 0.44186528272705705 -0.7039378287665783 0.6343039115583791 -0.6843387684722866 -0.4739834961386873 -0.38762895212822523 -0.8222549088725049 -0.8312911803553105 -0.3136158838605454 -0.02209433082499679 0.3201939030042229 0.7341993515046197 -0.12023814011228118 0.4220254819140019 0.08192515866216521 -0.3193838624851493 -0.28885495628470337 0.7060572540359296 -0.6873524275967715 0.6656301810100846 -0.9525676985531699 0.8686290960498511 -0.8756615279250064 0.026599050443659955 0.3712527090804081 -0.7576456201991322 -0.4884931893234217 0.7059601229325847 0.22593900811419165 -0.8429482042232146 0.45348780038291414 0.026805020806811353 0.989270269865191 0.37060395675568536 0.013304271680220525 -0.34576976498797407 -0.15512511219353842 0.5487888815634527 -0.8939989895968508 -0.5106867963755841 0.2219416920286752 -0.5573181388508575 -0.9847469430363867 0.23112318256033926 0.3808591662785421 -0.3315608833303121 -0.7963044808493749 0.2551960599036942 -0.048768455772422836 0.7604229696152689 -0.7120719170701679 0.19217324086219145 0.35774517444704546 0.7036303804857844 0.4554011229490733 -0.29553704241836565 -0.9949541433342108 0.714959400846086 -0.5625672363659644 0.12641582195029488 -0.1188551168402725 0.029605920250725948 -0.2119047847841471 -0.9264109367270761 0.6411551482107407 0.32653099643848704 -0.9400029271412298 -0.021903965665240888 -0.32983519975526887 -0.7033405085374569 -0.631691196159633 0.3554440336835527 -0.26414655663843956 -0.7327442340569708 -0.8397598680003628 -0.17719340015915752 0.7964703024320468 -0.42820431125137426 0.5043826590770017 0.8706269549059167 0.8097256755699656 0.7311992158077714 0.5678452477890246 -0.6354678500845752 -0.6935120695625936 -0.5082877134548289 0.057243147473044376 -0.0021808282947801683 -0.318754814484443 0.9544919878833549 -0.8696895266290117 0.4107769237504564 0.13432970018430157 +181 161 0.2691773165049356 0.42576501717176174 -0.794319162443722 -0.9375502884108848 -0.7421333419012057 0.3984376524103572 0.03626994527865546 -0.45428265556791203 0.9737148760579102 -0.6120578744701481 -0.7403135861687782 0.794450032576143 0.891619076710269 0.9119879274478571 -0.8055218790829517 0.6478144615240362 0.6826651849185648 0.14526648931089015 -0.31492850884027557 0.018495164022214183 -0.8670497555338499 0.42784995803779324 0.15187625358998869 -0.517264137773283 -0.07370265546294141 0.24616517694636642 0.20940539348183673 -0.7564455854463683 -0.9095390468358755 -0.07599693995002421 -0.7695989590673997 0.7834495324233333 -0.030752889971491282 -0.6931355404167345 -0.3268417621600752 -0.28023549172974893 -0.29030082031688065 -0.002605918547171626 0.540226233839544 -0.6277403019848027 0.8454102857116454 0.39314389418100903 0.9024819515189941 0.6570100513869859 -0.2139622251129245 -0.5929408344261999 0.460637278141268 -0.8604667285863701 -0.7235399947937922 0.42417419124091693 0.8027644175065942 0.7264869411946597 -0.4219896658166926 0.6521012318056185 0.16181179719588878 0.7131928226388566 0.8858324868190659 -0.6295069388472525 0.04472782645797846 0.5915815327154261 -0.9695857684213791 0.6968290535894031 0.9880279271444377 -0.7869542172893138 -0.4607665404909942 0.8754070611380462 0.002478475817298653 0.994276587462837 0.5211642063275059 -0.14790150764961196 -0.6832528257966559 0.8619414370516842 -0.7795897097910331 -0.24347174338506616 0.7395691815092449 -0.4079415720281703 0.28715418680937055 -0.5340496925992064 -0.7789536253366787 0.7020982902338562 0.46141738023240153 0.15305003902644598 0.18714567903555857 0.042067535295315484 -0.37433258788571133 -0.44127824366528823 -0.5281028491295485 0.5568763942235762 0.9315963517759456 0.9543213147616141 0.9379554449580394 0.6493528139611053 0.5457733549973918 -0.0678471581131388 -0.37224188212351494 0.2393938179858366 +181 162 -0.3782195113973388 -0.2831418439421838 0.5882153140424304 0.5861400244347947 0.23666560122957225 -0.5432546116211487 0.8667314378127959 -0.3090965058201458 0.35472975302079135 -0.6515687780048862 0.3017080189016672 -0.3669502171146508 -0.701290845870467 -0.5647743817492386 -0.6227921356579256 0.7679605650773595 -0.4999337831642392 0.37536197005304617 -0.9100787928522012 0.019321408020572584 0.06510823760627127 0.0069088878147356425 -0.8021174067431267 0.76127750428999 -0.016949466434626803 0.13257455013881803 -0.2335846347407542 0.16489172295919596 0.2199304434975271 -0.18631161801360863 0.5248387667623824 0.7394397162224382 -0.2673439291773123 0.510769446565974 -0.13300041931399909 0.99765143919084 0.2241735241050229 0.05504901975631027 0.9601263362869747 -0.3208459036753717 0.6829169200320166 0.823956847862185 -0.7984204393641987 -0.45833035624161544 0.5021121563666966 -0.5410149048717188 0.9653302079686059 -0.0853538574411592 0.4613826549013902 0.7625037180395653 -0.9859305401288392 -0.8139044132604083 0.8311501842876423 0.984728362407782 0.2664977787268292 -0.3282214261911971 -0.8411358189093492 -0.48859316657994856 -0.5634777652875778 -0.3619948695149189 0.12663581755592146 0.5220741140143863 0.8340289200710311 0.91372938427343 -0.9715007951816381 0.8416333411505177 0.11357042956573737 -0.1456808910279359 -0.5674486058062436 0.06768388096831557 0.759051811419265 -0.5735276687549637 -0.8909097190116821 0.02600922555558327 0.43858836566974424 0.1912540824521014 -0.08272993932315553 -0.8568064910603785 0.7123604577618459 0.1214688038394951 -0.39515615277437033 -0.843937925119391 0.731744557396977 0.7758668005782297 0.5880216997674217 -0.46942273042750315 0.21097887519402136 -0.5139495212126779 0.8507404423844636 0.43940844789700506 -0.5568254446558574 0.9353209488924601 -0.17625432761014626 0.006396138124675765 -0.6711732555328915 0.13602359859751556 +181 181 1.0627628778637401 2.18099347132606 2.4889200934312212 3.0329000836878173 2.418471866649666 1.792850484262488 1.8114989882430537 2.5019860929097897 2.63269571514731 2.303214169876112 2.302078286896096 2.2449655484495743 1.9653498680093806 2.656655249096758 2.3366865720652568 2.2521459946985285 2.383971134374642 1.5096088508663448 3.0016890503931273 1.0748443332232391 2.5024136832935087 1.05634684455685 1.9786401101251947 3.0139285526480535 0.9010507431007577 1.4222614988413531 2.198335824794749 1.808613554125026 2.199406709115171 1.179718983370097 1.8237858381263432 2.3546931683174295 1.5207244713674875 2.484135639268342 1.5184023383411416 2.1630017058060624 2.017102434859185 1.0579780379287806 2.6117631381790387 1.8302012225135171 2.559628986688443 2.0782882749413414 2.273657472207506 1.5824475231098802 2.340712831866983 2.0843357108035887 1.5872017868991533 1.2502542690849927 2.544784500008113 2.168439129568001 3.620918308425923 1.8018118100270049 2.8559456376466823 2.2033316948681545 1.0947849466219504 1.8671309361421666 2.761056364036762 1.9574708512064602 2.038996673699434 2.2910152299361424 1.8959889979426248 2.4379257536601924 2.348807564093031 2.0483472684595663 2.688686505835408 2.6670809787074474 0.8206831475656169 2.089849018501815 2.4408738549357114 1.4491954643812508 3.2731103342017884 2.3967143937350133 2.602837946272348 1.3071599360669763 2.7356560876940463 2.2837477755424755 1.7220784441087604 2.362125464327887 2.607916996475502 1.5574885272277843 1.9881631105152797 1.3840817611431255 1.2748690570057941 1.7245883901028503 1.7339470561674946 2.1900557201657644 1.8931575491546906 1.7302688053278696 3.019126452523451 2.5322872299785315 1.9672610414071394 2.5299047200920706 1.63527863345458 1.0352350047418617 2.272704968250154 1.7879448523494184 +181 182 -0.1225195733940021 0.5856967142976173 0.20571823010290546 -0.8203208045438355 -0.8898066032309633 -0.7139945666451166 0.2938490920775554 0.7854034057371089 0.7749466026067029 -0.08379530214997555 -0.7518865639012169 0.9186673103054703 0.258286165888195 -0.31952466279295 0.5273237052096373 -0.016912784576367024 0.5282125817659413 0.7040222654685127 -0.921209093236818 0.044607996800345884 -0.9637977755006162 -0.24513378486290627 0.8859513445753813 0.8602644561180082 -0.701908252991438 0.4197543828494039 0.7835025947627985 0.3102594639245182 0.16784656871093784 -0.337034556187666 -0.5113657094834914 0.20208947485886175 0.4654496326512203 0.39790995789858075 0.9555153985869793 0.5205268677651003 0.7767268978430142 -0.5243147994416328 -0.3847076608245448 0.533357915223609 0.7450651236276915 0.13975537724160048 0.00032065616384246987 0.1462798749684311 -0.7103263432325675 0.2704145347111233 0.12163431782473788 -0.1582308361655087 0.7297490394264083 0.01681417343878877 0.9982255159505606 -0.07249261474790725 0.6029823370660483 0.177071701117949 0.4200538423667344 -0.18129793465299526 0.8155340741562374 -0.193459969887406 -0.7195151601562777 0.9019059024202942 -0.614795895257209 0.4142333752951779 -0.4119371074511977 -0.20830560390264985 -0.8928557957913581 -0.25669044905876026 0.6099589974124529 -0.41858865425952274 0.55861731539637 -0.8283662896102708 0.894684011091631 -0.5827367729819053 -0.1772866791372496 0.1502244809876485 -0.7019687029903816 -0.8792900020396639 -0.43824977632356643 0.8002432280711238 0.8034990996419973 -0.02065732416403465 0.8096961649485142 0.23461118614474885 0.127451566777121 0.24135434391192012 0.04436207388765179 0.9765629302059664 0.9706965299626509 -0.514472782847728 0.7225039675131266 -0.8876746879797777 0.17046173669151954 -0.2838736251756879 -0.12348658184157912 -0.3314873504777871 -0.919923231844163 -0.7142646146966898 +182 161 0.7955487319902517 -0.14286861822701002 0.6164356783612075 0.2501524480235291 -0.7815292595661811 -0.6637632768391972 -0.02404363794503883 -0.6669354806487637 0.5066168868574576 0.6114786174563889 0.42574612033718373 -0.3346635278846217 0.47479205936696434 -0.5823167388147017 0.916901962535263 -0.5591966582010441 0.17961175177555977 -0.5513211996179472 -0.38154403066228504 0.41407347408172135 0.34750163152995395 -0.5189769331112615 0.9734594705357362 -0.9776781942473289 -0.5472441330115714 -0.7416148044666218 -0.7335069093035425 0.15854173163002017 -0.7179695082299107 -0.2741850720243322 0.7206398931600968 -0.0283452161494393 -0.5492810195233848 0.708482149602818 0.10890778681920521 -0.9647530481675117 -0.3815176096080761 0.6360817111859685 0.8516971561220263 -0.0955808236598803 0.3274488344921458 0.6477227484319741 -0.736196642627533 -0.6190410518435814 0.14814119891160815 -0.2862222221303914 -0.5582985186303222 -0.5912670582869539 0.15355327440918587 0.8676926423440465 0.11004798786888337 -0.20165802595627702 0.13339667806998357 -0.6716970988511328 0.43667064771878006 0.11471363700332282 -0.13119409936468385 -0.9104597896913154 -0.11515986566610503 0.9050544123333597 0.6258077911012208 -0.6548499911550565 0.025870126110542513 0.7179430994128708 -0.3720498102143952 -0.2335659867236033 -0.7286608345958803 0.5588879176835284 0.17529777681422942 -0.4191681579786821 0.864267743421181 -0.5937874942696926 -0.22271966072213334 -0.507003941159414 0.3203401803908077 0.4211642944442917 0.5790469588454414 0.7958449130001408 0.985304519022542 0.08296126964186801 0.3756108256106607 0.505284658245732 0.7216461215132093 -0.05692236388861427 -0.5311466974234709 -0.40541715178408255 0.9568762098181829 -0.8520813060724084 -0.7706191931061457 0.07985899872554825 -0.40047804432046585 0.14012750727729295 -0.8548342597055505 0.5584041511594862 0.2916356968204279 0.509140003054555 +182 162 -0.7279618018526866 -0.12513591273777003 -0.8716457472374355 -0.8426900198489358 -0.5245324893638723 -0.25345575775920914 -0.5446566280769507 -0.6133521553794072 -0.6204032179595314 -0.5503194928944339 -0.7171807102665266 0.17837529834794452 -0.5428542377020007 -0.9640576306585138 0.6614226660386815 0.8231602300416194 0.6565591611817863 0.9262368547747777 0.40698496592545386 -0.11911950367630375 -0.7696195752322825 0.19873832227216814 -0.11686742260695993 0.5502686099058687 0.3651884242654222 -0.5201392084201515 -0.9129950047307989 -0.47695554961842546 -0.5031475112355988 -0.6400267061372502 -0.5476080907828134 0.5598501723903484 0.05362614638639185 0.13633624083146922 0.9576155616791469 0.7697604342308588 -0.10198263125107032 -0.12546245710086623 -0.06601390133216256 0.24167850969685856 -0.28733284364047296 0.9866379541543027 0.20421029691586545 0.3019370181446266 0.020309571433291707 -0.6893095149591899 0.9618669920669738 -0.2710974765324725 0.3803531967086373 -0.21664538230824815 0.03723746319539911 -0.7436244634059344 -0.11260524674072259 0.8611177793055242 0.438678754959849 -0.8202250108335809 -0.5900986272286155 0.38749437927485286 0.46093012145367007 -0.6140448428186751 0.45627140754604345 0.9340665206403151 0.9003144269299641 0.25917744366022233 -0.6039148934075451 0.16335410551441698 0.6325401957074039 0.7899297455429262 -0.7920184022818337 0.17010774496270864 -0.5321160667723877 0.5342794092046521 0.5871491333066436 -0.32322345641156924 0.7640273378840319 -0.2098057733842773 -0.29891792343814716 -0.2824005368081268 -0.25454468863897683 0.5987107575006831 -0.8528417745433368 -0.08947246107554174 -0.6359574801628707 -0.5716554506183595 0.7038012731186727 0.30017113284734065 0.446330219548718 0.5484119351756258 0.6093921011258845 0.6744503543295972 -0.28296988882477936 0.4715530915184325 -0.35838875931504255 0.4704468883934412 -0.7060662492178831 0.4662486809251083 +182 163 -0.5271518838795302 0.38530349266671826 -0.1741445638525092 -0.958867250912911 0.5740440970858729 0.8122846310040528 0.1430836408666487 0.08721975506578383 0.029122282378708064 0.39237337524907256 -0.42838713809472595 -0.10780605261281706 -0.2860102456441602 -0.9166158293722675 0.8918795971957485 -0.2754845108063839 0.4734830019640661 0.18815216734736073 -0.03318413691916566 0.3183174426134632 -0.22963849331948105 -0.6757877843516791 -0.21827751496243408 0.8326122864540297 0.8463736556216057 -0.9609722763718656 0.9457633275659898 0.09459498815925316 0.8637120339448849 0.7702109077603696 -0.9949694013329811 -0.4338441076744328 -0.021486010130131294 -0.6829901921575603 0.20786624922663122 -0.7070467200604671 0.8904813178587843 -0.38634522386549297 -0.8755208436903397 0.23699398149049467 0.2504938367963985 0.09231828865756131 -0.8863147477729865 0.5903739885920978 0.9989976218468972 0.10113237859347479 -0.4647653802081255 -0.3709099498785273 -0.679128864362522 0.8550388066080223 0.9718451168013105 -0.03145258920995175 0.6627441327292876 -0.7189819074648012 0.6108416694151249 -0.13397072277964917 0.6694447701375594 0.3311949815618713 0.07684586335846233 0.15612310957764364 0.493161675767708 0.5471168101820314 0.9761867920691472 0.1185360903874706 -0.7005926707282633 -0.1294915467761455 -0.750151749394159 -0.590606969406519 -0.6525002463391683 0.5110566334470428 -0.7351069315369141 0.8038270261423885 0.11361691977790755 0.3230600240657384 -0.9124121900747266 -0.8061462380513014 -0.9521544702137372 0.06956656530340011 0.020843316241511367 -0.4858194024545841 -0.10404693686964817 -0.656056858299576 -0.8699786083686278 -0.5541735746795655 0.3607998299597377 -0.44153510093961934 -0.9124306589090692 0.15160117071884338 -0.7088917159930348 0.2719777156677745 -0.16937699265696038 -0.8791705605735018 -0.09235752861602764 0.5191663376743261 -0.826403129081309 0.2621431695407761 +182 181 -0.1225195733940021 0.5856967142976173 0.20571823010290546 -0.8203208045438355 -0.8898066032309633 -0.7139945666451166 0.2938490920775554 0.7854034057371089 0.7749466026067029 -0.08379530214997555 -0.7518865639012169 0.9186673103054703 0.258286165888195 -0.31952466279295 0.5273237052096373 -0.016912784576367024 0.5282125817659413 0.7040222654685127 -0.921209093236818 0.044607996800345884 -0.9637977755006162 -0.24513378486290627 0.8859513445753813 0.8602644561180082 -0.701908252991438 0.4197543828494039 0.7835025947627985 0.3102594639245182 0.16784656871093784 -0.337034556187666 -0.5113657094834914 0.20208947485886175 0.4654496326512203 0.39790995789858075 0.9555153985869793 0.5205268677651003 0.7767268978430142 -0.5243147994416328 -0.3847076608245448 0.533357915223609 0.7450651236276915 0.13975537724160048 0.00032065616384246987 0.1462798749684311 -0.7103263432325675 0.2704145347111233 0.12163431782473788 -0.1582308361655087 0.7297490394264083 0.01681417343878877 0.9982255159505606 -0.07249261474790725 0.6029823370660483 0.177071701117949 0.4200538423667344 -0.18129793465299526 0.8155340741562374 -0.193459969887406 -0.7195151601562777 0.9019059024202942 -0.614795895257209 0.4142333752951779 -0.4119371074511977 -0.20830560390264985 -0.8928557957913581 -0.25669044905876026 0.6099589974124529 -0.41858865425952274 0.55861731539637 -0.8283662896102708 0.894684011091631 -0.5827367729819053 -0.1772866791372496 0.1502244809876485 -0.7019687029903816 -0.8792900020396639 -0.43824977632356643 0.8002432280711238 0.8034990996419973 -0.02065732416403465 0.8096961649485142 0.23461118614474885 0.127451566777121 0.24135434391192012 0.04436207388765179 0.9765629302059664 0.9706965299626509 -0.514472782847728 0.7225039675131266 -0.8876746879797777 0.17046173669151954 -0.2838736251756879 -0.12348658184157912 -0.3314873504777871 -0.919923231844163 -0.7142646146966898 +182 182 3.8097983812923886 1.9244124167204337 3.5633290012267578 4.223283101055234 3.590481186552914 3.5978269842617485 1.8711341671480115 3.9148632875448657 2.90235106159699 2.2651269360129733 4.053823912908469 2.076234966621559 2.8611754923083144 3.3690873310870293 3.8312381996309353 2.6108018691184434 3.0082152334043366 3.92450578281212 2.85009359399539 0.9136468390144448 3.2633169348687403 3.075739583483255 3.621936080510484 4.614079906098672 3.156307630721245 4.040604046774819 4.639227885119647 2.5302871954411508 4.0336794547663315 3.189592580235537 4.014700560444872 1.4709229520602305 1.493681938844898 2.9689375669776936 3.3784971148642775 4.497829471074139 2.8778471971280704 3.0964215623158413 3.9373853257738034 1.8967859474852693 3.5185424847504088 2.8854841956961956 2.7708665062696527 2.5535433560432335 2.707937916621205 2.7621927550221184 3.101419768840082 2.5010284905822004 2.0114950183401206 2.7369782802439135 3.105808864201932 1.7746505436311297 2.3897569035275326 3.522581631141058 2.932953227650909 2.3885040938974527 4.024651152774326 2.4109092431063623 2.4740190839613865 4.185460568129799 2.6280612467201694 2.9326894314969802 3.511546886973079 2.001147103517758 3.208655583596414 1.1247319867444143 2.8421241192221327 3.663220512849547 3.1708929542055433 3.4628416663287025 4.5234525512853825 3.519177734736188 2.576313291116974 2.7184300570440945 3.616244328313845 3.21916978041045 3.1427157035769246 3.3466417270217064 2.5698399663555724 2.4224748465535266 3.2286275205885753 2.651465881338345 3.0765870259226595 2.882457373862449 2.633750863373776 3.100226225793976 4.4419282200950985 2.9753787518431576 4.483405817107328 2.671753322737081 2.34956206942881 2.5925895757606647 2.1859983786936583 3.308398289071886 3.2293909150703106 3.0381801163596744 +182 183 -0.7307345390295346 -0.2478132227950598 0.8392124442838025 0.4410217341714211 0.025870202818712107 0.5259980634741384 -0.32133686987336096 -0.7823701580748934 -0.6454021791509847 -0.21512359939836223 -0.8180464237192122 -0.11399110688525704 -0.34230011584736997 0.5209744625201089 -0.4625273164152972 0.6763791177954448 -0.2866471082089799 -0.8883907429494415 0.8072360797138103 -0.002209528924570936 0.5452241853917454 -0.483630132788317 0.8528817556434305 -0.8607255643187623 -0.3355599227223507 0.6453430122318013 0.40000406432826763 0.8364063052636885 0.8742190675419848 0.1968499629799807 0.28240904064482075 -0.0440451542074114 -0.144364180344974 -0.4568200049771851 0.3652935979757048 -0.7575512937226891 -0.4979709023588714 0.7423320393547532 -0.7751708041717773 0.4245726741499056 -0.9591302518169418 0.2951544683350362 0.8512332764014883 -0.3573839678955102 -0.3435230358139041 0.965767104753682 0.4936416216586441 -0.44370948160166734 0.033809582500361035 -0.5092403956483791 0.8909609186252057 -0.3335524174786453 -0.5187126380961578 -0.46008656738239795 -0.5410724930340232 0.8832808935511176 -0.9036787329569602 0.537462490272683 -0.9046718056896532 0.6085473110224031 -0.18922174089779364 0.25138651380320387 0.6649749149011 -0.41599318854575107 -0.23399897763120037 -0.016654935363628276 -0.07352959429587158 -0.9084848589796732 -0.4469366895033513 0.7881430178838909 0.8785579186734545 0.17756954509934397 0.9778713562393284 -0.8709810054129483 0.5257943360350841 0.44881969880218353 -0.16432382929144307 -0.4883291547752626 0.08418401627241767 0.8866533828648822 -0.8888705117626905 -0.5065075652935955 0.41742778376926903 -0.5980635739467945 -0.15516138025847592 0.4797114403728977 -0.23800927744545008 0.7729355408878964 -0.7368108921728169 -0.20117051560147736 -0.6672280170533562 0.7248548692416987 -0.29932897779544 0.511342912281602 0.45585351060659307 0.4629860468959517 +183 162 -0.3708311949029206 0.9600783645054414 0.6277145584053194 0.1240807747236734 0.7724369545337026 -0.6920491208302084 0.3944226177615271 0.3472849422254749 0.1040636611303345 0.353929005211735 -0.4477770787420181 0.15238979007303177 -0.915487108473857 -0.8313909059717024 -0.5994060400397745 -0.056365901099655114 -0.8894334574915723 -0.6081284326803782 0.05307995989350589 -0.448161721655685 -0.2750112968829612 -0.6585158641645155 -0.7374803169696378 0.5619213406944386 0.5641247384838437 0.014347904955767321 0.16911590164217993 0.7127904062718526 -0.6568867855357592 0.3355496581662829 -0.32209126647865594 0.7811504960194595 -0.9375964874517682 0.7601401628557849 -0.7441153218646801 0.8082770712501093 -0.13915739954663975 0.9070860465151613 -0.47381177197086655 -0.9500352060700732 0.7492276104338007 -0.5965864072756766 0.7910703094516771 -0.28947198687859066 -0.6060972270060079 -0.998871812589144 -0.17936600065267716 0.7076344215262471 -0.08132477508867986 0.09230009559432717 0.7031677854330365 0.7029087485576699 -0.786948028793907 -0.33335360437607986 -0.42166450367046404 -0.8200143697630171 -0.44612454106329147 0.2847008191293665 0.8351858354709014 -0.8082265460332576 0.2637394866721319 -0.3935085123255011 -0.9845136712024913 0.6138777602178307 -0.2792679174940047 -0.9714182647348248 0.6909726811674968 0.0077037937779771415 0.820384781009929 0.49716933925729556 0.9646462699533478 0.20878630324754743 0.2773944903039638 -0.5040827817269058 -0.9971484921350993 -0.15141036503522032 0.1326635227579096 0.08360244527648297 -0.5114170364871156 0.9542995822294009 0.14833738183946177 -0.5811937764380197 0.07041109233551679 -0.4331167750387701 -0.672377798391639 -0.46125486895127144 0.5564394867631801 0.925086353915598 0.6024942958094077 -0.8865449010222866 0.1859699242592796 -0.5857220430311105 -0.29531554616546085 0.14918389408337251 -0.42463759395819234 0.7811494186230663 +183 163 0.7372681491364521 0.3697489831091463 0.020144763241743524 0.9516290172877231 -0.8487576166647235 0.5938087920794493 -0.08600788711708973 -0.9408211146594088 0.5740352922494905 -0.36216101994680594 -0.609780768515285 0.5786062149810656 -0.36604821394625886 -0.6093762703836139 -0.946730231055841 -0.9648552319190877 0.36951664966279285 -0.76225245333078 -0.5210530024814826 0.629601910506181 -0.9841610657853372 0.825791475970256 0.1262448655427626 -0.9388163236930929 0.4385974214730093 -0.9076300886150133 0.40375711127350633 0.7937411280462376 0.4363154467494412 -0.6144739506997003 -0.23097616324255 0.13697318842616357 -0.5353379841318018 0.8182710551175194 -0.1829655975379183 -0.6676232445197217 0.7617155261608857 0.7048146725790101 0.8100533243436379 -0.13860003376375318 -0.9087053861501164 0.3126580177414531 -0.5945797904737271 -0.7178642915528699 0.48422857409350195 0.6307084679034767 -0.6571454047079419 0.14902314478250034 0.8673361907318142 0.6320737664053084 0.7190954611111184 -0.33052509699924304 -0.08032564421423816 -0.10383751064037616 0.97105329766989 -0.6921146030485583 -0.2538427182208096 -0.4553419812158086 -0.9768913762517015 0.3218511993082487 -0.47207158005759475 0.723554202503093 -0.22639740917509554 -0.5811360333090305 -0.05917067005558341 -0.1875409391413283 0.26873111664450744 0.9571205876273576 0.23030460541078424 -0.1738189060946147 -0.8262492250809084 -0.4885280286319982 -0.014841828478630692 0.9685401930953503 -0.1967158963114677 0.7953359040389287 0.7171340697877586 -0.2733644378105218 -0.2052542490569318 -0.05386593289507613 -0.0795693637105086 0.10490350299742457 0.5157055799738943 0.5114094440935177 -0.18113864301642435 0.5213677507885457 -0.5645545422548555 -0.5060931932483133 -0.12754702863384448 -0.2514465702577353 -0.48061220765958756 0.9680450824930953 -0.566451092415144 -0.8428648568195936 -0.22586246488207218 -0.3290359872974258 +183 164 0.5269993159974633 -0.44037609570955283 0.6403711909141034 -0.27415951712783215 0.9229351130741554 0.45124870271558537 -0.8199324689336496 0.33519910042586787 -0.13774535001340715 0.7436874838744194 0.9133612295038769 0.5560340044338485 0.07539089419531719 -0.46879814620629223 0.15675779376916799 0.9897708998342856 -0.6388161371966323 -0.8703066991307411 -0.8718793103113567 0.12620347785556163 -0.14070359832066015 0.7912429650510922 0.46975790855779476 -0.7625345169436744 -0.018732605526424972 -0.3208225128003219 -0.24414437255754584 -0.7143119368913649 0.8150627693718819 -0.2538085192770383 0.6884248773455339 -0.3168396155783135 -0.9410260997386597 0.6154369618668842 -0.16196384311771328 -0.21660537262815738 0.5067661985393359 -0.5399468429477619 0.7633094097923874 -0.07871068241885215 -0.6425455436094496 -0.46266205916341785 -0.20779061986641945 -0.754081424931081 -0.5334727112270228 -0.715195533178635 -0.22688844777229566 0.5880902927182188 -0.8427352552824854 0.7083825129729677 0.21400257815379176 -0.7008746373402928 -0.17988820122659988 0.7120659041941761 -0.016710783697119647 0.39149832626624725 -0.38199736463451117 0.7699044810706457 0.9096879458703511 0.7379472200628228 -0.837899854668261 -0.8968143489301621 0.9450496049316786 0.6790671248199491 -0.557302060144705 -0.8401606330921838 -0.3796447260549325 0.022511822761623446 -0.5843374746668537 -0.4467698729594365 0.6819794900497125 0.6445306786106257 0.8795244369489559 0.49067677349814454 0.09737321958843359 -0.46247835063041376 -0.9054581454020618 0.476691762604438 -0.41022955793455806 -0.4692825029966996 -0.027792979182150956 -0.24278414177701935 0.26916973729299065 -0.8087244802266065 -0.5532097547408332 0.8234290661365584 0.5134972430634617 -0.6614555397565778 0.10245361456789714 0.15920441179444333 0.3003542861544053 0.2450107258589984 0.6572831400136727 0.9089694577361784 -0.3908396388982296 -0.5797420334389356 +183 182 -0.7307345390295346 -0.2478132227950598 0.8392124442838025 0.4410217341714211 0.025870202818712107 0.5259980634741384 -0.32133686987336096 -0.7823701580748934 -0.6454021791509847 -0.21512359939836223 -0.8180464237192122 -0.11399110688525704 -0.34230011584736997 0.5209744625201089 -0.4625273164152972 0.6763791177954448 -0.2866471082089799 -0.8883907429494415 0.8072360797138103 -0.002209528924570936 0.5452241853917454 -0.483630132788317 0.8528817556434305 -0.8607255643187623 -0.3355599227223507 0.6453430122318013 0.40000406432826763 0.8364063052636885 0.8742190675419848 0.1968499629799807 0.28240904064482075 -0.0440451542074114 -0.144364180344974 -0.4568200049771851 0.3652935979757048 -0.7575512937226891 -0.4979709023588714 0.7423320393547532 -0.7751708041717773 0.4245726741499056 -0.9591302518169418 0.2951544683350362 0.8512332764014883 -0.3573839678955102 -0.3435230358139041 0.965767104753682 0.4936416216586441 -0.44370948160166734 0.033809582500361035 -0.5092403956483791 0.8909609186252057 -0.3335524174786453 -0.5187126380961578 -0.46008656738239795 -0.5410724930340232 0.8832808935511176 -0.9036787329569602 0.537462490272683 -0.9046718056896532 0.6085473110224031 -0.18922174089779364 0.25138651380320387 0.6649749149011 -0.41599318854575107 -0.23399897763120037 -0.016654935363628276 -0.07352959429587158 -0.9084848589796732 -0.4469366895033513 0.7881430178838909 0.8785579186734545 0.17756954509934397 0.9778713562393284 -0.8709810054129483 0.5257943360350841 0.44881969880218353 -0.16432382929144307 -0.4883291547752626 0.08418401627241767 0.8866533828648822 -0.8888705117626905 -0.5065075652935955 0.41742778376926903 -0.5980635739467945 -0.15516138025847592 0.4797114403728977 -0.23800927744545008 0.7729355408878964 -0.7368108921728169 -0.20117051560147736 -0.6672280170533562 0.7248548692416987 -0.29932897779544 0.511342912281602 0.45585351060659307 0.4629860468959517 +183 183 3.4759298712244044 2.7174117957129678 3.4465226244240617 3.6904417318010827 3.419458742258942 3.2294646613637576 2.6871391785505763 2.8254280612425466 2.7446308898344958 2.556718392685453 3.5464082883612815 2.339166689621052 3.019753051963904 2.850650868412072 2.7123831648459866 3.913143522293863 3.4779652237509127 3.4012884393952456 3.2753135812810212 1.6552983036015625 3.4705268548388464 3.8479701984967236 3.2670792352236697 4.303883372118228 1.839107490707408 2.7596969918048107 2.355393040147102 3.6559854787319406 3.158596617895229 2.162300674089499 2.5151437857595926 1.9331261192282425 3.5719517421414393 3.4157222946091608 2.0141064889126112 2.7393015998467805 3.0283038730548886 4.085082487186911 4.290131599283368 2.6053444883604113 4.259281428771587 2.001794350330104 3.226485704176537 2.8822645834445657 2.8631732599147757 4.532885109432062 3.3681042307316593 2.92694872478433 3.1729509454814493 2.697816205503634 3.91704995117572 3.6755826669613088 2.1058743027176914 2.8059272501701282 2.250315572189735 4.453119559820981 3.602024035741975 3.3767381700567487 5.417449279013789 2.9061408629366943 2.7764480856914395 3.574016294624313 4.157331483882421 3.0800020308474316 2.221868646767776 3.5259922776319854 2.040889546775057 3.696455363937128 3.9250487263889475 3.0414819691429016 4.535237279995849 3.106127871478825 3.1849611239912012 3.898807948088458 2.544168745379274 2.6367121652722503 2.8322065345989675 2.65423622328404 2.22153618745146 3.3550190454306925 2.6590044836519833 2.429437423068414 2.1860679828671854 2.7932572142852052 3.282351501339434 4.069436100335921 3.0252124980825617 3.981383539516937 2.451506684524875 2.6067344904095173 1.8919732167276935 4.1161116177183175 2.5823871400321687 3.538372018381172 1.9535924042751198 3.4342143481722913 +183 184 -0.43060581763941275 0.5657419303343081 0.6168375123073009 0.9472389824564156 -0.32603748320346604 0.3537031941027051 -0.4678575150679767 -0.2890658750949384 0.3708923836151179 -0.10600080593732142 0.39874039310385845 0.6091273241058641 0.5838247618749823 0.06269791511356249 0.016903899174398385 0.2719161490829367 0.7242261665258289 -0.14753206969416244 -0.8527370437303325 -0.14330173304958516 0.7247317857312758 -0.8202861729337374 0.5829548626310352 0.8163470461904596 0.21672698671374602 0.5047482024969652 -0.45754117743095457 -0.13551800262152303 0.12851978184354307 0.3218304720066498 0.8315048267144942 0.3904770521217831 -0.33102249106117454 -0.4338251680907286 0.5534624083374107 -0.20603876946797728 -0.6173597247017004 -0.1920602632376749 -0.6588611582028345 0.4073993688313189 0.3899359898045427 0.27053991122186694 0.23157232788033677 -0.6196538574316768 -0.16699355766587964 0.8475752753639392 -0.9339587455220264 -0.07546027614263329 -0.9176484853024967 -0.1990031445497802 -0.9120750796123389 -0.7942173576121601 0.022818247149655857 -0.8468125360816618 0.04909228119515596 0.9490652438209324 0.8604984220141298 0.4138178187178021 -0.833987834557472 -0.0442217926288242 0.19990248452877823 0.6947388366651561 0.47074454005343336 0.18789785874270049 0.3737234023985381 0.6125908808746943 0.13367598485218624 0.8745047168019959 0.9026021018150883 0.8694779086414992 0.2135959754054515 -0.9821045745733079 0.31531223662354746 0.6886889669834118 -0.2575714383007446 0.1333061919598737 -0.17238365088943786 0.38799379275779455 0.8552767646845447 -0.8067320454804017 0.5944979854741326 -0.9858890748014177 0.23236443887551128 0.3264110808103251 -0.9087697821482432 0.821429205140993 -0.41036946213379966 0.3254706794985591 0.24674211763817344 0.1816551890169693 -0.18275574910151815 0.8875125059561682 -0.6361150046540269 -0.877968408314042 -0.3784522093660405 0.33492415451502167 +184 163 0.7153710514893934 -0.4590750275181621 0.08909818696213212 0.688730622684617 -0.36911215875863035 0.7116827194508499 0.3956924043683223 -0.3525171160930749 -0.7652236652205058 -0.7148454317513562 0.32929083434288864 -0.2641918094127895 -0.19851408900244594 0.05304892252214932 -0.5952809928086005 -0.6799832510540318 0.019662585682884703 -0.5885043198518987 -0.8601967531931329 0.23035378813279617 -0.7944387299535627 -0.47697402510324083 0.6722961637833631 -0.44028651546530173 0.5544671361728246 -0.2772082090239094 0.5872827128344178 -0.21945394649860628 0.5903365384121848 0.8350205140235605 -0.6014302280824453 0.7329534130637296 -0.4542887604857906 0.21680608497475795 -0.05451352500773443 0.37605390467665356 -0.5281428335366669 0.9375223191109234 0.9699640967350418 0.8775243195499858 -0.8821001191566502 0.3630255174581276 0.9385500561556104 0.513574076750412 -0.15628062142640586 -0.6228890386433086 0.21164267398128267 0.23365683261648273 -0.27947955859474694 0.929393983857812 0.08002557867568183 0.5832262141313209 -0.2905800784580628 0.8777044102276843 -0.018838171289905947 0.9358431652263277 -0.4811477972843523 -0.4428278381183146 -0.8157277539845913 0.23710939112173524 0.6324118478152743 0.9445680176708371 0.9690988612950324 0.22744996997216704 0.06749078475919923 0.24869341074873907 0.1625258299717327 -0.34303793601279975 0.7837292952684156 -0.2946995451776071 0.527740070039572 0.8144090017667498 -0.3705603138175597 -0.048259231455734186 -0.41571586764876 0.016731913034662815 -0.45923897733298547 0.3344548680360646 -0.014329788461730386 0.13942172887017956 -0.5907916957860007 0.35011558395035514 -0.15991938702134112 0.6177546317170812 0.5774157530102457 0.4173279096979541 -0.1225032480760615 -0.6378336944721523 -0.7361575846899355 -0.22235837245378942 0.9437372888863436 -0.38844354967829475 -0.7353326566527911 0.8421871856761314 -0.5887085164172279 -0.7679664255382992 +184 164 0.2700478131972235 -0.8726891142246855 -0.41052459514706574 0.22986773841432173 -0.31089555417919135 -0.7580606972306241 -0.8098861455101827 0.718415288264157 0.0437043815210183 -0.09681987436591721 0.7704230125836309 -0.04575111046929159 -0.36783284346465805 -0.42940149729522803 -0.8040422814520187 -0.4898676543349727 0.03660799266137538 0.876162574210011 0.6002798342574798 0.35739167080609 -0.680799663386005 0.013066932076577054 -0.9924521359162171 0.4581503427311935 -0.0427103309907213 -0.8886943550951212 -0.5047839316373457 0.2689984535305756 -0.4283477724257647 -0.7719643532471978 -0.014643258849932117 0.7783498323563005 -0.06501347839261817 0.5299796067794209 0.5069107649359983 0.10505516100342494 0.7436540390790269 -0.7227558295205241 -0.11720587369962132 0.10549556935044979 0.35784579949485473 -0.22325806916894675 -0.7399240754330141 0.6518422125039465 0.8249922137264598 0.6031934488328949 -0.1792246440293539 -0.09833948509787138 -0.8035394736397663 0.3711759565103874 0.6494664998985513 0.18916030215181956 0.7663772332416605 0.4241965803425414 -0.20193581137206995 -0.296017865586361 0.13807653236331152 0.264576287264795 0.7695586095217073 0.57950734136453 0.38159869825887793 -0.6261430938231425 -0.7633775657025412 0.8507002194386151 -0.7784205638514865 -0.27960191891370134 -0.6222535240587961 0.4014694485359589 -0.27196717324065167 0.5688160495240437 0.9173641771688259 -0.20248834230157686 0.6549129703779584 -0.6012652764665325 -0.2450609186265975 0.35449720661870354 0.9449917890732036 0.5486083171982858 0.18996435168321235 -0.3946962801840672 -0.4115561817666462 0.7347578559227173 -0.11852305660061235 -0.9800156278983987 0.06561261977197863 0.2075332109073169 0.5238387853504383 -0.23072308260637553 0.3531136357452971 -0.06808033336985253 -0.25384361445160475 -0.09619508363275986 0.4806885456359724 -0.5419047782672048 -0.7046124651877228 -0.32751366814210514 +184 165 0.9884343975073546 0.5624649804261328 0.9831001196252849 0.9677039584547906 -0.5136895628462765 -0.11915453290042421 0.6101613137531041 0.8845227882757531 0.26062880195066307 -0.6348141003053822 0.3008420825756868 -0.11061674217152184 0.39538290914450425 -0.0002165952841488572 -0.8167478556201264 -0.6215703474810081 -0.08391171383462637 -0.46523491102234793 0.6834879465226158 -0.046079029491291834 -0.5565115242762004 -0.35663726600954626 0.5175056622065675 0.4393601894529058 0.18563867390733124 0.43886720910999855 -0.9137465887581144 0.47962923551976444 -0.39656563009787793 0.9798054510157013 -0.0578957471203323 -0.10115559495198867 0.7296741656043719 -0.39295210774035727 -0.6920551248061817 0.9611790408308243 0.8322809601253507 0.9250143037932705 -0.9503988542676145 -0.2987059039410387 -0.05345640722782674 0.16380174456032193 -0.4768544707675917 0.5024790403682704 -0.45933010407479835 -0.5136231442834256 0.09249261811215703 -0.4697654237932236 -0.024843323931097894 0.7913809924571227 0.8544990991165995 0.26686152315800427 -0.4385697532435744 0.299402635598214 0.898249374972629 0.15673141585076555 0.08667731661274458 -0.1375585362987919 -0.8286551680600007 0.1673028552021063 0.4864654266009405 -0.6182782709459995 -0.7071720387968712 0.8336135452403399 -0.9112961673506779 0.028533527764482924 -0.19789060266461012 -0.5501682443829508 -0.9264370820024872 0.8752653614265491 -0.7059910913893475 0.2560774201920075 0.25564919860480817 -0.0800414683299635 -0.354255522506395 -0.7315995430458975 0.7161777374617591 0.06641700534309813 -0.08231763451811736 0.19565510221493487 -0.8004436012977008 0.1754968727032069 0.7767901007411517 -0.6839098460632478 0.896887874829309 -0.706404522203149 -0.8620930116541157 -0.4888543810291359 0.46844267006171725 0.7490220604995168 0.9286811254376188 -0.6685487370340897 0.5029055717906035 0.037130946736807724 0.6474080573864571 0.31311077546723154 +184 183 -0.43060581763941275 0.5657419303343081 0.6168375123073009 0.9472389824564156 -0.32603748320346604 0.3537031941027051 -0.4678575150679767 -0.2890658750949384 0.3708923836151179 -0.10600080593732142 0.39874039310385845 0.6091273241058641 0.5838247618749823 0.06269791511356249 0.016903899174398385 0.2719161490829367 0.7242261665258289 -0.14753206969416244 -0.8527370437303325 -0.14330173304958516 0.7247317857312758 -0.8202861729337374 0.5829548626310352 0.8163470461904596 0.21672698671374602 0.5047482024969652 -0.45754117743095457 -0.13551800262152303 0.12851978184354307 0.3218304720066498 0.8315048267144942 0.3904770521217831 -0.33102249106117454 -0.4338251680907286 0.5534624083374107 -0.20603876946797728 -0.6173597247017004 -0.1920602632376749 -0.6588611582028345 0.4073993688313189 0.3899359898045427 0.27053991122186694 0.23157232788033677 -0.6196538574316768 -0.16699355766587964 0.8475752753639392 -0.9339587455220264 -0.07546027614263329 -0.9176484853024967 -0.1990031445497802 -0.9120750796123389 -0.7942173576121601 0.022818247149655857 -0.8468125360816618 0.04909228119515596 0.9490652438209324 0.8604984220141298 0.4138178187178021 -0.833987834557472 -0.0442217926288242 0.19990248452877823 0.6947388366651561 0.47074454005343336 0.18789785874270049 0.3737234023985381 0.6125908808746943 0.13367598485218624 0.8745047168019959 0.9026021018150883 0.8694779086414992 0.2135959754054515 -0.9821045745733079 0.31531223662354746 0.6886889669834118 -0.2575714383007446 0.1333061919598737 -0.17238365088943786 0.38799379275779455 0.8552767646845447 -0.8067320454804017 0.5944979854741326 -0.9858890748014177 0.23236443887551128 0.3264110808103251 -0.9087697821482432 0.821429205140993 -0.41036946213379966 0.3254706794985591 0.24674211763817344 0.1816551890169693 -0.18275574910151815 0.8875125059561682 -0.6361150046540269 -0.877968408314042 -0.3784522093660405 0.33492415451502167 +184 184 3.9582173930206612 3.026967733176269 3.048494527503059 3.4519470014892737 2.1114628361055523 2.1834279410447746 3.5713434046471217 4.01686236942016 2.550368979926786 2.574243193587108 2.5529518581711157 1.941139481899488 2.5620228495573634 1.8767919091032554 3.1726379392684647 3.0887051360955438 1.9546326965128513 3.1077068244532504 3.8942202716053753 1.6574000966181945 4.16049681524479 2.176107349004417 3.8960371392193656 2.606126257058392 2.13053345165018 3.6652878712086308 4.076676431884312 2.522393741736063 1.7911526038752448 3.394951109500683 2.285227680544753 2.9562174181753624 2.210586217728885 2.0878821840387944 2.9106924001156633 2.93181756942774 3.7046543623159027 4.077597305207782 3.381079067413313 2.817676172628796 3.4146500318089297 1.7863364453540809 3.1652356997021167 3.799772895170939 2.3215386041120563 3.8935000500842647 2.8505917124416946 1.8468090321783892 3.29303333575497 3.4141329012488195 3.476175701779063 2.8869608683114665 2.074923971050382 3.554046310964722 1.8368600538369815 2.809539592521741 2.009506234736883 1.7466459315520693 4.068906070471455 2.481335802003033 2.7025332355060643 3.369679720802637 3.981383480396964 3.908927539339289 3.559272113175961 2.13323265085749 2.621342830063239 3.065290637777026 4.128136004274581 3.6160273132313674 3.999134763724771 2.8526891578667595 2.8413547314720713 2.2472832223474524 2.0398727752985715 2.9267060206950624 3.497684855003647 3.1400055417950945 1.9464526957063424 2.302005867096785 2.9832998310669367 2.592668706564936 2.3179005697273096 3.503891855102226 3.764363933635907 2.9174318985866288 2.8878075859282992 2.5654533137568656 2.823300656094161 2.4036718952538427 3.1271924698568503 2.567316829279095 3.7160767402124764 3.460832368158008 3.8772850760436373 2.8456452924227715 +184 185 -0.7475317989327244 -0.12127874899445623 -0.8534517380802533 -0.3546291757678923 0.39633004011566686 -0.17883268851027734 -0.5281825494822936 -0.9118533314923187 0.9605830349656967 -0.34779985267899494 -0.03866907391443064 -0.2260977977321088 -0.2415958729439862 -0.8634600446313785 -0.6330232173268815 -0.5966586285279658 -0.6899155292629633 0.23674484798393136 0.7368744926047486 0.8540800882045068 0.8221301171953783 -0.11359222563017779 0.5366143344688401 -0.23676737569138595 0.21549433678952234 -0.876606641460292 0.8529810028149158 -0.7028301721884478 -0.0004483503567247471 -0.29704306763937804 -0.28635803526894543 0.7929008658741088 -0.6058731853929968 -0.4198910693406426 -0.49007530446561987 0.40439272108967805 0.27544305717160267 -0.8394259066234417 0.5087968267934162 0.7468177610203741 0.9700672884182746 0.7485020508528275 0.009700235333308882 0.9405472967024078 0.23323208211725133 0.8127843265793429 -0.8312476513321843 -0.6811077730868409 -0.7099236797784314 0.4466146713591841 0.6329063089985278 0.28023599763919305 0.5366887173283434 -0.45999972511304854 0.1415997477633122 0.17539309973705053 0.04024465478873429 0.3171223482983463 0.5629104456325373 -0.8054266142507533 -0.827477624120526 0.03573988285703589 -0.2717556036850699 -0.8956119760537824 0.6046378353594786 -0.6909853758218871 0.9945389025018745 -0.44785847583757477 0.8966334850096251 0.877044298964051 -0.8633493467039459 0.5063351845325099 0.6157434384603606 0.3709780438280683 0.5683426061676577 0.8806463510067633 -0.40833781528686197 0.9831433262308262 0.07740485075647041 0.4410095297056482 0.06944959887034008 0.21410486877742207 -0.9088513179993813 0.44980514618854683 -0.8463606209326389 0.3154159671181007 -0.161427138329457 -0.1809529284839293 0.6570241379897788 0.27539138194563795 0.7067038837308302 0.16721198548044658 -0.8851889821753536 -0.5473765255837237 -0.8022637769087599 -0.2315458546981961 +185 164 -0.21439639200275007 -0.3605999471537644 0.8274357762339923 0.06276707769942402 0.4447491678659794 0.1492036402517678 -0.09978870500280657 0.09776881134922144 -0.7504431050707476 0.6430813973781955 -0.9618747782729269 0.14805377247282214 0.5432541431725493 -0.17393919440881778 0.607062235704992 -0.3094998738744932 -0.3431588953285465 -0.9669568055688169 -0.5560187665112297 -0.7725842754347609 0.6130257484603645 -0.16910300276376278 -0.17189203400557007 -0.2236675995389823 -0.27978353412971657 -0.9125544945023845 -0.058876118077143325 0.7145239574725404 0.3412056548614246 -0.6288769644240191 0.18358044846070176 0.39113172986739464 -0.1037931932046321 -0.2713897791317539 0.6105138365919998 0.7215128036843104 0.05611567419550978 -0.08118311484383578 -0.019926679371403244 -0.3773185875939433 -0.700746886836642 -0.8807360123009036 0.5056484763395463 0.9659707342610226 -0.9634904064090992 -0.018632416314518396 -0.5483697798151239 -0.07195818066481197 0.35332047306360925 -0.07222141889989153 -0.21836034509619084 -0.7567292192479662 -0.9656418865533603 0.04597112553524174 -0.9238970792732777 -0.9341502666210459 -0.09335932214125653 0.9936248364234768 -0.366474322807129 0.1843605471194547 0.8713637379438193 0.8618427875485035 -0.09601934993490158 -0.41355853179914903 -0.42816834541052495 -0.5693732988399716 0.918767420031084 0.7485003225353795 -0.8762325084476759 0.9707631617823531 0.718159968348512 0.5969711579547448 0.5989283946825923 -0.007905071996198165 0.22292395551071031 -0.13371761176344776 0.7972053162101833 -0.4352407210639375 0.21284654816018866 0.8940093207336188 0.0016902519422523632 0.023846991808516016 -0.4152409199243172 -0.625646859214479 -0.8956712231934725 -0.4892469946574871 -0.1893824599497671 -0.4703538309269335 -0.9237317273470045 0.7454420477330437 -0.7424116445261604 -0.5073899990335411 0.597387077780265 0.08382573600805965 -0.47662679569553745 0.715895405044453 +185 165 0.5844139858961117 -0.14848897115440773 0.586544541270505 -0.05468432332029405 -0.9764964529538069 -0.2433731416562106 -0.007675594315424972 0.8589476286917459 -0.07164501782807675 -0.6987555174173083 -0.091705361394814 0.030749447418348286 -0.24028534427681514 -0.08486500461016977 0.5739178889423404 -0.4287670776279382 0.8737940818526357 -0.9700894465051475 -0.38978373740780015 0.8879570686206908 -0.9659713517123569 -0.0010510082855257341 0.9821429013440479 -0.9450577686480957 -0.09009323984770856 0.7060265602822484 0.10407811911764497 0.4913719563074703 -0.9479956397037697 -0.9618122114916299 0.7054603789066984 0.930318332713733 -0.478922652603309 -0.7987751437936168 0.8606321308624771 -0.6641018458895613 0.34414050763902915 -0.6919955758635967 0.10024150366013918 -0.7267849481622466 -0.83484986992024 0.24993073716034542 -0.2928969566279065 0.10897093549446168 -0.3499648305954992 -0.952721464287595 0.9653026492984984 0.9269595936135029 -0.8839866862943067 0.20231735130023543 0.07047250904465252 0.15157170735572456 -0.7506348269994514 0.6854722836805129 -0.40715323193396125 0.9236364968618809 -0.6765418652071316 -0.37472014351235816 -0.47037423252561594 0.30654669918436284 -0.5944694067480831 -0.6118715178605316 -0.9954901157232316 -0.233371153052641 0.4918345372567645 -0.5586587284804814 -0.48612101076924774 0.4105294210020509 -0.23184834614292593 0.8986013242480873 -0.9041764961535981 0.2612246072437252 0.5411005598331229 0.019013106064380114 0.012091971257095047 -0.21216252571796534 -0.5820023337754956 -0.3736108414395145 0.3632096593274876 -0.3967457847307041 0.894101149314187 0.9691458259973367 -0.47510709505938187 -0.46272345857470065 0.9072860850117435 0.1626794153703781 0.04688776184431043 -0.4434922394586698 -0.24596745717480584 -0.9238848337207848 0.4401289482865238 0.777771198140726 0.1167840668879323 -0.014410702386748131 -0.9607346094906346 0.7373854784008054 +185 166 -0.0935683941172758 -0.0031736839884870527 0.24002916850360734 0.582692294984263 0.5245501335464982 -0.21347617600153823 0.3898156209320549 0.2595961276867653 -0.6780965076346639 0.6678953079089252 -0.5142536486959037 0.22519446783591168 0.8179044589947391 0.8077081684838527 -0.47168587379453797 -0.8997808349753569 0.4546166815934152 0.4766208422210432 -0.1042209421915734 0.32875911948887016 0.13436179201714693 -0.4336447606867304 -0.15309588479731429 0.532054342141578 -0.1963148919159141 -0.04947655915081395 0.9962769309053674 0.771020881250833 0.2936838301276741 0.011054312836667357 0.9976862912377693 -0.14163537735802678 -0.5086105099133964 0.9867763771839491 0.49243135192032983 -0.8534591095710655 0.8004373060442056 -0.26652694983220804 0.9063516904234903 -0.9170419287214184 0.16065721140403055 -0.6596683591179262 -0.28271103287584287 -0.02702295647109132 0.5935398045673921 0.663366456258986 -0.45427493218784787 -0.10069946607797742 0.5572422220695425 0.6090320168958121 -0.24087021506161355 -0.10782776477085299 0.21713602285084654 -0.28251562175270095 -0.9659173357349089 0.6562477574349848 0.8921259117132401 -0.42264424099262277 0.5473636611980612 -0.0934286865931584 -0.9415562995299729 -0.6111804472821538 0.5456382334486012 -0.15564541105988483 0.039612150375862853 0.2724242168192843 -0.11170856196904122 0.5076044512364684 -0.5360226856149919 0.7709011455678878 0.056195968642755334 -0.8017806997391748 -0.23906384960619254 -0.26437988307433513 0.6763498540760899 0.06214012165857441 0.21351628877847628 0.03674588875830831 0.9096373743833832 0.5467200625808688 -0.4870038003924868 -0.11060494950537003 -0.6220898761069145 -0.3614315306676761 -0.7153121281293369 0.2540945223098874 0.7034823092943743 0.03420967642123429 -0.8517952689845429 0.4042937206181121 0.055612254917540405 -0.8306471182465767 0.6608887609842704 -0.35380045409747196 0.5284622958193665 -0.25133820190010314 +185 184 -0.7475317989327244 -0.12127874899445623 -0.8534517380802533 -0.3546291757678923 0.39633004011566686 -0.17883268851027734 -0.5281825494822936 -0.9118533314923187 0.9605830349656967 -0.34779985267899494 -0.03866907391443064 -0.2260977977321088 -0.2415958729439862 -0.8634600446313785 -0.6330232173268815 -0.5966586285279658 -0.6899155292629633 0.23674484798393136 0.7368744926047486 0.8540800882045068 0.8221301171953783 -0.11359222563017779 0.5366143344688401 -0.23676737569138595 0.21549433678952234 -0.876606641460292 0.8529810028149158 -0.7028301721884478 -0.0004483503567247471 -0.29704306763937804 -0.28635803526894543 0.7929008658741088 -0.6058731853929968 -0.4198910693406426 -0.49007530446561987 0.40439272108967805 0.27544305717160267 -0.8394259066234417 0.5087968267934162 0.7468177610203741 0.9700672884182746 0.7485020508528275 0.009700235333308882 0.9405472967024078 0.23323208211725133 0.8127843265793429 -0.8312476513321843 -0.6811077730868409 -0.7099236797784314 0.4466146713591841 0.6329063089985278 0.28023599763919305 0.5366887173283434 -0.45999972511304854 0.1415997477633122 0.17539309973705053 0.04024465478873429 0.3171223482983463 0.5629104456325373 -0.8054266142507533 -0.827477624120526 0.03573988285703589 -0.2717556036850699 -0.8956119760537824 0.6046378353594786 -0.6909853758218871 0.9945389025018745 -0.44785847583757477 0.8966334850096251 0.877044298964051 -0.8633493467039459 0.5063351845325099 0.6157434384603606 0.3709780438280683 0.5683426061676577 0.8806463510067633 -0.40833781528686197 0.9831433262308262 0.07740485075647041 0.4410095297056482 0.06944959887034008 0.21410486877742207 -0.9088513179993813 0.44980514618854683 -0.8463606209326389 0.3154159671181007 -0.161427138329457 -0.1809529284839293 0.6570241379897788 0.27539138194563795 0.7067038837308302 0.16721198548044658 -0.8851889821753536 -0.5473765255837237 -0.8022637769087599 -0.2315458546981961 +185 185 2.6000078211583864 2.006900121848469 3.491736976978978 2.1424217094258178 3.609337159080572 1.4625846980144437 1.9358262400998332 3.131526470385653 3.7893444807480985 3.7396133729519674 2.8950489166790776 1.7096467615144266 2.847201831588322 2.973180652035711 2.572620318965702 2.6200561479100726 3.5426932543604637 2.756464347292618 2.975244828592765 3.9357047932525453 4.183771446866894 1.103766642625556 2.6679628072842894 2.803167789914018 1.66378716736131 3.5427691125413814 3.312987101817412 3.5450776766640013 2.9064316669182766 3.517987327008438 3.22950220339487 2.810869054984443 2.8773395197575145 3.6673758621215806 3.9490133957749185 3.9282761630812426 2.3274061167881728 3.0219133829980636 1.5641991943112445 3.004869198682107 3.6032670155034716 3.5848418477543316 2.2572694930240487 3.0551945566898584 3.410911686817063 3.4928420229385773 3.784101585354535 2.8498930037608075 3.9104262066964344 3.197482375043726 3.0066395079336794 2.3246291297689488 2.91485522877346 2.260848984755798 3.2176080132731997 3.892082317352349 2.446115812997801 2.9417089136021612 2.99398840279804 1.8906160196031436 3.6458386445420823 2.569903665481587 2.1766864209662624 3.3223790308634875 2.096735924843838 3.502634573537127 3.5010437710441416 3.7777378616701403 3.526728461340534 5.216291292431378 3.5902834275072464 2.288057502584172 2.4618408361365516 1.08903843940827 2.3164746646184504 2.5545349373676993 3.0776518884271677 2.5248430854546937 2.434103941786905 3.9665557343947664 2.55787662234133 2.4064693982500502 3.602098823044062 2.1415264579296327 4.340680173907966 1.669913302683971 2.271695089523381 2.454557507859665 3.8404067893875267 2.895016298961984 3.150512006699346 3.625819899653605 3.4281484636880317 2.168038424243309 3.8478678752296105 3.128152686702358 +185 186 -0.7152275194519875 -0.8062488416920779 0.00795920216634749 0.3695238165290158 -0.6196703362700473 0.13363936269801568 -0.2606445988980375 0.22532666423713854 -0.8633581890670805 -0.4854800134460622 -0.8286366848753963 -0.5686677169015517 0.6257518212878008 0.09008696522274451 0.046519445020465344 -0.2293953992840383 0.9224960816404177 -0.05580300737097188 -0.314878536802637 -0.604562227212377 -0.8345711570542995 -0.1086105934368542 -0.4325813286173916 -0.354931924083866 -0.19474000273485226 -0.7217325355247262 0.5757469465556386 -0.14621661555698817 0.7298939468222125 -0.6238356047212625 0.09595893645742337 -0.26174247339667533 0.254386502121988 0.8066806662637833 0.8365091013711734 -0.5522663664876686 -0.3052345411049371 -0.18063628094218798 -0.008968560848179985 0.2363379160433392 0.14273891221912338 -0.3610254591687012 0.8537201736685547 0.5976089468192427 0.35697617299919315 0.2714497970241134 -0.8308916541330968 0.2635642821774824 0.8692428714349765 0.9226433285478721 -0.9643973951838896 -0.5451238323614911 0.2765453311573485 -0.420135993957508 -0.5448663312036544 -0.6116393373024742 -0.05624477280432849 0.4683285292521948 -0.6407638189402125 0.46762171728443747 0.09281981420035224 0.4117110537348463 -0.1519291012595434 -0.733282627498498 -0.4005589676849166 -0.6131410236180552 0.1310045693173565 -0.834489374220512 0.7846642691274182 0.9635186480964013 -0.8594625317127655 -0.014931322673976233 0.14573002692554837 -0.11526892211512463 -0.776162950681087 0.44277133567010507 -0.5848174924296785 0.6539480561015614 0.6505732171099681 -0.9192088487986347 -0.24592807755897383 0.3805424196333982 -0.6221255229025533 0.005446558645997968 0.22380062800704104 -0.11843413914893852 -0.65476771569199 0.6206599298552589 0.777836823630065 0.0077025264591892295 0.7815363870131316 0.502609165787762 0.6973357922361729 -0.6692098069869614 0.22898578614590903 0.9689304558586898 +186 165 0.8477191235049863 0.6091491178084414 -0.9706637757577898 0.727002922346758 0.9326740134142695 -0.9668375762027055 0.05268951755078599 0.3498386789334642 0.4241042243794215 0.09698149819514845 0.44859316763786317 0.6642376642429026 0.8200679482749809 -0.5416285252196431 0.20833949364880588 -0.0015651318037250839 -0.14163780406299709 -0.08764747099542824 -0.49500848095429006 -0.21293254261296046 -0.7293632108372721 -0.385051638831285 -0.7158520788660316 -0.08168868208859159 -0.7053744922655429 -0.546989607770402 -0.723559084549785 -0.29073988241216453 0.7148821560711305 0.10171010139881931 0.5416959301082676 0.6982573255543336 0.22239984861825124 0.36980258544554023 0.6288115134366283 0.49587755521844423 0.969335679254788 0.4468410875606259 0.6395542595621213 -0.5439436555581927 -0.46794946514626257 0.3402164531958598 -0.5237410934620852 0.019905897610473122 -0.08029274542456721 -0.1283579061319713 -0.6202339501702869 -0.002236704611037199 -0.44357205056410454 -0.5300072863203875 0.6265117865313112 0.41625421363331716 0.7469298467409868 -0.6381023293376409 -0.5105137420072476 -0.36710144244856613 0.8395597414986291 -0.6670472257298143 -0.7644922231633924 0.23253794410630535 0.4234149293371374 0.9244801413871078 -0.8528698296285611 0.8830295290837433 0.017069737489673553 0.4591964119618588 -0.8937215212045082 -0.21030478421547838 0.1278124985016429 0.7706887713362258 0.5740608180204281 -0.9952001263427128 -0.7361064095309442 0.986580888933126 -0.6679345349497685 -0.44099606589387386 -0.633004188094173 0.2466816402754355 -0.742363714344233 -0.644239248640452 -0.5782899624987097 -0.8789533359866066 -0.19420501399473067 -0.7997247602670512 0.2567747023547742 -0.5993309510935207 0.886152980603075 0.644839806358561 0.2029732731984335 0.6837065336233179 0.40344843792575946 -0.2737477658999663 0.25006999058009804 -0.6466560492853455 -0.3074780051910204 -0.13920663822637636 +186 166 0.1972693017304905 0.03218515250358611 -0.06290194186774656 0.7516050151621789 -0.60435300827939 -0.3228048147795044 0.1859845929643127 -0.5306130607909203 0.4017611009821256 -0.30424469265321763 -0.6329564775766179 -0.08191801968369483 -0.055110050820426304 0.0038373027331120024 -0.7411941536437956 0.7368342433636288 0.7068659415319449 0.16333915022351086 0.3166045832097766 0.1609233317044636 -0.2903535998950524 0.6195137640896604 0.5077529115401087 0.22280061350072478 0.6586840089801052 -0.9063822993477557 -0.2361144695091153 0.21226693981882927 -0.007152444769227051 0.8694054643093765 0.366290475139883 -0.8726926279016101 -0.49632760264867715 0.5167169162471923 0.8520965652848276 -0.9877895394636418 0.5319954329376049 -0.976770892675878 -0.7942873999675584 -0.8698419416143712 -0.30458317654814704 0.5778783643266532 -0.7197108403868544 -0.9417811927069624 -0.737965028905962 0.7923727698913003 0.12228794935330844 -0.38545880880220684 0.1117280600255659 0.9460407026087667 0.35789641392406835 -0.7142386008173591 -0.7881655399094518 -0.7384932086555418 0.3803513058127208 0.1819782597494437 -0.27542369297895 0.4235066002181347 0.19639361938112554 -0.5887983690271401 0.31804185001526375 -0.31266013230587175 0.5478633605734942 -0.9793146841006906 0.2032045496863355 0.7351318719386928 0.956786871704403 0.38092148236783907 0.6081866187097611 -0.4878118712592785 -0.06329256135441108 0.42412215813852283 -0.45452618611127993 -0.12243234172549444 -0.030633012108264746 -0.5882494446959929 -0.1436832153931371 0.29073143321652917 0.1537135504672118 -0.7364733417358396 0.21306658549604895 0.42110196415439427 0.5594093711205048 -0.24807556111022122 -0.5690556654665657 0.04827915934394644 -0.39466424051548055 -0.61602710131735 0.9514632845853046 -0.7323073395509307 -0.5910811937850922 0.04025558079078584 -0.36243585867416406 -0.7107170637105558 0.2586338875712615 0.115939803388031 +186 167 -0.5404431191216024 -0.8984982747932846 0.9295658130255602 0.2238808534035852 -0.983984800958928 0.9409112186750128 0.9184347924128649 -0.13340361930236244 -0.5733285612335728 0.25900099989564573 -0.5686799111385217 -0.8253890789233391 0.7244833297138422 0.9124815299829705 -0.3319002013874448 0.2915988013066051 0.615486258030949 -0.7339055683208235 -0.36402624018187724 0.2956218994723001 0.8590193791877316 0.859248312833991 -0.9471102445817507 -0.005583370971640633 0.12945159256489513 0.7011012691704677 -0.05851152050309705 0.8016389321929329 -0.1573008410784873 0.9220396946103959 -0.6266846248297722 0.8486590734196033 -0.14817595234121606 -0.829222001217433 0.4409933737779699 -0.7656426945155828 -0.18790427231606466 -0.9441983773988873 0.6192975459513674 -0.6722360180904032 -0.7044635471736662 -0.30016332066440365 -0.9487407097282317 -0.3905743737106808 -0.7921070745689103 -0.5005897584095853 -0.7943904305865352 0.36258733960251943 -0.8498372453599412 0.5587345053895147 0.7512191348673847 -0.26926327902450176 -0.10050210427636075 0.4554031894999462 -0.5643254926823495 0.9483648990365705 0.03946578250103738 -0.03546901044382422 0.18760869504911515 -0.23298345214287486 0.2814169508304265 -0.3235523006167169 0.9243794502849523 -0.5503112360866618 0.8763241682794316 0.485007972021966 0.9733997961398533 0.5251184017008068 -0.7489602702787312 0.37673802520259847 -0.9871137545426252 0.3194780805412907 0.023912847954288052 -0.7298862160929007 -0.49176111391907695 -0.9856215848858525 0.7072812262496639 0.22087932327553772 -0.18332369722170627 -0.7588605040413952 -0.01041172420838099 0.19256928259127548 0.26758953359032334 0.9490880938544008 0.14696387836621772 0.7760266799314726 -0.3393917123724861 -0.8243805482599518 -0.234849000239576 -0.8072423002207263 0.8742634862374494 0.6776681703305989 -0.5171422760384199 0.8464929796339506 -0.6161099357652771 0.8640649214483771 +186 185 -0.7152275194519875 -0.8062488416920779 0.00795920216634749 0.3695238165290158 -0.6196703362700473 0.13363936269801568 -0.2606445988980375 0.22532666423713854 -0.8633581890670805 -0.4854800134460622 -0.8286366848753963 -0.5686677169015517 0.6257518212878008 0.09008696522274451 0.046519445020465344 -0.2293953992840383 0.9224960816404177 -0.05580300737097188 -0.314878536802637 -0.604562227212377 -0.8345711570542995 -0.1086105934368542 -0.4325813286173916 -0.354931924083866 -0.19474000273485226 -0.7217325355247262 0.5757469465556386 -0.14621661555698817 0.7298939468222125 -0.6238356047212625 0.09595893645742337 -0.26174247339667533 0.254386502121988 0.8066806662637833 0.8365091013711734 -0.5522663664876686 -0.3052345411049371 -0.18063628094218798 -0.008968560848179985 0.2363379160433392 0.14273891221912338 -0.3610254591687012 0.8537201736685547 0.5976089468192427 0.35697617299919315 0.2714497970241134 -0.8308916541330968 0.2635642821774824 0.8692428714349765 0.9226433285478721 -0.9643973951838896 -0.5451238323614911 0.2765453311573485 -0.420135993957508 -0.5448663312036544 -0.6116393373024742 -0.05624477280432849 0.4683285292521948 -0.6407638189402125 0.46762171728443747 0.09281981420035224 0.4117110537348463 -0.1519291012595434 -0.733282627498498 -0.4005589676849166 -0.6131410236180552 0.1310045693173565 -0.834489374220512 0.7846642691274182 0.9635186480964013 -0.8594625317127655 -0.014931322673976233 0.14573002692554837 -0.11526892211512463 -0.776162950681087 0.44277133567010507 -0.5848174924296785 0.6539480561015614 0.6505732171099681 -0.9192088487986347 -0.24592807755897383 0.3805424196333982 -0.6221255229025533 0.005446558645997968 0.22380062800704104 -0.11843413914893852 -0.65476771569199 0.6206599298552589 0.777836823630065 0.0077025264591892295 0.7815363870131316 0.502609165787762 0.6973357922361729 -0.6692098069869614 0.22898578614590903 0.9689304558586898 +186 186 3.2413465446587137 2.974120761640907 2.1144042412295665 3.1550064618658347 4.838807166740979 3.2203247866333475 2.417287800901876 1.6531303329373919 3.177778241435081 1.7791161366194173 3.4653741554496014 3.3338912197267563 3.5838894775818386 3.332036473439812 2.432525447305782 1.8241781570074465 3.4463277663962053 2.636830966100898 2.38258813570038 1.4327857430327142 4.111653634124962 3.1210907721454824 2.862193348709143 2.002555080099659 1.8654154187365526 3.795082132731781 3.0208196910689056 2.359663196215755 2.265425922986423 3.395310090471516 2.7921024960159975 3.6616290509706766 2.9672548297488204 2.9572954680114782 3.4116331942510545 4.105999950500776 2.7362906972421106 3.079931427789777 2.551131330548687 2.8380514112960507 2.665454414990837 2.389591519056567 3.4922711517868046 2.2973434121486607 3.593848529226374 3.1916360419434513 2.732400193370923 2.535156414687191 3.6237025615901213 3.4565193979374182 3.8649584895654194 3.1558986430855125 2.6958141040558434 3.4749501547035475 3.38950761983863 3.3200587211178325 2.5046127673980734 2.8037830889902096 2.7994360810674364 1.8427178722320368 1.686500873315778 2.6131947332244705 3.3186142589354994 4.776249685894321 2.0934411148586607 3.8567444151928143 3.555584126641638 2.5786768500274766 3.7905691693925925 3.4547376033257233 3.7828164639862916 2.598389189157069 2.104858715565504 2.635872353319895 3.460022158785107 3.30352369696416 3.7431349278088613 2.7467046127648787 2.349956131917292 3.2965787919651595 2.074854499894408 2.7702363213209056 3.4206831081339493 2.844758989870434 2.072410493628217 2.158839819140403 3.753057458390401 3.3277544352009873 3.9528684747168503 3.4276362681891577 3.4762593067928957 2.329850338051439 3.349704357259302 4.226246513327151 1.7803857322310477 3.132235150511073 +186 187 0.012187857386904533 -0.3959415815891323 -0.023966294318962023 -0.8947419690834966 -0.762026400546129 0.09803680628387013 0.8493734030142084 -0.1636723244954017 0.03184596087596114 0.584020022325878 0.3280060194013321 0.6233442111225624 0.8564646460245808 -0.8288498836640517 -0.16693604544433582 -0.515065583742293 -0.5418957712893173 0.6466872670941033 -0.5528083107817485 0.13019228510487957 -0.553244866206642 0.24364493925137487 0.0521353669945952 -0.9518156616669879 -0.05216604673630365 0.13050175193562796 -0.9967968881001665 0.24740232363915404 0.46216156924660146 -0.3676196860186447 -0.33807980358345224 0.8677901831753947 0.9230530332341793 0.02707544312893928 -0.1568798654372312 -0.8880354799082799 -0.39524943037276117 0.412343847422052 -0.11921223880873044 -0.03142732885229704 -0.3003902083795187 0.24588915432352132 -0.3179190718695204 0.09130297550001454 -0.7225165307261443 0.726080726653858 0.32553516022803475 -0.8846488645041812 -0.815113225347345 -0.12794886006631034 0.49718467026239477 0.8704397656905944 -0.43556840507789896 0.9859825878452559 0.5873018681546074 -0.7487557882703957 0.4727696425316865 0.3780784617386952 0.2162757987978312 -0.3078540371482059 0.17332203055689055 -0.5291302998255558 0.012403642509758228 -0.9291296345428139 -0.3127817894884759 0.9293508461326063 0.019195193082298667 -0.028496632257738685 0.8987933848691383 0.3012108466546597 -0.7371010345779279 0.739634891691106 0.31359168956791716 -0.11320482487841743 0.5983875623824104 -0.41195817049547356 -0.7283915669241208 0.6605763062224352 0.5123084454176847 0.02351861381444098 -0.8340310553891384 0.5614596859478256 -0.9356945125559955 0.2014386055503954 -0.021413299738788805 -0.5431907047054432 0.4963911612680838 0.20839658031036734 -0.9986360889219448 0.6454386282536593 -0.6056152479939925 0.3889171750852707 -0.9837609210872142 0.5729688728714579 0.33795649558976537 -0.6103209439325603 +187 166 -0.917973251849383 0.8778166459725785 0.9552314854964186 0.7102821786500959 -0.6298084344485004 0.006764512194362249 -0.7069586693789218 -0.7490550077221236 0.14773089714034504 -0.3127139547759661 0.15963507237073715 -0.058944602230661 0.20363087231686094 0.6935857826292979 -0.5471887675423261 0.10346297625045464 -0.04347100128295023 0.8673886637631611 0.8758150964009832 -0.8130453682176217 -0.8861200386652621 0.5703275185321157 0.8331478182983441 -0.9499353574001206 -0.5123927905054892 0.7695645335306798 -0.09197370671775817 0.001122857865781146 0.2440067405732993 0.21903372289504075 -0.20337332356628623 -0.7342973370805819 0.6915012329030412 -0.5990230541604895 -0.8114934793909321 0.42756911112575136 -0.9443998703475824 -0.42170641727749025 -0.4569819800998769 0.4753663069863505 -0.029294921921399597 0.8021737108136311 -0.8888449435161025 -0.18411126348062812 -0.03443738573247335 0.991790160523232 -0.7381104675961647 -0.1685167857613883 -0.5017798735711185 0.05454701811854035 -0.021824779056085042 -0.404026599455928 0.7115607357207796 0.07620501528911383 0.8517311602919722 0.13380195175694554 -0.7517312607375068 0.8067931361116389 0.7669758997831917 -0.9426902227283049 -0.32751974341228096 -0.14358704453147686 -0.7433289433698962 -0.5140366069098046 -0.41036663819280483 -0.6694638018219481 0.77632755309359 0.07380898486245857 0.2416593202503705 0.02678207760574236 0.10435184591378999 0.04908083939230856 -0.7631725571432246 0.18446000240160387 0.6551680094981307 0.1805616128084917 0.6815602416303967 0.7468672765191664 -0.480442229425478 -0.19641947200569643 0.5456516796164603 0.18204130614096603 0.2036162367853429 0.8461674379615594 0.9300027720516384 -0.2069565462888685 -0.8751594281096975 0.20356910376401438 0.36049168406674026 0.9615056159648849 -0.2530752958016629 -0.5142049251789713 -0.9937154054702326 -0.3766735377546133 -0.5055382597461555 -0.47931678993714955 +187 167 -0.6251543734905618 0.7065852341831291 0.28151431739621025 0.8763292106009672 -0.9181013678764915 -0.14710120625479073 -0.13528717393349288 0.8478364147872408 -0.8867128189732436 -0.3510998424887841 0.5261116600210707 -0.3794563822785111 0.4667867034193065 0.4236821214443469 0.37159935475862804 -0.5939508118742989 0.31063881717270414 0.8666857645768755 0.8793937704759236 0.3943522806042672 0.3417121002317476 0.12625910388384365 -0.7601717519276219 0.986431597736283 -0.280819094903046 -0.9112987493391 -0.15773604026627508 0.27508352532852753 -0.05028116389078785 -0.07028742751650552 0.9460498451524935 0.5305802417616705 -0.22685951580033126 -0.2533895880807593 -0.28161661597549914 -0.4545767078447436 -0.4650417666089506 -0.7406371349418419 -0.47836079390917075 0.468464021802917 -0.7322365988440742 0.43580398075323856 0.8557042213012389 0.4795646735507939 0.10628036855210299 -0.9556554193077866 -0.9293700834063157 0.5849009842642401 -0.2073639233019433 0.6112425999886826 0.7902890854978162 0.6975819857240018 -0.8327717001000243 0.8166527638923531 0.7359980521991887 -0.014852507089583522 -0.5531800655306223 0.48977431499188206 -0.6164700901370042 0.44400713810806103 -0.9699093230525182 -0.16528538010010996 0.24846212583722127 0.028912984960655086 0.20744211200023321 -0.3612969212179673 -0.9405378373984876 -0.28524374179365997 0.16276660710379676 -0.6355521382138911 0.8005032751572574 -0.20739142694686596 0.5419841091128721 0.05467920630552858 -0.3002778227894578 0.9928899728622789 0.9476128420554091 -0.2358711721467177 -0.7781874523474701 -0.434306322628798 -0.8775489330282169 0.2725102203498362 -0.742089992860246 0.7698973587322735 -0.7515949002469284 -0.9919093450634211 0.5687483992581657 -0.5422376460750145 0.5825846102603891 -0.4972805959218469 0.9886517701830266 -0.10246159815732114 0.8461429707860169 0.9433240156642355 0.4728384483434862 -0.1375903534093481 +187 168 0.24384526996987566 0.30063681382993823 -0.19567952313417258 0.6675547236286568 -0.45705454702578363 0.17538569767409173 0.8309536717767991 0.393577382137716 -0.7876252337245728 0.25470896939707544 0.5503192538423263 -0.14844860129632287 0.8147011474124981 -0.3289339320643281 -0.1716154068150495 -0.07992754417414383 0.6255034941786766 -0.2798980631011654 -0.9043733624078563 0.6314548145547727 0.6047652730090036 0.890639510427989 0.22829733685701936 0.1473150188909902 -0.22264193690948364 -0.43345766485549886 -0.20559239776628102 0.8197244819968608 0.29794276942043907 0.6853946586083908 0.38976050119940564 0.039003210529376275 0.38283391250123766 0.019270646853007722 -0.002941405465333835 -0.7071833127690266 0.17572187676992002 -0.2955219222366192 0.7257460809142069 0.20744247056668486 0.3838320364104846 -0.5199860594273176 0.9617445038959036 -0.8224393362863671 -0.9808832559705374 0.12837213633581768 -0.9457874347948751 -0.24630020827197452 0.6977605931068123 -0.8539595676296481 -0.1826599129083426 -0.4651610702365647 -0.4148543263862541 -0.842607953518588 0.7004304810062938 0.01246446257702849 -0.5993359951037802 -0.6310200405429396 -0.5552804927939745 -0.324316830908866 -0.7724356917838102 0.33886166997033307 0.8066126840969108 -0.7663470760059434 -0.7674316370264758 -0.4314843418261678 -0.39855486584059974 0.5752309183103961 0.3946711045215532 0.8815523569842043 0.9003121192932999 0.9858869270151107 0.43100988557837305 -0.34053490836547073 0.9540802376229385 -0.30334081514917144 0.2176547920997498 -0.811814464642165 0.8065593540477924 -0.13788808084978443 0.9352870715249508 -0.032054965907327704 -0.10070244866170142 0.8826643023528196 0.839714471209706 0.6580560839776552 0.5514179561740411 -0.12253823918049611 0.42645215310223694 -0.17877591610399857 0.19386346931847886 -0.159018294397975 0.22361764603132683 0.6173220154484347 0.4533060769551689 0.3398257920884178 +187 186 0.012187857386904533 -0.3959415815891323 -0.023966294318962023 -0.8947419690834966 -0.762026400546129 0.09803680628387013 0.8493734030142084 -0.1636723244954017 0.03184596087596114 0.584020022325878 0.3280060194013321 0.6233442111225624 0.8564646460245808 -0.8288498836640517 -0.16693604544433582 -0.515065583742293 -0.5418957712893173 0.6466872670941033 -0.5528083107817485 0.13019228510487957 -0.553244866206642 0.24364493925137487 0.0521353669945952 -0.9518156616669879 -0.05216604673630365 0.13050175193562796 -0.9967968881001665 0.24740232363915404 0.46216156924660146 -0.3676196860186447 -0.33807980358345224 0.8677901831753947 0.9230530332341793 0.02707544312893928 -0.1568798654372312 -0.8880354799082799 -0.39524943037276117 0.412343847422052 -0.11921223880873044 -0.03142732885229704 -0.3003902083795187 0.24588915432352132 -0.3179190718695204 0.09130297550001454 -0.7225165307261443 0.726080726653858 0.32553516022803475 -0.8846488645041812 -0.815113225347345 -0.12794886006631034 0.49718467026239477 0.8704397656905944 -0.43556840507789896 0.9859825878452559 0.5873018681546074 -0.7487557882703957 0.4727696425316865 0.3780784617386952 0.2162757987978312 -0.3078540371482059 0.17332203055689055 -0.5291302998255558 0.012403642509758228 -0.9291296345428139 -0.3127817894884759 0.9293508461326063 0.019195193082298667 -0.028496632257738685 0.8987933848691383 0.3012108466546597 -0.7371010345779279 0.739634891691106 0.31359168956791716 -0.11320482487841743 0.5983875623824104 -0.41195817049547356 -0.7283915669241208 0.6605763062224352 0.5123084454176847 0.02351861381444098 -0.8340310553891384 0.5614596859478256 -0.9356945125559955 0.2014386055503954 -0.021413299738788805 -0.5431907047054432 0.4963911612680838 0.20839658031036734 -0.9986360889219448 0.6454386282536593 -0.6056152479939925 0.3889171750852707 -0.9837609210872142 0.5729688728714579 0.33795649558976537 -0.6103209439325603 +187 187 2.6194570492699727 3.950963720543864 1.7644418101129615 3.5829975540078096 3.286932768944867 1.6829845719664236 3.9974482236881332 3.189633964811544 2.960059127801713 2.8532547661995515 2.321532028487664 1.9159512905837743 3.258747238934314 3.1965356008850465 2.078095841202324 2.0041476756102563 2.8149765776455427 3.369958371761078 4.533622012246186 3.60941464590209 3.7156103777331406 3.080947231338927 2.293118110310189 3.811490210414057 1.6172803372543063 3.5585878781527063 1.9069564239195598 2.2742363298529584 1.8073843007700674 1.7496176973044841 2.6979050151311537 3.2762048907496344 2.3692326130180237 2.134890262593192 2.199008188098584 2.6159572362546957 2.85395297333704 2.9024111425099863 1.8933566073628878 2.052023180087218 2.407223667200598 3.0454802167696906 3.361242335632186 2.38118819757533 3.0099559978728836 3.6626996221260226 4.44401480320494 2.141144728226354 3.10825791027065 3.275076624619489 2.1478139669307486 4.300489139941227 3.6645071426792493 3.921677089233281 3.543727150994202 1.5882807402603147 2.771984815004984 3.631326310528274 3.1596186479601736 2.334128944251394 3.3820071484771406 1.614566719932566 3.358823200722617 3.6701699983153557 2.6346067627748493 3.997625375586023 2.7152220721723968 2.2067361703312303 2.721056018741234 2.135200687739301 4.3446541104861645 2.7611439989195388 2.48229120658558 1.3122239200585122 3.5805855152747834 2.7631436069477804 3.8354232204719034 3.4633847136127276 3.4966175909720443 1.5861226483214306 3.6182175277250765 2.6639535504001426 2.4710965782368177 3.7020703752175614 3.254244541853087 3.764542719540846 3.127753570585644 2.2818052350294424 2.9143775423395155 3.382297948557074 3.21600559778142 2.003264535497623 3.7167969457237024 4.358539924931844 2.1175078844164092 1.819712288036733 +187 188 0.5365978953953636 -0.7441370632907449 0.164090494234147 -0.1499818060392184 0.4880601387089023 0.994954321510203 0.8651183343383331 0.8690613975572468 -0.6397667342835631 -0.681807480803396 0.02469365310005256 0.5684597212280598 -0.4611280440896244 0.15235944341022822 0.7711902137739028 -0.41527510455188454 0.5107806520637828 -0.5052271128836487 -0.4213977899619261 -0.6569793199350142 -0.9869070280052037 -0.8993785063574173 0.3244125429123339 0.5342222842506539 -0.012430943138140638 -0.8770047289421996 0.10093374431810376 0.3621005298107878 -0.25120592900012717 -0.31633722438187584 -0.698018407217448 0.9164100486176507 0.09012888547185982 -0.6991225694745216 -0.21574265636744583 0.10547366662555846 0.6918806358462515 0.30636090181600917 -0.05254172138178381 -0.16048070922928082 -0.7558068604251427 0.19074559244344225 0.02703635443920782 0.7730615812232955 -0.9633217620688457 0.5215524597078338 0.5133820835196059 0.02317425546813867 -0.6554576275344468 -0.6480374257733532 -0.5232273756390895 0.8773363444859756 0.8087443177601579 0.3303707752419729 -0.17447945998345782 0.6134577973085136 -0.2728984229135667 -0.4673828696064819 0.9789664234448776 0.1871591806543118 -0.9830632419133083 0.1776863201014045 -0.8858895262903395 -0.4436498089296306 0.6587311656761903 0.9974777360190112 -0.10455818857825072 0.8446843505092001 0.5292619153338296 0.11996057479197875 0.8832655992299956 -0.4612878485321701 0.24810229999806377 -0.28019724620516295 0.26016696734396083 -0.08302867841477424 0.26631131693270693 -0.6372373410660741 -0.5309077394294786 0.15932065886689828 -0.10025126785434035 0.8154354362268836 0.28804593481121543 -0.31895995859593684 -0.3521484292195778 0.6769405074429997 -0.5170466216480949 -0.5894061098613703 -0.23578628339193308 0.8213139982667634 -0.7982546205574017 -0.6951214834017159 -0.03524853438521669 0.9244531996532805 0.2975505296398684 0.0007625290139465779 +188 167 0.6964133085742434 0.994298563515311 0.8491928877842974 -0.045917200553842186 0.2627486235771137 -0.1265075560050659 0.7938672429430724 0.3737741830656691 -0.885110477812393 0.9893654894459365 -0.017765323800026156 0.19611095922669897 0.7853546319914768 -0.6296644726210445 -0.6780378122603208 0.10789291859147543 -0.986286993676075 -0.7194796452853427 0.16806246210101783 0.7284576560134648 0.49701252534635487 0.3989294460397905 -0.9644158428823721 -0.42899472666616645 -0.24596705447872225 0.16704914692887263 0.27935936122923 -0.29398507779575156 0.5602889534340563 -0.054322994833486016 0.330058165271778 -0.4498215724768875 -0.41964108795686705 -0.9303150377245604 0.21967934562420122 0.2753702211163327 0.6603549246609559 0.08736606871243846 -0.07743056983016117 0.606575308739195 -0.18519167084483357 -0.3677444489998334 0.8599239744031173 0.18662469004506477 0.37023970398671113 0.2147602103294466 0.41736375114205826 -0.009320754046772572 -0.2012328677648192 0.37674817206284694 0.41503748861045686 0.3532653430007613 0.7257441981952211 -0.4050945733259925 -0.7292903425764243 0.21105090856918562 0.718053762940497 0.6577184168003236 -0.3679308751966255 0.7036044793181204 0.3468577480559689 -0.6207570881926994 -0.39704182326372917 -0.6326065337175886 0.19043867336920695 0.5061343969053631 0.21360921526963628 0.27448267085758626 0.04414215195652971 -0.23259914695201145 -0.9948831614396547 -0.3455942301218877 0.7521054300640078 0.3974109650863189 -0.3141361320870051 -0.5136382705838962 0.8394054765528411 -0.5396964163279454 -0.8238723840376534 -0.9943152610459443 0.9905999297593076 -0.12719653400627706 0.16739539614507493 0.2675278637203766 -0.006480912001664008 -0.36153258307695024 0.19489658630445716 -0.9863710685722475 0.4133614436465507 -0.6269716087122916 0.08391861899032893 0.5420233810154855 -0.021410047682239863 0.983186524633292 -0.8734821270105326 0.9225450023161679 +188 168 0.771398694452236 0.01663482106826275 0.1618285804359576 -0.27462304234028956 -0.7079884734275543 0.17906218314641054 0.9417239662603873 -0.5825825736333956 -0.5849007386164369 -0.9244328155940202 -0.1317424508077798 -0.45980897776032914 -0.8899369217263784 0.3752758579969617 0.7992553381028682 -0.8736986169323515 -0.9366080869488034 -0.12184998239751188 -0.4259392491385414 0.553176496783248 0.08812521569622267 0.5594764108401169 -0.46466198922059765 -0.8600725047212048 -0.6596311119285228 -0.11642434769436649 0.06719109147430569 -0.9141089236297621 -0.6056226834635023 0.5366980003122679 0.8763365376859675 0.27797510192003805 -0.5088081493662255 -0.030378354486053416 -0.648715339339283 -0.16553622644573474 0.7849313855936919 0.5648663533725875 0.6500465329802345 -0.49036890835983615 0.9625723115177425 -0.020128148448716576 -0.7175922906244709 -0.8606739110643375 -0.16019430428063686 -0.7257939145387322 0.8570387315347636 -0.2133456650071217 0.14219739023446554 -0.06889899202097616 0.009489221092567002 -0.3171243399206345 0.6856256399992073 0.591435565707968 0.242840946936413 -0.3318902833737465 -0.06491605694597724 -0.549928412124292 0.47726571362237147 -0.6454682759867767 0.5268507186580023 -0.03176722393422815 0.6409532169572079 0.08749669989167996 -0.7986425915046871 -0.7765324500579289 0.24144186498455888 0.9483683359260011 -0.41789152710641586 0.010611571897630068 0.253730616337126 0.06674793407754609 -0.7451457783101205 0.3279955713308629 -0.046078337396888935 -0.5653663036996686 0.3824423352351538 -0.00485804006916557 0.7104898074928532 -0.32889109932151706 0.6778663703424057 -0.290140006717144 -0.11116656482301912 0.17336046938099448 -0.447873366792257 -0.7960624580929958 -0.9427226996195905 0.6816309823149742 0.8566669216945182 -0.8136468575477387 -0.37535950862141654 0.9820606985187681 0.7069398039043928 0.7042018728508763 0.460965811551441 0.6790874137410745 +188 169 -0.7044963583198713 -0.9329591671354234 -0.46651415247155326 -0.9574183480698306 0.961261251501023 -0.6358993701124491 -0.7683301158570486 -0.5753894840832172 -0.920345133208821 -0.1933474027251465 0.9013016629486859 0.100345807707648 -0.5146963604532855 -0.8043810191910921 -0.7413582410306414 0.09363561349240301 0.36798127135512426 0.8016062127705126 -0.4006432169336105 -0.5672131619632677 0.7057254103384623 -0.7135883998874231 -0.48337083523469615 0.37495709186448867 -0.4854746831701995 0.5391524860746562 0.29885983328105725 -0.17456386571312899 0.3034342756691564 -0.6377879462537646 -0.5447282948651386 0.08703132753089604 -0.8553948201569626 0.16392650415618992 0.1163628283286895 -0.17392052802917446 0.44676755615130936 -0.16755855184864732 -0.6875578032264809 -0.4507531298816536 -0.4133355734805815 -0.5054161531173014 0.17311510399850483 0.5705047198413618 0.291908095150339 0.71741379053967 -0.09629652203955974 -0.7837378513022943 -0.21981653738751383 0.5599022855997091 0.6763193655301594 0.17478222674147426 -0.20688613841763703 0.8149681640555824 0.9505233031231277 0.7421197178266254 -0.8738206987962784 0.48561282322683996 -0.7537054031416459 0.27798674855622685 -0.864349338970624 0.5248314323319381 0.6457734874418395 0.2507161342898634 0.7067263814785447 -0.9570907497439951 0.3532170877026797 0.907069988964134 -0.23363698153003787 0.6196320807441598 -0.5030508572073911 0.5425859646923785 -0.16772211830912886 -0.49996228651575536 -0.36711613108776686 -0.6131032265382454 0.6314760169490161 -0.14886467119802083 -0.12346012158388686 -0.2590570621547277 0.7693134361828058 0.9451738435697845 0.2782086283157166 0.8632463991687431 0.19655197726241647 0.44565507846397767 0.01063865989093471 -0.8969352762250302 0.8885929264356418 0.13542206390330724 -0.20376515969437103 0.9915834633265908 0.3525280201744887 -0.7395585601171057 -0.034101727967104534 -0.3194684131720513 +188 187 0.5365978953953636 -0.7441370632907449 0.164090494234147 -0.1499818060392184 0.4880601387089023 0.994954321510203 0.8651183343383331 0.8690613975572468 -0.6397667342835631 -0.681807480803396 0.02469365310005256 0.5684597212280598 -0.4611280440896244 0.15235944341022822 0.7711902137739028 -0.41527510455188454 0.5107806520637828 -0.5052271128836487 -0.4213977899619261 -0.6569793199350142 -0.9869070280052037 -0.8993785063574173 0.3244125429123339 0.5342222842506539 -0.012430943138140638 -0.8770047289421996 0.10093374431810376 0.3621005298107878 -0.25120592900012717 -0.31633722438187584 -0.698018407217448 0.9164100486176507 0.09012888547185982 -0.6991225694745216 -0.21574265636744583 0.10547366662555846 0.6918806358462515 0.30636090181600917 -0.05254172138178381 -0.16048070922928082 -0.7558068604251427 0.19074559244344225 0.02703635443920782 0.7730615812232955 -0.9633217620688457 0.5215524597078338 0.5133820835196059 0.02317425546813867 -0.6554576275344468 -0.6480374257733532 -0.5232273756390895 0.8773363444859756 0.8087443177601579 0.3303707752419729 -0.17447945998345782 0.6134577973085136 -0.2728984229135667 -0.4673828696064819 0.9789664234448776 0.1871591806543118 -0.9830632419133083 0.1776863201014045 -0.8858895262903395 -0.4436498089296306 0.6587311656761903 0.9974777360190112 -0.10455818857825072 0.8446843505092001 0.5292619153338296 0.11996057479197875 0.8832655992299956 -0.4612878485321701 0.24810229999806377 -0.28019724620516295 0.26016696734396083 -0.08302867841477424 0.26631131693270693 -0.6372373410660741 -0.5309077394294786 0.15932065886689828 -0.10025126785434035 0.8154354362268836 0.28804593481121543 -0.31895995859593684 -0.3521484292195778 0.6769405074429997 -0.5170466216480949 -0.5894061098613703 -0.23578628339193308 0.8213139982667634 -0.7982546205574017 -0.6951214834017159 -0.03524853438521669 0.9244531996532805 0.2975505296398684 0.0007625290139465779 +188 188 3.3750339966914558 3.5093003598929027 2.3362243814197727 1.7399565500571392 3.5677237264777846 2.8526009920177753 4.237446622226797 3.5770789375210557 3.646245780133723 4.437624662652985 2.6687447070666153 2.677785708256848 3.874232132598667 3.2059611727880686 4.1143350621020796 2.3546490040142674 3.5970933979006925 2.736422511335163 2.746110805157749 3.2437024810882047 3.0424686275555297 3.254836415431827 2.9611728591454627 2.592878434061585 2.24454215870301 2.480945529264922 2.0455295496964974 2.697097461128877 2.4772977937037375 2.1012384407105476 3.3256566836476598 2.4504806335478104 3.2276088992716767 2.411375789029382 2.186014831687914 2.175276209368193 2.714265698977771 1.7898535361608316 2.3142997822294045 2.8095693084821547 2.937292055690969 2.780788862128798 2.7269464571349684 3.549655746812417 2.9594425285933332 2.947026709790077 2.792048807057577 2.0713504914121357 1.6840719072904817 2.390920656489458 2.2856578311235465 2.813372431889902 3.2665924220471205 3.344035090257683 3.177068363782578 2.710551219939075 3.009676893236412 3.4829407677570026 3.3027272585478022 2.1822909476950514 4.438971839488101 2.3576929843789705 3.921081417240506 2.411132019154218 2.7730913015514917 4.425100720591566 1.37988727674294 3.9650378967643 2.1565856275154873 1.6069570037327174 3.1708515773676567 2.896964387607965 2.635396810638596 1.790411869500959 2.081920515113013 2.7991362834489646 3.0579609201239206 2.3454779119934495 3.5406555341147845 2.7955772479536014 3.617979784297222 2.9367265457917604 1.266561390892547 2.5204162986094834 2.0317379258426334 2.5142464678890315 3.303031632560492 4.406051540981554 3.3752563890831224 3.322006955915994 2.1808434952645803 4.948906266663338 2.5157216254829926 4.298312805093151 2.5567477314066838 2.936627678357373 +188 189 -0.46191069640376736 0.10931537944186309 0.26452212530013575 -0.09523320202662999 0.29714104471527225 -0.0037360860474338065 -0.05825473245885204 -0.8819630580943605 -0.3589391403330664 -0.8159547725730096 -0.6157724868158023 0.5216548160652013 -0.602480931231467 -0.8547409152420185 -0.5397573143260359 0.3982058617065414 -0.12369635399370038 0.4723682167258507 -0.5628354003362344 0.20111915978027461 0.562788160535928 -0.3995219679303903 -0.5080406213171818 0.31601694939799696 0.7094191501690283 -0.1682044996219476 -0.5096473626673295 -0.6652896586597863 0.12276613629649424 -0.31941973732133566 -0.24871457391108787 -0.23741192668660638 0.8272256659336266 0.18055977162529846 -0.563855394432061 0.9638377011775334 0.017363453320136335 0.36175513954442806 -0.46556069428756697 -0.21859785348378669 -0.3643506615062808 -0.9502353486236947 0.6205706169478664 -0.306534492244251 -0.3063285438735255 -0.16611845955439142 0.3368987258215399 -0.9143928615109365 0.21464153196055946 0.6964074716785218 0.534499383356237 0.9341755674605707 -0.5264198182015232 -0.5823415548179172 0.3134179216341684 -0.15830274648384224 0.08088332714679547 0.7950406066435858 -0.496706542009242 0.3532752439861637 -0.7537587522581612 -0.5053091878624809 0.7582567990907056 -0.6855089805277337 -0.11218485411618984 0.4275429403282891 0.02083808887488936 0.3464796585730785 -0.3107445171604015 0.1009444067146954 0.026389910171080944 -0.5453006066764874 -0.16857321794765268 -0.14588273478265967 0.12119010194323998 0.5513395090549513 0.9182770443716277 0.7159031856939968 -0.4581993436088345 -0.14961850981002023 0.8803491967150865 -0.6085722330500236 -0.1445982570797928 0.5459596146049386 -0.4265121320448282 -0.2093276293366133 0.6607266674373551 0.3424624332174151 -0.3654962663745207 -0.012207324748671589 0.6052676209297612 0.8031790616771564 0.57732324794708 -0.08261004151490403 0.4416419458772176 -0.606379799809067 +189 168 -0.20331748374751335 0.5956233967922882 0.7481873826736094 0.43227564409117547 0.5827415393723434 -0.32499049273750025 0.9755679665571042 0.5931281273206108 0.4593523960465351 0.02814909555960865 0.9305426530596637 0.16146480333342028 -0.7100050616180962 0.4155503496350448 0.46656520265531176 0.9230133853486098 -0.5601358527909108 0.7496207263757522 0.7950421753934773 0.13147147425247474 -0.7123034872107874 -0.07487289359205707 -0.312687299248704 0.18246057886608447 -0.3612476683507 0.18847213586231093 -0.5908845326624099 0.04084363225638099 0.6072685871422927 -0.2835979066024479 0.10051630003569167 0.6925277904479641 0.4333265000496547 0.6860125140454785 0.3141990709751239 0.2990763572875519 -0.5837321770779953 -0.7527673362516742 -0.8052901420730858 0.015767642261180326 -0.9472160223003572 -0.1778148943686182 -0.38509630876493817 0.910747195801221 -0.6927328260734797 -0.9979390161780668 0.9633569929035963 -0.3388993309821162 -0.19430716930273895 0.4081170206272542 -0.6604157449240775 -0.10149720678350138 -0.660039245142269 0.34432362138957395 0.24961814054456455 0.7535601466243744 -0.9156972616286279 0.9322619421177807 0.8485548696099974 -0.04210926632144307 -0.46957630035489006 0.12424861975087587 -0.4895771600567711 -0.694055685363949 0.9462026584530916 -0.5595648798861579 -0.9141903883745783 0.1539712590640272 -0.7837746567150403 0.5858841781229742 -0.09359047153683275 -0.42855588972568714 0.22759761935601341 0.12836573788779448 -0.10231384558460688 0.2751217223111042 0.4906033882346821 0.11369509411863965 0.7620300208436843 -0.614501517045555 -0.530378734584593 0.2963932764631172 0.26304509766816664 -0.19799188532771939 -0.1858313589032241 0.16144799798762466 -0.3450046692141784 -0.25223708303748005 0.7681306496110512 0.9448578317046663 -0.8720345243582512 -0.726535296418604 -0.45242572171011464 -0.6424725661590509 0.18736595168083126 -0.13829592355187015 +189 169 0.510279912072692 0.7734272860095883 -0.06382877269403209 -0.07252563769471543 -0.8978986046519344 -0.8694978536843969 0.1346458969289317 0.5611459347446026 0.6703208198755202 0.45508626191788304 -0.2590459314888176 -0.9252003219571132 -0.3074167718988712 -0.6122163892696499 0.584110178312069 -0.751924273549569 -0.0773897196215938 -0.8613017646525125 0.7341153858075642 0.5985757816806552 -0.9765563444334293 -0.6764061618422887 -0.9348853341448142 -0.9116579163729457 -0.845008280665803 -0.2552329885584954 0.34514304773836835 -0.3329709352707677 0.640477991588746 0.5771696818161094 -0.22966990584225555 0.28856595209134484 0.4271207758200892 -0.2124335398721997 0.26338236981866703 0.37571357641456804 0.3237809469861541 -0.7351952528018979 0.6182663916932527 0.3609307668881161 0.23693112613837308 -0.08889649984939285 -0.3356642727790229 -0.4248986716871208 -0.5266519523596624 0.5822698154495032 0.7054791942526881 0.30908034605788304 0.9358255579317869 -0.32457048726084614 -0.17917150191683695 0.390007829096475 -0.6108778608545882 0.16803647717406944 -0.2006263895874727 -0.30854525453283976 -0.5397531565096296 0.6286879295845527 -0.307925987170548 0.8784126486885735 -0.24988883533458806 0.24319061681210496 -0.6001624723278876 -0.1059837579655889 0.9176404418970716 0.4452265458362261 -0.6325668671289626 0.48305381395944536 -0.8101646436347378 0.5355649459693714 0.4426412394539194 -0.6061958705644137 -0.7953643812587474 -0.7468353484979564 0.9796704442134245 -0.16432261889487232 -0.9047526441100864 -0.7155089324214088 -0.540334286006086 0.16556144630931624 0.325899093430444 -0.9899122593357601 -0.46052475291626505 0.6979909138684848 -0.5411838492227459 -0.9109370483993091 -0.07912963635997916 -0.09282435916972975 0.34372904518450165 0.9692221155410439 -0.2266199147589658 -0.8801491957009642 0.7171716432690849 0.18004399720782382 -0.5892414861991957 0.06757403056295486 +189 170 -0.9382568020035431 0.4545460122300149 -0.8226513223586314 0.9501027872972887 0.5461762299848656 -0.21273854686998583 -0.053817519980795536 0.26523859639338654 0.3828572487781412 -0.3911095380352372 -0.2925157014532631 0.6525089547075671 -0.7004950018190887 0.6737174185513706 -0.31732554020018533 0.3603038155688467 -0.9708764204591069 -0.14029755429744695 0.9548739467433109 0.563909629043873 -0.5533557468950172 -0.2670374720463111 -0.1208502396288953 -0.5878884482588245 0.2603145818878505 -0.7089769559533652 0.4642036141284067 0.02867181209134584 0.9529843889901888 -0.9818909178016242 0.9732551894481569 0.0392821987341454 0.8795502326972515 0.7674630827650111 -0.74366081589337 0.5911602530183488 -0.7811336772229769 0.05596003814392869 -0.7476090751060063 0.895990366815145 -0.6307025359090308 0.7190552846965517 0.9067642881544211 0.46348850474422654 -0.3315319829893031 0.0038819294843572827 0.5206292592129942 -0.28722606380440197 0.7477129527076665 0.7571109711277013 0.9612177768522003 0.6327145332703139 0.2739010263701267 -0.2755419315016703 -0.5600759626019782 0.6141209070256879 0.022176088014779882 0.4249424838908755 0.9065602880272587 0.7027916393610816 -0.3664848717349789 0.5865719856469191 0.5006245442028998 0.6688838722605179 -0.584539143301452 0.15135091561230252 -0.3818529042870893 -0.2334569616757456 0.28699216161688046 0.4624354797716477 0.13199656192017972 -0.320625069826987 -0.408959159199594 -0.29917866162968787 0.15013593589150198 -0.17987194029945153 0.9839501672614195 0.3033647138868558 -0.29118632963655067 0.4982522750080556 0.8425125255968402 0.37984465204821993 -0.878381126194296 -0.003010004960018131 0.6028800397961553 -0.2535238329786835 -0.4075905201438803 -0.8434045067801434 -0.3484849190252952 -0.5239976843191267 0.12082001127311193 -0.5030847855428742 0.7347947511571176 0.3740556969495936 -0.2696308362147519 0.5921022566824898 +189 188 -0.46191069640376736 0.10931537944186309 0.26452212530013575 -0.09523320202662999 0.29714104471527225 -0.0037360860474338065 -0.05825473245885204 -0.8819630580943605 -0.3589391403330664 -0.8159547725730096 -0.6157724868158023 0.5216548160652013 -0.602480931231467 -0.8547409152420185 -0.5397573143260359 0.3982058617065414 -0.12369635399370038 0.4723682167258507 -0.5628354003362344 0.20111915978027461 0.562788160535928 -0.3995219679303903 -0.5080406213171818 0.31601694939799696 0.7094191501690283 -0.1682044996219476 -0.5096473626673295 -0.6652896586597863 0.12276613629649424 -0.31941973732133566 -0.24871457391108787 -0.23741192668660638 0.8272256659336266 0.18055977162529846 -0.563855394432061 0.9638377011775334 0.017363453320136335 0.36175513954442806 -0.46556069428756697 -0.21859785348378669 -0.3643506615062808 -0.9502353486236947 0.6205706169478664 -0.306534492244251 -0.3063285438735255 -0.16611845955439142 0.3368987258215399 -0.9143928615109365 0.21464153196055946 0.6964074716785218 0.534499383356237 0.9341755674605707 -0.5264198182015232 -0.5823415548179172 0.3134179216341684 -0.15830274648384224 0.08088332714679547 0.7950406066435858 -0.496706542009242 0.3532752439861637 -0.7537587522581612 -0.5053091878624809 0.7582567990907056 -0.6855089805277337 -0.11218485411618984 0.4275429403282891 0.02083808887488936 0.3464796585730785 -0.3107445171604015 0.1009444067146954 0.026389910171080944 -0.5453006066764874 -0.16857321794765268 -0.14588273478265967 0.12119010194323998 0.5513395090549513 0.9182770443716277 0.7159031856939968 -0.4581993436088345 -0.14961850981002023 0.8803491967150865 -0.6085722330500236 -0.1445982570797928 0.5459596146049386 -0.4265121320448282 -0.2093276293366133 0.6607266674373551 0.3424624332174151 -0.3654962663745207 -0.012207324748671589 0.6052676209297612 0.8031790616771564 0.57732324794708 -0.08261004151490403 0.4416419458772176 -0.606379799809067 +189 189 3.3385511917475634 2.856442511505829 3.6062849218673914 2.534861327855831 3.400700629134568 1.6365353003929315 2.2871461152454127 3.069176305399112 3.091172455766756 2.7190879547786264 3.4854798280590966 3.3097229880715533 3.5899364314580753 3.6324800327693603 2.379445015551454 3.1457696737433043 2.449126927320438 3.4052786246334854 3.6347465867218403 2.8294171729740256 3.942414742337153 2.3314658996946673 2.590931906328601 2.428749335649532 3.5494955725606636 2.8123054055737926 3.311946878765789 1.7314047116680293 3.24382414054791 2.922864416335784 2.367720832335153 2.0079086403303377 3.329127231078191 2.835606811912517 2.483512710720518 2.9694051510251622 3.277114435979812 2.685231844686856 3.9865621106543747 2.9826823502420314 3.5442818466207617 2.8782403221016617 3.276481306748425 3.2855695765273065 1.9616248815775916 2.429865001374412 4.2868891721335425 3.3522700746297662 2.815925671135364 3.0869643224469403 3.29337837998603 3.042465810677863 2.2164022736926494 2.4147087386608796 1.9512392623198358 2.723101832445385 2.6700769071033235 4.212113721977592 3.3215848506637595 3.0720663675904927 3.418955728639607 1.9319189598638287 3.767628169780287 3.139288320003325 2.7879001832060553 2.7274039329634805 2.5628618300434725 1.7533094331762384 3.57512416212018 2.820105042257804 1.5246964431004335 3.516407174530263 2.650794151606286 2.5664043148525986 2.0233784523432936 1.845475271719985 3.5982863501383653 3.1010226621411947 3.4005574906951024 1.5509283018637998 3.1978363114484853 3.038895903414427 2.664042609854692 2.5427495019730006 2.1640399740683343 3.3491175778087934 2.1125185471994445 2.313126232137664 3.534537633337778 4.27666545941897 3.032422641887416 3.6854772512298606 3.766724905921077 3.100887867888115 2.717580534288495 2.4313707060440386 +189 190 0.7061380732590006 0.17345903301693721 -0.9403925319126558 -0.3513302196586521 -0.3291734902968111 -0.1584859950324502 0.15480114466197215 0.1711384058140295 0.8713104707517403 0.8522341126921349 0.42973236421203875 -0.6152916765544003 -0.8857669601909988 -0.5291208748674774 0.23515404892679292 0.5855197550328615 0.4376728717351277 -0.3512499838877374 0.21631156458461254 -0.6913032535118322 0.9514708574143311 -0.7075434158421559 0.4902458849870901 -0.19740237539187344 -0.5717643883277188 0.8213831049066389 -0.48450956825926816 0.27211703332088466 -0.686001714307674 0.6755624655126453 0.5906912288380184 -0.7363496842926409 0.31371684123303445 0.4736798495608594 -0.017846315211622832 0.06950951880630662 0.9227335108745485 -0.28275926658001493 -0.7682028300139534 0.9185519738898502 0.6623601690393526 0.2119642640126136 -0.5911303960025478 0.4432349439633312 0.08052787181206256 -0.1536936738198702 -0.9272361936225473 0.8459970581781262 -0.5738937465821954 -0.5962491694149277 0.6840004408020492 -0.11760134700714886 0.026237797466054813 -0.09425096312385994 -0.41367444428973954 -0.6149475014291252 0.48555540920014506 -0.9217246200956652 -0.10110117750871828 0.8190528178132528 -0.6079784591276416 -0.2935112362990715 0.42754770265829944 0.44381985004754254 0.007146907076921449 -0.39970398636004956 -0.37856414657992543 -0.18813331601226446 -0.6798196076129885 -0.8167030694569006 -0.39128771058892786 -0.7607484994927807 -0.5850423489114627 0.5021162682690079 -0.09567812771880413 -0.5269552431755204 0.052896272409557854 0.7063227530360399 0.47248016910695423 -0.01691289677414587 0.10545249696059522 0.2249951062129789 -0.8026906119156627 -0.6122578998468085 -0.22065286011889618 -0.830579708946579 -0.05109850339890376 0.5049809208292102 -0.9105821652990025 -0.8412294378876721 0.27026455028286334 -0.4138708015715238 0.47035179335222677 0.8473403817988276 0.3963155805487457 -0.8965880143672407 +190 169 0.7503720836656627 0.06402882063262094 -0.39854136280405217 0.28205693836476997 -0.4361586385702405 -0.34783982597362906 0.2315039922531026 0.6388797352459847 0.3712191555627071 -0.11160765949627627 -0.07214925696655805 -0.9420095900167746 0.8957383927985041 0.6245384357881509 -0.9648082658862411 0.4010890981417452 0.5690841254149608 0.3428623727856033 -0.5840775958183175 0.6015728528429902 0.6094677047333152 0.3103918136032724 0.9197529831586932 0.038314961611478404 0.3276233530031847 -0.10464376471459658 0.44488477543807603 0.18683422202051947 -0.1294264615587959 0.17664386381235397 -0.9805188275161223 -0.3769995517356133 0.97057149369679 0.3228399369580268 0.4712764992035552 -0.7251570717068803 0.3381659135593671 -0.2102253829807994 -0.946323362745146 -0.9007380013689668 0.14176754525337465 0.08297850862517508 0.622223899230206 0.19783439728844243 0.2571122664326937 -0.80328869826698 -0.700000748087193 0.12469666793106282 -0.4687359278770551 -0.39131753408721215 -0.5495695155584179 -0.9621295022067589 0.7570694759604402 0.46264307928183834 -0.150697483562916 0.12724726992515567 0.10609414350718538 -0.23872062101640212 -0.3313280542649457 -0.5909617475712332 -0.9873823703616968 0.48166618557962715 0.6401655759619662 0.34878904305504843 -0.5820115394307945 -0.4110204325181954 0.045165691919262674 0.3857412910331932 0.814869507242441 -0.9731575303030007 0.14272509975894776 -0.8527300050650066 -0.0038409717837322166 0.11156479370482386 0.7527806262549184 -0.7973576512001508 0.976622612867424 0.8334482859067063 -0.23314291406108612 -0.5543265594715945 -0.42300434306504275 -0.49916579760700497 0.9377938251304425 0.4985209140147133 -0.9277845497954313 -0.268853656402932 0.04400681297736164 -0.9971416430209257 -0.6020306923970884 0.978927536036249 -0.6859135163010213 -0.5906360553656413 -0.3213212721522847 0.8479788735553115 0.9382108297825305 0.45071951336203164 +190 170 0.7549790697506595 -0.6087844754993137 -0.4978264666230545 -0.3511550198879967 0.2789034886883457 -0.08289736883971321 0.21546139331484437 0.23233886990575714 0.6629386638546815 -0.009617397051654208 -0.3308029419904097 0.18905870527004032 -0.7872412283022112 0.04290218531471823 0.5344000701779734 -0.002953368359116526 0.8222579735138114 -0.2350905405675341 0.385198071663416 -0.8641467920058123 -0.6376382884588427 0.6063728556268009 0.061940432368488896 0.38728478038503833 0.9921147570251514 -0.16638266824665182 -0.02379508153260823 0.7858495494410238 0.07908703963687413 -0.17592610768018813 0.32725721186732115 -0.5024881602103923 -0.25334738489828057 -0.11373218717537115 -0.15337877633523211 -0.8760739521813927 0.4964932814320355 -0.16827845538259711 0.8444939748443447 0.3727132374460369 0.538010129690857 -0.3970978490018191 0.14151316777000833 0.18539259187110702 0.7928912668707853 0.3081434739410749 0.6237280368179157 -0.6609516116594367 -0.8092258251100275 -0.19825629138489131 -0.17428167758578783 -0.18775619570495228 -0.5724011381034366 -0.7222394939208319 -0.31831769754865746 0.5417212491371484 -0.030626503701876917 -0.4516678910298244 0.2170955592002104 0.552598975867868 -0.8459900435460004 -0.47816404207478924 -0.8827784726392507 0.3257801632745785 0.4968979544625072 0.52805429619681 0.7923307319759549 0.5205559166496805 0.6234163536434432 -0.5489612898261658 0.13474924857863968 -0.5183588854115122 -0.6628740319083284 -0.5050144516259989 0.029138975276989276 0.6700658174600771 0.592846488964264 -0.9260923360293718 -0.20727393801746397 -0.7539521185817293 -0.47761404488497194 -0.9720412647842984 0.8318835866434824 -0.47327289498733793 -0.07917375938597582 -0.14178739791701478 -0.6123508546950862 0.2755560410308051 0.6952426620523575 -0.9594948572936055 -0.5798649508454949 -0.5471205319737327 -0.25746693341804816 0.7876594964639376 0.1602519315603348 0.8351802937717028 +190 171 -0.4802589180653396 0.5348099256893408 -0.6965672209997782 0.09320519906062863 0.11872645036208285 0.288848854082852 -0.4810111838191009 -0.4603006089146131 0.23521811206307341 0.28425653171839316 -0.00412208088235233 0.5652223636548737 -0.7671371163469243 0.8978962391434415 0.028675429621606074 0.21841426094545868 0.9302835182186013 0.3200374963411161 0.05727652858437504 -0.56415032417067 -0.18606781075568857 0.1693333429613313 -0.4550858239155613 -0.1430585540256546 0.3976705914327945 -0.3025526949353703 0.7394639550938173 -0.3441906293971997 -0.3399522267391861 0.8530793171642248 0.6399544994268747 0.40212217748041423 -0.8235433464107595 -0.652469172718694 -0.23963622507281657 -0.42467986080365194 0.6815233513232659 -0.8971708327038108 0.5501367465766083 0.7908177193932722 0.8735783817951746 0.4355938417649394 0.4888597740673535 0.1358928843175753 -0.9831434593468369 -0.2818831909195061 -0.7184212244609647 0.5932674567243696 0.9024309698061197 -0.4875184330376665 -0.6889245306406113 -0.8426586537581369 0.704302540032063 0.013381356932356203 -0.6505521323074417 0.4263233558611561 0.744782146218474 0.09619124240878874 -0.9601788835973175 0.06711964442400076 0.48550772781647455 -0.44433056645949764 -0.23961309553408716 -0.29684304124911254 -0.5033707842506696 0.950052308579844 0.8042101377528721 0.9180813421387228 -0.6847864727815154 0.012000650639004462 0.18998251229263308 -0.9185791938331431 0.029184037871884394 -0.8487001642765302 0.11850895174737341 -0.2510764808563526 0.2777142875134253 -0.05423313067918989 0.6418751051104015 0.33295914652533387 0.6697591465415211 0.8619656593397034 0.8178080128685743 0.6474135850660931 -0.5699987259345825 -0.20005624189811422 0.7054575509274896 -0.3480779686577531 0.18901604310653863 0.751931753964139 0.9411611753557889 0.5987103346873004 0.15790922313628575 0.7749069804001003 -0.6059655180924508 -0.2849134148857442 +190 189 0.7061380732590006 0.17345903301693721 -0.9403925319126558 -0.3513302196586521 -0.3291734902968111 -0.1584859950324502 0.15480114466197215 0.1711384058140295 0.8713104707517403 0.8522341126921349 0.42973236421203875 -0.6152916765544003 -0.8857669601909988 -0.5291208748674774 0.23515404892679292 0.5855197550328615 0.4376728717351277 -0.3512499838877374 0.21631156458461254 -0.6913032535118322 0.9514708574143311 -0.7075434158421559 0.4902458849870901 -0.19740237539187344 -0.5717643883277188 0.8213831049066389 -0.48450956825926816 0.27211703332088466 -0.686001714307674 0.6755624655126453 0.5906912288380184 -0.7363496842926409 0.31371684123303445 0.4736798495608594 -0.017846315211622832 0.06950951880630662 0.9227335108745485 -0.28275926658001493 -0.7682028300139534 0.9185519738898502 0.6623601690393526 0.2119642640126136 -0.5911303960025478 0.4432349439633312 0.08052787181206256 -0.1536936738198702 -0.9272361936225473 0.8459970581781262 -0.5738937465821954 -0.5962491694149277 0.6840004408020492 -0.11760134700714886 0.026237797466054813 -0.09425096312385994 -0.41367444428973954 -0.6149475014291252 0.48555540920014506 -0.9217246200956652 -0.10110117750871828 0.8190528178132528 -0.6079784591276416 -0.2935112362990715 0.42754770265829944 0.44381985004754254 0.007146907076921449 -0.39970398636004956 -0.37856414657992543 -0.18813331601226446 -0.6798196076129885 -0.8167030694569006 -0.39128771058892786 -0.7607484994927807 -0.5850423489114627 0.5021162682690079 -0.09567812771880413 -0.5269552431755204 0.052896272409557854 0.7063227530360399 0.47248016910695423 -0.01691289677414587 0.10545249696059522 0.2249951062129789 -0.8026906119156627 -0.6122578998468085 -0.22065286011889618 -0.830579708946579 -0.05109850339890376 0.5049809208292102 -0.9105821652990025 -0.8412294378876721 0.27026455028286334 -0.4138708015715238 0.47035179335222677 0.8473403817988276 0.3963155805487457 -0.8965880143672407 +190 190 3.7592864937593893 2.842324948602344 4.003423557579694 2.6761432935952225 2.871518475476102 2.1324843560741367 1.3390637497415627 2.680345911642586 3.660766168492384 2.7762649132974553 1.9394076544847962 3.2163193909056256 4.274917230676618 3.3611033073789764 2.817419133062316 3.044446987695461 3.8659119079818547 2.17955449884985 2.1048488569262047 3.655773388113796 3.0928598869499377 2.603347868590867 2.881123234712068 2.356166722315559 4.042599737323494 1.8304554375513382 2.989940272567066 2.3085413084502777 1.9446943257636036 2.4868821087047404 3.2577437883151217 3.1507173983415218 3.691462498277166 2.923495119499428 1.507193523589939 3.2392605237555463 3.400452752272404 2.9820392756199454 4.138748713032361 3.7931361329749915 3.6367496171135203 2.491510634153865 3.144744079650295 2.025464245163297 3.3974766022091947 2.4381749003709046 4.291544687630637 3.162440035727621 4.152526753853407 2.13753673491723 2.913451648868662 3.27941162291496 3.503144304077355 2.830570788144854 2.360673012808992 2.392885826810259 2.530625187859072 3.2428017387028114 2.0265490745882477 3.0942118086130233 4.040469440146957 2.5375448991991645 2.870120009847253 2.663722773420411 2.718453937428808 2.9498413053385297 2.9024978432695168 2.6801973264058505 3.8633410557156633 3.8147184660816573 1.99295599896518 4.642650695528337 2.4863088733621175 2.6798610145344215 2.321910353553813 3.547275405854017 2.53061596521151 3.9344208017795417 2.4182481092432635 2.653415380120485 3.2848211370204288 3.993023489068175 3.9552570292791076 3.4846240287876658 2.4821861334235864 2.997283182488919 2.500705213877839 2.660336036944427 2.640004393299434 3.7963243818337276 4.173644573801582 2.8614657354273767 2.362329837325745 4.204011096960924 3.297674212427542 4.1615023172176375 +190 191 -0.28671948345429654 0.5504918820053348 -0.8130362376698586 0.6406752182943283 -0.9749347486626032 0.3879287193885359 -0.09891040261284689 -0.5483617519820734 0.8530410901836212 -0.8515366322031503 0.4206123043280223 -0.46457396288584807 -0.7436824308837111 0.6087575193230335 -0.9652261819667567 0.8466983670429336 0.6932836817808719 -0.2788787271184199 0.3546540599764749 -0.8076490438055239 -0.6669134526911304 0.47886957095180516 0.07583712718264102 0.7032900442011338 0.7644833323502258 0.40950373436548904 0.7990415132773863 -0.22717217757813457 0.680206913506628 -0.31310045204036685 -0.4266877823157844 0.19454558200863792 -0.8633347813625583 0.540716341675431 -0.4192117260300068 -0.7408745341702083 -0.041612002185772434 0.8668915817771579 0.07187036599577357 -0.6197687174668534 -0.6455004580467707 -0.497326807414197 -0.4024297694133585 -0.7108633490088725 -0.4663645826022831 0.762394364912774 -0.792948295785082 -0.3508527640055006 0.5763959470726583 -0.4483185137386707 -0.6226823854775143 -0.4571096934385286 0.5477286346084502 -0.8719142167179945 -0.7384964082855241 0.44473120942722355 0.5808472038848744 -0.602358065126118 -0.17656768561706504 0.3220156459928889 -0.5615576926081085 0.7592337595208671 -0.3549947679080485 0.9390803947848323 -0.9016322394314678 0.28277241352512483 0.44684778795165725 -0.022421741096564585 0.35805559163457534 0.5778117063487245 -0.5591652959310909 -0.7433687940601141 -0.3097063179054067 -0.2939569050196966 0.6159615421106654 0.9485992748192305 0.5451751110305127 0.6390094058851468 -0.2112795919423165 -0.742131015798382 0.8317574563705579 -0.4935850642316715 0.1783581862454675 0.7207223296850094 -0.2257101326975406 -0.6617743850878708 0.9621819405245462 0.04941267004884331 -0.23950832147527668 0.061905943013047304 -0.9815474198012253 -0.17071242613703785 -0.8853874052117234 -0.23335378993150435 -0.23246493124071876 0.7570225603497491 +191 170 -0.11838189767695306 0.17396097608882188 -0.5310813928325775 -0.03168737878237593 0.1916489894460145 -0.15849549643418004 -0.9211509167325425 -0.2372240852161429 -0.9289565854926463 0.9967824350699146 -0.14002621580248853 0.3411642757234097 0.19067422122543642 -0.509754534007214 0.2899848440347792 -0.0642707371258191 0.95402475083406 -0.440921319120712 -0.2684196704591417 0.94975458353791 -0.8619582010877165 -0.16533982432012695 0.47547188212919544 -0.5961457372445327 -0.34910885963508487 0.7661214243835486 0.9478091614176753 -0.21326820590816586 0.9919897533672579 -0.48467010751603334 -0.34347107201075766 0.9053968030324113 0.1473661813957221 0.31428610885203523 0.5839094577757671 0.8729273547870602 0.1360343493353513 -0.9516263178848074 -0.5066740444912257 0.9184998748036137 -0.9213694592328747 -0.2520262315085404 -0.9884774457046364 0.1073536659836134 0.9312895900976121 0.8884825727738712 0.15134801048711566 0.05742380915254297 -0.3963135422027757 -0.42613597922209356 -0.9717178839563556 -0.7060374704514618 0.7683818769660358 0.1191931910756272 0.07376392397167963 0.7237542891569153 -0.05043342208221069 0.19331108987606505 0.17034657796994312 -0.8657232395019836 0.9916456950171431 -0.16146031211077005 0.6923194391989653 0.39368276324600804 -0.3008172627567043 -0.6320284193052805 -0.782627536415625 -0.5757820689040918 0.7095542814744016 -0.26562409994652225 -0.6909170688555355 0.09904277153178098 0.6330747374728576 -0.4514284396360011 -0.8113402167454475 0.5151304581075871 -0.8219406632409352 -0.4867430421780281 -0.5372326460380035 0.7195591895476885 0.16415408159404055 -0.5760129097811211 -0.317884035685142 0.1527944536457042 -0.6773187955393241 0.8333874219832249 -0.10947111022443745 0.19037047174379174 0.7246039852267707 0.22265639419027905 0.43770506003138965 0.35232736894935845 0.35258735139428476 -0.9224729484663352 -0.027158680425116044 0.5674410846351419 +191 171 -0.02052578245508463 0.11225240160028549 0.45804512456752833 0.7081251600725424 0.5016550082023501 0.30766423316228564 -0.7178499769992621 0.1247163198009682 -0.20289923355308037 0.7817411881179128 -0.8916965087462534 -0.35144522144374024 -0.3149935535111459 -0.43380893846020063 0.5608725115518025 -0.8339993091872531 0.9740107494509027 0.9523332329298528 -0.549089941108865 0.31526329495838334 -0.7314278908438514 -0.6881595294541789 -0.387165650474389 -0.3499119506723569 0.7071008108587715 -0.5528871123303751 -0.136598106988975 -0.7607331441896219 0.12149792394335002 0.9812936187600609 0.07371202375367769 0.43840211828458675 -0.3126588853243324 -0.621042519787137 0.5625564775128458 0.5098691690642998 0.7376167004452792 0.4056848612131141 -0.4511659536189936 0.5018576691095151 0.8798552167117346 0.45621740351360174 -0.32330380625484856 -0.12034017825906695 0.5907013548162878 -0.31051653640579024 -0.33663253411501737 0.6815877221872535 0.290390591165705 -0.5927795937596485 -0.36505692428901715 -0.323594250167476 -0.6149552819744641 0.593673372147318 0.26806805031763825 0.6975340326258135 -0.9344950299171881 0.06098413005278225 -0.7440739244687182 -0.759813750433245 0.3909825042285966 -0.21687785804616588 0.4573632215185053 0.992255058079524 0.8857130734084595 0.7362713917293007 -0.3682859782150947 0.34498128471981415 0.48541918822025343 0.04693365331730526 -0.6075246909642957 0.5222522812856776 -0.42347966739737 -0.9456824705829534 -0.19638795078707094 -0.723454467286673 -0.9018258939102959 -0.629701277556074 -0.7750279026069873 -0.13122105136846818 0.8936469083908256 0.13359742529804897 -0.438355497620204 0.6320716960108159 0.2721049072894748 -0.8898203333931545 0.4711985702699617 -0.06867390694420772 0.39051056869812584 0.05576418751970125 0.7679584213599244 -0.7017132107017836 -0.5709431362276844 -0.399172229224821 -0.22833179232939615 0.055988037842793714 +191 172 -0.20762671073487016 -0.7329903344520063 -0.7138668295798309 -0.566517287056119 -0.8651228780697624 -0.04218327435557323 0.5398322484910469 0.7779926329749098 0.8188835395109457 0.1053770418253146 0.768483055784648 -0.30429629383464896 -0.8494926628147987 -0.4920067400077659 -0.7189904635793454 -0.7545392416165624 -0.05362587322814516 0.49735808308673435 -0.050146563446611614 0.31810512653094447 0.8263665745508106 0.3926168110014654 0.9539443104365273 0.3701606990299835 -0.3054830721127637 0.5976503909926261 0.11612899923966058 -0.8680514890521118 0.28668039245541266 0.2560490662095942 0.41867037574204025 -0.6636624173157053 0.9412431216609527 0.8586334724126066 -0.6639511614477294 0.7049544471417186 0.3439849856740169 0.7238502936393403 -0.8015461665148798 0.8816829881180144 -0.11681357482558608 -0.41764005750688704 0.42354325869355236 0.8583038586340603 -0.6598413367399636 0.4077804256718107 0.4213987091701037 -0.3875952462347849 0.7217114054567637 -0.04589262975647834 -0.02725505424099417 0.10663430502742832 -0.4700174922746754 0.8949821187828582 -0.5943713169050182 0.6175264694713374 0.9717605366454556 -0.7791228153335923 -0.5371083980292171 -0.6310611365881194 0.5769823463823376 0.09878163774031079 0.584108116956473 0.17496863071911317 0.2943754686847315 0.8634505642291865 -0.6673148864448266 0.0603008312954918 0.09772724738988825 -0.2824998905468712 -0.769022757250412 -0.3019199036249123 0.760460596949077 0.6009032486088044 0.5033951143498026 0.3194845717747028 0.038115370309418806 -0.9143063573887247 0.7752230215290783 0.09190807650533839 0.6732117400799664 0.6787939548523572 0.996220022406991 0.33272553516779224 -0.38033485582987003 0.5391539662127449 -0.6542869524610824 0.828946064731723 0.867516701005282 0.6295236045196375 0.24973509365509106 -0.34175194752744265 -0.8335617828352142 -0.32636346622831836 0.031147500327308508 -0.6333575878160902 +191 190 -0.28671948345429654 0.5504918820053348 -0.8130362376698586 0.6406752182943283 -0.9749347486626032 0.3879287193885359 -0.09891040261284689 -0.5483617519820734 0.8530410901836212 -0.8515366322031503 0.4206123043280223 -0.46457396288584807 -0.7436824308837111 0.6087575193230335 -0.9652261819667567 0.8466983670429336 0.6932836817808719 -0.2788787271184199 0.3546540599764749 -0.8076490438055239 -0.6669134526911304 0.47886957095180516 0.07583712718264102 0.7032900442011338 0.7644833323502258 0.40950373436548904 0.7990415132773863 -0.22717217757813457 0.680206913506628 -0.31310045204036685 -0.4266877823157844 0.19454558200863792 -0.8633347813625583 0.540716341675431 -0.4192117260300068 -0.7408745341702083 -0.041612002185772434 0.8668915817771579 0.07187036599577357 -0.6197687174668534 -0.6455004580467707 -0.497326807414197 -0.4024297694133585 -0.7108633490088725 -0.4663645826022831 0.762394364912774 -0.792948295785082 -0.3508527640055006 0.5763959470726583 -0.4483185137386707 -0.6226823854775143 -0.4571096934385286 0.5477286346084502 -0.8719142167179945 -0.7384964082855241 0.44473120942722355 0.5808472038848744 -0.602358065126118 -0.17656768561706504 0.3220156459928889 -0.5615576926081085 0.7592337595208671 -0.3549947679080485 0.9390803947848323 -0.9016322394314678 0.28277241352512483 0.44684778795165725 -0.022421741096564585 0.35805559163457534 0.5778117063487245 -0.5591652959310909 -0.7433687940601141 -0.3097063179054067 -0.2939569050196966 0.6159615421106654 0.9485992748192305 0.5451751110305127 0.6390094058851468 -0.2112795919423165 -0.742131015798382 0.8317574563705579 -0.4935850642316715 0.1783581862454675 0.7207223296850094 -0.2257101326975406 -0.6617743850878708 0.9621819405245462 0.04941267004884331 -0.23950832147527668 0.061905943013047304 -0.9815474198012253 -0.17071242613703785 -0.8853874052117234 -0.23335378993150435 -0.23246493124071876 0.7570225603497491 +191 191 1.5808803111598588 3.1838687387269404 3.5458279703181894 3.6009915395723393 3.825875690799318 1.9690241251903806 3.543723310145545 2.9667889309882938 3.088145357298921 3.37402111291154 3.3082699765316383 2.7960233496118794 2.159965264532107 2.837406013563569 3.4295244107154996 3.184717139517927 3.853817642986861 2.809394612267722 3.1066572595439554 3.4760370946240142 4.426502388938285 2.315729491158007 3.2342564361655515 3.504682330602231 2.370931872295957 3.8306035611176927 3.5936504941687897 3.2860281257136856 3.14903877857577 2.809347944357231 2.3083824661696166 3.0281762133892887 3.134424898382635 3.029479292473612 3.3979723950736007 3.7276086953656153 1.7909931546503588 3.5742871718545164 2.7370202823231797 4.299969679311917 4.078845162618414 2.2782898580069535 2.8929047188605344 2.305097649311029 3.25843344363296 3.200345324509355 2.436195848118458 3.0141863687248307 2.1192892066040363 2.084236375833098 3.431092338284794 3.295131029011304 2.4508273209356006 3.972866360296572 2.485582854164894 3.114448577228428 4.040319563018971 2.6929859574596033 2.247210048382734 3.5752343763270265 3.8752869351641235 1.6051990274071428 3.1239090844436603 3.2532078723685047 3.536166437183344 3.745798026597291 3.3636452757509376 2.2692248547382516 2.922729771218941 1.5061916822176598 4.2214995783421205 3.159525681523986 2.9602460610262114 3.714909948067244 2.778977459213613 3.625791644702037 3.748645929945205 3.6382617269274347 2.9526276734357797 2.8287825852379416 3.5808067963730195 3.223619623349258 2.633691223373245 2.84153064408636 2.212527123834941 3.6244205750040273 2.9236408878675437 2.288511024619175 4.055204645007634 1.4412976443660026 3.331949899383009 2.266672070429913 3.9128275074934766 2.2250794273785077 1.6197053780599926 3.056535600986919 +191 192 0.01811120013506584 0.9249602481012376 0.6315667168309187 0.7094492793235725 0.3611995761855036 0.3710397586378502 0.8616672244737562 0.48483887946520743 -0.23538166344168654 -0.09177863248547213 -0.2217947052476723 0.5207944623554557 0.023622790082571177 -0.2484127860551073 -0.2173514499632314 0.28880846091004453 0.8158094525717074 -0.6129462681324167 0.9781238940505614 0.44663890127425265 0.5973437079660884 0.5753716506913622 0.9338369285364707 0.7875146503757393 0.14317317653663064 -0.6911896982639962 -0.8379455889282548 0.904577296232655 0.8081252164202535 0.2846726519565115 -0.3674298207816311 -0.29476977164704965 -0.45502845921537793 0.6760557764496147 0.709879841961025 -0.49306208551848885 -0.3908196731880027 -0.5858968572649879 -0.002473500138178597 0.4292043647133381 -0.8881646610531875 -0.14831234490198386 -0.2992258530782994 -0.26239808010478516 -0.047759037534790716 0.4841135924246478 0.14900405254970028 0.6502617201978016 -0.02175362378337553 0.3393302192367611 0.8519604985508487 0.9473708755622201 0.022081877335965228 0.6018111467680758 0.7990728166275003 -0.2669068584766461 0.6624709077334565 0.2963039434156238 0.5861541260622032 -0.21261985018942808 0.6637922222665025 0.36137617639724184 0.6522209273305819 0.4687639553888441 -0.2354462433084179 -0.5648505291479975 -0.3355964600309942 0.7728443432307073 0.46717223586992507 0.30414653448574014 0.6997983201685112 0.7420159618365736 0.3218686170111573 -0.9698193498251748 0.479333598118852 -0.36737490180137944 0.5731908766782745 -0.2705182933212351 0.1247833482747811 -0.2081136779563315 0.8228662778848999 -0.884823341623515 -0.5295238425932067 -0.9011122256176631 0.25788516146285523 0.17851316758880187 0.3981382674207694 -0.9857823109830901 -0.8588680520390375 -0.4590569747398745 -0.645919133797707 -0.32475996591520895 -0.3518112328969538 -0.23594041068140714 0.12769648251774557 0.10082357822702348 +192 171 0.9716378311167941 0.4467735935426578 -0.8438239198388477 0.6241351301061422 0.8725955178154965 0.3824093134415889 0.8688214188744972 0.236660940861801 -0.17569766503417084 0.9560449096922601 0.2268517621457553 0.3283864235140268 0.12729862768480094 -0.580117209824865 -0.08141507016783334 -0.9821693628823571 -0.5008494535051073 -0.16000429896684798 0.6435179410108636 0.6701003328345845 0.109399090150748 0.860524653159858 -0.4729831128060127 -0.2896526360249636 0.9533869943646096 -0.4984477979408657 -0.3659545525993917 -0.487293909839734 0.4192223021633963 -0.8581321383343665 -0.9377828417727103 -0.27560905403557334 0.9042143009936918 -0.2798944037995168 -0.9985332544146948 -0.6889350257994802 0.5185774775763816 0.6686397101566015 0.43892388411102856 -0.1947433546597941 0.9392266077153566 0.21031115083992447 0.6933063539106947 -0.17276578861045455 -0.25833058517496443 0.037524186045383434 -0.9016820772971743 -0.18298442757127376 0.8123875759503891 0.39340291512890246 0.317376199240589 0.11022302083227875 -0.9808851826429503 0.5049212343845975 -0.7259621501400042 0.7240408847887112 -0.3746217019315037 -0.5205006262420206 -0.897647428662562 0.8638045447518925 -0.5803341427783999 -0.6123425501145903 -0.7165632055319404 -0.1646688971853747 0.9099116743071007 -0.9695183283796058 0.09158970661211208 0.6144074235695807 0.6070559104220008 -0.5081176773177849 0.28025990596878647 0.828407254160427 -0.3202668978077856 -0.45844164854960145 -0.10383070835498276 0.584957174390625 0.7511551752186723 0.2701934085723148 0.18322332900540017 0.48695858064502806 -0.8352884178483926 -0.1742886348645447 0.20183744162659178 -0.0047406428562524194 -0.4092010936909356 -0.8775935849758234 -0.7976262034925434 -0.9900628889007792 -0.39760415652054215 -0.4869861471996537 0.7463199321754299 0.8527635906841189 -0.6418661345592183 -0.6044095834761891 0.13021882616540847 0.2941209245096785 +192 172 -0.5552130885514672 0.8504899766402749 -0.12355878504163198 -0.4185902434365827 0.31008630271097437 -0.1573309195502237 -0.9704208022709064 0.7390748178657647 -0.45935798282654194 -0.17144637316866373 0.612200619402701 -0.26501891660552923 -0.4483092231090775 0.517966646920045 -0.6031076438173439 0.960759648974669 -0.5584623477775037 0.2512873739599435 0.7716959669852133 0.19906046918075426 0.7019505368544379 -0.32554982408303523 -0.22465572411260215 -0.0004683484416012629 0.6991908928007629 -0.8462351375201262 -0.5341880821513054 0.09602278209444037 0.3125833088846086 -0.5485421821232259 -0.8444743619070267 0.03029893849585452 -0.23452472724173212 -0.1368710489331011 -0.14401945883276657 -0.44280449458420956 0.08598174647804835 -0.43612126528671546 -0.07286254561341154 -0.3177113654537098 0.9900908564936313 0.2348625935940043 0.19215336455521137 0.35811686517385577 -0.052776060274743575 -0.6050778332155202 -0.9957026018765527 0.3258902758189235 0.03669801416204588 0.48243169236054717 0.3496359687632493 -0.11059988360873763 -0.8623101792232148 0.7849797888929324 -0.13056958717288558 0.8053532442945408 -0.8558461853586974 -0.39128353223025747 -0.22126603681218637 -0.2324034100409882 0.8100360546209504 0.2655947126378928 0.9580291760957071 -0.7404671412896939 -0.23980145694439226 -0.06761703532732244 0.5465234859108932 -0.9066080799704328 0.870337868237379 -0.6790648298750626 -0.13376499581486434 0.01177355550563397 0.36222106724951786 0.6670106579629091 -0.6284372718552842 -0.7551976527865021 0.08615352433620815 -0.0365357910572095 0.057985883779983594 0.594518796135749 0.8828550792595751 0.6276694029444725 0.6417705816362604 -0.05526607107813408 0.05842131898094083 -0.8567589332656442 -0.30981476849512024 -0.986602621480761 -0.05839182426582301 0.5301212716511923 -0.09840390204258842 0.9676189083135203 0.6295197044224028 -0.1584278204670484 0.12435727077727732 0.5431629868737218 +192 173 0.6723550849848208 0.6430486995508304 -0.020888984734908966 0.9303486604021725 0.1384490581272415 -0.9774281699240472 -0.7310382678442824 -0.8367655252464437 -0.9658926103079146 0.6849093981904457 0.9227328478285766 0.6313084374375455 -0.23696888072574818 -0.5129172221122615 -0.08837078272806309 0.17078360099248124 -0.6364850939119133 0.8131333318310008 0.25357195326181237 0.39524182487916915 -0.7836911644502063 -0.31924141214373924 0.6928500494968606 -0.4903520861052786 0.6053391083525843 0.28202932412579074 -0.7833977494149815 -0.941773220103336 0.04193260665052345 -0.47152162368817097 0.07011280496198058 0.13195319663847105 -0.8097582650633406 0.3451783942049109 0.8592184600134645 0.005342611561041988 -0.08382197947606929 0.814995276866791 -0.3309356618551662 0.08558806979058109 0.6373700412207135 -0.4239376706350233 -0.7617372678662075 0.19152803818827757 0.8290486706205622 0.9134275037672615 0.7337223911743418 -0.07491454097254624 0.8001792363776961 -0.6720503535977664 -0.2904147590594186 0.693618663436705 -0.2929532464249347 -0.22542270428182865 -0.5383477281811275 -0.6888565867867407 0.5669134141935277 -0.8927446888069344 0.2376948209739771 0.6583158893726244 -0.6881404188685771 0.42216524653524856 -0.6016057427475039 0.7000520005663746 -0.21714145071351298 0.3609200537729249 -0.024379674452913003 -0.36803219952656274 -0.36827274620744066 0.2708875839760079 0.7348622669493912 0.5872804395861233 0.5206645958317975 0.30893209713330827 -0.04947521429573376 -0.478774663002701 -0.14611534921524294 -0.26825044029976164 -0.7500103497461352 0.5908110326992431 -0.8938559683186214 0.2611045722528884 -0.1297749742031855 -0.9194215415970739 0.8262771111654785 0.2835050977804021 -0.6005316858376082 -0.3686680022500779 0.9516855049048418 0.22350850606451567 -0.05804882796499933 0.2993351214806155 -0.11507302798149355 0.14327018915248035 -0.8942946822659703 0.01473919623142872 +192 191 0.01811120013506584 0.9249602481012376 0.6315667168309187 0.7094492793235725 0.3611995761855036 0.3710397586378502 0.8616672244737562 0.48483887946520743 -0.23538166344168654 -0.09177863248547213 -0.2217947052476723 0.5207944623554557 0.023622790082571177 -0.2484127860551073 -0.2173514499632314 0.28880846091004453 0.8158094525717074 -0.6129462681324167 0.9781238940505614 0.44663890127425265 0.5973437079660884 0.5753716506913622 0.9338369285364707 0.7875146503757393 0.14317317653663064 -0.6911896982639962 -0.8379455889282548 0.904577296232655 0.8081252164202535 0.2846726519565115 -0.3674298207816311 -0.29476977164704965 -0.45502845921537793 0.6760557764496147 0.709879841961025 -0.49306208551848885 -0.3908196731880027 -0.5858968572649879 -0.002473500138178597 0.4292043647133381 -0.8881646610531875 -0.14831234490198386 -0.2992258530782994 -0.26239808010478516 -0.047759037534790716 0.4841135924246478 0.14900405254970028 0.6502617201978016 -0.02175362378337553 0.3393302192367611 0.8519604985508487 0.9473708755622201 0.022081877335965228 0.6018111467680758 0.7990728166275003 -0.2669068584766461 0.6624709077334565 0.2963039434156238 0.5861541260622032 -0.21261985018942808 0.6637922222665025 0.36137617639724184 0.6522209273305819 0.4687639553888441 -0.2354462433084179 -0.5648505291479975 -0.3355964600309942 0.7728443432307073 0.46717223586992507 0.30414653448574014 0.6997983201685112 0.7420159618365736 0.3218686170111573 -0.9698193498251748 0.479333598118852 -0.36737490180137944 0.5731908766782745 -0.2705182933212351 0.1247833482747811 -0.2081136779563315 0.8228662778848999 -0.884823341623515 -0.5295238425932067 -0.9011122256176631 0.25788516146285523 0.17851316758880187 0.3981382674207694 -0.9857823109830901 -0.8588680520390375 -0.4590569747398745 -0.645919133797707 -0.32475996591520895 -0.3518112328969538 -0.23594041068140714 0.12769648251774557 0.10082357822702348 +192 192 3.522979966313052 3.9266217088216155 3.197115640759378 3.6986323904313094 1.9927838730186513 2.4870499561472874 4.532573825106214 3.212550147800476 3.4007869876570065 2.9921972515964947 3.3887030832625022 2.4265857913153948 1.0957785435718614 2.4635375799315478 2.2942613661980404 3.6466815857910992 3.7211485752694813 2.630231686438613 4.275310086997266 2.3685213909230853 2.8388572017347258 3.4220268053366922 3.5525296053025923 2.6054009288941193 3.3324783955662465 3.211561302285806 3.262443311626323 3.8373713740989186 1.865327927451609 3.159175672744285 4.187779335988857 2.232008906810911 3.407183920239989 1.8702495440375142 3.822419472149444 1.8180796276588198 2.371262387920532 3.853976071743344 2.027583260654087 1.7772598592502107 4.026127256807852 1.902814658500055 2.673710820866247 2.3721944945498894 1.2320593633853683 3.197841931827311 3.360448407562524 2.898372836587524 2.905526902137824 2.2248320376655486 3.495392291248084 3.3928218984073535 3.729457116496783 2.804867486693928 3.1521045809194437 3.9427580144744203 3.0719772444969204 3.6767908509799514 2.9995531215559614 2.361740121378576 3.0557582772826177 2.6293984891116726 4.5081889186327295 2.77015341646675 2.6672440629155085 2.9337422506058535 1.637631999347395 3.6816447373915637 4.175065909063899 2.980832261379925 2.796673605052004 2.780860516898417 1.6455883268601819 3.685933028120747 2.6144988559819144 3.243057937138089 2.637590512692999 1.8942161039077825 2.5615787874568845 2.3225030943899987 3.8983997769175294 2.909025860269859 2.651280363657527 3.406193513901461 2.4716077671535897 3.4962737026173527 3.081137285657017 4.36949586646871 3.159084765276307 3.1941365776095507 3.3869852839838055 3.1760044253150204 2.8849506610344635 1.7411438561367047 2.2923996542631007 1.0556888793529016 +192 193 0.5695777257067804 -0.8586144302032845 -0.965532387823852 0.749505726327601 -0.14912995348413371 -0.5012554017434938 -0.500849577718403 -0.12836486197098296 -0.8895729334106766 -0.24967366431252636 0.6088156351595735 0.4508103233438061 -0.2562446042778639 0.26895621568230976 -0.3567592817879959 -0.6671434081454004 -0.24483535680827595 -0.42585034426909485 -0.8459121463523109 0.3339630492999499 -0.020654709133055338 -0.9702821042395795 0.7334414366911823 0.7840422382007801 0.8733806037641638 -0.25432234618779237 0.4035907612734577 0.7602048617069976 0.26726877166700347 0.41978490278829605 0.9729202972082305 0.7261776427777298 0.8247880554181972 0.3440074603690033 0.7758305998411086 -0.07284546457563357 -0.5495028472348324 -0.3880657534174474 -0.9491574061585504 0.10223648971812138 -0.11038271682623546 -0.17375389808974862 0.20147032591009695 -0.8294241958714099 -0.024683601696434687 0.8594027848456987 -0.36606205329147357 -0.9850695058816741 -0.37875312434193686 0.10916412727333169 -0.9740367297068535 -0.9677030147881995 -0.9019703427218768 0.5378479680038066 -0.22506996343751395 -0.7663033116462741 -0.07095397566400985 0.5775714429690226 0.43079413647095177 0.38557615060670747 0.16865948722017698 0.48354597041294367 0.78065978189174 -0.3320529256546907 0.3654430722746429 0.28482440241623896 0.5330952638375313 0.9542053786274232 -0.9642547794965666 -0.36468637793084846 -0.3567242438231588 -0.590956105087358 0.02993742255645926 -0.7333881891501566 -0.778679230775849 -0.37424065880735813 -0.9974920253014781 0.7039597987126196 -0.8001425895833614 -0.3910288842050751 -0.05640797320226287 -0.23743629529362753 -0.7954099026572885 0.828980799073852 -0.7979452827761637 0.9667443123833404 0.039203184706593674 -0.977148952360076 -0.32751225536543527 0.6656633345287453 -0.944152353048866 0.25832689877850723 -0.3805588834989091 -0.25423550947643503 0.6202230055556399 0.005241817661398862 +193 172 0.010607214842932366 0.8096493361243282 0.2513703478188145 0.9693149189078996 -0.7247653236532314 -0.9136276936763079 0.17881903560117363 -0.2635966012539983 -0.25236011934488634 -0.5786621028788912 -0.24837029824260348 0.009076068512070101 -0.9574775336879848 -0.4508787648584396 -0.27855506966403576 -0.9852920174073134 0.4239540859857234 -0.8293078932430014 0.3388458953546898 -0.9786913795078287 0.6989844270460814 -0.6478100792213572 0.9539581188506319 0.9061567892343092 0.011734195984538953 -0.7254303664801438 -0.5451986581678301 0.5637438615826236 -0.8815201943145787 -0.6326573373269531 0.08180494769630431 -0.8832691314760015 -0.3444163957741444 -0.8071536782419846 -0.7041632868324457 0.4670667600878069 0.2038964664251781 -0.048385319545231065 -0.16682983680507912 0.291320633043475 0.4944698288417899 -0.9085163977615289 0.528173239208493 -0.7361529219871692 0.6011131691153613 -0.5516120686169914 -0.04046288279673815 0.27293893046819573 0.6911657635641126 0.5431454804252605 0.44198342780457933 -0.08679165286567336 -0.588775510905827 0.563229044523391 0.2854830330392515 -0.9705523770628361 0.8098205924405699 0.8604873828785307 -0.7701861272868842 0.9741259043303714 -0.9264911919429886 -0.13434217954572114 -0.8693378230032858 0.23254574894630253 0.684605651959024 -0.9508688911929752 0.8093962749218369 -0.7194467839373089 -0.4043287345885136 0.9450123001226993 -0.024804305305105023 0.3647906031962165 -0.12373468059423276 0.4420103152861563 0.7954499727530753 -0.10727404904352622 0.7813385638614858 0.08434087327921436 -0.73141563840764 -0.5599902255902598 0.035658690903848544 0.056551320047432574 0.6722594932137573 0.09109597781012702 0.7111486995803498 0.7516438486299861 -0.02401588720172243 -0.09676674216426062 0.705359388966698 -0.026959165561613263 -0.3002049267326956 -0.13051379880913028 0.8811843880277024 -0.5894918530425408 -0.10621606404349748 0.3105337229226848 +193 173 0.24758351122505995 0.36814942899104763 -0.009471262555798443 -0.28833501988255383 0.23810297303075068 -0.6273925949483206 -0.3388261366422447 -0.7036908520501155 0.08930125968799985 0.4654166984713992 -0.26424165926614385 -0.9820515864679158 -0.5383040750167758 -0.37720924125284183 0.7672946348650156 -0.6704990604875982 0.1000110179040079 0.25289211462691563 -0.2546793404724472 0.4395571539501888 0.6310903885085632 -0.10999610757823719 -0.07467353747252026 -0.11864762492517156 -0.8691631915550713 0.8260459242665075 0.4574395125941213 0.8103191440619228 -0.8191415764751069 0.04019544853522361 -0.9506172516097846 -0.5191278077930803 0.9371862978539431 0.12019982618278746 -0.9992239009686277 -0.6557090271585893 0.13375364878275042 0.13972228558482902 0.6874578084414633 -0.8905821584285025 -0.3706819040577818 -0.7685912562607782 0.2767683368505065 0.8425540117413766 0.8455998870495591 -0.6330383389729974 0.6649721547741214 -0.6128606016004647 0.3752278676541987 0.9733618868681868 0.166836915833793 0.7595754191948028 -0.08751978419942041 0.5859560308310743 0.6003869521333367 -0.762918824292647 0.5744936228210036 -0.7913744330533581 -0.364082838845998 -0.48298468072480705 -0.5965171555179778 -0.10912742160126077 0.047880991376309634 -0.6333458253508613 -0.4548765394759404 0.3956803796185804 -0.6670719824113558 -0.3635148615537769 0.9618645623841939 0.33974541580410866 0.7489915863004701 0.3519104295208393 0.9596432729164459 -0.6456040977259812 0.5118573709446284 0.5001520707064799 -0.41001486035677126 0.5572380137301336 -0.415022498599944 -0.03300963626080744 0.3717360854690728 -0.17736973731398686 -0.11409856132482021 0.35049315868371456 0.5588741297178907 -0.8097649962594513 0.5277852708739195 -0.2614517805338419 0.1823623955754745 -0.2824505263281105 0.05688080747114488 -0.6747487066403521 0.16410599980252027 0.25086362114933114 -0.17734554571396433 -0.24453808593396764 +193 174 0.7236005714896023 -0.2701915596054254 -0.26131053239004465 -0.6239517316321457 -0.10218368233051356 0.15647011625469553 -0.4297211985977123 0.34136921655407915 -0.7035802753242628 -0.7797270401845047 0.03905343143106643 -0.00781285283197719 -0.16324125566143244 -0.3265058115217243 0.664931761496421 0.5548752279044307 -0.15567494608683874 0.4041241097986106 0.9415364834420581 -0.8688788078930065 0.8940819551982155 0.18716783641985768 -0.3181218549027567 0.5430837769312207 -0.9523480929950723 -0.8332048344480609 0.39603215741139564 -0.02602110226324794 0.9289145569400987 0.19045076156779883 -0.28901697591467324 -0.6360708157044266 0.2941740539651094 -0.5397323710276598 0.36305767934627764 0.5737201427466585 -0.45194416952713223 0.7209016888795279 -0.43917086252136706 0.986860214923851 0.09371793902810799 -0.5675140278868334 0.7321635515590812 -0.1755386215608028 -0.10841506484250973 -0.2462874278195717 0.4191914739076359 -0.2627556999696785 0.594036462729586 0.8973180905744669 0.21045967525943898 -0.875079079027288 -0.5558233707848159 -0.153782491139983 0.5534159481862624 0.27755253389173373 0.9984708233470585 0.9181387528159604 0.7874930226976151 -0.19688315265496614 -0.5338896900327701 0.7485951291291164 0.41547722427695644 -0.7587984634920995 -0.5621441331306591 -0.2778845479539336 -0.8657538695536349 -0.37660000286708417 -0.10925486044964261 -0.21219945639904836 0.1698843410171298 0.21735831932699856 0.6525824579757153 -0.8892319044837482 -0.045035768770929296 -0.37826117969448747 0.5250751522663228 -0.7119740597840936 0.24375550245389177 -0.5139500811053075 0.2604942293846306 0.7210182125134759 0.13537263530880073 0.870255253223057 -0.8024769869177721 -0.7700942143185474 -0.14150291517234148 0.6510378820561509 -0.7057057868447898 0.22251893361646147 -0.26219179784219193 0.09603388681244351 -0.550492100344701 -0.2840773995498087 -0.16808495866313766 -0.7423994128088711 +193 192 0.5695777257067804 -0.8586144302032845 -0.965532387823852 0.749505726327601 -0.14912995348413371 -0.5012554017434938 -0.500849577718403 -0.12836486197098296 -0.8895729334106766 -0.24967366431252636 0.6088156351595735 0.4508103233438061 -0.2562446042778639 0.26895621568230976 -0.3567592817879959 -0.6671434081454004 -0.24483535680827595 -0.42585034426909485 -0.8459121463523109 0.3339630492999499 -0.020654709133055338 -0.9702821042395795 0.7334414366911823 0.7840422382007801 0.8733806037641638 -0.25432234618779237 0.4035907612734577 0.7602048617069976 0.26726877166700347 0.41978490278829605 0.9729202972082305 0.7261776427777298 0.8247880554181972 0.3440074603690033 0.7758305998411086 -0.07284546457563357 -0.5495028472348324 -0.3880657534174474 -0.9491574061585504 0.10223648971812138 -0.11038271682623546 -0.17375389808974862 0.20147032591009695 -0.8294241958714099 -0.024683601696434687 0.8594027848456987 -0.36606205329147357 -0.9850695058816741 -0.37875312434193686 0.10916412727333169 -0.9740367297068535 -0.9677030147881995 -0.9019703427218768 0.5378479680038066 -0.22506996343751395 -0.7663033116462741 -0.07095397566400985 0.5775714429690226 0.43079413647095177 0.38557615060670747 0.16865948722017698 0.48354597041294367 0.78065978189174 -0.3320529256546907 0.3654430722746429 0.28482440241623896 0.5330952638375313 0.9542053786274232 -0.9642547794965666 -0.36468637793084846 -0.3567242438231588 -0.590956105087358 0.02993742255645926 -0.7333881891501566 -0.778679230775849 -0.37424065880735813 -0.9974920253014781 0.7039597987126196 -0.8001425895833614 -0.3910288842050751 -0.05640797320226287 -0.23743629529362753 -0.7954099026572885 0.828980799073852 -0.7979452827761637 0.9667443123833404 0.039203184706593674 -0.977148952360076 -0.32751225536543527 0.6656633345287453 -0.944152353048866 0.25832689877850723 -0.3805588834989091 -0.25423550947643503 0.6202230055556399 0.005241817661398862 +193 193 1.8903947991932981 2.9424146417434067 2.159172128058626 3.5037286670810683 1.858179833344024 2.9738945218257378 2.224165324605939 2.60538681277197 2.425437694997591 3.4575555194983227 1.9128113118257246 2.6063627407779926 2.3549279261252996 2.835713279155368 3.2190422391165434 4.627558919396661 2.4141718790591664 2.4176117563167763 3.527615356131513 3.189041992350681 3.4368916008257653 3.1887541592128414 3.7483238707537243 3.8866145348625736 3.5069007672681733 3.1709421395752186 2.4933063234014132 3.2428561078311144 4.08169540629863 1.8935128829827717 2.7543322603548637 3.422074720955335 2.9468454315936072 3.4387141040652507 3.978592277300484 2.971645390116721 2.070301602893267 3.133578759568767 3.050872173738457 2.9495731576500877 2.034271296014875 3.021907676719258 2.2032955401056853 4.058302790834856 2.5236487414961237 2.5644996923913066 2.40057649349448 2.909891233768573 3.3120414581495154 3.5984980532129596 3.1139927168493164 3.5859591247262266 2.66690130406798 2.9919856928608586 2.8992154222139757 3.5702164077755603 4.145811949861425 4.606313501264374 3.2176918603740656 2.908547764708112 2.934169164021884 2.7243270454242645 3.4162555698600023 3.1378878968048394 3.2440436288187113 3.6717455367026117 4.035036077763461 3.5836870254943753 4.254387359481184 2.709980154454649 2.052441759440184 2.4892573083478675 2.5180977120534056 4.051198367486371 3.087690514235206 2.012016828817937 3.1645783690321085 2.3340972899319055 3.5370979760613075 2.8924796995740434 2.042992725307734 1.7795322067900652 2.671765928653457 3.191754201493953 4.34369557520726 4.570359203616851 2.313212851431472 3.1067418435184853 2.569832597529257 2.0372462594800984 2.7132509843813164 1.8580330685841817 2.482098783800012 2.878777258931521 2.1141384570696493 2.325817213661598 +193 194 0.3126395912264224 -0.07518390120084328 -0.38282071481794944 0.18213317934598905 0.4993658307715769 0.3159271438410294 -0.1712505884296398 0.5334347595368012 0.44126451818146606 -0.6047671843009947 -0.3301994799613881 -0.25523683776343375 -0.42933130117633844 0.8905140539255656 0.8432620818287542 0.997068859163589 -0.9854523543685885 0.4265455101380531 -0.3093176449314172 -0.21452636822948157 -0.49720688792404677 0.871396633652014 0.8730376283861747 0.8823867661186702 -0.5840632945924877 0.4784825795406129 0.28237516942579477 0.635246680739648 -0.45846164751984286 0.15252283466019145 -0.29155818995519067 -0.44280563354302793 -0.3961877747760014 0.936842496381129 -0.322404997396708 0.6559131619363057 -0.6989563540690549 -0.9846725710136581 0.010927873050787795 -0.39464014719593865 0.7796829323589989 0.4138696834108815 0.45187283801860634 -0.9104448318008103 -0.6798001491304275 0.012078400601505335 0.006356277983739167 0.2764362867199348 -0.9652775644755496 -0.5316018052493685 0.40191122574210425 -0.21401646848080502 0.1807447879805142 0.29914442821817344 -0.884214620274383 0.290288993293788 -0.9828620906377896 0.7601585373874651 0.385158445038164 0.6195053774084989 0.42408680444086566 -0.30880904950409294 0.7965189976722327 0.9195416492893704 0.5634322761351036 0.8238136647868346 0.7237346440852424 0.23576015765768865 -0.9286694254523715 0.013589911603438587 -0.4730576296538822 0.7888179085637461 -0.047651012741796395 0.5186263313633819 0.867439585441661 -0.4598262742017747 0.37782792531230003 -0.23129898145533234 0.9750580868997467 -0.5637684390394919 0.7175709632618112 0.10278627953140163 0.6869546264371886 -0.5983918262194012 -0.7770139182469893 -0.6001840692961729 -0.9247961466245687 0.8206048368542898 0.4950375409304073 0.6429073170967039 -0.5286881975539071 -0.659703290382796 0.06583257688534427 0.8393377243151108 -0.07642249783875199 0.9026816271754647 +194 173 -0.2862687112002651 -0.9918548858730261 0.8319917379278194 -0.21464641196221246 -0.9653814846040611 0.7822574171463355 0.4756813887871141 -0.4314767287477348 -0.06284029582292927 0.762025531989281 -0.6835401766204845 -0.750575027431081 0.974421773773126 0.7170821809796735 0.5350582621211852 -0.5632577076122349 0.33932153809329124 0.8518605058940967 0.6675224566233686 0.5880624968855261 0.40258011344866707 -0.6911491557385927 -0.4891592347545548 -0.0788489800109966 -0.4756201729663361 -0.7749604619889319 -0.30761338112797687 -0.017201528915602005 -0.4122433298893544 -0.6275585501189946 0.09003908227240864 -0.36654677971869654 -0.4132385329847672 0.8538148745248852 0.9622783541353528 -0.035064050850027284 0.9031628617235246 0.09651033220273786 -0.12233219588082012 -0.7232934790327801 -0.14306830449313623 0.7660990227565778 0.5511966256549716 0.7317147740451322 -0.23386477666519734 -0.6775956784482589 -0.6105261480211768 -0.241619811435402 -0.47591382471677 -0.6953011863652818 -0.2054787116998278 -0.419135849987869 -0.4978360675707505 -0.6201142084974285 0.9662900588689456 0.5017448900295829 -0.7830083144716442 0.8957242119136222 0.16796413509462838 -0.4715068208953064 0.06382122821851599 -0.4104273585516405 0.6808627215131273 0.3018766369277994 -0.19964779011886202 -0.43564748701191136 0.2980425122860886 -0.3227688517070806 -0.4081744352952079 -0.6807002679443543 -0.8512547574023406 -0.6539664628969863 0.2206696924600271 -0.10306495248400038 0.8922852875027907 -0.5589937294521945 0.2564753215125646 -0.8298311661516571 -0.3884291997741989 -0.2432739142696192 -0.6346351128174303 -0.040889521970367326 -0.38763514194302484 0.9333363201499467 -0.07499693765657223 -0.8681271848323464 0.5400704274772405 -0.6767123727366045 0.030733845953767824 -0.6653793746466765 -0.41993803495761206 0.38167597786129837 -0.2677923327534828 0.05246934727625474 -0.743696470573235 -0.10331420086941723 +194 174 -0.024927513939757118 0.2018659154464717 0.34859939437391074 -0.6544002457930984 -0.2995067318660156 0.17109712989944592 -0.14688891290916417 -0.4183618545648218 0.5344814940560885 -0.8508274202716943 0.9542953484349685 -0.28470481246686674 0.03394053987956713 -0.9338253151039333 0.3873509399594044 0.715019103208266 -0.1715192379079069 -0.20899439320661584 0.642825999215697 -0.9598813586212618 -0.6374922161767891 0.7926724046635361 -0.6246704328586443 -0.45999188987200057 0.6846195442033278 0.9864016974539975 -0.47139253036834905 0.937514868998103 0.01862696406945563 0.6718408868067565 -0.12421024052327811 0.2470966714787377 -0.9038879796164343 0.2893072969393584 -0.8409009047389624 -0.8199389081055555 0.21535614695056582 0.32929781605993447 0.948773722159703 -0.7568001758998586 0.3358217507566479 0.11120975938968325 0.9732676018429962 -0.8867937671397192 0.9046247293015981 -0.5980830415524341 0.08563808108257875 -0.1488666326286543 0.4134069622749905 -0.5486921985314455 0.5910981654684009 0.8026846719146015 -0.13617228578336005 -0.613599877565671 0.4699702265725605 -0.9210641283753587 -0.7517804643762622 0.1967498972286632 -0.9912152810279926 0.33388790137446955 -0.6644733383439652 -0.4659953401137895 -0.7849519872486501 -0.16508130917443253 0.0372884321446858 0.6580496624410075 0.0385226598411228 -0.27499506312308153 -0.9791205436996693 0.6876309746771003 0.37481577436628033 -0.12460103211434381 0.24653022162768834 -0.12008031220117776 0.6976618613683108 -0.49633933670948416 -0.7432112197048142 0.8982238903486996 0.8835950932607186 -0.12736695538059406 0.14261273967020527 -0.03399399696235683 0.033968976879294566 0.003563067478048243 0.8560888918512193 0.787188225909949 -0.7283443923974953 0.8837792118234948 0.7023478239914129 0.07746581939479413 0.990431037441277 -0.8552551238465056 -0.7121776349617097 0.1874800328677655 -0.3294538548313408 -0.30151467702000145 +194 175 -0.8880697061519387 -0.6543957289502853 -0.8465161616652881 0.8394381030496523 -0.935839314500958 0.0610565868263524 -0.03411031112063623 -0.7202978622716554 0.5393992879619545 -0.3360578414262534 -0.9882674392126105 -0.3530343158482536 0.08588300727257381 0.9826359271507465 -0.37526237159450115 -0.758297794895521 0.4626043788737979 -0.7880532055977569 0.6026844598241956 0.3055951491620075 -0.6958589218779156 0.764776394585091 0.3984343746230885 0.26550190998723 0.4111219611624337 -0.3177036337429773 0.11858159851250472 0.3968528165009466 -0.5861572864370903 0.2912639494108533 -0.9156745339060886 -0.9469289706101018 -0.7689676133441294 0.07527191999282401 0.9171781676868354 -0.7594028568223194 -0.7219602212079879 0.8629997709186112 0.1634339097496964 -0.2866272191723447 0.8010195192092371 -0.865700769014978 0.6441588167928001 0.4473809287203001 0.7390608147991131 -0.5800528509438825 -0.7096317210633838 0.8645170705445941 0.9978515418416365 0.5503042617916449 0.6574976830724728 -0.858415184962237 0.8257545009485663 0.0988766813582096 0.20093995454730473 0.8171703216758994 0.597564153225056 0.9232562871123129 0.5724094378009814 -0.9638331520198646 0.25228395219621813 0.3526571819763722 0.28495980073928573 0.567981489287589 -0.7617665078774691 -0.12043819033418268 -0.30380812955605685 -0.6124899375982178 0.07876789279854934 0.1475832448389789 -0.1603785726986473 0.6893215108580801 0.008750157674041192 0.9088263997114474 0.8116179352638482 0.10926185936060584 -0.7113767336655363 0.6205046673674508 -0.540023548734637 0.31155829323721496 -0.03653463882320729 -0.9899706900025511 -0.12237855588017599 -0.19142456719647205 -0.009830228080161874 -0.7639858663901531 0.6952823508599713 0.07669540332578428 0.8055190602969666 0.30674130762666496 0.3570268196705728 0.5908103351760794 -0.09260661127747372 -0.3245045777128768 -0.22696130261304148 -0.585887624751529 +194 193 0.3126395912264224 -0.07518390120084328 -0.38282071481794944 0.18213317934598905 0.4993658307715769 0.3159271438410294 -0.1712505884296398 0.5334347595368012 0.44126451818146606 -0.6047671843009947 -0.3301994799613881 -0.25523683776343375 -0.42933130117633844 0.8905140539255656 0.8432620818287542 0.997068859163589 -0.9854523543685885 0.4265455101380531 -0.3093176449314172 -0.21452636822948157 -0.49720688792404677 0.871396633652014 0.8730376283861747 0.8823867661186702 -0.5840632945924877 0.4784825795406129 0.28237516942579477 0.635246680739648 -0.45846164751984286 0.15252283466019145 -0.29155818995519067 -0.44280563354302793 -0.3961877747760014 0.936842496381129 -0.322404997396708 0.6559131619363057 -0.6989563540690549 -0.9846725710136581 0.010927873050787795 -0.39464014719593865 0.7796829323589989 0.4138696834108815 0.45187283801860634 -0.9104448318008103 -0.6798001491304275 0.012078400601505335 0.006356277983739167 0.2764362867199348 -0.9652775644755496 -0.5316018052493685 0.40191122574210425 -0.21401646848080502 0.1807447879805142 0.29914442821817344 -0.884214620274383 0.290288993293788 -0.9828620906377896 0.7601585373874651 0.385158445038164 0.6195053774084989 0.42408680444086566 -0.30880904950409294 0.7965189976722327 0.9195416492893704 0.5634322761351036 0.8238136647868346 0.7237346440852424 0.23576015765768865 -0.9286694254523715 0.013589911603438587 -0.4730576296538822 0.7888179085637461 -0.047651012741796395 0.5186263313633819 0.867439585441661 -0.4598262742017747 0.37782792531230003 -0.23129898145533234 0.9750580868997467 -0.5637684390394919 0.7175709632618112 0.10278627953140163 0.6869546264371886 -0.5983918262194012 -0.7770139182469893 -0.6001840692961729 -0.9247961466245687 0.8206048368542898 0.4950375409304073 0.6429073170967039 -0.5286881975539071 -0.659703290382796 0.06583257688534427 0.8393377243151108 -0.07642249783875199 0.9026816271754647 +194 194 2.610755512246339 3.7916245052519386 3.06521081388725 2.6474011377770967 3.9875607854562647 2.169012890727851 1.1964839346489162 2.865272358455954 3.2802970486941865 3.3943317284434773 4.113392269325313 1.7168739929666683 2.0634310378159677 4.177078470897864 3.3288208936344406 3.5396459103772187 3.002770967273264 2.7901280484070234 3.245512385606176 2.331915289092904 3.5910540562624296 4.396998677317624 3.836325394718161 2.597303613885215 3.287103616696135 4.091403430084456 2.081698810369545 3.1010751384141333 2.4983759693455134 2.9569167831654464 2.261765454229681 2.656637661957631 3.17730840415138 3.2942167251481953 4.741052662153408 3.3582170859654807 3.656851527682276 3.9879306107652033 2.556813631575956 3.2330900986818216 3.5265044673413577 3.8911657103185613 4.4472427568942035 4.348306736338849 3.5682620578803395 2.140485152815252 2.7080498194375195 2.602592935197393 3.94611648294774 2.986343999248356 2.2708975923554138 2.916694704404568 2.3788466996376747 2.2917123633475533 2.9298489472294493 3.878309809473879 4.4358742755342515 2.9687379582916176 3.2541256229898092 3.182803985795542 2.339918712968573 2.712755200239773 2.8549784910942915 2.418875117360934 2.2137592662537733 2.713226318611565 2.031771488608226 2.0457416067582956 2.9996920164487433 2.550715863644525 2.7753509322155914 3.106988913894811 1.660111940311296 3.1494020720179323 3.984002503532858 2.664506773857431 2.8629663320280363 3.461766707667265 3.6931704526556275 2.2312357902816036 2.4420632872760617 2.5395069988950345 1.9145793665458282 3.057884560861099 2.7265794085079884 4.090195936287573 4.82476245730945 3.518293004729042 2.5278070578019944 2.8151378206542566 2.7559273077922715 3.9562685787199197 2.4538697418780027 3.096316138697878 1.9280721785245662 3.206055103649308 +194 195 -0.2701477683427449 -0.9562662622177347 -0.618747345632614 -0.661351219348149 -0.6757886201005068 0.2334941533831627 0.09145473604524867 0.18315879926666412 -0.876851577556861 0.5623660912015467 -0.6223517281785145 -0.05128643682481049 0.15770699944183764 0.39420340278179467 0.7108104142267144 0.5018283567764326 0.44865934650695105 -0.4657996540299971 0.6119656397853672 0.2002148769219032 0.6649002129167045 0.6621644555356065 -0.9266681884192602 0.041522069298508546 -0.7672445721924002 -0.7232865731504057 0.5116973273157752 -0.30917090590475316 0.9698915957391459 -0.9525500163664975 0.2386990175071777 0.09291338697438367 -0.5832591854400815 -0.802932516606617 0.7142459321743859 0.26201375070888866 -0.7340851572341733 -0.7799814107435472 0.6292517819513725 -0.5378437940648804 0.775747588538102 -0.9079202121019037 -0.9075028086229293 0.7063564795542803 0.0473915609024218 0.04293253472234748 0.5524346131834577 0.23321549931083374 -0.3001527898667278 -0.2787108612275846 0.09847340622169076 0.10609872642293205 0.26723898655006995 0.24902496712095123 0.10776923532276439 0.8873637027879953 -0.5896105788012727 0.05972847343845333 -0.21009076132974536 -0.723212661888583 -0.8882777222780898 0.3078746487941182 -0.11847661960596412 -0.34637647462985144 0.5694023457949775 0.4252552945757704 0.6326732033582378 0.21939444433593325 0.3284095413396644 0.2800824463478002 0.3848537380798527 -0.19255591612555523 0.3755597011905074 -0.7114220556825002 0.3546610457445585 -0.7378040996285404 -0.7570174523020319 -0.398623956025449 0.47222285396937513 -0.4503227882960177 0.7233534544479527 -0.4543560164909868 0.4903523327362471 0.8527768854334075 0.7918542115171874 0.9657561588685504 -0.9466947783023298 -0.2109522344756476 0.2483566076307191 0.7909215052836707 -0.06907572434992404 -0.8555850619517966 0.6231766477648393 0.7812239094695477 0.23544199087213236 -0.9569664017113026 +195 174 -0.9384773019536365 0.8382156679723951 -0.8645741735635784 -0.6291902159000984 0.7773577415804147 0.4012195580935429 0.7469770199980998 0.7475111207124407 0.12224033412899526 -0.48119949259947603 -0.011267412571039248 0.03513869613720422 0.9432421052249347 0.641302954554859 -0.04844640460687444 -0.11834124667783485 -0.3818053841323916 0.13976518544243577 -0.3525210973971209 0.9240139985753884 0.09559515491771586 0.8855397631992659 0.932266775486932 -0.5546540665069366 0.3624251374028853 -0.5031553179426298 0.8777102964395223 -0.5674824943224137 -0.05834420080221969 0.2953517851783254 -0.27446340906717515 0.28298911663312154 -0.2176343555371616 0.8080481400818618 0.39947400626055374 0.38631613512537544 0.7199018538255553 0.07679348973328826 0.7436824566827811 -0.9835708920167374 0.6790134995998516 0.5772023704070628 -0.9040436413346973 -0.5384989645267961 0.21232961041255272 0.17239164945077756 0.13053647636857502 -0.6497524693782644 -0.613203875275163 0.3751923972790099 0.6316103026018456 0.9451330709910901 -0.06918660546930422 -0.4706102773034402 -0.16618038089706477 -0.4302986867191183 -0.022709164014407257 -0.9927401745765543 -0.6344879352777593 -0.16944030061155835 0.6607844549754682 0.24558970242825962 -0.5282738176743866 0.8204246836170039 0.6652500894695357 -0.16260243797381313 -0.47240882698919706 -0.11503337909006284 -0.8750160687770994 0.8516115185752995 0.5915581344575449 0.4709071719533635 -0.022927543694778674 0.2906795172200449 0.8820844596626403 -0.659382644064864 0.13833314386578333 0.3010439822566604 0.058215993828284684 0.6090790124513243 -0.02161444761819964 0.7963832259318588 -0.42940403615623457 -0.5513293341102055 -0.2968117899644682 -0.36831210961310346 0.26827352084343525 -0.6189189652813343 -0.4798365079214475 -0.1176943134474826 -0.8301090484994997 -0.08178712241340258 0.45343546327643747 0.9526039552720489 -0.6570038129751321 -0.7566715682317651 +195 175 0.19551389038336042 0.7137805893147431 -0.18461459851965567 -0.18717685538225326 0.43736763333014195 0.3629524615555868 0.06170514335303423 0.8169956031494241 0.6205828748115945 -0.04138101335458355 -0.4696906777798291 0.6305650976302077 0.8127392204128654 -0.18379326447777267 -0.873897588971704 -0.7832707242553156 0.7471624055309054 0.07102006592344501 0.8196825604802682 0.9838526569046098 0.5149856589374424 0.027006539403989338 -0.5529188398481502 0.8014454759608796 0.5835131107282914 0.48075129542373163 0.5740920871687527 0.5522724455936701 0.4544366637345556 -0.26045437148931105 0.000659205234875726 -0.9181446213462121 0.06169866593616491 -0.2794493354694154 0.07775755743487833 -0.03784814444121021 0.271114594610103 0.003019957046585642 -0.7262713485527958 -0.011050533433193621 -0.8599653311416009 -0.7055944144581523 -0.20671417898356714 -0.5733782219191259 -0.32815848407790527 -0.05131947855364061 0.10621484551693205 -0.08040059659004273 0.40380503475290097 -0.2844573946611646 0.3698017346886713 -0.29994991780324054 0.7072609800013474 0.6467145500480267 -0.3546372772894004 -0.13668702114321163 -0.29057408679222885 0.16541760959934426 0.7187595979261463 0.9453739829854728 -0.8185322816922391 0.7163142705138927 -0.8113871234777035 0.9814689459478618 -0.4549765991002612 -0.5683393796226857 0.5537035957605239 -0.2948742673519027 0.8290741004163014 -0.13301155048989388 -0.7996078919454752 -0.7493036824016159 0.6105293334957249 -0.6254263234698918 0.39911116649140577 -0.28080177093401004 0.33985331809458885 -0.4388976300040983 -0.911951389561096 0.224595474291706 0.2592759039493093 0.7222811240244151 -0.3463147112968916 -0.7907606024827853 0.5229246579920472 0.36778279965872396 0.7241956371837734 0.16466482723831377 -0.7357105754467195 -0.7923457266858058 -0.029475123879864062 -0.8182247570823424 -0.968470742403156 -0.8729004032577363 -0.5518446022899388 -0.6924499093834626 +195 176 0.3993234278229527 0.028939108356483167 -0.6609678741410423 0.7117954424006343 -0.613499180370237 -0.8219398738729677 0.5376778981653161 -0.3887885243493576 0.5028331966579729 -0.7593490906960609 -0.547275639834883 0.6832447746153021 0.9211798346848306 -0.941497780438898 -0.14098624586192132 0.7427807833476081 0.47324033718368175 -0.7317703299240426 0.7739518127344698 0.6535213563263262 0.8730252099844453 0.4936148006269925 0.41301179565540047 -0.4232813428647342 0.6089922178967115 0.7403039605044881 -0.46566333527939485 -0.3242391014562318 -0.012906173881497285 -0.0954889527359919 -0.8284294260074117 -0.46990209259831706 0.21067653239715223 -0.9539034932828312 0.6240088567296049 -0.16117608259296823 0.2637246412110026 0.1153003331856044 -0.2280682590445915 -0.046165612177991866 0.711371255121561 -0.10659590721506351 0.7665993662861059 0.4066074387225085 -0.44235009017486493 -0.37136796009886175 -0.5307043817760404 0.21852611554311663 -0.2442674456433318 0.5680483546304915 0.16704608616690764 -0.6552941223960096 0.9221354029518027 0.07198089547252962 0.9883104033323697 -0.5716387451507132 -0.23590431475968066 -0.7691949341332984 0.7335034374069656 -0.2641057870030816 0.87968694615478 -0.9466794119947928 0.11027201865815894 -0.8425484219738955 0.025605585316981427 -0.2569670162290192 0.006186795652860955 0.3574704444361765 -0.21730862976230436 0.5264182107147817 -0.982312334113145 -0.5534618817902379 0.26367817011474237 -0.2692327688715379 0.8921893569856871 0.32429024062038625 0.36437712253268106 -0.6974151664222603 -0.7214393981414691 0.9104484639692207 0.8286451965700867 -0.3059970196438435 0.08666224283886326 -0.5096117947042127 0.4566122868968452 0.09555108944779422 -0.7414720251529152 0.4461468272374096 -0.1417863579282972 0.24323194121983027 -0.44795837399990623 -0.8422103072720062 0.2161403598818481 0.8359339231095568 0.5074364829374416 0.5173300905535885 +195 194 -0.2701477683427449 -0.9562662622177347 -0.618747345632614 -0.661351219348149 -0.6757886201005068 0.2334941533831627 0.09145473604524867 0.18315879926666412 -0.876851577556861 0.5623660912015467 -0.6223517281785145 -0.05128643682481049 0.15770699944183764 0.39420340278179467 0.7108104142267144 0.5018283567764326 0.44865934650695105 -0.4657996540299971 0.6119656397853672 0.2002148769219032 0.6649002129167045 0.6621644555356065 -0.9266681884192602 0.041522069298508546 -0.7672445721924002 -0.7232865731504057 0.5116973273157752 -0.30917090590475316 0.9698915957391459 -0.9525500163664975 0.2386990175071777 0.09291338697438367 -0.5832591854400815 -0.802932516606617 0.7142459321743859 0.26201375070888866 -0.7340851572341733 -0.7799814107435472 0.6292517819513725 -0.5378437940648804 0.775747588538102 -0.9079202121019037 -0.9075028086229293 0.7063564795542803 0.0473915609024218 0.04293253472234748 0.5524346131834577 0.23321549931083374 -0.3001527898667278 -0.2787108612275846 0.09847340622169076 0.10609872642293205 0.26723898655006995 0.24902496712095123 0.10776923532276439 0.8873637027879953 -0.5896105788012727 0.05972847343845333 -0.21009076132974536 -0.723212661888583 -0.8882777222780898 0.3078746487941182 -0.11847661960596412 -0.34637647462985144 0.5694023457949775 0.4252552945757704 0.6326732033582378 0.21939444433593325 0.3284095413396644 0.2800824463478002 0.3848537380798527 -0.19255591612555523 0.3755597011905074 -0.7114220556825002 0.3546610457445585 -0.7378040996285404 -0.7570174523020319 -0.398623956025449 0.47222285396937513 -0.4503227882960177 0.7233534544479527 -0.4543560164909868 0.4903523327362471 0.8527768854334075 0.7918542115171874 0.9657561588685504 -0.9466947783023298 -0.2109522344756476 0.2483566076307191 0.7909215052836707 -0.06907572434992404 -0.8555850619517966 0.6231766477648393 0.7812239094695477 0.23544199087213236 -0.9569664017113026 +195 195 3.3993913173551205 2.959285288945254 3.24337330126842 2.8583480504394854 3.741540417869448 3.2388144094005784 2.0916766948482115 3.256096376364904 2.841087265614372 2.7330331318154046 2.5960157758924662 2.3356628171614364 4.340842580432019 3.0706648012649804 2.2026800584381654 3.4006724495114486 2.654509856555533 1.6203232359360038 3.198926177444923 3.668946861554747 3.507445176690349 2.560190145777587 4.334071803540881 2.5367466017832676 3.633373307284171 3.4459105740431264 2.904365028917959 2.020004216775483 2.298303539081725 2.0871230453870586 2.4018480810667855 2.751586925785025 2.3527615007959355 3.4086263755962545 2.3654939372051764 1.8317010880755955 2.2415193665370836 1.732068271833489 3.156052669510031 2.48902656547783 4.0978354610027905 3.406092888097411 2.9565975460539295 2.5736410852252183 1.5834586683284986 1.5137701292330412 2.068098376688707 2.412844564652614 2.401441321406102 2.034068760003448 1.9380934997819843 3.170709605416193 3.290681763723028 2.496931756490452 2.3568475718911275 2.680352691631856 2.2469280203599338 3.2352851041538306 3.2276452136776763 3.2538221229475193 4.015036622592399 3.642356453399021 3.0046740425122964 4.216535853729284 2.8138362155283896 2.4059912529653666 1.9434575233820215 2.4983771439715645 3.896872719321615 2.4543245332537356 3.634381911908166 3.4470123245464785 1.5169673686197218 2.7139965417179255 4.1356253914240035 2.286340609946464 2.50081411764022 2.372319032738643 3.336266084423478 3.3843142844118024 2.5304442356007666 2.849994039380076 2.0976094288098066 3.2760770085672757 2.785820874228354 3.0127639724458843 3.44914977394041 2.417882356884471 2.269843408160064 3.691566576247354 2.5008226742698065 3.6483367027510027 3.022437547683828 3.8485364985898385 2.6551766809961683 4.096882806724464 +195 196 0.6118955009943956 -0.1489668536206168 -0.6083076680218449 0.35155608885957257 0.42053112273641235 0.7691076269354826 -0.6290858587178363 0.16553885722535333 0.6392454026535364 0.0070565576538552666 0.5864961860175248 0.5082720871334165 0.7801562201573011 -0.23890757862200696 -0.1166701633212226 -0.8426558886943676 0.24039066539018017 0.040150152888377866 0.04601954604604441 -0.3447987306156892 -0.9014860476529556 0.2324127007490946 0.9381178357364901 0.35058381626490687 0.46934706811703464 -0.7773923506444003 -0.3971084370003919 0.035205808493578905 -0.21709146372520416 -0.3272955582880368 -0.4865162863220889 -0.22370473290237514 0.7865896876075953 0.42678903703091886 0.3567110484643323 0.700948088809759 -0.14838969496400511 -0.7393880858482405 0.5591366306915355 -0.6437323325224542 -0.9871971917173692 -0.6137473698138367 0.12806761117852594 -0.006772924575707329 0.5232593493185538 0.05110981438511453 0.6576082483635517 0.9379919054654386 0.21905814163642234 -0.4717738991220699 -0.21664695123695243 0.30309767237605123 -0.3552908752487667 -0.5703895850029963 -0.1900200475528422 -0.4296603818427276 0.96348369457816 -0.9699760743074617 -0.44718496331834356 0.4411321637714323 0.26750415367790814 -0.6349911267797108 0.9812519961288322 -0.8107160289638953 0.4614839990956918 0.10183439507838443 0.1891143291913202 0.9641337617868224 -0.7297216591789144 -0.08094531402071414 -0.4289599382067799 -0.9435436464734472 0.1652467287653514 0.6721829981654268 -0.9093206506495073 -0.15613935835671544 0.17413898000815076 -0.3302563858401415 -0.4761863768260295 -0.38778561652477594 -0.621803411393721 0.11327160304010486 -0.024650307737114963 -0.2594652072351611 -0.21369967152250968 0.5693206667534256 -0.3581423848053167 -0.4666267801381698 -0.009320900462740811 -0.7742968682068292 0.16181315754585524 0.8382517827864071 -0.36526948360813627 0.05765679097707599 0.5739766316469495 -0.378370003706318 +196 175 -0.6695305029210565 0.19487706198695953 -0.0007589954090005957 0.05946338977344556 -0.9374229822145352 -0.43511503924778516 0.4536757283244828 -0.8148362424426892 -0.9458704231505368 0.40195381950771814 -0.8982930592797835 0.03471406732863547 0.6390500020147263 0.5216178171713348 -0.23924977608977427 0.06716030346094048 0.030155439726866407 0.22947060052469292 -0.23259977587904612 0.1971554110099043 -0.044528250802754465 0.5929894205566475 0.6764765546261262 -0.9331154629680742 0.35076906991973456 0.35233447022045494 -0.779447994924402 -0.6910547656087924 0.5527668417589842 0.449484003978742 0.9753920689546478 -0.018944171799065934 -0.5616915945101544 -0.11889019247816779 0.6702698114695258 0.8175267319435393 0.12855155020441345 0.48217913456845984 -0.3539324373810595 -0.10550413805812298 0.16081805134506588 0.9345874225956305 0.24602072417347576 -0.8843075706266212 0.9660816979841242 0.38279941807552786 0.45463477449517553 -0.23159077069029 0.6051549788522932 -0.5581168377305981 -0.4500779565465618 -0.6598270276135865 -0.8751290415375332 -0.5744054893126547 -0.5094215972020548 0.4555482524868424 -0.7304363543239887 0.45731132038969124 -0.8180407066512938 -0.815401408442328 -0.7944459637792409 0.7666749813976297 0.15626847797362076 0.9989981133014778 -0.7257715006688312 -0.8335615942589463 0.07244431962796516 0.5088134969652007 0.19722145183200412 0.5155138959748717 -0.4647674593670479 0.024410172515998196 0.2615588924153027 0.20673023447886463 -0.7385833761315628 0.26153287735241104 -0.03552035256787378 0.8547451190688173 0.5028207349505449 0.48737248959078916 0.6421490621480881 -0.229221380531744 0.7037554079827217 -0.8548449115201542 0.9750666530828094 0.45585948840678037 0.7676928734230799 -0.582809145914934 -0.8156787902119267 0.46811623828986937 -0.37779417664358594 0.38920459122809614 -0.9596517914336056 0.5071574844332867 0.8860222879304749 -0.5738321822753472 +196 176 -0.09107571467485487 0.056661125791961586 -0.013038143483691256 0.7343011992880009 0.8525835542225979 -0.12525215866183248 0.02337708207780964 -0.8435575871043846 -0.13550401990792094 0.11454750832590244 0.902722227836342 -0.9623049464300673 0.04292000306624244 0.739565887515224 0.15098917140474244 -0.2680364066922323 0.6234430282384569 0.22775884022257076 -0.5091281638344203 0.41887131546653844 -0.9386938341085054 -0.4376100371753122 -0.9478063099597132 -0.30378092627264985 0.45355664867177414 -0.9059308196567766 -0.9179672284405289 0.15395038964482066 0.9335762545303943 0.9512132838077672 -0.7901926783011952 -0.8354949342052036 0.8253483581017687 0.9982517243541356 0.14066333448264134 -0.94436504574244 -0.5103255271043947 -0.045771448304216866 0.4309127231183614 0.2075883982588007 0.2943954128413526 -0.27352073946299194 0.2222102761832765 -0.06395746557656268 -0.24325999220748917 -0.7051783780440264 -0.3925649472952566 0.7702159628568692 0.25673295020960896 0.6921212100154475 0.2066868610602357 0.11843462866631094 -0.5560908167514287 -0.2249441299736965 -0.4564531884519496 -0.5538058216542614 0.35863663750349595 0.4228946223035539 -0.468260842139274 -0.596806878998239 0.4071363846884639 0.9983353388357816 0.7014893450350679 -0.5328509113272808 -0.9803523044139633 -0.12429198161491861 -0.7363059930667835 -0.5151022550442605 0.8725067980666883 0.027719269132658875 0.8547791033241241 0.9682436501106877 0.15836830104979938 0.8431414737028933 -0.3898143509505807 -0.3198348924838914 0.910037427713617 -0.06236247649677207 0.44912646175852156 -0.9066769217014794 0.7772793988340592 0.8376916129225769 0.6569304929055917 -0.47510186108090435 0.18203040645982638 -0.12000304472902412 -0.8363376411542227 -0.1730032000930326 0.31883221824419405 -0.5293037290878193 0.1097112302673946 -0.14104846008478944 -0.6980660508617356 0.13658492296594948 -0.11026193837851705 -0.44184605087819184 +196 177 -0.9030726841215395 0.4129558796708197 -0.9409157254451148 0.5284351948457251 -0.32430730801584007 -0.45506334089688627 -0.5881015464610788 0.295269957402025 0.543654034127667 0.6948583209680546 0.4517700734698582 -0.1142668169326968 -0.0015230741920575497 0.09151644265507186 0.7735340370016393 0.6113822971867833 0.06627713383052547 0.6821813632856646 -0.2815379646526983 0.6009943087224519 0.7692724072433605 -0.9570259152075888 0.16944612432129613 0.37452241438181333 -0.1920656238199272 -0.9430899235199601 0.6513988710422245 0.48455176921015974 -0.8593614360280635 -0.10380078044601482 -0.350355444046889 0.14022949646875382 0.8036233653213987 0.15560530855584487 0.30967361768009694 0.4957090632722865 -0.23214785785143643 0.14449066375691277 -0.13617301614099575 0.6636107382420535 -0.3080395235292628 0.3037435662702521 -0.7366232075621908 -0.8307037858215236 0.290063253136031 0.43328844062910554 0.5935398764822373 -0.7800309795806515 -0.42230997166010376 0.37276090773964143 0.8065173206337468 -0.8482285683631621 0.45859400908728376 0.4293703830169384 0.025983467865603682 -0.19903375017682423 0.9960891221376804 -0.9684844077673238 -0.6044150590526953 -0.11484310209195159 -0.4015071595336228 -0.9020420262241802 0.141169610825705 0.33082911010764593 -0.4558345833053161 0.37066066470276793 -0.943240670555699 -0.4594047810510584 0.19434423424200697 -0.921976938199849 0.8932763792717118 -0.37165641283370854 -0.42945597539414315 0.19837934332720364 -0.5476548848204059 -0.8071117192480048 0.596128311616775 -0.9414628459345877 0.2697108715453691 -0.06404880984680905 0.3551741924543934 -0.32473843082217524 -0.09954649703000662 -0.2930785196126424 -0.03921379471607778 -0.11494818430073539 0.03721037677964967 -0.6141806311851679 0.7684722514351514 -0.9360996303530131 -0.1931256562739132 -0.8814320048391708 -0.045822572704767195 -0.8833251667952486 0.5074220528985607 0.11319465476261681 +196 195 0.6118955009943956 -0.1489668536206168 -0.6083076680218449 0.35155608885957257 0.42053112273641235 0.7691076269354826 -0.6290858587178363 0.16553885722535333 0.6392454026535364 0.0070565576538552666 0.5864961860175248 0.5082720871334165 0.7801562201573011 -0.23890757862200696 -0.1166701633212226 -0.8426558886943676 0.24039066539018017 0.040150152888377866 0.04601954604604441 -0.3447987306156892 -0.9014860476529556 0.2324127007490946 0.9381178357364901 0.35058381626490687 0.46934706811703464 -0.7773923506444003 -0.3971084370003919 0.035205808493578905 -0.21709146372520416 -0.3272955582880368 -0.4865162863220889 -0.22370473290237514 0.7865896876075953 0.42678903703091886 0.3567110484643323 0.700948088809759 -0.14838969496400511 -0.7393880858482405 0.5591366306915355 -0.6437323325224542 -0.9871971917173692 -0.6137473698138367 0.12806761117852594 -0.006772924575707329 0.5232593493185538 0.05110981438511453 0.6576082483635517 0.9379919054654386 0.21905814163642234 -0.4717738991220699 -0.21664695123695243 0.30309767237605123 -0.3552908752487667 -0.5703895850029963 -0.1900200475528422 -0.4296603818427276 0.96348369457816 -0.9699760743074617 -0.44718496331834356 0.4411321637714323 0.26750415367790814 -0.6349911267797108 0.9812519961288322 -0.8107160289638953 0.4614839990956918 0.10183439507838443 0.1891143291913202 0.9641337617868224 -0.7297216591789144 -0.08094531402071414 -0.4289599382067799 -0.9435436464734472 0.1652467287653514 0.6721829981654268 -0.9093206506495073 -0.15613935835671544 0.17413898000815076 -0.3302563858401415 -0.4761863768260295 -0.38778561652477594 -0.621803411393721 0.11327160304010486 -0.024650307737114963 -0.2594652072351611 -0.21369967152250968 0.5693206667534256 -0.3581423848053167 -0.4666267801381698 -0.009320900462740811 -0.7742968682068292 0.16181315754585524 0.8382517827864071 -0.36526948360813627 0.05765679097707599 0.5739766316469495 -0.378370003706318 +196 196 3.340101862113416 1.5843276743040309 2.609649948182362 2.6386024911661736 3.130408672247663 3.2282980985247347 2.8213564611997803 2.5082188158923713 3.331213512994771 1.831105990703547 4.174850569051843 3.2486449699987023 2.0241300899014796 2.6473970873430432 2.3178861094131773 3.370327893411365 2.1871366886896713 2.489098313270179 2.4234076682125316 2.18685172463182 3.562473120267888 3.3325651948586024 4.039903814070588 2.9053631660049426 2.2177108441938866 4.074655530849986 3.375565062930465 2.5571500363558233 2.9699164546567207 2.573899968063314 3.379721812207163 1.941778764756183 3.9054518205838455 2.2341629286583977 1.945287994354402 3.938217644661692 2.486792206809383 2.518272176776513 2.1366029000973583 2.7415554927051615 2.3153028243335587 2.7503276217043595 3.030009350524398 2.131578186556887 3.334612169966648 2.682051771082156 3.100414667840295 3.6250241655409186 2.0471107766327066 3.0437117980891517 2.876744641126738 2.9068621092851155 2.673903213950643 2.6109197393160133 1.4396662989327291 3.545475237026615 4.661802878511943 3.509948515095606 3.045488722749736 2.5943094716860973 2.5588950212067294 4.671960996434743 2.737629154250734 2.8266437072930177 3.696095433512368 2.855691818799433 2.643679661592868 3.0424595614938585 3.4358563707432994 2.6926906857623623 2.657521810417884 3.5012855131673795 2.008766764615849 3.109491589620781 3.283747178197136 3.016106971860609 2.7287076248955713 3.3224368422648136 3.503463232984216 2.2709560408077234 2.861640212924919 2.2879049711483157 3.4090783599347803 3.112950578166152 2.367429109253272 2.0674881746068694 3.430979237392575 3.406268948600844 3.6311738294478673 3.7849795925243077 2.1223628885518577 4.149072259425683 2.9909206700731454 2.8973879750845395 2.6239364427382514 2.910523822278318 +196 197 0.1767960093566605 0.46108569128208576 -0.07776026663485891 -0.5783562771360988 -0.22116225880542761 -0.9511223803083457 0.4151907879200738 0.20500068094948398 -0.5434525722182297 -0.26972907759736575 0.9608596837108578 0.9668880428811406 0.22090507642268942 0.8727915480550126 0.44288181793962345 -0.7786189858349977 0.7102500417763014 0.3978825245990836 -0.899093518484585 0.42369502820683325 0.602544819623472 0.3084765396775837 -0.8544150722547594 -0.7086213322250454 -0.5411259916724642 0.881717418679983 -0.4298247030803699 0.3422458538803792 -0.05893695138416155 -0.48460695469104476 -0.09142365641138084 0.4674775843313388 0.8754448290441716 -0.26556852074754134 0.17278645753077138 0.092798063538585 0.6920964772916136 -0.30041979415982834 -0.6532719634976059 0.5790629573149988 -0.3345660233219203 0.04171611148372478 0.7295269982695038 0.1558892038371138 -0.85010666666324 0.8713481672114809 -0.0880074769057686 -0.5649059335941935 -0.39243424202080956 -0.2538538805008739 -0.806184840554347 -0.2972352116180803 0.23965347261000502 0.7764565517997333 0.06476703360648672 0.9872589810953336 0.6449299855454476 0.4997716498223701 0.07600216739191934 -0.12814101371157682 -0.3334625944859215 -0.9818691579165486 -0.3741311992434342 -0.0638067080146596 0.45626259758257515 -0.7411718848159403 0.5799772295771877 0.4287436866425718 -0.5389580077026788 0.6870626382936085 -0.01439835267037215 0.810280826267554 0.6181475528506319 -0.7114775759927188 0.04023807162817117 -0.5536565648297631 0.5626156887216105 0.5184017023327949 0.9338885641624859 -0.11762291413218606 0.4186449492383606 -0.05282454629394362 0.9437793927080862 0.8386714920204348 0.15281639923129875 0.16188628043883213 0.5212338928837794 -0.5893251528128429 0.7715180597928573 -0.9710503671459128 -0.8303427447858891 0.9405150664255053 0.28878364955199753 -0.9705889089781383 -0.4669926706804328 -0.5803430429497207 +197 176 0.08878725957830591 -0.31721407002462376 0.3892285462038949 -0.23092555474181164 -0.14642829507101052 0.6117573349518719 -0.11871340336003189 -0.5338836040651822 0.5065479574039049 0.7067209310172737 -0.5544989783914729 0.20336211361373402 -0.5641894530544707 -0.9685293767111487 -0.04198055006430379 0.628935929148283 -0.4910689594658373 0.7495297408559831 0.2173620560915417 0.763306000221317 0.24974047059095672 -0.35826901463890626 -0.08072950325352313 0.8737742017510801 0.34571148635191595 0.9227811708536069 0.2984200387942233 0.6625484126117731 0.3296244367297465 0.5023700128650006 0.047632644291849324 -0.10545118367952067 -0.9526682432833811 -0.7602304451959658 0.2578465992404806 0.690507374770915 -0.2960551744624993 -0.8895779315148957 0.7602574861015932 0.9913598224078681 0.7181904875219278 -0.12782347103497238 0.45953128574557045 -0.6127081058400434 0.46775728878636746 -0.9783436120544837 0.43038231307038566 -0.158698286487317 0.6541513367507166 0.8684106508311003 0.8253397194576695 -0.5788623997681788 0.8695966607484249 -0.42966560634303064 0.0544055681432174 0.5791891313948776 -0.014959709175633273 0.39982742269467897 -0.0330744407167789 -0.920870281503062 0.832712279356475 -0.39472693116181734 -0.7101561592144046 0.5962638496345818 0.28582333140643845 0.740929863767489 -0.8799172163190063 -0.07239731168093289 0.5205963597073706 -0.7676317690394341 0.982567980990676 -0.6990116039672714 -0.5907911204779142 0.8213588937453413 -0.803454828183346 0.17087380856619472 0.9886693009149907 -0.4221646564064565 0.17232479797521894 -0.40331558454644467 -0.13172890436622153 -0.3541585547447825 -0.8789948636914475 -0.044452572187122064 0.20750172085180418 0.38518194513375903 0.3650083392218486 -0.9549284319375835 -0.05517234129795612 0.8378209398214616 -0.937515896493774 -0.627850299893081 0.17677111294340864 -0.7194936629178821 -0.7887745546642762 -0.3489753227949963 +197 177 0.28163459197331897 0.38683417176262025 -0.9191329344334329 0.6410182873519668 0.721432815865189 0.514316841743615 0.29557381245234415 -0.15788209056619817 0.6053849172404635 0.3441327936210552 -0.052653353566268324 -0.4026941416720151 -0.6068956255484861 0.3835796855636533 -0.013862392622990383 -0.0989514116689858 -0.7061058577872426 0.12304180929284247 -0.28915488032594827 0.39293879768751205 -0.7478902152683173 0.4257181555885907 -0.9164936038246467 -0.8043687020147752 0.7387544343292689 -0.009235137869052501 0.17754411702964012 0.6554965495262448 0.25190327303202054 0.24687627729118566 -0.6749027905896969 -0.4210825310791122 0.46228472241525154 0.8668664413952607 -0.9119727923636662 0.6188829691056157 0.6930585397969458 -0.046850179249541046 0.6403981575868181 0.411910661154292 0.45317701155167645 0.6363589491696275 0.8536759063931163 -0.9922642187096629 0.7553739229674663 0.599659435086954 0.7348462964829496 0.06112723568531142 0.09148685248719657 0.7366963024127808 0.15106811501493844 -0.4102593344929246 -0.47628590310004215 0.5214551620671009 -0.6410055469838563 -0.5666791822802133 -0.3241536584282201 0.7836953507479116 0.9557315581378572 -0.8420273315527311 -0.3618748300471022 0.7127460461052242 0.4840741208802892 -0.6758064627206017 -0.7869973505042416 0.36862318114951265 -0.18951026515277225 -0.43342654858673835 -0.15189285029037247 0.373368841170844 0.14628147943942071 -0.7078831889557649 0.22361540288435378 -0.5652532035449933 0.5957022049379583 -0.08440215932068051 0.24471621473222704 0.3790495907363167 0.40556366418350875 -0.3151182881459773 0.5734395888712682 0.8198454630439447 0.7603425690044332 -0.789332782493622 -0.5775466476142788 -0.25498112331803324 0.6795425771478785 0.4426411838482103 -0.2482950502205752 -0.3745139342605641 -0.5269806331281779 0.8472791013148495 -0.5453110702559092 0.5162149237587592 -0.8739200455961347 -0.18173964489227057 +197 178 -0.32946441424017747 0.7006310399420892 -0.8221677932760223 0.6673380052023166 -0.9902750205173574 0.7932228989434384 -0.2528444867830313 0.9386395024910115 -0.3813095851710915 0.45788583020643525 -0.8045756476599046 0.9125892728955582 0.18444794372932494 -0.08199544917380619 -0.4049497558861761 -0.6651936259111151 -0.46075037047990874 -0.1722965436883359 -0.4810598369916723 0.7004990701793083 0.029043373329820543 0.8185459204903143 -0.621641893457825 -0.7033910673466428 -0.07875546394838517 0.5409643575109018 -0.6996835077368186 0.054738782978011935 -0.16447228342734954 0.9810625053669038 -0.9887595712917949 -0.5660019998776373 0.6958971891046855 -0.9398697522864732 0.23016656811332536 0.7007075259285127 -0.7115348109503283 0.8804988696187395 -0.48000373280868924 -0.8397259444782956 0.9662194325156557 0.5910553307745301 0.24039970971035118 0.6791446920129813 0.9106884957237187 -0.001917611802390029 0.8388126523747108 0.2573455668243214 0.755167790532733 0.3703785286546939 -0.43763770348331765 -0.1422160454856678 0.053831573128347854 0.14210424225883056 0.025838758511632642 -0.8395757814233087 0.04597172282767281 0.45179195865412036 0.5964063868145415 0.2682579611507585 -0.8384655604763718 0.7274685558703655 -0.15233451397433262 -0.9726537748785451 -0.6286337174138159 -0.8533090845726541 0.7734008203873253 -0.9193975953639162 -0.966994241011687 -0.2960899358035769 -0.2536975971079125 -0.9648019971315058 0.6204190185643801 -0.6562901934423704 0.7523122690393691 -0.27173969456924496 -0.27757501071000923 -0.007871674555907981 0.7958348833217022 -0.4348761446492371 -0.5609139620195649 0.8995015724677833 0.5482025987217489 0.6401249743525883 0.9705241734960874 0.7644718185075468 -0.22973629314317012 0.06736387072284944 0.2645128436549524 0.9072222478754173 -0.21702318675691745 -0.9192814545476848 0.17827322957131253 0.37094041969851577 -0.09574572804094617 0.9140656071757203 +197 196 0.1767960093566605 0.46108569128208576 -0.07776026663485891 -0.5783562771360988 -0.22116225880542761 -0.9511223803083457 0.4151907879200738 0.20500068094948398 -0.5434525722182297 -0.26972907759736575 0.9608596837108578 0.9668880428811406 0.22090507642268942 0.8727915480550126 0.44288181793962345 -0.7786189858349977 0.7102500417763014 0.3978825245990836 -0.899093518484585 0.42369502820683325 0.602544819623472 0.3084765396775837 -0.8544150722547594 -0.7086213322250454 -0.5411259916724642 0.881717418679983 -0.4298247030803699 0.3422458538803792 -0.05893695138416155 -0.48460695469104476 -0.09142365641138084 0.4674775843313388 0.8754448290441716 -0.26556852074754134 0.17278645753077138 0.092798063538585 0.6920964772916136 -0.30041979415982834 -0.6532719634976059 0.5790629573149988 -0.3345660233219203 0.04171611148372478 0.7295269982695038 0.1558892038371138 -0.85010666666324 0.8713481672114809 -0.0880074769057686 -0.5649059335941935 -0.39243424202080956 -0.2538538805008739 -0.806184840554347 -0.2972352116180803 0.23965347261000502 0.7764565517997333 0.06476703360648672 0.9872589810953336 0.6449299855454476 0.4997716498223701 0.07600216739191934 -0.12814101371157682 -0.3334625944859215 -0.9818691579165486 -0.3741311992434342 -0.0638067080146596 0.45626259758257515 -0.7411718848159403 0.5799772295771877 0.4287436866425718 -0.5389580077026788 0.6870626382936085 -0.01439835267037215 0.810280826267554 0.6181475528506319 -0.7114775759927188 0.04023807162817117 -0.5536565648297631 0.5626156887216105 0.5184017023327949 0.9338885641624859 -0.11762291413218606 0.4186449492383606 -0.05282454629394362 0.9437793927080862 0.8386714920204348 0.15281639923129875 0.16188628043883213 0.5212338928837794 -0.5893251528128429 0.7715180597928573 -0.9710503671459128 -0.8303427447858891 0.9405150664255053 0.28878364955199753 -0.9705889089781383 -0.4669926706804328 -0.5803430429497207 +197 197 1.9972242755697267 2.246312294267544 3.394727720867337 2.5538726060506938 3.167247835099256 3.8954002479435106 1.6982256328360754 2.3598568753771714 3.1156523467747883 2.6198309235033723 3.617877161163179 3.2290731591484207 2.3148442383787406 3.394920710570651 1.4579113463385422 3.623754170630562 3.5618189564498293 2.3589524364156746 3.331224076569267 2.755936096266055 2.89018256073537 3.769637781018101 2.885974571731434 3.652236102652357 2.4619901953036627 3.037042493142173 2.8195259777220283 3.3191814816910954 1.9247146791800005 2.29118289431055 2.531106579636119 2.4802610105084364 4.166758530519108 3.3367299807885504 2.927625248923518 3.8481969574662926 2.6883602305101526 2.653426554867826 3.529141361762966 3.8243542785829128 3.3656771227710296 2.210656361547999 3.132662196013916 3.2724494851209607 4.136503482727201 3.7228200963405644 3.578491147494625 2.1386115032968305 3.059578187463704 2.9033554053981954 3.681204124331541 2.3697775485818946 2.8421886268500414 2.512582248551266 2.339022643265853 3.5075110850976747 1.813654149805681 3.42025958781042 2.6306811109303276 3.0182581652219334 3.5374167539140835 4.062270722942677 2.9440679616190897 3.4748323400185797 2.8522719145575586 3.3692997097122968 2.678592822038763 3.2425298294102785 3.674002319630948 3.4742389617151552 2.7825500912201875 3.66419874530159 2.8462580191178666 4.120399264421603 2.594922501525317 1.8295613581140686 3.2774565859476343 2.6216239878423364 3.080653238420867 1.8358776675220838 2.58317779507775 3.4224623633391165 3.802784771283328 3.015767820696464 3.3822571255677465 2.3465902411666906 2.627550219692891 3.3608181642163526 2.9508537042187037 3.6011228912757316 3.35556987103471 3.568594079558678 1.7714965105771616 3.929794554407755 3.173072775935405 2.8673503450643256 +197 198 -0.569977857304123 -0.3108856129706983 -0.7739373576822963 0.0957521096946814 -0.4798672143119449 -0.30532408493933816 0.06116953891520205 -0.34690405310093575 -0.6651625374856251 0.042925594988958427 0.6398424914593768 0.1850204524766954 -0.2330414487360326 0.4999922216971282 -0.5202770303355435 -0.6879776023848674 -0.37811155842397315 0.40953612308318266 0.8962101796576156 -0.4654000275351404 -0.9322913998476554 0.959944162499798 0.0776620505982848 0.0937610730937779 0.2815033831578089 -0.42595005936908614 0.5680002974794671 0.8536955005374762 0.8135959103599377 -0.06144357183411753 0.04816954570900678 0.7382506549784464 -0.31681499326884666 0.04648487745463603 0.5233482433805501 -0.8305733283658678 0.18531357540064497 -0.41468511661668184 0.9516726497065071 0.44160590554869183 0.8148005019571114 0.36070838388256954 -0.6227878510086595 -0.5856794082205146 -0.5349204472349427 0.7601915432214164 -0.6241298569091338 -0.6539899185715643 0.520473637276543 0.19193845419747957 0.6445720680367102 0.5737711648990305 0.225047839372021 0.3234874019022276 0.681211742919523 0.3423499859015944 0.41738433011437603 -0.2881082483690345 -0.5844628123235247 0.2873359426097626 0.29185368078339313 0.8897023968558841 -0.8244975865434476 -0.6441954321601147 0.6049888976524473 -0.3230744570317272 0.19998717710680447 0.672882001419812 0.7188212052828611 -0.7773851806201506 0.7079424702784174 0.18578845110006315 0.0013327528492848018 -0.8176842248859613 -0.32630573973377675 -0.5281764048450315 -0.520418116633836 0.5137725913640816 -0.17961351604539844 -0.29166945238203557 0.6937374501974714 -0.37275646550730923 0.34544253646926504 -0.31311318721292847 -0.7796685870465436 0.0675984844569304 0.2780938289023538 0.8758528187408743 0.6414019522398244 -0.09560969245340623 -0.7859441296698482 0.10544151557068626 0.33544470667996173 -0.5857459725730405 0.20676698129224347 -0.10934084059714277 +198 177 0.10500230989847847 0.8005649691899146 0.6930536619683705 -0.27072507365105425 0.3215789311227668 -0.5025818485598943 0.7511603695990263 0.5692024916987586 0.524790515712876 -0.5258641241447413 0.17195627494328458 -0.3466766480268628 0.9906311384639575 0.5162569890561199 -0.22253958757420333 -0.30540299893736034 0.3452894168157594 -0.8223068690661339 0.8773540887938149 -0.6714831564426278 0.3567631378412379 -0.36943236202410845 -0.9418531225259448 0.5259521178920346 -0.31611726329902434 0.25823224478986284 -0.3999901104739867 0.9480332505946409 -0.47343244953412134 -0.060397500414045346 0.4827464960646819 0.09723842194891263 -0.5460262184273592 -0.8699642838297728 0.7107031302359157 0.3484887774358787 0.26126717460712356 0.24667782389714454 0.34637567832045746 -0.37787279602706003 0.26633543628044376 -0.5625824031679507 -0.7193453543373007 -0.6645570653668562 0.8325972438029998 0.33648854211453627 0.4959132909651862 -0.6265167461172003 -0.7873667802520254 -0.7054016771653147 0.8083373272272605 0.023364888251148797 0.03649346847274004 -0.4806749335070897 -0.05093464885558152 0.3513590428976905 0.04469929912102222 0.45813086106447876 0.17938249174904541 -0.7920831673720115 0.838022963479609 -0.9158796609145996 0.285482245809382 -0.48842681570823454 0.18701237168392915 -0.02527259227679246 0.6933038079537586 0.42500309824266713 0.27050059684292904 -0.781878913994178 0.09601604400695418 -0.25418109760106655 0.28043434492535857 -0.2555807011951132 0.4130969203019834 0.05918830152058008 -0.9011915727520792 0.002377964290551482 0.2276437317566855 -0.6556105094338489 0.9122085012756165 0.1290429483604687 -0.7419238402691266 0.362785697301822 0.8015648423021455 -0.032627113208184566 -0.9281310375341167 0.08196443030673595 0.38998211259175597 0.12322197384850297 0.9357683445992302 0.6035382747975928 -0.16636503634972688 -0.3376601177667091 0.7613143108285756 0.542979170082617 +198 178 -0.8495409287626556 -0.527811813693589 -0.499739653101007 0.031067674115172306 -0.3899544437954594 -0.4967631500235725 -0.806656178554882 0.5967399418440735 -0.6941009133158056 -0.2673186871924562 -0.059320302856501694 -0.7150733151667901 -0.15989920897258703 -0.02656816393591388 -0.7977456331014752 0.5301539095652066 -0.30354129265498186 0.1370802807222089 -0.3548224087642162 0.3769029827227526 -0.11244638039302379 -0.040529528615091515 -0.20146442452296665 0.6479481671006992 0.6756178451194399 0.9636501027073856 -0.4526530205166195 0.7457891311562959 0.9740801817556726 0.5690584230752023 0.20781678339499 -0.6238721362332278 -0.34074105954096456 0.8944665503279161 0.1393847909926489 0.8217545763168015 0.5072593775859224 0.2546608535441903 0.39181110766321936 -0.04080647560181072 -0.685378876177192 -0.033923605674564206 0.8998974936687285 -0.1382474673021532 -0.15856523367720765 0.8029081978270232 -0.31262052693135245 -0.4353382827974206 -0.071920163971263 -0.5437862485869289 0.015613239330052542 -0.33955787931887094 -0.6764286959880434 -0.9063509502851801 0.45595052501105804 0.06706736841531069 -0.943090825270817 -0.4198655213525695 0.7126373828538066 -0.7614065458313533 -0.2783250804234929 -0.6121050449430099 -0.6561883652712903 0.461795792757562 0.695166614139455 -0.3879973116492861 -0.7246353442244151 0.4447756950853643 -0.46093730032862346 0.9963947054792199 0.4096342448934007 -0.7853364857126457 0.5552134749681519 0.9797812509938348 -0.9271434019953488 0.2447867434148443 0.4276432547309357 0.8211678088860117 0.7996194095834399 -0.5731336419140056 -0.2909964212746545 0.18430209581804036 0.432950968278361 0.025581697353023847 0.6737884623253023 0.022805414664899937 -0.13496200448106643 0.009696865235364394 -0.5441203897816498 -0.01376101531577767 0.9972197467165904 -0.905755430460683 0.6544284674910432 0.437975339895603 0.47452293482003505 -0.8600761729821358 +198 179 -0.3069935796736636 0.47515920464879335 -0.3186066829953871 0.4916957140226397 -0.9654993439880044 -0.5722967645469426 0.7359430390789121 0.13380702921214604 -0.9571795074213651 -0.07244943210705701 0.7876612288061862 0.3287585432037514 0.9623546523647659 0.5185416263588114 -0.6248410896048839 -0.3988520946898706 0.8328800253601596 -0.7808491869754359 0.11569651858163321 -0.3551007875506933 -0.04150341694076709 0.950623074750609 -0.5462267726108105 -0.7160055812223998 0.02585920440631373 0.033560856826962526 -0.7396701135469816 -0.7898199943173321 -0.988027630271181 0.6216966485285418 -0.9466449418759617 0.42915467325916556 0.36028006482055464 0.7923732443236684 0.09727561284308495 -0.002568502453399235 0.8333540388123182 0.0746066107065877 -0.9175795020391371 -0.6184434026096781 0.40213004286567644 -0.6539966774359396 0.7756047867973197 0.4790534743685906 0.42373703750837843 0.41874417862097735 -0.12243838176891497 -0.06703476839681888 -0.5689162512973978 0.9703160729567912 0.3412618719713707 -0.5884997042536635 -0.647283781695553 -0.4279023276610705 -0.37670015603088336 -0.09336314797581036 0.6343607497641743 0.6288476175225031 -0.17942376815513383 0.03486705993779027 -0.4383204302859893 0.005711826801773068 0.12782957325464928 -0.5571395599831046 0.47661749351116645 -0.13060489156041788 0.555135681161286 0.6269267467022657 0.6226569197675702 -0.3430967560914444 -0.6094365767568266 0.23048909623202873 0.6247624379735157 -0.7147051932665944 -0.2551115814307443 0.03490003713899603 -0.28514815396091153 0.2611752034464687 -0.1234944266258684 0.26578599583879936 0.517308586722566 -0.18032911545257924 -0.9795544173751238 -0.5085184052506071 -0.6191903661324765 -0.6400901880154206 0.5739604781094354 -0.6030663496899751 -0.2990629818988235 -0.17981314838783513 -0.10864738851000633 -0.8381433147240638 -0.7688378607958586 -0.5638778869494747 -0.9052808270534713 -0.2121956247956771 +198 197 -0.569977857304123 -0.3108856129706983 -0.7739373576822963 0.0957521096946814 -0.4798672143119449 -0.30532408493933816 0.06116953891520205 -0.34690405310093575 -0.6651625374856251 0.042925594988958427 0.6398424914593768 0.1850204524766954 -0.2330414487360326 0.4999922216971282 -0.5202770303355435 -0.6879776023848674 -0.37811155842397315 0.40953612308318266 0.8962101796576156 -0.4654000275351404 -0.9322913998476554 0.959944162499798 0.0776620505982848 0.0937610730937779 0.2815033831578089 -0.42595005936908614 0.5680002974794671 0.8536955005374762 0.8135959103599377 -0.06144357183411753 0.04816954570900678 0.7382506549784464 -0.31681499326884666 0.04648487745463603 0.5233482433805501 -0.8305733283658678 0.18531357540064497 -0.41468511661668184 0.9516726497065071 0.44160590554869183 0.8148005019571114 0.36070838388256954 -0.6227878510086595 -0.5856794082205146 -0.5349204472349427 0.7601915432214164 -0.6241298569091338 -0.6539899185715643 0.520473637276543 0.19193845419747957 0.6445720680367102 0.5737711648990305 0.225047839372021 0.3234874019022276 0.681211742919523 0.3423499859015944 0.41738433011437603 -0.2881082483690345 -0.5844628123235247 0.2873359426097626 0.29185368078339313 0.8897023968558841 -0.8244975865434476 -0.6441954321601147 0.6049888976524473 -0.3230744570317272 0.19998717710680447 0.672882001419812 0.7188212052828611 -0.7773851806201506 0.7079424702784174 0.18578845110006315 0.0013327528492848018 -0.8176842248859613 -0.32630573973377675 -0.5281764048450315 -0.520418116633836 0.5137725913640816 -0.17961351604539844 -0.29166945238203557 0.6937374501974714 -0.37275646550730923 0.34544253646926504 -0.31311318721292847 -0.7796685870465436 0.0675984844569304 0.2780938289023538 0.8758528187408743 0.6414019522398244 -0.09560969245340623 -0.7859441296698482 0.10544151557068626 0.33544470667996173 -0.5857459725730405 0.20676698129224347 -0.10934084059714277 +198 198 2.1521103747118664 2.97214372322835 3.638811853634027 1.8004506978239398 3.289722940643888 2.291106033286134 3.0382278153427498 2.50700620896491 2.9946936820963375 2.081250740978609 2.676327843026872 2.7415358100544855 3.2009115217270057 2.138342592173915 2.5004747522285187 3.1778507737767385 2.496146634822904 2.796502358099187 3.599598487396693 3.3188081381774386 2.377378261974692 3.693543469656132 2.803263840557964 2.7976001238291586 2.2545248065670718 3.0443652927641462 3.105934612823668 4.3697869518346755 4.692906381261835 1.6242080060717237 3.0541071969922697 2.9054562777269917 2.416379153357523 3.598037797540586 1.919066398906789 3.6231886887962075 2.7630527902612876 2.112414304192339 3.744597641061861 2.5016924064583597 3.7538719657215247 2.6249059351426496 4.36647421037538 3.4126690112364155 2.64233864746008 3.5639781615099544 3.225598446083675 3.130727535449901 3.074517985770412 3.5008790380015853 2.1331947101154896 2.34224863106821 2.043649747192384 3.160902338199444 3.150246181235179 1.5051232903119545 3.1935336961114 1.9084106875169935 2.7468560663647734 3.573556841724132 2.0369304946008713 3.4448913197503566 2.2789554928560785 3.767851423021665 2.9548583625975398 2.103817027373185 3.7137669885252462 3.040735434455989 2.8593030896976748 4.143790833513287 2.8298753561738184 1.7687136252630087 2.301889238561216 3.609046126253184 2.8007053115919307 1.6537324367438535 3.6591643890453884 2.0928135764049096 3.0334653369044435 3.270492089766221 3.2369583877974875 2.180015683302088 3.323006945183715 2.7049173711788708 3.605940289513481 1.7420525978536785 2.8790039703553663 2.4028940405941306 1.9268754408897604 1.4158284565407782 3.7447833307735925 2.931761314068775 2.893161346316421 3.1436252002633314 3.7758985426530938 2.0587133520604626 +198 199 -0.27458857222640076 0.44392281433640224 -0.8527052153081032 0.03852628670252445 0.6010981466567977 0.33889741897623815 0.36693113298250046 0.2934195148462939 0.026132096932658166 -0.9008227348545279 0.9871281230251658 0.4666559123171703 0.5896726589859465 0.12504112693172975 -0.2907655573660639 -0.4942748976373381 -0.3989224179260109 0.36564584439124936 -0.7522607228809683 -0.6139183406264883 -0.41148408295770156 0.7000623628796723 -0.5968204430023409 -0.5921118743831837 0.2652403422329408 0.8645540437895145 -0.7616630482951345 -0.5712090080780359 -0.7728770982311535 0.15353376820344766 0.7693542316858129 0.8272036574633714 0.7453048699836109 0.9545564313985802 -0.11438684350736006 -0.9024461185197676 -0.7489597442524933 -0.5165415723719413 0.6538033713278673 0.32763593271972247 -0.5883941262985046 0.31840010719656386 0.9346642172489528 -0.9733237486204684 0.2622499943977874 0.6262112604897814 -0.8180903268106516 0.8955370583157358 -0.44520014885679116 -0.34008090382238687 0.2985303785968789 0.8057724538171573 0.24197781097309656 0.5009279961497084 0.706580746971422 0.35703828829257556 -0.6220173470609311 -0.014614316559302454 -0.29949111342669466 0.8046177189594814 -0.14899876451871275 -0.30812515147261754 -0.3321223894938412 0.8880167811241308 0.8297122708717128 0.6805594858659618 -0.7182422849164374 0.2888207146517827 0.7573829074652758 -0.5030153690536865 0.6496956692796263 -0.16980362685731287 -0.5837257582641076 0.49621401472042304 0.19099813172399216 0.4985698162390746 -0.688636259286622 0.4539798861114055 -0.9581235154548899 0.6858155842408893 0.30508726718943535 -0.8187305454488023 -0.42919264105716737 -0.6009040499434806 0.26966435411990997 0.05190423589699522 0.7315976807036151 0.34627647581888255 -0.045627516665804446 0.20966191968048187 0.7049184716685737 -0.39468941374287025 -0.9315680912681195 -0.5525223081506534 -0.7457250597253002 -0.31995490512070446 +199 178 -0.7153477173768517 0.6142596237818747 0.9595725192956452 -0.7140346788171634 -0.10712268136002812 -0.5988780303450498 0.36301453152270224 0.9845324142140932 -0.23789665462978804 -0.12356698052903603 -0.28656717497436857 -0.0696171820436211 0.26987373312395957 -0.08217849010887135 -0.617302477772601 0.41648036624019924 0.5321484654059352 0.9723973699247836 -0.0810812168349071 -0.9970567087568867 -0.9750310422407305 -0.9714974532662441 -0.23783668060994656 -0.927554221047346 0.06022248130443386 -0.5652902814586904 -0.4523620464141629 0.16024328519843012 0.3595582263358954 0.9360848606217709 0.7328716693252937 -0.024138557924451742 -0.031216580594464416 -0.3769407179587505 0.8745096070240808 0.2846620545468619 0.629877481646042 0.28456468559651227 0.35610128045148914 -0.8062688102924158 -0.4226561135568194 0.580115417420749 -0.26671133703789307 0.04876932254651134 0.45808102086603375 0.7275194526889739 -0.9970176558859791 -0.6992026662129522 0.2447546661657658 -0.397759003470858 0.285668366914811 -0.26156959372314903 0.9683086615850403 -0.5361571621465195 0.25255977083473 -0.11823896163483982 0.47378851223328633 -0.8406837311977835 -0.8035656688602335 0.8001206400601713 -0.1712179426556366 -0.21982880011092054 0.8838525004393509 0.20380180369759704 0.9048247078520593 0.5937297649752014 -0.17369483272416186 -0.8445845721291614 0.22134375628922554 -0.4477200559689205 0.7853885632537121 0.9526161196773844 0.4763400486964844 -0.7951823375098037 -0.593257598558282 -0.16187076778345633 0.5311086921706196 -0.9785050732115839 -0.10868340763318485 0.1410971426904739 0.7966798673084599 0.7045833531288068 0.8322037156930009 -0.4581138889341687 -0.6041726293163863 -0.7654314525985508 -0.12822494991431665 -0.6443470599414245 0.727451363176771 -0.22936540619999768 -0.4889819605168486 0.003143308001124945 -0.08613438722937472 0.5486347830069984 0.983886541618517 -0.4564040730089187 +199 179 0.716404383252137 0.36821115360759427 -0.256533500364881 0.2089638921012884 -0.6662924259882557 -0.43329259426252187 -0.23428398106482673 -0.28983278033716986 -0.10479098415000121 -0.5539232007682997 -0.5896749831108945 0.3681457681345537 -0.7273686298213577 0.10312168635594565 -0.9229001815039553 0.7253738794737679 -0.657243520631821 -0.7962382200869549 -0.8600589115615997 0.29221702653422943 -0.11990441040405342 -0.008136952753444504 -0.13713322535946837 0.6640430224336573 0.04280240696013493 -0.15516182537249934 -0.7370250603892126 -0.6629944161440555 0.6973844827804629 0.07691325674663019 -0.4527478140419434 -0.3573926340698703 0.3627167476288937 -0.6034009397497726 -0.5175396449027245 0.09206399006962696 -0.04427410193519532 0.18145084566878444 0.016276001421812625 -0.04897072402458047 0.15274562437351258 -0.8839274465208466 0.2762704368024953 -0.3229090352445625 -0.09759513513851248 -0.08139977164684842 -0.9784550366822218 0.857453409463391 -0.8279035872863667 0.04014021129852119 -0.7690758617317757 -0.09341427379596645 0.516186166117651 0.5724431963956209 0.18007793324970867 0.8803723914430825 -0.40989677713477257 0.8854467869538751 -0.6184695808510052 0.8613000718975685 -0.7822126493357995 0.8812282350993346 -0.05979220809598007 0.38824805877611923 0.8129465033826446 0.771697515179123 0.4217107931228383 -0.9216989192627543 -0.15905330940802576 -0.6943500464616805 -0.8641336930500545 -0.7873415319116019 0.512234674941545 -0.658965096198878 -0.5221849592827785 0.9947780630665799 -0.48283665721995606 -0.227003747466769 -0.9415731898150952 -0.14468280152174473 -0.7620905891178471 0.8073690129329318 -0.08724042044800528 -0.08534698785825645 0.2943398643861497 0.2532593419173259 -0.5117063296112705 0.2976805972457608 -0.8411032290095297 -0.9806959450489117 -0.1411086874731482 0.9111651664360274 0.41931048205640264 0.91923610868478 0.8742574153440359 0.43303768071530335 +199 180 -0.006498770593241776 -0.03322038051812726 -0.9214486777978577 0.13430992716014023 -0.7898863337812609 0.04463355965977822 -0.9865938160274121 -0.29375538070171525 -0.5324497930964514 0.6951148895572332 0.20405326843963167 0.6283694793719812 0.9550248720329335 -0.34533487951096653 0.10811020831450513 -0.5112423051557173 0.20563088459431267 0.12731468042189253 -0.8068638575991744 0.4654709861236983 -0.4826891852108963 0.13361115187811023 -0.2498898107679648 -0.5244887078242222 -0.5109039532517434 0.42921000431148415 -0.8053067519032822 0.9193415410105212 -0.7869499320363327 -0.5275194673408594 -0.12199053025008899 0.10664250714441947 -0.025747094297537743 0.2161944327150398 0.5646708106210852 0.9020252527672312 0.17783945456108396 -0.8185886483988423 0.18823909077603074 0.6673799556889544 0.650761088801274 -0.9032485004634931 0.9791508827578688 -0.71075523069052 -0.28621767871607817 0.14379502563705548 0.00496548469172442 -0.9130592967656468 0.7578810287204556 0.4349765567753139 -0.643107136384524 0.424152134717537 0.5713550003383072 -0.23585989225371584 0.4968919308344355 -0.44512975630765395 0.08400800804133679 -0.2561936756291441 0.43374201905849286 -0.8432071269640549 -0.9813440279626637 -0.3205626221887674 -0.9660787382392393 -0.6088120563751604 -0.6355419816501058 0.847320378647052 -0.2734575523789595 0.4464756350879837 0.23141290684197857 0.5855794334991757 -0.9778624965605864 0.26706273802785363 0.9618541615208751 -0.43177219527047916 -0.7762704563495608 0.3519765632158989 -0.37860306432493407 0.6048717034780664 -0.9811453969156703 -0.675540991151701 0.8946942852709225 -0.14362506031233768 0.9885607887842327 0.7750538084717322 0.6423900753750742 0.40979641112333565 -0.2963198562760989 0.1940796129465423 -0.6314177701984693 -0.9118757264255837 -0.7392804899126506 -0.27782043831154657 0.9052998658419031 0.11512091757806986 0.951831190333922 -0.9112692600309547 +199 198 -0.27458857222640076 0.44392281433640224 -0.8527052153081032 0.03852628670252445 0.6010981466567977 0.33889741897623815 0.36693113298250046 0.2934195148462939 0.026132096932658166 -0.9008227348545279 0.9871281230251658 0.4666559123171703 0.5896726589859465 0.12504112693172975 -0.2907655573660639 -0.4942748976373381 -0.3989224179260109 0.36564584439124936 -0.7522607228809683 -0.6139183406264883 -0.41148408295770156 0.7000623628796723 -0.5968204430023409 -0.5921118743831837 0.2652403422329408 0.8645540437895145 -0.7616630482951345 -0.5712090080780359 -0.7728770982311535 0.15353376820344766 0.7693542316858129 0.8272036574633714 0.7453048699836109 0.9545564313985802 -0.11438684350736006 -0.9024461185197676 -0.7489597442524933 -0.5165415723719413 0.6538033713278673 0.32763593271972247 -0.5883941262985046 0.31840010719656386 0.9346642172489528 -0.9733237486204684 0.2622499943977874 0.6262112604897814 -0.8180903268106516 0.8955370583157358 -0.44520014885679116 -0.34008090382238687 0.2985303785968789 0.8057724538171573 0.24197781097309656 0.5009279961497084 0.706580746971422 0.35703828829257556 -0.6220173470609311 -0.014614316559302454 -0.29949111342669466 0.8046177189594814 -0.14899876451871275 -0.30812515147261754 -0.3321223894938412 0.8880167811241308 0.8297122708717128 0.6805594858659618 -0.7182422849164374 0.2888207146517827 0.7573829074652758 -0.5030153690536865 0.6496956692796263 -0.16980362685731287 -0.5837257582641076 0.49621401472042304 0.19099813172399216 0.4985698162390746 -0.688636259286622 0.4539798861114055 -0.9581235154548899 0.6858155842408893 0.30508726718943535 -0.8187305454488023 -0.42919264105716737 -0.6009040499434806 0.26966435411990997 0.05190423589699522 0.7315976807036151 0.34627647581888255 -0.045627516665804446 0.20966191968048187 0.7049184716685737 -0.39468941374287025 -0.9315680912681195 -0.5525223081506534 -0.7457250597253002 -0.31995490512070446 +199 199 1.9616127595260904 3.221292773250922 4.320607276454359 1.8869227084522835 3.057640588044455 2.1335513220436186 2.8483723657002775 2.7394692320225453 1.7003859717360104 3.4650903485028763 2.7652205165423087 2.556454628656115 3.326003598239062 1.5067066285996817 3.4744340155500777 3.442585276218095 2.6636814749401303 2.6835710292124024 3.370943146629223 3.238614725932391 2.62786989215433 2.0971344732831403 1.6542418224491768 3.0210160589939914 1.5929804753112131 3.2450304810957493 4.3661467118109965 3.812331468422525 3.1986837067376737 3.050356067509465 2.7808769320783995 1.9768917151682828 1.475296893612363 3.2132812405085462 2.74219114370096 2.5206980034211486 2.887370688812961 2.023448994539824 2.7471258007586297 3.234386666948583 3.03119726966884 4.03745792714999 3.215587619954645 2.5595090779938685 1.5903579191406483 1.9716122817893327 3.9322414785331112 4.173825837897577 2.887586738188464 2.827502972980774 3.5894224089559814 2.598666138557869 2.8325248841419195 3.4144919486898315 3.243632783654653 3.1910010826843744 2.3725701442400515 2.7819951075017206 2.746554041874046 4.451070401226404 2.855398351940658 2.450930439205508 3.0569221958472976 3.216204538425827 4.261974708257419 4.228118303372842 2.469571216299151 3.120940932862087 2.4504286156590673 3.321147646614338 4.3594145248013 3.520833836922756 3.3424112500549024 2.8263453208730214 2.881147741750715 2.819338074846016 3.425725860482678 3.8741999908372415 3.7832044592344287 2.2935533285157437 3.5763164689687446 2.834342849733636 3.9323025394951876 2.8739168857675397 2.5914521046432695 2.8205957084274806 3.1289631454867903 2.089878708371449 2.4918878739796355 3.1950178941677647 2.8741747723736957 1.9972334991946434 3.408807413555675 3.9953049026134835 4.667651610825431 3.520033916202846 +199 200 0.1512710003225235 0.7737538819471201 -0.7472609804806185 -0.5340298947579569 -0.5128431107445317 0.26406299298831093 0.20717731782375925 0.806853266042481 -0.5106632335284693 -0.35204191378224703 -0.5068733783219839 -0.4278067158359471 0.1446664895264831 0.24164030460393726 0.9164612997198982 0.5232706041896928 -0.6564529086242787 -0.40780080712050193 -0.7573954053159497 -0.5776316191854862 -0.2817276374316475 -0.07558210736189142 0.05305689535133484 0.12869068148689555 -0.46694476084040004 -0.5771262611174084 -0.8347028679034296 0.5563109171918976 0.29486404936540933 0.4481199227901622 -0.6774327538097884 0.2031332373235608 0.27537562627915957 0.4428761602937312 0.34712230182468673 0.21249017036358753 0.8606841811448456 0.07126813865548853 -0.7546026836419226 -0.8229467164483855 0.3674772486548974 0.7996316641035248 -0.3454584230307196 0.4297734315829198 0.18953125747419453 -0.03276148757302866 -0.8121654631253712 -0.14115881215799786 -0.022119574605301562 -0.7668380158961421 0.869059267560027 -0.797293342282327 0.0046620975707574175 -0.9450631154289659 -0.664104737475667 -0.7826638050914903 -0.6088531144721103 -0.5852994770923627 0.4643914867032388 0.8825908195887509 0.23084311403620128 -0.5496815118083711 -0.7316470819816148 0.9146366157242733 -0.4454186447261097 -0.7227055045969206 0.44870647990312484 -0.3590835583482439 0.630287782143546 0.19825903948022305 -0.6375287252948605 -0.7903141245111605 -0.19013787339249877 -0.04886557172597139 0.21204836627601376 -0.39860104417589204 -0.5376580166859 -0.8490005079723579 -0.018153142191515315 0.09283948304756895 -0.09485422008033018 -0.3397403052286905 0.7443432071884555 -0.8579473438964527 0.6886036956012238 -0.5293006111303384 0.8632600379741548 0.12028291260200863 -0.186448910567387 0.2969226025952494 -0.2640193299348834 0.23895786981115763 0.2797073620140389 -0.9222777405501439 -0.9906892387145279 0.5428318782965951 +200 179 -0.659364205736068 0.20434606345427997 0.1768422882546692 -0.19483900147265087 -0.4815001638985936 -0.7327933272778591 -0.8165404501280737 -0.6401400154919081 -0.5060478969045124 -0.011080155939591663 -0.21517035702677756 -0.05465322343271817 0.6669242725249769 0.62839463925044 -0.0254065651654789 0.3362975817450249 -0.9641461991384179 -0.9874294935595371 0.7174123687572427 0.19607695599388464 -0.9401252142945316 0.06038517898299145 0.7523947075844448 -0.6844169064137224 -0.12272073605298583 0.929057991989763 -0.18836832425513683 -0.5528958353129916 -0.9520881829226362 0.378036730059625 0.7596897767950821 -0.43241404189094856 0.5330028886274982 0.6633967902875708 -0.10235173061794556 0.26205367487650744 0.01987329883828881 -0.6248363324169703 0.8533545933761066 0.761249458704544 -0.12513388817470972 -0.7275820037326799 0.3459753767693132 0.8344587744501033 0.6500388727422821 -0.9944908941856019 -0.19999442642359666 -0.9103451753475995 0.18483603341101595 -0.1809077631178302 -0.5575159227380821 0.7206118469262293 0.9068788110746393 -0.9687738722942196 -0.012388118690722871 0.7908500563787109 -0.07534952752233837 0.6261341177140567 0.5686393149626294 0.5327753174642444 -0.6844947391458056 -0.008250217773691837 0.1652601455696221 -0.7972441234852996 0.12668065459098976 0.5038008757905661 -0.30148580230780553 0.6732527655036269 -0.5594831302100922 -0.6707069889471127 -0.22813380512792913 -0.028156974453378725 -0.5228827892682661 0.8076875846955791 0.3241934456002251 -0.7527252774480386 -0.30854636741582264 -0.1106054203312421 0.7386583598321572 -0.002259014472493881 -0.9702184562255656 0.16399280078643508 0.8021888686466072 -0.9956702695092219 -0.05642086921173406 -0.030595104786223848 -0.747921957033763 -0.2525698910467662 -0.5586967335098068 -0.6355396494963996 -0.7290650165778265 -0.7780720523930662 0.6182493871414843 0.8244796048954635 0.23367392994008163 -0.7535645580785375 +200 180 -0.9198532411065745 -0.11082797917668707 0.25594401485895824 0.44186528272705705 -0.7039378287665783 0.6343039115583791 -0.6843387684722866 -0.4739834961386873 -0.38762895212822523 -0.8222549088725049 -0.8312911803553105 -0.3136158838605454 -0.02209433082499679 0.3201939030042229 0.7341993515046197 -0.12023814011228118 0.4220254819140019 0.08192515866216521 -0.3193838624851493 -0.28885495628470337 0.7060572540359296 -0.6873524275967715 0.6656301810100846 -0.9525676985531699 0.8686290960498511 -0.8756615279250064 0.026599050443659955 0.3712527090804081 -0.7576456201991322 -0.4884931893234217 0.7059601229325847 0.22593900811419165 -0.8429482042232146 0.45348780038291414 0.026805020806811353 0.989270269865191 0.37060395675568536 0.013304271680220525 -0.34576976498797407 -0.15512511219353842 0.5487888815634527 -0.8939989895968508 -0.5106867963755841 0.2219416920286752 -0.5573181388508575 -0.9847469430363867 0.23112318256033926 0.3808591662785421 -0.3315608833303121 -0.7963044808493749 0.2551960599036942 -0.048768455772422836 0.7604229696152689 -0.7120719170701679 0.19217324086219145 0.35774517444704546 0.7036303804857844 0.4554011229490733 -0.29553704241836565 -0.9949541433342108 0.714959400846086 -0.5625672363659644 0.12641582195029488 -0.1188551168402725 0.029605920250725948 -0.2119047847841471 -0.9264109367270761 0.6411551482107407 0.32653099643848704 -0.9400029271412298 -0.021903965665240888 -0.32983519975526887 -0.7033405085374569 -0.631691196159633 0.3554440336835527 -0.26414655663843956 -0.7327442340569708 -0.8397598680003628 -0.17719340015915752 0.7964703024320468 -0.42820431125137426 0.5043826590770017 0.8706269549059167 0.8097256755699656 0.7311992158077714 0.5678452477890246 -0.6354678500845752 -0.6935120695625936 -0.5082877134548289 0.057243147473044376 -0.0021808282947801683 -0.318754814484443 0.9544919878833549 -0.8696895266290117 0.4107769237504564 0.13432970018430157 +200 199 0.1512710003225235 0.7737538819471201 -0.7472609804806185 -0.5340298947579569 -0.5128431107445317 0.26406299298831093 0.20717731782375925 0.806853266042481 -0.5106632335284693 -0.35204191378224703 -0.5068733783219839 -0.4278067158359471 0.1446664895264831 0.24164030460393726 0.9164612997198982 0.5232706041896928 -0.6564529086242787 -0.40780080712050193 -0.7573954053159497 -0.5776316191854862 -0.2817276374316475 -0.07558210736189142 0.05305689535133484 0.12869068148689555 -0.46694476084040004 -0.5771262611174084 -0.8347028679034296 0.5563109171918976 0.29486404936540933 0.4481199227901622 -0.6774327538097884 0.2031332373235608 0.27537562627915957 0.4428761602937312 0.34712230182468673 0.21249017036358753 0.8606841811448456 0.07126813865548853 -0.7546026836419226 -0.8229467164483855 0.3674772486548974 0.7996316641035248 -0.3454584230307196 0.4297734315829198 0.18953125747419453 -0.03276148757302866 -0.8121654631253712 -0.14115881215799786 -0.022119574605301562 -0.7668380158961421 0.869059267560027 -0.797293342282327 0.0046620975707574175 -0.9450631154289659 -0.664104737475667 -0.7826638050914903 -0.6088531144721103 -0.5852994770923627 0.4643914867032388 0.8825908195887509 0.23084311403620128 -0.5496815118083711 -0.7316470819816148 0.9146366157242733 -0.4454186447261097 -0.7227055045969206 0.44870647990312484 -0.3590835583482439 0.630287782143546 0.19825903948022305 -0.6375287252948605 -0.7903141245111605 -0.19013787339249877 -0.04886557172597139 0.21204836627601376 -0.39860104417589204 -0.5376580166859 -0.8490005079723579 -0.018153142191515315 0.09283948304756895 -0.09485422008033018 -0.3397403052286905 0.7443432071884555 -0.8579473438964527 0.6886036956012238 -0.5293006111303384 0.8632600379741548 0.12028291260200863 -0.186448910567387 0.2969226025952494 -0.2640193299348834 0.23895786981115763 0.2797073620140389 -0.9222777405501439 -0.9906892387145279 0.5428318782965951 +200 200 2.0775444084355352 1.669227349710214 1.3324094450127135 1.9314241845236342 2.131564195629034 2.3434909101508383 2.559077311427856 2.0603066848459313 2.3975355385786203 2.184142106620252 1.5704120093362222 0.8705889385839811 1.6167755903536436 1.4745130657137193 2.1904369090668725 1.1287673336058588 2.967755270789527 2.1246888200979246 2.3230633208157525 1.2215272861236321 2.3139903618843003 1.2795925882589876 2.3841523026951235 1.8888055096789815 1.6268946816276708 2.592667939850389 1.3052077347877777 1.5831022418717036 2.192560046705898 2.308217140802302 2.5049855016062845 1.069093718323449 2.1839648093609076 2.2765110320983903 0.9549217756004418 1.6203379520557832 1.517364094449696 0.8452758834046701 2.636782441122372 2.386550450848306 1.996138130159902 2.6807305146589644 1.5571042006095137 1.945489976126566 2.1099378997900704 2.8446986774825653 1.6442239948039945 1.8335417740047848 1.0753073534525934 1.784870050406888 1.7934316718703154 2.5619308450611094 2.1766211846938965 2.881232121176261 1.7097254835249616 1.9549289485038264 2.060780832605286 2.200768046328095 2.076353502067107 3.14292167617383 2.172135829393497 2.049302766639011 1.5593869315225306 2.5253455671836846 0.744497705456951 1.4790151682834975 1.8095822028593884 2.562527637389855 1.7266365957357588 1.9815608966810598 1.7099973917101856 2.015440099547365 2.211759377515202 1.8858959612866393 1.177747423110007 2.3711286164901013 2.558184606624704 2.3540946219367256 1.7447221031532683 1.2277178061593117 1.5388413975965651 1.0259010936377366 2.5448493323167662 2.970020935087903 1.9826808103709512 1.2660005614476075 3.134533617305279 1.401362246508578 2.2516743102381493 1.5456891097854988 1.4434194570175578 1.7558100816082478 1.9963171673729416 3.033305423064605 1.692073259672385 2.0788899479248304 diff --git a/perf_test/batched/sparse/data/B.mm b/perf_test/batched/sparse/data/B.mm new file mode 100644 index 0000000000..e3443909d6 --- /dev/null +++ b/perf_test/batched/sparse/data/B.mm @@ -0,0 +1,99 @@ +%%MatrixMarket 2D view +% +96 200 +0.5880555879641587 0.28611386253973436 0.689968979171363 0.8941374437233813 0.04321160212730635 -0.7679345177581598 -0.15331950539071681 -0.7982854049192833 -0.8164586108900069 0.8924629754488356 -0.6161112447821042 0.2013179042009614 -0.8993857022988834 0.9847810948933751 -0.46107487507359024 0.33471717425208314 0.4025656456631779 -0.43863543521491133 0.6387382353081836 0.6700341408862114 -0.3653849046190345 0.17236441362951682 -0.7132584411319758 -0.17372836112400547 -0.9794273352603535 -0.37628043517761145 0.6723616211237304 0.16849206055859778 0.9749745362125808 0.5422095537194915 -0.14510680092715322 -0.06739133613141224 -0.8981868998039624 -0.5581817933902604 -0.4428869898897796 -0.24823126470744916 0.2704868528780153 -0.799979176076925 -0.8272321696414586 -0.04639248887402814 -0.41074523906978255 -0.9097649377322894 0.8543290937427606 -0.6808682467480953 0.11673159191075033 -0.7970953023206642 -0.8243886416090929 0.9775349696878808 0.5029092839067428 -0.6689387251695338 0.45408333091790265 -0.6470503234511311 0.65886773037545 -0.5398708033182449 -0.10684871534522489 0.24440110715470564 0.07877235516727654 0.8800544004274133 -0.5130929869078484 -0.6188499407295243 0.44036759638824474 0.6455817695255539 -0.14914367959405883 0.31137780737154075 0.41447465228495584 -0.24325348163739013 -0.37911337226443975 -0.8973526118108999 -0.327884277342988 0.2535371133116959 0.03041891270891872 0.30792968927842534 0.9194346450197499 -0.7774529885843562 -0.009799510399842504 0.8198333847329462 -0.8410608934500783 0.6218875592369262 -0.6215374921057464 0.08323112748702233 -0.7153076744836897 -0.5343761794770361 0.9499554337058094 0.0391823148270658 0.9682770040515445 0.3050538606392783 -0.6455858758449426 -0.19831572855162194 -0.7702758087275823 0.9124485380814551 0.010979578380212462 -0.17762492395116958 0.4483908913914745 0.8920964803798124 0.8266551003742679 -0.5848023057849356 -0.10250076667884445 -0.14546843912573726 0.8749796158980592 0.7521596742190428 -0.9390995803980156 -0.8111449847285301 -0.8885573044969981 0.31966603239867397 0.5835829023160726 0.3525979266906516 0.004071570643473743 0.8648000988204934 -0.03652976970342392 -0.255998000691819 0.1716018939803694 -0.3508260099506926 -0.897536157052643 -0.9390757034868136 -0.8397437344090459 0.32082909860574294 -0.11355461102901421 -0.36861642237029435 0.003330235841445317 0.06597799977992813 0.11996879608719246 0.07507217745762906 -0.9338371771298484 0.4485613614511559 -0.3895906636869444 0.8969988467142969 0.3655508917780641 0.8407777868548454 0.20508934612388696 -0.8933802768619574 0.4879949041605034 -0.9487440123993303 0.575396829011747 0.014760494462091822 -0.9880018291000496 0.2425554305710258 0.2977572842497649 0.9840858395370256 0.3785707466225958 0.8461474557648896 0.397169085101184 -0.7715264268403439 0.9183025568414176 0.06535196086929052 0.2492916879856084 0.3859995114989503 -0.7270983165431453 0.25007703806060877 0.43397109009494117 -0.5799613439711964 0.5038478548626681 0.927771547384219 0.1351321562940926 0.5403856587508762 0.07913438445166987 0.22049469933988575 -0.2369566804669172 0.7475322268939715 -0.9636923007360338 0.6212587144627337 0.9225472641890962 0.24986293402980841 0.1836255903608237 0.184075421912961 0.46830639627486015 0.5780986083203823 -0.6525199830812205 -0.9071395784613696 0.8090118364335062 -0.3880015463401403 0.6849219496212662 -0.6613352189460666 -0.3181701039773648 -0.5443029253775193 0.019629745640283414 -0.46326172980807034 -0.7763678810976826 0.668966823375337 -0.5255979701179576 -0.5462695895839118 0.16965045680692792 -0.4758466211752117 -0.33081198355801855 -0.852383161998939 -0.5498658454003023 -0.5645262892069662 -0.8734224653498108 0.6751552595140031 -0.7759950555133146 -0.8694484756542846 -0.5372950239726562 0.9162111840385361 0.7683274585409887 -0.5908342821027635 0.8345074152245584 -0.630893553973066 0.9593600423681916 -0.7290710573505599 0.9280468792403902 -0.11934754513965795 +0.5225436485395436 0.7852498313057219 -0.4175591673862431 0.17881050871712922 0.6217875599847427 -0.22770132008325694 -0.755457469863485 0.7754365780907417 -0.3282472376774739 0.2574407416705884 0.29818101319286194 -0.5954381337489729 -0.7167323760000488 -0.5675801888441936 -0.37344779461328037 0.7920302845171368 0.6931490825915156 -0.24758627793833243 0.4802918601900339 -0.29163783095005025 0.880973509637647 -0.22188551253816424 0.043643738092599804 0.14515812343717882 0.8368525707396102 0.9235183786933681 0.18207077908414382 0.6363677343856529 -0.9361239105315784 -0.7842075687412635 0.6172993449731379 -0.001889360746220703 0.4770950439248691 0.003382297827656533 0.7735895109848427 -0.7264043498091353 0.28168646329167 0.11374463380196587 -0.16480451519923078 0.859360000336564 -0.06304996148465469 -0.3563097130754753 0.8308627227601535 -0.8611308358771963 -0.42293592247731193 -0.6719540306517526 -0.1681144533403638 0.9578595914285655 0.7560119033064432 0.6302792067336294 -0.7775714571102179 0.2510947930669609 -0.3290871113997498 -0.10238130761125053 0.9790474419266515 -0.7439418772598683 -0.837022373242625 -0.40755997746444717 -0.9910951810217612 -0.6577092015060555 0.252346541593067 0.24413523627059508 -0.7944270607966781 -0.4270496685432619 0.43908572744218 0.2075069481266547 0.6434910371975442 -0.5846810452657951 -0.9513260111841748 0.2820393523010245 0.25568449510918856 -0.7016372046293988 -0.3147891850321136 0.1537847308168645 -0.028746560892381146 0.19693107051305936 0.04950193311178119 0.7149535210612061 0.4244968052457707 0.9152013896862248 0.16171628725153253 -0.635170567306697 -0.37703183076096924 -0.30548358716224877 0.8404291923638381 -0.7943420690138949 0.059816306837639166 0.10042128794778482 0.6327274467477388 0.6178383009574224 -0.731285153555552 -0.7807811806674481 -0.7576275456100363 0.6664228132918049 -0.38168901221891405 0.37992160572363476 -0.772736174498341 -0.9570015725895267 -0.6869549165212778 -0.13631058894103898 0.43150000642607234 0.5103006093722464 0.3605697335468263 -0.0625726680189802 0.6096136031347634 0.3212123564764817 0.12312958591625156 0.42749632975034535 0.3711929403225911 -0.07285591884527642 -0.7039130959200441 0.8786690614010948 -0.2373233057600148 -0.4460156114582057 -0.8943906049735815 0.6710435091353366 -0.3494770949389381 -0.41063193508290285 0.7403490478124173 0.23227338784847174 -0.4148686610459831 0.6517336725017979 0.1763707654496669 0.5519874013854438 0.4959962187178 0.7518492021200953 0.565973255193098 0.17566263482805633 -0.21984518432201683 0.607947975832019 -0.5802962599766031 -0.4471159360758168 0.36612921223070827 -0.40812757660118115 0.7868708857283535 0.6563545221802558 0.6362144577273687 -0.6775825636115407 0.543525836420591 -0.0810311073542469 0.7517200846946066 0.28565887656910927 0.3450876520323014 -0.6494558873346674 0.20278694538725106 0.5120072957016746 -0.12238921909981793 0.908829230840349 0.4752494435408148 0.6512878533305799 -0.9931406676483605 0.9295326647844808 0.8694202946360665 -0.3462969697567144 0.2742376830299851 0.44157566956295713 -0.7461866188970447 0.791752426212827 -0.7615201151117033 -0.25282493439099385 -0.7983341635402528 0.4722595013817801 -0.8329196387066797 -0.395530205381341 -0.35241863404477636 0.2730052396237219 0.796326145634684 0.6940134186995208 0.8310828878284344 -0.707062781470696 -0.9441308872574072 0.2224437821852796 0.9884453220676945 -0.6410113267006103 0.5497547546797013 -0.36838372362377214 0.7191172416533678 -0.14403555305783233 0.6894724122403031 0.07340840291133133 -0.7369112232014883 -0.7180945709840938 -0.7079912119911282 -0.4045681819954974 0.9216060183518513 0.1523258841949091 -0.08875137874727645 -0.5410950478055889 0.6857886438638783 0.625529913034838 0.13961742035038038 -0.9176849304911059 0.7493389213652337 0.9515392243937877 0.40542861889743675 0.44106042664844436 0.8795438232687045 0.7225280180097524 0.5028352740202773 -0.6203102013554815 +-0.07874886444755136 0.3372172564210474 -0.06977714375086697 0.7495033690031441 0.8485493843651937 -0.9609643836459856 -0.09446129201854925 0.4879408143713384 -0.6597797664515532 -0.4470771963764584 -0.29669091224862076 -0.814836521560206 -0.013758702877213702 -0.4666723555216252 0.5834594365950894 -0.7135440258449879 -0.7043974938441147 -0.4643742555261938 -0.5370759392226994 0.776166616396025 0.898077084122511 0.4335827497118607 0.829525555938615 -0.10666155168500824 0.7526534455470615 -0.5724881332934468 0.004559725419519323 0.18301576428479782 -0.8500945223615524 0.36723666263517374 0.6276989128238737 0.8969410946193663 -0.6760860546768168 -0.639188142222848 -0.8018457641559316 0.8681440644134135 0.496379117330769 0.9293870856331912 0.48051350697583306 -0.2071933987387795 0.24429686865344813 0.6710077869114472 0.8526551344558908 -0.7411131915956692 -0.05309343110597298 0.015612368660578912 -0.9947130458624458 -0.29201428875109414 0.7757894869175095 0.5271348338556776 -0.33563081117819316 -0.49390569013845687 0.49886179295041133 -0.011376748000524906 -0.9738185087704845 0.4934581492884549 0.016243417894741485 0.05093317937267838 -0.35002834868060684 -0.04727123835355118 0.2492390246865186 -0.3774055538545078 0.839903409956352 -0.7404775130435186 -0.9006375081711404 0.6361603163948395 0.8400231630252508 -0.2925857702043333 0.7486113575345446 0.7660040098192431 0.036558308669242257 -0.8936076172106859 0.857015452435862 -0.9536566024526787 -0.08673930126875029 -0.091945926787659 -0.1988877673943208 -0.29800412513394337 0.17450163571513322 0.8968391746594113 -0.4862994723841252 -0.08616978694796273 -0.7864502955643318 -0.16376223777059162 -0.7702986048548173 -0.13619655621091242 0.08006170604468998 -0.24392522935799854 -0.010853586666111026 0.18251866463920075 -0.9162004721590382 0.41805351647988487 -0.8780831440468813 0.16102151901075046 -0.07159722100628563 -0.8846391074652309 -0.6332005167103871 -0.11180316070196272 0.7164036507209077 -0.5817935892371782 0.3049662059300229 0.23351502973722393 0.9032795384375658 0.6011688946034226 0.38746098792758543 0.5999682863626647 0.3988644166141444 0.49941106921612044 0.104585007057173 0.37453371699961857 0.7224773590934683 0.2377286350306873 -0.8410185472601479 0.329351367028867 -0.2555764360037338 0.022459308152184443 -0.7455843803202387 0.46105589620514853 0.02104032932167632 -0.36375941970395265 0.5197461722540657 -0.8783667929883989 -0.602019220351554 -0.5995281359669176 -0.5056428546486527 -0.9481495037078629 0.0819943883705816 -0.9476647888220124 0.0296550392628121 -0.8087070251124409 0.6433777385465373 -0.451759685204582 0.34432726815893044 -0.5561158370465653 -0.378115088444293 0.18655090877814962 -0.781492288212096 0.09955483332184367 0.9068371545040925 0.3168649274324471 0.21683053273690733 0.3258630143619594 0.382656415742777 -0.3255082949847754 -0.2557630181416697 -0.29857575569502925 0.310000881197235 0.8786173966529578 -0.5509043930723672 0.8532550105025765 -0.2223007223134621 0.9788966311652827 -0.33269048820373026 0.023264975927916876 0.44370103216676027 -0.3058232305189612 0.30258635197830897 -0.20682185851292223 0.8384230731390161 -0.12479960145468216 0.23747571953171676 -0.4614029283269838 -0.4921556866191834 0.3653789498002544 -0.6238654124866725 -0.3511137733889522 0.526676123497791 -0.2581436529905601 0.10593978770991774 -0.17899406661214212 0.7666457594940148 -0.7419405317973442 -0.5687489813357323 -0.3228708248296315 -0.22326714738294262 -0.500949235606815 -0.3616281448946166 -0.34040051373834723 -0.9779095401129827 -0.9325027072171579 -0.6240329405487826 0.10071980653533874 -0.9480088350687002 -0.6512905331566687 0.5870192664614167 0.012831742701512328 -0.4571549589869559 0.49708172798086436 0.040212626426665565 0.8267030508822635 -0.9258832617987496 -0.9099145440581902 -0.5696470628975245 0.18801239155334404 0.8620391996132197 0.5050989996664808 0.35154248049906767 -0.12917889131202287 -0.5706730267425155 -0.8741251099132217 +0.2880611041906127 -0.23692644661090045 -0.831322674132922 -0.9881680131997583 -0.3013550941944503 0.06807916328256214 -0.12273221849870697 -0.7261223817914753 0.8453534155883378 0.823868984313185 0.384069109402184 0.5099641590818456 0.0705208146068188 0.6019579431247704 0.673073280227906 -0.9003715510233623 -0.25851904843841256 -0.5635821541475545 0.6845505985476965 -0.9743118617083886 -0.4364724224905556 -0.8421929933173475 -0.7094855187548117 0.7616952507878656 -0.6983497030461683 -0.8103423528948217 -0.7254749276555243 -0.9200609905596939 -0.15674481205077795 -0.553204040504994 0.2937042032030801 -0.8169200947104294 -0.8198622695221276 -0.7367178872253963 -0.020925349458433606 0.35653855856423644 -0.8479642861500454 -0.5507113498530247 -0.03265687092190639 -0.2073758180163554 -0.3161774621075244 -0.369266336482142 -0.09176658913519353 -0.733541709120141 0.8890172611920979 0.17403415691023394 -0.59960618619542 0.87333641008174 0.33893226322285597 -0.5959888649288696 0.1078897594810222 -0.8163990528359364 -0.4218403325583724 -0.009831162680070005 0.904202645468666 0.7566884652317982 0.3202823197091553 0.3033486817280071 -0.4293096381990058 0.2880460924576691 0.513288971850901 0.038108356874877236 0.3597311262296843 0.8253675961663041 0.610704455729598 0.36217520520184077 0.5010466865844212 0.2810060162093273 -0.25800875934655454 0.5977186324159862 -0.738767545680955 -0.6170078033981188 -0.7873489675851337 0.6152443104867362 -0.013289556817497106 -0.9026462406187072 0.5569630244585955 0.5122843874553771 0.8182828191843567 0.6069632475686357 -0.9358571917138006 -0.4160454460929235 -0.24020452162650607 0.800009385479469 0.6605286904171646 -0.12462168845125787 0.4354908143275775 0.3086384900440293 -0.37750589721614247 0.1897418152677477 -0.38057949905814126 -0.7519801620347351 0.09983369103949324 0.3390741378315896 0.31822914310957784 0.5724397632223179 0.047315031356623516 -0.228874989985423 -0.24732589993907084 0.8753704230479225 0.12093880643864985 0.08406091087582279 0.9648552654027758 0.28869958062800793 0.714212966171941 -0.2018600170465068 0.7293038488617261 0.3065626814200615 0.4152328032021908 0.2065246225036328 -0.30671307265647085 0.9342534335508614 -0.36456120167777173 0.7979989910230119 0.778871429951675 0.230584019493971 0.30483340828215044 0.24046277918863557 -0.2857821236823379 0.5735943366391119 0.14479990279665178 -0.9605877576076098 -0.020948179116611954 0.2688461690364643 -0.717989329316185 0.34943113203038445 -0.8045910469788291 -0.9907255635528989 -0.07983973396296795 0.6240288687391766 -0.22299644443740574 -0.6910673756123074 0.6355291496196149 0.6865959790514942 0.5378868849858494 0.7779813856804951 0.8406263055643317 -0.8736310898110107 0.48527879296718046 -0.36878669219380655 0.8380555862206682 -0.07567347632513677 -0.4463588924085222 -0.7138925648535732 0.8886360649345872 -0.3981678079350015 0.7972848237275452 -0.13905102012812387 -0.5763753324359286 -0.42211676933457154 -0.3245770112612687 0.5270297343079242 0.7460183216863541 0.9650692659926059 -0.532920103878255 0.870997457946298 0.588838762681172 0.21591699453889812 -0.05027859522133893 -0.2071336951104905 -0.7664245489693982 -0.5902667265257409 0.6241849721879311 0.952336191718214 0.7998539999288812 -0.7658332933512826 -0.6993640739470903 -0.32331001442063667 0.7604669658653509 0.20010905487781283 0.1593065447753783 0.6147480298686143 -0.40638809747964433 0.017053158022109827 -0.36595497024557155 -0.7658855175619004 0.48392887275396657 0.18943966678808155 -0.0811605605476231 0.17338625038852817 0.6384298240187423 0.8093604068311855 -0.49977711649263323 0.6378236014097378 -0.6603946589946144 -0.14589511760335316 0.21281503731505458 0.11682231510950136 0.4942259679540506 0.43720881064579387 0.1314168601223631 0.2565136886548496 0.6800755067296911 0.09428939864845831 0.15423902357383135 -0.8797366786206937 -0.9865213991850954 -0.21288009890819848 0.4170023358210069 -0.7314527534520128 +-0.10731975993147547 -0.9797614900789371 0.4703288610579077 -0.4516105537372914 -0.03428543928279115 0.9563295046864442 -0.7906238634348259 0.6661671537681604 -0.4979435989918737 -0.5362309005044343 -0.4602714809488899 -0.610541979838038 0.2087514529325023 -0.9391613390855165 -0.7177008551828448 0.6766229235667043 0.2684046955759485 -0.016428602164101136 0.008236622234068625 0.3936688494170062 -0.4189220226693009 0.05453740810103591 -0.12683337417110963 0.7561171877845163 0.722762428385471 0.7161564874908157 -0.4560880923085744 -0.15393108728072735 0.5687699643168476 -0.07642696811404437 -0.22399623908186106 0.7454512974936525 -0.7898766496245251 0.18542522076554557 0.9503824406707433 -0.39331362025296945 -0.45154544376166106 -0.0014051847645810689 0.7248267388510299 -0.36348175458670884 0.2116841368933049 -0.4689568814793237 0.2861020518831201 -0.784357759546356 -0.5361458084427544 -0.37764778344929195 -0.9849905085094566 0.5767431290094247 0.7075898340866138 0.6310394015506324 -0.8617295433578425 0.36061309664109364 0.5426667030238079 0.20181086513321755 -0.2237046231243489 0.4383391891532191 -0.4242863372641503 -0.37743301576709687 0.963313345691234 -0.4925917781486231 0.2837931752472229 -0.7483372670013455 0.5759776404503723 0.14880215525945095 -0.9837090597072129 0.13757065426560877 -0.5902968988696184 -0.9656087444519208 0.8739624128293004 0.08303127302624103 0.6582374906769972 0.7720015341208721 -0.09719748848780108 0.4422701027996092 0.3831791824595152 -0.05165840574128122 -0.8288292918638531 0.9702869944348669 -0.5309520753671229 0.8796094684782287 0.638183477849342 -0.8964185275372929 0.436537836541357 -0.01644819678052789 0.2769018259032543 0.741639136860891 0.753761128435271 -0.5502782041193797 -0.09338740492095354 -0.9243861413400098 -0.6043748967866385 -0.32814667236229056 -0.3112407540372395 -0.4080601467276279 0.9279464716058998 0.2000964694755505 -0.8549131642805976 -0.7496694308396479 -0.6506818262210707 0.09848960919418515 -0.7703371337595839 -0.25306084521531846 -0.726775098442004 -0.4035752325137254 0.7648067399247838 0.17610012724746493 0.11609146251468738 0.4396053044934505 0.523753634703993 -0.912216648555539 -0.821815784747427 0.35220311002673244 -0.566180957836234 -0.5489861314474072 0.4458052065809974 0.597781319001973 -0.5969300932437571 -0.8874094380257824 0.603924597363541 0.4816726552801427 0.34518860336901036 -0.13939819808972875 -0.02586303095175313 -0.6106161144471152 0.09187713939999043 -0.18408011501377386 -0.2041726930723602 0.14664549973071894 -0.3308269954639844 -0.36455675921114494 0.8170271473738764 -0.7010759723612672 0.7308651579073844 -0.6186095334095794 -0.3720154345966591 0.19868485504396172 -0.21889584530786377 -0.8132996071910803 0.6413393981074111 0.22964246106191655 -0.3346891177815481 0.29854483275391863 0.27994629240176483 -0.45479494557932365 0.3637460914752846 -0.011256670353914089 0.6957771532711443 -0.8024516646689548 -0.3785612100491238 -0.43085088739366406 0.04707682180212025 0.19723007166734785 0.49963328913559524 -0.026723745623607353 -0.7725946730053042 0.22603353940368387 0.9090464619921936 -0.143818009883375 0.41629780993705245 -0.6303944120389657 0.8613897918175419 -0.4835093821844716 0.17309745208814475 -0.9535133471373947 -0.7519125758892493 0.28891462104208965 0.16885697984334858 -0.4739486469906986 -0.14417023337880241 0.09728642601377424 -0.3219754596011948 0.13787530367948064 0.7353559988334799 0.8715825464652058 -0.11527338988888447 -0.5284946617247903 -0.8376579246939513 0.8651424418501095 0.23332353931635708 0.7422473140872647 -0.8661006450276743 -0.5338313721695478 -0.2245194849664578 0.9096178456513924 -0.05295743158079658 0.1407907635104111 0.3127321918484425 -0.6529623042597958 -0.5598589445153586 -0.2262442553294275 -0.02440409338223115 -0.511548563094776 -0.6242498348561194 -0.6304757830697467 0.8193651771276604 0.64485091254187 0.4311979199434439 0.2726588928447704 0.7846352799118965 -0.46072497178266536 +-0.46042713518166 0.9702951937466913 0.09538367934967673 -0.9720571647352776 0.5495643104953265 -0.46661638052544774 -0.10379068793631441 -0.20774277294434307 0.7642848477210935 -0.7334605561842182 0.030867439277330044 0.15745986503943787 0.3848560041328559 -0.898663907941804 0.04918152432024603 0.17743163103352244 0.35709359451269074 -0.662385643916042 0.7427063969046959 0.327556405673477 0.4193578571326475 -0.43955064301792146 0.3462165369336927 0.8492866530756686 -0.29836450715491525 0.6568570318047788 -0.80235506799923 -0.6136012122177625 -0.40119997460272105 0.6687038621312005 0.36326565949883105 -0.34499819970133005 -0.04951539719539433 -0.9619799342292088 0.027396449006513057 0.27006093492141026 0.9578972998502084 0.21707954066062207 -0.49898123789253135 0.4857874618893858 0.8466612226151733 -0.08639563652900151 -0.31197706513281487 0.4587102749244938 0.5829131247002526 0.3884594500117968 0.7781863112589245 0.9687207890579022 0.04502046217846378 -0.7463171364444754 0.10728102839074283 -0.8952475896988656 -0.8099592952568058 0.7162028232340778 0.9566163603269702 0.2970773134319562 -0.5836121453485834 -0.8885247928798083 -0.9685039326184786 -0.007267590119790723 0.8727900363028511 -0.20104876859199372 -0.030500954478505538 -0.1953331925227224 0.7271160756477015 0.2058383935178949 -0.2098333950172473 0.05269266351690316 0.4335171407453158 -0.3865932776862704 0.7880954145911057 0.7965586887110998 0.649934086358426 -0.3540635611840879 0.5619924959031513 0.4769104531972046 -0.6192775231828047 0.05052520008176553 0.7447016545151939 0.17965862890396922 0.4608462521146055 0.3206972526810614 0.7985958097876205 0.6644135366881625 0.5316008504447545 -0.933736838172688 -0.4092834305319666 0.26829925234776697 -0.6154904723089627 0.3794132802349406 -0.20461461259861813 0.7800562272391212 -0.6158877981707589 0.4089404928985423 -0.7971151563707268 0.5931081242520075 0.9942288405297814 0.4110578655558752 -0.8773540046256509 0.6463633258557018 -0.09247961095287205 -0.9881681550278474 -0.04524403913365327 0.4367893664346525 -0.7632455530506648 -0.7432944398107377 -0.013897475815169313 0.4056943689445569 0.23304252608384668 -0.9908735762093595 0.5835104832042739 0.8819060564143102 -0.03676281151623151 -0.4758837291492637 -0.3758684713149627 0.29598080444548014 0.885394132130279 0.11247367295267452 0.22890948302149017 0.01095255600086631 -0.8309099709268608 0.9141605661446797 -0.949513348202843 -0.9569015506252672 -0.5098518348746766 0.4689171089120141 0.32909439387614015 0.5576905183207745 0.27650926255555364 0.48216393891955134 0.8833047565836769 0.1081067476436981 0.8102896824877 0.6407323795244482 0.04261204404729879 0.017059189819972564 0.3795263405483975 -0.5129112555099029 0.8868801670520221 0.6687067293320983 0.7906344020275116 0.6468106381161853 0.5075234784629254 -0.6480915325717342 0.940654690882814 -0.031636725919501396 -0.13973322407617372 -0.9016111203511814 0.32543428794750695 -0.9598117768041781 0.904999279354594 0.61766332224152 -0.9742871119307892 -0.3715379731411197 0.506185463486611 0.3073784996291218 -0.2891551061188238 -0.8188690962754288 -0.8956209277271876 0.11923980420811864 0.5870151768583893 -0.8896102835352204 0.4547759527231574 0.9205258913451033 -0.38436379976886914 -0.05106501487193893 0.31111374275374093 0.9251268202233003 -0.2247080338909051 0.24698245380595996 0.8803797512077034 0.12890992025943548 -0.38325577147107714 -0.3956467558960699 0.711440108613921 -0.033706114609609594 -0.0643944890694581 0.9189002415821874 0.40572028141398264 -0.5212218085719922 -0.7023276922225186 0.9682047129057763 -0.7816648510359607 -0.28776572221161456 0.7540467152445516 -0.8966646725017771 -0.44036719426167203 0.5051281650678527 -0.09295111336942008 -0.20483590680999497 0.8643031629907274 -0.07131086721345481 -0.9987441102660806 -0.603349812747523 0.6407660169974174 -0.5264662215534559 0.7637850539857673 -0.8814783924299334 -0.536782287191697 0.07736923505564808 +0.6703243742042839 0.06938643490258256 0.2049724617679054 -0.8808342211395643 -0.3198759133970248 -0.4841154679249473 -0.13607131270379358 0.8077059366887662 -0.08636814252480929 -0.5610115608081188 -0.6666207373358846 0.5393217173025338 0.9097581026767665 -0.9097653695180805 0.2917695353941625 0.011256316048575021 0.6447899232875771 -0.1950906337012519 0.016477236026318343 -0.8781648519534953 0.13973083651893736 0.9646569223611661 0.6709844703275984 -0.6072898849247388 -0.017387127157907134 0.9892269564800589 0.22250172632650678 -0.2515661674406451 -0.8455529575220828 -0.4936391650366152 0.7427395961404049 0.0002877439500306167 -0.024252672795723296 -0.3377617844943859 -0.9401141363277272 0.7279877497508738 -0.4903556838142351 0.8470684466104013 0.12003551648682809 0.4462520138079433 -0.09380579276452328 0.6198293786695268 -0.49916796676158004 0.31704313967079445 -0.39181032746924815 -0.4003040785936891 -0.32685902138436673 -0.3274315239785077 -0.2567698698368681 0.6815844106788012 0.8762577949351376 -0.4248717549936638 0.8530603912341241 -0.2988998094501085 -0.7791058241768933 -0.6046443984323084 -0.11770667784879985 -0.9867076747713632 -0.7262417519526454 0.9078804600105814 -0.03625448793244246 -0.49530368756710463 0.6836997590832743 -0.1722543114862609 0.30130751577416026 0.8284270557905813 -0.22523107085604854 -0.7218090033836149 0.08399742792458964 0.21876800664238605 0.6861833730646552 0.9739432190000796 -0.9401000143903906 0.708400257975607 0.42588222525191943 -0.8189215987249909 0.004187284445891892 0.9467275474358752 0.2001852869977323 0.21141010010548578 0.23530001784599186 0.1661342035079838 -0.5989170143817977 -0.6689759833380637 0.9009334836729446 -0.3174519332446337 -0.0910141489732037 0.6210293572985066 -0.18018630092880672 0.0768482868525664 -0.394636056435165 0.7154796075935568 -0.8041650448984823 0.168651018533035 -0.41053275970688285 0.9584775235841396 -0.3256133723832535 -0.33920146511646476 -0.13365832704590352 -0.05752500402252414 -0.6059893333295681 0.6492780798628282 -0.6668856924823408 0.6521530659488555 0.5686681487172836 0.7955018377792316 0.04622642460365367 -0.08474296568976403 0.8269363739782192 0.7766322985539218 0.9612898600586115 -0.26077562329323545 -0.03154698884193907 0.35997430168952627 0.006835117290429071 0.2693216778899328 -0.5839439887730611 -0.8824994257638927 0.03968824699447726 -0.4744312646317361 0.305992027746256 -0.4707157492351275 0.558103031509307 0.7528262767560532 0.1530972112889819 0.2652275406509792 0.9270556747504841 -0.5846358891832562 0.6677352469949696 0.5303467486084252 0.748533803954335 -0.35904833941511316 -0.23069061733868756 0.11676921985613076 -0.6454993838947298 -0.862834011023587 0.9426671552323014 0.7219372768957009 -0.0878215804767366 0.559053151608359 -0.7702742028548308 0.0006933571759224488 0.36576416039693815 -0.21019670530319057 0.2246255158555488 -0.6673463566857405 -0.6037378967452913 -0.6008436627206075 0.3652407878202282 0.5820518660525156 -0.59455034966752 -0.7691005281278087 -0.5714636811371236 -0.9973877704108913 0.8683303764184827 -0.637129879315498 0.29309915086436145 0.6667314818325276 -0.10353149750523394 0.7165979362182693 0.6060326418721966 -0.942114205266106 0.5875725829004932 0.6407125391216881 0.9505938574112704 0.897938038313987 -0.3414817844075493 0.7330392938124448 -0.506982054250626 0.29904525493809464 0.21058054708771623 0.45560012295246244 0.6634957836081012 -0.4615891493030122 0.6720455148079063 0.5967703067685168 0.2644664418874654 0.8279352663453148 -0.07669058287232589 -0.36282261189055043 0.7395640142495692 -0.7526827487464474 0.02880437255748758 0.31444210775736536 -0.5551894523285577 -0.8829178547277692 -0.03954079599910498 -0.9212636628928514 0.8635771239830323 0.6076832390848281 -0.12225205653065685 0.7795561537745626 -0.6014959588484259 0.7045075918068513 -0.1270102852114956 -0.2111491154448759 0.47238572835799997 0.6646079118738724 0.624011145351411 0.6037910458255311 +0.5672219350449237 -0.3243129824096598 0.011391876705580728 -0.5971937372239184 0.8939462136436118 -0.5322636539059018 -0.2768907306885333 0.36030742574359986 0.16836466069966827 -0.282263761047977 0.3253438502763728 -0.8203882999996588 0.4314562985755701 -0.16939447556291665 -0.4609859699390446 -0.538015863167197 0.6868418741596256 0.31018628131695114 -0.35671557065947423 -0.8699611558824449 0.767114684235102 0.5684911107539248 -0.01225350923090196 0.9177133370425847 0.972712910327663 -0.4004666268506145 0.5949503612153613 0.6530715208529212 0.548855088385102 -0.6941494543756934 -0.8034313071560162 -0.38306145497470645 0.5910359059175256 0.16127426144068946 0.8242340778700461 -0.8147072792352987 0.6673236147869834 -0.746940889091082 -0.38204401924236797 -0.19408839827861102 0.25597578989137815 -0.3458113438166208 0.4995774334968932 0.716662473170234 0.8513081855306579 0.7894918876537815 -0.981796209946669 0.3377747701608922 0.38594053458847477 0.136129810107384 0.21112308593407159 -0.927715779871098 -0.9360745890081943 0.17370490484191925 0.7375158419496677 0.5355310881967688 0.9864982816471384 -0.6745083509132792 0.9822190626283509 0.6917222237053346 0.7977792258293785 0.8475235615657055 -0.18777904346497776 0.20135927807340281 -0.0213434762201965 -0.14307065547687525 -0.007891933731642098 -0.7778214663634604 0.4481235885624777 -0.49648481853486914 -0.8689103350047476 -0.51758731762793 -0.8281346375238996 0.3077010152580455 0.6416159159151966 -0.41589537092173057 -0.7454691598832615 -0.30726932457711786 0.02921750617736607 0.44717053861353606 -0.7880882243764229 0.14283761832987607 0.49131015644344167 -0.2888745969030615 0.110342518365111 -0.7855623470084871 -0.7518324398520919 -0.4927602728531115 -0.43851996463642107 -0.5668633992940126 -0.3142261445447885 -0.7389645512260876 -0.5634798124536666 0.9113184251083435 -0.8116182653568371 0.6198037981702014 -0.6758002855639791 0.2669542856897915 -0.42594837917142025 -0.2982951121603945 0.5539552665138543 0.5950052210174357 -0.17463385885506844 -0.2826539450291017 0.3025774619127164 -0.2801792381082102 -0.0021338152425314227 0.39825391267017274 0.4988098033452868 -0.8486268430433026 -0.372530792684606 -0.5965264042791687 -0.2483865370084679 0.42883968104352976 0.6260349855498337 -0.6364904836739274 -0.8772740124081935 0.32921863538343565 0.8522546066050951 0.6111569851718293 -0.23417290848573002 -0.3213901169309612 -0.4273902294318308 -0.4534629761674096 -0.7344847395231913 0.7332609420961718 -0.22292679241328717 -0.873185886552126 -0.18122431637014103 -0.6510696532100577 -0.4250780739328266 0.6523156706138822 0.8952193510001201 -0.6525684684870019 -0.008437360151245077 -0.4169098833895124 -0.9505267711131178 -0.4459870729973303 -0.2304022758415658 -0.32230559905602596 0.04709355426914397 -0.4408991737350003 -0.5548453996869103 0.926665395788469 -0.5283654182143069 0.7271016016040885 -0.30522582172374846 0.1674063571036486 0.4222930847301505 0.11374971649248633 0.42850069240938904 -0.016387294148596743 -0.25342277181500417 0.26140610675744047 0.32173275140893987 -0.22084462733053067 -0.9943896323253969 0.6738056961706094 0.31165980696515083 -0.2521844156729136 0.9637112757982906 -0.7910043662044661 0.4239392655320533 0.4361774633458544 0.5499671667561357 -0.922384143421193 -0.9154306315612648 -0.3719666311161114 -0.32770991405541827 0.9687277134474279 -0.3942556224258127 0.6992814376274215 0.5040501854309214 0.13650190169373766 0.45631629932328654 -0.6238812480476186 -0.7420939592322049 0.3930464981023507 0.9069081967257677 0.03145781187846097 -0.3443048543785876 -0.11789358338127975 0.6325444481919424 0.009759525671617642 -0.5367425473441352 -0.9690031144247877 -0.6621598654991372 -0.8618985559500276 -0.5572433037584901 0.027672657876337325 0.8030838097483999 0.3170314867144528 -0.23220947451236396 0.9150886015584148 -0.5109257331330079 0.960725565652883 -0.1512775781660387 0.690703044789529 0.967166185750908 -0.35515013389846484 +0.07662198486040328 0.8247346694255591 0.3381062129205883 -0.9594003144018461 0.4806005909562554 -0.533907508692278 0.8578781975272047 -0.736272396239892 0.7065028401374953 0.7491135071041384 -0.45414333341259794 0.2628183612158643 -0.30549521434178684 -0.8428163038608523 -0.7462769563651797 -0.27089020887623483 -0.7588802353740338 -0.6410864288695262 0.18095891231131356 -0.7916721029013765 0.90841746274823 0.025159550030039224 -0.5552170519900688 0.5431397535562676 -0.4248726707756256 -0.3820704039429528 0.07724515493462092 0.3221249620659854 0.4178538091057342 -0.9673044487064677 0.8559393500478953 -0.8508175888392095 0.7473100580326635 -0.3115004031391666 -0.009869227990472407 0.45901705445774166 0.08664955430161658 0.9648868390240399 0.27493110983607294 -0.7419887414955677 0.2887964404366252 0.747301964657499 0.3179608714379232 0.2673722494872155 -0.13649758994957795 0.7495490069915947 0.2366101468033639 -0.5536131152918236 0.5006542414914994 0.5762879998148887 0.2351002266498976 -0.5230028842836303 -0.40282847945973366 0.2510758847935901 0.7925365073933821 0.7171529662845162 -0.56995744951073 -0.12028328062604343 -0.9028470274573837 -0.02167045937577683 0.06792263701668744 -0.7556166454806885 0.8475366898402776 -0.21105968906752137 0.1315812463587831 -0.6778661366435159 -0.21008751625442224 -0.49980574924676735 0.1817550733156268 -0.364724608662359 0.746552995118307 0.9142974026258106 -0.6763297539966666 0.9444496437233221 -0.17801690039006335 0.09055204061486699 0.05691822912981204 -0.9888780962611377 0.7776743426955945 -0.5256522844324103 0.6743732019356774 0.9090637871372664 0.24852408031074136 0.3897598607689057 0.8492994500513 0.8330590967702487 -0.027703387185944894 -0.7150465091067946 -0.03947483064355439 0.5631238640062626 0.27615456616347966 -0.6427903504743173 0.7528058646976306 -0.25257377739333964 -0.43625202129293106 -0.18996750648133243 -0.07911704265213992 0.9327389811029245 -0.5812705734687207 -0.5469882090377518 0.03927637685989649 0.32680983856421353 0.5851540982794528 -0.12702546020445227 -0.253995730853422 -0.38519781535353137 0.011131656821301572 -0.3783587780329116 -0.2669535656104729 0.45635646640803085 -0.6140279505286748 0.09909934800556597 -0.2548722741480385 -0.3808926336056191 0.5611484551655426 0.32024396192939397 0.6339110748658807 -0.2097556833963139 -0.9085111853767698 0.8279770537143432 0.45744190848405886 -0.8395600556964222 0.8592448910966857 0.9385675718904973 0.6218913086296864 -0.6413415926646575 0.6058721463266188 -0.49112323026997684 -0.4210446614348591 0.7477496586149441 0.44845340009950774 -0.6203100886932427 0.23941620301292965 0.24184852044446647 -0.8446707340819171 -0.6114018250620459 -0.8770461262477043 -0.28480287975331 0.916858211434004 0.18932697374883456 0.3153716132382818 -0.6903945400642566 0.7060983316006646 0.780310007865215 -0.8762849169847193 0.6061549374713664 0.3593673276646203 -0.6647558652775007 -0.38108170420933263 -0.0012315015381849648 0.9079843852577645 0.04128807878029539 -0.7928874349230681 0.8230218250328705 -0.5654456720652259 -0.7222131748813874 0.4013560219190224 -0.919425869755575 0.5260771652437972 -0.1303210859697581 -0.6412806824501367 0.5692438814934657 0.35975685445992767 -0.520797290450461 -0.23613417305471596 0.9889510945130553 -0.06423543852565583 -0.5038518813023511 0.3582221237336194 0.32940404005863577 0.13081258772569115 -0.5388496207341253 0.06422022165693608 0.8248883426567963 -0.26508992862414127 -0.8219336185278725 0.9029476218630104 -0.7152228750369747 0.2511567409078306 -0.044612326577572636 0.051493556296362764 -0.013240381527444445 0.14221692768138117 0.7425377740473929 0.9314134220130295 -0.17639874957330748 -0.5918707752351595 0.01097772210437431 0.780724704051772 -0.48066322939545403 -0.666278422440205 -0.2868027617273292 0.897962184398682 0.9000891930113659 0.32476311241954536 -0.5325212341828696 -0.8918705629754633 0.3370418153129837 -0.9400095673428239 0.8903158115364407 +-0.4692644222714333 0.17587228272040423 0.49514671019693957 -0.9315761081055907 -0.996309818861836 -0.19176060140273066 0.21549421847302863 -0.0784839252283902 0.9832805961250954 0.6746900336779063 -0.7064311166748456 -0.6429493084584101 -0.7136206022813008 -0.5289443156221871 0.5336955978432654 0.42382042852226665 0.5685684882881976 0.9714292425100304 -0.29178169748492144 -0.3032514548447718 -0.5787032692856464 -0.02202595230136173 0.7875928800894585 -0.389498602518648 0.3798097512546359 -0.7082886979002376 -0.24676276121112584 0.7917530367061645 -0.5894872999408447 -0.8752696842606671 -0.45308885113538233 0.9799862835627786 -0.5353392120011666 0.526540025313367 -0.5051944599891554 -0.9337861063784099 0.478518494518291 -0.0508233619831 0.18292934088401358 -0.6801903189312366 -0.7459686175157185 -0.8895560769952697 -0.26471253813675144 -0.802897246675984 -0.34900317667603886 -0.2310270262622982 0.018755572508901475 0.72558856463603 0.09536198120795913 0.07166226446641266 -0.9530252499276746 -0.8706537326547981 -0.0749179466771146 -0.3825724780997082 0.6229242737376719 -0.034590828770631354 0.8628379952921381 -0.6364132887979823 0.5566238540684771 -0.3177738174334763 -0.25435241639794137 0.6979182854801449 0.06346652931209129 0.7287383418447573 -0.6845406629844712 -0.5968307040391985 0.002717715475321736 -0.39057408998042376 -0.9216804859449854 0.26578501058854087 -0.1550870686879955 -0.25092586729834765 0.1681039557755255 -0.6023773201002189 0.4690513793478568 -0.9781563680161254 0.6677014577169025 0.5995947681514582 0.7108008611555696 -0.610764319792038 0.4478737048375343 0.4500954576956606 -0.5393653963056855 -0.004800064249428804 -0.043779151179589526 -0.4554286739941873 0.8127588723324672 -0.9789793613804632 -0.7447404966586779 -0.045575839036720245 -0.39400280590865955 -0.6733687349509716 0.2627095894691658 0.8585612598230217 -0.5252902689043906 0.2640668172799385 0.8633569113611708 0.13322651573221456 -0.9618936273702094 0.07761232864334966 0.8037154994223574 -0.12896521341819822 -0.9878891165250538 0.2745610890516639 0.45975908925603104 -0.2910045318753609 0.576285329019739 0.5109937239516495 0.027840185299818243 0.8358769483322972 0.22998838306857716 0.7791041712205258 0.8147651872259141 0.3466074188719064 0.7622767990247667 0.17391217369296297 -0.28157674465685045 0.04095121652138922 0.8684517977471733 0.9362986853774653 0.36362074414057544 0.545945050116529 0.6885098032245949 0.6971409717975008 0.9339637727398136 -0.18466470985878214 -0.03259575646560098 0.6611797926776739 0.5783977908863034 0.05246676385349858 -0.7978090515287997 -0.8857323879412073 0.7916049674521946 -0.7886485935677607 0.9560003434490023 0.7780078253035081 0.6196858787487012 -0.13672036672247279 0.4647450680801093 -0.780583992473153 0.580072949364657 0.10959927429124994 -0.43370612518927043 -0.014193943419245736 0.0352687444592914 -0.9742563393802217 0.5200994959109471 -0.16471284091603233 0.4167710045754809 -0.7181872085452226 -0.734254683830224 0.1112181666753842 -0.2363325665647782 -0.059425569767152187 0.8987149862927555 -0.1482440128633482 -0.09151763107917588 0.7970561089578789 -0.8441769714110883 0.5002210036018364 0.7009961087153713 -0.39310886928908517 -0.8798443011615 -0.552969393590419 0.34383542789726973 -0.802902964983248 -0.8515641309712731 -0.7794785809889428 -0.05134596919588863 -0.35730952192144416 -0.5911057404307865 0.22181775851724472 0.7638659565690105 0.2544198849965347 0.979764485937415 0.8292238374417764 -0.10818966698579224 0.9716589953933035 0.9727574573524616 0.08787016164239958 -0.6750362039561284 0.018623656007841216 0.20408274017117645 0.22987988241783963 -0.24003644968317195 -0.909935308956624 -0.04910827216183278 0.4269317356898277 -0.6688793364041199 -0.6074544939484083 -0.37740191750707774 0.1285382733049636 0.8207538502670726 -0.7060507754995555 -0.23717404653614071 0.1271201999954079 -0.752839819996169 0.6548465542922253 0.037734529645374604 0.9156531309599836 +-0.2246510475305663 -0.39112012133754215 0.6911167158748885 -0.23645877206556687 -0.7483491746447963 0.5356245864479807 0.2419861825051144 -0.11783477878582915 0.1688974922210955 -0.298832187242805 0.8235008596369113 0.9259378071393498 0.5525062177095965 -0.35210983577488664 0.5409144952836777 0.27340921518082584 0.7801819561588141 0.0717565061821499 0.03354266611566303 0.828672813116661 -0.37779945518229163 -0.741790145585896 -0.3299926571020113 0.7716361319457872 -0.006410248974314303 0.4066210213769401 -0.054024870151771376 -0.36427025637821187 0.6795305084719261 -0.27122032115016226 0.41617153150818487 0.5122658211001074 -0.17180459288664673 0.16690718825982387 -0.8074938502246487 0.4814627201857462 -0.0907030877265047 -0.9176132308393119 -0.9275710001786968 0.4648333144864629 -0.37387077182115336 0.7122473515046133 0.13455663001269902 -0.6310040769768361 0.3000751364808327 -0.337692700127175 -0.7640493581414189 -0.9090049624520258 -0.03115404175630032 0.3249760459321669 0.8114154599122074 -0.0073450159740895415 -0.8356065392246781 -0.9977629662765701 0.6955820233974752 -0.8564234997266631 -0.933849719967919 0.6609494558314359 0.2552061423574692 0.7281433870899914 0.48959744871679756 -0.4230178431944924 0.7432873770682971 -0.12003903007293015 -0.8150094944199555 -0.8882866072280495 -0.7005420277214021 -0.5676130404959219 -0.45880654681863975 -0.6486126086037078 -0.556434901437981 0.6612929617992296 0.2669898174049534 -0.7882021208128058 -0.7483363172771316 0.13290959710905192 0.22686076121937315 0.24985792784947347 0.49678168718853977 -0.810534810202012 0.805132521066408 -0.5366634218794544 -0.3296110043045839 -0.5645327062061951 -0.321056256819356 -0.06054819109047549 -0.8972122400477076 -0.1586957490174723 -0.14895116531347763 -0.9363766180575581 0.644128324606642 0.18914050209804323 0.4476205459251379 0.3615083800972172 -0.7638146424256662 0.2905434567690841 0.7919577896031409 -0.3732902497476642 0.9922395187244704 0.7576411991489875 0.08562213462746993 0.9444710031166086 0.03315301339671306 0.45707831194401005 0.871587046714166 -0.870508244658764 -0.620250558268006 -0.337503153976084 -0.978112223479507 0.3247463958190129 0.9523641854034892 -0.9668860254605545 -0.8880668182477482 0.9475782434278328 0.9248596657742589 0.9003525450510799 -0.14197436654928497 -0.08971736953191756 -0.3479185970863208 -0.5378027627815265 -0.662559453766632 -0.11165184402579498 -0.7008736131650175 0.27724145677367673 0.6689553154760752 -0.5891928779138977 -0.08445855336339503 -0.8243206282242865 -0.4350508163501743 0.3704070604112444 0.8732571362722388 -0.7092393192916733 -0.2926309452521647 -0.9282935122990832 0.3177563855404011 0.24106275059868087 -0.7091602176288652 0.05994413996716608 -0.6416240077617277 0.0008362523219540563 -0.45341648185108463 -0.4555704455832743 0.4664344378161067 -0.414941266364246 -0.6933630342528596 0.7714297098301741 0.12219386878840921 -0.8561125314548261 0.16552301563271743 0.16019812196244776 -0.2699048192260829 -0.035071464917379114 -0.8777766166502385 0.4300788621448062 -0.27776555934378755 -0.9735496868076252 0.13286613228444022 -0.15466092469983872 -0.9217854365180784 0.6147019318203588 0.11830365160456369 0.550571769423192 0.2465634027234085 0.9833179699889432 0.9735402934323871 -0.12779911716981607 -0.6037993657599656 -0.1511830118843862 -0.23733322652059852 -0.4433515059729889 0.34798279627348716 -0.6384910133206707 -0.3425213306621415 0.31513450674345744 0.6544978329271525 0.9768740858898062 0.7294582474749727 0.03500176504239105 -0.2344878383117437 -0.4333358431572685 -0.08892932528577346 0.727733246550039 0.813618709058699 -0.29936977938447895 -0.16710377469491977 -0.9872374786486866 -0.47178198061903265 -0.34358599321282934 -0.4581220364639029 -0.6697612926928569 0.4833346748896479 -0.15485802754341083 0.5427638028718025 0.013505188883786934 0.703091075352738 0.697645046569646 0.4987395357768476 0.9772548264193497 0.9269600924473667 0.7075151734513068 +-0.7372766885877364 -0.8446075331242044 0.03407073708948194 -0.2496118637617113 -0.9650463693121192 -0.5259718596785439 -0.10998426628935709 -0.8203382618274233 -0.9045318111116172 -0.5448799608388126 -0.7444597501253707 0.5096459031249287 -0.39816269043315966 -0.36942956585714626 -0.2996726934244365 -0.791235944995403 -0.391935779183485 -0.5455566368520075 0.5285567839125294 0.9938369763775654 0.2156524258821988 0.8778606525412171 0.8377124196002039 0.8932232168295422 0.902564579393788 -0.12261175406154212 0.13670710236367878 0.4161007792090037 0.03361538023369737 -0.028180155491479564 -0.8669028364669824 0.8215869329406209 -0.2350209311160283 0.17428951953799765 0.9276559531018183 -0.8652375960646355 -0.2569970877545549 -0.8424552588709731 0.25692373832655324 0.18526679052596573 0.07051201898591053 0.7694790078532769 0.43509272395927634 -0.25625959773346896 -0.0006057998558810507 0.7462424580626248 -0.869128019983382 -0.27792408703019467 0.47417968304912317 0.005162923414533616 -0.6287305115116673 0.8638877449400879 0.2572594101482033 0.20719473366962027 -0.3951483739465511 0.35371102157684864 0.3743266339212217 0.47758892181753354 -0.4667180672450859 -0.3177453188186843 0.47926017101489204 -0.9941120728382158 0.41606757372316006 0.42924944094551476 -0.12975756631877844 0.5905544062959494 -0.16195451689214235 0.4254135163568642 -0.05357192801795385 0.986632654605976 0.8148879141976964 0.37619220697872335 -0.34063531073179276 -0.34138135360379396 0.422114236984251 -0.8216730821244913 0.6588161788484215 0.3397236191165145 0.8104940289496523 0.3732694784366586 -0.18409260002635364 -0.5644962856321118 0.46123916374939067 0.6830246208215798 -0.07031401328035147 -0.3756413087715649 -0.38759421625080304 0.7425402140107293 0.9697735702338375 -0.7389441541927166 -0.12106742019508765 -0.571015728185815 0.23450561238668022 0.4476721848269676 -0.769765575554529 -0.6629692325492875 -0.5523089337594718 0.37278734590192375 0.4191885249782994 0.012997875984397833 0.7969829471569112 -0.5127425693419867 -0.4274136873939334 -0.6142726037016522 -0.7343990541542575 0.2689553586842688 -0.08362210578744378 -0.8775457210371085 0.5680655041139462 -0.5447222199197359 -0.15845008935031646 -0.0863526036310136 0.5166024189792466 -0.2666417984937455 0.9940945745522611 -0.7863962078384938 0.7849822615616502 -0.7681501599913181 0.4719472680293868 -0.8335994235650317 0.4213193081171438 0.6094751610325719 0.09332480483640881 0.16964165865753555 0.6800646145470943 -0.062199718477196964 0.4171935148784076 0.995977342159496 0.3084876737231643 -0.32169310284756714 0.25836103956030465 0.7778218945484807 -0.10542996526694304 -0.9618972462111932 -0.8377629847981753 0.9988126655810965 0.7529677409685491 0.5056442007692519 -0.8763357058073693 0.15275633511605413 0.3071088375939892 0.7785924424440627 -0.002009662259108591 -0.8164795073028623 -0.3181712442181177 0.2530965692603515 -0.23785000945465296 -0.06804538847184127 -0.6709735877406953 0.17303902806614957 -0.9912897640441505 0.2767967931341353 -0.545524296289158 0.20397937028567492 -0.48917970971928004 -0.668445657203798 -0.7868813772189982 -0.336060563119172 0.18470660213649936 -0.24543979960714135 0.14893952670543142 0.040376129976887665 -0.3270281682551808 -0.6420084621403988 -0.6103879489637662 -0.2922493554393657 0.4559249508184209 0.0035927441262553206 0.1576605520105534 -0.6775950602826941 -0.3524191855059562 -0.15417295024081445 0.2885014034013671 -0.7391091710457656 0.9813961954409554 -0.4948718033042785 -0.23776925237529833 -0.46899092793171127 -0.3455821507138781 0.9202375534029852 -0.2874181738536197 0.24080836095334823 0.6707750208751528 -0.251898453265897 -0.10244148592653812 0.4692969287520743 0.09756963292551513 -0.47320835965687835 0.14889097828327258 -0.5239007600195713 -0.8597944460426468 -0.636571675268188 -0.6751939334314927 0.4770162312259538 -0.9529438541208866 0.7130494430486081 0.42537965005392664 -0.44059811438395813 -0.16959001474506308 -0.21527111359978246 +-0.6776856667955873 -0.043584048004092546 -0.08082331356785977 0.973560685482111 0.07128725705985861 -0.8381036783171993 0.949473512715673 0.26903315412026174 0.5091974667882182 -0.7303573632314835 0.5193123930266539 -0.05840369893441788 -0.8889150788555218 0.5188710587227139 -0.26891166158169333 -0.26897831967406094 -0.09453441187237055 -0.11730210229815241 0.6680418810106055 0.22764107922372157 -0.9927932922873921 -0.26307206006152284 -0.40862535502847575 -0.10713789749157931 0.23228481262267753 -0.9981258527637074 -0.5882340738068861 -0.13381173139374236 0.5674609099540098 -0.8788596214497724 0.7987475827175594 -0.28543077682351115 0.004556520992360813 0.3291950125036054 -0.33260191727493016 -0.6562164376462316 -0.5975816470528812 0.966838998072048 -0.09442898350572304 -0.5949406468114349 -0.37918109240111675 -0.046593093493781934 -0.14403937298829717 -0.4749830374591608 -0.5576506380144093 -0.7444104270276142 -0.324918151581129 -0.966219034295716 0.37696958739792885 -0.5195070231731129 0.6458933209242963 0.6195298792610076 0.6809594474905143 -0.6500627340674661 -0.051346715459337666 -0.9834236038647954 -0.7927124670466479 0.7103430019159189 0.614567984112312 0.650266421383149 -0.4602474213450414 -0.08441107136577375 0.6427436952751351 0.24151883275143904 -0.8020892629690552 -0.4383411016038843 0.013479419802499892 0.2849195244746048 -0.8010994676305989 -0.43541401272308455 -0.9654469343889369 -0.7622572373321845 -0.8895373747103663 -0.9556306117126261 0.23184433980461971 -0.480934111405696 0.8745762204420071 -0.2064831509781091 -0.9090239691354636 0.1183384108695067 0.7283421998859283 0.5694269381562265 0.9100709727586676 0.26146685825727145 0.348981120440242 -0.6073457420744668 -0.5504959368192988 0.048783791578251634 -0.4455796164131942 0.2019394603931548 0.019356948493022497 -0.7022313035993988 0.8360630354993497 0.8423352821434047 0.75951486677922 -0.7239906879630116 -0.8747095523725934 0.19417665132122774 -0.07410378571140819 0.5278064084109508 -0.20970467671782456 -0.29230203063045956 0.44027296411043326 -0.5770098201468652 -0.43766514373235443 -0.5859152280288327 -0.6650604273260909 -0.6237564308889456 0.2636508013560095 -0.27284019655117353 0.7085113072865044 0.8504962502508284 0.598393135501259 -0.35276734910639274 0.8378551457272108 -0.719322549321699 -0.830153600360213 -0.6588513261980531 0.46988551247918875 0.5344118725541365 0.7025680372058745 -0.38309852701820346 -0.706326942208984 0.7417606577645572 0.6509161619427901 0.7057603803235919 -0.7917866512578495 -0.10089148633543132 -0.6063634452325359 0.3892156855466029 -0.8913164682358916 -0.7102667860299776 0.6403729814243038 -0.4259325833801282 -0.10631921817017087 -0.18863774644939757 0.3060397050257293 0.37783338818566503 0.7587471313860421 0.06640033734878492 -0.19038171803506154 0.2464721518692068 -0.48382631645277363 0.250217310055463 -0.28770707102644155 -0.43972294964179026 0.41241750017204715 0.5204251413359644 0.8709305561267338 0.9669394424353783 -0.6655953884020891 -0.4491317529032368 -0.7269557434241232 0.7011506697040233 -0.3339448482359242 -0.4704601867816407 -0.5727488524283819 -0.4468737312270781 -0.44676467215488547 -0.03811961547507381 0.4816083953919392 0.09400773362968029 -0.8579786952052824 -0.7469732307578365 -0.5834801849189408 -0.5246609557680855 0.6735685771249018 0.13804521013427817 -0.029327500366140402 0.648679909505234 -0.5022291726383172 -0.4739575468147892 0.1334352631831408 0.5408152358125464 -0.5771311543935527 0.9759393319920739 0.40702414380237983 0.8210939320608632 -0.5493958883292822 0.9687115108127371 0.034103677126809284 0.8571214849944477 0.059866480132541255 0.8124958929238817 0.5814257852652318 0.843680253517548 -0.46550216693980784 0.3355505038900226 0.22906713748742003 0.6279732969225584 -0.25407461549219046 0.11987705203992594 -0.046182899662656984 -0.037974311337685585 0.39029152061281946 -0.8674287478738496 -0.6662468355285658 -0.21301851388208504 0.6950292727244578 -0.6608577126321638 +0.505530923888307 -0.6591473105116659 0.15154798145933146 -0.20777036485892575 -0.12450394826625288 -0.24998036786871336 -0.9637502456097031 -0.8866206311772311 -0.4063221069597118 0.3779379097327309 0.024813692937391885 -0.9316360994903654 0.13258622350965465 0.2361350710380261 0.9358668751373236 -0.9302994009529932 -0.6875675840718929 -0.2815532377094241 -0.2535218176372942 0.38586273736507337 0.4215198076387565 0.31620127124042074 -0.499684083719693 -0.6367250976297512 0.25662783184789095 0.10360776389206783 0.9908572912126559 0.7214421665154627 -0.7684753391577812 0.2562381431258869 0.07737064739387023 0.4393811177643123 -0.7188734417853315 0.4024814028900454 0.5515566335274718 0.8435598126800099 0.16522562231379134 0.10583408033973218 0.6641399856710937 -0.09710393611140988 0.0865970777427334 -0.251991032353996 0.8525726642394551 0.3521559553779585 -0.6025246298664988 -0.115044460168092 -0.9194015326740215 -0.49731410013624133 0.43776903735759065 0.12445555757642812 -0.7410772076044436 -0.6681502380004287 0.1650139813473972 0.06095263583901178 0.1527259846619906 -0.599533192109321 -0.5220616281437229 0.4513716161961734 -0.5114217326128834 0.737830720631421 -0.01232831060456041 -0.7128885067734201 0.390086809724173 0.8881168457642403 0.17432437210941787 0.9733239558793774 0.55613811993276 0.9149774031952687 -0.5554742039404941 0.6139473877333734 -0.3370389362685169 -0.5057857771219254 -0.03940426454947632 -0.10564119163383578 -0.957896005640237 -0.33382059036889733 0.903843690380643 -0.23134993924673597 0.347919854251616 -0.01768726978497659 -0.399993546974448 0.1651523444282592 -0.1876437382823415 -0.565105236342146 -0.39621635548772116 0.7508830068953993 0.18664872017545853 0.11957748217539943 0.6571511432317607 0.015542430050258238 -0.42528577239299326 -0.2971877996157779 -0.6841214698286622 -0.28529611123753984 -0.7434301984947929 -0.29178808437018033 -0.07831260868150247 -0.2721472690558848 -0.40498334488339816 0.12039838820856219 0.23713017527738423 0.25499585699630645 0.02523511111458787 -0.3794369598844858 -0.567908542425158 -0.6500376330524549 0.06403993935719288 0.16708237604310305 0.6030609989013127 0.7326091348649462 -0.9092211665463488 -0.3398184215033646 0.2272031059217099 0.9846215913544871 -0.9195843797211865 0.7078540461938967 -0.1422733860761447 0.7472090648986756 -0.7020744195447122 0.8222579807045787 0.9458662601289658 0.09453551044971231 -0.6565897994222356 -0.19032430334509143 -0.11848480556037466 0.8041288060022849 0.06966496750279538 0.13245732591625403 -0.6391188687325651 0.6914866586110024 0.014735648225636222 0.41776018250031344 -0.34964862075885383 -0.1656691395854326 -0.798945705974359 0.4787519137456082 0.08302277474628261 -0.3960511639301978 0.5312158535224494 -0.25471112204938584 0.8809342755337684 0.10142724881065512 0.6307164112978363 -0.9163859828676686 0.2904509202881693 0.8671269938769917 -0.05635028622423932 0.8295409922627945 -0.803668508121973 0.11713839686329708 0.14401018620437167 0.25089253793191757 0.5288958802176149 -0.5983793894951908 0.18460006039536103 -0.9667392294038506 0.9659330152876848 0.6348164061378814 -0.603716489459359 -0.943053473322919 -0.05691236236421471 0.5861287529687946 -0.39114606431089305 0.3426163564002791 -0.11856065456008902 0.8978623673498003 0.32996539028633376 -0.6590893427724174 -0.14972365931020382 -0.8941227520901771 -0.9318527896636413 -0.5163723615195182 0.9312468902102742 -0.8590751607506257 0.2187390572450174 0.706753617311392 0.18388626095503846 0.7518224146201622 -0.9800951165557925 -0.6241783688723002 0.1285637426497579 0.4882518239827478 -0.877292862875195 -0.17184360845249702 -0.4279086902577829 -0.12596922384378595 0.5483725996313937 -0.4005413460178311 -0.13214811790028813 0.6774611007468849 0.6753565252946279 0.1507700522941846 0.975161417809306 -0.27577584116875387 0.8321935346199745 0.6328889765784527 0.36240988380641603 -0.1840401202737436 -0.13188122413320302 0.27395725169948326 +0.6143876615596644 0.7055419826644842 -0.08014772715218221 0.06522078018781863 -0.5207754049708708 -0.4338060654982703 0.05315037566696579 -0.5608474291676424 -0.26479261580782687 -0.46561673133858705 0.004448257623721474 0.2769530783749685 -0.6638306232484956 -0.7938427165314401 0.3026854011173761 0.00490663415624959 0.9102022786325206 -0.5649998290230773 0.476307116118158 -0.7721061994829432 -0.7941114906631046 0.8047237109966299 0.7162336356481123 -0.8410093687365212 -0.4661895726414158 0.058033580383530126 -0.2520468577122117 0.23545827031635902 0.13711597827333444 -0.9778643440930732 0.21749627881886857 0.12792688707488598 0.10000225240637994 -0.19936587332603461 0.9905031076819615 0.5618223086270377 -0.025837370049193842 0.6602638045924027 -0.6917550788744906 -0.1512156913010292 0.899023800464408 -0.8957390086339005 -0.243057359505652 -0.23150375204170026 -0.6314657016549516 0.04345393362994776 0.4874558743483357 -0.16816737569367235 -0.5210226117037868 -0.20692593261717085 0.9098980642186583 -0.4344665596291484 0.20277944520485702 0.29831532852441645 0.014467277394958789 -0.8753287756675472 0.16118434162995854 0.2832188579905275 -0.27861133692261886 0.2584888302796948 -0.851289303683118 0.408486642093993 -0.8346933195235122 0.252347594165083 -0.9203940612922992 -0.9224123574150509 0.016441561624793266 -0.12328473869602719 -0.5071117577214743 0.31390593330393735 0.8670884856996053 0.04561333199337758 -0.4409719325709054 0.8052608158724313 -0.20002019698223839 -0.4819784052584719 0.7534856427949621 0.09366280355701861 0.17856587796406864 0.5138435184385695 -0.15111402252034378 0.7904496699516672 0.25328082266437524 -0.4096350572236198 -0.6831333562465232 0.04801763991963748 -0.3642838315962298 0.23399829107820547 -0.4821745054731523 -0.7546705411171939 0.08232787313120338 0.5265879747515392 0.9097859647316482 -0.03187055336376132 -0.11482844057130293 -0.8991640649593982 -0.9183879164440594 -0.30791204216099644 -0.3594003854938832 0.4509025783951499 0.49855795696182903 0.7345762994783007 -0.6619385138458036 0.7825336163260013 0.6018806551936531 -0.43585239941296794 0.46443286599523725 -0.6545049176410604 -0.8444616525417554 -0.9565247791204485 0.7530434354704203 -0.8493441875930796 0.8848766662271748 0.7751368387624491 -0.7380577063513178 -0.6424344256531695 0.9439425821505132 -0.3415080766223464 0.9838738019524138 0.3465805051894064 0.06964194688435787 0.9497105773892007 0.5103200579608818 0.9452683578706247 0.4468119434228499 -0.27047070338443535 0.004212868180738516 0.9274159869979615 -0.018348419474973232 -0.504128146700324 -0.047448340633168495 0.9910877115194654 -0.5400404085110448 -0.29769146329942964 0.21582650609169773 0.7411276300893157 -0.3633435439224073 0.6482803948943419 -0.08943716545838187 0.7909670962089022 0.18605925725026107 -0.5023977782898965 -0.7273342811482131 -0.40757707378450636 0.38135791282792053 -0.7794346999639901 -0.08178870620193046 -0.7489070379862346 0.9148062067780665 -0.7004868321162461 0.14634852717609714 -0.740849667432385 0.3212602822689079 0.028586933588776287 0.10036179892455843 0.7529042918160744 0.3635582338273762 -0.7930485053067029 -0.8432902144932397 0.6495541503196842 0.09121752322430265 0.1093545520548811 0.5007805783909227 -0.16820503211008453 -0.591560121225746 -0.9065771111079182 0.9365228756312882 0.08973516548383542 0.8856433710920484 -0.2085445600653948 -0.48854652453353586 -0.1874628450801059 -0.5000561807767518 0.6518689153296524 0.5088859406239992 0.06524968863245961 0.2559372156040789 0.3288503619023373 -0.7000085685460258 -0.6500325921747099 0.9997502642979563 -0.657394289151938 0.14805917936013646 -0.7860315904973096 -0.22022993482556474 -0.030041727604440682 0.2840675018831711 0.14826338438754227 -0.745497479781998 0.14076815951638988 0.1397993895053622 0.3943674207279748 0.9247451188821789 -0.5287398304370428 0.8358102998033745 -0.8126787525565198 -0.34254125442316474 0.9313402640535178 0.5193926634112371 0.2649273687107412 +0.05081093401907899 0.9527226997956326 -0.621137305674025 0.9487378767438537 -0.228935817618932 -0.9949707195903552 -0.03605547476266091 0.11110301150392687 -0.8777832278908191 0.7746502629767322 -0.4748935673572616 -0.9203128763084159 -0.8080668916449669 0.8931812219305493 -0.30135512612774806 0.49153597355125234 -0.7273934684397154 -0.5621640365038396 0.032666291649740664 -0.44253460371935627 -0.8248840220229232 -0.19325866223488597 -0.8253764931936698 0.8404713784654676 0.11360409086527867 -0.6716863042086849 -0.4791152523020732 0.9253048001564816 0.3713420326191754 -0.8609784343238134 0.15130131413002124 -0.8899930028448866 -0.07156712789298192 -0.960648241817817 -0.6078733664674425 -0.5081858165969759 0.4240752794736371 -0.7112504177643069 0.5714335954789862 0.7523624222910235 -0.12363918563773613 -0.980491298611516 0.6289932192520857 -0.1526131018266601 0.04314447106882113 0.13417806878909366 0.4654377174864581 -0.161617130973716 0.4103510685340741 0.14397821005763078 -0.12303130561111097 0.024367671048972195 -0.84540756857504 -0.9408516295676697 0.5380442053385661 0.08561737195315788 0.5470423079263826 0.011168169495923141 0.8987251585093363 -0.48807710313802066 -0.5556967655608076 0.3011072008800384 -0.5968590479829663 -0.39298394375468426 -0.0851696375574531 0.46381142765370087 -0.5684177295619253 0.8365872282643134 -0.49425584709518455 0.9318112191036065 0.47692413543249734 -0.2417346906005815 -0.1194460276418885 0.20545967936386078 0.8939571603736534 0.05322704159777736 0.9955638011671628 -0.6250229195909887 -0.3331683367861604 0.9624077233144475 0.2677396175741671 -0.27038674377635674 -0.0444250654254692 0.8638629526985289 0.9769704673570814 -0.5121482160713746 0.08325841724843008 0.19107336933825314 0.532503709710135 -0.8632291736739104 0.6046266428844613 0.7941464597733083 -0.4580714737642675 0.7374300387964521 -0.3381074241370443 0.14860484586415845 0.9059652652378496 0.7687559257814447 0.02883973058510869 -0.8411050416108694 -0.11912267337926563 0.23422315385495307 0.7549932242231014 0.09196380454010211 0.5088965152573452 -0.7030556183908496 -0.9857626057579096 0.011800519829180844 -0.21020316830774988 -0.6352864266085414 -0.791237063130033 0.1172318927777749 -0.5766643235874578 -0.8894144014499061 0.9434626568201889 -0.7416361749904152 0.4745232561618402 0.5391556589415825 0.16972008050785403 0.760428739389849 0.885390778496703 0.15722213341747193 0.8403274767242543 0.9992867162645431 0.9261355330003689 0.07978624784656962 0.1285055341934882 0.5877089508182025 0.9878844450216546 0.7421472482001552 0.7434962113634156 0.04930069248900959 0.40647799805963314 0.5816197946217629 0.28880343638976247 0.6081555459892689 0.4905711097428138 0.5409177869721464 -0.4876283651985298 -0.08181237489767623 -0.0029623103491043246 0.9136796688232869 0.6460252359823448 0.539154046047926 0.7245144347391939 0.816249515845543 -0.6013916016005703 -0.14940829495316676 -0.6980087309135223 -0.8885672944400949 -0.5687983550934788 -0.5675538060109031 0.4832579466642559 0.67804892994566 0.5190267084740607 0.9972640578650622 -0.34150122746321765 -0.23205833747168292 0.9324515017864001 -0.486595222620108 -0.8367072083134508 -0.6102143220773448 0.44617192127556105 -0.3870967894257742 0.6984568488522989 -0.6021813630512365 0.998907865592882 0.5960695654444195 0.65235326252127 -0.4128680479602711 0.1772428572242819 0.9441795430596649 0.2536512609172781 0.8421781072590404 -0.11809758342575027 -0.7038426700160312 -0.8024762610424672 -0.8110971678881937 -0.6858683321188834 -0.6342879979349554 0.9269572093580924 -0.04506308788594415 0.5837339160960766 0.29493204840220355 0.35320313499535017 -0.6971901217060668 0.10747866717475585 0.9745783566594026 -0.0850276143352584 -0.777932103117799 0.37474805700883285 -0.4697434023128788 -0.6772399399965519 0.5190221094226317 0.7572244464862252 0.5987951470313095 -0.6742331223669233 -0.6552825564384728 -0.8652326307128639 -0.025970739174076662 +-0.13612589933452468 0.13831888366011302 -0.2481584325371471 -0.08469034128448749 -0.18637858979981403 -0.9889756985969052 0.012130304925192625 -0.2843339296949561 0.73960942396354 -0.3441566538641767 0.9979456825294228 0.46769355010666147 0.7739383815150489 -0.5553067848100448 0.5331049261735799 0.8019793013386671 -0.5853444944082116 0.8305504181508792 0.31666196846169403 0.8061392910971719 -0.018511578230736347 0.653789877489354 0.7410309420783128 0.037189511042480694 -0.7202596254744351 -0.23463820807913205 -0.10177075528916935 -0.6450796635772766 0.7247825795550678 0.1483461594332829 0.26798977849566885 0.3025205867003624 -0.5664429539767732 0.9355082521850036 -0.5719083700416749 -0.3034681868583793 -0.9430164851039755 0.9578351750454941 0.08201240491902206 0.6009988954483609 0.10854473196246217 -0.4641159793522116 0.2087355011054144 0.7168477767395143 0.6121648490079035 -0.6321450041655587 -0.2251084928430065 0.2492608779391079 0.8878929916385723 -0.29605718482826004 -0.958626245447642 0.29084687659162256 -0.15756441361587536 -0.977515322939313 -0.0982013891981337 -0.5402546303782578 0.05075614448258903 -0.1754717341563512 -0.710003899741664 0.8379844103606551 0.012066272210269124 0.5086110682984204 -0.18533213549483296 0.7283319763859601 -0.1027964016277616 0.21838313429492784 -0.049346717680678776 0.9711058124062786 -0.6883058503083155 0.2026990970431326 0.2531604025493941 0.5744165163011727 -0.9559766565637013 -0.3381574752198686 -0.5387062901843902 -0.033551726544943206 0.9210195405784634 -0.7202242024355241 -0.008106797282179112 0.8666232770194848 -0.523832310856492 0.8762376743111329 -0.025644953983630536 0.7443914300821866 0.03080717724060622 0.8931945839476727 0.4834801473442114 0.730357343409759 -0.28676133381541247 0.7984807122515578 0.2547593990284813 0.3406767360034533 0.889024815123405 0.027322262485598214 -0.7956501090576205 -0.09471629710953011 -0.27233339019478264 0.18130294282347736 0.1653589515806282 0.42315781301445266 0.26593309628257433 0.7237400372713736 0.7421862924083029 0.1512197659105401 0.5895578018842007 -0.6622937786112091 -0.9040319175659992 0.06077499479155413 -0.45097272114937503 -0.3591001808150256 0.3366794158508928 -0.48544079549615926 -0.109909226307775 -0.8614782288543446 -0.466535932406571 0.5163339017332775 0.5672310893850085 0.08493504647916117 -0.21852767515416693 -0.22553020363823095 0.07356576460089292 0.39141791443083873 -0.15362543318656896 -0.7743520786744635 -0.08908581350076195 0.18162492471226455 -0.05336686689445291 0.7357865136935322 0.04640780440132364 -0.7805569346141692 0.6636066094205522 -0.4912055598678422 0.6300244399050072 -0.3213208716931555 -0.5098800670034249 -0.44056781928083444 0.0146511595108485 0.6506272404565008 -0.9042842193754765 -0.07949959168636345 -0.2799670315416849 0.2437504018700698 0.11795215124441172 -0.12553212361102584 -0.3359273582932185 0.4988881068837927 0.6692102860579796 0.20002591473863918 0.09831964698449358 0.7178033613559744 0.8545497559960842 -0.5505932325273382 0.6209206917044976 -0.7426131448209798 0.05155397358272884 -0.05907543102206958 0.4472957065676213 0.9001886255195599 -0.7374438460177277 0.8947218502965284 -0.7627583354639955 -0.914883117276053 0.45389490250539755 0.7579655484244348 -0.8477625678897638 -0.1386502830758809 0.06305686557109214 -0.38852036959549197 0.6032625639962719 -0.19893140070776516 0.6844687928111275 -0.517621416309856 -0.4339323230501777 0.09430819986460048 -0.17409865118458545 0.021640909968768218 0.2951994311836208 0.3568348419642342 0.799505309755562 0.9857202094670798 -0.9732505937613825 0.26336449048534294 -0.8312543035810078 -0.8398828205389797 -0.5492332898666012 -0.12573941827892976 -0.06314822914695117 0.8035274726859394 -0.18153609706089302 0.9746669719253365 0.5870157720049167 0.32996100350991764 0.9429485225770156 -0.8384017406461624 -0.1410179616868601 -0.7074440162295033 0.9730744909445759 -0.1054337386864368 -0.18174917500621435 0.9682553122440185 +-0.47803092691433213 0.6869436936015711 0.5444393063709871 0.1657527704766879 -0.36034514215788227 0.4063412853817663 -0.6740881469452984 0.5013083740788922 -0.22096666978858726 -0.6868399018674374 0.3464452126261852 -0.6862701688935966 0.2875086656859027 -0.23552034949780554 0.08742177196612677 -0.8946496014535938 -0.4844461697663418 -0.9766843644462277 -0.005843153605388229 -0.3168219836752568 0.3283543269501732 0.08021736718616768 0.8202369801430931 0.7000138083000289 -0.11020158383525658 0.24431988200331345 -0.6006124402474964 0.6629868751911292 -0.7443428737716775 -0.17937057991605387 -0.35957718709484476 0.3951438044679152 -0.010856225468101499 0.13114438219444002 0.7763394296523081 -0.47236531101316626 0.2012569545180649 0.14616153534675336 -0.5235683489673444 -0.08284121535758526 -0.4656534439649349 -0.900524786923462 -0.22056354689733926 0.1885191078772217 -0.15245691877345613 0.47287844337303775 -0.39089085089273157 -0.4749115799766437 0.24488203579294976 0.8608525497310586 -0.17110939269964276 -0.3925983555893 -0.7665435818137312 0.02783879676589973 0.21817802292746968 0.9973558388050323 -0.54622834094601 0.07663866725667923 -0.3924419547609106 0.08174637257825168 0.4038879951860541 0.5019517782730865 -0.7380257100837413 0.5841066979535867 -0.3658995962062799 0.012212477057642834 -0.6281680229664932 0.020981224734725634 -0.9070912949572141 0.13645049774706464 -0.24952558465936492 0.7394087376472118 -0.2993823476302737 -0.11668113065629626 0.7121132973100888 -0.6848311228083026 -0.32957111854787136 -0.4852613932245833 -0.045614543641992356 -0.9967261497739952 0.00941754835843045 -0.3937869629380948 -0.7850599081218681 0.055490958789671474 0.21939110105123327 0.32338033095568974 0.5893606873009076 0.5729915503223926 0.4672380847624398 -0.16360723634010044 0.40895517139477033 -0.9220308469121066 0.6803267103828079 0.2959235789369956 0.4427123148789496 -0.8790584447993091 -0.0018362861891405569 -0.33031899593245595 0.43522834214252826 -0.4140434391930963 0.18036647859371158 0.8253333492501003 0.24277499467538455 0.64130152023517 0.11175637781821424 -0.06973531844036085 0.02894916457040453 0.5553802264843675 0.7707921814825651 0.7578677055310754 0.9660420569587815 -0.80924714244567 -0.8102207774882058 0.9050522507026817 -0.09453627197113157 -0.1351233104203542 -0.4499724124978173 0.7099125461783227 -0.8319869696655136 0.5660949640308461 0.07821225780921859 0.7153105476254573 0.7798360985131283 -0.3433291256933273 0.7405627378018 -0.21038257344111755 -0.6993138120885727 0.898539335812423 -0.6811794814668841 -0.3439820237272262 0.7768294634635329 0.3769762962135592 0.6252580274271806 -0.6750071631381556 0.009925994705917374 -0.437096774503255 0.042756500301853295 -0.5565277167104246 -0.05193373224049491 -0.16101386839097276 0.16670891748570615 -0.9867789632583872 0.7488357917832893 -0.0323494219899938 0.9971056684460236 -0.9053878536442359 -0.4097388335429979 -0.45894879541738676 0.8499448527609159 0.7728497544146082 0.08269733655760447 0.2922088578916451 0.43177345058353245 0.5151051477272859 -0.43287645578708034 -0.7496799440139819 -0.4814176550865612 -0.43745036519481983 -0.009171977706377454 0.08686259944592822 -0.04670619756839978 -0.16949532420675117 0.46730394201288306 0.40351516439794555 -0.1345454192468163 -0.8086747339717137 0.5604993669166549 0.8900815521159986 -0.18577267194737623 0.11653004263723887 0.8475962195466267 -0.43337175568210085 -0.31660814216282884 0.24072419121688027 -0.8566082495524185 -0.6853098802292088 -0.9668154413494103 -0.3243598294630379 0.27356194037256376 0.6215007128327548 -0.42453517813876385 -0.9620855314917696 -0.5316466122972447 -0.04946035355951506 0.21418734371596204 0.21407867114952084 0.5664951892802994 0.4971976494574126 -0.27588411893609344 0.29578544876370794 -0.6236075872908322 -0.2824711067748078 -0.48790840055951934 -0.49901407934381314 0.14104065620206918 0.17357626821053085 0.3116690569493541 0.6384199310760637 0.1131250218039197 0.006644942002354215 +0.1202133515836803 -0.719193058798892 0.20325044116768676 -0.8013354250175484 0.9067207475359127 0.26044630787017886 0.10477808900302543 -0.5821570088298289 0.5234628913107278 -0.6699784641782147 0.10006811203676325 0.8310917920660665 0.5114783810258139 -0.04624276909404923 0.45491371293100924 0.27843707209022406 0.007979316346413245 -0.7512051743745349 -0.2911286834931843 -0.8297098417889253 -0.6058245514153697 0.4179826230083623 0.1072398863468984 0.08230796696410647 -0.1776180416423192 -0.6747263720648347 0.3368080268283691 0.39052000578769097 0.29036406334648723 0.5296424716262986 0.03380783146035693 -0.02351853556453709 0.2554092894949147 0.4461817033255424 -0.8465527840147944 -0.8400765573466538 0.9019606788050993 0.41158512287519455 -0.4586647705085318 -0.9710004958419742 -0.3338934731285055 -0.5643581532014221 0.6893838359535776 -0.2895978956470011 0.9449230503042412 0.9023200540303795 0.912298753419464 -0.9157848326131739 0.28831618145429294 0.23027174649193993 -0.19477947461790723 -0.24910335651282667 -0.851741357736923 0.8291441937863868 0.5077194295615353 -0.21439662817121619 0.2801696790908723 0.5400535329628733 0.411276627080855 -0.09504556330920244 0.09999586738900268 -0.7906382468423823 0.8004588208960381 -0.7631525796294427 0.8055096110939657 0.8887526676233637 -0.7664449967500571 0.6330082727999691 0.9238919667764776 0.46510934551844607 -0.34369371435325147 -0.2907759566211756 -0.26025830498593017 -0.2856447025035702 -0.2169870605305606 0.5837238874200781 -0.7459857977955349 0.05205132805593293 0.5128512883237055 -0.9952942629721084 0.12132437734247148 0.01023466459730793 0.3042143196015372 -0.692602496329787 0.03036193704792045 -0.4135604841237761 -0.14499783150340972 0.31614794956876646 0.600484725341693 0.5724769611176848 0.7815504283409962 -0.021517919760158488 0.8474154794930215 -0.6928174964129339 0.4081010929836004 0.36127949832049433 -0.8595990558663946 -0.7249127414653258 -0.9101168217210747 0.7659720764666826 0.2360512949933249 0.661931952144925 -0.9019966002226587 -0.9131508386646121 0.2727791504778798 -0.5374429633212716 0.18318874603564272 -0.5847173928950631 -0.8804316408998745 -0.014285796846318366 -0.3921441516858395 0.6611938842239926 -0.5338407487941961 0.22037257996480775 0.8644483754739776 0.2685320098134367 -0.37051595460995257 -0.7285921287762291 -0.8012629269559512 -0.48124740012068923 0.40595746782801956 0.1039541344768884 -0.030405312668793094 0.5215685484978556 0.8084622896297362 0.834821104656762 -0.2807827428825256 -0.22955553720915112 0.6920351148745436 0.3142690261421355 -0.6265730797062756 -0.25030002160636955 -0.8887219858007891 0.6364722465904142 -0.22196653569196823 -0.9256731412673158 -0.2608772476028718 -0.5499197941910177 0.25010530216561255 -0.5680712982381362 0.9689408388413523 0.7350933735536722 0.4963766602439801 0.6241885243628478 -0.8745760565381842 -0.5103833183388207 -0.879536187876623 -0.645887508036598 -0.3883774262134363 0.6108341387085188 -0.8212175238512394 0.5993643560566619 -0.046764869740904214 0.27814899667457005 0.971384954195041 0.529629649995556 -0.856505904039331 0.9416667179433367 0.10610228127872068 0.10684187927591515 0.3618168651909861 -0.8729192866239737 -0.912407123428765 0.253044083542179 0.7754458502314903 0.21971077929156224 0.5280655050914955 -0.8490852405881264 -0.41608825812965833 -0.3999157872910548 -0.8194656567021068 0.12717591202474265 0.91930980106476 -0.5849280178533804 0.47207673591753174 0.4810095947489137 0.29523446954538324 0.7766117887812058 -0.5485780906680722 0.16744092710994818 0.862368463832484 0.8940590018629733 0.901611554599123 0.6701097559733276 -0.8987515774731891 -0.3005156213210196 -0.06514460956661994 -0.42240042005315637 0.3738370406458391 0.9099962308056495 -0.2118573317817567 0.5438104051448582 -0.9645731058022304 0.42379814633544344 -0.48676450331874666 0.5677831579587176 -0.263022713776641 -0.17168711765642275 -0.3669886388140968 0.39922569610237435 +-0.620063424436764 -0.5787523755451935 -0.5129795058468054 0.4044925553962264 -0.40071461859992197 0.9281304749935371 -0.011200038899322529 -0.3247837916708103 0.806901070941104 0.5342283361420159 0.3210771475871754 0.401674575409416 -0.4376458613089065 0.9402342512646857 0.331532438011755 -0.7618629646424131 -0.29156052531212495 0.6658625328492627 -0.638924844987599 0.01459341460183805 0.3655181274709205 -0.9026958523499393 -0.5150075440168851 0.3064072290978417 -0.6353368507997241 0.36658240768244377 -0.00886106450912405 0.08567810809714005 -0.7201932944579543 0.3302697503273657 0.25093120130297786 0.5518597429379875 -0.04054083179572476 0.06068214256443105 -0.11393796994186589 0.8272945959525846 0.4454170879938024 0.7120631616981974 -0.22242512367827527 -0.5324131127740952 -0.7025712553648422 -0.37749813646071595 0.2494723341302525 0.2693857907503716 -0.9627449121319607 -0.08751609689613682 0.07490778600125236 0.4585357438784794 0.3520347003813722 0.1474459135862256 -0.2581814733354437 -0.3758883898562466 -0.6957930816127025 0.5684773080769461 0.3860526814646392 0.8846604475005677 0.04165279828590607 0.6313076045170694 0.49171566774176734 -0.583367871371723 -0.7492060226876196 -0.3860409379590162 -0.4992539226116981 0.7773135942368259 -0.457960035496902 0.6080976244654197 -0.8081442721797063 0.7221858835371073 -0.5478060931848121 -0.42445518932783743 0.3786530824141918 0.16396121148728238 -0.9594374504345426 -0.05308909015573393 -0.6673197957386308 0.9922008482675231 -0.40569066290136524 -0.3791366181586089 -0.3869591971637816 0.87322362963635 -0.45497860038352167 -0.5701387107203906 -0.09391278074484699 0.04947983800973277 0.03657448177547784 0.32628563552879397 -0.6077291534916722 -0.9771828694274318 0.07618251397285847 0.3346613364034048 -0.7946308570553131 0.2568761766041736 -0.0577451369360058 -0.43809385403491197 -0.7550561221016849 -0.6595456477781525 -0.22109610598260754 0.3091153576433292 0.17527245715607775 -0.8029273584513661 0.054000436986060496 0.4337297720621285 -0.8990264182116272 0.715102802046127 0.9130749310941839 -0.7182300867434603 0.2585466558951335 0.09707201148538314 -0.1391938212802717 0.23709957641743684 0.5466881541584412 0.35529156906016635 0.7171450088235609 -0.4137857621319201 -0.4652649524230583 0.8862324181490169 -0.3440540561416845 0.5356241185869546 0.6212021085834514 0.6506582383677542 0.024904805398598517 -0.6365099526502458 -0.1234815320954945 -0.8841727737433922 0.8418386671587224 0.5677345118330352 -0.8384789449450818 0.6681458486242879 -0.8841349674179895 0.6095925723053455 -0.6022455402828251 0.28553371816546713 -0.34639563543231144 0.41219299873395876 0.8888892676524289 0.5490023191788409 -0.5426411983806283 -0.8066001352214767 -0.7300569417609668 0.12137549651317214 0.24407930455035198 0.42129997347116355 0.46631414392156834 -0.8314352087763814 -0.20481099054723995 0.06022174344990949 -0.15926703895623184 0.9403785240461346 0.6776741962298947 -0.5543550088058515 -0.0442659297242225 -0.11729602123107541 -0.14263412579449564 -0.21689597653558068 0.23177461505742603 -0.5643984068275401 -0.002231158813412071 -0.3270980732169666 -0.15921944097687923 0.46830387707988574 0.051393826647054386 -0.05624045167445879 -0.28446964832563015 -0.7793646068402345 0.06725543303489068 -0.7008725530080551 -0.8013683478732345 -0.6530686553335705 -0.8428466323292771 -0.3500516185908549 0.6796760951104637 -0.34458088036706025 0.8082295783179647 -0.9143912946002792 -0.049648450643201336 -0.0785630633273775 0.1742490300285291 -0.47527739657128687 -0.06874625439578574 0.14279189354747546 0.10508441027550153 0.13559778992290128 -0.6364051584495567 0.4512594737683584 0.36744982420044847 0.5762651849584934 -0.5698983150386605 0.5253963365307381 0.955337084889563 -0.71178480040843 0.29136120997219916 0.7263703891079571 -0.5960205795207922 0.6746008141340087 0.549194269197463 -0.7832970303552396 0.1706155241074787 -0.5776524874842299 0.6713294758671451 -0.08441077524202711 +0.9041296697314913 -0.7126559610629184 -0.5330112769847506 -0.11193248489122731 0.7782792937344816 -0.12233229320966355 -0.04004264680863745 -0.6093647522350571 -0.9337448554495633 -0.044477857870211635 0.07241079865543765 0.6888056506488682 0.13324429609051425 -0.04717871897733383 0.09077994850923177 0.1638575659576642 -0.1695211913871315 0.18227132369212007 0.2744230078951795 0.1163363636309569 -0.9065248651460489 -0.9461691333853453 0.32220999656694294 -0.3493918910955953 -0.5454450977430809 0.7107201138057893 0.3845902495793665 -0.49968548007322955 -0.5409074475131261 0.617357535467665 0.7804954686309307 0.9876716217762611 -0.4848496878856743 -0.29679347065505013 0.625963904919143 -0.06582249264327533 0.30553757709000573 -0.22139532851613808 -0.48997800205836883 0.5825112145168172 -0.1836795266230351 -0.33361094194654095 -0.6348389442966456 0.9114119880388496 0.9838725403398338 -0.4935133712992048 -0.08526603363234875 -0.29222617996516953 -0.5664054463704065 -0.5055570652758212 -0.5299348739953502 -0.20496973733406976 -0.022884832484262763 0.14772338836938492 -0.9777153850286773 0.4755564615922738 -0.2544482628434024 -0.8698528941787433 -0.10013218650124278 -0.06253125303904428 -0.735868930344137 -0.006802403516005695 0.37292648833484554 -0.4000299785279484 -0.977716007054493 -0.3263169260355385 0.6681921209366819 -0.8687607735997469 0.22252796389551444 0.03208654375474196 -0.16862884888644758 0.9872424203484347 -0.19926411511014663 -0.30553812731588925 0.13198384966706933 0.1453426321807536 -0.95443047685978 -0.8792520968572817 0.896845988093967 0.09074872015116098 0.6392076927963879 -0.12989500424661604 0.9942513339274417 -0.31063300512949765 -0.7845106101953727 0.23559058190696747 -0.5685732089488174 0.6793791566357366 0.7921226808994113 -0.10813922891072236 0.5083453762447423 -0.9675267929524209 -0.9567329016311688 -0.06612930756545987 -0.9242698957998181 0.2237837797605664 0.0352845470412384 0.41304939510653726 0.11809926723423736 -0.7642027970746672 0.2646932211888393 -0.9304571961127486 -0.20226736628446496 -0.03617978608720307 -0.19223042715988825 -0.5875909063163884 0.8137071249552839 -0.43574414510354775 -0.6522713684180603 0.7838630186153954 0.6727047254176199 0.3815288211184915 -0.26220013081472815 0.7707355915664285 0.7699482844932699 0.09521458500548441 -0.568597824318414 -0.6612183471134463 0.238130757954351 -0.3578351914472895 -0.29109918452040184 -0.3625055501037122 0.6968953341239656 -0.29683372759110993 0.9989540850405776 0.3783594301977149 0.6041424978111549 -0.9076384699790643 -0.051441133448388854 0.06681641183280962 -0.6668036839028642 0.03740657529138236 0.6890738332773436 -0.5587166567743613 0.28570480569207946 -0.1431019328106613 -0.35361872776220404 -0.39294977005883003 0.5368238921134989 0.9524117190282904 -0.884466552649847 0.6145585545294243 -0.6224940289867251 -0.5932105783735433 0.17314518713566907 -0.9559827355114943 0.08846749259595588 -0.17755775895476122 -0.16612189237175246 0.5703080456694627 0.7413256847846179 -0.5206547262524786 0.8526464833537442 0.41671135999499587 -0.7553842139654989 -0.45397483524273485 0.6167056273534801 0.8336468076772645 0.46658548344932194 -0.3630210425897795 0.7762104290759628 0.45642987219858644 -0.08622746310279439 -0.4058149201574377 -0.9159973209700991 0.50401045858253 0.06085495499165883 -0.21198192300175056 0.95992268591511 -0.6958111869804287 -0.5221832015421304 -0.7279471929536634 0.4491083633167594 0.9644998618003222 -0.4120102362362008 0.6131905604481165 -0.38076435442248635 0.2503168219351428 -0.1660692213931798 -0.5742020028711741 0.7210948930970822 -0.690302769133692 -0.7846110360106904 -0.2334872467633593 0.031025486417807224 0.03904475350083625 -0.02531950267798888 0.35524112346738423 0.5505659065487134 -0.4065860600591029 -0.8187389241382079 0.4503705366680202 -0.316106414470287 -0.9725687452450631 0.5927754557279836 -0.15100601807691594 -0.4573409388169356 0.6334239203190655 0.28804138421844794 -0.6164047693427215 +0.5342737569456251 -0.0010217771332106107 0.35549977587074477 -0.8455557076353326 -0.5786815356786434 0.2670258625301922 -0.2287325749527751 -0.8996497327453505 0.7673474246959695 0.5252338121639459 0.9949128202105628 -0.6046672232000827 -0.6131287076704501 0.8756493456899053 -0.7568546040534885 0.19580018704932867 -0.701022172283299 0.5897429681210271 -0.22352160511688002 -0.09457669783658318 0.09519912539392927 -0.35420403306763504 -0.6004622396424704 0.13662589603644215 -0.22072166383800274 -0.4627080312057983 -0.21699887893407244 -0.3534812082321084 0.7897137543839077 0.26421958979455695 0.7197397507180616 -0.9808658003946995 -0.5314439398284987 0.12182187983876425 -0.7994604677202892 0.9212406063501686 0.5508442182321305 0.365010634391558 -0.8939436617435905 -0.7137903804285397 -0.4219395814579985 -0.4959297643493572 -0.3557983649329781 -0.1674430062717751 -0.758838697971238 -0.18470296628095828 0.9982867145465759 -0.3340495180180245 -0.04542981699930082 0.8902607302766705 -0.5143780276549421 0.3200782785292149 0.8772781404433356 0.6085039093361082 0.13468691946100586 -0.7514020955029523 -0.8996818735164982 -0.6801698332365793 -0.5832143325109604 -0.3267975225937676 -0.5176084751935501 -0.90200091541967 0.7742998442527875 0.8557049065262321 -0.2712539447806821 -0.5699360720549391 0.4594099587973586 -0.22197279993359964 -0.5369597094562557 -0.1854699252856773 -0.10642612916872896 0.800801620992247 0.4728853723996014 -0.7265448232309906 0.9435086067342837 -0.5550052784664807 0.8729412176196123 0.35298477984096266 0.25055917277803674 -0.58625250798282 0.9732398676303009 -0.48902101436582535 0.7723305350131728 0.45651079062217703 -0.23690165841927668 -0.5977605008204365 -0.05163039807654246 0.1792472210426208 -0.5964454196305073 0.8315662885775199 0.9707083519070983 -0.3907272295373996 0.3144501212973614 -0.5148986464463563 0.548123957243325 -0.19291317737973057 0.88146254751075 -0.3061371232512955 0.2569731016191723 0.07300742180124176 0.5419055141738196 -0.4161852399916306 -0.3207169080716257 0.42947368374765715 0.6273447003338606 -0.8359699425079752 0.1145891658280469 0.11764970970552424 -0.2252040045587964 0.131882345618076 -0.2318107433625518 0.5401828863030831 0.9767877502011204 -0.5864386795336842 -0.20279834704076305 0.2585711855908426 0.49938042216777423 0.3802984307104249 -0.6144168970396051 -0.12294025723204727 0.9983439986986127 0.9585928745142198 -0.6884286235634267 0.58155377224207 -0.7433050508119337 -0.14770938435303083 0.457103461497268 0.9247356320455542 -0.12525007620299178 -0.3941747295088298 0.7996128705221413 0.16318829328587436 -0.27692031777080905 0.936061378670012 -0.44626419565154984 -0.8899294058188323 -0.28694165653687986 0.5664038912221432 0.049915496537345616 0.7382100535628049 -0.6155894091756104 0.740033296370251 0.7802108087506576 0.06494365608169339 -0.5807979584910954 -0.21719216350310777 -0.5505823141547666 0.33637346387513944 -0.593646495029307 -0.3099365302009631 0.539215562713554 -0.2550439301921599 -0.5841216062151235 -0.44646553412567824 0.38391773220219094 -0.4515632576246842 0.6905069179192547 0.24388004988740164 -0.8717052243791938 -0.7118741974651333 0.503732945998085 -0.19601984312190424 -0.3002894612631659 0.8802780794880474 -0.8667695542893941 0.4308284982340369 0.047627653969915196 -0.9534187013260491 -0.05805121347844433 -0.48477128569687356 -0.44489991452960265 0.4959389452366225 0.9967125690063539 0.6101799028859345 0.26349763050138364 -0.1695889885077475 -0.40383941508932897 -0.4752656224024794 0.1683712375332329 0.6035644579610102 0.7689426506329136 -0.888475659713132 -0.5345968911504488 -0.6717647021818844 -0.050046736394808944 0.1498899108071099 0.20221816032771422 0.03423210475076299 0.573693889754046 0.18767317936702632 -0.04934495494312441 -0.9590236170487185 -0.25492336415220596 0.880078580219924 0.9661232485625377 -0.6345983555282189 0.78680515309107 -0.303173331504933 0.422118477934049 0.7016569487706146 +-0.5123789261352849 0.6448823654777369 0.807026996243122 -0.09555543849440862 -0.11345029514317795 0.6568311286851298 0.13523000928237994 -0.6597037932566951 -0.4153884392130913 -0.2642126557747351 -0.6955902678558428 0.7438311050582949 -0.1679939607969383 -0.20863683811546885 -0.6701398171685686 0.17276116629582727 -0.11731036667075512 -0.8814102052142181 0.7367694289620497 0.6339779393280767 -0.1382484765494585 0.8681789379367517 -0.06174814709649912 0.4664234460895389 0.7941436860262048 -0.34917951108802336 0.5517736820746635 -0.08579575635183789 0.46127395703398055 -0.19591952963603587 0.6043223260441304 -0.7443634795362788 0.7088489708559527 -0.8435776270294295 0.8167858841374449 -0.8892193576980727 -0.3870146711912166 -0.27431896106295217 0.688565120946868 -0.9209595141922511 0.0395657597360084 -0.018439982566115454 0.06027902462058066 0.8509157382005503 -0.8491940633185211 0.3408920548736645 -0.7494314793853891 0.33092194195542235 -0.722710499861368 0.24165556959312728 0.8724849555759453 0.21081491799784202 0.5077005283994334 -0.40838304211866827 0.7498172216569208 -0.39498642153329344 0.39146255664805074 0.02977656485986846 -0.9073843519516469 0.5083183936733637 -0.10916806884498631 -0.5433965317167719 -0.34480454412992256 0.9943620157949324 0.9123814943367139 -0.02344742513916609 -0.6561185053740017 0.4210413352445792 -0.10576409512502649 0.06271334338177748 0.35192172377558206 0.4080851811905284 -0.4232166252506866 -0.40330927660792026 -0.8834249230792142 0.4697000990477098 -0.7129190784538877 -0.8456480690938839 -0.2643401543259194 -0.6060976291543125 -0.0881156390109894 -0.40644892590746906 -0.5853490358807376 0.6945422650556534 0.4281245044908073 -0.0870776014523289 -0.8122947015301614 0.10129706114688797 -0.9455963353142853 -0.5063841691740529 -0.13668152875237105 -0.4637373439596182 0.40575332157276023 -0.06900212404089268 0.7269643946040851 0.7993951012818208 -0.11976566656466603 -0.5429038114927263 -0.9506739957568291 -0.5271634983959748 -0.7447279630794177 -0.37220556664500926 0.7592870957364772 0.954628108284894 -0.8842151877629258 0.28540655423117434 0.8399691954386286 0.6149838930824596 -0.06215196651584609 -0.6303026115565076 -0.3055670376021311 -0.3877798164086472 0.5576993914162196 -0.009663912995024004 -0.5362581487686702 0.01831621310306586 -0.5923684197004351 0.3479062649364004 0.02811462568890133 -0.2622448979166505 -0.738659178826474 -0.41427512788531096 -0.6921618165124939 -0.8806105985175248 0.3244949638608088 0.05004904924460396 0.06924562772566256 0.2579727430942542 -0.5075081485050654 0.36493257978145666 -0.6854327846474284 0.2947611224418454 0.12658847258781525 -0.15602632390226612 -0.026396454108958967 -0.9891722243683065 -0.961831353327574 0.2383880354154322 0.18057824822524315 0.3653316738736736 -0.5727913863985568 0.9851287981700225 0.09390737607059729 0.9474859132556541 0.5034707710207649 -0.696079041555838 0.5459691793624919 0.224263108752899 -0.8540066973226708 0.249925771039619 -0.6807457635140464 -0.11845826782586144 0.3543665329750305 0.6408199484986195 -0.25338625308160356 -0.8602349428961631 0.06616912975014944 -0.4559629355331516 -0.11486782445022459 0.7020487003145628 -0.15696742850345058 -0.09415395799482695 0.3670399915892999 -0.36056453818307976 0.9315241603267024 -0.9620488332999373 0.8739789300582972 0.04807497484226997 0.6901613359448833 0.07513937821319638 0.3853842684814188 0.2568985025474526 -0.9102641468976016 -0.7087018487351431 0.15950852228569223 -0.905128738204267 0.6181998625426663 0.10321486389143852 -0.4000671592312073 0.6772320895387349 -0.5317577217055227 0.18358903891231226 -0.026606812002961444 -0.45314881783577543 -0.13569287630174864 0.7469196984392903 -0.27778690231349956 0.6677304361861192 -0.44543735948964835 -0.6730425844243348 -0.5969057562974727 0.11809284241492213 0.9432314421538999 0.03393823677025809 0.6647683198153107 -0.8022764788335739 0.9321885798019935 -0.24753393257376777 -0.4292634574471723 0.6836383113443723 +0.34842488309308006 -0.08546793390235208 0.49422732203264785 0.5696733526781725 -0.9667829214601296 -0.04589831322919169 -0.8000988806183598 -0.8457513701442472 -0.35161669834585507 0.2035097695153414 0.7207465145399437 0.51907205585134 -0.4334372719817121 -0.7864847119222993 -0.8151551268286958 -0.9752011729244328 -0.7714662236187728 0.26904587564999316 0.187390007567112 -0.42795343729512303 -0.7720540645410496 -0.9584942702687431 -0.3598943267036441 -0.9410166281140124 0.01265033905729318 0.3091117919682944 -0.32875661246675447 -0.8820806578129354 0.2856627273394565 -0.9473213319839755 -0.13758016266075868 -0.05251450690371828 0.1760328738857866 0.8956704825252886 0.984437817656262 0.8819559414909648 0.968450620326613 -0.966976769626021 0.5468848652814229 -0.21102500337806096 -0.881161567561368 0.23736463046549772 0.6275812253863398 0.5801311322554505 0.45335827651252747 -0.4702518534376867 0.9859151853045192 -0.3852254129641739 0.2642229253201065 0.9553176563159784 0.40825197044456707 0.031934657569234304 -0.5642258192414298 -0.5202576845062961 -0.9952931780695204 0.6405112061438114 0.8328326841786153 -0.8238922687510659 0.2932293401750723 0.5784196047976451 -0.23957251428488058 -0.23244440424342683 0.0815154405926386 -0.7838811201154681 0.9525650771621585 0.7412059033723295 0.1274577815353195 0.6554068873499359 0.5361104822250682 -0.968303738582613 0.41374317570104635 -0.5152030791369109 -0.5598441091725475 -0.532497028298877 -0.21312732361917397 0.13519322690225444 -0.22267104246440494 -0.5805141896547723 -0.4247194500699696 0.8246413340641969 -0.9860402561935968 0.7597629740699108 0.462007016346037 0.23130565818875026 -0.8421760107695762 -0.5929862630297504 -0.013304140263221242 0.4722710110055408 0.7542197116254845 0.512286434118995 -0.053706010174006336 0.46732520749744033 -0.4986573259042173 0.7911752675718879 -0.3359989258183935 0.48291382906140123 -0.7997966828678182 0.6005898749951324 0.2537011556550677 0.13299552553498284 -0.2584154635303837 0.6991402528715964 -0.9919444595424607 0.18350413024725376 -0.6860819139620464 -0.6448249718254413 0.6524287308323897 -0.8196109951798596 0.1596195621130625 0.14076299969803574 -0.3794685513217737 -0.45936599159251834 -0.7389924384908584 0.6233449713856087 -0.8540199257927663 0.750653758965983 -0.7531931525110946 0.16468626782180174 0.6787589757250607 -0.6515247099624959 -0.8291526274425194 0.3710958285948083 0.5686229705749333 0.05438649962500586 0.5397469030432767 -0.9986320976661525 -0.44877232837962633 0.19947334438537023 0.4860395708332268 0.9064845775100216 -0.6323231912742937 -0.15714818830102906 0.5920896573626786 -0.006447832508268636 0.633483740516245 -0.4620703161751827 -0.5282011606911248 0.3249416203627835 0.3821544892212798 -0.10264278707697483 -0.9045462774688553 -0.14494562463830252 0.12122758535985678 0.07083852073647279 0.7358077861737924 -0.7462885320617165 0.5066441099646648 0.8182553555195728 0.7197407174243156 -0.9250241052797099 -0.5563883631929287 -0.5395377173459428 -0.4441772274864475 0.915964526477778 -0.6828913302240605 -0.7934842954201078 -0.5654824098568874 0.828772969701645 -0.3162090017358419 0.7121427348659592 0.8469626954462326 -0.09344817956562967 0.7033575425911227 0.0414259686705194 0.693773147800071 0.8269943231954937 0.6544060048692328 -0.6572821796391397 0.3009692487493698 0.568758216072861 -0.8057503477438481 -0.4518832772920556 0.07279951892973657 -0.13677606907835593 -0.9129097357126417 -0.21917451898861984 0.9720279060016606 -0.9297132119682736 0.4798245144607234 -0.9667717413638608 0.05224666657897137 -0.9513310782663951 -0.3950127150665397 -0.0627165178598621 0.20712804913917116 0.7607328829809805 0.2669117305365014 -0.13234427987714792 0.6481856890664928 0.0876595529896429 0.7815651018795533 0.9947764524863854 -0.9073731571372516 -0.32162703078338795 0.6522641009952725 0.9406039908717796 -0.0921031480483483 0.78509772099008 0.6615836838456608 0.8021091851195299 +0.12316016831392784 -0.8826676728270615 -0.7252422541592873 -0.1353854217067072 0.5465466285824163 0.1947740963343323 -0.6345524901594046 -0.9175826602181743 0.5695986882952273 0.549464530998441 0.15174620354543578 -0.4668687431693799 -0.27180863871094596 0.9248264246460385 -0.27483737377584316 0.25636840165273544 -0.2648896751772618 0.9448221806848311 -0.2752937304576466 0.1892380085291876 -0.004555140722995343 0.5156877024824789 -0.018562543742524973 -0.12136743125230409 0.7056219400944981 0.5541930386529537 -0.009959142676341681 0.5969351148280719 0.8675121251886633 -0.06398489611208791 0.13362982840965354 -0.736537712389957 -0.4836358163437411 -0.14605636317310045 -0.024567405608346693 -0.31101770655307415 -0.8368150989485452 -0.3720766071812738 -0.5133454874633816 0.3031148850030807 0.09650929282128695 -0.17920353147673107 0.3379769365328993 0.16767528599933312 0.7364310227944186 -0.6665019370390046 0.5577884196258034 -0.4917581518125962 -0.9194676551943284 -0.408837205744905 0.8376135398047366 0.45758176976820053 0.9260803712116201 -0.715643503969855 0.32607052525905056 0.7756705300092639 0.8072647025764037 0.2655177856256441 -0.40151560144721876 0.1369516897921772 0.5635974047237473 0.8284484652083435 0.598823637349641 0.7029820006397898 0.0311706659429396 -0.8040706615529944 0.00048173546008789536 -0.6044280921169072 -0.9106141610633478 -0.06078991240991627 -0.7878057257120983 -0.8010550059700297 -0.03472124680290789 -0.05834395382937574 0.3682491978533937 0.4625971576716943 -0.6521330157949445 0.8771227613659884 -0.7576257474738854 0.33548769429647307 -0.6102754029190676 0.38868997671541394 0.29583761278014675 -0.9227690612792456 -0.8248612585104143 -0.6405584015713623 0.843422197136702 -0.8960614706736665 -0.1711790686892778 0.20798202589115244 0.6555310181466478 -0.3211617074372479 -0.2120202341963362 -0.8820620936016408 0.5115634551216539 0.2459936401596179 -0.09288338541412555 0.28921376241532837 0.03331178682035718 -0.743500913120825 -0.05360832282372341 -0.02346198439760716 0.7070533280816154 -0.9801622275241695 -0.8046559569753204 -0.4279632780412903 -0.10695516536772942 0.2944742623469925 -0.631335637284576 -0.21279403427326282 -0.049295453331868355 -0.2570879030814375 -0.7488025432010121 -0.013846586519780324 -0.8368639759014871 0.11336906877165576 0.40842988911231015 0.09281022353202184 -0.6201247836672434 0.8873133377974909 0.08943837017899292 -0.10926175459511289 0.7322163722793864 0.21777819595017678 -0.3902486582736262 -0.4903228556265746 0.08808304554457691 0.24355967870357143 0.25906449840673873 0.4490263017221443 0.22006364840498538 -0.11307462245062427 0.589805185159344 -0.28468416824664655 0.7682487869797088 0.48387058935514116 0.7160540295750359 -0.013994579590999034 0.7863308151947652 -0.3467545522011295 -0.05008484959393833 -0.0525492292357177 -0.11211920290132782 -0.910715288684675 -0.936552967822393 0.33601895496064915 -0.1274315308853473 -0.8521334916349432 0.9153481139865165 -0.30508142730341925 -0.12534565647108686 0.6816656903632652 0.16610869389094085 0.8383097894475287 0.19635144772750213 -0.19190055145209306 -0.7197348755338551 -0.5188319682106235 0.3166998738832887 -0.12668900806041727 0.5694469594103866 -0.6444175152877987 -0.5279307821970289 -0.6622717627162296 0.21862725677177353 -0.7207215459075673 0.3476779594099375 0.050396896126673196 0.9824757690469703 -0.4025435569580933 -0.5096947698477308 -0.44483674437835474 -0.6581067743999247 -0.45260364715090673 -0.051953218865797623 -0.031418177519568546 0.7001796097141899 0.7372274320212799 -0.7785281533803583 0.8781100800967707 0.935159916363391 0.7686880860542091 -0.20408322151546288 -0.3438709297156044 0.7326756586262051 0.3000587213660173 -0.7502138617214327 -0.7597242133505049 0.3664265276088161 0.34416605111296517 -0.6634516946886186 -0.362301733308936 0.5091372322340544 0.21351617952738966 0.4224313059120217 0.7973857930064236 0.7395047714572516 -0.18786889421647368 -0.6059107014354699 -0.46929391908016993 +-0.5107639518974607 0.07844198470493025 -0.45632267864316534 -0.40944182950872987 0.2668413516420851 0.8153728515144203 0.777338504983633 0.35697504566574567 0.017464195602627575 -0.7628187589106492 -0.02895859846164961 0.7094591002526822 -0.21129161210746017 0.7946082013189841 0.988436045807064 0.7915516879291051 -0.519149680409265 -0.5612404521715249 0.743371851123229 -0.6115442156700612 0.5794889850289018 0.3493077420759323 0.9022326310918902 -0.0915310490727057 -0.5938565529888318 0.7664680766447778 0.1870336067909686 0.5374876330276424 0.28669777397534046 -0.8141076427982963 0.7998410203658655 0.7518789562352608 -0.08891366431356551 -0.599608181269162 0.6234651141001766 0.30111305574145564 -0.5776400802766168 0.036623633535255884 0.05749890681261616 0.46485497062193093 -0.1450056615638502 -0.8037962258568836 -0.8636367646521717 -0.808375947045942 0.8250863780373436 -0.30274673387234663 0.14743411490191183 -0.6072282398265323 -0.8782380576926576 -0.4624627083679802 -0.4802050367326609 -0.560501613878466 0.9711404296866699 0.5206931455057502 0.3791573546612488 -0.43052138900755144 -0.6308618849485832 -0.4339987618204695 -0.8730551298985265 -0.46227349903438886 -0.8324635751618492 0.3134057234619385 0.805032293065653 -0.20857311651089927 -0.4604963577223453 -0.7142120048319403 0.18408423742866287 0.4998796076495422 -0.9480811142639018 0.4960154480961243 -0.5680927096031256 0.8030406802664745 0.21160185836365675 0.7556656760783913 0.8050694391213837 -0.1560827208568767 0.13470481658455502 -0.9329581574407628 0.9213500304137643 -0.31644466781714664 0.7252293745210343 0.8591253448924632 0.9735138395565948 -0.7496573239408861 0.7540754646202981 -0.14875325745085122 0.4147867210800005 0.7861490729944682 -0.015967699317759765 0.9822246818212195 0.24049148564432854 -0.3049239884388355 0.6731625011953024 -0.9652626630398564 0.4671149684103917 0.4665400047147179 0.9959071350355071 0.46680208836186665 0.4543219088625621 -0.013082146445981602 -0.4542225916036904 0.21585225746845338 -0.5095334860023397 -0.06059800294985984 -0.006191039575875967 0.2864296316034671 -0.5268294243427771 -0.2838045981178945 0.6489908984738935 -0.0724866496714085 -0.6627826187280081 -0.16699696078672943 0.5786800856190035 -0.029253117336858203 0.6026684731845775 0.4630897076228073 -0.17184506340232275 -0.7621068441145245 -0.8507916754203173 0.5857245230076034 0.8844189628663286 0.7937281577024329 -0.23871162979479532 0.10420746241139267 -0.7458148368331106 -0.2977383408261429 0.2310290797693355 -0.40283825891932157 -0.8487021180822634 0.5491173296500795 0.8116394844985988 0.9969842759683585 0.6374157190969658 -0.032301756144481164 -0.8759618847342228 -0.7709494829476045 -0.8363062937320969 0.3213950007648343 0.7571430798318144 0.48552785461041625 -0.044644407680795695 -0.7775980455855485 0.2739585858175153 0.011567297565713286 -0.37982139178389573 0.5807032907436693 -0.8419991072160624 0.032742344000677104 0.2038122240832232 -0.24090191763830782 0.43475902242358844 0.5287587971987191 0.7602432755147714 -0.32775845996799524 -0.5566593406327651 0.5779526621409328 -0.1756409438791715 0.454789267613529 -0.13198885700920693 -0.3803422038217159 0.18316871152071812 -0.6963315200862208 -0.8988153156440242 0.105209414634301 0.5415398579395032 -0.9321113506979122 -0.5256030932370042 -0.9979052863134039 0.7333404873051388 -0.8022056821371857 -0.8759205892371502 0.10820961124820272 0.12847956251512405 -0.17751193687796163 0.12023019123721546 -0.927690618289277 0.16808925794873364 0.4300498027550608 -0.25130405045293625 -0.5827489550809861 0.5172094861733378 0.45859759012249834 0.6595407368867139 -0.3416370990951241 -0.6775802705513516 0.4287280638143738 -0.8863386889841849 0.5111372351268468 -0.5300264530914967 0.5560994700170918 0.0767085792454889 -0.9125664092310102 0.7153274137140877 -0.17235429607747066 -0.21631595876564247 -0.1344019578307014 -0.7700589390993811 -0.4060296226959874 -0.6902942666046161 -0.2859959043454652 +-0.4760487481020419 -0.561862049170897 -0.009962643546926442 0.6296155312609084 0.9480744003861636 0.6904999178589513 -0.6633351243634265 0.8977170579675253 -0.594582152497138 0.7419195315219926 0.9106484925786504 0.34588615180142024 -0.9580610366823257 0.9639194477505897 -0.45421664583445676 -0.45686795086751597 0.04684266535421333 0.955746478517522 -0.6360515192514167 -0.40024709430861716 0.11337567664066661 0.5093843293145401 0.06233757192518885 -0.3687674170310715 -0.7504516764931175 -0.8463088865616386 -0.65168353592465 0.5729518987939604 -0.6023217983206486 -0.8768388840610586 -0.7457071692448538 -0.8629790464768354 -0.11419710250416304 0.16970877970501963 0.6342661320362846 -0.8527793363792628 0.26002733578194004 -0.6305786029925229 -0.7055663812757935 -0.6649919802587141 -0.1583073136646973 -0.6821303146869206 0.9680457073217381 -0.244275171696841 0.8125149968833385 0.7954548589840937 0.5706024155382472 -0.7897910153959629 0.9768726294042924 0.5989560441156005 0.932125987096706 -0.01120178004822181 0.7346252241285027 0.3668902842574424 0.8186160375360945 0.2917895790625431 -0.7963932360021266 0.1806170350576788 0.9520408946332628 -0.591546953738104 -0.4037081087517791 -0.4116336922332444 -0.14808243435871637 0.7942996156866748 0.16687498629160769 0.49419948103806277 -0.16084696438339807 0.06677935431327908 0.9162131346387057 0.6604224491122761 0.45648607822638776 -0.43230133587569264 0.031069636504657883 0.08180128256587382 -0.9180056509413508 -0.13960616933392012 -0.8129312909555575 -0.9329309098877392 -0.22773166000569578 0.4200825637905288 0.3569929591651746 0.6220734116524047 0.9345546416870543 0.6747866809012817 0.9189010329838396 0.5213547509220495 0.06025331994574912 0.31696451895865474 -0.8745126228959488 -0.07301090197374593 0.41997803471683515 -0.4585220405990833 -0.940482105784948 0.08966660919130187 -0.4323162873886599 0.18240306908558335 -0.6442999154747657 -0.06780392168508476 0.19612984901823283 -0.4031738250809118 0.4614675274712454 -0.29233387937720545 -0.9986547079718857 -0.7916813062658776 -0.966837844735966 -0.33028504407966897 0.607814631749614 0.2786534580579414 0.7538153492476141 0.9613348478706865 0.8664880282507315 -0.38646939093658483 -0.24959231538652737 -0.46771658578797726 -0.5409180183739002 0.07117022633297387 0.8127228084914881 0.023967443308852143 0.3635557039414756 0.914327864808705 0.12678287466474258 0.7144435823385635 -0.25633669725543307 0.37838400111351334 -0.7831776790045686 0.47102548447134507 -0.07697833899762152 -0.07001450768160988 0.668001760392485 -0.3807254122147179 0.9849185886388925 -0.5352895429139044 0.5088142157309756 -0.2427222709105612 0.6637328009569725 -0.19591581554843063 -0.7003709778907345 0.4176182864160787 0.5900312855969279 0.23608125300937455 -0.19538116872111044 -0.46398281670595787 0.8709640198678317 0.5613490847799207 0.09618775174587402 -0.950272883500104 -0.05894629247533034 0.22089792607803416 -0.7741943287671498 0.2935832776791487 -0.9403136105247911 0.5803954978365904 -0.9813447939208964 -0.9584844913650015 -0.9470707842035544 -0.5397694249261531 -0.8587433836759291 -0.18196012132603978 -0.7349958441005646 0.11880400083271825 -0.1307003984415629 0.7589830234679591 0.7367425286598714 0.4032864412273591 0.41255131115367605 -0.5560769259020844 0.606920600490902 -0.8421049338858655 0.16261197545961892 -0.875905375649789 0.4319957430184864 0.5366717883479077 -0.4587561208444677 0.22242385242944596 -0.963421056015928 -0.8105855571925116 0.9847571282049947 -0.9116865023782785 0.41325471949098835 0.9639341222971003 0.49840484625440395 -0.9046415213323242 -0.40155811463356694 0.8434902329883551 -0.4893305472931342 0.8445946124446639 -0.6496301794898571 -0.46036317555730233 -0.9449802777109342 0.1848868252661513 -0.9658448741224996 -0.8779887329389464 0.010832699780270572 -0.4871484744590362 -0.21935185776835642 0.8008975668903859 0.0328879762261427 -0.8684272408144171 0.3863154602588883 -0.5606016432873433 +-0.15880401870403382 -0.40655820127318854 -0.1075113435027315 -0.0942887121651621 0.34231256515267194 -0.26567825377566434 -0.270253962139251 0.43877297853249564 -0.5405925913848237 0.8960514990142219 -0.5791174751492374 0.9815462854506412 -0.5548492272548575 0.39887249358701427 0.9877188192063702 0.14699529064309225 -0.35210286549563863 0.8117981646807335 -0.8265403733091212 -0.8965896553458497 0.49635863331004915 -0.9607497793243138 0.31817568791429607 0.3904710659123618 0.15975839252784407 0.42569297328765887 0.41845502873222484 0.9343772962800416 0.2963811419674407 -0.05828977849188055 -0.65306860190399 -0.4383920079112458 -0.23358602004637996 0.5073064317605227 -0.6108634816727379 0.16126407377521312 0.8014402097199991 -0.5253137026714918 -0.6303131691576391 0.18043236677051588 0.4597507289350269 -0.6841208450648675 0.7552881052916793 0.10740145798255596 0.7541163947923379 -0.4765953557401177 -0.03519441632100184 0.09417594203835322 0.7564533091964709 -0.5914163519394469 0.43474866646347876 -0.9819298018041449 0.3246178634594179 0.993880182913532 -0.33042086480416333 0.5063306019552736 -0.06809501002061302 0.05755496790366954 0.13999936542466562 0.6953050190109178 -0.12249704725229438 -0.5515857764351431 -0.9441925876933337 0.8801293703450157 0.30962153831542794 -0.2588963898627896 0.1323297461175088 0.3100034647974934 0.6138112974657981 -0.6308538599109463 -0.3974219886805923 0.2878726214873726 0.5542505230490351 -0.5875722027573358 -0.07873575792334231 0.8938325425408302 0.3069658822132646 -0.7325161884673452 -0.4825293185609927 0.7039632524792343 -0.38859622272146366 -0.5688135081722208 -0.5094284611896023 -0.7041487167004123 -0.7549681846313863 0.9498733592933051 0.8070768564829451 0.7136151316510548 0.8283901248291008 -0.9352031060881754 0.8577961453106548 -0.3932046721967819 -0.8531844843339091 -0.8564721393497303 0.9476974988395617 -0.47591356083212366 0.9116879430774183 0.4819339165939853 -0.5768431011721631 -0.04020617659379644 -0.7616300626542771 0.7332909058952333 -0.4909701316744155 0.4063793492871961 -0.33604141494180784 -0.7301819448945142 0.9686810804949735 -0.923335307239946 0.6339126641955339 0.9557843177880265 0.7063917759868354 -0.9289589288518842 0.797631479257866 0.6718721829518677 0.9780895655582853 -0.5507095442466476 0.17978775948059633 0.9131058755422978 0.04343157620866589 0.4193765211119338 -0.6195784689335677 -0.9426363628672676 0.4180016805589841 -0.462545181502827 -0.11590004321793623 0.6535607540711663 0.9541920375859789 -0.11867645689480555 -0.35930488366092694 -0.09971483091351296 0.963585380885408 -0.5510668480983756 0.256150432338752 0.3259489758611065 -0.00042857385095596 -0.004131297059174477 0.5434211976464334 -0.5725152771166306 -0.7663089035683897 0.11250294027165575 0.9536264069018192 0.12486686415938442 -0.9662201219617281 0.6845522042420675 0.2590927016270199 0.005462561065685323 -0.9917113527513621 0.07439902282451527 0.08156243038841948 0.30669241228866095 -0.34723094549410205 0.7949730007727271 -0.8325492799263685 -0.6961131744289861 0.9642886041126038 -0.6219685260969534 0.24158520949603401 0.8981000356389126 -0.11533386776496113 -0.8524624988149938 0.4030798215518834 0.2559249224437996 0.7843214934933889 0.8096741703788564 0.3182695089320722 0.7503427753796599 -0.3219790008807595 -0.4798826865174557 0.9510934776536262 0.5694180054424343 -0.5703358179035556 0.40274492602890377 -0.5074500218161027 -0.8655390693151415 0.42284010997360255 0.5705972486698505 -0.41121282285095084 0.1250419884371483 0.018753340738840718 -0.9022066686315229 -0.5558216082517009 0.4818997241919689 -0.07496185842372216 0.5603470998857671 -0.40307090296484516 -0.5057743058673212 0.7663890977174967 0.13153590280861227 0.023010645810733532 0.9986398232531999 0.4502472780977096 0.39418117456889146 0.32589016794015246 -0.2992794481334824 -0.711226436716484 0.0866152465047818 0.13757142243964582 0.7937654726540382 -0.2010168409590749 0.7126925140581895 +0.5131144607926315 0.3715883239104947 -0.3924482626172352 -0.6280595557655211 -0.052152320589279544 -0.403075805154276 0.5141793840897217 -0.1539279287036246 0.7276161568639465 -0.9859147760661711 -0.47261625674646424 -0.9702271920192997 0.4427591280676524 0.3853251637836683 0.8226814461269794 0.7146534756063665 0.6207283322908066 -0.2542071414626339 -0.830163429294092 -0.06177278938238806 -0.45727667565075936 0.08019368388340409 -0.8984919839533867 0.6576512900981148 -0.8863316398916632 -0.2595784228346283 0.5557025342080764 -0.82878956143981 0.6107210504649867 0.7301134380027798 0.4798927328135143 -0.031363906094070026 -0.22630339348189166 0.5267161945624363 0.3882842920629037 0.5293408029772242 0.592358892583136 0.3621004578459588 -0.799855724544331 0.4078107822729118 0.5134304142659467 0.8598143230455326 0.6543200078260574 -0.5004045841523959 -0.07339748724082007 -0.3386158613340451 0.7918404366629073 -0.40924881716620254 0.030203935917038738 0.3105656407373476 0.056537944875794555 0.5117449764733293 -0.6796650849209778 -0.6212742577577621 -0.2075659328158297 0.9896886528637858 -0.3749544100532549 0.12254134901155389 0.547793475437026 -0.49206094978492443 -0.5662963289743921 0.26507910098354737 0.7022644110115146 0.4793499015242877 -0.6133945387186082 0.728082439041911 -0.8777901730397477 -0.8537555171278084 -0.8489759749715666 0.7495962993170908 0.2110149428574124 0.6742859682754447 -0.7006011689422729 0.9790465833003479 -0.9016612686895888 0.7725045715657402 0.09367479578288562 0.661774988693921 0.5891290059976257 -0.5346336960081093 -0.511185651513892 0.5840547731338095 -0.8534149957687267 0.31507725493769567 -0.05482784378760441 -0.16261166814978378 0.012285149071238566 0.30759111817563634 0.8446632135139442 -0.23975419381819862 0.025240489070523786 -0.9849392239882799 0.6539318300109358 -0.9082745943226809 0.1384275807864861 -0.44328988650230405 0.968594766400563 -0.7488114413487612 -0.4537135867223001 0.050406893811641984 0.9007794803000793 0.6366399341006199 0.7787972587168754 0.10508591527274769 0.2079819003665868 -0.480218880841772 -0.2899519904278256 0.6951492719447243 0.23044749749298554 0.7439428432798063 0.39404121186587715 0.656920675896242 -0.6861893571827533 0.17409712109666686 0.9331020330669042 0.9739421232558088 0.5909646410963005 0.6816640297870131 0.5206446129249933 0.22018464499630985 -0.6642651337933418 -0.5392663895371488 -0.2561239403849431 -0.054646321798313746 -0.9958360346935748 -0.9710086149729029 0.6744888721631559 0.7981591678703903 0.5249429734981448 0.7236622802014161 0.46469627959392046 0.4111072263451814 0.27705084581740125 0.8970821483741178 0.7889763273634713 0.40067580994539886 -0.5707822149903012 -0.24449470702039022 0.6865084207341421 -0.6271336423444032 0.042806349076798256 0.8483288611712225 0.8588753219831071 -0.5446917787942052 0.01236742722974804 0.4668687231497477 -0.24007643865535377 0.9210213871880437 -0.7906322404143744 0.1159916310008402 0.6891583953970859 -0.8414365776622894 -0.5945118436803238 0.47414543718406144 0.9845235133192483 0.5777074422962125 0.9587124628075763 0.9347247399186607 -0.020925692947707075 -0.5355274995861927 -0.38043618170558635 -0.9572395194216323 -0.6105172426684904 0.060206583316086304 -0.8154398057983321 0.8435484631919297 0.7226630705116193 0.6021088257971474 0.9979912895219953 -0.8597373189824067 -0.4818591891673385 -0.9085038395876013 0.5547158767065767 -0.921635995184138 -0.21682608717396157 0.6938406490424114 0.7252927738669095 -0.012382900164211286 0.928982302124044 0.4776841854641929 -0.5380802701750533 -0.010938862354772594 -0.7097720819901745 0.2528233280457146 -0.919932823967238 -0.5066215833274379 -0.8938788299569738 -0.7102996187960784 -0.9104111329475582 0.37672270532640084 -0.27864951303352337 0.9241568260394804 0.9869962099288037 -0.5489479482626622 0.24331650942481886 -0.7069820206547375 -0.9477587878453606 -0.5950913106647457 -0.8590925706289838 -0.9816355719508585 +0.7511553791737802 0.37214057943715906 -0.43096441719837864 0.22940476765026596 -0.6343959076302719 -0.9338895241989891 0.20510927837438064 -0.9324017105611093 0.5274433595868953 0.19699113043972583 0.8469772504044397 0.1131315918375766 -0.6538433430602477 0.3350275010103392 0.5260678857268171 -0.8496452191347279 -0.6153329188265808 0.43171788633353225 -0.3600814318224499 0.6052291515964479 -0.3201859497456514 0.4501638404916415 -0.02858531165357414 -0.9814530860677118 0.0001643466724585707 -0.8458264885355018 0.24972126833419717 0.45421149974654695 -0.718435028629445 -0.7588742682727705 -0.4435211796803349 0.21311408357292194 0.944464469364467 -0.6140655140833466 0.2900779094629877 0.21724295102758573 -0.3283108320220718 0.8763639383227677 0.6149178454782427 0.9175079612747759 0.6400217888706661 0.149651245375928 -0.0913438635203534 0.7608062061918368 0.9290526520195579 0.605940602253425 0.059706614754384324 0.639313565801924 0.009501028106721154 -0.5852789968220129 0.5422972447092076 -0.49271524206315953 -0.17474343114914115 0.8037072817677937 0.4937028485703716 -0.28418389743571604 0.04120104026164695 0.7604536460640992 0.4330124840713767 -0.519522619104698 -0.39428710168895 0.2893988485845551 0.03378339269973529 -0.7397386408953239 0.49609783467399704 -0.7082293293282402 -0.2368167914687811 0.030664317207966363 0.8405832538772564 0.51993602272977 0.7647582175578127 -0.7495963069033482 0.7291682328763516 -0.9889970348311599 -0.5192550197790169 -0.9388943115909743 -0.7731018275253498 -0.09154303675329278 -0.0678196192706686 0.9387041561859573 -0.9224438748295312 -0.9769852648025503 0.1292072126832815 -0.9062745185230494 -0.9256078072983009 0.8900875985062242 -0.3536647097515617 -0.9596454009405093 0.6756792291029599 0.2854095676559689 0.6505445277614741 0.5199872722859427 0.17587789687682664 0.6554550022161678 -0.10255756888373924 0.16200907116950702 0.6859601097741754 0.41002641747728896 0.22492389730193962 -0.6294991214165309 -0.9831169861536164 0.14126786059685537 0.25674946540939025 0.5927864981073447 0.15312392866070246 0.8897420744533036 0.13616105850669968 0.19276928003610272 -0.2740764824255535 0.42820689035872217 0.99741944231552 -0.1438104102468143 0.8769716702519108 -0.5022027683423291 0.6105398218366695 -0.4833355248800666 0.45601959623828847 -0.6165673139573669 0.29016233725954854 0.011801801424280667 0.3646735999294586 0.9990247338226861 0.11865490154473513 0.464301611375467 -0.46276804565416074 0.4073511811297996 0.7564298706678292 0.8879723795832264 -0.05029716516742844 -0.9929919940955179 0.0036274928235666692 -0.7722755826566206 -0.5132763979462884 0.7540965297110409 0.7514010891476521 -0.5289250696488965 -0.44800365027865974 0.5465356866920137 0.5025530678854124 -0.9449463213047495 -0.09860323219447031 0.2870181316817979 -0.23997794035701436 0.3615311945704762 -0.19332815226958355 0.9242322831593124 -0.19138040755028318 -0.7983170905007271 0.7749334040352971 0.6924899670576492 -0.1330338245439795 -0.9527141286581702 0.6908826238117798 -0.9555671091333038 0.7289123485104336 0.06584755990875713 0.7734440835726106 -0.5049786185398624 -0.19897890112143113 0.8089728887647984 -0.13688513193384222 0.2925470905330083 0.584760222802005 0.4556616160569813 -0.39306790454682394 0.6477779650883064 0.9331038095644155 0.24147072422642668 0.38516396458072877 -0.3745709926959724 -0.5389224746045898 0.5447028661975326 0.4539667354270793 0.014004439181028783 0.7224290878944424 0.15788804914579146 -0.23509473335220998 -0.6998777919905299 0.808528736424001 0.5631334208162813 0.7674313065764709 -0.30203051899004607 -0.48800579323423166 -0.9235189848979899 0.2451578708687021 0.08584622343561343 -0.764336550624894 -0.043189173391653624 0.9478471632873415 0.5174214984253278 0.804312251101567 0.3045918461762076 -0.44616424568166346 0.9813408451443388 0.24997122777182446 0.7826963393177455 -0.7367966111849187 0.656224665781636 -0.770710589457825 -0.9042525959717924 +0.09799993605558033 -0.4016589421283274 0.32571576730050267 0.8400598417673764 0.403034576915859 0.17888795859950024 0.947901851383544 -0.4373536322790028 -0.9362753266725106 0.03414538620099106 0.17089604744489906 0.8899287591548892 -0.9709915654018015 -0.08484963248815558 0.7052622610358132 -0.19803407915726012 -0.3322053096474733 0.28401550484431537 0.1638240759233689 0.7302806592576516 0.4803542584625664 -0.7076824420338033 -0.7858026650428507 -0.1698507148912347 -0.8383495630484037 0.8656970461818796 0.8067990869214374 0.374036123743408 0.800295167995986 0.8569599478363252 -0.11134589808908268 -0.9299172740576631 0.6862594890781908 -0.6161362530177796 0.9755746194534287 0.3224834474837215 -0.5810574876969627 0.8746855981795594 -0.8435210465521368 -0.4709282941280939 -0.9937632227364905 0.2596599341294208 0.711128310558302 -0.47338931912532844 -0.09266980970114425 0.6764709702791329 -0.025255779167884018 0.5835537138590308 -0.8588398119493981 0.08143086267926458 0.596632459999183 -0.49248620038704427 0.6613356855542876 0.6194851800813139 -0.12036754163268504 -0.7693210413227178 -0.46358576474387014 0.6132133360730911 -0.6145651738224711 -0.7794739070092276 0.6551003704054383 0.38142337825174466 0.7966406421600924 -0.49202043719089317 0.4454117358478884 -0.5357636689670302 -0.9701974792624946 -0.9952703654182962 -0.49604649937232237 -0.7033874708567021 0.10412237102613653 -0.8301205860190213 0.6939382261549676 -0.8577968428155236 0.668489063838809 -0.7513383972683565 0.7124229710948946 -0.12462097224529511 -0.01086725761952767 -0.8251067023236489 -0.736702243495849 -0.7861680493358187 -0.3591926233669429 -0.6562069162609128 -0.023634767070509932 0.3463302507837571 -0.11989365932674567 0.9950137057742279 -0.06343883012071783 0.23942643606353498 0.053104022742013424 0.8064400052204503 0.26172184944618904 0.8729639174697126 -0.18157972120501786 0.6092174293205324 -0.6814824615758386 0.09493675367131926 0.3653981567170401 -0.11737328912255962 -0.9543076543683426 0.40982752065843875 0.6888474845774306 0.35100146192640813 0.023039334604394446 -0.7774366215823918 -0.2922182062259586 0.7100656762338584 -0.0421017446214238 0.9313531449609826 0.43002777198794084 0.3700606679595604 -0.7260780359419083 -0.9742810355732079 0.34919487207880073 0.13349916858210142 -0.36025614224199876 -0.1560248416611989 0.7104624712846723 -0.0063515653452761445 0.9002670472174956 -0.8492355932170115 -0.8919003274249713 -0.33252515220601375 0.3410155786929894 -0.732588588849032 0.22753782790992316 -0.934707287163981 0.961823852359641 0.4596939675812106 -0.8129031177407393 -0.6393991632672071 -0.614395166223848 -0.7360812051616465 0.8704018861402967 0.8938325026595706 -0.025528382318961373 -0.5895688074548326 0.9145727653276807 0.21968858283269177 0.6313658741103547 -0.9118546820663638 -0.4612498597793244 -0.515514394630751 -0.20242461147135904 -0.14352648403061297 0.2378506548792414 -0.8621841198256432 0.16583074789601837 0.23676080258965748 0.447964032390773 0.19990995331771888 0.047385830860948275 0.4307886675822641 -0.7483890227817884 0.4869017316354347 -0.6414158581767553 0.5431506885525994 0.2510007067767097 0.8383600167028651 -0.16595714203619694 0.6207130923790811 -0.9649665999724633 -0.6030195723169474 0.9922562525614265 -0.16655052067623055 0.7001729826678684 0.014366024589935522 -0.14510914366151284 0.09329777013803398 -0.6560452863115207 0.6962364426937266 0.7053166147190337 0.2679000513198506 -0.8654829762937581 0.9542391568707471 0.3395300936681158 0.5879409199568304 -0.2821677619698275 -0.8121669363906814 0.6289036793259548 0.9812721055458342 -0.597056355854445 0.5561952517428259 -0.09513698100581336 -0.8804884411182243 0.5572874455118402 0.6054882096554324 0.3473031954886596 -0.4968942665344853 0.9072452635787831 0.7520702810493098 0.6757915681115547 -0.3033047670050413 -0.2852044133414078 -0.48486259116270136 -0.6514810678891405 -0.2392521400981229 -0.2089939198926507 -0.19779975711714437 +0.041318557671313316 0.8573428053279613 -0.8411935481593211 -0.48761505730458965 -0.5007516921457322 -0.46261345040929225 0.9047479602102746 -0.3943684983142839 0.6134953609495128 0.15879556901694047 0.2710136790398927 -0.9405147893387691 0.17657687954411516 0.06498654678932958 -0.13940744101533498 -0.6888944072966037 -0.9425358166287008 -0.34039355654369574 0.5425890883050537 0.5710252712908626 0.6774389706565407 0.7348561621353578 0.4350379323841995 -0.9189118719979907 0.7873895002510278 0.3561302323885005 -0.3305882961714326 0.3783357348847276 -0.4336172245053833 -0.6940675734252555 -0.037265227170736104 -0.5734668230142337 0.3727335516340957 0.4849340478540769 -0.3969890694556437 0.21549511976777946 0.25728254677438556 -0.5689424428682133 -0.8531450352927352 0.6325751930444135 0.8554017060584733 0.46989053119528545 0.1223376433411405 0.5087129621625706 -0.9687626011638739 0.16984973419971494 0.008039126368585059 -0.9349388262754106 0.6799395466140064 0.49721986975703625 0.1474226772370033 -0.12253824783348644 0.39142300132929186 -0.4139461813959324 -0.7774544234477594 0.37722921176932056 -0.7639274025796958 -0.2979138515411208 0.5701248336707971 -0.03272294861458147 0.7848471762959326 0.1399675363569064 -0.20988872114068724 0.39721239990760404 0.46989271281269307 0.7522765363788027 -0.7369999281837574 -0.6481811976530731 -0.9137833107540865 -0.10823998204049134 0.9976804341557768 0.7088595516865634 0.46253771864622695 -0.7623346697884377 -0.24594418417700936 -0.8131586242622935 0.4161100477685411 -0.03858048447634754 0.6033717630365953 0.45465567892879144 -0.3431855746078776 0.847966201347937 0.4080209062797322 0.8380015897529269 0.8167523841974158 0.4502942081366714 0.3243590618080565 -0.6498449657656042 0.4954922363980334 -0.21402423443808716 0.23137900618138074 0.28405676499949584 -0.2733789812774037 -0.5426565942108579 0.9306373301021904 0.4623038746390189 -0.2522896902098446 0.27453370831447343 -0.3116218038325127 0.14093806739752712 -0.8135169391250372 -0.929526507938365 -0.42742242083743487 -0.9523128594640307 -0.5078764959135649 0.6158172847755667 -0.8886424158064756 0.8241978427610934 -0.46887229445949496 0.26100791736157847 0.47545644789494657 0.14444924878767096 0.9022107175312568 -0.9257869819712194 -0.49394178992092197 -0.4645264252010033 -0.1035663832523619 -0.0692185627182389 -0.5804133684132708 -0.7483953993595509 0.40502840069816104 0.14927633346751112 -0.10793988756823825 -0.05685095068674095 -0.7655620304658237 0.18500319718150937 0.2829755121286046 0.12149154260401174 0.273429198346262 -0.09281410313198224 0.5544260271527301 0.4760410127313781 0.5972041076504218 0.8519388426071517 0.1766054539904951 0.7091420368240922 0.7432243564654393 0.2436095338201949 0.48085465702773456 -0.38811015298751794 -0.4004448008178998 0.5567757342720154 0.838175524253546 -0.9370812865934881 0.5644339388690314 0.7104793642195864 0.6360441992848087 -0.7413532615203058 -0.3247901212575528 -0.395878867847439 -0.37134525790018946 0.5484137484810254 0.9088227837057201 -0.72277661892163 -0.6870539506679432 0.05346130014950212 -0.7607022064534783 0.1260509162737653 -0.5566942676820885 -0.6494273474024943 0.6444528194059289 -0.8127965392767009 -0.8864096471798426 0.8878221973753264 0.6509822021793621 -0.4240142309705297 0.9512241684407612 0.8944102785820773 -0.8107602015225943 0.4477981263378237 0.454809466006614 -0.00964768542549721 -0.7016498108171232 0.35504829208852295 0.4733566238091098 0.018844017347426467 -0.5608459273066828 0.43545559838736936 -0.23631276418006442 -0.9056061177941519 0.6815417728884006 -0.43467644016114404 -0.7081741551861709 -0.4866434621616982 0.9007477595898319 -0.4398710484523447 0.5115535535349993 0.4893868782118844 0.905823707177404 -0.7681293298848417 -0.3711735849818867 0.403612741669382 -0.6927883759623021 -0.08581877805523508 0.3489044506180463 -0.9088457167999486 -0.973298515050893 -0.15964108861985027 -0.6475359259954276 -0.6356998027667355 +0.2526204803808929 -0.18844900978612222 -0.5040249205784444 -0.5823955767059239 0.3396867172405358 -0.7302935793041039 -0.8267668929134333 0.5629659873686041 -0.13236334068543876 0.28507234580193774 -0.7085830459122036 0.4906640695233597 -0.3747562797126822 -0.373533028358489 -0.9995748576821919 -0.6578077174431576 0.8902727696332902 0.679912958187167 -0.370520895536546 0.45862994155782455 -0.9410828774299831 -0.2293406886453262 0.8342062401069099 0.03788930005419355 -0.896324828450138 -0.15419372978223178 0.9308733196859362 -0.48946869055199826 -0.5639876452543031 -0.22754474106657296 -0.11275212870443707 0.16278827675919771 0.8650812863114024 0.9983268345400005 0.8359647313880514 -0.9667480525469938 0.8719994867878513 -0.7101078017538198 -0.14217357479532744 -0.7319486198765206 0.9933733084536946 0.1860860901571635 -0.1629224309339108 0.07744177601064806 -0.5409285255703968 0.6099178945848862 -0.34535077107880796 0.4902834202709574 0.5058364523490027 0.7895334737570228 0.6892273132027213 -0.5230839762553208 0.4412914400535861 0.30704858545576563 0.7388392340006602 -0.12047929501482879 -0.6019662714378327 -0.9552327961045404 0.31251274161843456 -0.3611258268768067 0.12557850742982568 0.15002197269287576 0.004476767860214448 -0.4203168974701481 0.3908814192160168 0.4466069311234697 0.3337061589082415 -0.9717822521448869 -0.13174781344911057 0.06642193758489978 -0.44759487657060126 0.5465740076288588 -0.3109442472712354 -0.3542634014903292 0.2709877978274575 -0.7355813977891599 -0.5137895690491108 0.8628845291039353 -0.2141459890345998 0.5405725204599436 0.670093103639952 -0.15487014823691547 0.48968545602876223 0.0682985876035378 0.33343777517833084 -0.4212509750690683 -0.4111660897919276 0.30989990337370377 0.11758477474885498 0.3694414882398518 -0.7142932885039788 0.34724289910889605 -0.6991586632464202 0.7680791455611333 -0.459733896213 0.2780640540669259 -0.8985060666294145 0.5142720710836752 -0.2468092392180321 -0.013071358261688149 -0.34057538951312094 0.2335548546339028 -0.969766449569279 0.34835131496312455 0.9108776915955765 -0.7114927193185734 0.6321995937062852 -0.011234504968691938 -0.11797320646806342 0.8596213584357664 0.6492885186292101 -0.2577813998640188 0.05125886653273626 -0.8940583625906018 0.20769236359734355 -0.9562624519500875 0.04573176832074566 -0.001641713423209401 -0.7948396737435919 -0.2673455766338715 0.15647778059468753 -0.18988236897477306 0.44018202016712427 0.259814905652902 0.4879130695095133 0.5164147577575164 0.42679801749607593 0.8294812127758118 -0.442906958332985 0.9275511393167615 0.06218167381586204 -0.1970681298776389 0.2444562993844588 0.08753406357334614 0.903003711854016 -0.5012348974502969 0.9038086329860608 -0.5501494434234229 -0.6551755745754255 0.5993911635636726 0.970944707853147 0.05715064536793446 0.9036016793492603 -0.5616013583100259 0.9912457290402517 -0.22991668118786368 -0.15657043028148765 0.33504134946893216 -0.7369746362404808 -0.5301981720889222 -0.6155546972332311 0.5976273984105436 0.3710500397874077 -0.6964392259803656 0.136391762636088 0.08078783516348031 0.23025745968081957 -0.9675522855961642 -0.02183175729211695 0.32666087263803356 0.788840292251366 -0.08209657422525973 -0.12782365945490914 0.8906347030443749 -0.730181670359626 -0.4380779021039243 0.41073509502854333 -0.049715624989220775 -0.8757013722589524 0.3018549779001971 0.3486783837163443 -0.09586654763067814 -0.25986043805544345 0.42766095916135605 -0.6686089591779036 -0.9899853069560258 0.01866319422258722 -0.06959150219192711 0.10878358930768117 0.8689838051428624 0.8831970022141575 -0.6673817818572148 -0.09729087386534219 -0.7980196345603046 -0.6404872101393242 -0.7216501219697271 0.6552178741630359 -0.9904057002353612 0.2308716179259449 0.9328675897923684 0.9250060779188172 -0.6100045651693764 0.08389365438443463 -0.939378965178616 -0.20140043345480962 0.4570484440805118 -0.42318740729929427 -0.19124860487867612 -0.8654713536504202 0.23234296075241678 +-0.35869405114524966 0.8623511411763587 -0.7379388287123929 -0.08796121403467438 0.579582966732082 0.09459652653016382 -0.5306689780910392 0.1403985120898017 -0.8008266603605596 0.9680698835663162 0.0011194611687570521 -0.2256543390656396 0.3226880980376374 -0.4152956534448744 -0.7777799369461891 0.3500524608217699 -0.5682975072883603 -0.48355914905619013 0.8555024228505177 -0.9249099248843071 0.5588094429474646 -0.8014338574213664 -0.7090457972623705 0.13379034611921847 0.06803285062286801 0.3263238439509093 0.0030826938301853346 0.17699166580328796 0.7411406224981576 0.16466089049892285 0.12412450993101443 -0.22344423321819118 -0.8259412431491553 -0.3838067586457612 -0.6682228024401542 -0.5152723491652851 0.5459574090578561 -0.006927666550802458 0.4724941690519979 -0.2333225323057564 0.012863731281492985 0.06908421545377963 -0.6541871860460133 -0.7253243319997249 0.8100773696582544 -0.32037543764274456 0.8983294993718063 -0.11282396973468045 0.3185455969335862 -0.6429171912449474 -0.3880788402004849 0.557777524957376 -0.12356213891012469 -0.4215118717001727 0.12781215093250164 0.6968760243005809 -0.32999176324987456 0.2542425735724647 -0.6942353928558203 0.7337521934273963 -0.9585190945998299 0.9484117187205574 -0.9106021669164404 -0.33980536294504105 -0.915488066139047 -0.5006770685869517 0.866791767758303 0.22227671617388234 -0.7491621653943756 0.8997477448952282 0.46323205440479054 0.3757738396506676 0.15629863853093973 0.9449001140861144 -0.6314809441436839 -0.3013948097213548 0.5479698831796971 -0.4855082940974855 0.45410315418354763 0.5324080392318615 -0.1536935784991964 -0.11527991993338982 -0.347140021315004 -0.8836708852791537 -0.3010262142495299 -0.5117399198748724 0.1660474165950554 -0.4588292082402414 0.8318909576421145 -0.046740160060420255 0.274562433626206 0.4726350588335446 -0.25227131054226004 0.04009508412712104 -0.5744213806555944 0.6195109562401551 0.9593328623843773 -0.7279444729042659 -0.39452895672151356 0.5119466792621714 0.18531136979211182 -0.8617205293295287 0.6266142261686984 0.09505423118524092 0.2096466273607136 0.08213145988113357 -0.07891835952418669 -0.03207040240205594 0.03913553287718097 -0.4744972224392543 0.6045906902624412 0.2135108555058043 -0.2787926570121684 0.3090246611373011 0.8351142413112957 0.42199296580512247 0.9567588952309272 -0.7447209076286117 -0.7049036857831315 0.30723644047466325 -0.6294665326650515 -0.0999942185470497 0.03812181767945422 -0.6445366816166485 0.4348193883425939 0.36790413077047934 0.41264932135550336 -0.17103133683444738 0.947426657903373 -0.48933983774937495 -0.46934679157732306 -0.030562687812385914 0.8915276205623324 -0.01445512935856419 0.2862136004793687 0.6915366779194545 0.5018736374237751 0.8955958147242298 0.5745708188326495 -0.1360681399032786 -0.6381557213409419 0.418072109153625 -0.44292327670274956 -0.9278768727519722 0.05758254616858394 -0.6146856046963955 0.5677742058884336 0.7808601909549568 -0.39261279331651244 0.24802521140017952 -0.07968704304278407 0.03213884227422614 -0.259235815331162 -0.03740623918238217 -0.0690447456336083 -0.03000321914324 -0.8455548647969251 0.3589863632482402 -0.28794140077324726 -0.44806007481731647 -0.8065067919676345 0.8183373989595804 -0.1574508633388989 -0.0019192638220315583 -0.6547337079146913 0.002697558907961639 0.5971281744056702 0.046059108985131436 -0.29422276048381635 0.37078160483973077 -0.06437457347318531 0.9295381624804575 0.3990161020389775 0.8222846050489394 0.6669552590790868 0.46183907676320035 0.3038494079695173 -0.9250664879197703 0.971938589634425 -0.32845464877694197 -0.5563223863456348 0.790341917537098 -0.15188049597621966 0.6153298080506888 0.5235117679947807 0.6997792183750671 0.940599282437155 0.33272463680628594 -0.9870428779713758 -0.973773238971775 0.4085157774352075 -0.45720913354815673 -0.6858941804138414 -0.6262132169377066 0.5064013712048292 -0.49245586577653766 -0.8509768800308819 -0.06676032829940981 0.1653656485182884 0.9208447405123794 +-0.09497045521788583 -0.9247922312589663 0.8798896722444243 0.1497099866816647 0.7039272191658459 -0.6397470404275882 0.7991064743184713 -0.5400213962850717 0.735232545961237 -0.3532948478352367 0.38299545431219206 0.2182768401556474 0.5258317073417804 0.061830833904570115 -0.849211509049191 -0.8527720155889431 0.3396112577886792 0.2881659397218499 -0.9804367136916874 -0.3389915126003109 0.8893532693322519 0.03447108372104357 0.25618763572140457 0.6235928151601491 -0.40018535113050446 -0.8864427987346224 -0.3677675597845169 0.6958921383633612 0.4740228034676013 -0.5331776743182968 -0.17926148569436107 -0.1405194065738813 -0.6239519803592273 -0.4398152642133133 0.4669285177015192 0.6779447792109985 0.7653326751053044 0.38961138482400415 0.48817157821198465 -0.9770428804210443 -0.620972032543947 0.14871129115916415 -0.6531631593838685 0.3377208410945991 -0.9690672218379235 0.03167035561851628 0.940306694679955 -0.6234468186996183 0.5692836195564104 0.6193551288636743 0.38745442243623107 0.7875905557829943 -0.47458949981038545 0.1452240944855525 0.699579339447818 -0.3266392031080687 0.5157857568874014 -0.17252575990957353 0.9909838296599214 -0.39825565973484656 -0.9388166207402315 0.34434702229595837 -0.2168347684980505 0.18432830180624116 0.6326990652644358 0.6274373079326243 -0.23045774469285552 -0.6991784087070196 -0.6769555478427987 -0.7200126724741145 -0.9229441891619992 0.8732835405137629 0.40080911165512845 -0.4610752664791622 0.7045257618346783 0.8896637400985559 -0.45677157187222894 -0.1229360843296714 0.2821387841514573 -0.47522950302428724 0.8101566697655131 -0.13924514589073866 0.7198263876052291 0.07051329894640479 -0.5799808528023394 0.8236083549939184 -0.47539280997197775 0.9379685427805304 -0.8780947708719129 0.16472487825884374 -0.578473395518253 -0.7521111492209605 0.21674956958872427 0.5872012058233929 -0.8484169220121245 -0.9508703867792085 -0.21365657679820016 -0.6128500051313452 -0.9857114204789215 -0.5350137027091526 0.6094090467456699 0.5387965627305951 0.6883657119779363 -0.09449439036727147 0.2912969135889869 -0.0925533216608021 -0.9767231656143296 0.7474727975021438 -0.15239549861189428 0.8260862809317662 -0.370704907462692 0.22702100872095565 -0.04777737924865666 -0.4753783095016706 -0.13463852413645183 0.6291899951845277 -0.004297255314792192 0.5174790527660085 0.32344044054195487 0.03523486574843693 -0.8536502616651542 -0.00862180496309084 -0.5523734268032878 -0.5183656796586091 -0.4550783676140404 -0.7162222144024486 -0.5256360290654343 -0.9606140479776579 -0.19163832329415897 -0.0230255206139387 0.40748427856909264 -0.17504988280993095 -0.614995992906594 -0.304293316391941 0.9698175164982523 -0.38768154957831014 -0.9772923915762388 -0.573442595049213 -0.8511135470520932 -0.541555566592091 0.7966215536610077 -0.9790065407989073 0.6501899221549041 0.622344656790045 -0.19017397632883504 0.2690742433286417 0.07672887061184008 0.8666720632402509 0.8767105766132259 -0.05745831912312194 0.16259416356183265 0.027018149974650463 -0.5262618395818894 0.4166082489726415 -0.40210629179556934 -0.2947191539934553 -0.2245016915380702 -0.3887806433636809 0.8502486859136364 -0.6172310455645316 -0.5594728906195501 -0.3294011353178683 0.024951267730488613 -0.6049646768441943 -0.27576328742224354 -0.36298729661453555 0.7999353976768524 0.38975093781692416 -0.6053544488139531 -0.007822682446652074 -0.22574311450844697 0.8361226980742062 0.5474693795993151 -0.6966136624075452 0.6696131384546029 0.6617176584052737 -0.11830389837624833 -0.1831133736128001 -0.9087402579433379 0.009052311581662309 -0.4705628820784704 0.3731443401522556 -0.2824210309623594 -0.5421893620440317 -0.16409677988397697 0.44561278580764574 -0.9165505906612716 0.43946298286036245 -0.3829413129448418 -0.4067533080537886 -0.6313456175305865 0.43581762414456815 -0.6436077984145285 0.0669064673966917 0.4934692225949413 0.7129540009300019 -0.5980379964556874 0.9974982567395889 0.2685014494748963 -0.3602419829299859 +0.41157053911478947 0.6730721747846824 -0.5382700546686587 0.41545598963006447 0.2998412353310802 0.35412915117203814 0.6232189300412296 -0.3134657020612077 -0.24097285065117502 -0.7297415440177384 0.4664139887485077 0.40876759055647516 0.3659406009889574 -0.9506630238800173 -0.7577094690814796 0.8448433915412354 0.30776819455357596 0.18753249238091851 -0.1870857736625604 -0.19815392923033515 0.37572306981900283 0.511860202607231 -0.9676387878502948 -0.49581110447201326 0.38495594376641273 -0.2636698485891522 0.26511092861510277 -0.025514197341867773 -0.2786309401030862 -0.9093337847325906 0.6486868493294982 0.6601405051390503 0.6944343974356197 0.7554504981311356 -0.30794994092825045 0.042057416791925206 0.2205448144642852 -0.2845321666133964 0.23148633295561116 0.9145636317484027 -0.2174088572604953 -0.8296359277442493 0.13693626724786956 0.24482918332046721 0.21986238639718403 -0.9522133103144512 0.828482116535243 0.8383741515238194 -0.15404526083376036 0.7382870843192701 -0.7589187298249023 0.6498519255412962 -0.36309288454301747 -0.6541520215880956 0.7689883718154222 -0.5147626967057393 0.7450150478215471 0.37066403757815825 -0.7081817856840991 0.6872443304966565 0.23337566933218534 -0.6262677232717058 0.10595025723911111 -0.26677092497603017 0.9325934649189416 -0.3833293701109277 0.011430526522040907 -0.6441648054117752 0.4151613424210183 0.7182068725530737 -0.2946946239186785 -0.7984657883452728 0.7343925508195122 0.506885122159185 0.5179974023206426 0.2656035563492525 -0.8238471832106598 -0.5419718167127134 0.8410427579126849 -0.9935417695841844 -0.6745842717561297 -0.23806064206004995 0.059210490244539615 0.9733350429136893 0.584363570938446 0.2467313639959443 -0.08410676849747944 0.1426381077444001 -0.8065117227036251 -0.7962194840070718 0.792579231975989 -0.0993185700713397 -0.3878838702411862 0.44602139867531543 0.391029056333593 0.7496127248853117 -0.9935527623629128 -0.3128040566325474 -0.7202258173828318 0.8875011504349333 -0.81827784972596 0.0314487187207424 -0.20864951456508374 0.42690283678150753 -0.8383516986803636 0.18461136618830332 -0.10323589764745966 -0.30766804819367866 0.46318060403566275 0.6580420600887154 0.6099216633853768 0.9403687727093479 0.25134626854394493 -0.11651293935777751 0.5346222678196659 -0.2538559745529254 -0.7763952108474557 0.5269975380401801 0.47677797141217426 0.5924556041207929 -0.29744964035444266 0.8586612051276092 -0.8403207685498189 -0.25507426606839756 -0.7959992516123682 -0.4245977718692493 0.38591725175075364 -0.9732354974032724 -0.16722809325831633 0.5779026948115689 0.15783833611271603 -0.09096257657274087 0.7042023378423301 -0.543562641228291 0.9726758624456731 -0.699122334114961 0.7658364164889426 -0.497985388034184 0.13234780150686776 -0.7443962682544387 0.19163230338250115 0.21297325475341422 -0.14978611608391934 0.9412404625089175 -0.12459430505740277 0.43843200974202823 -0.2877340930750716 -0.6602419484232704 -0.5185388249274565 -0.351211410631173 0.47041571850686337 0.9904001991731501 -0.8394575139862435 0.6486887227716218 0.8381020951369071 0.37308866487390735 -0.059464348542178636 0.4523549056273757 0.7335730588326632 0.34605900001499235 -0.3563756305319947 0.8790961110383659 0.4003199757484297 -0.5289166968120178 -0.6233586626094105 -0.352755858966431 -0.64553795029196 -0.05895926247637173 0.6567543002810481 0.8316125450542764 -0.5748311703624145 -0.9484923562478786 0.1022580166352276 -0.4661447164145882 0.5116830778180461 0.6868589387816522 0.6456684760426268 -0.12105313984507715 0.9061909210891426 0.724048292435371 0.4157074570004762 0.5691686263051641 0.11283428894689318 -0.9836825115019718 0.04954938732412528 -0.17155338841088974 -0.1252421676618034 -0.8248682097686504 0.7432131294595212 -0.9636280633313477 -0.9705768667470522 -0.005073442580747045 0.7544800105359208 0.10576711500024083 0.14633922780434738 0.5690893916490767 -0.8567492075563592 -0.6611751222703175 0.1482551923140245 -0.07064846277569292 +0.139057002943056 -0.7712266658715325 -0.21069340334642184 0.8955296837005573 0.7647801218747536 0.5639793412597103 0.5274958260249392 0.062165001905697626 -0.883273261771861 -0.7843585354036984 0.8640651906514181 0.6616068958009866 -0.5616631339828797 0.02360283762423232 -0.7391133792828495 -0.4976195846392619 0.6328022057671301 0.1571760455279978 0.34108385532879093 0.44409274540293797 -0.5542033523525969 0.9689477553685142 0.7434162873384063 -0.17247842639747546 -0.45101732532702465 -0.20497371966539135 0.4414916555875732 -0.21870296266835942 0.9773716429426647 0.4897029903314283 -0.787133331944049 0.6269638733631409 -0.4590208297591001 -0.0744413988221686 0.6147391102291266 -0.1374602722982201 -0.08543595691123151 0.7349273402586991 -0.6654834269815515 0.9638962731918326 -0.6137532376697827 -0.5023737587220243 -0.7192283464192195 0.636198100320247 0.2509295698293672 -0.6141829050383116 -0.4164003162593992 -0.6844761388487681 0.8866672222845395 -0.8367724119156204 -0.9579495759090162 -0.6260388069188365 -0.9613443638501991 0.9956942901155579 -0.30542185865780125 -0.6371418704434557 0.026438323296795296 0.4788233082453299 0.8445467034677152 -0.7229160893654807 0.8087986527308972 -0.733469087612725 -0.555348471885998 -0.907469085357675 0.18572909983980268 -0.5100989157164486 -0.1868008099068661 -0.28217917707652584 0.1855619377223212 0.9581427430161151 0.5015012713760048 0.9143051426561397 0.48115630313379465 -0.9385271663382622 -0.26059993440221163 -0.1722901700919237 0.39019265303994977 0.626256416735409 -0.9556738726069356 0.195258137737496 0.7875021136120848 -0.27029349812745873 0.8230090735849305 0.6497470966587438 -0.108630370009138 -0.8806444165535467 0.3007448010815501 -0.7212704334256732 -0.9140084997689955 0.8358315648955283 -0.37354980730860676 -0.44875277857605633 -0.28349358090552945 -0.0903708382165882 -0.8485246560772448 0.6330924543920127 0.06893560400121657 0.5060011816925432 0.7976264420034891 0.16267819458377675 0.33067102760131095 -0.1696067465090092 0.41872811399176113 -0.8681854061557477 -0.8994521969136204 -0.866552938738274 0.516368168361272 -0.6687444997339227 0.028313305481828088 -0.17764823080470604 0.8551171275814391 -0.553853865172814 0.43986270531242533 -0.6446581704699637 -0.5182027592685254 -0.5486211141414419 0.517804384418908 -0.4978392383585297 -0.9410379271143103 -0.9207530759371141 -0.9698186190976039 0.8404054104479688 -0.9665483088060935 -0.8331822131397797 0.7860858986172206 -0.6673323571779519 0.5046393135407596 0.2271309553860683 0.313294180810473 -0.5593813877708904 -0.2879118247946355 -0.5713372675108641 0.24706130076754373 -0.7320199429832899 -0.8745848772769598 0.04652084108840726 0.02740256103185401 0.20626820999728168 0.7867117181730068 0.14245031065448233 -0.19913710347592462 -0.034016903517619435 0.5819824383466001 0.8999515793625745 0.10699219501022905 0.9424854070997608 0.3594584451270024 0.15255157246414885 0.73890135205037 -0.07479429297371287 0.3883247578134845 0.21689637991467348 0.3627904136579094 0.39693970038705584 0.5192587388328493 -0.8672513172356213 -0.3137253700383198 -0.3880224144415594 0.10261184620488195 -0.024354853994534853 -0.6622272443404549 -0.2131967362736138 -0.6606558770532116 -0.3439292338621185 -0.5620331294161254 -0.8768346788343901 0.43450851435501936 -0.6705436443091273 -0.05501806836245149 -0.6342498967771657 0.6045470107892743 0.48693139290650933 0.1692612511428 -0.8238449626522979 0.9751315565219385 -0.6796397052689807 -0.2626772443139116 -0.26240932546681295 0.9272244049528005 0.3483656931200576 0.9129330885628111 -0.7394575079063208 0.7122461676547345 -0.5862428648982267 -0.34446960117475434 0.7378188038821698 0.18570692355160845 0.0564743285211029 0.596289143782267 -0.32351267332811706 0.672470246401075 -0.275881261255297 -0.4530486949032113 0.43646431202159386 -0.9294704610120654 0.9979010705527878 0.9726994575674393 0.6740111272366816 -0.4941032534007481 0.9315237528707199 +-0.9267094582371931 0.2137003757476923 0.25426987249303923 -0.45061649293210637 -0.7084897087529103 -0.8230159357286417 0.05451463206124352 -0.5165239686886332 -0.12506188869492174 0.2878795959167062 0.37381424180016243 0.19859587470095108 -0.42946595518916064 0.8530114120865633 -0.7459433070929855 -0.11781284995980057 0.7492135903677697 -0.40750577940149957 -0.3020400669037595 0.23258421282383335 -0.490013401656312 0.8672671624926445 -0.27316258953063066 -0.8009475600451801 0.20294691453443758 0.5479073309210518 -0.6107217517796739 0.6264442475104319 -0.08564723764700743 0.7492551102406646 0.8022566422786621 0.420206648244148 0.09857886662411808 -0.8449207634570048 -0.9865800348141807 0.23994671735347306 0.8939911071553686 -0.17315603730110807 0.2098719963079516 0.5704832587183799 -0.5514679437111412 -0.4171850861762887 0.3948595342342516 0.8751286094701201 -0.7324350540166431 0.3521830687130709 -0.9958077880142364 0.5898611201038058 0.9932319342842777 0.7724596450703183 -0.9000307652623614 -0.3545415469012485 -0.20338993606497646 -0.08848463238043269 -0.5361013516829447 -0.7895894272283901 0.03608118872766641 0.2935646932849756 0.6961342240666462 -0.4882631901462353 0.2952999020928271 0.6859535904340841 -0.05351304453991479 0.5769620586191131 0.4170143790670675 -0.800721168565818 -0.8011523856898419 0.453425186260491 -0.20679954114485866 0.8097698930303971 -0.7374072673823338 -0.19958221747592453 0.7293192347876778 0.45834367346226834 0.317284774635044 -0.023091112080375842 0.9949942385781538 0.2176568961388463 -0.07675927699353058 -0.6617075986307368 -0.19254499740670905 -0.47820142574129054 -0.9243075642116003 0.7521357530654 0.6302175957840126 -0.07647593809337483 0.9158361039376899 -0.14371268959985994 0.5694850893728365 -0.7768079800021823 0.5901090719284461 0.820345129335045 0.6471412534036545 0.6496558841433469 -0.28546458294554355 0.6946216007544805 -0.7119286977778838 -0.1696875003913143 -0.7896975574702632 0.020588048089205557 -0.07281501671341073 -0.9819749903680599 0.8048062467001613 -0.16820597864655373 0.7973764233882932 0.3198929740858971 -0.3299743244773028 0.4376070622034025 -0.9497718322208635 -0.4091814096824511 0.9296483157721729 -0.537664388253978 -0.896097434337203 0.04520056412676765 -0.24406431830137243 -0.6924558098080262 0.8037374470223777 0.2822643409153409 -0.0749527507564769 0.49935144789455976 -0.11067454047523917 0.7745493007194975 0.42164820478485376 0.4987410780769863 -0.15862935729655114 -0.17236604566701264 0.6564192277782364 -0.982780190650679 -0.018828257779478497 0.3547248126593783 0.9140438293730975 -0.5823818325926058 -0.7638287031464008 -0.13853129449055213 -0.452422100358322 0.4607926617679645 0.9427647150552976 -0.3232496690014488 -0.9754471558475151 0.6643441079227907 0.38608086127390573 -0.6209477973767301 -0.19742112936467549 -0.21150219799717185 -0.8399639736311928 -0.10395953559399351 -0.8086371947273674 -0.4414177808122126 -0.5068070009563868 -0.6039094298328529 0.4933941615929811 -0.7038929842120456 0.7298811218143679 0.7931855939780026 -0.4215429262094337 -0.0395871668778669 0.1865156646194508 0.10914357985823409 -0.5366624942240716 0.28256803000702546 -0.6474321231501898 -0.15265071342545777 0.955007698271193 0.7335056167496281 -0.4118668890653021 -0.7494035507804493 -0.9010009742566527 0.22584093701519747 -0.3423444977953711 0.1416685545611276 0.3920068901067568 0.4736752576821144 -0.7429976148848789 -0.7879057737777386 0.4420168933533901 -0.4265456371367906 0.6588011696266682 0.628802307188485 -0.4167150496094618 -0.5649822710294299 -0.47821667807608237 0.6274313099537123 -0.01415106196908944 0.5413726223491513 -0.2648376139773523 -0.43730423449122946 0.9596541055977033 0.18359773705616056 0.14714010984686787 -0.7745240868870449 -0.7351021063299508 0.3374799118337446 0.4093692604400385 0.427796250209151 -0.00724306433705757 0.42413526100258503 -0.16200373928502732 -0.6225331793634654 -0.15378043095774663 -0.794746535246291 +0.8777760565098882 -0.5254630852652329 0.7672059236075952 -0.8330783837041416 -0.18384277277757843 -0.08786633957744416 -0.41170018202856506 0.4288643023805627 0.06417738867925848 -0.21324020801874055 0.25109303138564854 0.5559913580254685 -0.40742308355512535 -0.6803861274071967 -0.08981788050230799 -0.5055149721860641 -0.276916792551013 -0.39297250208722145 -0.18216266963846328 0.6679041973313611 0.27158634872302456 0.15466231584189782 0.8974915195937827 0.18662956963514654 -0.18093046644047384 0.6871695886495983 -0.36094041135598376 0.306020691048843 -0.01652024654905171 -0.06421724828149333 -0.47865649252115516 -0.9491921201145344 0.3418043893850897 0.1820560609276871 -0.04235573696093664 -0.22881691574053287 -0.621554704292562 -0.33363338315701574 -0.051208099270016794 0.6800038432769229 0.19954677119306097 0.016234905599239235 0.8627334495425991 -0.5196182922668275 -0.8574159201656746 0.33487555969663463 0.40003536824893327 0.6844341065196782 -0.9965468158999664 -0.8819245361779458 -0.9895045669455829 -0.7960139501491281 -0.5346361151246013 -0.12550025323591418 -0.2763990313777642 0.9751488889105893 -0.7589919592544703 0.611626769784954 -0.1930399449344502 -0.8388294448560665 0.9079606370228732 0.804283277481658 -0.15381990782981658 -0.11950660191564877 0.4143436089887256 0.8080922743633736 0.43333402968068824 0.008363131074623054 0.4819534695409331 0.8236520963540062 0.4885182501520373 -0.9301747773634328 0.7136167201708112 0.33084989528106434 -0.9787221508173016 0.7163055651558243 0.6329676977114835 0.669018472631886 -0.45594083026668875 -0.24544761045160501 -0.9311555372190958 0.4908564920195302 -0.9256118221987149 -0.2720115292933911 -0.3375553787372454 0.46749301533181753 -0.06928006738737436 -0.5386621538297085 -0.9890093064085508 0.4447537361692364 -0.23671407670443667 0.5794213475913361 0.30449719009420995 -0.33395268562113833 0.6057557288194939 0.889673854376068 0.0946184697115171 0.3371104028738092 -0.15953017936776126 -0.76760998846756 -0.3308017868757054 0.11538279532998019 -0.34317831008818533 -0.3207453721458502 0.7150715468299302 0.7038871995083127 -0.09856703037434711 0.42646826792280246 0.5780130877940455 0.9711182225966077 -0.7476503810733364 -0.0003549718413300429 0.9013581536565103 -0.3551733194950064 -0.8362215970539468 0.7199807755352539 -0.7729775934858438 0.9557260954780056 0.06292234648914219 0.7772843329493662 -0.337599456916748 0.3693374817213366 -0.3161513340267945 0.7792687355098395 -0.8066076076110333 0.2822475504590449 -0.545571531681436 0.7095226656885771 0.12085264955217179 -0.9707783082091173 -0.5325193866330313 -0.11188861592796195 0.6811109202228132 0.6200858600356101 -0.5609228819553889 0.010623292594077016 -0.5593960001245912 0.4718102337902279 -0.6511467394757573 -0.04578010562567614 0.48584852702575954 -0.19551711428993723 -0.3606907749162014 -0.6631025006696181 0.7338445347313964 -0.8141659304933415 0.4343439451157789 0.3914910626440098 -0.8998877858552281 0.8277429905897853 0.8173338216278205 0.5338510360825137 0.7966664592654051 0.5150310701945682 0.40431023184738546 -0.9248161765614702 -0.8280322132423115 0.822923475435918 0.275740814728771 -0.38726354158765 -0.37580623354568954 -0.1647196294360873 -0.8227460022886539 -0.37214008994540104 0.12445125950997715 0.3331236777257627 0.7646337124303266 0.18856102639739536 0.5732428978613766 0.7694767308829178 -0.5487368471993088 -0.7962212190063198 -0.13458077558577064 -0.042666068461990836 -0.8464727304776793 -0.14115142146866222 -0.7415073079356647 0.10411672133749361 -0.27730515295810565 -0.724156299319177 -0.21217079792288773 0.07363732572541104 -0.3930594345744389 0.4117946164554178 0.42273546543519136 -0.9773629255618854 0.8035550770526239 0.007919310256154555 -0.3622488614698276 -0.750951456359618 0.5846279047077076 0.2993517069623748 0.4648406153518081 0.649493607553957 -0.17237851083361644 -0.11878986652661028 -0.4182126000324864 0.6112130067530319 0.026872327089928927 0.6238867088098123 +0.043430128963914294 -0.5648906648094041 -0.0434925887480635 0.8258716805605004 0.674511007622314 0.15329410004286403 0.05409713429338181 -0.46383094723351337 0.6392517545816794 -0.33243356782117495 -0.9822241536468257 -0.724511391083452 -0.2034668214396964 0.4987612560459669 0.47764056990322024 0.7232001313920742 0.5519457844463438 -0.9911052842211099 0.13712776400844517 -0.9675583167516855 0.7889446296694029 0.7864537911091058 -0.2859871001956764 -0.9081239339498783 0.39894584532270305 0.17258127267136802 -0.5423560046561793 -0.3019909029527321 0.4064276189090985 -0.027287788426615833 0.3797612267423178 0.5878548526101441 0.9140816419158453 -0.11814680647538522 -0.7079313278236514 -0.24355062216062184 0.46690289021668363 -0.8999757977955551 -0.7962168283405104 0.6003363313311343 -0.24932081509190018 0.7483686397968983 -0.6408754101064928 0.0680830196528126 0.41171088378566534 -0.7035751498711664 0.6524022767453297 0.7697682452532095 -0.24422974617849125 -0.6995084635771194 0.4416228278106271 0.6088441126930577 0.9870536107108216 0.09569795164998585 -0.2963084482535725 0.8826583627189695 -0.6548988767078818 0.8103604024387188 0.2377554223338172 0.6566616804151006 -0.15763348591052373 -0.2770743316504918 -0.581702576799668 -0.1128126470495514 -0.49339833552436296 -0.9315483052466282 0.005202292724746593 0.6644734709129627 0.9429913079425114 -0.9178178515832336 0.4494342456067948 0.5555906140710165 0.8541830847031757 0.5986989807815404 -0.6533398319944483 -0.4012134354198804 -0.30031792920181033 0.9711728718669732 0.8732254443634735 -0.06989988810712489 -0.5759945024926041 0.4974376581243314 0.5960981095954718 0.5967713756339539 -0.5669154970027717 -0.4934640929382488 0.3108478917690365 0.5977390650983978 -0.7697004470252575 0.11206540755123373 -0.6434785239242129 -0.8600442134411852 -0.3015848910998522 -0.05554033755106391 -0.10624502214671505 -0.019523797953049815 -0.39129286342393277 -0.29266021970353195 -0.2671020940310742 -0.9050746660121654 -0.6882567066685767 -0.9136047660638451 -0.5416077704511133 0.26730314132156896 0.9401549330834327 0.8681904512395522 0.6192320747302595 0.46480711125872887 0.9421744243348529 -0.23422342070419155 -0.6999986272747185 -0.1988036654723373 0.32076836365447536 0.1909443631390375 0.41297595997074765 -0.5196015974284784 0.31990892107439817 0.7878802115964767 0.957060049502374 -0.18038693727252375 -0.16633822739444004 0.19108082761119993 0.5758882874839533 0.47684238866371587 0.2885023881924289 -0.668749228744117 0.6576237118922235 -0.17321999567875812 0.9302136992867787 -0.0793457930268675 0.24776676384339047 0.03279426757134574 0.08216985526009646 0.6493870874993093 -0.41246208380349625 -0.14634299587850563 -0.3267724698474883 0.9992495966007198 0.4069936344695284 -0.22373599629891627 -0.5561048937363535 0.5046542720043761 -0.4354147381799798 0.2270005302158391 -0.5514809264310219 -0.2120313670344378 0.09612614987017376 0.6376243282676677 0.8726071674918292 0.23528123694877534 0.08888086994069999 -0.8790334823687591 0.6117626130617813 0.7781904909333925 -0.9029372229804364 0.18664177254134207 0.891685468789035 -0.39008240902456737 -0.6701892267629175 0.909311501027096 -0.42228141062743885 0.1832034941278482 -0.8051822607169081 -0.15658237231131356 -0.05105088431892768 0.8372359098464321 0.5741166136738594 -0.8130472206449033 -0.9638124039040974 -0.3678270935126229 0.6740250151829481 0.5214401366028789 0.02519243956652928 0.30493146912079117 0.824666591543807 -0.08819259701335991 0.4728323251730293 -0.03620690051962305 0.43974439686834366 0.841072170044445 -0.2944273388083922 -0.40184708617779097 -0.6992360662877315 -0.0613995886044969 0.22756927899081436 -0.4208681505774148 0.14128238347030564 -0.496837925137829 0.5438685667186371 0.29709875198863744 -0.27458730354509364 -0.48100356760261853 -0.10813085794729949 -0.767256391337793 0.26605966773885736 0.6422663436006053 -0.6834606074444833 0.3978276060556498 0.9360960826139535 0.7424343468014787 +-0.3262209309910973 -0.43973230614328673 -0.9189967553940892 -0.23706072256538824 -0.4483178292479464 -0.9098824177936446 0.13536299218938086 -0.6889097568358802 0.5824448767767367 -0.21847643500474057 -0.8388783662658414 0.7662502395447623 -0.8570552272097065 -0.9018733736596332 -0.2687157699507041 -0.3259995394351365 0.6582707085239843 0.24269987626067935 0.4578005272477388 -0.24363623881305685 -0.8212888981264246 0.5863637457406519 -0.3429293026526157 -0.14954484869585216 0.8945778815579053 0.11805429716555493 -0.4938670511493395 0.1609498609432618 0.0309558517496189 -0.04566119718192829 -0.3471376952107308 -0.35801761325012826 0.4989467252001063 0.24351911090299105 -0.1528136096190873 -0.22899690321788735 0.9861425862550182 0.0902933712296099 -0.6087469898802256 -0.7691871223734708 -0.67217404193945 -0.6577206709256105 -0.3326605300131187 -0.2805393059520913 -0.3198078794054968 -0.5974186935888741 0.1400461693906938 0.5292327991272696 0.5375203010442664 0.5806533285064754 -0.3410032815539872 0.023842053259857554 0.46607333143315777 0.5636724435796161 0.3827812158385018 0.4851411345659189 -0.8526947124717068 -0.2817980392139059 -0.5020902622218939 -0.24657401629035625 -0.6431729379907161 0.35814468424105583 -0.026978793089297293 -0.2942492823107383 0.3449192083210664 -0.5165810352873217 0.4464139029735157 0.8077349701408358 -0.7096132452012998 -0.8328299603015916 0.6643907982913477 -0.2010307494660175 -0.8336843301789854 0.26368331413502943 -0.41216318012336517 -0.36497419497716765 -0.532451293585489 0.6312129260459189 -0.3459144445850908 0.12995520244041914 -0.474783308287942 -0.33265830322994105 0.14038950347517365 0.3027917654971497 0.38550952587300324 -0.7175308390792747 0.7627219412552397 0.6394861469008788 0.22268174260616536 -0.7813664727449312 0.47786756381361317 0.5875128536011325 0.06502634974167387 -0.4670646799446332 0.3403064344321136 0.4946429401175527 -0.1033658220261231 -0.6797856124469921 -0.12262888499823976 0.027251711681939517 0.2299316771529254 -0.08601391120398216 0.02751745383093307 0.42617725319384925 -0.4580880392376554 -0.538890106315427 0.6684961521470814 0.30081179671149494 0.42785672766928484 -0.4772614056735822 0.8271449778460409 0.9441849463218663 -0.5805182416820684 -0.20766965580803332 0.4093683842835294 0.3803526333865579 0.6691549166722817 0.6697002772022547 0.7842677309005917 0.2460243790949046 0.8170186916114526 0.1081154012610368 -0.5095413558936275 0.20288313767456922 -0.22794412169961364 -0.3280495486857502 -0.6826550116263495 -0.5095002041589691 -0.14065818198674473 -0.8865953328882168 0.7978910068748049 -0.2785437904304233 0.6656159883606081 0.8641539002184331 -0.34999686190679435 0.8871868236659521 -0.10340302796511325 0.6850797350194517 -0.6185929772151324 0.260171043121737 -0.6560612960627523 -0.010826655827786302 -0.7506934833649912 -0.7337454160706245 0.6141291132733433 0.09136469516198087 -0.5082040357302582 0.02028111016178169 -0.689665985729363 0.23605392865865582 0.8242409343393371 -0.8923850802606834 -0.3118477604493841 0.10167881888038144 -0.7515467071927884 -0.21492845750917233 -0.7390664034564736 -0.6615993282185921 0.3562557613790849 -0.5641902958801484 -0.5677787173541353 0.3997704268361355 -0.647036332102555 0.02335840706927006 -0.8169790705571955 0.091535364280666 0.542464288672488 -0.5719054912668915 -0.016940964259212876 -0.6027027142043628 0.04179972297691359 -0.5669035203437081 -0.9578641649262609 0.11876461187850351 0.19690069417422595 0.7194357889709009 0.18418049779674717 -0.6964508108335239 0.21909419449802603 -0.8595984111679875 -0.5290739510903122 -0.7176675354989148 -0.880383223729444 -0.25484484665322316 -0.17041134451239892 0.7546884554119953 -0.5829362178824107 0.11198103855904562 0.02851187637853747 -0.7054268791038452 -0.8696742272840052 0.025688652355440267 -0.7071016365253853 0.07130324192891302 0.9719354276184702 0.4206279632922698 0.9872666042607394 -0.36663546100575406 -0.15991871355044096 0.37982164876159685 +-0.398484510618629 -0.5805331640651035 -0.8316446921026011 0.15774463752059154 -0.18809000603851955 -0.20267789863925767 -0.9944440416512892 -0.5780483482019239 -0.9966039917257075 -0.7057787064259005 0.2473902124944687 -0.5542889903098585 -0.06758379941652892 -0.08866318656848726 0.20043195353184884 -0.3286861276559292 -0.20803425041854484 -0.25675442058562226 0.0094693322514392 0.679366496492678 0.2068059752015896 0.6085602140749724 -0.4296718392988881 0.24372111052463485 0.9089334955542714 -0.06594954595480784 -0.13468897403074553 -0.22040551154267152 0.4930289526568141 -0.6681724022484792 -0.7434037907276012 -0.7159426791668455 -0.5914904193746742 0.8018186223296304 0.5288639065515495 -0.11758215786000514 0.06223407677357273 0.6020810034496582 -0.5689376174698739 -0.06802510969485587 -0.5054721309117338 -0.8672940685071759 0.5963274081675809 -0.5585389421403424 0.4704249860678227 0.20410678763244006 0.7535155911159346 0.05717298955675387 -0.020427788223770227 -0.0996757471669083 -0.5833329243739362 0.3400240277280986 0.12436067946144469 -0.11206332180061973 -0.9699058838114645 0.39882949279766877 0.6055841621026417 0.9057339199287888 0.27882472447068474 0.30064667152986324 0.4444689301794893 -0.14922270341748 0.40007268699477905 -0.25311529573011016 -0.1211108711785518 0.3349590875544066 0.8345942634103425 -0.3336752400510663 0.8405801790527272 -0.8655508202311102 0.029611762078814996 0.9256256969910497 0.7339624412294656 0.876247893116088 -0.004871752590275502 -0.2840339209340692 0.6918334604434822 -0.19947112779915233 -0.9681529343873594 -0.5600833263764613 0.864472361492225 -0.9929793935895694 -0.9339466815026232 0.753908736975103 0.007205324645833011 -0.4473422969934173 0.0981812446709498 -0.12902029757262912 0.5065926051801377 -0.8465200064817306 0.5701567310781204 0.20209215506166767 0.022683746596889653 0.16612071895866776 0.23608720681510054 0.9258872393950075 0.05138319279520176 0.06630886212838538 -0.16634685946313943 0.05185590442130383 0.3978304243126445 0.7088836974376076 -0.9671762758766436 0.45394012339675727 0.8844937248880087 0.5327319528795809 -0.7931722066933988 -0.4215873310253242 -0.5465203691197671 0.10306546643509917 0.012327959693575252 -0.6688842532068084 0.6276135592208767 -0.8798306795969568 0.027836937515278937 0.28750491644508736 -0.36981312881285167 0.7528701290696336 -0.3855811200532715 -0.6721518450048423 0.14655655782905663 0.5538423827121837 0.5580993451729332 -0.43466952652057556 -0.637856870748809 -0.006164075148397341 0.9353895337984031 0.24423014905089047 -0.01131877664731995 -0.3114434177185028 -0.13083914440849576 -0.802526250103405 0.8456615538889312 -0.992962470631789 0.50547114905268 -0.9495210380204941 0.781626180834188 -0.7885303233491314 -0.4569941242052675 0.7415374020291821 0.2406888843445849 -0.8318962020592633 0.5773840636903573 -0.43921526071362127 0.46056959191888835 0.5537623859379535 0.25457729219990743 0.20493523657595936 0.49045163586669926 -0.1543357340165259 0.8396882135660155 0.13370087533722197 -0.6772041900457131 -0.6552734253227648 0.7670882758445154 -0.7242574688848922 -0.8656478366915812 -0.5164790611271668 0.7874098607801512 -0.6998235546853966 -0.8954731882162621 -0.0771222077834528 -0.0015999528473207292 0.6580761314368575 -0.9083474090661181 0.40984293973357766 0.8294843814606145 -0.05524073704222654 0.6699714627595437 -0.31181413113249934 -0.8610795605469659 0.7747656765048812 0.0063803700707696365 -0.5575206680215061 0.7227435780607103 -0.47361502261496247 -0.2048151523417563 0.6670420362322873 0.6589308541244139 -0.7408034784646007 0.9288152872306386 -0.37372287661116865 -0.5458411793288125 0.8820530962341462 -0.05639706028282676 0.057046953893748364 -0.08458258836878563 -0.8082879822070033 0.17661405254752283 -0.4880808105672052 0.5610903255678659 -0.33552840810244877 0.9436316310374395 0.7473224407831089 0.7822865662494243 0.8371920560908799 -0.1586342504322482 0.6852115085820896 0.12784413827967356 -0.4257160167154135 +-0.4403542798657749 -0.5991536431825704 -0.9052543380284361 -0.3697075927904505 -0.3294875810173574 0.17745984147842586 0.6547210472778551 -0.11190619824732817 -0.2300170810801394 0.09661254162037403 0.5513636124064536 0.033070781828940854 0.9650978104686236 0.5799628748730918 0.8379794865197918 0.8016881543036924 0.7011880309170184 0.20160777245250583 -0.2702285360975438 -0.38254121875866054 0.7060905499723513 -0.5102801971387114 -0.5425195468265396 0.715755325493689 -0.9998322906489894 0.6988247506567158 0.003103116189465238 -0.6292913045963404 -0.36244925464332134 -0.7273917670820591 -0.252653144072033 0.818851414972374 -0.40145515791058406 0.3275138261526247 0.44067803748476053 0.129755981126346 0.21795606108690269 0.020604900949110494 0.5478446388288143 0.04738841692065221 0.38013768571519946 -0.8004701319725591 0.3153372015035847 -0.5520024071434071 -0.03809851934647379 0.4826655496247927 0.08693758227538928 0.8498605772896484 -0.2564492263101126 -0.23225383026499857 -0.12077627836855176 0.7116040863724455 0.9030517297515341 0.590543508686298 0.3543328017327796 -0.07931402017493427 0.06250910555063927 0.9734938222003833 0.9005890833736419 0.5410066021706512 0.28434091939856354 0.8712684995072302 0.026054455439765922 0.18287939942050957 -0.5401012132895004 -0.3565523743264134 -0.6642897807441133 -0.8899680964860381 -0.1303395500285589 0.9715135611114489 0.18107039353248644 0.899984381460343 -0.14299152371001522 -0.8257413815344756 0.2033625250777742 -0.4841314112580666 -0.7148838723786584 -0.12037156069261368 0.575702049033352 0.16706132633119242 -0.5908733724033526 0.8691952677527999 -0.9774962520453137 0.37470743073374857 0.9085158278049501 0.580838928172573 -0.22035441911144105 0.7070564825456431 -0.1501224507922121 -0.20512750412577385 0.3838452617543733 -0.15373646361695825 -0.48119413485181894 0.07243233718394171 0.6014168882668205 -0.8823552880069325 0.3915042350255591 -0.4040257761316153 0.19759029397574768 0.0747963884749383 -0.9543529514971902 -0.09626184962500117 0.24377560745830906 0.10922566672680767 0.2224530194732195 0.12855657097861894 0.769448364156964 0.9045504472418955 -0.7381510725089977 -0.03415358839064253 -0.6349451729681546 -0.12286455090888548 -0.7967477835667951 -0.6317483782345947 0.6089824283300349 -0.6944261833895471 -0.06297466831974718 0.2356729103044919 -0.1404700972970352 0.5312915009330843 -0.5317277247537355 -0.45793744471344744 0.007965788695944331 0.6260897882290619 -0.589651692351469 -0.5095442945530018 -0.7818247939568577 -0.5621227112462635 0.2024492250474894 0.8053362764891083 -0.8784978254809768 0.04112428296269055 0.27666130418551504 0.7433160598457114 0.175787926456761 -0.7895454321912705 -0.9940298295497825 0.3238822252634743 -0.6751716121709403 -0.7726908323318566 -0.27448291538971814 -0.8563478887242131 0.8392558854429679 0.17573824674548666 -0.9039551580314078 -0.36149699749298114 -0.871401032907023 -0.9314939584639017 -0.7966559304289877 -0.04115408179784774 0.3964588204301336 0.18629625391346671 0.10646115408294587 0.9099561897242394 0.2197571757632406 -0.30833813008192945 -0.7967799328988119 -0.450610879603089 -0.1455473715797484 0.5168588892203689 0.6597268322719807 -0.7903462507578514 0.8580885783201995 -0.7653549491111322 -0.5107847135746004 0.2578595573567364 0.6813777707173703 -0.8840396108888955 -0.7123295579863969 0.6718547437664002 -0.22921231939795939 0.08512376526006893 -0.8290048460284041 0.9129688024117095 0.15434253233485595 -0.9218292276072191 0.07642906332908384 -0.3010661247099389 -0.10181403796681998 -0.11855471421581365 -0.9303922678141465 -0.17767866972636592 0.9877316457684726 0.756351926003064 -0.3429927100630801 0.4282195760628844 0.5705111522774176 0.26880777359803765 0.672837853477239 0.518524448298636 -0.8536093663383033 -0.30571958072209315 0.828205866699576 -0.650271790846527 0.6123586081346248 -0.15332608754679966 -0.629680876059266 -0.5573772689452448 -0.5785690595162409 0.36897991630356475 +0.4421591415303243 0.7437724896931344 0.6803660100950062 -0.15924793189811348 -0.0461481512704951 0.7245727763979335 0.650280303437486 0.0032276260412520408 0.706939925949237 0.0743376063009955 0.6475794556381418 0.1137635762295377 0.7966872286801996 -0.20884186105631142 0.1606795188175416 -0.4928887932069834 0.5976064024276906 0.5606015088346152 0.6428417621540494 -0.3719404777904505 0.21573651432908392 -0.7544259735167049 0.3911763080656976 0.2823153761814876 -0.7797924692347167 0.3895316735410421 -0.7765028536989995 0.01967243000285479 0.8957881855828889 0.5485304992228313 -0.41963592499919633 0.9047860434501116 -0.47357662109883014 -0.7369249576020187 0.16210768324018798 -0.4568468982154139 -0.14068186397171356 0.38937275005523 0.07623369877448516 -0.7402436553494107 0.2669223022900249 0.5917710844345463 0.7398171403616072 0.1773529304410184 0.5892854588236132 -0.19652306968518873 0.27277213751095175 0.5022528144988321 0.8566002836167312 0.6715369286271569 0.5971778788487061 0.9979205351314981 -0.794736489829786 0.53034286136433 0.5322294026739265 0.734297716971489 0.4268494375798395 0.7018156522646211 0.22668527815343298 0.48539757296457453 -0.7080705328296315 -0.6340187698151252 -0.9941413261469829 -0.0040801073946508115 -0.19278142753595673 -0.7426693157573687 0.460962762460295 -0.4569076440075841 0.8896601268705844 -0.11128922657158191 0.48415053871239566 0.567906337524769 -0.5687579941358101 -0.6105589778618685 0.9426344205611856 0.8261116197427378 0.00041086913118371093 -0.08027308793419041 0.018075663544124376 0.1648953152103736 -0.5353925908656463 -0.7837210393531522 0.8474633988860265 -0.6504810258567262 -0.017198150097883946 0.14147834602982057 -0.8902493638026998 0.26417569660225637 -0.4713833799755833 -0.27954158735629764 -0.11044778398539656 -0.632632060897028 0.7318953146834 -0.02544550104671206 0.0892751995004828 0.6632116559441286 0.16069896545078244 0.22711434740065628 -0.391321367067337 0.8245467146297316 -0.1073470692318923 0.544711669545926 -0.9451609860039618 0.6086984250498049 -0.9574298904510181 -0.48906905202934103 0.5270675651176773 -0.6752774882826087 0.6479104365143904 0.33009865112335723 -0.7744253201280362 -0.7865560370457754 -0.9055985138700542 0.34321349967777115 -0.057293324305858206 0.7277304727773004 0.34785627913661954 0.6835278244091445 0.8508816256516178 -0.4019449019371746 0.2143809911719039 0.35582867808222085 0.4541539612552843 0.00956192174801429 0.13885792568370214 -0.7555338348864133 -0.7908724721516154 0.45927127274144053 -0.2869561552973119 -0.6044861603765226 0.18442546650164804 -0.6336700787829161 0.2537417615260198 0.5451729127723992 -0.777895050632446 0.24064117361318815 0.4279083199602449 -0.5752305845631183 0.5281535919751668 0.7043678834608103 -0.47982947824962396 -0.5928369218662666 -0.9778627323890439 0.7676171516697265 0.506633973987682 0.1643515877986932 0.3967468395281937 -0.23549178597983667 0.23628037954986647 0.0016314481924903923 0.4737653618876838 -0.3204429850579751 -0.04002322742116671 -0.5642577066957897 0.6655675050119882 -0.847898717249238 -0.943991625639643 0.35200844106370877 -0.3471005934901521 -0.8439135472839778 0.25470041820033806 -0.8814488137617413 0.6541478031307919 0.09998376748335547 -0.6016461091515557 0.22516009156153727 -0.9915821035131545 -0.41536575282934285 0.10323293643603848 0.7173121560703579 0.4397565482889303 -0.32976023922065134 0.3422345737357144 -0.8368983397044283 0.35844891095281906 0.49616499863189123 -0.5430961804518466 -0.9650245066175072 0.2559073116493591 -0.6303355330191807 -0.7905224591774964 0.7214798414730899 -0.8966435666802535 -0.8911128525985457 -0.7982711751565119 -0.743199901619144 -0.7204499884334001 -0.9039823074925695 0.4764586890271305 -0.7382207024318657 -0.8173384761242934 0.5987729483192525 -0.260474526834267 0.10180136151832198 0.3715454606320341 -0.7004289250749911 0.9590200351984597 0.6101860403881836 0.5523622934349253 0.5303910923196675 +0.046350358251049606 -0.6681942664533951 0.047741287743800376 -0.24674082206848968 -0.7867382680920656 0.37851203442246795 -0.06674569532345354 0.1378083365485614 -0.37709075013486326 0.01859047718747031 0.2506019502943959 -0.014439720432424252 -0.672447344650893 0.8813608652055553 0.34441815917678653 -0.6751017308285243 -0.312912385394684 -0.7648859545127682 0.11653942180544696 -0.49855371873245646 -0.42346437287161387 0.8772324962891527 -0.8282647199371542 0.11051055896068074 0.2420854824129468 0.07658932671310792 0.8727507240790406 0.6986549974182987 0.9826620539735873 0.34713419531163536 0.4865748034497255 -0.12396052111112765 0.7455169864511912 0.7964291365537941 -0.19242947942382305 0.8575307323738615 -0.08588642248302758 0.7086816402358151 -0.8786289886922409 0.9725500563679401 0.7193679049025063 0.9951934742551125 0.5615299222363124 0.8031602999942866 -0.35057087187585134 0.7499871201303132 0.9655349570662133 0.5418054191362163 0.8841390031631353 -0.879330967320737 -0.8372217529752224 0.3329639414792058 -0.28828951730150365 0.21135381871857017 -0.27532372257073146 -0.8283888969286661 -0.6930551783991805 0.40304001111431664 0.24268574486427363 -0.3652244758958738 -0.35918204133892884 0.3888465818548801 0.9757193823501689 -0.02723358528137032 0.23756767738021844 0.148239843712074 -0.9228863595711814 -0.7770069816316221 0.307012050635467 -0.2829238809555443 0.22869383740780336 0.934815989980242 -0.07861411804313945 -0.47859076925814326 0.48077873589585485 0.024185362152483902 0.5354478999674304 0.4420094800070635 -0.8431830043331112 0.4737023438096095 -0.7720662061982762 -0.09395363064427653 0.3113715309814764 0.29753366720873564 0.2506214410380567 -0.054793728234822536 0.8101244739178326 0.930820257176475 0.9766899637975079 0.5473393882995654 0.8010709393967608 0.005035488486661244 -0.5585378556685459 -0.5465263374496658 -0.3797107934910713 -0.055128745319325656 0.026232907855172183 -0.49626074807083964 0.7164170414795856 0.053275277318262315 -0.8000715161410925 0.06855123026215382 0.7287999895586619 0.33434117970973554 -0.22016622396090235 0.5038016059021828 -0.16057076398985193 0.8318596469909445 -0.5772243556078294 0.8706434578346067 -0.09204727263320667 -0.7405628288842712 -0.6803889909724485 -0.057558565272020745 -0.2451190411168649 -0.5195926558476891 -0.5283217294518461 -0.8074849273958042 -0.11883603279976485 -0.07236635551886739 0.08201524892391054 0.5365921437204801 0.37277330214677096 0.44497949134847903 0.6150416159921999 -0.5027602735259122 -0.7459429148906664 -0.7241140029171103 -0.8721605623063888 -0.6829758053846995 -0.19462669139414213 0.21459063326411987 0.8947317488089879 -0.24845357056669792 -0.4407165245544724 0.8115649631495063 -0.9514315296721412 -0.40280218878328045 -0.12648673979607228 0.6663081424270492 -0.6922968826953173 -0.9312559015242279 0.012175045844867505 -0.706391944174515 -0.16589360856218294 -0.17042627379583086 0.029824109465783177 -0.7595872024387356 0.33872551567666664 0.23202601023368796 0.4215893454865558 0.18622913330347735 0.3982606611054318 -0.526616229071837 0.19047867209604963 0.14479256443977917 -0.6622599143829468 0.4651369702398165 0.3043838560477312 0.11188537368144313 -0.1731691920963112 -0.4690279381125897 0.16969860819211258 0.35739491839257176 0.5417150210870221 -0.9215756852405741 0.8892302377555326 -0.0768575197269401 0.6460107286881724 0.94302165590695 0.00510591766122892 0.22243271642270757 -0.18546392623001373 -0.3672252675613705 0.9720489570003334 -0.8120624943345327 -0.49004895902307233 -0.37637152541544583 0.1340683959156348 -0.28417601107758395 -0.57522098551377 -0.9403511640783677 -0.2725139625431785 -0.9741956383006862 -0.26780478641711625 0.3316035695958863 0.6000579426980701 -0.4985146409891448 0.8687512124904437 0.5150048086652388 0.36911001778820074 -0.6928113024871061 0.27747536039403853 -0.8564743381927467 0.4039001977971195 -0.06992062068314997 -0.553304428582196 0.603882154825768 0.7814402908686151 -0.4261062757571723 +-0.6004797553840027 0.9845600227939781 -0.8554094284350144 0.35880935538726266 -0.36960733165260184 -0.3990697933680447 -0.8914795141552221 0.2229511488478193 0.28522346475727645 0.9728834762460532 0.32790082890130035 -0.5661455733618224 -0.2870260800586255 -0.14853972755949307 0.5873937421319593 -0.8439782258121533 0.16152559268567357 -0.5429217633276047 0.4792571345679555 -0.7853090004113674 -0.48546186061645225 -0.9613914108982409 0.878867185546033 -0.8623773138680633 0.45528314114301427 0.5377012001114401 0.7597686026444705 0.8008304742017378 -0.8346448056316691 -0.07173413479170954 0.28760988100903484 -0.22132846976559928 -0.1286518904781644 0.5513468278147875 0.8435692108566286 -0.5487933511781158 -0.41608367058801066 0.9585985888640913 0.7104733041689444 -0.6267839793947341 0.02599947233578659 -0.08102960700874595 0.8726753479560234 0.39999563363762225 -0.8195214679893794 -0.34927187078560684 0.41233761413520575 -0.2925491764476069 -0.7479397683029338 0.4915749075092626 0.6299504516761156 0.8936055129709319 0.4745574615503101 -0.6827196420035104 0.7157215693361141 0.17753830022704054 0.7417321421870586 -0.57008411443803 -0.6506668877003878 0.7632819380451814 -0.2287265139234067 0.012692443221198335 0.11162339058088455 0.321526402076866 -0.361133490964312 -0.00015584809558832902 0.656150445720922 0.05729736410138542 0.67398322386759 -0.5729373127329345 -0.7396662303112722 -0.16841002934626825 0.5899172300764521 -0.9819252751047738 -0.8874543497839715 -0.9563822081473166 -0.07611854636550319 -0.8108041858275186 -0.2474370642467092 -0.19038245912346152 0.0521756848925341 -0.7331910002586028 -0.23384878936242726 0.26444545676760156 -0.31340698333995576 0.7048394371850721 -0.0680807365584215 0.1558998833951435 -0.7646765803505327 0.5041400558862379 -0.5281841113610288 0.7085125268238699 -0.47613180580592873 -0.030285330881267836 -0.24574655951175006 -0.4884864853983064 -0.9643512401165721 -0.38563971205457914 0.3726006760061047 -0.22007571956553584 -0.6899972933515288 -0.7538023715872852 -0.6974132583868948 0.9573909049046592 -0.9416563456466114 0.1626038855961065 0.4278719575878871 0.8453621687588131 -0.8950596863134048 -0.50814848257413 0.5376420859283655 -0.9539464099556867 0.0055669969943001885 0.1603781016717598 -0.030773076608741068 0.9466066288747204 -0.599157278028233 -0.06640603819904123 -0.9951083817240265 -0.17582153147970647 -0.7945223882784345 -0.14116454081986962 0.23975618199566662 -0.18130269590056103 0.28645474943951665 -0.055049596540412526 0.24121603180228868 -0.6329646002545253 0.014311668634187091 -0.12256901509238505 -0.3481664253754475 -0.4946486419330496 0.2417046166371597 -0.683397771086661 0.7820843541955154 0.6413647849989226 0.24039504023650982 -0.291548399210501 -0.49565392587229806 0.3917994631007151 -0.36260926002355953 0.3238397197352565 0.4451761239543144 -0.8911915095715923 -0.3623179271143915 -0.10226449344873334 0.862715290588211 -0.8953013309459106 0.2984959560678928 0.7805333540742474 0.5360127185808572 0.6292752996764861 0.2283164770457018 0.4202271442397034 0.21028895411011916 -0.19803713340519713 -0.6929913270749342 -0.8343833014061208 -0.548156398695919 0.3878935633676073 0.7478249025448964 0.8386096821309743 -0.33850945585913195 -0.12057906700249732 0.026766269330988912 0.4241344660869517 0.021749094084618337 -0.8679256032453819 0.4915227685912966 -0.7579292135826792 0.6114923736981757 -0.7790020899903907 0.4403413447160711 0.3218552153280678 -0.8972493059576863 0.16022452448494806 -0.5622663413290807 0.1675860231809687 0.15988222057816515 0.894339324807947 -0.7303297163577966 -0.6440242215084568 0.7204391457165735 -0.9056264180589453 -0.3788294518090032 0.3740222980445109 0.11767962435089174 -0.8943651514137991 -0.9033879892968744 -0.912052246704538 -0.9491939497571462 -0.5800748691745667 -0.5850829928236734 0.8219758384964595 -0.05802653586014306 0.17169055779374864 -0.5057341072440409 0.761111612864815 0.6167572792783478 0.5241638196170602 +-0.9698191316718061 0.4664503120081607 -0.3280317764022267 0.17317248618505388 -0.2762408828168881 -0.06296659808642469 0.2607621732724097 0.6795948270323084 0.25091907629269206 0.45403539476562305 -0.24651791572630266 0.9045205219882508 0.5551067477576979 0.7453259859769918 0.10673661667762624 0.4245913871119489 0.5058168735444604 -0.19514485812118987 0.3667568898595539 0.33794042841046346 -0.36091852402868985 -0.27778667156787673 0.13547868697894327 0.07286912682603841 0.15622584665213535 -0.3189835564483703 -0.041513864448041726 -0.44568370225192155 0.643094051041736 -0.2135885412975722 -0.7346366654802159 -0.7733781683326464 0.20706220304371947 0.97191478153248 0.01647362478134684 0.8844389347213157 -0.5196697589783303 -0.5001602056694132 0.1566593237324383 -0.8785563618490202 0.9242449215452226 0.10747812241640164 0.514387154967477 -0.058909681316092755 0.19084540077005707 0.4286808895448533 0.5583719817847517 -0.3291777625563528 0.5352406776142087 -0.024943938897529883 -0.9492591064001177 -0.030706629637182514 0.9944889275888551 0.2552888132801827 -0.5602143358576772 -0.4568204971614773 -0.037287039193242055 0.3852696030485159 -0.07024822227289884 0.6723008881091772 0.4085582536204906 0.8049178380925546 0.19898802034383056 0.3135990433036131 -0.8325525543326677 -0.5372254092763811 -0.9166641552572583 0.6017944260407933 -0.2425984539262973 0.7473603673812421 0.22008268925704821 0.12172137730282362 -0.22340453496874613 -0.15264721416343363 -0.4967318125455287 -0.674169153087796 -0.002545111814914014 -0.06529195269659094 0.35808195121866104 -0.5814088924192347 -0.7107105983582296 -0.8828978678168915 0.1437671368335458 -0.29550866949179877 -0.8691412459823582 -0.8632797145794369 0.6711466731163194 0.6929274702762518 -0.06445166850562467 -0.004219932780076707 -0.8428508008961566 -0.6115971550020809 -0.7536711746037543 -0.39265555768575244 -0.9573606690640315 -0.8759069000851232 0.7463005334813484 0.9782331844761392 0.09096238412569502 0.7286439972478431 -0.753183552977116 0.09216417490546047 -0.6786695919543217 -0.3293252054479714 0.10513998442289951 0.6602306559771813 0.8566427726161532 -0.20619742607000835 -0.2254287887383981 0.14743130139033656 0.29825415314140624 -0.3590033537627144 0.7488964792667618 -0.32149235466689086 0.43403265775849253 0.11777515576213582 0.26063189166466216 0.3470841686821229 -0.07981427961620025 -0.970635277518411 -0.4801473299305703 0.49665846854191753 0.8618649385869381 -0.7185848560653976 0.6568590879104323 0.15729900491514148 -0.5707788492188468 0.33962688382377126 0.8500933576640897 0.379821531189916 -0.5787325250550619 0.9864140498372762 -0.6699557807802954 0.4289455830316471 0.8296383800996991 0.09596560606511306 -0.7198214359773671 0.9259568947538352 -0.5394050106665491 -0.27849165067400206 0.32973976352895007 -0.4890564164782871 0.8925597262948126 -0.8028742863110248 -0.974810310211023 0.6259028983835426 -0.4851172338311669 0.4138306083660279 0.020142029984378196 -0.3338687537570997 0.4862342641821267 0.2205679431752352 0.04644878917193007 0.048789293407771606 -0.8637569645904069 0.35513644508282294 -0.0878542136065914 -0.18004173490627728 0.23137337057538088 0.32744816231972207 0.9430844612164466 -0.8808287824886907 0.5556274509077084 0.6831969587581341 0.48626767538423454 -0.5462286375138015 0.9573717384745315 -0.9522974153637778 -0.14599033840415787 0.8128403945840548 -0.09446068575586164 -0.5214505238965497 -0.674270764497497 0.48116298450805894 0.23757301243729656 -0.11488177825487034 -0.7935112222956182 -0.6145742041723476 -0.18599808576684795 0.29505145294815116 0.18621043351882105 -0.987501650072838 0.23991807023623557 -0.00833548200548706 0.1650285890041021 0.2216012857585261 -0.43201292713568384 0.6822783690768173 0.20761875322945111 0.8002540045517952 -0.3467696344178488 -0.3771250648993054 0.04887869413395318 -0.9915017293888193 -0.9871583162534647 -0.05875859346335788 0.7881160090409369 -0.601229449983582 -0.02372073714428624 -0.13241395488778274 +-0.9162101177477244 0.8485302243094586 -0.6471324702803367 0.25945362758678003 -0.28491202992898024 -0.727629031722276 -0.01744073367424548 0.4909326134354599 0.45645388550130406 0.4068770106377211 -0.03713602348565903 0.8601867176658773 0.7909561828563432 0.7981537392920328 -0.3265591097820968 -0.6023653199221739 -0.3741249759834695 -0.7061012241126292 -0.6126326634634509 -0.9131143056597435 0.48711207928476785 0.7601778721684422 0.9022984150271214 0.6094395278757185 0.017438978222917623 -0.6979442404980045 0.7617945774356616 0.8418515022481379 -0.5970147819752389 -0.7945350562284021 -0.3476243457173438 -0.8082595003299158 0.8128594555531876 -0.30344657151612653 0.10524890179562729 0.9646947276054636 -0.8675408461675946 -0.01106607415422367 0.1569462771565946 0.4702568821003241 0.5429394559192131 -0.9494237056766031 -0.5524687909473245 0.6598563930597792 -0.11538879883466158 -0.05408222627295345 -0.8146174927246783 0.704754745652787 0.8857798065542055 0.9460221949237819 -0.5874696610590471 -0.018853601361435546 -0.8032855477905969 -0.8397937132830182 -0.20312168286680676 0.0648613241757312 -0.8816552077161595 -0.5471959108550453 -0.8771050798068998 0.26765093752992186 0.08036665327703774 -0.4208765268273078 -0.42134018525379413 -0.9345969388427198 -0.098852564668789 0.2580838277436217 0.6661831633347373 -0.6254769190610687 -0.622495459821564 -0.9212747352278619 -0.14890739230349137 0.2726390702719137 -0.6055378073507645 0.8285712502544254 0.10124267548939758 0.7274256987427616 -0.8094617221338425 0.5734499480283131 -0.8181806955954498 0.16454343103036084 0.37847081582766684 0.22965348487135717 0.8229911289914185 0.4160846720756468 0.34834998563409925 -0.8320968644390982 -0.1914162226070968 0.9219063661462197 0.6911059137766673 0.08742701277008846 0.5388275006508827 -0.6277023985345507 -0.7195228420813962 -0.10474940439392455 -0.6572425202206891 0.3561251762422688 0.8103759122526826 -0.8202188449083347 0.6789390741198988 0.08585258755936653 -0.9844230884671932 0.4732775354069674 0.39156138618031977 -0.1493944061488568 -0.2937903049568058 0.008742265053789389 0.8049436736849143 -0.762245309867766 0.4050131137608888 -0.06948761373769452 -0.48598406902402114 0.3701106827689551 -0.20666376550062027 -0.9679937462045995 -0.04007077822241567 0.6699080303428842 -0.863444872090753 0.6461458853868709 0.8544585603533341 -0.09092648559206151 0.3474165765478081 -0.5076444687501132 -0.3490687664152943 0.9306036975182641 -0.18670479228557046 -0.8301388948188804 0.29702258479869137 -0.8072720269648423 -0.7514780993180201 -0.1953017780137123 -0.06407539538532658 -0.9670878108568994 0.8624477927583563 -0.38324774449516785 -0.4743863450313237 0.5425668121139886 -0.5924507916547943 -0.43948696418751165 0.4866076103709114 0.5456382019054686 -0.08018285970267569 0.64600413701677 -0.20067251576536926 -0.9776369775465279 0.8913905816203578 0.9622576232598035 0.5379200759502252 0.9987794391247105 -0.7190542018297394 -0.17744840079944058 0.48574092276295655 -0.31661747364585247 0.13339334176741602 0.049912935653240176 -0.3473588989859222 -0.7392015198957063 -0.2076135856578729 -0.26601778790623953 0.05195875028886543 -0.1449749909207534 -0.13413261996514914 0.32860619135686897 -0.5939393872161443 -0.021749076409900425 0.42900784399302627 -0.20285822102691786 -0.13464881106659998 -0.0715041648308199 0.4846874654556943 -0.5949168329666465 -0.20079000807527425 -0.14296031699680456 0.9672319531996683 0.834148995473639 -0.2258819642488683 -0.08271093259320628 0.7604838993779888 -0.8160249496310796 -0.5885681015003597 0.5827888342409924 -0.22414481395972063 -0.34850460006011397 -0.838563481172818 0.5180724946990805 -0.761852604377155 0.45659813586015785 -0.4724680448131773 -0.3808748544751617 0.312394843093875 -0.723193456466892 0.30372695304879294 -0.7301134784158141 -0.1049488188767731 -0.936321953876083 0.7315558416743577 0.4028611723802167 0.7013866480959339 -0.5705801293825394 -0.9923765580220316 -0.00907162888775459 +-0.0442804692865193 -0.330408133019658 0.07587881075799752 0.8550430276563283 -0.2344652631628945 -0.8047641698430079 -0.3116920222469075 0.9680518849870001 -0.9791743779056921 0.5608702937182131 0.781158780246503 0.7145439962305877 -0.6187139814168132 0.9485041526250482 0.20977070042698842 0.41395577330707134 0.3502399394314468 -0.48924693990995216 -0.8281880893629323 0.9353089524033622 -0.1898595797693523 0.10395559249147035 -0.38712857216694374 -0.3157546147249599 0.9147197552633868 0.6051849064715042 -0.7679178406657678 0.4164548555009253 0.07909166744906848 -0.8303560011268014 0.131458942512942 0.8667577815805689 -0.5206831583036968 0.0335195871633005 -0.1896383236414798 0.6287732407173288 0.32874931685481257 0.17498555629672197 -0.13110833608032646 -0.7752736658783437 -0.7651913998584137 -0.9411999951074312 0.8686821500942938 -0.10781191844155558 0.6579543086443036 -0.346485038789502 0.03840035888994087 0.7700668161964537 0.35052593803106524 0.8424402981991035 -0.4804672016333811 -0.16469212828469426 -0.020162401180475298 0.12143592531548641 -0.7362199719857712 -0.4840079200709566 0.9079708921037593 -0.9070111335964475 0.35347014835224777 -0.7347408582805142 0.23993093852937442 0.7804988481696382 -0.598896887708602 -0.6870540733369943 0.15419607846640515 -0.46283377788576696 0.3498526053609554 -0.8126031611675284 -0.733539623643537 0.12988442055248606 0.32729602270360947 -0.25003562766379717 -0.40211523214799927 0.05058223844102416 -0.8471237954419373 -0.9101157863637437 -0.060254879507565695 -0.8395386874001451 0.5953589587290251 -0.6529411019788527 0.4785935366846392 0.34893340911357207 -0.6586282168419251 0.7485530449142053 -0.47849070924262116 -0.20767234156452097 0.9179246620883721 0.08631741181420205 -0.16898013984586413 -0.6282974813229465 0.7488066794941834 -0.525051729489965 0.29293869024204433 -0.9531791926293929 0.478661954634666 0.7464417223879407 0.11293200619749189 0.5443884290513579 -0.18017026283093274 0.512936293190561 0.7278281379912681 0.9876365997931025 -0.9523518066292742 -0.0910745637800614 -0.8068454615616918 -0.9965565714373419 0.6453272252357409 0.733861599524892 -0.4721627096200465 -0.1308014486400937 0.030326807643298315 0.4026552601089959 -0.8768868339172957 -0.969599992494657 -0.6083677791243605 -0.18193726716198166 -0.09683861831448448 -0.8959281286445349 0.3363136600552845 -0.6623639071085261 0.16475600041338678 -0.5044261866260134 -0.31042333961248003 0.1789600647855396 0.06835073325817276 0.18642967260514376 0.34773289065133084 -0.7792866561714329 0.8240668942925153 -0.6630894686125246 -0.34465727051342165 -0.006725030175241065 -0.036179088990335284 0.6320182667640304 0.664027951232459 -0.11533323802045148 0.7267116762547092 -0.9363261292720717 0.5762060235063895 0.0614491028248374 0.18493467466287528 -0.18376353474565343 0.1130112742620828 -0.44729031356292603 0.9891660630647059 0.18496418885295696 0.9664991420523685 -0.8093753776807606 -0.6024686156411434 0.9502569214535741 0.9558980304487303 0.6614457897687227 -0.5226397293344844 -0.07212293420823812 -0.9455854749646107 -0.6211531247871731 -0.956173896697841 0.06282379882683098 0.19963123528836824 -0.16687415273181827 0.05396715355880999 0.9666946422717269 -0.23887153501495262 0.440952489713756 0.9231029784956712 0.6940182526258223 -0.4374745108266931 -0.33014914741984547 0.9628357828332113 -0.5953810081553201 0.595178125927297 -0.5488765471829569 0.9793617931864174 0.739289002227679 0.29732090509626374 -0.5271058040920913 0.20563473356995732 -0.2130257151120818 0.6476551332211462 0.308786659184612 0.22343949789639206 0.3676255595842737 0.09518118808299447 -0.664250513033235 0.3450987428791292 -0.6348324729316641 0.722660903323161 -0.654382721599996 0.632014818004839 0.9990696435452446 0.5796696230516869 0.03198838361703493 0.37995303579693673 0.10964022857526667 0.6264776172392508 0.8220734028773871 0.7167911784325751 0.16063782788944847 -0.9565889462772978 0.7429329770336022 +0.7133236129291438 -0.3165474231019971 0.7867110974498737 -0.24018668521118647 0.7577803751248839 -0.9016233256719772 -0.5641347261765686 -0.06405453188538002 0.3865188115048148 -0.8250965683185163 0.8606466137731639 -0.40170409125884055 0.9734175140394634 0.21437685484350721 -0.26053914668885203 0.054162421777892655 0.49710709202967585 0.7150641924792625 0.32863580472849696 0.20663076380618373 -0.13621430004528645 -0.9038305628363246 -0.3604837565431005 -0.6626566429913101 -0.4901938584888341 -0.07658349255001462 -0.6468861880043544 -0.16142268892783052 -0.7690123344184063 -0.5024597334605256 -0.44528813551811086 -0.1457650681437308 -0.29574211295390285 0.6006176264085521 -0.9310770559392838 0.4346893872525788 0.6731387181779305 -0.6794127739155178 0.14936759843859715 -0.10303490842827423 -0.5531388188343402 0.45510053952202 0.9252151060841001 0.6892598265586694 0.5313102555947078 0.5574451550716628 -0.9418513792047429 -0.4844060802004624 0.18704580212581545 0.7249607804317759 0.8391440901595415 -0.3401867718109177 0.7945620931118813 -0.9737367550534006 -0.08391874049942905 0.6840664571215007 0.19700475377045512 0.48379542362433603 -0.896077551971789 -0.5724848340777864 0.947470095380633 -0.13375392522940177 0.3734511137973211 0.8498868527968444 0.41340203970753664 0.2439250903121457 -0.2055818599716639 -0.609564513467264 -0.13441388219697914 0.7500004278785102 0.6665178154216942 0.6600160075605486 -0.49947999219804884 0.4232454476363665 0.7638526530793626 -0.5466266355399634 -0.16691036473997434 -0.4364560238493682 0.9059100462055003 0.3326948734397228 0.7148320610223917 -0.12409607706088388 -0.6865622074599727 0.7116050635571514 -0.9606115486658073 0.2560899938702248 0.7352891547857929 0.4663893963795227 0.08916377691086819 0.9933252606343634 -0.8034384186651868 0.3996986072275832 0.46245091776204794 -0.9629241058074636 -0.30551280694686156 0.8160363209515047 -0.6123237267513608 0.0948902965292695 0.5262866865687397 0.8648052131487809 0.8935731595016942 -0.6467875078032921 -0.5944279983549081 0.3376512979947306 -0.4340133929973644 -0.47262188955067175 -0.4652539057412781 -0.6048866791978593 0.36373322105611394 0.6030722908756401 -0.2777094996816536 -0.9571369872926365 -0.8411765937664613 -0.9235083082495099 0.2636843131617552 0.686029185785056 -0.013003435451275136 0.3564365306569104 -0.7464522539556557 -0.5562108196254283 0.1377916309073539 -0.09122278008613072 -0.6992858850304342 -0.3172289452912509 0.5546978142765764 -0.373474964188967 -0.6487965295496625 -0.4583354694848847 0.13835903576052888 -0.19402849249201903 -0.9472198836204737 -0.9371487852175446 -0.05719579985168566 0.4054425237249566 0.4740182977496674 0.41363489057215297 -0.9166879369292811 -0.4533515538220658 0.3261561868521461 0.2823198643032405 0.288888833688574 -0.27048569985240944 0.07322435930100601 0.3604614261709853 -0.0744597824810056 0.7990937199748547 0.9837508156883741 -0.6415499521995336 0.06353202557098525 -0.5082557839155828 -0.44172142227630995 -0.3471411907975539 -0.7350553700020832 -0.11574720815465667 -0.8802430092655062 0.2178933023089853 0.3449766236554499 -0.19536966235040176 0.10194916646255758 -0.33117452644041534 0.7642463245396989 -0.3394454496078436 -0.3654541902319097 0.8608484561492158 -0.8815809280895217 0.19805246222689799 0.517504835165685 -0.6980123449484918 0.1167037826008932 -0.620881691227509 -0.14454152531465958 -0.19688346869705664 -0.10408025935670229 0.4246709063818248 -0.4720129881385027 -0.8356221287344074 -0.1834159934984705 -0.2542121940098103 -0.7877070631286385 0.46921722593640514 0.07041955584675041 0.24559217687141577 0.8920063254737622 0.24475422227936017 0.6783000819333458 0.8636014887334886 -0.3962177586162765 -0.21310118016789414 -0.20801192046926764 -0.7694473908814814 0.806920220557263 -0.35658683893885157 0.8158284194997734 -0.6673609663488898 0.28843221825888876 0.5793648548845716 -0.4370583973616151 0.9512912673118568 0.7422247597200162 -0.34155068185190585 +-0.34075006687817155 -0.35579934971291727 0.16317656177633721 0.09815283090295357 0.010600807690117842 0.19914665511811025 0.24067614368880275 0.28643138726103645 0.684176187427125 -0.6222795409008763 -0.9635645843191554 0.1276851115204778 0.3013868169709468 0.7014749843568464 0.6437851682808271 0.5810003262062753 -0.0782090222764682 -0.4005170817070718 -0.08168157175569024 0.08314950839901347 -0.939065932701415 0.16114245822732998 0.7899135178179142 0.6556467566953608 0.405079572671599 -0.26553779079463036 -0.4059170245768391 0.974014084058352 0.949919356143601 0.9179951026722566 -0.8944354759788247 0.6913604356325735 -0.2876663341505312 -0.02007583014941261 0.8943290211131834 0.3849010814261282 0.1385571986526255 0.9454948290118592 -0.11363698085324492 -0.2560522587849563 0.6075508431457046 -0.09926010352975556 0.6700073273194416 -0.6459817415784885 -0.7649311953717057 0.6928195435271398 -0.5413868839534541 0.646848700945108 0.1523521832260566 -0.7806792600305799 -0.9121264974787651 -0.9456250146340437 -0.4304153709246259 -0.5511303679115529 0.3869336416504603 0.8064377175791042 -0.7878632501409055 0.9269488885049197 0.3925285784919479 0.5173252583526267 0.6821247981605651 -0.5296611027502052 -0.47280752321270647 -0.7223405875613518 0.09980582250950443 0.983034860370086 -0.3745702874219965 -0.25181518636202593 -0.5294987102757374 0.9715525411914399 -0.11482826726746476 0.34685461111766136 -0.38478139387310284 -0.5597274260304579 0.5913092468447538 0.49709033192124563 0.8833732788588695 0.4248127972677065 -0.9857158598336668 0.6182487813480717 -0.09569245253193026 0.8562091787834165 0.3920952568090721 0.044966387511979455 -0.6183815711947327 0.20737789246829674 -0.5756730228815881 -0.03615110985431569 0.4278176038646977 0.43215774382641015 0.08352045073739789 -0.8855691399173451 0.14974302216820123 0.9562507338303361 -0.19095842527616114 -0.22543338343171282 -0.1805614598936276 -0.9494051560996812 0.0005329761181349646 -0.5635472462071682 -0.6272079878314838 -0.18471601257125347 0.7443661611039074 0.32479483270446274 -0.22282445036655174 0.3378206149914733 -0.1383791730558135 -0.8962371057024556 -0.7730789925582271 -0.5627506330761509 -0.8891633667942844 0.08292739470580601 -0.0836712306553653 -0.9262610493715104 -0.390546489073093 0.3779791114367188 0.8248128781664328 0.7388167748857126 -0.05225035518792853 -0.12306471785954431 -0.042727124822291795 -0.08323031742410913 -0.953956002891954 0.06125820133556048 0.27946068360689846 0.5499863536550234 0.7955965034999668 0.5424439109438917 -0.4594932254879429 -0.24644392077938582 -0.4558059779076975 -0.3932497683135363 -0.02910796383112757 -0.1473137490509282 -0.5914644861186298 0.7401443095354394 0.598465491545882 0.5505917972844163 -0.503854421305832 0.7149376301620554 -0.9866530010423658 -0.3448957090381479 -0.6373184845197617 0.24353090822931955 0.6493246105030601 -0.8402965532919187 -0.527524245214569 0.7354934640401285 0.8461301629124818 -0.5588919903748579 -0.15656716728149322 0.19692706335932875 0.6729390772117849 0.5623489520898866 0.5223844076195727 0.864825537988791 -0.08391821191571558 -0.03337998425104716 -0.8467286314622273 0.27740617973985815 -0.30805716311577913 -0.30119163930090176 -0.7238757239748981 0.5845715192884933 -0.5116793730954348 0.33640857162629123 0.16826320683113005 0.3142408343490459 0.5983673862512024 0.6191263553711261 0.016025316929462186 -0.1477546761331039 -0.8005514186498617 -0.9941298322764165 -0.6126564699535233 -0.6221885423779314 -0.03424504761669045 0.0005256867185154945 -0.2677455779019293 0.9954196164070062 -0.8069261599623738 -0.8860541867052767 0.5195580350444422 -0.7511756843548367 0.23313594475174226 -0.1777431775284959 0.9938121410172152 -0.1301771303323398 0.5497158593987246 -0.9519983728451116 0.2295140908851263 0.9014730392693031 0.6588028015637375 -0.5856229173657728 -0.19266985022365346 0.5613218936503175 0.856486884498421 0.06769035810648694 -0.4343899466963772 0.9942624571606216 +-0.5732458777357634 0.390686153170674 0.05692626233497644 0.4604915690553453 -0.928728015409191 -0.596953480062586 -0.5447169816435837 0.9492992704349508 0.08378492913229563 -0.07185590326204339 -0.35711835817705717 0.08450242998305857 0.9852515408921911 0.3838027227980878 -0.7903631207205042 -0.9280216077823029 0.39052578972547436 0.09147917334572098 -0.833499681342315 0.7112219069731236 0.09674980403146449 0.4212256968336192 -0.21653118490039125 -0.7746293515360774 0.5970047513286729 -0.6435135064863242 -0.9524374256190309 0.2494726309643469 -0.5200202802910083 -0.799834897053348 0.9847574937270573 0.04153496009457669 -0.6514620383184269 0.048901218956745485 -0.20753028835257847 -0.2812935499254565 0.13314555105456294 0.28259216908961604 0.8869278677601489 -0.4084305563375106 0.10947121031020202 0.26011413040869447 -0.6914593817881967 0.4349405140467342 0.7459398938674013 -0.9657657997718911 -0.3713118851959105 0.18019005262524557 0.7815227201248245 0.36148288193208655 -0.3854342224928662 -0.9727198910117414 0.5583288196255005 0.5427548103491004 -0.7873869159860514 0.022191528922764103 -0.498811877586 0.883887266984352 -0.684976120667987 -0.09043344800950148 0.18703848372385456 0.04307998623459497 -0.5051835218179079 -0.7445436119003881 -0.2168743442024561 -0.25399367144824203 -0.8469424771270702 -0.35870691770274266 0.9358696970409446 0.453758320397889 -0.8569000078086306 0.9009189197338339 -0.24118208960310805 -0.040496402643892315 0.7268410849134876 -0.3276242267370546 -0.8907958521563415 -0.25970377236007414 0.9070643564084364 -0.7067519051317599 0.04623205287287502 -0.9175105550262417 -0.31152455328444706 -0.7081213670459958 -0.17452564231559586 -0.3345081306360975 0.8828969337592905 -0.8051669739975231 -0.22552565273802205 0.6691208491036422 -0.26795334089515355 -0.09918119597762964 0.20267829150854477 -0.32058203175020217 -0.1597630496928013 -0.5285283002632315 -0.30014055606989665 -0.19703426004193547 0.05532536347328154 0.721793870430711 -0.9812806035988311 -0.595440436923885 -0.046964900738976745 0.9190377268066259 -0.3614653996368109 0.41994904649852627 -0.8645830390310243 -0.9317863310644179 -0.9388179930842768 -0.9897712033562849 0.6881904945523658 0.043093741989926215 -0.2195631384546073 0.889596985425841 0.16878539669826287 -0.5251987087977432 0.34669413329927945 0.6296224861103956 -0.20813029309798847 -0.5770381336762509 0.5889763929035756 0.04778327432272578 -0.6932415993891685 -0.301472852593359 0.8107375691119554 0.2837063641144939 0.9155026810254008 0.7323614350295875 0.8784178424556375 -0.012251210722306505 -0.7294887200102564 -0.3930930673843642 0.5646232336818673 -0.1845202130839696 -0.8986883298000095 -0.4533637646513775 0.48743064119148505 -0.512780823423358 0.9926171875078882 -0.3664566540418497 0.11035119655296777 0.97751556647823 -0.10368976754727433 0.6488911473652006 0.6303771138661469 0.7255932355999404 0.3576238401141638 -0.4379268905531044 -0.4039986532276898 -0.9342506769450434 0.20534628961828427 -0.5723735790807094 -0.09595496785132451 -0.8382213353327497 0.5684715231984496 0.26127383217214195 0.1735388965647262 -0.12288315294329655 0.8305961305765797 0.7406289698512512 0.7928429100911709 0.9889713499946275 0.900474448993859 -0.6171236554926263 0.8891083063626517 0.00670823171749646 -0.6461565931998585 0.9664768255921166 -0.4117276254093054 0.9191170246967952 0.9955150727953435 -0.021514892898133242 -0.897797686597372 -0.6540174394087346 -0.286124734379374 0.8819332739083312 -0.772068248591562 0.31332877795544833 -0.2713772247362993 0.37291949716278094 -0.8286104400453498 0.7414584209912296 -0.8007263572315353 0.9986142045416502 0.1362501930471094 0.3948253465261302 0.24753935857517262 0.818373944262514 0.8639182604715605 -0.5311613615188562 0.40432750519155003 -0.9015415741920954 -0.5529633911335379 -0.500078977675078 -0.6470048804811985 0.5551905210213515 0.18597000276069675 -0.6133028479661422 0.39323439683954975 -0.07535299341789936 +-0.810403734129483 0.7577378474815395 -0.16993250133173254 -0.4114019669740683 0.04241007659427032 -0.2764512254019822 -0.2450353663983027 0.7985162580049976 0.11751075785361897 -0.7580330435520224 -0.21514951786991676 0.1081876769793797 0.49843494514008135 -0.47222224739016583 0.5579494971634498 0.8789165543499862 -0.5317138568779625 0.49222288557767224 0.73373549480646 -0.1549786131836952 0.9831780515630986 -0.4455233285918654 0.06857936245366147 0.2546692800999546 0.8154858176684772 -0.5682749206295201 0.2914055675192406 -0.9056847242781845 0.1741006165434993 0.6996923733039535 0.28213307983832525 0.029160086742447078 0.021285726349108858 -0.23328166823241459 -0.48452103759304266 -0.5358979754654589 -0.3179976707494223 0.8969184940360364 0.37636896546427234 0.134411439106642 -0.4074688206145278 0.27997318647784186 -0.2696090740516084 -0.5660803139086796 -0.10706557214162671 -0.29236518268051626 -0.10611985555291814 -0.35879816203009196 -0.35485077670057685 0.028815041606410574 -0.6617795012948748 -0.21617709561573917 0.6690735253424331 0.24041143342109628 -0.3909719574067181 0.07743104171473036 -0.04592633372074317 0.7506721279880337 0.779483879987722 -0.3152425917624231 0.9905458912899161 -0.1341806334725244 0.1224767775075386 -0.053573658945463176 0.24518818283257304 -0.1225536318295839 -0.41807726304225157 -0.656807260314384 0.8841537756874482 -0.8912495156826521 0.773781061521736 0.4577388334263801 -0.607996467728293 -0.03050823078112841 0.7091176205640868 -0.2751068771502305 0.4688779914351848 0.27539489896363656 -0.16004253178699157 -0.7178054432584406 -0.9509803227140854 0.18084042792633181 -0.03623475889222316 -0.6549421068265704 0.017310689037443483 -0.1851518549198219 0.005456476421615841 0.16715848974557934 0.9133247987554483 0.8092060469703677 -0.5199839949315768 -0.5278003360249699 -0.7120468738551788 0.16668803408144006 -0.20517777517246816 -0.20865073409232382 0.5376474627538939 0.7726984529309968 -0.2561194246219345 -0.40602863655056676 0.5868044739007956 -0.9450771202265562 -0.9960388892549958 0.8298000973340187 0.31077856108690094 -0.5058748595910034 -0.16895764030090543 -0.7627269182989631 -0.017078194235462085 0.48802774210533717 -0.4451703699262748 -0.6875511206847973 0.6039546901304054 -0.9509351564994624 0.12680597987181708 0.7685524533453432 0.8920793705280767 -0.4144798749231975 0.539766464276221 -0.5494466084999401 0.8094192329488623 -0.3626347560676846 0.4609507052773536 -0.7268133828265075 -0.8766088210891003 -0.7724718768926231 -0.9762492053641216 0.522499807485959 0.9536409270206863 0.31339486044405973 0.612565563314547 -0.6827637622039744 -0.7055712543437977 -0.21289547803732956 -0.6836923564585 0.09897248465385355 -0.9016725218611135 -0.929622652285282 0.9781078685030176 -0.8285303238403336 0.6820430964407806 0.9657224450877855 0.21741926147533253 0.5036844276160046 -0.7155686421195373 -0.27071134342818604 0.9947185541339596 -0.3777552680406111 0.3198073689204519 -0.7976962174883815 -0.4756385876792957 0.9839133972426655 0.3897671049409479 0.3200981481403582 -0.3435113629989164 0.9375845735933204 -0.5683540890592016 0.7968395592329183 0.8916057379538211 -0.8102019915422591 -0.706115380899496 0.671765114029105 0.5818350774391043 0.8995485186296128 -0.3790272584985519 0.6540465748728643 -0.13483980438930798 -0.991675609915772 0.9484180959294706 0.9055349892732729 -0.4322485621020593 0.40005751301168613 0.2895096781309803 -0.4640771811796691 -0.1173199508007341 -0.9891926978633334 -0.8669978730141148 0.8332476413026364 0.7957214618972541 0.8622916018408366 -0.6159750657218186 0.8207497342546322 0.7554301234050917 -0.8482339905566572 0.1321556152954133 0.6720910356702585 0.2881311308351233 -0.16963799896714038 0.44486649424474267 -0.9300326809213146 -0.7074296663878104 -0.5866348881589576 0.24687663792313463 0.7477487231004405 0.33502681965679715 0.1859727439428165 0.3033553987654507 0.13739143161035083 -0.4066332483925521 0.9375066269343784 +0.7365838942435199 -0.413824029740139 0.2415896419525958 -0.6405571864018602 0.6671093009439368 -0.5482935851253157 -0.6338304409333799 0.8092202288210042 0.685783808544451 0.9150335894190911 0.45137840884040314 -0.5118667677723767 0.3356358310742331 -0.4489462550940191 0.6000039204402621 -0.11628245066100118 -0.6971190589380221 -0.9902907148197209 0.12799920107187468 0.3783054812259017 -0.15700481992414006 0.9218466454026069 0.4895396424433127 -0.6137947692045933 0.5910609039570653 -0.6678138577646366 0.12419744242214614 0.4273917600241699 0.9305848910190928 0.8809611753109146 -0.46606920341551006 -0.2698182109454914 0.3960664936440317 -0.8288249774420653 -0.44566090072436526 0.00045524272497021734 0.09619325765262143 0.4110556505510943 -0.9577489784928799 0.8069685235226707 0.15156990209794263 0.1155532688227916 -0.655287103433791 0.40665614483405377 0.6835236987115529 -0.15659880622866118 0.3833092981972015 -0.16261283705205942 -0.003565962365384312 -0.3351085290849891 -0.45753796301980776 0.781486388126003 -0.12981695087576384 -0.3201005989015986 -0.9327528067620339 -0.2119099142791312 0.9702929223295327 0.6970032420499948 0.7231993519071442 0.669485703996102 -0.4750675844522396 -0.3680057629852689 0.2516847866979026 -0.625470895741703 0.10192624308281695 0.6293381467851544 0.5363070435669175 -0.7213754481930459 0.48061188071273575 -0.7634350953949809 0.04999263992162528 -0.9403711500109155 0.22324536372013837 0.24967456153063416 0.04073750150728195 -0.9719036694096239 0.23308631683374292 -0.2822766768789031 -0.7649131583917508 0.4908286302833933 -0.6891787142695871 -0.8409906191951493 0.34281771991846877 0.4279564672250329 0.3697547444639855 -0.9858818100931479 -0.9600391795073862 -0.6549814309816335 0.9672170036734862 0.9311845916789954 0.6667756431115823 -0.16932911316121202 -0.38524485482641513 0.8264878603825829 0.19502787776041397 -0.3858858108028811 -0.4793708849921068 -0.20471260062466112 0.6143502983409153 -0.397014484430221 -0.23947767521760865 -0.7139511335338389 -0.1334534938374794 0.8141991004131137 -0.33308983914563495 -0.054977596370227255 0.5601752795894797 -0.6616536153266745 -0.3298901636248095 -0.6469903948607691 0.4754296882690001 -0.2629789481986389 -0.5461786737770318 -0.4295797394650953 -0.8976915245419654 0.37465515625092105 -0.383965258203415 -0.8361648075764296 0.24545556162196047 0.3707442741397464 0.07730022669442493 0.3282348500136125 -0.6256924755468611 -0.341637929483225 -0.8684328068404172 0.9558586702704146 0.564226540376459 -0.2374722165794665 0.008758087209885579 -0.887437990809645 -0.4074067174351452 0.591322531833602 0.2801789734178153 -0.8426745486011198 0.40468139289062743 -0.16282217397866505 -0.19204550084732874 -0.8658487067449456 -0.5119892069320757 0.9705045367136691 -0.3728193826917374 -0.8554157401515123 -0.9500620843924992 0.5676454981891865 0.5999072285931497 -0.9265726300527068 0.3704767160512161 0.9928234976710535 0.7740093068536527 -0.5577127600922565 0.1355237964299978 0.711348450349947 -0.4364822553563521 -0.5682975202877998 -0.688405906677078 -0.1297343709007419 -0.2073507498796685 0.08062423917681438 -0.6302050476772121 0.4655554930657073 -0.9931719160770867 0.9351126598565309 0.7644315011241627 -0.18087323838780178 -0.04196922098400613 -0.8586858804027735 0.28184110258384965 -0.6249614152155571 -0.7202766483839906 0.4374144884532767 -0.7527101796573703 -0.06546754197397231 0.26821709569206753 -0.8914269718374328 0.22892458447550523 0.8363739239291952 0.5239921583347478 0.00759874694484064 -0.9415169421312259 0.03885312073321989 0.9351322758561904 -0.25126535354156476 -0.11690748270458218 -0.1787616499821234 -0.23247157414374042 0.22116481320132375 0.3981609615447397 -0.2803115292023821 0.622938273677125 -0.4607156258737908 -0.1284999479210005 -0.13611508610641598 -0.8314555096668963 -0.44628752787837755 0.08969808947445479 0.9445091549061828 -0.44530764591818883 -0.03044787138529692 0.1300684552518454 0.1479813850568712 +-0.5379298642760948 0.5406713907387195 -0.6522654019212737 -0.9753476495123059 -0.2546350806328088 -0.38865255791295805 0.9221659508117224 -0.4695671941131989 -0.5443492246455011 -0.7401573340053298 0.61039637144038 0.46535901414811187 -0.9272435295536516 0.10431216578539937 -0.8669483604371226 -0.9383190148860452 0.6917293865320555 0.48980505106769945 0.3191558557852294 -0.5939555415599984 0.11410300775292526 -0.13167758943151298 -0.896388920159183 -0.4560009589626992 0.731333246446749 0.7147455809881578 0.16725880308629804 0.09416628809717675 0.5644056047638757 0.5728846697949475 -0.04107593064688153 -0.01299581758664936 0.06939568907149618 -0.9163411518400297 -0.49350558926308996 -0.8624308990577698 -0.34343147661217555 0.6124599926777283 -0.9521392176066239 0.41104601268795893 0.2706948592654199 0.23282922475048773 0.0753710810076651 0.5234569617122791 0.9673361422481561 0.10465083377298723 0.9251302277099192 0.3036430425281573 0.12376450971896702 -0.3466898896130275 0.7331999698825826 0.1583720925777572 0.6851414277142265 -0.33082745416858206 -0.6549862363416605 -0.07982876223024737 -0.6671098337022299 0.9024761101872842 0.032305415587411845 -0.2606926960214364 0.8301038287010769 0.28844761488576753 -0.27060306296749626 -0.2765973631571075 0.7638930149533443 -0.21505006497440382 -0.09611194232249431 -0.10047342905017187 -0.9325191056100446 -0.2728818939292488 0.6496767378498354 -0.8455607736147914 -0.0824325088076141 -0.23855146947711714 0.2721974994721055 -0.7415558331193768 -0.04660592551204612 0.7174128001645919 -0.6001335501702854 0.5552563718204484 -0.9373871170551165 0.2384729415707787 -0.7607109315902414 0.8085976469800271 0.23044835777704642 0.8330843801223016 0.5551406875780132 -0.3559885398779703 -0.8047576444855755 0.2798593326697636 0.46535844507829816 0.7138447603593541 -0.6434563119188681 0.9959180573275483 -0.49141243712899985 0.8994307748242758 0.15740047058950846 -0.07306599335997999 0.21837210044213617 -0.5179551580237527 0.7089260188571502 -0.8791457527946094 0.7470502427793602 -0.39166255238468684 0.057064222438315326 -0.8162474697340123 -0.06213071932020475 -0.7888135621999992 -0.45900537694376675 -0.806672113535398 0.9365347950025009 0.6444666758918476 -0.8550591475998388 0.7358138467128581 -0.8494777835599121 -0.38451510408366674 -0.6628225703086608 -0.9694770721009764 -0.6242221206123115 -0.1416416930265465 0.9043562291950233 -0.79245016430297 -0.14453502550382447 0.7183615825886187 0.8370115675200855 0.4356116576903786 -0.7932379027058885 -0.5997119084855718 -0.35048616209003325 0.9716815647095227 0.2379364875300778 0.2548080201856249 0.20482168716390547 -0.552382899555379 0.2721865388610962 0.37027874028787044 -0.6300906301985465 0.26761200649190764 -0.990617419286381 -0.6875669394985806 0.4100308422244776 0.5743234982907772 -0.24457068021398043 0.6787532603773758 0.3634748673323853 0.4151276145456759 -0.6594495547196546 0.6797248242426119 -0.43501391872114703 0.6761305873750689 0.4028269243099267 0.8097661329828036 -0.8313506895155713 0.6464315542567034 -0.6845081612846879 0.048693638370068903 0.6053822156534456 -0.6197058318603164 -0.21635995869181368 -0.368720973391057 -0.9893513495539066 -0.4148034474849389 0.9935214051568186 0.021640163065975937 0.6315831532265186 -0.42548552015785046 0.4850465845050205 -0.21170262016123753 0.05878721724059299 -0.6666588185699027 0.17470777543750615 -0.08251809966371315 0.5697843198558221 0.45342041712410763 0.4759522653599706 0.4871308398565193 -0.7343272255770552 0.5495500998417868 -0.7449107660382017 -0.0018113415761806806 -0.35004157613643505 -0.4590924382738968 0.18610701509214067 0.42905478389317797 0.2721793451979162 -0.8244441400054312 -0.3779094876578739 0.9064290893276556 0.1698571613598685 -0.5375473573536445 0.17642130842207093 -0.9379829625877978 0.21155646368594994 -0.17300632348443723 -0.38743070690173975 0.8464319948463899 0.2185028904744175 -0.32958320708233657 0.9920493338828611 -0.5116749053429483 +-0.7551219543980185 0.5883050533007452 -0.8315626155756726 0.33428937229084954 -0.07435470407004607 0.5366933527683175 -0.9491045087011836 0.7759888300588176 0.4136437196378302 0.6811170608835055 -0.11667476112063158 0.25130749364967775 -0.8406077215556647 -0.29691807229168954 0.35816842138783733 0.6303860454533721 0.8044121162772533 0.6949189880470588 -0.7728183610065413 -0.9128747536734225 0.07265253193538457 -0.9885117028795773 -0.9310477309256551 -0.671278952904367 -0.06653153480391039 0.30144914493998476 0.8120886389877588 -0.6213695690735821 0.23665346822702604 0.1130830466519066 -0.31687416549192804 0.17278455431089257 -0.21890713706013387 0.6344215718776034 0.6565483229007179 0.3351087339330845 -0.24466346792410287 -0.22114083302604004 -0.9361491962721336 0.35294499595275886 0.07042864869344956 0.002080088831522886 0.8467530190919013 -0.6093487012593435 0.22051687091588779 0.05980174929766302 0.9558626518369746 0.49138047249164507 -0.5170134441013301 0.23046552014640564 0.9780519096254929 -0.992834278391928 0.47826825674704576 0.2255890548310464 -0.6689152318113547 -0.9066299165366634 -0.41202356136592755 0.27944832235733963 0.22591896063470518 -0.05344455586092378 -0.5436143809964573 0.23804667586267803 -0.5377388913510499 -0.14470717553288193 0.24884191826345115 -0.749601884616875 -0.011164337117435696 0.5526519995089525 0.16557877052996184 0.5061158308258102 -0.9851619376344976 -0.817158702745393 0.147207583895407 0.19924190642117923 0.41636922667688725 0.04983533445172306 -0.5882318091375365 -0.1079123975431091 -0.2794972927717041 -0.7399744958924384 0.874498735914572 0.8939385573007428 0.798266231135093 0.7968393911225027 0.2491411838276758 0.32767758491656473 0.5276096341440959 0.7072239831757154 0.6569478385763612 0.8358540171335394 -0.9502230096645365 0.2248708861042319 0.8824288498242745 0.4734764948262824 0.20729349557212218 -0.38494923368946266 0.38151587681058374 0.5643239531326787 0.42905449534159934 -0.9287473131901325 -0.11308625022737062 -0.93070929099571 0.5680917031045856 0.6884840852359742 0.4734042904457305 -0.6559154850817277 0.4804178901303169 0.16011137200707948 -0.5343451455625328 0.5259205370637705 -0.9082703452479974 0.49560375652926747 -0.8010038435068725 -0.9059841079775606 0.7084749808842807 -0.6424531574687258 -0.3714646675093993 0.6610468678913737 0.5603172819683329 -0.786841109286939 -0.05917495334254608 -0.4847672999337278 -0.6991461374485834 -0.5384977886398412 -0.6420534164703386 0.21047741553596078 -0.4620344633406015 0.5007992779644219 -0.9630150683320169 -0.0036230381648141297 -0.21633342124664412 0.6257370351575495 0.3882039375170965 0.4604131331769912 -0.7362542444623641 -0.009481689796407844 0.9634985081483789 0.9260581670552639 -0.820977892759011 -0.15392723301393385 -0.899076831401495 -0.7638071929169254 -0.7253469229479939 -0.13891771011280052 -0.33085843519234026 0.7135720938750154 -0.5937564272830615 -0.6563870382294339 -0.7069228363532587 0.7476589353798471 0.7372134493943985 -0.8251454803518901 0.6085981823018556 -0.8995887874527928 0.6710969460127334 -0.7368096495220051 -0.2999541782912618 0.023936862052749808 0.8198110520511499 -0.277416983921831 0.8093162097035691 -0.32994692167722683 -0.18340021401109574 -0.13609675002093868 -0.27332187281716847 0.1917960675915522 -0.5495544684542455 -0.15933766215637846 0.15206604489259856 0.7291551647764833 -0.3210070894997519 -0.125299226581999 0.5344602427715612 0.0887682227799047 -0.8852855735498191 0.8023676826900354 -0.5909372039999108 0.9920109968037432 0.3114414261486844 -0.6044511784036184 0.6970745053474365 -0.6524630266102647 0.5517379872272163 0.9155865598946262 -0.16423859330195612 0.503023290953283 0.3085247378817886 -0.31874331334113015 0.8626016568750334 0.4803639611085804 -0.168148280227157 0.16547677739813582 0.6309709252020232 -0.9741476838902818 -0.7035020826745513 -0.7160176177734472 -0.4474644694597052 -0.4229799719022529 -0.017467693809892104 0.4551064910733391 +0.34333852070436444 -0.5147664733001347 0.6992314185842299 -0.3137289373822938 -0.9634776570003378 0.918825778470757 0.27713952680726983 0.14610889796270898 -0.31961164731671254 0.4713613760554527 -0.21891170502228174 0.7468656977926666 0.7626604206158576 0.0865069398048941 -0.39306987238933 0.7701054087881947 -0.36770150637978305 0.0326229484753775 0.819768871282121 -0.5991153069010355 -0.07218999819052696 -0.7573885785677037 -0.8833053232859247 -0.28652798805046564 0.7103471659905487 -0.414098575230323 0.03846914265627133 -0.9529314891752465 0.6219395180664424 -0.20537683730506218 0.19003371541036218 0.3282961785095744 0.7040930630343418 0.6815385801677245 -0.2931548511821376 -0.26591638558384156 -0.981070195541498 0.5544841599654189 0.09206354135332084 0.22085278516770313 0.6614746683373793 -0.8869150718242913 0.5836392260122485 -0.4043420841114407 -0.4097454682705921 -0.46014905101283676 -0.34151814495394883 -0.06839003778311148 0.8037822863447921 -0.9461802350141266 0.2597219819400214 -0.0629963862060352 -0.5353054333460359 -0.9769790084682883 -0.28771175961305295 -0.9947407150685905 -0.7697852378680452 0.4631471309987305 -0.8682618540235105 -0.2704455595536228 -0.4299766470061672 0.5596867146985385 -0.23602846911031627 -0.3658618560183624 0.9130278648884329 -0.3770523496178235 0.055802480152700173 -0.2613415983592908 0.9515550888676156 0.5984764854015037 -0.4711093844901608 -0.7704688086235538 -0.44501529226484315 -0.9431745233478974 -0.6332767123569434 0.6444845122370915 0.7708843190829218 -0.9794915215861149 -0.059185319217559984 -0.32551119114450344 0.2507324316246933 -0.3538095578789009 -0.44217187383389134 0.753426183840705 0.3189227560206134 0.9526407610227694 -0.27165797208886233 0.4030185948834135 -0.6642312058934909 0.5182067935399643 -0.42461287142407844 0.6814563280971893 0.05606982201479904 0.26679583275383734 -0.6114083787542939 -0.9234227902748946 0.040440828394230355 0.9106425506300557 -0.32303670721975 -0.9040609715404073 -0.7083513531340817 -0.691134439582592 -0.8013611219791767 -0.5816290955494878 0.27940538696165884 0.42647578684365617 -0.8013446020996753 0.09262441982197434 0.55375669811074 0.1750829531260345 -0.8521852535173635 0.7582286943160124 0.22897633287041064 -0.8192222859832394 -0.025575437737423767 -0.13952039233014535 0.7141830243958986 0.3788391346023092 0.3795871214183335 0.13926084037430275 0.05250556232415349 -0.7317921458088144 0.5661609054643113 0.11225518451234673 -0.5380567122226894 -0.5812835035671038 0.6221339984654322 0.700814369220248 0.3263453534181393 -0.5898311015182398 -0.18287681110862297 -0.3231590685868402 0.05115872141528732 -0.7238894583213813 -0.6037052477295257 -0.5320011392739032 0.05541196072310717 0.4382611457747163 0.813052079403918 0.6188589749087536 -0.4443398156644378 0.09702553457519714 -0.28154045363070423 -0.16763398867402501 0.4228823973697804 0.8041980510201752 -0.9815104175362535 0.9933857880459316 0.4213698502377583 0.39588693501130545 -0.9276138696613967 -0.7602212828536836 0.25791086532297847 -0.8244919203100645 -0.2101494264327033 -0.344710227553243 0.3214010049205964 0.4091176774636003 0.7087958449545313 -0.5148133946270166 0.023290651938303153 -0.39924686510872776 -0.42194773552777676 -0.30865311776029003 0.56913447424381 -0.9950800533666386 0.530953361408588 -0.3369845433338732 0.9565468693656505 -0.8742940168551505 -0.16284041004199468 0.7594669140748231 0.42248155057210224 -0.8549057395652273 0.007056708914280785 -0.23315945831995855 -0.1133137499981367 -0.7149919393633752 0.5533037283111624 -0.019032676631328682 -0.6051200043196265 -0.23676468028850262 0.4695619531949613 -0.15069714781261334 0.549282890370943 -0.26199102635907323 -0.17341327377351745 -0.530556809411433 0.027553085076317707 -0.9616586963490421 -0.7394267352559882 -0.8916940211293625 0.9850544503508187 -0.06117304972723514 -0.8276083329860646 -0.6762085030693039 -0.9142705212143587 -0.26185700157222436 0.13154714175693583 -0.3524603886937201 +-0.3132834222072185 -0.9254998150974951 0.5813874303064748 0.9519683720133276 -0.8720582883117955 -0.929714017997529 0.9457539704366387 -0.9962208521472313 0.5384745489532854 -0.1485360659547197 -0.04650272008133216 -0.7521831613551369 -0.6273895135258885 -0.6612363297199135 -0.1641670365471144 -0.7536272809175975 -0.2903094529827195 -0.3828264370286665 -0.18423415032486612 -0.8790118676563468 -0.06006927214588442 0.2957326480819973 -0.6298289929886847 -0.6253144545326048 0.2353064493146848 -0.18289373235355 -0.3646266377549987 0.8591324499343134 0.6733361478525877 0.5011702414833681 -0.7527243876960341 0.2519455191182256 -0.9892478993452696 0.6383543774333571 -0.34829965233471305 -0.22188864436185596 -0.9751514162874597 -0.8547409375304174 -0.030723909893695556 0.2898920728088319 -0.6764555764675999 -0.07479957007535076 0.9948515115487042 -0.030553496119435808 -0.06220932688765379 0.4906893996251622 -0.26458369301923157 -0.007317323654119523 -0.23567767244878057 0.11560412767444905 0.5189980396984128 -0.5457124898495871 -0.5383976313003755 0.7584252061312862 -0.9934674887554877 0.3699597781771524 0.8945095020855613 0.3202191786031314 0.06236096405179792 0.6968435485468563 -0.3123600967248472 0.5981635806721648 -0.587252752082754 0.4777584398106527 -0.7662430881847384 -0.06263084130305585 0.9866284904587688 0.0822243693184761 -0.7195497220883083 0.746507766981737 -0.07545631196258018 -0.2704820649110762 0.29467200604476984 0.27255285843889876 0.8389331193265297 -0.25801670373840646 0.821080162510881 0.13090710271731876 -0.7514903863171354 0.536727758186039 -0.27195444642173916 -0.8693875719379089 0.251993610999087 0.3606300586847162 0.14482318660821436 0.21499932790793297 0.804685682230559 -0.3005445295363649 0.41868683953138186 0.284044129186926 0.9341879710883336 -0.9206635166411594 -0.5296660557577377 -0.013846594357401099 -0.7898826219093522 0.39498678822957434 0.36944438436243465 0.8059407305779349 0.12934927687806996 0.3855413890668655 -0.13197964865493095 0.6560366257118331 -0.3963026474504481 0.22548363876763577 -0.9242213209137664 -0.4295724893085904 -0.38608879620251124 0.5824681612895628 -0.5052722297521584 -0.028692119031022756 -0.5581805495188723 -0.48430077285368145 0.2759064329281302 0.9612224223461747 0.7547001711244137 -0.6363302684529559 0.37003640758049205 -0.7306197015791993 0.3574162703526369 -0.6624671132828992 0.20251944513207554 0.07343386148261954 0.046344077736807376 -0.6073197321695167 -0.10598540450135685 -0.3474051709058228 -0.12313904023355904 -0.6286235877469344 0.09634723607206896 0.4998415714418032 -0.9917450810545632 -0.19390111635363194 -0.669789271870078 -0.13521545062862672 -0.3268421390024461 0.19798726187741478 0.25986743271974455 -0.914356716665992 0.32974162497864357 0.9852047389991312 0.36493013462758506 -0.4778676359075511 -0.5414790093893393 -0.5462625628507718 -0.9780261302213895 0.46570298551330214 0.6056022222991544 -0.07672381128823824 -0.009865392665950434 -0.396781391133727 0.2436476176728073 -0.6333389732527812 0.4115640462078336 0.6503055387641734 -0.9610289212732397 -0.806374775461506 0.2987343318693534 -0.8922659731332767 -0.9455418696074784 -0.4256450907963394 -0.8752497395267809 -0.8110952740643436 -0.5000881428760209 -0.20581281177554844 -0.42811345059360684 0.8196763437927042 -0.9063678039326717 0.49018672223674487 0.8572739939513012 0.6105066085885034 -0.18325935676664695 0.7282045896251748 -0.7459562854376911 0.403680535816598 -0.2989376932461867 0.49956900741570487 -0.9123056290092411 0.23987063836349032 0.594338722148076 0.641637590013417 -0.9803605047878481 0.3762183624465407 0.3318101592269722 0.9691719711139528 -0.9396006479479106 0.6204901037787189 0.9449742458740455 -0.42369460868351805 0.8536440020327776 0.4533051392907097 0.45512747873613213 0.1788066404752109 0.6156306993976688 0.6172931884850237 -0.6507724666475407 -0.8868435500275573 -0.05017569613262074 -0.511174019049494 -0.24505437465777535 -0.3752905992260478 +0.7907772918126932 -0.13834402976496585 0.7974410556530425 0.25440192119615723 -0.8243117988945268 0.819706750938749 0.8432158050139116 -0.7645396550271584 -0.3155592990244791 -0.9517183162153329 -0.38549581509105013 0.96576856391688 0.35064910368542646 -0.805407733921873 -0.9005739634543133 0.9162080673386812 0.6065773391786948 0.860380639449158 0.4710048878405786 0.5858610735442635 -0.21293707756024394 0.19693868663209102 -0.15035306786478686 -0.1912490179493922 -0.4764554524268254 -0.045794138117124294 -0.41469698715718706 -0.3681887044031926 0.5388905947900895 0.8205744456288879 0.1045065332074342 -0.277835510901006 0.9075696596962317 -0.7284794785037709 0.8020178353208192 0.9392179737911588 0.9802279049250886 0.956889917757888 0.8446657726807465 0.28021135732215097 0.630153748517567 0.4431803694759662 -0.5182924458662619 -0.29909481308142283 -0.9223322363977038 -0.6737275998716361 0.7140359131064586 -0.568861640512345 -0.9617501877466523 0.9101746714789116 -0.056586897396314395 0.672192010546472 -0.7341225551123225 -0.6185664978434748 -0.9859128968063815 0.873384653792965 -0.5432705248275131 0.48077797415444756 0.5631229787839966 -0.4386398412063204 0.022488055388078854 -0.24780412911232452 0.34428663193373543 -0.6380659060007305 0.17150646887409438 -0.6333040839728221 -0.01802194022409709 -0.6629761752375594 -0.24084351403954463 0.6897496029526349 0.8065983115389221 -0.736154213186222 -0.7404724941733098 0.30126553712888793 -0.14291814142925174 0.45878909333751716 0.46487568517133115 0.02592140002754939 -0.6326081364899492 0.7495216636767128 0.3959473301645331 0.4825935358054352 0.1845443205175359 -0.826772642509561 0.515949278788655 -0.6239230602180506 0.7712822881632782 0.18625276231215127 0.3073905341111949 -0.9250061668523428 0.8430749540542779 0.13455772833128288 0.09196534938625023 0.3675715426609303 -0.47704485907358984 -0.858193764682007 -0.5556159308829778 0.8277424748616486 -0.9827951772904575 0.04895605855325558 -0.9315307935098154 -0.5624677930134412 0.864570618700087 0.6541625203993817 0.6996587640857859 0.5903611569231177 0.5689640768796524 0.8995455916752222 -0.8463552010819564 -0.4692653719337152 0.3194162611803215 0.5255408242193016 0.16115043063673173 -0.349644950996012 0.20919864165347768 -0.3305816650803213 -0.8397424154188644 -0.011394267743655817 0.46796094892928597 -0.618504196617129 0.01099534086398335 0.6377292675039867 -0.9101587740431734 -0.249723620352867 0.2261163046378718 0.9734074210642174 -0.3148935714685479 -0.7663752150372565 0.4706418900749638 -0.3975857621432415 0.08686179713322106 -0.14435160052106588 0.5834394284588704 -0.30775367258396513 -0.449803841719151 0.16023782017248678 -0.006065782820866561 -0.5350771163585548 -0.5454259168022138 0.24436466559054448 0.9522946852759844 0.7857140636177298 -0.4760278551854231 0.9629480369246264 0.51635510271557 -0.26929595061309364 -0.8332292795693987 0.7447654665600651 0.2452006882654656 0.5033905104195777 0.3151014278452282 -0.03450802237290573 0.7782696906862325 0.1740599429717169 0.3656980561029184 -0.08890437759132208 0.7357481706191797 -0.15198519391907417 -0.23747428733275844 0.06885741373567544 -0.32750638470854465 0.32189727621204756 0.5668864957704085 -0.7765056859283603 0.838451335293257 0.3933650314314361 0.3488626533822554 0.4989705954472936 -0.5034409370250943 -0.08910629204031117 -0.15402369119634085 0.09131821895984604 0.2532333214944764 0.514551502672062 0.6064263007603992 -0.899450838068212 0.0003203894833621046 -0.4726913289841721 0.9822650567855744 0.8221110314361857 -0.16262599574755465 0.36405960932441994 -0.7209912443800259 -0.5080754942174304 0.4719114845424297 -0.19526691317431966 -0.010935572832821538 0.9608409868546421 0.5034566163318512 0.5967928819105175 0.9757656672958241 -0.9858938410153606 0.5590983517200492 0.11815871887469553 -0.2594831236094002 -0.8838715799068153 0.730666971697397 -0.8536743985455637 -0.22000001020366788 0.02407473134448712 +0.7928721889271859 0.3148458807412029 0.11722187723596811 -0.44020927836707346 -0.49417279993793395 -0.1206767817188592 -0.7356193720707715 0.029800257371448646 -0.027432543158342648 0.9198582553390351 0.030114446662890426 -0.815101529165484 -0.7329648239366777 -0.9375808050944932 -0.21234991385684743 0.14935327222483785 -0.07262849729847631 -0.2921443031485662 -0.7674796955160821 -0.6412803843239572 0.7161213712073022 -0.8673748853315524 0.43449804197824293 0.8765292353477698 0.34409724146266707 0.27674721808971525 -0.9908339994688105 -0.14433656701276565 -0.25731781073922044 0.9861915769187894 -0.33620715141634006 -0.7305047858346334 -0.41434693263646616 -0.39286844448628244 -0.7042755146220196 0.2697395542370955 0.4241426570363205 -0.0038081535605718475 0.6724761927000216 -0.0038330959739574233 -0.5977307866355805 0.06941391919044837 0.31350237457399244 -0.8746294081019079 -0.21235056848265055 -0.34885607671273644 -0.13194911589924807 -0.617420376417464 -0.9497288349718465 -0.04842119220320229 0.11299334104016134 -0.9832017448269146 0.496585480615362 -0.3065818100537121 0.03223105896227585 0.9886824527844744 0.33138200980267873 -0.006608432610834436 -0.2811057688050187 0.690277021947884 0.6654600196975196 -0.8162601326046643 -0.3008643044785686 -0.11129333482948978 0.1302852625743678 0.9694288192081375 -0.989457513825331 0.800283130114934 -0.14071896906042958 0.3313496728533458 0.6983897297510409 -0.3027248010672212 0.41175955070641224 -0.47031088990030745 -0.7926509781188531 0.7463678735788755 -0.806812015198763 -0.6201456882999914 0.2659132596267024 0.003259884625540277 0.8039005890767279 0.845416669540733 0.4633500082585498 0.5207785760128631 -0.9185523936125306 -0.2867525855931321 0.8272247956960499 0.5612553150058568 0.0917722977930282 -0.36281575686590317 -0.1416166758948163 0.8828445459891696 0.9727682593708986 0.2999706536668596 -0.7081363881971972 0.06901114978887857 -0.258315659249575 0.9478756724331185 0.3709871434781067 -0.9967046145549878 -0.061912916370305604 0.6413755016414171 0.07204363866534091 0.33853348692215746 0.3174359967879785 0.6589708150112494 0.7858840737171524 -0.0397487695288119 0.4624430054629143 0.6346183872048294 -0.16184831834259827 -0.5957485501433595 0.4075562752655413 0.08618579225599987 -0.06455526128969757 0.690719903575489 -0.8682970972308488 0.7019768387983485 0.88334549071165 -0.7367207253042878 -0.6741850158304792 0.5693881626165278 -0.11576813749424852 -0.23821304249441644 -0.030047164526621595 -0.7564179876455175 0.07237037390999346 0.5333561711128636 -0.4152856504279654 -0.09284153806670248 -0.5114384338534046 -0.1666611633394144 0.5461644659222615 0.33970580924174865 0.4137476785642724 -0.45875152884582393 0.26007431167514383 -0.9822923793453033 0.006367761575063247 0.39950873761805683 -0.6732652180535881 0.029565535514302965 -0.05287222783705503 0.18908201470390074 -0.6430199794181253 -0.8420284109456595 -0.1795265711411449 0.028974065447592734 0.7664083919560924 -0.41338383902005527 -0.9161978089690284 -0.5811466618836576 -0.5900444527197302 0.9547615240001077 -0.7070822254747844 -0.6377931048039756 -0.02438201549062957 0.6917867639999287 -0.9568186648000898 -0.6123051254342917 0.39630981227484874 -0.8371475460406466 0.052150228554711076 0.6340025006034371 -0.41753057949583505 0.6375529729031322 -0.8230786561738455 0.5314740678890977 -0.6782217144656926 0.15526816788886721 0.9989528721396834 0.9384758897764387 -0.5738771435394627 -0.8073932844152336 0.09059658149881811 0.4706543301044688 -0.09625350199788874 -0.7584920186790438 -0.9687477041197237 0.5778241602698411 -0.06298029401187821 -0.9372723913003065 0.8414038783958524 -0.9032879714614275 -0.7172812363096202 -0.7159088669738654 -0.9367694855933524 0.5398830114594177 0.003095899653388967 0.6464613890810291 0.26005514314191225 0.5377127808670745 0.36751655622087087 0.9733444553379798 0.7484830982646686 0.5561139069928349 0.19963103226689194 -0.3174376283428544 -0.9457442658115598 0.4029474365332595 +-0.29207619543715424 0.09147043104859054 -0.359578204541275 0.20324490237817394 -0.48988494101134594 0.457463959677348 -0.32332820546639285 0.3945170852782043 -0.35643036790310023 -0.6680151788283322 0.20436814827895078 0.11148054427505816 -0.3396015075044643 -0.8874160102638238 -0.6920968582868148 -0.9421692475305485 0.693198758413627 -0.8265924240252727 0.3236070350245217 -0.20710291680374304 0.3820431830156523 -0.7464468625525102 0.8031102632753166 0.5649161106616216 -0.653051851370196 0.40878503603719873 0.7502715711012375 0.21405101632455903 -0.6792242693564052 0.9539528883400388 0.24476519119157847 -0.8896162810656558 -0.23774674285336417 -0.9570257609304176 0.38448736136522155 0.6924536453208827 0.6120022028852201 -0.08386207715564531 0.27776937018675874 -0.7075663368937524 -0.06479988904752054 0.888026632300956 -0.3538570207326637 0.5807199980679885 0.7674966510399728 0.6932277280985162 -0.3861343869176279 -0.6224209530408935 -0.3482521924175481 -0.2987446752788061 0.11774755167636064 -0.5583969781185179 -0.21437565127142388 -0.045168715910327784 0.9287338244386347 0.02932915749926468 -0.4995312777327361 0.4416339049913245 0.9172498369160935 0.6513782587566275 0.6494814874116934 0.01695167755790572 0.8284787933867379 -0.3645077954230216 -0.23988753520179573 -0.8394525977593796 0.4103595755019611 -0.05887966528721589 -0.1903652502903439 -0.8451788914439022 0.39711232962233245 -0.803087039139605 0.8915868215088174 -0.738940995191006 -0.6238911546819783 -0.691842607059558 -0.468731095067042 0.20011396768635192 -0.8256739166892872 0.2013179199450419 0.5779996168450652 0.2843607473481975 -0.24326217949574058 -0.1607848598455388 0.528905227952372 0.9706540927550349 -0.051670386856305095 -0.24604739500659267 -0.47267531168524757 0.2072999155748252 0.8696365593208795 0.9042140674502079 -0.9811875104247059 0.6891581765763297 0.03257844327340598 0.3777744547243511 0.6910839389079113 0.3238985334663087 -0.7978117882306499 -0.09373772705074024 0.33005044006603446 -0.5104554061248499 0.7385603956541396 -0.2176355880223262 -0.6078353372993053 -0.7463376699492383 0.6755606601750686 0.22834244617429023 0.26805120408197736 -0.5225672072633691 -0.8239884630866232 0.6022609085823074 0.8407252352766725 0.3503901799099045 -0.13146534894242912 0.8148506072222821 0.5811810577298326 0.24662650491207128 0.2916765878601706 0.14689693619729605 0.58437283673926 -0.741570267354714 0.42255452013874106 -0.0433544777172048 0.260945591480817 0.8433454243277576 -0.4595313568986581 0.11989706129447919 -0.9504286388905765 -0.5110639979557492 -0.41452794103522117 0.9549457643846224 0.340546512318848 0.5825409865248738 -0.6143796494498845 0.35290170658217335 0.7969884872685571 0.474431530387055 0.6419451954041127 0.35654733662137894 -0.2715665184499678 -0.04809426153373142 -0.32116701895625366 0.3786271689989589 0.8818709818364052 -0.935442973255918 -0.21268012071685938 0.4313581602760965 0.4603783778282746 -0.8185459999885614 -0.5664328954858016 0.4188870694668474 -0.3560636415206828 0.47364798075932213 0.47677863283251454 0.2878882054484737 -0.609220765636145 -0.9758788136725667 0.3646022237695681 -0.03401827622646336 0.059013175865515466 -0.6303659172901088 0.5408735808892107 0.7978223669686135 -0.7008150675351523 -0.682970303549717 -0.050728414025028146 0.5129432469479072 -0.3654032972415817 -0.4357565045731635 0.3950936873342805 0.45236441045456566 0.6223762068574965 -0.4767635889977082 -0.45871132378500934 0.5070485308919124 -0.6151585801961392 -0.8631867657068237 -0.5359169333145839 0.7767765084403895 0.4703442975558696 -0.46531317728956134 -0.571820258629747 -0.6918188510214303 0.7983466511393222 0.48583329130292285 -0.8220180447940473 -0.676283085143629 -0.6249967121527429 -0.3867834124589229 0.3765240635922249 0.7030627449510103 -0.10156485655409653 -0.21984256572494654 0.7776552828566132 -0.876727979867711 -0.0818979092028762 -0.4272290960913181 0.6450362960784486 -0.3232243528800183 +0.5604849451615252 0.23203270012131205 0.9978026677651204 0.5000752511879738 -0.723392677756366 -0.8577659975188265 0.3625829591927796 0.7779230635657586 -0.8607868599296127 0.8149182625139066 0.947524188631591 -0.1562757387289586 -0.7803211183551335 -0.31840240420023513 0.35677279548192864 -0.08291894145216894 0.5918165000294133 -0.45652740948972337 -0.4158608693390724 -0.8728835071219387 0.66288585403913 -0.4626188816258521 -0.6826608500734515 0.7503608347335753 0.6543869902725337 -0.867953289424936 0.8396787601056104 -0.3917381506185105 -0.48929676977967707 0.6484421371354134 -0.7016552074358191 -0.7343132484635899 -0.8071417270078631 0.9973307768625466 0.8848814615537115 -0.9058334408838811 -0.8850356305822067 0.6678959611563682 0.13204795438919437 -0.5373169234770916 0.008169154554413582 -0.9110515983204244 0.0798126186098147 -0.3027104644675056 -0.9414628046637963 0.36309020402181846 -0.4499228629127301 0.9848767423767237 0.45585148660276564 0.9773719290331031 -0.10565040200609932 -0.6212425713844367 -0.41940726801214856 -0.2608635762227596 0.5707307053712767 0.49019675310659094 0.8972075983787755 -0.627816418170875 0.9462885144887436 -0.05967550291536505 -0.2701148965834421 0.44813343301618813 0.019766148893748614 -0.3270028130645597 -0.5971641675060131 -0.9584456592696988 0.6023866673165539 0.6665962573918254 -0.9256933391222777 0.5144274558084558 0.4506522159873645 -0.7811381115627871 0.9747110192471109 -0.38082053998570076 -0.8588398869375518 0.5891138863801102 0.23984441728017658 -0.18400343422468413 -0.3280065509670502 -0.2070682407247859 -0.39633475062753565 0.712752416938881 0.03921897240978067 -0.11213722998108966 -0.9706058598889138 0.2519476965065126 -0.3594732509779601 -0.7823216036725504 0.02994048746609801 0.9781118857649163 -0.8355035799374886 -0.27884431771962426 -0.1140166944557548 0.8164292357119178 -0.6372510437479242 0.204177149899317 -0.6932975447547944 0.4755229581909748 0.4983026530517207 -0.2805635500569026 0.4753419937647829 0.8557158670011358 -0.7013871490734931 0.26921474479199636 -0.6736216758251288 0.24033799812145262 0.7938339122739235 -0.005989810036691745 0.8912275468653559 0.6652827444561618 -0.6888967393009353 0.24402199009761372 0.15924819745114593 -0.0749985382835523 -0.6988132511700431 0.5883634880931286 -0.7372717739608914 -0.3897257669828109 0.23168702214701753 -0.27222897777834776 -0.8460012819454801 -0.65441700117204 -0.9187529153216343 -0.054818840116291456 0.9807359820733841 0.37492344056470706 0.059872975061574074 0.3000364166314182 0.7198907141302036 -0.08614420562649427 0.49227822786879627 -0.27020759183854004 0.3213238128584863 -0.18569841261855458 0.7070230091657976 0.6380887348226179 0.36011634152299066 -0.8780732200899297 0.7885106448031665 0.38419988752059364 -0.9031901323876033 0.5307160080472699 0.7734655117552693 0.5366499372111495 -0.6409723502368407 0.6936366765118083 -0.3846455073418611 0.14822087715985766 0.6988121540233296 -0.14645160592342532 0.05110733867866024 0.9023166675252521 0.43673966108231665 -0.9174789460928674 0.33594990390138135 -0.7151996292722922 -0.7487636991423499 0.7795636302179285 -0.3398000069678324 -0.05852717716745981 0.9166212603636581 0.6301702690536726 -0.9130461934840544 0.5622360832822051 0.8146421807030833 -0.3435431617334501 -0.012876614727579616 -0.5413441805348218 -0.802050128268285 -0.6958996625036631 -0.6773920201811645 -0.06907712714393233 0.09604796963845841 0.4925795314828527 -0.16425002697321966 0.14681825848092567 -0.04181405819878492 -0.4862937289377165 0.04139629614254381 -0.008050038128564863 0.8783362346550272 0.04725690819370554 0.7159893390168246 0.6090927076133723 -0.5432021063140986 0.10939577205542195 0.9659172960156073 -0.7188473830580178 0.5066046586634407 0.5052410772909242 0.19033348936857286 -0.42049687400271796 0.6480261505958966 -0.8171691537475658 0.13211223661301807 -0.37484411643351545 -0.503066161161486 0.40687441259024637 0.8111458280711863 0.8198041564133889 +-0.43797818303872815 -0.7033909971483676 0.05545862486813191 -0.7286835856950264 -0.12648833658425196 -0.8465903609490135 0.8158232723455816 0.5425827608894023 0.7128130702685243 0.34085203438139455 -0.7914175523800469 -0.47101546873126954 -0.7802167070317427 0.1774297180585538 0.26527066611172745 -0.07416077345681815 -0.8279484976574314 -0.03763309568778306 -0.5079866247077363 -0.56766084644353 -0.826254377570079 0.43359103881279126 0.2567102779271455 -0.01169880374110277 0.9361149100941515 -0.17371706647748497 -0.7340620917675169 -0.12589556390487244 0.029854033884460174 0.20020906396498983 0.9939856613072315 0.07553008477669021 -0.4780788568297689 0.8555362467510141 0.3556993299367319 0.746720801509571 0.5909161497745528 -0.6910200307347185 0.006332580555360456 0.6147192919200513 -0.9688073755091153 -0.46043395616416904 -0.8120388920493173 0.48957303343814074 -0.3876823568847956 -0.20992623006720024 -0.11162512363791954 -0.19978844200018786 -0.8663025025049131 0.6206485536575226 0.6127249996295645 -0.800818649390727 -0.6029586297471545 0.904695546655538 -0.9116907088423332 0.16174713086252468 0.8738156747856383 0.8230002999059842 -0.09673516700036378 -0.010917382269918674 0.2865005203196678 0.5375722396205775 0.050097636433107384 -0.7985532933347583 -0.9535123263369325 -0.5572909886701987 -0.6523998407894931 0.6956821178631107 0.9778636507696779 -0.9738927040716547 0.6381735044926673 -0.803665337832661 -0.6717726015138386 -0.1318956810843952 -0.1670741588297977 0.8972715859871763 -0.8248515273426287 -0.9582942160092696 0.7184185692835103 -0.3934865242776493 -0.7771743756524887 0.7781017012543392 -0.5570342333249023 0.6743810888548816 -0.17068318524218773 -0.12365454205960913 -0.4912157314638397 0.882494370656618 -0.12792812698177802 -0.754085601260053 0.7464526614467328 -0.08089780436473215 0.9349131038838463 0.009854309950110496 0.38650555552140564 0.9399634113989503 0.16076652168490813 0.7180245673569094 0.12251250143512205 -0.9048175154435523 0.048878549739319155 0.14965023202387795 0.8796215898382491 0.10966168385785435 0.2937642802008096 0.20517911137764466 -0.4235877179142198 0.46137654799311667 0.36620642268841186 -0.5395771323297056 -0.869707880256348 -0.5610137450707664 -0.4235945026810508 -0.2502226117948385 0.08230032762416228 0.8307796903206275 -0.5387215152308338 0.5192320439852915 -0.3893248046479121 0.21941235668099668 -0.44701195737399235 -0.5080525359541483 -0.038958629583169646 -0.1470860292082481 0.6111254437347213 -0.14507596555160807 0.7229854056669278 -0.8217069864385687 0.4853832373066225 0.8010392866894402 -0.5682003905609196 0.7193568090878828 0.7435803793029212 -0.8268810990160445 -0.9088198171541797 -0.5254979496782832 -0.823026791561235 0.33487632515755106 -0.4458912470829026 0.9937990017789833 0.5963856879060871 0.10278073886221506 0.05701295461729283 -0.9807887744803181 -0.8829256497201423 0.8670967473372049 -0.5825325129622514 0.05320160784689243 0.4715833169348762 -0.6757100681510109 -0.42806503973815646 -0.0581812268027917 0.018083127497722895 -0.9077511494315955 -0.20151187408803373 -0.40296942787612977 0.631249213971075 -0.058671746734213936 -0.877460433190757 -0.7341505975256695 -0.5710672549777944 0.23012766721222966 0.1600002539622285 -0.25091031403342656 0.14398336478626095 0.25868895863537067 -0.39269475178452184 -0.7822820158738282 -0.15040773585712386 0.49814598855385483 0.791691440283792 0.3500085138082283 0.5930192859416712 -0.1343794053579508 -0.8958618976229564 0.12956759313983857 -0.8505173244425861 -0.8373251562227362 -0.8110042244394222 -0.39143509293735157 0.634168703751947 -0.08030826075008979 -0.6313044535895223 -0.8882432716080904 -0.5175972987164901 -0.12084155259423213 -0.9485446200513719 0.9504323820477418 0.6100680451524962 -0.7829659895018029 0.960154181894004 -0.7717573868450736 0.10998781735285235 0.9002397938826112 -0.5736682545695473 0.9865274768576091 -0.3631190570488818 -0.41988824986793727 -0.5311603581991367 -0.6517629865254009 +-0.09111733914843279 -0.659329429093086 -0.9947197865721908 -0.5894983640359814 -0.39084007251025144 -0.9097635540013369 -0.6320050536485307 -0.05848917211768634 -0.24158769038500316 -0.5746980980224992 -0.07007901705663144 0.34924792676643746 0.41363935500165994 -0.4308621697638009 0.6580523047292455 0.22900508206878012 -0.4826889056983166 0.7904448573199245 -0.11338613687378163 -0.3320905336363713 0.33170079698788824 -0.7017043339426121 -0.42631025019347235 -0.2660903262896641 -0.8352703327939184 -0.555320105757062 -0.5891915789961735 0.865501136578648 -0.8858079394595839 0.941560316617817 0.4318614604844886 0.8794949010437978 0.6491652262834209 -0.18741040425696598 0.33820984359342043 0.7408309429310953 0.9128661715260633 0.6678512246164929 0.2538167189322422 0.29150642313593633 -0.897966643315973 -0.26396356769154994 -0.6491846095970815 -0.9892965015644872 -0.9578464621225231 -0.39997547000812883 0.37684248855026947 0.1400913270902968 -0.8738300438863187 -0.5698350692653749 -0.2671236157895438 0.5117751711724712 0.34341452584915233 -0.9793158645393771 0.5998703336462234 -0.4890567633233014 0.9514612475207205 -0.7335588391179977 0.8826580743698988 0.3899210710068184 -0.8403521042893298 0.6801665329288484 0.7181026085686402 0.530418497337815 -0.1647083056235401 -0.00621635653793895 0.4670658084797683 0.8100338081420873 -0.685206539463594 0.4474097250726665 -0.7126912361872366 -0.1802851796728464 -0.782254333908353 0.43531488732529744 0.920781835141455 0.008081894875129558 -0.013385517111518475 0.7056469195936252 -0.49881451413728595 0.5126409607143083 0.8412271711487782 0.5129116932359332 0.8451506347860676 -0.5808541005085279 0.5954836081357366 0.3465557179559329 -0.44387269503163895 0.6812465522847808 0.458559761829068 0.7003673326003288 0.9539290418623299 -0.019658597560152202 -0.8236026126828211 0.04265542831988878 -0.5047706950860711 -0.5001786253186891 -0.25393788545145557 0.46204126154283487 0.384131027835231 0.3128230623416295 -0.9401000471692613 -0.8542225459386006 -0.8489189848613488 -0.12921403410940746 0.8190487595125364 -0.501740132981735 -0.006234922911112495 0.23678336947541245 0.7979660877860029 0.9186115074783379 -0.5482610355222397 0.4512986435712072 -0.06089077879599958 -0.6770694437556104 -0.5472504098450626 -0.5515651396365351 -0.640730916300466 -0.3043207607071994 -0.968059745435141 0.5797576363837476 0.3263862208525974 0.3145753571927834 0.020407469555057567 -0.40467455680018727 0.2588497037812374 -0.1763760467005595 -0.41634264318578595 -0.9757739504949365 -0.687055155174102 0.5133300128443823 0.6222135242996654 -0.7255613185043097 -0.9674725475183084 0.5638802875636357 0.9454126662735469 -0.045780998400035466 -0.649764127223651 0.2507052435900756 0.15815283342700548 0.26341496588339597 -0.7755310993217868 0.03538332302418179 0.9480674961212898 -0.2525707443572751 0.911206628065923 0.5509096105928142 0.7387535280488775 -0.43438334504876064 -0.44266901907786416 -0.4766481616299254 0.5222039309488633 0.6613865386768245 -0.6474633934564815 0.9207204763854908 0.37716175059996604 -0.042298795887693474 0.5265739456142393 0.1494010024249659 -0.8232686991534772 0.6283744076778781 0.7654393889051234 0.7100899039495183 0.6156925893223819 0.755049166857581 -0.9070562338593782 0.286601583027001 0.45728827624066626 0.6616474010693794 0.45317508999971823 -0.713892918312526 -0.3171998926265591 0.022235440280935714 -0.503933030711136 -0.6579279663652182 0.30247874447067447 -0.7479690028892083 0.43113394636168767 0.2297322812967193 -0.7495977765180986 -0.541092407624373 0.33535500540736285 -0.15868135357473734 0.4102966554326095 0.8916090960021599 -0.08108101749308205 0.9370901902417483 0.6675999335106615 0.8695789309644 -0.7987381268896032 -0.9928622709897692 -0.1956276767472409 -0.9320312546486567 -0.207455120057918 0.4641906401353053 -0.4077615673432782 -0.6867251880623337 0.42267379309094366 0.38546217653024684 -0.9651080132160748 0.09568939246655717 +-0.9226695657634942 0.8824552903682792 0.3612286932563078 -0.3251967981159556 0.08594842182743379 0.4897034107007445 0.25683967430409793 0.5507112021908764 -0.44041887599334584 -0.9459640663528999 0.976099954434003 -0.3974497286871215 -0.030665421420760453 0.91904818226233 -0.5476496713852115 0.6182259702067092 -0.9735224410320016 0.6209060013915291 -0.6438504077424336 0.2857162493373775 -0.6085660296386532 0.2907411082182527 -0.3645306778591675 0.008880682895095138 -0.5094068031897128 0.3936294181725344 -0.8445110815394201 0.6557329000390419 -0.7411734812524964 -0.25858731712866834 0.491519428899972 0.944213756398186 -0.46467422407678494 0.3342231360667951 0.8339626787734362 0.5911645449243443 0.23253933109909108 -0.22873465585517794 -0.286684549182872 -0.11668002792317456 0.20189749492299924 -0.675323723151924 0.16838129347896502 0.5115830961142127 0.3681627977953441 0.7351325290287272 -0.34259229324883256 -0.31180834578084493 0.418244107347467 0.4471022977243415 -0.08581771785314563 0.3303149768711604 0.6086730404796534 0.7609613222110805 -0.6575150330820418 -0.8503049510796123 -0.1761540980328018 -0.5880452352465841 0.6434301161715121 0.16668215578606338 0.5232444054082186 0.09017379045667728 -0.06839238935077296 0.9396493061335716 0.8952339909486238 -0.5349888872311261 0.05447204678654849 0.030955864684622636 0.8055872808524693 -0.17833200946731376 -0.09529165085856595 -0.031201915207021536 -0.07414472616220236 0.6120486987739908 -0.8742779325213965 0.015886049112162848 -0.43100904002148344 -0.24711551924413055 0.6297272337273037 -0.8083242964165329 0.8893992535243802 0.41414275629593655 -0.4798920347118034 0.4727356735504671 -0.0021826720141928657 0.5478463405879197 -0.9123568559958595 0.03903618363212735 -0.6525987282593986 -0.4778323667141424 -0.5324404636291442 -0.6956509316730983 0.7437844594182057 0.7252645952985961 -0.1031356207403189 -0.8927803010703848 -0.19452664366520045 0.34914743715126106 0.8722945084396667 -0.7047174060388592 0.802850955758416 0.8373414446117429 0.6155611336607039 0.5899552287430927 0.615233182421332 0.801838655577044 -0.5343843976958023 0.5497463060717396 0.5435710852077436 0.9146376090817105 0.7320567670646356 -0.3689212713211323 0.7556618825718859 -0.3376568447085686 -0.5775515182049771 -0.346784499922431 -0.6369787916572844 -0.446736215487499 -0.09858631249596339 0.2709004113833904 -0.14573164748390788 0.5698961226787662 -0.7048741326997734 -0.4838416263076579 0.8926081804796941 -0.8275944425124289 -0.7540556422797118 0.9395707096653669 0.4685585862276178 0.3424958978402932 0.47871784198869083 0.44733971752922974 0.3873363872435365 -0.49649308704531747 0.13931016574816346 0.824861626596131 0.8809372824794643 0.9903604528797005 -0.45135383497243153 -0.7072780984953064 -0.6633340297031589 -0.06706793637636022 0.6460973990364312 -0.4654886873895019 0.9589766509177113 0.26152653709601004 0.4594669841279946 -0.784544116978928 0.4801799597928804 -0.681331548267895 0.19757129083768343 -0.06798951191730418 -0.7578794162267048 0.9747326500757307 -0.018367310097976652 0.2853059351798284 0.33547563496517974 -0.9398202164039826 -0.8170263376014348 -0.026321205913754087 -0.9750653442208381 0.1282547650121031 -0.313091491898321 -0.5974950173265792 -0.8123237036479043 0.8009185450290943 0.5319949169652953 -0.5664177754696109 0.6329644647274899 -0.3078225064908424 0.6231845583187794 0.8280355228799297 0.155942711502693 0.6432727064574331 0.5335118897972726 0.9301069002536795 -0.604623812737086 0.5002370101641995 -0.6233615770102812 0.7997032785923461 0.12374895964059851 -0.3472065207944619 -0.6136343426000168 -0.07924551625535847 0.7250319713274871 -0.5971321542968473 0.050026787490347946 -0.12286054478234032 0.4642968405952954 0.56498909494394 -0.6443769380117665 0.21199648426029216 0.10985323624137178 -0.5343221067947008 0.04035393035345525 -0.43232421629133255 -0.6246910920235773 -0.5310409006637613 0.661801525414845 0.43122413450826125 +-0.8314337882451679 -0.1685569662846771 0.34381854376640764 -0.3075929492725833 -0.9049277481090132 -0.6978835730576964 0.5864531496846659 0.9745479000774722 -0.7940217132688854 0.11822723038257599 0.6804210014694412 -0.27726245089592116 0.9040272210049387 0.9834832072899311 0.7191701393090346 0.28600008029817836 0.9200829757634184 -0.7279978610267792 0.2822297778035585 -0.23708375840756157 -0.7735701188523185 0.03528467761172904 0.105800530086821 -0.5627269303481834 0.21282338661979727 0.9060043773508246 0.16665194469744438 -0.7360873807825996 -0.8559230494214212 0.620441190723942 0.6885014859591774 0.27505034505432135 0.0767677950499508 -0.17626161816040598 -0.953547048559052 0.7252744841404091 0.39953126917202786 0.07157314657921843 -0.6526832058660466 -0.7764493710462887 -0.29463613445467973 -0.7125307351582437 0.27544132020404977 0.033529125691790895 -0.5801833565110601 -0.6550090153758292 -0.15248634480043122 0.8995303044124889 0.5827626595030913 -0.2804072575199785 0.9895298174555727 0.5803130868368116 -0.12624760785457312 0.9378001543968792 -0.886082424349586 -0.5283603112069666 0.7572387112675856 -0.26468300867467454 -0.32903642848697356 0.39379024241852245 0.9802771639003494 0.9557996639802044 -0.4681026146696048 0.9746866313773797 0.12588612238844332 0.26846657267979657 0.35236720050633696 -0.3977389859895726 -0.879929599306915 0.18055092034032993 -0.9791373706042561 0.96383894902064 0.36005434871620867 0.9956474573876737 -0.20850092349050509 0.6285507642540697 0.3301816780009852 -0.27957542282930414 0.4749637484247877 0.25109558250156594 -0.02633662594722508 -0.467780995946379 0.9707361742750478 -0.07555254788757382 0.5054568134340616 -0.9727267915554634 0.717834957425352 -0.7945596460432378 0.0011900379322871135 0.42721018432808555 0.19763673727019215 0.46465007545462034 0.7100396132233673 -0.5611204614630299 0.9009413511782354 0.6062389024977637 0.0013595170385967137 0.5940342751149972 0.9607943320123662 -0.5313740866529573 -0.3599161347814066 0.31744413967280005 -0.3534396533480926 -0.9272141335432817 -0.07773946116200192 -0.820964817300923 -0.14409454544094524 -0.24785204527554705 0.45313144897031377 -0.9717538213615946 -0.5365282638075162 -0.727905523116098 -0.20228657927322624 -0.09626589794560259 -0.8009392029385425 0.5154762174789325 -0.9522366972629779 -0.014574815925902707 -0.12064162168491888 0.7008705574147147 0.3978159329901647 -0.42421199810764687 0.775623844411802 -0.6334406807936213 0.7950346478997519 -0.9300021757165251 0.6022925787171574 0.5503998612035506 -0.6983137624350306 -0.5593132013111015 -0.22159443828105396 -0.5727027292043059 -0.5861405513188436 -0.40562405385609157 0.9841576246225072 0.7682421823386345 0.8003302795322202 0.26863580058970227 -0.8574823127311553 -0.44023170317533067 0.9722917131575886 -0.7129003425024967 0.4295373585877915 -0.2019760847545795 -0.3417204947091155 0.1402092903635328 -0.7356060405885863 -0.9393494983738031 -0.5291979204833817 -0.9024563249553641 -0.2574545657133047 0.9816349114748795 -0.8730040729613446 0.45614305712111247 0.06481755266215972 -0.9567895205527048 -0.8761017569659819 0.9659378538445595 0.8462901183591409 0.36346300807830234 0.7728675365756805 0.6374968639889711 0.6946756584080702 0.7087043631212206 -0.4275619254840286 -0.9779958991781554 0.47086732796738096 0.6988142167556577 0.8056022042549156 -0.44994239165164696 0.12933834798359456 0.19456672225028648 -0.37739196202438796 -0.1335626507652543 0.7071779177554054 -0.41339025611934055 0.7642048501496344 0.400588636272863 0.8228600007389981 -0.4812624534810781 -0.580727536481846 -0.5717648518055654 0.4601633453204341 -0.1657718649539377 0.5593938732245907 0.3456860934763495 0.8168941644563752 0.7762114798457411 -0.3816615107143888 0.7449704102523307 -0.12621148227309265 -0.963604907957925 0.719138051520666 0.5722161592023325 0.3434516487031767 -0.07197476650427737 -0.5872117021472691 -0.8303410706378829 -0.93085139720235 -0.05161767723735933 +-0.5223968092683042 0.38793478920073055 0.3475552832016231 0.08331406676201625 -0.8846522044298886 0.7146005339945563 -0.2158264175146163 -0.6460215587070843 -0.052277982098572595 0.5861384909599938 -0.018680498589383143 0.9493161692467507 -0.2055196687664138 0.5592348868565356 -0.8040129882495832 0.17150471475527107 -0.5725131973529243 -0.14389586461284432 0.24476729090333693 0.9463092055707971 -0.4258179685165169 0.6422191314341541 -0.049963097516231514 0.5968132452248027 -0.3686638336034975 -0.20259652361490876 0.8860257617379366 0.7070872434151454 0.5387035600680812 -0.1051329740200646 0.9393066459851058 0.7579432685206162 0.910969513271902 -0.3933442392770252 0.32561349773408477 0.525958870314706 -0.3911952691013707 0.5603272073777419 0.4437820250140365 0.5813439105088092 -0.5935381696682052 -0.23983402091454442 0.9716912748647426 -0.28475263602000966 -0.9270237741614036 0.11007400607557649 -0.5141513213963973 0.6478004989190214 -0.4815427109726569 -0.16899360736968383 -0.7513069251889437 0.7807456132609485 -0.7707027891786571 0.4628401673676521 0.42673501947825554 0.669900428060962 0.4423597173806988 0.34140801250525743 0.9697928554604325 0.6597940265999229 -0.8077145009566233 -0.6650871876492934 -0.7104130396026016 -0.030593947389386367 -0.1395347083106484 -0.06448203044866108 -0.901575828688596 0.4668176590687434 0.22999043336250424 0.9165870929217892 0.7993025197577153 0.8313819753528249 -0.7911191383240601 0.6602725401516074 -0.0683416824142844 0.6335969176993808 -0.9617773851398079 -0.013223488182071197 0.912888565725507 -0.05456325137948581 -0.8618376713410123 -0.3593903523572348 -0.10666568886660377 0.48902604434328256 -0.26764090776081284 0.9231938434602105 -0.6643614569388687 0.38233460629419613 0.6395548106170617 -0.848380823448539 0.0719784615930883 -0.7816195896787019 -0.22217962012963355 0.8401175527013478 -0.11562670653907525 0.5887711211173279 -0.4025136110190686 0.4371953659750778 0.6732605115993946 0.4975457718883416 0.5924387522684258 0.6052196769558917 -0.5979393924919449 0.5374036594083225 0.8162806448118793 0.643033322310778 0.8421134816276141 0.7080260719656879 -0.03131232605968459 0.4304356930236086 -0.5211848827855567 -0.6359729828788565 0.0037362694212024206 0.3032026391621463 0.571778906673188 0.7804922333792059 -0.46773311800019624 -0.9957671451148733 -0.36734454180542686 0.44350866097392094 -0.34242598172003813 -0.9250259581781495 0.17646114840153193 -0.8492413960766285 0.05913165227876127 0.7796164567709956 0.04739068304630378 -0.8486964283280505 0.5120289056651071 0.5045391259924505 -0.6999981953235983 -0.6133192755369994 -0.9077804453160476 -0.22052785563041222 -0.5161368931414749 -0.9471844813714068 -0.36695443289389584 -0.6528797258818266 0.9626563224381024 0.5827917807736578 -0.00811403047564796 0.71271875988718 0.4584432867665762 -0.11676605468918799 -0.09729105367191093 -0.4920283747040355 0.8709183089936157 0.19168212137855156 -0.9176093557444467 -0.44130373361015907 -0.9736553605573728 -0.47569595810078424 0.7419780735967731 -0.4240498910688826 0.7640294280958584 0.44350828804432707 0.46881433405841744 -0.48152808281476966 0.28427794304101295 0.9066935193987107 -0.48364763988819104 0.8745918471100447 -0.24407815281715695 -0.738417868486045 -0.13290908201160168 0.3436420524644621 0.6951121228161654 -0.08129967037256969 -0.6106812187883506 -0.6182789230695871 -0.8047647668326696 -0.601143373333735 0.29977885281418937 0.6484344527685146 -0.31506493591277174 0.46673425221755616 -0.3379570657044104 0.8355164117347447 0.13803276688475097 -0.8345030277882666 -0.5058366329887727 -0.24152099283638329 -0.9930924240696659 0.9165705179505117 -0.5348466326732919 0.7764104878967142 0.5634292877679101 -0.6760702712070235 -0.946036865779663 0.6131340495092135 0.8832620760773922 -0.996848912582551 0.8560387532552911 0.6745098224211945 -0.5141541354697634 0.8898981539341049 -0.7257425854492334 0.994373186607385 -0.4790165873162404 0.551282847177553 +-0.4965021966317289 0.3514955066622214 -0.05369523410081456 -0.35225104814355435 -0.32253768273349226 0.9022984783787802 -0.9739782354625295 -0.26030955401949973 0.983236402470784 0.2819990248757067 0.14160315547119517 0.48440864149583907 0.5547949421403469 0.2737687428050908 -0.22569843656005983 0.6053329714278459 -0.11429809679545788 0.4014421357801776 0.8895688973561835 0.27973763108943617 -0.41469897327476835 -0.005048882212648209 0.507303003168964 -0.853727064867309 0.12298883754010537 0.4079606474277089 0.6854665700853699 0.38964664279176087 0.2928085068802462 0.3943537699623947 0.6975065891934844 0.2537386075931509 0.8377648749851485 0.7666856142187501 0.8371594596837015 0.3579889888555776 -0.9654491697144463 0.9738363909679641 -0.02531336244828597 -0.8147689684771602 0.024313250586194934 0.2534605805435468 -0.2226106816360105 -0.7077628976729822 -0.4805963960991304 0.8770780311558597 0.40802484601308286 -0.8272039301946361 -0.8249250559504235 0.8749844120897667 0.6851499645695154 0.4389238545468195 -0.7384344414226085 0.441681122131232 0.4908872944276206 0.2577621780873083 0.6286487380343593 0.212157445034715 0.6780399699817443 0.49261598219261393 0.5652352279732895 0.18136633159691695 0.7456659655177 -0.646059872263621 -0.1546630284727759 0.790638845265156 0.5107065886824009 0.5368186746942023 0.08758676017326161 0.6707559821652262 -0.5396168918537583 -0.21889222165910072 -0.6365216175164286 -0.1395072524994676 -0.5155881507397218 0.13529406500720076 0.7926972969615818 -0.4325619298452765 -0.03447599398852064 -0.3072210862786544 -0.12137470158743202 0.24457302053174335 0.8281781986108174 -0.8299744926298414 -0.6458324427765441 -0.50699692917367 -0.48993604319836237 0.8604961514047997 0.5075925049717194 -0.7642730350671065 0.311739524314653 -0.6100191236280512 0.7903428251182167 0.3043765887606804 -0.3608498336056687 0.21491265139215643 -0.40480368508627507 0.5334978663779397 0.8845475124815763 0.01861733189632342 -0.03957809926592715 -0.5681689397239351 0.17956761150348388 0.6638862289214724 0.8029240725990878 0.8145492610542089 0.4694397479799368 -0.5066746213407967 0.36473759237105896 0.40028639064258686 -0.2836432804489002 -0.9020520962895624 -0.6508144002688292 -0.7889366853963073 -0.489943602320307 -0.6909173394914236 0.3880982692816899 0.062098881671423856 0.24688249624352054 0.16374364219770055 0.4666989830665582 -0.3838362971691771 -0.3035498590603365 -0.975950925676955 0.11218479404693316 -0.28236579156841235 -0.8330808162057188 0.7865370145889954 0.18422416616366966 -0.3831724336726643 -0.9752697182852679 0.047928029581195464 -0.35881844456632894 -0.6391868399307219 -0.0753741270514321 0.38961509916706905 -0.8382855373275448 -0.3996142808533807 -0.015919538082545204 0.5816869307981898 0.9849866002480783 0.7375069634407903 0.1805594907203001 0.6649658680391848 0.4413565898059417 0.16644328398653685 0.05822599464629996 0.7749834118785588 -0.4969184474596151 0.5901668558875057 0.615525972847772 -0.170001283358858 0.8992938665791843 0.03265435954370832 -0.8482686336688849 0.3380801859070204 -0.16578949296160994 0.07578935825280286 -0.38706181812140983 -0.9693014495200596 0.7483015374427475 -0.13647605970340693 -0.90914064418593 0.1822255938292543 0.8678742228907319 0.8920830534039357 0.8669750787580095 0.5360723759574326 0.831409753060288 -0.16942558746566339 0.29434875903875213 0.7729686869750307 0.9843836240649855 0.45878729322090606 0.6900025796863662 -0.17472922549322 0.08617244819980541 0.9685712457731503 -0.4762480929338977 0.41668077022861527 0.5336745866245132 -0.7523979448083149 -0.16140897263775478 -0.473007517589219 0.17726957096345863 -0.26092769628022006 -0.3983701685471561 0.951631747246309 -0.2997261706049763 0.6681359584416806 -0.034272439081365125 0.5276745467082022 0.18689590215486085 0.17912530066904897 0.7361087328920695 -0.10873188978312376 0.014251091219878331 0.33683081288774375 -0.7994120112132808 -0.2241534821228588 +0.394153073335032 -0.0949857553775475 -0.8614504218587533 0.9008863452722946 -0.2617514816480637 -0.6522761884394424 -0.04961371907522083 0.7759472762801474 -0.429775844373401 0.2079525601685912 -0.5835181493311903 0.5916551667452232 -0.6563671315893194 0.9484226998129659 0.7658027514841472 0.6149021549320526 0.15807745748330926 -0.8727151081167721 0.6289447099868208 -0.9108422169525101 0.7322045400209729 -0.2865579812378569 -0.9729437373518006 0.6513159446104413 -0.10332169527595125 -0.12315289549780184 0.5456421381832031 0.6095094965736978 0.2711698327254686 -0.5677126986118686 -0.511639381371517 -0.2276956641174328 -0.876496313625144 -0.06053179063016301 -0.2615407954746263 -0.55540233738926 0.32589381634869974 -0.490002094526681 -0.6064361900277138 0.22408314447419153 -0.4428547418371207 0.43270631081907096 0.667727888050625 -0.9088184819872636 -0.29888849669838313 0.18248278233646187 0.7208721577119659 -0.4177847689155809 0.9464680769044296 0.07392766316049282 -0.3678601261937551 0.2787629598503758 0.7453686828815238 0.20721085054660038 -0.5400556708128015 0.9562558493703308 -0.27683853084771015 0.33712593414931336 0.6957541866633128 0.11550491892782944 0.4183985339732321 -0.6292464096178554 -0.7401811103207123 0.7048516963125728 0.9890152849255431 -0.08590982030240912 -0.6548148169700139 -0.6817481914297532 0.8345447209574026 -0.5106664776024794 -0.9109682561275549 -0.6956595687199041 -0.17135281682773074 0.37645941201306465 0.9902687537224653 -0.6211360214144406 0.5214341643933962 -0.14817998018711598 -0.5198899043026024 0.0984890170919479 -0.6985850640824505 -0.19992780075910965 0.4654378090774747 -0.06622179586626253 -0.2450201200985569 -0.4704595474369262 -0.2000622264743872 -0.7372246621765739 0.3830345469095311 -0.27033124682744436 -0.7441464324132596 -0.9950098525370306 0.5674355367936101 0.09396900415878728 -0.3998707602931659 0.6464270508389716 0.022738746492749984 -0.26001307451762967 0.761236881613067 -0.4327269226064123 0.37224997016108796 0.9950909839691688 0.1467186431106262 -0.5383023518756127 -0.10477654784258461 0.9253681615458837 -0.018915797546823043 -0.10781236694264051 0.34609425731529164 0.17954939968596362 -0.8887758642330184 -0.5825437739631916 0.22309813490474073 -0.2559963679263264 -0.470285649961832 0.32911601755372066 0.3423911973450977 -0.46509617818274607 0.15354160038303344 -0.8433923068338804 -0.9009018249656786 -0.15191199541328992 0.7737730072822304 -0.8921771304277346 0.4610107287178662 -0.03401291518300309 0.8603236667515468 0.5818790043598043 -0.0373292022666698 0.9804312545391649 0.5440332301998971 0.7462206466229588 -0.7811304705687039 -0.7275942445922663 -0.3560140588275884 -0.27283902589523135 -0.39768653565727874 0.8881178228465583 -0.24921954786723766 -0.6151112827967851 -0.705053414259325 -0.1385669384057775 -0.4428634373666518 -0.013238576773561217 0.28892541708820363 -0.9293337760116156 0.48587085622676307 -0.9601267642153977 -0.19394494711102772 -0.40189582297690984 0.3024447979532294 -0.49915201447540447 0.13835191513132306 -0.860070273272225 0.4385862151455828 0.43840575250502556 -0.35026367873581865 -0.3419443416563832 -0.20911049943903537 -0.5897703914427408 -0.8270169473488391 0.4331212797399253 -0.9884637769561808 -0.08271742797765813 0.18744461307148153 -0.9680369673011253 -0.18850851426730686 0.9211264520954967 -0.10870186563553119 0.4635386754747708 -0.04394097182066181 0.08038381785414006 0.15838815513269067 0.6297784231221515 0.5247483478059196 0.02861865265348329 -0.987951408104738 -0.7395398473702093 -0.4381688825749501 0.750836325686111 0.8146870169859253 -0.3535615883028651 0.13595727892287846 -0.8308673947682366 0.7397741989978985 -0.7670421404226655 -0.6604426595350892 -0.2704214029770027 0.00963732903735659 0.6011958196034717 -0.6489513583746653 -0.09613778588318822 0.12196633151728187 0.647922507914463 0.9235576331010618 -0.9188419302025428 -0.49451275064059885 -0.9685678170046881 -0.1629753540339498 -0.16728452017969375 +-0.7664954761218159 -0.08316891532842363 0.16307542975358946 -0.1820473832773617 0.4796808126547327 -0.874222581119869 -0.303783852164605 -0.47349313291642203 -0.10771255503992716 0.7723531558304879 -0.3631269113171465 0.27204795185200914 -0.9329632655255229 0.7125649038453765 -0.9257571853007034 0.008363018584468529 -0.38413152212234647 -0.9371342994143981 -0.32727563155231754 -0.2616845600474984 0.3613065003790352 -0.7407510812632958 0.39391575612007834 -0.6988879986498651 -0.8305325983902971 0.14206875867214763 0.07405387425736554 -0.8873196942119936 0.035957161223038936 -0.11112630669458712 -0.46471846942277395 -0.3725493389037824 0.05657751568093494 -0.7666276670126553 0.9403652507021909 0.27220227965827193 -0.286147869409781 0.6651420665817871 -0.8995955773935969 0.6532328564794192 -0.6504834602475178 0.12480588813926508 0.18730839964053958 0.5037187693781016 0.981412892106619 -0.021419693562902964 -0.4876402689800139 0.5166334495378044 0.8234382626245942 0.7648313007763841 -0.623243184415526 0.04209096869300044 -0.9790256677629467 -0.40462854096249457 -0.21864951971014612 0.6752202471205313 0.5445311676448679 -0.895579144778299 0.5684240184552363 -0.3403245089239677 0.3075845989406427 -0.3571884009283406 -0.42171893344025224 -0.40478542796354633 -0.1676300352893787 -0.45517635482416097 -0.37230905940329606 0.7239735158518215 -0.29719645896115376 -0.5421708303839659 0.8663379440303669 0.34941387501878896 0.4783175797732149 0.9118513006054763 0.12458765202540523 -0.38435815546516494 0.24162198455843442 0.29571615996152234 -0.8612458918724715 0.4469361756348811 0.35511443824974864 -0.869271170012148 -0.7141037935420669 0.7835487444727649 0.3456544456996853 -0.6798217783076328 -0.6866185356289398 -0.724967546642542 0.29654671472234906 0.05786352260670635 -0.6278450129472948 -0.20771088310403174 -0.23458829695155736 -0.891887193226806 -0.6861928819723981 0.49699946619531254 -0.19968216234659542 -0.18308895782216883 -0.2829349567139776 -0.36476610007749577 0.24512328747528644 0.19523126225180953 0.11806992133196448 0.667839500858165 0.9031855550994994 -0.7693074007893221 -0.629626361915957 -0.6413739380332861 0.5658611927311585 0.30656431880230683 -0.34282320841300185 -0.8531107464566627 -0.21470862863653095 0.20282749826366242 -0.22555600541719856 0.03313264016200046 -0.7736236678021833 0.15154163352179628 -0.2529631578290208 -0.1176136313127103 0.41708059689756505 -0.15567517054013136 0.20405455921348703 -0.5257284354285432 0.4086734601622364 0.07779962070793545 -0.5767275117197916 -0.33277425999225785 0.24192238333032612 -0.9892860999161097 0.37069450997100195 -0.9920416866909945 0.3335499824087349 -0.4961358355728498 0.5819885230118433 -0.7325600607714988 0.4890037765757065 0.415152683577241 0.9246015277917234 -0.2704540804126634 -0.7686097451504541 0.8870287900175873 -0.9229163842580668 0.059683385638240605 0.7664243124357744 0.14986699327998343 -0.2998300254012187 0.8486377500323199 0.8583087183495746 -0.1340035981157479 -0.24903718119117224 0.7247598856771522 -0.24931904712695108 -0.3614529822570569 -0.8126210647045322 0.7940754103485863 -0.9680623564346769 -0.7182358679285192 0.7779023924475903 0.9057982095033719 -0.6498592339286946 0.8330407779770137 0.8010352330695136 -0.30357311249677754 0.9336489905595138 -0.020977969160667742 0.15207974000375146 0.5337245528056445 -0.6725006788506731 0.16161326829442912 0.14342005764165644 0.7759391347567959 0.9285943832153907 0.6602342319185592 -0.13767762165140995 0.94331280119059 0.29589072631459246 -0.27165014659014974 -0.8208551671353617 0.9014307584557566 -0.7931707976815423 -0.18367318435504498 -0.4021105009735044 -0.2618815827273955 -0.9401230164340648 -0.9919583996235446 0.2586200248607633 0.21892657920503433 0.8632544460592704 -0.7664778889140311 -0.9360913766460459 -0.10108693042088124 -0.35500764824410624 0.945396984858536 -0.6886237334068865 0.48120583333468825 -0.10325090569832551 0.8653224721728932 -0.438328293660464 0.013752940313772166 +-0.5391044505407983 0.5402120693542498 0.30372896491413437 -0.9437826721823073 0.46260246086993595 0.1064269343466826 0.5875751578841515 -0.6692102637932074 -0.2186228443256657 -0.13711781854119698 -0.27997483684061386 -0.8116344731924638 0.6556152555300727 -0.35065810092496585 -0.5065984229267964 0.3821634013874502 0.16942574452593617 0.3415311993299477 -0.7560416976541211 0.038016675983538306 -0.008451962783111666 -0.5626020349826741 -0.6431688459318872 0.8576832045930143 -0.41189963557056997 0.23239490352886394 -0.6399493536978647 0.7583018928007883 0.2579105892454616 0.9395679398929466 0.7265556921918519 -0.16030330967976103 -0.1634808493679485 -0.24600939464552818 -0.8331430390211352 0.0024947372584391836 -0.9917404706996702 0.3044580896157172 -0.07942575946298502 0.9136723092235104 -0.51526949367441 0.47166131745280815 -0.10012288546460923 -0.9587828586396714 -0.0186429657185867 -0.543791734069019 0.003775268316508429 -0.32482518167417407 0.5191613881241333 -0.4271791120526136 0.3487046678769008 -0.6235921367579431 -0.9050845443578397 0.07421783687294647 -0.29604649558895635 -0.08582424577488967 0.2603015288800974 -0.5455150004015743 -0.3600879551713845 -0.4188509137346941 0.920439432408704 0.03294636106606541 -0.8664288676083534 -0.7466620010209064 0.5299585157945412 0.9236650361465235 0.555175599573899 -0.9673429495892325 -0.516379297112586 0.06497180895928678 -0.7493592514311072 0.39686597026102577 -0.34337562552941736 0.8625564774317007 0.7810427905972184 0.9261185291026002 0.48248926166979045 -0.8561214923330462 -0.6107252387006048 -0.16517828166582804 0.6693542105504733 -0.10249844798879182 0.7524750406719836 -0.5466615427762886 0.19004939179188707 0.9313877692983576 0.7499051171131415 0.8387718824168993 -0.3120545762562772 -0.15913445936977633 -0.624285842649134 -0.8635938024122223 -0.931393550412873 -0.8651879793595036 -0.5062709583070135 0.026286658044711197 -0.32149909678974775 0.6418275230546646 -0.8879112511943652 0.6076460973140101 -0.7632131857791864 0.5803216110276577 -0.9071152048803617 0.4298497170263116 -0.7995638299190884 0.9363920127973431 0.961897287742022 0.8665909260993991 -0.14975540281886235 0.45456605126373884 -0.9935145174635467 0.04590961599968524 0.43803794488385384 -0.574241899285812 0.36779337738590856 0.6891273548990455 0.5380061823645479 -0.43447412045149303 0.5473271746656545 0.3853118167460201 0.1583522265240893 0.9392868490800486 0.3803465829561459 -0.9986561341671225 0.9883103966197939 -0.26830683557296053 -0.7609996769730456 0.3543676727882188 -0.37978378468622687 0.3103196839937008 0.06530193729176204 0.06513862402039416 -0.17209768916934487 0.16672489941337743 -0.3979767029305752 0.3407339600985637 -0.8062948592278771 0.6822677890578537 0.4572720520562754 0.9516007995804501 -0.7146448143532147 0.037327918875778465 -0.1125970723031704 -0.9080260079470961 -0.29304433894606463 0.303802810277084 -0.04189200347673028 -0.9684442766849841 0.0953120563254588 0.9016299411099951 -0.6559781000496299 -0.33856228000306277 0.11976829779448028 0.35822160632623956 0.9309369248869552 -0.652825531300065 -0.821196987040157 0.7316660652716973 -0.7672655928591217 0.7216493915553537 0.5622305260677594 -0.1287040335676839 0.5396031344314647 -0.23763717369994275 -0.414177555890209 0.0912763043085707 0.6274880886732748 -0.3205133970978029 -0.4440228559458921 -0.7157731367941769 0.9972796185817552 0.8440710692187792 0.3475317288828499 -0.46769439269634305 -0.03855551656179301 -0.5252922271063007 -0.6536198672736253 0.016403461659380447 0.5778162817120105 -0.1980794705742137 -0.37246719138869344 -0.7247415814824056 0.9604998050878155 -0.6462387400189731 -0.23883829267638723 -0.7482016575861303 0.6696513703349691 -0.13960246529448206 0.512717244028025 -0.7819861524344693 0.9933389992036255 0.6363564574919183 -0.5892629666291989 -0.25725792423088034 0.11415510631076997 -0.6612815814797173 -0.5563234605980447 0.500664034637289 -0.5206577184726369 0.03884408188290123 +0.3665241560728325 -0.1946789872694359 0.024310956886663515 -0.2654490388957049 0.6970882768081637 -0.630660782330924 -0.8701041672076382 0.34850873186754683 0.44714162685365055 0.6946828524967792 0.9681861692849483 -0.9481770685022517 -0.7254775818384689 -0.39497576282655245 0.8125749942675693 -0.38788872086634973 -0.9214047606522313 0.855940693475749 0.9050897683917445 0.11210836884101427 -0.033548069234739186 0.9843945095677706 -0.07936309380404438 -0.8694075322992749 -0.6731129585181408 0.04525902400666948 -0.7645696993473181 -0.04226442800233743 0.439719068851393 0.11562434489386098 -0.784654236776215 -0.2823052036166136 0.44703452739967364 -0.5947685714869788 -0.140921039660155 0.9009572027893218 0.6045277650697889 -0.5994673430317736 -0.11193602740876418 0.6457309397388828 0.7090812751302362 0.5713877974337997 -0.541390353770008 0.778617887496672 0.17122765417591568 0.6553197806886806 -0.9263668405263992 -0.03631293036312 -0.6282800171652287 0.7002788647928355 -0.01753468857170981 0.8060158888707405 0.8787114445374358 0.7643637789445752 0.78724551462678 0.06317413690948248 0.9772887317242707 -0.7410120016182891 0.6194664887712249 0.39140427596271166 -0.5042991373233603 0.33875981985713244 0.4187554369047273 0.5615817935481779 -0.6014339219111646 0.18876982288272148 0.24049396811478174 -0.8091384192337481 -0.8159675287661228 -0.08393092662460533 -0.20970014957388283 0.16482696062454738 0.9312262818761361 0.2909354908609507 -0.2742809769701824 -0.4688539511097898 -0.8385896549859695 -0.9814381938344994 -0.3392785587597713 0.06363557777684736 -0.09313504075776646 0.9469562557475288 -0.6478480013147847 0.19295670369697726 -0.4919224407953475 0.9274340452568233 -0.13175331804743862 -0.049031130821120206 -0.0517706844728969 0.2873450546160343 -0.24227370931229752 0.272847749155539 0.9930779797974292 -0.71533631234373 -0.8954116716903391 0.14163750513374063 -0.07940995534442719 -0.24501809375026373 0.6618419808854064 -0.18652757372440232 -0.2953576639072908 0.22433310003101403 0.6128467382060663 0.8930070248522721 -0.6314014581450216 -0.6226715232033602 0.8895606877638318 0.052304400932775996 0.849381136965053 -0.9249676592576224 -0.9442043473046404 -0.8074662340701169 0.7770705095811257 -0.25947907145932425 0.9062748057842733 -0.41781616368524666 -0.5774847361043236 -0.03581540383550186 -0.8855880496204289 0.9806795474171008 -0.5519512730588241 0.42085690034793277 -0.81652093049759 0.610339674568495 0.2431931471090003 0.014655528190841371 -0.12256479085408101 -0.7489044934234115 0.8544837677908341 0.9635331156218809 -0.5076918039758549 0.3318623315127398 -0.8215547124734053 -0.8859735560559889 0.6507542728074067 -0.2235149168335233 -0.16475927526401724 -0.12942507547033633 -0.6000140367361066 0.20227027104220574 -0.6737050723746714 -0.18465734065325123 0.11492140672900808 0.046628964465886824 -0.6102681526048479 0.2730293836528872 0.04836963541063688 -0.903233243635146 -0.5714495837652311 0.35191329719071995 -0.7197186365448696 0.9745432077458112 0.3021253559100294 0.5600302519877605 0.34749988800811593 0.9658584263663716 -0.9238306363744546 -0.7523595674472914 0.4530792466557476 0.2522653799145056 -0.8269372439673901 0.11711980972859859 -0.7673698134377442 0.1960560570703882 0.9704673126360421 0.9748760201299593 0.24174089687040556 0.31650574043196156 -0.7320894313923958 0.7542806852486574 -0.2425704748304105 0.6833822901212241 -0.12400788290368614 0.49582763113360917 0.6742485102851217 -0.3277911971693397 0.17231888042017762 0.8751571135375364 0.14311900907627972 0.14598689460928727 0.5588268976416462 0.6307774598163209 -0.6202726324468535 -0.004171769136514847 -0.034424422274778266 -0.004822141824137427 0.5785117568222533 -0.17175784230985913 0.5764776652097596 -0.42300021548355526 -0.7764724466852564 -0.8597970534541308 -0.7333597919751629 0.37374365140151555 0.3758472349005899 -0.9579066970347798 0.5728853602844586 -0.6521052655177149 -0.8139547712240471 0.748712945051274 +-0.3205680645873339 0.9967774430544487 -0.21446457354620474 -0.6155669599854985 0.3499463771140734 -0.5326003326137394 -0.5729118999444358 -0.7101349717600343 -0.7152400862078301 0.4051319233852151 0.24556958267725593 -0.8286803180928335 -0.319600126790869 -0.44711787101905065 0.23715585804689376 -0.007866656505222114 -0.27113538140638593 -0.17119344988895757 -0.7975808532249509 -0.3042683145943208 -0.9936732351019699 -0.12112745600912578 -0.8127390455560262 0.15967926311450276 -0.5414935821148885 -0.740153363243137 0.5452556677219951 0.45090855560876175 0.08610372364904428 0.7199321072576572 -0.30032603931090107 -0.6735456701394309 0.22621596472159733 0.05712138619014073 0.12145843868139017 0.16053926980820532 -0.19667381327068245 -0.9933984520086385 -0.25123010334864926 -0.5669205171307319 0.767582089043557 0.8100670528709533 0.7972277930359608 0.8591924402540465 -0.26602108919293843 -0.3058661177471995 -0.40614306232062636 -0.7391776492928344 0.5270820604370334 0.7625853448297151 -0.8666526752881085 -0.18804539167435785 0.3085157837502812 0.9838251855145757 0.7765869132446599 0.23758201156780956 0.17760684101264768 0.8613884450919733 0.619383649105387 -0.007310203407711269 0.15134834066151126 -0.16350247000505802 0.45049645667823435 0.7056737306036569 0.4539761585173534 -0.6573974726417868 0.8239660900580048 0.8266915897367746 -0.27064334618460806 -0.6191206165544312 0.9075962784211347 0.3892698902884273 -0.7130041208369633 -0.9800966980660528 -0.6567210392903196 -0.4763539220467099 0.9642627545155593 0.021723166008310812 0.37467631643138843 0.5860543005176206 0.3616897982971303 0.08644821104244871 -0.327960002033443 -0.04653108459559374 -0.9320151999262869 -0.004789474723817078 0.46898399741829633 0.6727998123369172 -0.40745634509901074 -0.28507481220790676 0.42091866226796393 -0.07974388969002422 0.5561321271723831 0.8432632878031041 -0.511946172897257 0.32443844843155634 0.09288891043853331 -0.34644990554619826 -0.5592536225726992 0.13671788006234498 -0.40827409749363386 0.09587454279717678 0.1624969035401127 -0.1896054053272782 -0.6063293485167991 -0.9115210116213601 -0.19679980315601187 0.6614693992018872 -0.46614582389170844 0.6134191210724926 -0.5802620501500191 -0.9376001109729533 0.4464791014966054 -0.27461011869885366 0.9541097015473925 0.4050103681117132 -0.7488418770984175 0.6069992129977577 0.8330265652708018 0.9009192257443115 -0.8807634706615901 -0.03010241164547134 0.3789715061518968 0.4302924379337352 0.16427669764510489 0.527896645367717 -0.08975490207217263 0.5881768616162937 -0.31071465184077374 0.7886982831348124 0.004861584191447221 -0.15319969489440122 0.765547880491823 -0.4040929175304142 -0.3558258930151612 -0.46235842735859634 -0.32880707624563743 -0.8235185755314391 0.15416584124386 0.21621601393543766 -0.28905435380487177 0.4053775909842241 0.18803587432080793 -0.8346617626647308 0.3076621508991071 0.28861996645965604 0.2953190893048012 0.4838745800514006 0.7423154509982848 -0.2501492423338285 0.971510408958753 0.2576881000116169 0.8100356556040647 -0.6356967024071678 0.7883908609152741 0.6521913933042924 -0.30861317941280864 -0.2276818693303071 0.7945827439255189 -0.3659611974237995 -0.565586837289175 -0.5467674445032404 -0.1652556131106122 -0.8685236828639051 -0.8612155622425886 0.7948805348724148 -0.09887794872761524 0.13519023592213553 0.7119058912454781 -0.25319581749720377 -0.8669272804235493 0.3389519946574433 -0.16018928031025914 -0.5326265261102656 0.8666333594505089 0.901773540299952 0.9051922805937433 -0.2591225048208192 0.12411822185629551 0.5117321691973002 -0.4680166385657283 0.16002646550104638 0.6379384588931976 -0.4126522854618484 0.6186300825647737 -0.496341148284011 -0.7020521512727593 -0.5495976615512923 0.4534501919405203 0.1395257104309866 0.8250007554736947 0.7060557555844451 -0.5628589805828357 -0.7167015614539953 0.6012772787298222 -0.9427952334377709 0.28616723593311266 -0.5459360901154877 0.864245340151645 0.8226714152411527 +0.7638624970166916 -0.15825966398850078 0.7044172819327934 0.025858421761329797 0.7772046848894076 -0.9503633828120119 0.3031334316592982 -0.7807385848621984 -0.46910071039295764 0.5011156890836399 -0.4289025536806834 -0.7702944575938688 0.5454811812273821 -0.8588174999012113 -0.24500327889114493 0.49723316198355527 -0.6657479527818599 -0.028982838662412247 0.8260894336723097 -0.09497851758327136 0.613676804554127 0.6415071013490083 -0.6438835760097716 -0.7514995221804901 0.15416881346414013 0.49672068671655945 -0.6279773534489561 0.16234447941462138 0.4744086219285977 -0.8771631238466022 0.5700589082143575 0.3190952466368744 -0.4523472991598092 -0.15451229178891523 0.9315380665332758 -0.41210004945408807 0.635648734776247 -0.7657697748495513 0.21917837800028428 0.9730328718478165 -0.6937917138426994 -0.09372188283572669 0.9240696505572485 -0.5423065046088871 0.4176658592655498 -0.667984870844436 -0.004978522334451396 0.18562656690339074 0.8164624121586792 -0.23707839401453112 0.21537233655299293 -0.29679012158780194 -0.15419413436640594 -0.7934514473086378 -0.25292501798122413 0.6293172259023685 -0.3047357805723243 0.1647245953997989 0.05928196840687883 -0.8762818831629273 0.9186729381088576 -0.27547160356902634 0.12448228550118223 0.2602081290200151 -0.15141253554516054 0.906924279750184 -0.7569264436322842 -0.9135940012210904 -0.8493826200965557 0.5992727788927592 -0.9976441197837094 -0.5809862097345182 0.4764271851194102 0.41544897461897223 0.17766015306139482 -0.20060383047444796 0.479889534147081 0.6619148319229948 0.9973580910193747 0.03725554680876164 0.7794422153324532 -0.8719038547739444 -0.38146350277466046 -0.5698283817682408 0.6767443000149533 -0.5396829313334288 0.15712776784769877 0.4916079728780711 0.7829595200213681 0.5097486909771378 0.9967129886875292 -0.19740039016800215 0.6920512030710868 -0.9886423050380877 0.1231346354062306 -0.2206694563814111 -0.7555032805130986 0.5542310842552225 -0.8315889226869699 0.9279622952068038 0.6054433013673985 0.4486121675706378 0.3732133059840361 0.38038598365759424 -0.696421494448219 0.4770099679070956 -0.8729445853853368 0.16766970193901543 -0.9087312847202087 0.6847731265253034 0.4667236647937487 -0.08353286116021641 0.40137209933316065 0.20991148345283595 -0.8255078946011498 0.019752877458703466 -0.9276415432619278 -0.21328737139868825 0.4269903984843184 -0.16746001456351278 0.030281417796799603 0.5976035460563371 -0.006694966227853261 -0.9573153286606155 -0.7764695564809172 0.737417369015746 0.6436350712284407 -0.6445984223682981 0.7892897039574143 -0.38534215161607954 0.013075327382181756 -0.7574715012033086 -0.8457621943019389 0.4046278479062393 -0.2892240936592909 0.3658372112284056 -0.3928020721846617 0.3689562849003851 -0.8083599646571957 -0.620213271459561 -0.8628613070510582 -0.9334851046603463 0.022653661625529287 0.21752086545122173 0.580478198716321 -0.5641338261744677 -0.9496022360950198 -0.429030776683639 0.03903677375907533 -0.14878241006790072 0.8087287377965662 -0.21546182036389294 -0.9151743879567258 0.10344417043874876 0.810231206945567 -0.41000739545311093 -0.7695011236361844 0.936257763537524 0.7096112349933976 -0.2632340694136268 -0.6308182211833213 -0.9258056340677361 0.8047273655167397 0.2861138242274248 -0.42151173528692065 0.39267538804292346 -0.28497673117291566 -0.6953768615532476 -0.355888028678669 -0.24532499787417628 0.17591778554895754 -0.7998272206635557 -0.6022215792756165 0.9414413084859719 -0.2651495457219728 -0.8701941529347719 -0.6861014985555214 -0.7425015321787891 -0.9419166648972899 -0.7796158168867242 -0.4661790362794631 -0.17191723992448038 0.19538217921403045 -0.28844408838087765 -0.015024482366288172 0.1933605343161029 0.14921656130883498 0.5115044560136388 0.2099637183528562 -0.23226583710902893 -0.6685442746348009 -0.9794781817962117 -0.30177573668393154 -0.8977112828781741 -0.5467476218684826 0.920495793349903 0.24882747228071866 -0.05261260729093098 0.8066432778392996 0.6597700442386776 +0.24216297444603208 0.6443306833717231 -0.6230927056886122 -0.6677763790821052 -0.7092468061191108 0.8130923301912196 0.2082185370842191 0.5888018081483986 0.3482319689622533 -0.6319180892298106 -0.49120196213474054 -0.7681878238269431 0.8402381161530641 -0.013258935053254817 0.8776990678404366 0.609325468443032 0.47871070131477134 0.09350320070442297 0.3554097685615101 0.8926010277587 0.27952100482457953 -0.8103620108424097 -0.01224375437020453 0.7432324872885618 0.9295758864957291 -0.7874808899737114 0.064749456506358 0.1338341716985556 -0.9720053974831695 -0.7064529205019836 0.15708788910103388 -0.5275458540667544 0.17479185562137545 0.5536633460119698 0.07883358585920064 0.5010390811975096 -0.26960200004068025 0.030059940189368417 0.8402090933455815 -0.9414603869818432 0.46468088725977275 0.3633567060839442 0.16660765792921106 -0.7511146309804224 0.3958059682867985 -0.29451782905430246 0.08145977231492041 -0.38909740421583305 -0.7132942399149982 0.6217193115914248 0.2865600507032269 -0.3908657772572792 0.01707186889777068 -0.7737446730047226 -0.8687655174805227 -0.012618173453752268 0.22270256768458951 0.8292687709140254 0.9159525763857559 -0.4321397582634121 0.24230023400756484 -0.6091820167985 0.03416986671169542 -0.5447216797565426 -0.5844873758971703 0.9121931546334634 -0.4231558869454324 0.021213522769447657 -0.07219468917918381 -0.3719729403538947 -0.5629669468645226 -0.9115209264196538 -0.9114298348805809 -0.40192915259389217 0.9352083434820344 0.3524924855199716 -0.6532112824813834 -0.5872423326453293 -0.9215764373536062 -0.4154892001632966 0.8776315438521058 -0.6364039810734636 -0.14602185486139252 -0.7867588652113886 -0.1429338036821166 -0.5671361527823617 -0.930798020031798 -0.22149030967064776 -0.9161307441442199 -0.9984175551224639 0.06001742484101524 -0.7940958479267699 0.04239399656412446 -0.4885267875291537 -0.08343339225779145 0.6716854340269949 -0.36357712190206803 0.7099101491512878 -0.9917260139619806 0.48132608281837297 -0.3482869558860935 0.20823596667523003 0.9710615068602522 0.23722112199499845 -0.11284020045472754 0.5671426297239666 0.9898599155871275 -0.32404013851915137 0.8895422081032607 -0.09824277866540276 -0.08248805943630488 0.06799124658407285 0.9618883061482701 0.5391631601405766 -0.9999360707178886 0.04928007635877152 0.002038611673002899 -0.21851681431389158 -0.6482455083506933 0.8428050607928357 -0.6970295646483387 -0.9197597897716563 -0.9621996620862601 0.90233547980585 0.1754581001287312 -0.8405529469112949 -0.06689144330751917 0.8128656538416066 -0.6371464562066516 0.08454062904770976 0.4864986690235593 -0.003911751050767132 0.8875743140506382 -0.8377138868086496 -0.8498623080821053 -0.6420082075445726 0.30013850939113507 -0.8075552025484356 0.8276474867535213 0.030076814475270774 0.1047860405403156 0.3500345703914005 0.9353072875092099 0.6545411033041348 0.6573408818159467 -0.47328278940496293 -0.6051686409618273 -0.8899277311364888 0.2949985875290253 0.7382537339250292 0.9663278413120242 -0.733565706650601 -0.25720890943609875 -0.1665300361434987 0.8855492849003963 0.031461643210090706 -0.3951324306749242 -0.9909747032476495 0.2874065397359571 0.40046315243148456 0.09181881490765265 0.7260553190752166 -0.5128851406269026 0.707246552610421 0.47216521299811975 0.9019738402777204 0.11853068183925597 0.0684141005501051 0.98130401757958 0.3900884790544097 0.9092967471349678 0.04102268738977832 -0.2377180307170328 -0.4627617095768446 -0.9225944006311286 -0.6322519682126384 0.34237276549063855 -0.7712957018819224 0.7445090749199597 -0.5559174779612901 -0.059580868310365354 0.48198979016662813 0.7154113742719079 0.31851711956806317 0.973950158876163 0.6112724792772808 -0.6668669764926265 -0.0029353234116080706 -0.056373184728494063 -0.24285167426282928 0.43187682925962156 0.9929716617448561 0.15321761024155967 0.9345784723642785 0.5339143873487366 -0.005082378676799504 0.9569046701747603 -0.9442376987112657 0.20366177588997703 0.9794601182715708 +-0.9802385887435257 -0.47591743965169964 -0.3654684528401453 -0.5484339875886461 -0.09083687283363928 -0.31966411351163004 0.04876443667387531 -0.9627820998006955 -0.7859349354881442 -0.6503271946359772 0.8363895663169354 -0.2649617039078811 -0.9631840770392996 0.8139399328768651 0.4524224853836081 -0.7184601402860966 -0.32750925654135354 0.5013014416897807 0.7166928486089985 -0.6750970445042326 -0.21600593761292974 -0.19829635702422932 0.2456019433897001 -0.69305124129726 0.30309500092437425 -0.6542380341502672 0.9539897864575102 -0.41399835122609074 -0.6043045228271424 -0.6469022932369748 0.658675372811637 0.21926475115235777 -0.7633580616846047 -0.13729376276127092 -0.3720165698394604 -0.008883985997755861 0.236116668141785 0.936680720020096 0.05505324900824382 -0.9463113622136046 0.9586626558016911 -0.902910683809681 -0.8630168899804251 0.9316157528067954 0.29780720129899296 0.9764207433457579 -0.7617965213217586 0.9561875460533296 -0.6138327996949393 0.5725359656986446 -0.6555467596781297 0.7230234417168779 0.6420687052384466 0.9313305874275712 0.14713802962166134 0.6626066325396507 0.31954009169240183 -0.4854238584730022 -0.4452133098858466 -0.6836042924432515 0.49320080989191584 0.5120953403361732 -0.516587048698689 0.6628580891925937 -0.1889819297901263 0.15941221912954018 -0.7486596685884399 -0.8569833129230484 -0.3458757083132429 -0.4314354489888237 -0.8324167832134246 0.8997666773954804 -0.4035664134036485 -0.22461470711287146 0.20355032517099714 0.0245399507988191 0.38078411679909285 -0.6821785953606185 0.2816819715268086 0.9488090178556043 -0.44091589997754 0.6178984899878168 0.7026939468531073 -0.5592592633085165 -0.9419541360651909 0.2608435483039071 -0.400267566043627 -0.11887461924513953 0.838146845556385 0.396531587817633 0.7225320063895471 -0.19697914415097295 0.1432524859700064 0.5889474233825756 0.9366447727751797 -0.7473354514400632 -0.28737061793634244 -0.8524084127029945 0.790156348374756 0.994243398361836 0.4697519824928218 0.14272719796706324 0.991822987462343 -0.29226093500020256 -0.8558924380423591 0.27917150447858985 0.11060477958735082 -0.9315735200549968 0.14290397114336595 -0.6132499256216914 0.09783262448326879 -0.423155449254047 -0.028413492562345155 -0.24027561475624415 0.5076191737320277 -0.5283849597457608 0.5586520509381194 -0.8401890814305515 -0.3972367038658049 0.13717181991015637 0.0054010394875936285 -0.7816060637442277 0.22287688944739914 -0.7558213796690676 0.319958317984957 -0.1264202346777068 0.4720922793402571 -0.6908044408577587 -0.7763561801523071 0.44003234165782024 -0.958618508238755 0.8878732604339115 0.11229316013451118 -0.8340992679994808 0.9980033420052157 0.7521003324834068 -0.6186758791219378 -0.5509775942940951 0.8092084419969316 -0.6835638621120566 -0.8774274475937227 0.23060616313002202 -0.18780582858306327 -0.4624438811465559 -0.8930869502522254 0.20784614297526138 0.5345074356107802 -0.7439380120728485 0.48855265821085814 0.4432435267258581 -0.9148704697681864 -0.5028488886000289 0.14060171826302148 0.02048214627522693 -0.5197486473734851 -0.9765648975695154 0.7793200909042937 0.8960530874044161 -0.039428191021855685 -0.9505131918389427 0.28363278497606803 -0.8332277000932187 0.6730343935177197 -0.7292993411872237 0.8096742353689514 -0.8462797409318752 -0.7129515252428007 -0.7350075408708252 -0.5721473776150583 -0.6457046783033886 0.504438496618238 -0.9203782120220318 0.10132653402897684 -0.3804521446577165 -0.3468885281928533 0.3450805787231508 0.04291003227277557 0.27241133141732843 -0.8186709424815826 -0.4035178304354805 -0.535569611744853 -0.13771374064283703 0.7728944956661876 0.2718737160311484 -0.07461255096687625 -0.8450478222455573 0.9508865977356928 0.2750177133267766 -0.3088863017428738 0.8471089660232531 -0.7897009182623711 -0.2819857436797544 0.9341027812838132 -0.6510815246078259 -0.9526736568206509 -0.5161959804399288 0.13758382473159725 0.7812398692128975 0.08134325700744793 0.756157005449241 +0.9440324128849276 0.20550132525242004 -0.7667295767841424 -0.13032566696850867 -0.47965156717320157 0.8256448407641921 0.2602179083497582 -0.2271654206403686 -0.5004783843923977 0.6441974983709908 -0.13290652539115744 0.931816637614669 0.7145855098405118 -0.16024092219768682 0.037273764232991 0.7911982711858343 0.8439818714461353 -0.1615385410535668 0.17908137818303316 -0.07005263119688099 0.05936265848918998 -0.8881072466812561 -0.39155126511003746 -0.3703768338837268 -0.4572465146427489 0.2951126722916446 -0.8018705729025437 0.5997212505836673 0.6316072772705343 -0.007205973949498068 -0.5280194983530926 0.029180332236315554 -0.27108383490376275 -0.1714410667252253 -0.07585343715974924 0.5614398980859572 -0.6658548662829185 0.09075832403900108 -0.7768734454343618 -0.28326352418937395 -0.6634737681541294 -0.38287962959037825 0.49934126083508623 -0.9750817250819459 -0.8219256146051925 0.2025562663654259 0.11981766046846287 0.07526368387800697 -0.9449594938958985 0.7559107475212916 -0.9556842619093533 -0.4371131921002642 0.46022332805585053 0.5905219954491021 0.06713602849012457 0.9910918294182491 -0.22691586661400165 0.49243234842579997 -0.5913631492221807 0.8418068153727634 0.29075995789682363 0.3947271178076299 0.9100294388364742 0.429653251656704 0.176509314124625 -0.7597523102141195 0.8163381199261444 0.4825805063297508 -0.10792880426888396 -0.3094002474123283 -0.361374024294252 -0.31990773316207743 0.11741878312978415 0.27657351620127324 0.9087589440708597 0.8765794267129661 0.9963312429716704 -0.2689410672116159 0.9532048405083795 -0.1081733254231736 -0.8398806839643571 0.937965514364755 -0.1756206088613137 0.5294943047469236 0.05253886440615618 0.5885923927757557 -0.3353673027604973 -0.4132865189268149 -0.13077744883021447 -0.8137438100081187 0.9887023921365412 0.5598148387040309 -0.875362414013922 0.4859711163898075 0.7100823857121186 0.13900963704203417 -0.48105170671552777 0.4532322811755307 0.026084701440184155 -0.8740389806376698 0.9600483049564801 0.1524033989849911 -0.2920774864622444 -0.4490805306189616 0.03408540833894724 -0.8725950730710477 -0.1765107902110652 -0.7161561829587102 0.3283980628487806 0.11326758793218317 -0.2580499103927212 -0.8486986429008299 0.3659013702813063 -0.08578164154506851 -0.3674294025956093 0.6635934325975961 0.8475361366246992 0.3374864957229522 -0.3824639329723454 0.9844558763685822 0.32241604074115604 0.03463537549823403 -0.784636501039891 0.49952089211449824 -0.3273143897624222 -0.9108694395244659 -0.40455187039258456 0.6032471700017559 -0.4544611100168747 0.853090744821769 0.5799368116526908 -0.5687581276844285 -0.7121137672912672 -0.1840566469378928 0.784321629902532 0.9177745098330623 0.8739383086037207 -0.6037718952673354 0.2814315201215998 -0.2903326545507685 -0.10704478052412503 -0.003184614060930624 0.4156023715745174 0.4617070323568573 0.5086400557017858 -0.813470340159477 -0.32030872847318115 -0.23973336791217492 0.0198068172055732 -0.4807313236960711 -0.1487618442656935 0.18851091012645282 0.4297814934025528 -0.6105527367902823 -0.6241389194150648 -0.4456683334856004 -0.8796466135606158 -0.08495990657064167 0.005673752002742338 0.04595641387384419 0.815253003359178 -0.07403407138002982 0.9282497334113757 -0.5472847752276562 0.8737038565085555 0.5419079614918196 0.267293395513694 -0.7775609921126343 0.8729491716593512 0.5397429106093019 0.6062621552240703 -0.5603549652194313 -0.3585919588456452 -0.14056252084660326 -0.9620789443912647 -0.09994785333357292 0.9084891255792362 0.6360882581835385 -0.4372855849388486 0.5922488009546352 0.1723144632590432 0.09649277352804475 -0.6421829582179897 -0.31772748633978987 0.8876530227478487 -0.509534564309631 -0.7457251028625065 0.7953776426016181 -0.9597445378336682 0.11415888002195373 -0.5605184611977465 0.02161093143028192 -0.8788191930049469 0.2780116266619652 0.5567362283873132 -0.7505009472985382 -0.5526700072700406 -0.2434941172054872 -0.301093753859456 -0.7710084777774855 +-0.6380729024448135 -0.5572147758105916 0.009389884391703074 0.729942457438941 0.6691260850645675 -0.9424333267301959 0.1030770590875012 -0.82249327547259 0.8505572111283557 0.683045272116434 0.9297622003672563 0.16579999422034852 -0.6948646513583046 0.5987299244812745 0.9167026927048296 -0.027435393471189506 0.34130076417192656 0.8296037181083622 -0.26674622170256046 -0.01711476674018697 0.7650072174821454 0.8412926920923145 -0.14705438292033013 0.5900504255360428 0.562757069331739 -0.45097170643518214 -0.41080853268839324 -0.09204154122858554 -0.8424762151185299 -0.8387467054036897 0.6041329632711003 0.07970568205898698 -0.8668424718575483 0.9597430921394157 -0.16063878705607193 -0.4254081239441314 0.8365608789411891 0.6519882577864238 -0.9085782147491852 0.9353064041158701 -0.4278927477511343 0.4943990445611268 -0.3137135779149782 0.387879553676693 -0.31417310820151445 0.12121922595237722 -0.9546623370832379 0.7959197866700847 -0.41902480547975784 0.41585295010886125 -0.5889002581882841 -0.7742997311357078 -0.8412438876340294 -0.4516958877590602 0.6261344375773168 0.893544085431633 -0.2070146594214528 0.4168925953866618 -0.904889372583928 -0.8587734435202969 0.8537916507101779 -0.9030273548771963 -0.10367811004989003 -0.657562265904011 -0.010486954504061785 0.7328450459045066 -0.20294803658318017 0.28416032376354705 0.5641221411913879 -0.195784099054096 0.8712153356816481 -0.9372001315427154 0.80251663255025 0.36277144662042193 -0.8893343295863552 0.9587983983663664 0.8492217354621612 0.3708828652659919 -0.9801680498451801 -0.7870696788305838 0.6346873208566728 -0.3014759425390128 -0.5342614266775565 -0.40712632167483775 -0.34827594656316196 -0.5578202020301146 -0.7560088090467767 -0.7185968547432215 0.29378062079682143 -0.9325671886415461 0.3605619649598131 0.7531970805027415 0.4089280041854648 0.24654955808286205 -0.6895880811127262 0.8929761625413104 -0.220095974756922 0.8219437319111855 0.7886952769324715 -0.25818507402249224 -0.23778562709228046 0.19838811630477338 -0.9370206005471431 0.29336155547954923 -0.7595346072916813 -0.7864333344156897 0.8397090680448047 -0.1497156585587649 -0.6397278565827467 0.4602774717915157 -0.33032943630428924 0.9934649952864774 -0.6169072208748261 0.7632818340935401 -0.49761235128168857 0.009646643107462216 0.9514967646811188 -0.001956325173001483 0.9209426312362876 -0.08971257931593524 0.5538191792409344 0.8733877791916398 0.9934334277640295 0.5587328758447518 -0.053622270841920505 -0.40754755005497767 0.9108360176267996 -0.5809895330922863 -0.30881345797445303 -0.9362840852305598 -0.409547923728687 0.2470582814979314 0.7635656920021914 0.8897528842360469 0.7309085487655922 -0.22346158046609732 0.8649150344771228 -0.7855095597350641 -0.7289588577680253 -0.2264697701574827 0.3529464923051253 0.018888111865564383 0.33881951893450846 0.9068899213938493 -0.335633522228326 0.6244940983191487 -0.4822268043877469 -0.8755925337296342 0.7049798253899613 -0.8506142346681844 -0.4642074413264041 -0.5138565563145323 0.7622615922851506 0.6352731535106755 -0.6423495125230745 0.7718363856991246 0.8116889244265839 0.12621262777456543 -0.42137903671354726 -0.10248561762191688 -0.4420588627627411 0.5455768030382195 0.2564949950258819 0.6399489345910341 0.322008782296479 0.1803428602767323 -0.6477357861826156 0.12276054599043662 -0.5903783756801604 -0.7629930296011507 -0.29812061406573287 0.4306716037888918 0.23406453933767457 0.5981227085618439 -0.5119546720874422 -0.3677119726074898 0.18066513288886576 0.4314592698581925 0.43701328444962373 0.1624779127080329 0.223853052272162 0.9054402810891511 -0.6359168448957531 0.5957384350943769 0.2569118985874175 -0.4092560523741482 -0.6699522038332226 0.3063905524748314 -0.6718329721033656 -0.948364209887701 0.3116939800701033 -0.7964178498506946 0.9917427245553159 -0.9084201833406031 0.8298736757390572 0.4374710168869249 -0.8527459140752551 0.728086106689734 0.3909207029322268 -0.15379827201688534 +-0.017544462793749105 0.37871298299498557 0.8945842985773069 0.033201776682312056 -0.5476131408789096 -0.8496869788604979 -0.8948745977548116 0.6812646147249211 -0.12702717575490818 -0.290078880150181 -0.5442117706060061 -0.653609001605812 -0.14174650342357276 0.7723558304836167 -0.6286494822598623 -0.11974666344367146 -0.2617135781215867 -0.7846841222402434 0.904807533558617 -0.7805662144166767 0.48763111863236874 0.8543333953152801 -0.7745987912419494 -0.4418360835661326 -0.6116417202791462 -0.16921168082443816 0.7504293826763213 0.4719119145867259 0.7703495721250548 0.4360672909418053 0.23928815454672803 -0.8647663208952494 0.5404649713412673 -0.08736678820206212 -0.07856212403583829 0.1252784304716401 0.19470437484610215 -0.027282754586938962 0.8650933276686212 -0.306918529353722 0.8014399019473211 -0.6956843458952893 -0.19153690468158802 -0.6189196546167903 0.04559034805830642 -0.9598719706526357 0.39892086199643817 0.9293574314442081 -0.829658659686048 -0.5492137209102592 0.12565081127031652 -0.7972850038654966 0.4658775352263633 0.2606315070699077 -0.8740578976803071 0.8019649841746697 0.790957270385519 -0.4268045566659149 -0.015234628887668578 0.8524855474860336 -0.9363277870585127 0.5492769205189858 0.21916431779674372 0.5037043374563852 0.8538234803772149 -0.18277624851777396 0.7428367306282762 0.39617455219460607 -0.27172082824225696 0.7957998414895864 0.8774813720506003 -0.32372011485262875 -0.024986049128292942 -0.07648965465502644 -0.07612599920576324 0.20479756699778684 0.5955737958899228 -0.32749269362701483 0.1861193514150663 -0.010872583074578612 0.9890903668034552 0.7718423888532882 0.48490516499866354 -0.5755737832434571 0.25582062897015545 0.3988084411455446 -0.8369946682848406 0.05500855368835289 -0.6833376123354331 0.5700358056956931 -0.4521358258921535 0.1305138329640525 0.5724534249346227 0.9566701827784856 -0.18820014699523435 -0.4259146384610335 -0.08555147416171116 0.1764603367626636 -0.25582671911384036 0.9891738753000119 0.9605062409468719 0.13907267805307044 0.8226021037506355 -0.970444798562212 0.7313797707715872 -0.9959722677156566 -0.1778374039008246 0.22587571765601377 -0.4401271609372517 0.495864299760147 0.1371566217275566 0.808518389053047 -0.62652178918314 0.7822532214611713 0.1078167390615028 0.9215562329748541 -0.21117973047155658 0.7874842839296752 0.7103458993337102 0.48551356577190763 0.40291469577422845 -0.48317218299985387 -0.693583100210847 -0.2729083077866339 0.8860403891277002 -0.8022273454441953 0.8791424642431414 -0.7839846303476561 0.491918678764246 0.6861038985096173 -0.1504374450682251 0.7626803992887148 0.8765126458667805 0.7540727889134753 0.10115433096821458 0.4936364720390758 0.5876383612827558 0.12426994201793296 0.5264724660575408 -0.07569532584309036 0.4564368072999092 0.9359086217663473 -0.6474356508168866 0.32917374779374375 0.7600130900684654 0.012974661743110572 0.6120355938628461 -0.7062999105834842 0.06888267282364247 0.9260614137523726 0.13828918945015367 -0.2536351342969878 -0.8276107196568501 0.07052599888934896 -0.26553191331837067 -0.8232193210088454 0.4922242712110647 0.9819001518178179 0.8440602061135412 0.9839801724756341 -0.93255064359881 0.5835556071163577 -0.9563454624063523 0.8189700125144899 0.9676651183075549 -0.5411670788515854 -0.8133550546203638 -0.1736466373143657 0.931132308183612 0.5491037820271509 -0.6474944926409789 0.8372176041567525 -0.14302641049125198 -0.2608921496659644 -0.9607620876893876 -0.6769210714914251 0.0017831967139274596 -0.4950750550302674 0.46186805343980253 -0.6682639687393761 0.2748753597969551 -0.5403232092917902 -0.10999202143838627 -0.6822093538166878 0.6147798869067125 -0.11482428751534068 -0.5464136779915327 -0.6375101169518245 -0.9198808787165951 -0.7361988905340473 -0.021205706440474925 -0.15331822237768944 -0.7451103893145563 -0.690370081109495 -0.20887239282299208 0.3770856911774463 -0.23322321672960178 -0.9228704697981043 0.7527625661285202 -0.39360373205354127 +0.6206910852308627 0.4213435501134064 -0.44403121751678576 -0.53904275448458 -0.6583807730734896 0.0973757899880967 -0.9740978018781536 0.9597384615686912 -0.17096413510092634 0.7042804668688665 -0.4839647688879203 -0.532636346153708 0.9738466693880263 0.3434280178547866 -0.09194120485390123 0.4359120610644789 -0.5660223502723318 -0.6661338905612926 0.027488868985899195 -0.4599599976802524 0.03602302883309516 -0.7057741296796074 -0.4122451628388839 0.3809443687660954 -0.8366109039234297 0.907425529578946 -0.4215764834358233 -0.42577458872714424 -0.026697550585904395 -0.30737631215374117 0.6439785973693575 0.2359737655325509 -0.5056416490484053 -0.6392584278860693 0.7668494924560014 -0.1416491126184316 0.2035991142485407 0.7542471994460305 0.469833969208318 0.02421686441286841 0.7687144437029896 -0.2526789458530314 -0.2324426911792261 0.1395040333362294 0.2880320302006605 -0.5465868516344605 0.026629415350633012 0.21524317353842193 -0.7471805833527589 0.8681044342928315 0.6006992033294409 -0.40618827784761025 0.47107106470844906 -0.07363561254494577 0.047693275161255544 -0.6395350703851521 -0.9634491102663914 0.9499348988321996 0.32407122491153184 0.9059804563784788 0.31232913370048343 0.022447890301997786 -0.6778049601865361 -0.36387120912607984 -0.6242827771743948 -0.01455643305251475 0.03450002770821414 0.5183429357614115 -0.10365785150399076 0.2711722305669466 -0.7036608919563858 -0.5271390647568175 -0.7201067424483509 -0.048244227663606365 0.5475464088583846 0.15903156988200773 -0.6761060134118144 -0.6825543990049416 0.9362311668226422 -0.6801343898643613 0.6270175182382103 -0.4888300401634509 -0.7749416836743483 0.7470310097954158 0.31561335820907366 -0.8986981268767613 0.9876041822607415 -0.8111031263833695 0.44796488326415784 -0.7667209340737813 -0.1387532655941075 -0.46275687820752176 -0.13132734200251717 -0.6102783501740814 -0.3419577306512014 0.432680625166626 -0.412281954366879 -0.5062029024149621 0.09657646689630672 0.04102515129724793 -0.34315194698534013 -0.9224941832737359 -0.9166664708535801 0.2981473828815313 0.1970996665420366 -0.2127624559406025 0.9882745858365505 0.20176577985144717 -0.4131507541387702 -0.029575988195181813 0.4659116720304177 -0.6702814724172641 -0.6348769271143397 0.48718528808616135 0.11033096779552021 0.623164047625336 0.9058358620051421 0.8039978422340786 0.27731733947162507 0.910036838275915 -0.883730745203029 -0.6293583665443976 -0.8462399424476836 0.7191536819855742 0.7597168542499697 -0.6431798532434758 0.0618750064455833 0.9677545456533019 0.6654205703174723 -0.7903831162635528 0.1792595484263575 0.8065408947422756 0.6300248515796503 -0.4462342513092672 -0.06865086037949308 -0.32813952104791966 0.3042874462982543 -0.9338634325180699 0.9484251412750844 -0.08773949149085469 -0.4021282829348056 0.956396530855711 0.5511825508174955 -0.12272815876880094 0.48631224520811833 0.0019004580978836394 -0.039332726935567885 0.829316159778047 -0.2165515928919055 -0.7553916784899328 -0.06089705656275424 0.595277549085578 -0.9009844318875595 0.29538454547555437 0.6820946287598306 0.12225894665570758 -0.743718060480276 0.6646499088638393 0.501156069309268 -0.908394594924157 0.9486800921745795 -0.8500475570891566 -0.3662166347377489 0.8023293749419222 -0.8454665307066185 -0.34868448586812995 0.9375358994999643 -0.1796274168685763 -0.34428725092270906 -0.6986739889927036 0.6141153126424264 -0.49496552072363365 -0.7981776419237152 0.13552047265549794 -0.4738628812408865 -0.5624382587659769 0.9953303191988587 0.08649403932969912 -0.4770314796383581 0.9877120018447421 -0.15447963693327238 -0.1645660560710156 0.628393300411122 -0.435947879858803 -0.47543295803053853 0.9036057313108052 -0.33227991054371664 -0.6196427117565431 0.38785447924165717 -0.6270042047623741 -0.6881478377671411 0.009326899454871862 -0.03143844782495542 0.1604048268039513 -0.3259364722426119 -0.08080271371836933 -0.7475453629122597 0.25618635846934157 0.034663150171781565 -0.48186379492084486 +-0.6070455552661214 0.28149767525933655 0.9172252003755115 -0.694808624290548 0.06497114378767166 -0.0036804508939161096 0.8427543400127593 -0.3203849985717768 0.5066513341288734 -0.39825427473986674 0.30897129610570406 -0.8388013858272456 0.564025738623056 -0.9287973473346798 0.029235076276244998 0.882401105948269 0.9186380973708175 0.03899715968434836 0.056283823173588265 -0.4562850706852579 -0.663599068761338 -0.9685480699494362 0.7126613621605755 0.062139320834936784 -0.9159409711886493 0.43444600241435527 -0.06084909198423616 -0.4132505315282775 -0.9409813614462061 -0.8240955096967966 -0.7170227388454435 0.8400663404827498 -0.8020479209997335 0.6128581611400108 0.3133183398532926 -0.20038121980108148 -0.48730512483981303 -0.39347005900363063 0.03199970237672645 0.20557839250668342 -0.7101957173449334 -0.459296494724732 0.06843341578758166 -0.7603947591740328 -0.7819570400191276 -0.35865186334274 -0.9794337986006285 -0.822286852266225 -0.005331058528673216 0.39264113481516927 0.42741238128795866 0.2411029334512047 -0.4223232913924928 0.13052124381468344 0.6522644395398229 -0.45210576570668404 0.3977330002141055 -0.5871321399999023 -0.19223492175086987 0.24282925016788504 0.4954669640749303 -0.577956426063388 0.5724495294603575 0.1318188299759071 -0.2790904743909719 -0.8989738478295779 -0.969490954091843 -0.7137207686612894 0.277985716067767 0.2781637096518985 0.9597913527314434 -0.0007135317191009349 -0.7456487409244541 -0.3844583530560821 0.6648912588060185 0.15388606282308737 -0.17232353770629993 0.559505999476009 -0.4356099901163575 -0.29103029751749676 -0.19902178168996176 0.22765859784846998 -0.6095802383784312 -0.6815449698630811 0.9164767618643093 -0.42943058795102806 -0.01770385196962465 -0.5140269065655918 -0.8323338990728193 -0.6954711575904551 0.23865566379172654 -0.732717889469835 0.6032737995435113 -0.4534784502357374 -0.7404221400109701 -0.9589326360706598 -0.5740604405568013 -0.09533066975285687 -0.09352010172155945 0.2503275242399583 -0.9040317302652832 0.42075301767536133 0.5025461296257663 0.6248385884509091 -0.39912216058696837 -0.1881857316545552 -0.048237863888247245 0.8472178691418013 -0.34105498566109005 -0.49636096829836585 0.16753114585248374 -0.856055631184784 -0.21150082472700138 -0.907683066554223 -0.07486187883613149 -0.8184086277194422 -0.9920372762655818 0.23865511653891103 0.4195731997778571 0.746266998738232 -0.6706574028185921 -0.11401890173530438 -0.49507677293635566 -0.1965993709504812 0.5442879680421919 0.33202023566572714 0.15315929457729416 0.2644906441230095 0.7769940688090078 0.0208203215445546 -0.09989098002228425 -0.8381063033934308 0.36080219754512033 0.7511205815612945 0.9188998370757759 0.6560237877259381 -0.9311739174087297 0.8577486141010175 -0.9210160612002369 0.42765222474324194 0.8664216075757678 -0.06756121640729829 -0.6778653124843035 0.6587990661499832 -0.21681974579628616 -0.43390243926642746 -0.09985867859792852 -0.552204890203194 0.283271859289852 -0.32248840361203723 0.025541564324953914 0.7655278751394488 -0.8064193935471076 0.6100056468086781 -0.8492519204625615 -0.25258486464130536 -0.7471401554920356 0.6570127057871291 -0.8729800157686749 -0.7557996023120193 -0.7007121173402118 -0.061548438979804665 -0.5502698785487574 0.5061382202652325 -0.6575052979538243 -0.12936866461374597 -0.8624393508611474 0.5046939459581221 -0.6480006567786145 -0.5731468602890493 0.8996036030583365 0.5286257433642028 -0.6994491922924291 -0.20667066177745785 0.7999791328964581 -0.7759477271110966 0.5155792850169059 -0.697752071856043 0.7337918678539126 -0.1359004507994208 -0.6218822740137604 0.9199342761482356 0.1409003465168004 0.034608047310834555 -0.18355314708464654 0.7535862140744105 0.7381578330526699 -0.6702017750483813 0.9184885930896334 -0.4762298479483469 0.2374508125028556 -0.8556664359584352 -0.9127247495595057 0.7461056733282156 -0.815187844946887 -0.6837745073336188 -0.978718712412443 -0.29686060880174825 -0.5568906428813771 0.6545152378878285 +-0.40765074411002344 -0.23292122608008348 -0.5967170979424425 -0.49320879471987333 0.9963582452240543 -0.620830470698357 -0.6606827858238393 -0.10293237845716385 0.32448615726632424 0.4360930355630366 -0.6401931471129743 -0.82054864023823 -0.9449795825107818 -0.9636315718932829 0.7204928977709566 -0.4543192639479112 -0.31405102236959825 0.46292104122901434 -0.4432481211670236 -0.7048393028515638 0.10232027560316204 0.6277309141633121 -0.692739365309704 0.15065318851364196 0.5104067004090793 -0.7423773807911906 -0.846126064332201 0.8616333095479625 0.4879188164391932 -0.5070437615587235 -0.7534211564522695 -0.9660908255713669 0.848934843818798 -0.34021127983580324 0.06632310828402588 -0.6655024668670277 0.8994219488589288 -0.6894778234537173 0.7337799480918257 -0.22547866132607153 -0.3173756883124983 -0.2134281713013333 -0.7625987252250592 -0.004198906468255492 0.07519498854207929 0.5133567687572418 0.5766212872624497 0.33877364049736447 0.290640916902414 -0.5044986731096237 0.487933363327385 0.13808986726676964 -0.03136914246653544 -0.38987804510999857 -0.7757934028041458 0.2549125208430758 -0.9671931783330661 -0.32714319536778924 -0.09618449021618058 -0.6180822327794331 -0.6935895925950655 0.6325486164076006 -0.7358003207191832 0.10799255944057595 0.7400073582865259 -0.22940053785530257 -0.10380317610037126 0.01732817025465705 -0.2899336616185242 0.6100634942745187 0.41640733519726725 -0.12869581591834733 0.28148159824745433 0.6318360032742139 0.3556309740477186 0.700501933671865 -0.8193383610069347 0.6473713857178467 0.7701583125778588 0.4379479469648999 0.11164475666924689 -0.141708574471189 -0.7138840110800255 0.9901330789363374 -0.9246075739280437 -0.4765116249194479 -0.7400010194980242 0.30313662659161644 -0.6480290466573246 0.5122483795693538 -0.5588088818604051 0.7701787377312372 0.2747642252313558 0.044716487496068824 -0.43472955363103516 0.3152729650007129 0.33168641016609857 0.3301696878347322 0.8701401319271398 0.2853035693256347 0.828380146755106 0.5534998377153595 0.32202549356035304 -0.05162076490174572 -0.41041859788231494 -0.9225088189008177 -0.2906886836146021 -0.5136706370460871 -0.9644379323680192 0.22575937035737526 -0.08628002385691147 0.22503127062003903 0.9837627507160651 0.1758815293661098 -0.6738441874721028 -0.7052973601798664 -0.3619810136620525 0.8810372555384842 0.7656182720164959 0.4119867325011801 0.2975944853888377 0.9561375714374094 -0.5976732959583753 -0.12657134938561887 0.8307133534200832 0.6223576623429663 0.20081075277037597 -0.8226591753831176 -0.046653791276155765 -0.6388968364409326 -0.8946979271524833 -0.5231119164667177 0.13271260617208425 -0.019696951447302435 -0.584160822832976 0.5010279042092758 0.545173451295228 0.9207624629439402 0.07151961769887927 -0.09969177021561393 0.6433450627132271 0.8405436523781356 -0.06701018019886917 0.39530618644308024 0.2548680956220546 0.8066621986748255 0.6146003129013784 0.03158541706799234 -0.5498769476938781 0.5039000134355736 0.4503775399272856 -0.9973892219236096 0.6322977923503668 0.7922945650405566 0.6050392717471318 -0.005934355229190835 0.2082578232628809 0.3644355685181955 -0.8637944821866408 -0.5415645324869454 -0.21560338784273525 0.8410522304556012 0.9033246748459198 -0.4803872633714772 -0.34829844515702213 -0.045430066409916314 -0.07807260774417002 0.7707201305912352 0.1541479310130831 0.7522612012216561 0.4442345206488536 -0.04451536631773623 -0.2782371507371888 -0.5309732966903475 -0.8219090577120445 -0.6396924035168519 0.15601004270771002 -0.006878310113607622 0.7170532005429768 0.587717534061382 -0.5794150620394154 0.7778473363398659 -0.17526213561623383 -0.3197484988226751 0.06227266226573147 0.7167668957466167 -0.7476964974450604 0.7093501987972719 -0.11053583416688917 0.5570478249599362 -0.6831141269561236 -0.39702504810724526 -0.08966472591598218 0.42137982800359297 0.4831290604467948 0.18306404499969342 0.8386202519449839 0.2969607235923819 -0.35777111370287384 -0.6831366838228907 +0.33489809007376903 0.4409143426796316 -0.10146650210155905 0.2992510410345084 -0.379375301476383 0.0738226538921194 -0.28592306295962566 -0.23112099001478215 -0.2093784641695282 -0.39114604357815663 -0.218865608148487 0.32752980782103225 0.9190618765560254 -0.7925685237021161 0.3705334210302449 -0.5519725409761964 0.5754296716594576 -0.7378731025233942 -0.17802238252731972 0.40558847003389054 -0.3559536233373537 0.16794235022611237 -0.37542691249172067 0.6802008559450998 0.14488963069068173 -0.45656749042576017 -0.772201715267574 0.27891382223378747 0.2953077853759771 0.6336698116940807 0.7380142406975936 0.18689742342650484 -0.9248930294295972 0.05849615800877461 -0.9882228502976438 -0.40770076867322724 -0.785481338123019 -0.8632078481286924 -0.2431565123131485 0.5705540325860365 0.3233743095012602 -0.7550169971689795 -0.059171683887254245 0.7845861211045422 -0.27857630611157225 -0.5207651908614528 -0.32324301651626053 0.26509091396538653 0.8085949521947124 0.8477113848279558 0.6408793646886894 0.8647789683179294 -0.2889633658643429 0.17374166753563913 -0.1895243322334752 -0.4623811834912608 0.21289800050120689 -0.5976258109793247 0.7934065944288322 -0.47291856810796573 -0.7978906302524791 0.4145639778992434 0.9329760243700154 0.6242549318940314 -0.9244182679225703 0.7495598375965133 -0.3603336243575628 -0.39158975350439285 -0.17247279895865475 -0.68631662936334 0.14949933406051108 -0.4720586159352882 0.26777526766375237 0.7198954496800858 0.1564375269580125 0.7167956494918559 0.8802533237073 0.8735396620915672 -0.7090690293594253 0.4967535504199776 -0.3438892402774809 0.5563875577783204 0.19676645360341927 -0.7660290741644353 -0.517780343666995 0.8250494319855888 -0.8503637494867275 0.8305801110620654 0.8763459791186101 -0.34709659059103504 -0.5217326487280085 0.08523146521065161 0.980785296973002 0.4969605225979743 0.3544667182073864 0.7224718540784347 0.8693097619124648 -0.5362891064632545 -0.9974548549845874 0.9729945116797072 0.7013117702351117 -0.32186181090438737 -0.015841402519566117 -0.13344894882884328 0.8322253160790867 -0.037648708315021207 -0.6637882627261196 -0.5313176594414633 0.19310086014945016 -0.29510337783269946 0.1387060319675706 -0.9917441203251449 0.30978552440101503 -0.8605382701427022 0.017986490175947445 -0.5510778298237493 -0.13887060271546137 0.7292239253507868 0.7176875193571401 0.7592599501681181 -0.9995565122252421 0.23900179026092316 0.5966603467802449 0.8355816951714587 -0.7988019168085898 0.7945996224091789 -0.02022510652283982 -0.27333588510348084 0.47636693189137813 0.8633957151685763 0.2150837956937075 -0.302206744009609 -0.48219133982136264 -0.7988336920871326 -0.6218314424631055 0.2827200400577512 -0.753996146414851 0.5563273272392331 0.40407951334793135 -0.17126913968094848 -0.9522665607702392 -0.5185410583591503 0.19386687556107574 0.6034947399397614 -0.9834844909451201 -0.5928445112361664 0.6521111363780712 -0.8630854901012128 0.4063014754687033 -0.8932645551720948 0.9587997200246174 0.5001670075348361 -0.8164687628178149 -0.6387508668593882 0.3869565917283224 -0.394424225668331 -0.8493650053338788 -0.5181253458730857 0.6785485616563569 -0.8396407551888987 -0.35704429256641834 -0.9977535031347293 -0.02003816850789719 0.47025817710565954 0.3250592072267555 -0.36754936810948124 0.7846219384439574 -0.8889282859857117 0.8228215116459374 -0.32821676832401003 0.21066945391288172 -0.44789997404766146 -0.24997416002858142 -0.7195465111534343 0.4879658248394636 -0.026755487035565295 0.0855043498838377 0.6765598414800686 0.8683067218610383 -0.8071703445054694 -0.514136644061816 -0.33746651446021203 -0.16926149842526983 -0.977065649583369 0.6096104810752514 -0.07099574654795071 0.8649218054418597 0.07766198823332826 -0.614383628268736 -0.9837166427209028 0.8536951835742141 0.5531337433755075 -0.33291933113677286 -0.4508523400103126 0.8975928988749367 0.054505881359123265 -0.5010744772426263 0.5914825171680356 -0.3918142532052462 -0.7183732802724085 +0.9729889255370936 -0.949140294737377 0.8575866480417655 0.5761485554026438 0.34795890235626237 0.928388362638787 -0.3789817399302726 -0.45047898844264234 0.1960014180336811 -0.6729212834521914 0.044399632961263924 -0.1225699550185273 0.7729497115120951 0.24030781464166018 -0.8794049267263622 0.7686376403093882 0.1816740127307681 -0.15711928389690932 -0.5972185961016137 0.9983335376628215 -0.22372421089373806 0.9280031560091808 0.3067068554787653 0.37763203284711566 0.6906912403003831 -0.6693520144683516 0.05576934857589677 0.7332787812437043 -0.1642054809677962 0.7702793490357611 0.23222137478210603 -0.9559598174508044 -0.4890091897044577 0.12376275395346292 0.7440832267383675 -0.6796123841190447 0.05268142979448465 0.12114501048242965 -0.06399074640796765 0.601623109130424 -0.698303865870074 0.5484751094047995 0.26415330840328766 -0.9015546473750571 0.056885490552129214 0.778685126578627 -0.3317429786402746 0.24641103899959083 -0.9033670052654499 0.458434587610556 -0.838872985057129 -0.3436971818421253 0.6199145694722932 0.9467990116181142 -0.5877904736305388 0.5709802385277982 0.976031392143256 -0.4120483316088852 -0.39932124743977937 0.2951620226017697 0.21992967325422597 -0.12630392049154682 -0.4753192256740575 0.3174587493466534 -0.4614921056379837 -0.3348933825923701 0.9492627263055624 -0.19935489737264467 0.3789143400694004 0.15584575609666818 -0.8544391521398711 0.1029355432904544 0.7808348961325509 0.6969543789460493 -0.9462721168992358 0.26100464330969286 0.34903347304220955 0.15538111697599355 0.7486729141321713 0.8482032184913308 -0.10627935950321477 -0.5983023487912755 -0.4224171823508305 0.5452268276575742 0.5753609710060275 -0.9241519815882422 -0.6972812951199245 -0.065145833112636 -0.17366540194865188 0.18388913161308484 0.3927577815773653 0.6103232057644696 -0.2780431477463434 0.6757643235329054 0.7776243944924395 -0.5798872793526997 -0.452335490540698 -0.11789062558713415 -0.6677871780415279 -0.3197623875073623 0.011395243788830278 -0.7333788875745302 0.3667392053710359 0.9670773950412652 0.4969431158846733 0.32012551659769417 -0.39814263640155456 0.09847614856707221 -0.21782664044383826 0.736885939410441 -0.3765853681540765 -0.6720952079765772 0.9757186702720066 0.6177871970405973 0.2110644526134413 -0.00504342452768336 0.21910517241393723 -0.6601431419519808 0.4515591733802393 -0.002228508325402778 -0.422560951101306 -0.4492578198521042 0.34308655063369375 -0.20519930040179224 -0.19672400484082342 0.23863397401370134 -0.7898908877141133 -0.24752526905537664 0.3072777400730975 0.8912370601568467 -0.923131101370549 -0.14022886677563573 -0.2170939205792466 -0.916915620752975 -0.5246134952833126 0.4824956476421005 0.732344720110121 0.4525817006415729 -0.5700061560489449 -0.31798331800969715 0.9865269626721684 0.3539309797999177 0.9390120204785781 0.290900091803278 0.43992676427604227 0.6282627755360113 0.811092242632339 -0.11702546242635337 0.282935768292609 -0.8928063733285001 0.43354627041241445 -0.5404514421745343 0.2878948844407614 -0.5588252364625406 -0.04848660063746979 -0.2583371560823857 0.056922112152898 -0.0570884586900553 0.38205130059139814 -0.813282291338461 0.6413985114377554 -0.5965321744711345 0.365094442439706 0.004871020008305749 -0.19978996393607007 0.8494127784024945 0.4607111859399733 0.10309749180513972 -0.27620530471764737 -0.6812148632093808 -0.6265581706113417 -0.4539965560026109 -0.12576047086865216 0.6955139646472934 0.3178159770380551 -0.8482882672000311 0.39019995318871326 -0.9383857024998943 0.42616754325423645 0.2610369044698275 0.8012693856105211 0.8858660321346794 0.2613315585611955 -0.8016496101137929 -0.5150515825420101 0.3087692608650563 0.42707430522242484 0.5282989631028367 0.6659803729589042 0.5084120834845729 0.14850970923726936 -0.5445899310032865 -0.10020490846252095 0.9371477127560135 0.191047253302975 0.7493713445467856 0.08384585805621114 0.3234126053513202 0.22133414747402536 0.4348223290147324 +0.6588623570124654 -0.8790007847913739 -0.8120594638349778 -0.2876842457733384 0.6900714432824491 -0.23471604988657946 0.87983890296446 -0.025196208234483652 0.805546348949103 -0.15368585579894867 -0.8479096156885095 -0.7728472856115278 0.9878925342399569 -0.6341318033070615 0.4723025171681037 -0.3440222452977122 -0.7792126053936155 0.7309436446538777 0.792955381798274 -0.6644995341195647 -0.4200920667091532 -0.5950001005656247 0.7939003778420617 -0.5297461636679708 -0.7919641346478568 0.8322837929307672 -0.4287515974479976 -0.3191393857091578 0.2684947231330539 -0.22533691050090443 0.6657084416246535 -0.5740291807619056 0.578941989435799 -0.6192231256745389 -0.6373547760161331 0.27450378878680315 0.9453026060251051 -0.713752552497201 -0.4471124631455965 0.48161419726734755 0.656679991869271 0.907178697886923 0.7006562823181555 0.2581758287914031 -0.2703394280890148 -0.6972951221930437 -0.05623654712133286 0.29275195486434646 0.7926324023953006 -0.8098804303412999 0.008916002012453017 0.2264267230869157 0.9236696355424472 0.1455109788131388 -0.11410605001456497 -0.3054683527116586 -0.9194461640157039 0.701870704211929 0.9944543531548977 0.11824380796158929 -0.5044783112056621 -0.5936946342900886 0.8288029935711225 -0.007699977918125711 -0.742056367048042 -0.20793311618535415 0.3859143262517668 -0.31453476113036505 -0.7266266476333225 -0.2311307868350594 0.9671432111485343 -0.5438765793104385 0.3195982068865888 -0.7402847484122892 0.6879674543323793 -0.8177965064609187 -0.6325423638629064 -0.8705245100458672 0.6725305917615647 -0.9686975746538122 0.3161677384620116 0.8128579968409642 -0.3125310896095952 -0.5229067827691034 0.4620411462705061 0.801800871793253 -0.32487260527698925 -0.39126153998901003 0.30273191024851953 -0.6754496371138088 0.4699353617826685 0.4744453829380062 -0.6679893608644736 0.7903083627932763 -0.8898779102285947 0.5859956274911406 -0.6767139461337441 0.13355301851041146 0.5931008062445702 -0.37050775841257333 0.09537579459521606 0.9129217484818826 -0.3092946215182477 0.7926464058296709 0.5620204484499165 0.2752634328936252 0.9364580521467043 0.9479623822382679 0.6012433654599634 -0.5371750006927871 0.07333171319557685 0.3159478795631896 -0.5617910515466664 -0.47240155128373296 -0.9030213368122326 0.9713637993882354 -0.23720329757542902 -0.7647020188121076 0.08830706545476641 -0.362977726634939 0.8011513852415786 -0.973969060872913 -0.1588669403732168 -0.6683100472917953 -0.5688956961376377 0.9628685377493216 0.5538536848491835 -0.5368316979741716 0.6062723746228129 -0.8300158327398575 0.7447422625263549 0.03242065461963661 0.29127252822050775 0.3049897218739934 -0.6901297702476237 -0.9804476362139649 -0.5187548598914862 0.9461957317131517 0.29644154016340396 -0.05714850903562807 0.9682094311623002 0.12514665239772405 0.9159069536405229 0.4134466213276271 0.38094183175677343 -0.481383022120915 0.9797054595388361 -0.4359973411962652 0.9515077829245357 0.1512315987548869 -0.5222213536034601 0.8251142440825427 -0.40556727608983656 0.375682393654891 0.7038366931048379 -0.10389266545865383 -0.7865877686638398 -0.9136702940762456 -0.030782020803163723 -0.9690919688299595 0.5247736985179301 0.12402095349534092 -0.05123572018582667 -0.6515942312699037 -0.7670604016480533 0.973952859003927 -0.14738190588371491 -0.7001930085680212 0.9419846381039125 0.1023970574678228 -0.7681755012900815 0.1524098674026073 0.6969147842535321 0.23920100328557203 0.7657264779874697 0.5948603846413976 -0.8732539101654182 -0.7527400464353158 -0.04683467093003291 0.8759758366522492 0.038046444485827946 -0.7238731058400709 0.9519041456780633 0.46623871221865487 -0.25936280778363097 0.3052629263896245 0.09820879354795409 -0.4681987432744332 0.4225296816573383 0.876734818220354 -0.9626447647219789 0.08352393226890742 0.2770617342248949 0.08698202146671452 -0.09796998074488261 -0.21820369182314558 0.0236594823719245 -0.9168689152492875 0.33502188448754366 0.849759969052116 +0.4862888270940675 -0.08132868181308872 0.8406129112633713 0.18832024534924896 -0.8768688045019244 0.09570952881992079 -0.03523940647156043 0.48036512490849437 0.1390308814097465 -0.9213436085772204 0.4463429946390851 -0.8539210441910761 0.4595802367102493 0.15383808255937303 -0.18548104395024145 0.20956316263010688 0.3671285895054486 -0.07758357514022185 0.18510956880175478 -0.4305561035900667 0.7725001611176936 0.9349522418537546 0.6360856404964359 -0.6337689751175641 0.23001850948424685 -0.7985457896404398 -0.9748220100397142 -0.9198352800149217 0.06815643876554489 0.4502605237368906 0.25793333691950826 0.9322446480439834 -0.2603537353302787 -0.9566125898177322 -0.5374755065724544 0.8553336539116478 0.691344637207643 -0.708919751636617 0.752878702098684 0.11289851339496959 -0.6355036212694749 -0.5841548089450526 -0.054173791279619854 -0.30054380974347317 -0.6202734282153219 -0.938606672658371 0.40952782250276365 -0.059744491149359646 0.4484696752895898 -0.5327771700040971 -0.20130083727701553 -0.7530506805522432 -0.5083026982490628 0.3151262106967043 0.5530182801556576 0.013299065305359292 -0.8725786223116481 -0.34474543981127037 0.813425685655413 0.7737200732072538 -0.5194154226600398 -0.50211642571208 -0.46252483486238605 0.9971906287793852 -0.2077342832414002 0.09580839436013222 -0.5671159504369117 0.2812628578599581 0.5481656384732829 0.7299564658518045 0.8992599216964718 0.40557547375050573 0.4663656954442561 -0.9799661641868291 0.07780914958455543 -0.030029068952843962 0.16608087824987838 0.8646705333849054 0.160574123596259 -0.9002163292409129 0.04775937184565948 -0.2821430302634751 -0.5753872157475795 0.02913194630617255 0.12958254691096505 0.05279232196746797 0.9205837477267165 0.7424199938826421 -0.8181642480750859 0.8211088879320527 0.3769302426754211 -0.14742106280782696 -0.8224527467777749 -0.700754473642256 0.7742093842915978 -0.598207831191091 0.052851453663836034 0.48958037476485416 0.9541121217822119 -0.9655783385426202 0.9576793038207669 0.2816865250835636 0.3779336720262012 0.11957172218061496 0.7546068068662655 -0.9031928132951574 0.7666531477716254 -0.9818079215719573 0.9862579789281267 -0.017549759691267708 -0.06746027159772283 0.6226958927519435 -0.007223892935376508 0.33792409718165994 -0.7035039888505954 -0.14757529743157627 0.981243148497013 -0.07770789469618444 -0.11803529354656783 -0.22571924883958183 -0.3322518398230554 -0.994777678584783 0.1478261782627026 0.3734052643927388 -0.11832618463664835 -0.22165109727797372 -0.998629626529141 -0.4226005837324711 -0.2541459596664315 0.3335964171924106 -0.3582872400809103 -0.8529255122118053 0.08139841555326677 -0.28121463828913695 0.5247554627535469 0.9826382960727063 0.8580499492697409 0.8882256355228582 -0.8265666285428612 0.6630205992425662 0.903380178806418 -0.6953799057926728 0.7652349306494528 -0.8899338489827382 -0.4469950756062955 0.005765133233243125 -0.8510382762354096 0.6399919568781651 0.08261201560702047 0.12192628179177101 -0.6547694549621423 -0.14226207146777647 -0.777905312226981 -0.16546847815050025 -0.471953314220831 0.36183127426141115 -0.5078921477913461 0.07152095240959433 0.23063925027164278 -0.6533867118954169 -0.5040220301460607 -0.9020642014487663 0.6946910384620508 0.8149521347213 -0.8963311706988482 -0.27884499149582065 -0.38825983144724785 -0.3320864747744632 0.4504462015442079 0.6355553665892693 0.5344942770153494 -0.7507194715223868 0.6818927376816986 -0.4812565825269228 0.8868487408531909 -0.7190616176460449 -0.8542339282638085 0.21144459934748538 -0.8916668606321161 0.36187487089114145 0.8011422857158661 0.46258461834289744 0.41864606399146576 -0.7959327880770402 -0.7838525499156239 0.44896503704621193 0.5521300738747554 -0.6274992307222347 0.9673604499287727 0.00191364712615405 0.6332568377482648 0.9389209517907802 0.9255075174826748 0.10256794489290777 0.3533083021347947 0.030236636019547847 0.25354609211038115 -0.6380828770656235 0.9503765203059917 -0.28044122951669825 +-0.0003821565563413287 -0.0222224776036839 0.32822651989404994 0.5342316604198218 -0.1587727188976018 0.3329172372977791 -0.2917356605773691 0.4175202333455128 0.5227194232473393 0.48836571616942037 0.3373504406048726 0.747771982038191 -0.5814358059508349 0.466155202347982 -0.6685765459802133 -0.8795965462554409 -0.08789157479727083 -0.28217822876101195 -0.14854904912529499 -0.425254093360937 0.464182749033059 0.39801173398723555 -0.1987461254206535 -0.21622351528831874 0.568704708550152 0.049032742475108027 -0.6006073524005258 0.6540930217185736 0.08470802460333027 -0.4047788134964445 -0.09170576247681295 -0.40876018733312414 -0.9422475750094812 -0.9676851443263006 -0.12885805821080787 -0.7877142212230166 -0.5651559157663064 0.39130266561707705 0.31164971570045874 0.8603169951952219 -0.8358401419016801 -0.640908658816822 0.566671335512656 -0.24932123404747486 -0.6535414503399999 -0.18398278488490827 -0.20482439391890006 0.929997895686753 -0.3758157011799972 0.689035305993531 0.8539614703258247 0.021377107938775897 0.0632968801208813 -0.9457698460493149 -0.39415496732749333 0.6465938223761405 -0.5697905379831112 -0.20483909114671417 0.27189922053162685 0.5742348206440693 0.25432410899832125 0.1107783270040461 -0.5078939596306464 0.44864883486259743 0.22124995856312557 -0.6525109928277348 0.5937217498627141 0.7546610901142619 -0.9877989874014534 -0.6791911910044675 0.9089796136253083 0.3945246203933499 0.7628528244759323 0.8132098255578206 -0.026703508021524547 -0.1992400861339485 0.6261437503969256 0.8078440159735727 -0.3716849458221769 0.1700655314934203 0.0003611670015681856 0.08849575157122724 0.9819394957891971 -0.8660742970396464 -0.5953773041536388 -0.6357724219163365 -0.6026472374775387 0.8174008858101158 -0.8211367835232295 -0.22952576128321622 -0.5235446212307144 -0.25096243521602 -0.2791611284419353 0.3181115537527037 -0.7078645603424742 0.16862711929100005 0.5649288660209424 -0.2742319937109692 -0.7906148964114463 -0.7675411216383652 0.5970755721153809 -0.40643437605473176 -0.6252617469116291 0.07152538159671251 -0.6015514713639094 0.7291333781511269 0.5348344985908462 -0.970951630704739 -0.7112516513904865 -0.8098761840352335 -0.7001069648640912 -0.6949598990099344 -0.44492479402516305 0.302742055356074 -0.5684214985386473 -0.14593110957281397 -0.33173559969950905 -0.08677821612809478 -0.4978847852351296 -0.7897346148497615 0.11528731060055097 0.3746702705169427 0.3639863648904955 0.9366700193790174 -0.4045627074701643 0.01572482441582479 -0.006479970745208563 0.2326612461957076 0.41000231802249365 0.9240069716081702 0.056270586608202056 -0.17400964166830524 -0.516525521978088 -0.7775025508853395 0.42130520762062384 -0.2685057999346452 0.15403720104871566 -0.6363537631030012 -0.9679429665603103 0.5975194296287092 -0.011955877985929453 0.8433638954048168 0.08888529785250565 -0.45368200110346524 -0.7096303204793042 -0.2308960808067544 0.9850936854387757 -0.08453518738316101 0.8238675004594436 0.2668306192258687 -0.49800046432748735 -0.8561905668934886 0.5900885766074151 0.4481171838960565 0.4072621335463025 0.912638866920422 0.5141277624108256 -0.9730169047306458 0.9723708922532563 0.854889486167399 0.1252156776157476 -0.08334949398768488 0.3823724693391506 0.40719528033907704 -0.4241193495971629 0.7000351790585744 0.052828234075370295 0.6114765439439449 0.16078520021586962 -0.7784074506292522 0.23147147302586246 0.9335367313675773 0.2422974534141158 0.9192458261430172 -0.4680258698095361 -0.8951154014892835 -0.6327371786024127 -0.469954368215006 0.9775475010838692 0.5622143980809442 -0.6561923563223451 -0.7523175650607608 -0.4004282555933647 0.35837163689461726 0.9736072945760683 -0.19614629739130773 -0.5063101468277384 0.6723864285672385 -0.8221724826592549 -0.07693625875900523 0.19700221497278947 -0.9407708401530239 -0.059991304960932856 0.0140176853247711 0.24627080452461825 -0.37062594169937646 -0.8556174094533513 0.022308521700527217 -0.2141429560864132 0.5367520651623692 +0.6436451569610957 -0.9660760973210221 -0.6780958267420363 -0.48953162674019235 -0.9438038237941158 -0.6372974185952807 -0.5679024163103994 -0.9767341815731976 -0.6267809537266293 0.9429749163852037 0.05274052621307179 0.09802705831712455 -0.05581806681633039 -0.6506926220716975 -0.8050861740524362 0.6591017525204483 0.07201214132971301 0.5816803757855444 -0.8787109423085948 -0.5804075669367506 -0.43823454340902424 0.6689542989439883 0.7802756294429618 -0.2443468121650001 -0.1982300793474876 0.6195190989087958 -0.45470051090982233 0.12700872815872466 0.03627153802917005 0.0680903390258345 -0.9612726065188699 0.20771735979359174 -0.9323758270630751 -0.26559076732521114 -0.8283410689015183 -0.21034681856175474 -0.8861818011175275 0.07776968001902307 -0.9498560337821984 -0.14448809135353557 0.043587108131286856 -0.9975680986388153 0.0022196797384366196 -0.42954408057673654 -0.6674386192157766 0.3481008596951336 -0.9905084225275913 0.2525082216171257 0.8384956578294993 -0.613248701852976 0.7063799175637453 -0.11589133675094598 -0.20519840333603212 -0.13136343387670935 0.3268450523237745 0.6836555216850131 0.8400895595603526 0.054224464241941606 -0.3267197277654865 0.5612253788175068 0.03215567629113503 -0.6528676103949262 -0.8560933789541321 -0.30388197581635734 -0.2709500197290524 0.06886964839015541 0.5910108430231538 -0.4712034230607347 0.4824914326434415 -0.9349103104524035 -0.6751697236800405 -0.92761363689899 0.7330049067944202 -0.5758874447546936 -0.265032406339174 0.27974199227398966 -0.1014712762756036 0.5302957967362456 0.8342347677584527 0.07100574319931185 -0.7851425452579299 -0.9977477342115246 0.632003125413918 -0.22261575391110489 0.9351436237997586 0.8082818870188151 -0.7777619472182222 0.5968594149741377 0.769751674486542 -0.5901345606644606 0.10289298992942575 -0.6617155752865118 0.8816221175199928 0.8627638941814186 0.7970483479623724 0.23080583919076814 0.6087946169715128 -0.3538941040295902 -0.2683202461921632 -0.5291750196598526 0.26011451012225884 0.12285861510900742 -0.49640195106670504 0.23473320102764905 0.7334062053701242 0.9839169702871062 -0.16302409726228206 0.6904695254111426 -0.09099070459169578 -0.22143925443857349 0.8650990685384643 -0.592922653011374 -0.8123480073088569 -0.5150414889685966 0.16638800753285232 -0.8613894422801187 -0.6641896673847196 -0.609973775254459 -0.40133619160054557 -0.439394214029756 0.8511090634313752 0.1061150815822538 0.3893928045373516 -0.02048551155408118 0.564176299436199 -0.09790287544904896 0.557978443301995 0.12158084850365292 -0.6464755107906939 0.9427300889521697 0.013759386502846027 0.4232811353733765 0.5613128194375343 0.9343664492304815 0.25794356968527343 -0.5238418700793439 0.05779559229318054 -0.613088138380578 -0.31879659171354024 0.7753703846668543 -0.07299887049412601 0.4169825777284264 -0.9380094282542855 -0.4275070014567195 0.4348572893257616 -0.4641166284424485 -0.4164931291518612 -0.8887748866185949 -0.9313332253508619 0.49005828943440566 -0.4256058658278341 -0.8472803643207443 -0.304992854372264 0.049344650368911225 0.10660726611464932 -0.5817302777171283 0.7761672127988282 0.12102989843289391 0.863878042818147 0.30593228406439077 -0.007554221315665632 -0.9865236441662673 -0.1169637150041618 -0.15380806063658148 -0.9555346647940146 0.13121905500301168 -0.4651914420192802 0.5475972721521396 -0.608918884195448 -0.5664054220804715 -0.7873012315709405 0.4543197912772359 -0.7808976935845999 0.9345616959614389 -0.044693281277230934 -0.7667454168867196 -0.9246839866506893 -0.2726133071342596 0.4187504610595152 0.5667522230144932 -0.19806701511377023 -0.0554192746571569 -0.2684765272176921 0.7891729622506258 -0.7702927152981176 -0.11637498730575246 0.534651550061694 -0.03424037758602316 -0.30119781892002906 0.7728415663233854 -0.05381615707601495 0.5988508686337668 0.9627333268837452 -0.8492286685703812 -0.7939402178537847 0.1884892482238556 -0.9898915817779375 -0.5570473953102473 -0.47591988231917437 0.650177955646343 +0.8140420466610663 0.3162163499207442 0.46367250380217806 -0.9730427096430732 -0.4221771651245023 0.5137978881771978 -0.6899654510545361 0.6679640264918449 -0.42966506690914463 0.7010487172587496 0.6189123151278701 0.9294128267238886 -0.23662289823150862 -0.8569664984193719 0.9687632391041896 -0.6755300686840822 -0.5600282507432757 -0.07460518177079578 0.6281205399662919 -0.1694290736714752 0.5082716145530692 0.003158293487128372 0.22698575345607064 0.9307526431492579 0.25700617481439214 -0.984902552885002 -0.7015506274626591 -0.11615099901190251 -0.44860740834045476 0.6581369006548745 -0.8456592128984444 0.8557807999326175 0.45930287251277413 -0.07139236648862846 0.4513253002695048 -0.9840613402310285 0.4481065102648858 0.34206798258959625 0.311502395056533 0.06575830908078628 0.9464352429307228 0.247830965494648 -0.5948648629435271 -0.12339669855368629 -0.3216540537524657 0.300569008772511 -0.05203244548670671 -0.8603226867204408 0.4160707475576575 -0.5995654795629148 0.9370934384953704 -0.41622428077567175 -0.2542328595371921 -0.2435412885154402 -0.4483766379194749 0.9382381965154221 0.997804074952038 -0.935691298332364 0.3005376107264941 -0.12430226432436542 -0.16309948897222015 0.7292803290832282 -0.7848625779988432 0.8459802079319492 0.6059119527538361 -0.4591384242728431 0.4836041980067285 -0.5353833150049643 0.7513866745425402 -0.6342981336466567 0.38423179565165877 -0.8217302515937623 0.07507046628062719 0.6023501663855058 -0.27039938590767587 -0.604895426046179 0.3724043520663731 -0.6764489785031698 -0.7095562900097998 0.3685526865161368 0.3721956546153342 -0.20645926696450356 0.5307651173198096 0.6498260112810117 0.8541849689023637 0.5119256657310218 -0.6271671524907236 -0.5265690786892212 0.94376036636558 -0.9294367633650693 -0.2210782109350975 -0.18998666000866993 0.9201568383009502 0.953836214118684 0.3233144618497461 0.179709915174477 0.8348005481389509 0.513116257307904 -0.7539390168666891 -0.08352823882138871 0.1183478283006163 0.5121456080044258 0.20072031109850208 -0.5844848950388795 0.025622063370665638 -0.0030466622731359916 0.19224769452258905 0.6995850917168622 -0.3698374591775442 -0.14701141974229737 -0.8039658733730028 -0.8788933478627994 0.14758504454051358 0.10747194280362504 -0.2313423782750721 -0.19904703748530994 0.6409377374570928 -0.6321348586890081 0.776556701669868 0.5083644521956581 -0.49867022256882776 0.9513915012614054 0.6851792917934083 -0.6497619782385169 -0.14760548744939617 0.895508973677281 -0.6135281568201216 0.608667847021704 0.6469656849080214 -0.8503457371590084 0.9386818411712046 -0.1138817109133663 -0.2238343043265707 -0.7842312268112879 0.7710528666054604 0.6495289459907696 0.9954613367320988 0.8694270386300245 0.329014141979175 -0.791473973486025 0.9748561295088811 0.6214104619357117 0.9074398142543763 -0.9056183717146742 -0.290375193029045 0.4078091456331465 -0.19744606467945047 0.763184014377972 -0.28411375836590813 -0.6996740237353993 0.48187502749261224 0.2784023068687884 -0.7389473967944387 0.807759610347033 -0.5621474548352101 0.040021594230952084 -0.3989766237559458 -0.2520710341029455 -0.33020395514288126 -0.8729760280455747 -0.3851805761837648 -0.31708032836042643 0.6318484809334797 -0.1854973503401136 0.44942660121699163 -0.901451774331193 -0.5666034591719988 -0.3611499536945557 -0.055538062163260404 -0.6229073042431226 -0.4492345184067783 -0.40540996331904045 -0.6676399289152812 0.45547088449085704 0.8973130735849655 -0.5706719536331484 0.761424954343819 0.08301008461592718 0.2297421894298326 0.897094915190005 0.4658512990314134 -0.7484353630711627 0.26142270030109427 -0.317052521371711 -0.270796105096629 0.1911676055587075 0.6144354767655265 -0.9156218989956888 0.35568580134785766 -0.7028382880157549 0.8900908447403586 -0.5781097196328515 -0.3170071986109799 0.5367506006015255 -0.9343384144527982 -0.2164548866718914 -0.18099016600549267 0.928247604261714 0.32316030243122085 0.5426066531721982 +-0.35009188791304724 -0.2782185670924582 -0.12252399105727574 0.5332713822418067 -0.5163433588068873 0.8066582858309632 -0.10555711576988225 0.3494024991328277 0.5805746534637972 -0.8246524564112419 0.12146025472185973 0.31708248833873176 -0.41793928754290666 -0.3317108443675263 -0.8555179148832763 0.373234830100277 0.5127598847947876 0.40020652572513593 -0.7554492004577293 0.6591204347420789 0.7250614008921337 -0.996860556172636 0.14422638924873343 -0.023058989304754585 0.9485241245733194 0.6950890959395197 -0.097045471812375 0.1870975867206648 -0.2236495187885581 0.40476476276402296 -0.0728569066015281 -0.3967414299481222 0.7817696158126 -0.4296667986715965 -0.18878826749042465 -0.5033463597403691 0.08430638719478822 0.3408307651661455 -0.33331112712305444 -0.8774053716121311 0.3317242112793555 0.09667610869306653 0.09484454628064531 0.6983814001084574 0.5966245890841135 -0.5646002562566603 -0.9620579030310794 0.5266049687460765 0.24658338981946493 -0.7862634818491232 -0.25817541190321425 0.49276653503059187 0.8690743347929171 -0.0722587643314836 0.21733559624005516 -0.0735543603895299 -0.1965762551986714 0.13047629146031392 0.7714131512104079 0.8060336388811942 0.26583792542251206 0.7184536776379438 0.6538403111340505 0.04602306633298836 0.5414964042103312 -0.9029207006631101 0.8386105508661224 0.4184161035879639 -0.19661640297630778 0.7679921360358926 0.4348956669257684 0.07945718775990285 -0.23064456288653057 -0.5859623097370141 0.5866722708318473 0.22342023191835114 0.8985090099354225 0.7907404786740904 -0.24497618194997006 -0.5106957123650964 0.3676898642198301 -0.8231617331553029 0.9470228527941227 -0.022407356939933898 -0.035500727382507424 0.052078366447841695 0.30389204328494324 -0.6449896575595111 -0.10482550362380261 -0.8768984308918213 -0.35446596833950994 -0.15976493021454563 0.23224820491564646 0.9721815541955807 0.007439045380116749 -0.9757048430762323 0.17699071227277807 0.3705951522812425 0.18564449790204773 0.984043838595752 0.4019484042929018 -0.4418198549883212 0.49532498457549545 -0.9795303378700662 0.6886298082804618 0.789044547628857 0.6393871927505044 -0.6457254601754303 -0.2438614526695504 0.4094320236914011 -0.34325614499101276 -0.5731827746596347 0.1502967771638406 -0.21105963460694754 0.9440493920992061 -0.5017601607436 -0.13896057570028253 0.26019736245834757 0.722621867622649 -0.10633172359590648 -0.2550645913004368 -0.9473295660321497 -0.6958912255980663 0.5509806579685603 -0.7894198295518497 0.07450188842409466 -0.26875831348227486 0.22715300965155927 0.09940120071628655 0.532643232826288 -0.08857150667669078 -0.9824278118711232 -0.30965961681161414 -0.24912003891779744 -0.04048105774892541 -0.8444328808734187 0.2095280846802312 -0.07056121501711043 -0.0050509469914732374 -0.923986065075344 0.20486174064683538 -0.6968382180738835 -0.7784394264234606 -0.7146760481824017 0.7187808155608295 -0.6096951188233015 -0.3717632916261484 0.21374509723198876 -0.7102703868192326 -0.45856782387973904 -0.8719819904453774 -0.8091358920379463 0.6347557871217531 -0.028143802203485002 -0.4154443278016924 0.5626379588008241 0.27551581803736025 0.6903360212733338 0.9046881386240191 -0.9533793782832367 -0.6366910791131051 0.8486787863700416 0.6311304782181271 0.545336653025041 0.39260004981761765 -0.9987520728067323 0.36992324922792275 0.9970004937284476 -0.3366120803772672 0.8236187046311554 -0.043571220549044165 -0.606561739451192 -0.3357429521313928 -0.5054932144227344 -0.9364875609109313 -0.6521029645671981 -0.9430325940528792 0.9899542274959199 0.6018590366439136 0.977155309142719 0.09545814401598096 -0.42872064605250126 -0.08775191483998745 -0.44169456141196806 0.8340366006038002 -0.7449258078529681 0.2791313414277099 -0.7459973202474308 -0.41146612885672273 0.4970534805391478 0.5863052896552481 0.6223344443033727 0.505005332221234 0.34202658545983544 -0.808339286901937 0.4354931418266208 0.5851977356205831 -0.12859061943489158 0.7418459420961176 -0.48920127329530594 +-0.3061828202342882 0.33485035384009953 -0.6287585354698046 0.1769600440836212 -0.16990822321132537 0.23255515797350146 -0.052178013550643776 -0.740076271996146 0.1359821046730103 -0.5489456759059994 0.6091558934825265 -0.06635817787353915 -0.8675473283388175 -0.584267132644827 0.33598115881940904 -0.01596885435781714 -0.17509501256567406 0.45686620157467606 -0.40166141709806613 -0.9409704641150247 -0.7023297941477409 -0.8881234045763093 -0.9948657018665263 0.2530225745189498 0.9456620742918851 -0.7984945126433964 0.11138706863480397 0.4071906867977235 0.9587067749805647 -0.3945378166090001 0.8840456637856147 0.9410441908650882 0.06209599023219159 -0.5830504285941691 0.02267269108568537 0.2444821893823914 -0.1438636878811015 0.26535775691780183 -0.5522450925063318 -0.048605748927857295 -0.797284044635191 0.7260679536585952 0.962696631857249 -0.5441121111749194 0.8207598658169843 0.930094783824434 0.5353725105199676 0.8435068702232604 -0.8376510635794756 0.9059392878734154 0.03905200446798829 -0.8382277454441922 -0.2676367703158249 0.6127463400914057 0.43454264860455627 0.8207983843407174 0.14106216200430577 -0.4390491944554118 0.3721381247515094 -0.26939873836735595 -0.743540461545553 -0.8154504440486237 -0.7857710614224325 -0.5229911181853419 -0.17468946152648313 0.6538168989993507 -0.4422730517450457 0.5909164732469623 0.6590374476547829 -0.7413720889802715 0.5112032389422685 -0.3293476237209141 0.243891757553369 0.5241276040400134 0.8804952630595746 -0.38557636993476896 0.9542621128536386 0.20625722359007903 0.5228485121349606 -0.6037704897458789 -0.1979572298164729 0.5741314293570077 -0.2791873586022009 0.8808005356943058 0.6217970829213051 0.3538985530559995 0.692355190877969 0.466644524223222 -0.8218043398404322 -0.7220343972051724 0.8464565277023501 0.6066682860142485 -0.3438502531336376 -0.6183483197278257 0.22850923684375024 0.595083316142524 0.8123405631059872 -0.6269899968026624 0.9557662774405022 0.5748512528128471 0.9707306329026464 -0.9641961957876142 -0.5617718649718004 0.9647099452953383 0.8565840162005076 0.9268336895609894 -0.804182935168072 0.5563057047979432 0.6716295985551348 -0.01792975921988016 0.013580904838540686 0.8605968494113871 0.7995857148745145 0.18690798503923944 -0.7258983465804139 0.48712502540913216 -0.29520037045327174 -0.8013924923197411 -0.38544877265108135 0.22929886932783083 0.3219615609714379 0.4089650126265263 -0.5422365814986121 -0.7634635901402127 -0.9981017160943608 0.6159847522093 -0.9919375983270355 0.01622178422279541 0.29339375894097053 0.4559564323695364 0.8063373296727043 -0.5956149666794481 0.026774511434637827 0.980287940036489 -0.9226877856524975 0.8058157373186736 0.5756415783171516 0.33240551263517437 0.35051471102452947 -0.12278116399918138 0.7941215613331003 0.11199557126603077 0.7090088012121318 -0.20556598585456065 0.06082831932465771 -0.27321559661662187 -0.13346844799459046 0.9507751713992836 0.7271184097954297 0.6032598049694446 -0.44289965357938743 0.6066959990419287 0.6003511045375112 -0.3848725807380644 -0.8723539836018754 -0.3842451673302212 -0.38444458568010553 -0.35191577475389235 0.3404704867454358 -0.38107611498227323 0.005980903655501413 0.991206700779675 -0.742238734925724 0.8411690531357991 0.03166278770411046 -0.6416485945631887 0.22532292844911161 0.6364209575754656 -0.029449741878683655 -0.5867613796015849 -0.375486407621628 -0.11083558239868485 -0.8079732146133154 0.18288589099936714 0.06542885616240435 0.41976484700805394 0.9093451530753993 -0.7894544601562243 0.32394384310202984 -0.13125506439502965 -0.942728978599956 -0.5802727139084187 0.3573652442308013 0.07522689402065597 0.28042870338652115 0.5358309544518387 -0.4888412722130997 -0.8912389086643526 0.6578345374520651 -0.20984252264475511 -0.8563349664585709 -0.3122053668894724 0.15331457351717748 0.4609086856341944 -0.5890850519032953 0.05785110332296539 -0.14384145167840567 0.8012524030441144 0.6675730392866488 0.9976673193751155 +0.7985701987283149 0.29832953204248835 -0.8401269359312897 -0.5724094368609574 0.9296113823307963 -0.5635464487189068 -0.903832282419412 -0.8240959282250593 0.750913085520458 -0.8011901582911405 -0.8639655995937354 -0.09304630999431596 -0.014288022020804148 0.7890915082825174 0.9517306555883631 0.1173127193842256 -0.2243953492988504 0.2433051634375658 -0.3546413957266441 0.6301738140360824 0.20687020402654954 -0.5812658190229019 -0.3234141584734793 -0.5326362424956907 -0.6148016436070629 -0.8694117189712647 -0.9491085987903694 0.01143433708242747 -0.316181968905636 -0.0874935747503045 0.3178814281947795 -0.3945288833846552 -0.5016991196029117 0.39480324141696355 0.07550461537397601 0.3764974445503233 0.1661669065419622 0.4360508073171978 -0.8124914246616823 0.685751906356352 0.7607665706117546 0.26329770299668165 -0.48054645590283096 0.09816852188107728 0.3729637025708117 -0.9491895171503497 -0.30439938324656035 -0.05477207503701775 0.3417357486025121 -0.5823589256605481 0.2585511007588388 -0.6938439162513699 -0.38342728590812825 0.9912479816226589 -0.9248141725440739 -0.9453852782571714 -0.6460829258544338 -0.6037129173652129 -0.9911013177441215 -0.07974683474002453 0.7497961764112591 0.7256619293122131 0.06448546629879104 -0.47197992668050204 0.5902052936061661 0.2070662392645275 0.8040859668149809 -0.12734961550123125 -0.45694150663468536 -0.9196818597004068 0.8152633288507816 0.6021226805461555 0.4668061115502946 0.8263232644549718 0.28251205713784566 0.16998840507324053 -0.95184938602011 0.07831623260621279 0.18263244815531698 0.2769366798319486 -0.6578041115360886 -0.17710295194620218 0.06723181462387151 0.1511283680663118 -0.02289822224086202 -0.1597753769473893 0.0033006369001009617 0.7958674213404311 -0.4427897840335866 -0.10924801516086768 0.634017333534709 0.1573163274968612 -0.7863027393532143 0.47178680427528663 -0.6037618829836664 0.19931651049793953 -0.25776396897282816 -0.018752396912347757 -0.2313908897213588 0.18222458901269234 -0.4056937750033147 0.15241505910133446 0.6867563603503535 0.9326707198386464 -0.6139409593009217 0.9340327032362181 -0.1813908959575563 -0.7470783966177879 0.7060037987761576 -0.2510986608473731 0.2309973571414825 0.5903244188961043 0.7431828896477688 0.8243849238915113 0.7507703291765588 -0.7325999786679278 -0.18459689410386493 -0.6315734574016101 0.7820017931042473 -0.9752087827270723 0.9216074914819927 -0.17587865706942063 0.8115860290073265 -0.9924860292273776 -0.8989134983182683 0.8852115550727542 -0.09103639255712248 -0.8066040805918657 -0.4450013718046353 -0.11126322609582551 -0.9306804615941062 -0.7926265654613012 -0.28211378252562747 -0.5511568060712388 0.564606501063776 -0.6404255141200952 0.7541027940686036 -0.4260359712808812 -0.41722716509831304 -0.3715160852244346 0.22877535863375487 0.5607262754885092 0.8454084583099939 -0.1003133282423474 0.7497571895478059 -0.20616449583162533 0.7240943341515713 0.8295672122178317 0.9221801458667693 -0.46521445941630857 -0.6453810011766037 -0.570455583207564 -0.9608043018639223 -0.08605924359066885 -0.035469980477530916 0.7299234592053712 0.014115944417599557 -0.8896558267912802 -0.9511621967363171 0.2072998693018584 -0.4641753523907084 0.7924038303940779 0.5062715154561908 0.47446510424544974 0.946742347023585 -0.5556337998446597 0.3727638808908238 -0.8838327588932622 0.7064918397937787 -0.8591943400316169 0.8524822938660825 0.8080561922314271 0.4130999883539834 -0.6818660516179678 0.2081354178359227 0.49551241414882297 -0.4496664233834824 -0.14340558018930194 0.13180242045603108 0.5916021359087866 -0.9605964537142158 0.6725124600399957 0.5522350744415605 0.7238135143881976 -0.6765974781004682 -0.6720596364968996 -0.5251156647373407 0.4038949304793291 0.2156699372316333 0.1720004973915683 -0.9671190386849677 0.5794633208173634 0.08013681210136481 0.5239168495732893 -0.6834185000732937 0.21206445455180734 -0.47374023562244405 0.3111160074197834 0.8228720069472979 -0.4853566567738927 +0.7707759735930966 -0.05797293455458252 -0.6940020124559301 0.24850458851295332 -0.4582679576299209 -0.19253366909743508 -0.8956615316435921 -0.9758742206638757 0.5524434079668346 0.22626071038188855 -0.475829666972825 0.9983018581476142 0.9540329987533409 -0.6304663605446954 0.5751709171335913 0.5476275801181762 -0.39773093122417036 -0.3037278108713055 -0.12194096045445013 -0.5721065882326521 0.7119866181521455 -0.04627175669082928 -0.037220208032519464 0.932028508843157 0.6674476921817354 -0.45011995851357867 -0.5082251056337466 -0.7232534805582957 0.036888730238855416 -0.9732390818323986 0.1796994443071085 -0.846858160626887 0.8914406507967276 -0.2730731875025174 -0.9728163860348689 0.8714546161548649 0.6280261188014438 0.8831071812745994 -0.39169833169753887 -0.8121089894907771 0.5883425679403564 0.6972605287503526 -0.31658305158997213 -0.8832183736843007 -0.008391044888419907 -0.23258730286564755 -0.9165835704635912 -0.8024288432482449 0.16691911593256803 0.07216533885870868 -0.4006448755621552 0.1509281771215869 0.24290270817467619 -0.031825690714812005 0.0746630454766366 0.3673629703602168 0.5799946715841184 -0.3498577476604454 0.04532516909943407 0.8537385137255831 0.0200480882376195 -0.4932065166444608 0.5601819034355799 0.8479087592915109 -0.2720682487747117 0.5584048721127883 0.513672587204318 -0.34243375279744415 -0.7478913365910504 -0.4434677149236814 -0.5138378917926112 -0.4347342464549868 -0.8739450709876038 0.5889969145930352 -0.9286170667729776 -0.026031926649451087 0.13307576078189998 -0.15696080926125422 0.36966012873435017 -0.4319387057500812 0.8148877959496701 -0.8510567712455035 -0.9420149914334086 -0.45296876651838813 -0.6813349485425162 -0.6190762732019652 0.07676540501271356 -0.896672700046087 0.7287587226474499 0.3346320259017168 -0.4025031024066603 0.9161791162041215 -0.9672932059544872 0.8037085474301422 0.24176164251948684 -0.6223474309231805 0.15729254617008337 0.42788291206677886 0.7522509479241237 -0.9248362086239759 -0.1331942772510013 -0.32856395280267026 0.0036473688088707323 -0.40619301373361427 0.7602961648614288 -0.9883759776599192 0.09957286607690419 -0.19792357479067935 -0.0381599891100024 0.0006176017938117617 -0.7431286065481704 0.27993849902151635 -0.38149740257000153 0.7392290142002185 0.5313813755112731 0.0755640097820609 -0.8323613458456263 -0.1271222332889108 0.39883859934169696 0.5324769931613382 -0.5296844644073186 -0.7624517526719283 -0.42724267196485544 0.6044000841418615 0.7650887683501286 -0.7307214797502952 0.9941637578420885 0.9820737596813105 -0.12223102094299243 0.8417486623592028 -0.18149484845363917 0.5646690107285153 0.5892548953252241 0.5553840583016343 -0.3762791531655236 0.1041777015367249 -0.17372012182596985 0.9362847786815709 0.8958384561827211 0.17107064911970604 0.838828876216346 -0.9885284323964243 -0.3047995711526492 -0.9384097578024062 0.6443646329239106 -0.45189615944822914 -0.8047438767062383 0.1500087679443396 -0.3599294389048875 0.6582370280135423 -0.5957058436427245 -0.6209125061351448 0.4163193645623824 0.7666535145448268 0.6887022664785549 -0.07605274654425065 0.7238214018686475 -0.08420321136819853 -0.04865945775390723 0.35459593396290545 -0.8843130354692703 -0.9519458717031892 0.75385322117689 0.6216086779575054 0.6571659351555881 -0.2438871847569819 0.66998536429692 0.5446042025001214 0.34480325122339295 0.5130023067847786 -0.5021653531018109 -0.38169705343244065 -0.19051004486838896 -0.5969901225651082 -0.9935018070437089 -0.9548065441879376 0.21676937463288426 -0.7267607200722221 0.01071316072048556 0.07731379251714388 0.44179134343711524 -0.22992613177789023 0.28099994441085907 0.4324639344558281 0.7023088401423301 0.7620034125298898 -0.9453859104094151 -0.514090210107629 0.17034923342522612 -0.021481939029913466 -0.2299185419240859 -0.045644423715921034 0.16809868885970003 -0.8654019044713614 -0.411704130019946 0.8017297105641641 0.504500405008182 0.3012199818332024 0.7092241546880109 -0.994958047683552 +0.6213164174005865 0.8794126441190657 -0.99507558287688 -0.3653807863704235 -0.25672748661601363 -0.8503199989978676 0.148731323182413 0.7547799112778386 -0.043334626177305546 0.12554944486898267 0.6014756895165112 -0.759574542579053 0.2526557630856445 0.9050565273626918 0.015553403797982757 0.9468319991542817 0.5795722286795 0.25975843382539154 -0.4459168827938338 -0.9824906608861204 -0.4341499917674285 -0.7545242058095862 0.5635228585606009 -0.6855116297805814 0.24963327210526542 0.5832483098647521 -0.1915833714564028 0.38451451493203614 -0.1023539585811506 -0.5621745766806814 -0.7372725139771614 0.8633084080071403 0.5227956568631797 0.03462094010243577 0.8150102531009376 0.008306555213493771 -0.5733842061060213 -0.7884205675422851 -0.4480174090754525 0.010689740491433675 -0.7696429141318171 0.28236330585514224 -0.18310968498640579 0.35001600915916486 0.8898007018695537 -0.5186543741460332 -0.7721487739864983 0.4567763620111178 -0.8040698410582388 0.4403845158377957 0.5969502236058872 -0.8835911962478391 -0.8141629184297248 0.8853476922445753 0.787088358868395 -0.9893091796180817 -0.31684569502170734 0.3531126805666547 -0.08402337159509954 -0.22824334300546067 -0.5854878440443074 -0.22938222720659462 -0.5199676225482701 0.09075341951389082 -0.32907112799405724 -0.9935156040499245 0.17590406821667903 0.652350516459973 0.4167420478230963 -0.4689289587035861 -0.23150195695232023 -0.04054557201218012 -0.2439899843389386 -0.4266409969522109 0.3340477180508752 0.23652806920927616 -0.9390785896292186 -0.31775729331756764 -0.5410444836621098 -0.20105471464202984 0.8303086707439957 -0.2777038635209723 0.0074354462281840394 -0.46682634577354465 0.48577587332460026 -0.4646684124606142 0.6693343146174893 0.6239354239589843 0.14417015952294143 -0.985516648021884 0.9130115975707507 -0.04485810558940173 0.22426490728371595 0.25500639759176735 -0.7768550702003674 -0.6083091222104593 -0.9425090474068454 0.5668298438928345 -0.9604606180751443 0.868398104559003 -0.8905526602964242 -0.06558589611051868 -0.5053065008417206 -0.036658343238537006 -0.8713082648821857 -0.9481120749175234 0.0475161686211758 -0.6500621607275086 -0.6236205752811907 0.9491784519019948 0.8886240478173357 -0.8282063448824006 0.5503840843018015 0.9651294969434656 0.2902735219109276 -0.5085376990635169 0.6833371617112836 -0.9028265203939285 -0.8808709528760832 -0.22893237623059903 0.5148886346218609 0.7947443267104028 -0.23050490371263965 -0.5873984414588702 -0.34131024921537456 -0.7681490495402039 0.6875735591775882 0.04882500839830306 -0.434583288173209 0.04871204441767252 0.9394885948402516 -0.04096345295508952 0.04998129913074756 -0.1093707313696266 -0.7276797601580867 -0.6205145482865406 0.3516693530986239 0.2218972316074026 0.0953699454382857 -0.00442678099612559 0.14651291854793724 -0.2437340183058203 0.499257597796646 -0.07379418322313946 -0.5193084841885915 -0.15683957126754233 0.434733994824287 -0.05998931740648006 -0.6069179037439223 0.6553795935248485 0.8161104622646194 -0.07130568725654207 0.7735136724352205 0.9872086676686722 -0.9264048054162588 0.05077518628417388 0.2406430284040899 0.334364935239589 0.5274865334530259 -0.49724123604236814 0.5964670867774751 -0.14209142272234132 0.9934934356126632 -0.7488816512531067 0.20449257029852608 -0.4277384174225696 0.6035732426084384 -0.2657543188283247 0.6783225547854757 -0.8662887433594963 -0.1630737788091967 0.19950344054557934 0.43680790684742243 -0.2312260147063978 -0.9023205425517578 -0.6032601507607815 -0.4607884461525431 0.8197157143566727 0.47537516900278476 0.02072473688684129 -0.9008236273423251 -0.0631427546887473 -0.8483243748015901 -0.7113648507263679 0.44200512838699413 0.08384498931081241 0.7553614933868207 0.9377088154825699 0.14714367326553335 0.6125430212375211 -0.895753186749705 0.8821306365171027 -0.1792116238474779 0.805840668005064 0.7589650808900348 -0.6834508885327548 0.7894209279873572 -0.10820232825757636 0.48221771837574323 0.7783340627885433 +-0.7485035435307772 -0.8959271164545912 0.3942492746391948 -0.5619549798596313 -0.5139019708437991 0.4665698142938435 -0.4042627424262255 -0.9616730060544936 0.1785812367757551 -0.8632960436504535 0.18313173098975666 -0.11525600989493023 0.5754592158392113 0.6244982648499262 0.03622545815315226 0.451942152702566 -0.29515516619226356 0.2697397939135322 0.7866823627839061 0.8094835915476648 0.46250018922661695 0.42644144488578717 0.22047320540830717 0.683878144797115 -0.10473065533565262 0.12344896257702564 0.04064402890631724 0.3698476220596194 0.1456751523860329 -0.4171444062416947 0.30427106202328824 -0.32289360391734867 0.32183672424151744 0.23803302134385085 -0.7333204183727748 0.22001904477236334 -0.06184247610338911 -0.8007482120749023 0.49033094937659505 -0.8540685437041258 -0.5116219142081324 -0.8766519894167708 0.05209975514654541 -0.37251374281692673 0.5520940963078587 0.5692215859498626 0.033430655090395556 0.6455458099915137 0.09309195507007373 0.4072188423416503 0.9051801901665291 -0.5718276373869391 -0.14770197071109092 -0.06601236032555291 0.4640995009540667 -0.3634701420771558 0.9919095857570868 0.7588559767710001 0.6694328367419053 0.20467648588213194 0.6626315846355475 0.9037957461175903 -0.28012388740774274 -0.5058902261636673 0.25272663560207964 -0.3761270388757596 0.5141744935610786 0.3082709535613277 -0.1554728626638573 -0.854514779657783 0.21157843468980553 -0.5064937827691445 0.9955935422049269 0.1239731041275054 -0.778257986490986 -0.10716091743010159 0.5814467433700092 0.14803160224670497 -0.06872285807844647 -0.5610728807699501 -0.5107571695140165 0.39327089152534755 -0.4171754408680566 -0.47018338683236416 -0.9509521043139142 -0.16358401029261316 0.48319514800934327 0.27572320372133485 -0.9947248773411903 0.8074129338065759 0.7216816026049337 0.047894326937626186 -0.7201224521548402 0.6441538373772027 0.030553484410392295 0.2559669511378626 -0.395880412099868 -0.9270335898379605 -0.6743473345872804 0.7067029402789495 0.46916885756293647 -0.8400263990831498 -0.11209621377998791 0.6831707835537095 0.2900811600400717 0.03142511502995715 0.17203493189932706 0.08079185835397262 -0.8518179345323977 0.33811108766510767 -0.5364332553230808 -0.4283622911330218 -0.5094030413618547 -0.6080441535941872 0.49979203011787265 0.28369736463746187 0.9121500809946266 -0.8570307078699713 0.8187169755918067 0.39672457679812867 -0.9386121795160867 -0.44674141318869687 0.07107863857913554 -0.9601820167960633 -0.3902108690369843 0.5615304002232799 -0.8008604841710643 -0.6091438101503659 0.4420720049839926 0.6230965079880668 0.40570233616157436 0.15679937202674377 0.9851031912204598 -0.223716819338456 0.893410741546312 0.3531927781577133 0.9218121339511391 -0.6544246986999778 0.16126860767473516 -0.810651620819101 -0.5051919260229509 0.21331855333718375 -0.37585675929050755 -0.016075181546357786 -0.5436703213434895 -0.22496580881519046 -0.04369276165469449 -0.05302581643952542 0.8131369413583678 0.4919831124598575 0.6906693184703603 0.23923860571790057 0.4754695769172945 -0.015333905345696897 0.6993911143207667 0.21750794882156144 -0.583618325567665 -0.61762955027858 -0.07312480635164142 0.029235845523137183 0.33958090899407734 -0.470705119259907 0.7345836876312326 0.3373845426621136 0.5792788895367107 -0.9904032634813733 0.14977168519759654 0.5767433913273117 -0.8254142298841389 0.6392181145745579 -0.959170188230178 0.33690906584666913 0.3732111486556682 0.6926743810342513 -0.36236432322509726 -0.6753760464259124 -0.8186613086691903 -0.5437584648193998 0.4932193551958386 0.4608565708877681 0.09529790844581276 0.40586828018140353 0.7802163613244886 -0.32841741565808635 -0.7914725081160998 -0.3424621778008339 0.8686936873989688 0.9807637542269116 -0.9310530174954708 -0.6612318199488338 -0.953824828426783 0.30437610742988785 0.5014272622943841 0.3080425851853579 0.26633432779440724 -0.11796000416502506 0.882047375185874 0.8712943364915402 -0.7705206512978637 -0.2679144468757759 +-0.9658942647028976 0.12436114184187486 0.36094031089705436 -0.6972002279739931 -0.7762396219135588 0.3957288804435304 -0.9529186278969715 -0.9454490598518945 -0.22981153073667815 0.016522409379767344 -0.690006835863687 -0.6771330062814875 0.20499411175103188 -0.05994391365873031 0.20812858643676635 0.5349346010938643 0.15414374897043537 -0.2993849508839912 -0.10615878372760146 -0.3125730726010396 0.7207561347000944 0.10553450404238074 -0.7317879910195866 -0.5155521162696248 -0.9427802646931753 0.6744582931044889 0.40538404780208515 0.39153929755981554 -0.3874645918302415 0.6463009146032599 0.7832034914986628 -0.07892043790263936 0.18302269316002762 0.2790951050317281 -0.5764176877524605 -0.4966619392322942 -0.6556964944508936 0.9414082368327505 0.5044190010814908 0.48178649412508845 -0.7919625453828014 0.9543936714780759 0.0812964322417391 0.32420173689847753 0.9760323770490913 -0.1349441745444886 0.48336163985722025 0.9005445286386067 0.403248053914137 -0.19543423111450142 0.2848696068886927 0.09004656389099797 0.39996381195097985 0.2810445650085458 0.19524930079889602 0.6258873046681357 0.2744765503779776 -0.27393089436886386 -0.007383119139193095 0.5158760039729444 -0.08531784497046035 0.8364663167628772 0.5931156772720667 0.08199422785829924 0.8575535869950746 0.6230529213536331 0.9316850395049929 -0.40175826627470546 -0.32386061807749433 0.2379807950628845 0.1793385131075711 0.983372413051893 0.09372650148170636 -0.37903143964028563 -0.8739432985848603 -0.11231755674690902 -0.8946436653722345 0.4612843753221034 0.10687455685578495 0.6827435868122849 -0.5540065210076712 -0.27232472413686004 -0.11398824736385693 -0.6063403807791372 0.2319900892614173 -0.41138324427598305 -0.2545799457332045 0.18964997223130275 0.9763165361655624 0.32044379495996167 -0.12394923109146605 0.1437001636481985 0.9125870385246988 -0.6572278011640069 -0.049487782079374654 0.5670284918488306 0.2585735541438434 0.43112973537419386 -0.6186955234201899 0.8833376130491193 -0.4641108767745148 -0.7222944594712839 0.1398755315670266 -0.22063481419521236 0.6863261780813261 0.00673360815516677 -0.2773281902028446 0.5754010724379917 -0.7591671215311755 0.045259401836480695 0.9798072579992743 -0.32804582365150714 -0.7601642775276776 0.3286804234869187 -0.607609730332219 0.20955235698153718 -0.33364610003677764 0.5093007794939981 0.7407031305907277 -0.6717673104133535 -0.41926167396950675 -0.6924672695485379 0.7000398032511865 0.0388174608501628 -0.5363967409686103 -0.9277104299277648 0.856257871422528 -0.16535158563979868 -0.23946550564306945 0.6948352933018205 -0.36520879727847566 -0.17862965641507178 -0.37536383377142957 -0.6499605467968894 0.6636322508192602 -0.4883673870150447 -0.6772888629530829 -0.21438179061315865 0.5674228515207047 0.653046172970629 0.59515206324951 -0.6538887127471411 0.8451195556706392 0.7577318413225551 -0.4872976845869632 -0.2675138618830979 -0.5383663632288371 -0.00909334803934203 -0.25219601583957396 0.40504275766007214 -0.12707821692004395 0.8648154004474158 -0.24236098312680388 -0.5476430787469229 -0.4658118577867765 0.21462658117480293 -0.7656105807555844 -0.7842972906998018 0.24443573873992985 0.8886252177877154 0.24191478160695912 -0.7379130508477962 0.4819819099331413 0.9066403099097924 0.14751451710400243 0.2075782162706239 0.1892469202714544 -0.04721914604437227 -0.3203692924094843 -0.061043005453927934 -0.25909775825684744 -0.9236630091322764 0.9135790940519892 -0.06434882511656448 -0.17161472605536043 -0.36235450187028473 -0.8075157039542598 -0.532113429639655 -0.4331784902860696 -0.6606115531576855 0.4918018511026909 -0.2697622344242292 0.400142081641933 -0.8789178090824685 -0.4306118106822008 0.6126295152167904 -0.15117497264718716 0.5287289364889911 0.7263739911116456 -0.3361450719536998 -0.26947351950512766 -0.16807223001152427 -0.40702064905716284 -0.8876704308091485 -0.22526014173814923 0.4735615453295323 -0.3317722853066385 0.7722292102364194 -0.9240482038262072 -0.7190303826799727 diff --git a/perf_test/batched/sparse/scripts/.gitignore b/perf_test/batched/sparse/scripts/.gitignore new file mode 100644 index 0000000000..30e66057c1 --- /dev/null +++ b/perf_test/batched/sparse/scripts/.gitignore @@ -0,0 +1 @@ +binary_dir* \ No newline at end of file diff --git a/perf_test/batched/sparse/scripts/run_CG.sh b/perf_test/batched/sparse/scripts/run_CG.sh new file mode 100755 index 0000000000..fc740b0a77 --- /dev/null +++ b/perf_test/batched/sparse/scripts/run_CG.sh @@ -0,0 +1,3 @@ +exe_path=$(head -n 1 "binary_dir.txt") + +${exe_path}/CG/KokkosBatched_Test_CG -A ../data/A.mm -B ../data/B.mm -X ../output/X_CG -timers ../output/timers_CG -n1 10 -n2 100 -team_size -1 -implementation 0 -l -n_iterations 20 -tol 1e-8 -vector_length 8 -N_team 8 \ No newline at end of file diff --git a/perf_test/batched/sparse/scripts/run_GMRES.sh b/perf_test/batched/sparse/scripts/run_GMRES.sh new file mode 100755 index 0000000000..e26ab2aa15 --- /dev/null +++ b/perf_test/batched/sparse/scripts/run_GMRES.sh @@ -0,0 +1,3 @@ +exe_path=$(head -n 1 "binary_dir.txt") + +${exe_path}/GMRES/KokkosBatched_Test_GMRES -A ../data/A.mm -B ../data/B.mm -X ../output/X_GMRES -timers ../output/timers_GMRES -n1 10 -n2 100 -team_size -1 -implementation 0 -l -n_iterations 20 -tol 1e-8 -vector_length 8 -N_team 8 \ No newline at end of file diff --git a/perf_test/batched/sparse/scripts/run_SPMV.sh b/perf_test/batched/sparse/scripts/run_SPMV.sh new file mode 100755 index 0000000000..d4edd993aa --- /dev/null +++ b/perf_test/batched/sparse/scripts/run_SPMV.sh @@ -0,0 +1,3 @@ +exe_path=$(head -n 1 "binary_dir.txt") + +${exe_path}/SPMV/KokkosBatched_Test_SPMV -A ../data/A.mm -B ../data/B.mm -X ../output/X_SPMV -timers ../output/timers_SPMV -n1 10 -n2 100 -team_size -1 -implementation 3 -l -vector_length 8 -N_team 8 \ No newline at end of file From 191dfa3c37035eef40f37af12942fbc06e68eedf Mon Sep 17 00:00:00 2001 From: brian-kelley Date: Wed, 28 Sep 2022 15:13:56 -0600 Subject: [PATCH 107/226] Use CRS matrix sort, instead of Kokkos::sort on each row (#1553) --- .../KokkosSparse_spiluk_symbolic_impl.hpp | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp b/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp index 691d624963..99d0ab1fe8 100644 --- a/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp +++ b/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp @@ -51,7 +51,7 @@ #include #include #include -#include +#include #include //#define SYMBOLIC_OUTPUT_INFO @@ -451,18 +451,12 @@ void iluk_symbolic(IlukHandle& thandle, thandle.set_nnzU(cntU); // Sort - for (size_type row_id = 0; - row_id < static_cast(L_row_map.extent(0)) - 1; row_id++) { - size_type row_start = L_row_map(row_id); - size_type row_end = L_row_map(row_id + 1); - Kokkos::sort(subview(L_entries, Kokkos::make_pair(row_start, row_end))); - } - for (size_type row_id = 0; - row_id < static_cast(U_row_map.extent(0)) - 1; row_id++) { - size_type row_start = U_row_map(row_id); - size_type row_end = U_row_map(row_id + 1); - Kokkos::sort(subview(U_entries, Kokkos::make_pair(row_start, row_end))); - } + KokkosSparse::sort_crs_graph( + L_row_map, L_entries); + KokkosSparse::sort_crs_graph( + U_row_map, U_entries); // Level scheduling on L if (thandle.get_algorithm() == From bf764340e56dcb91aad3dc86695216769ea06a86 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 28 Sep 2022 15:31:51 -0600 Subject: [PATCH 108/226] sparse/unit_test: Disable spmv_mv_heavy for all A64FX builds --- sparse/unit_test/Test_Sparse_spmv.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sparse/unit_test/Test_Sparse_spmv.hpp b/sparse/unit_test/Test_Sparse_spmv.hpp index 2e440288f4..3f561badbf 100644 --- a/sparse/unit_test/Test_Sparse_spmv.hpp +++ b/sparse/unit_test/Test_Sparse_spmv.hpp @@ -565,7 +565,7 @@ template void test_spmv_mv_heavy(lno_t numRows, size_type nnz, lno_t bandwidth, lno_t row_size_variance, int numMV) { -#if defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) +#if defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) || defined(KOKKOS_ARCH_A64FX) if (std::is_same>::value) { std::cerr << "TEST SKIPPED: See " @@ -573,7 +573,7 @@ void test_spmv_mv_heavy(lno_t numRows, size_type nnz, lno_t bandwidth, << std::endl; return; } -#endif // KOKKOSKERNELS_ENABLE_TPL_ARMPL +#endif // KOKKOSKERNELS_ENABLE_TPL_ARMPL || KOKKOS_ARCH_A64FX using crsMat_t = typename KokkosSparse::CrsMatrix; using ViewTypeX = Kokkos::View; From 5e013fe5b7a725334edd2d1ce36a3b007b2712e1 Mon Sep 17 00:00:00 2001 From: kliegeois Date: Wed, 28 Sep 2022 19:51:33 -0600 Subject: [PATCH 109/226] Remove unneeded function --- .../KokkosBatched_Test_Sparse_Helper.hpp | 40 ------------------- 1 file changed, 40 deletions(-) diff --git a/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp b/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp index 47a73ca2c2..71fbd129ad 100644 --- a/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp +++ b/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp @@ -252,43 +252,3 @@ void getInvDiagFromCRS(const VType &V, const IntType &r, const IntType &c, myfile.close(); */ } - -template -int launch_parameters(int numRows, int nnz, int rows_per_thread, int &team_size, - int vector_length) { - int rows_per_team; - int nnz_per_row = nnz / numRows; - if (nnz_per_row < 1) nnz_per_row = 1; - - // Determine rows per thread - if (rows_per_thread < 1) { -#ifdef KOKKOS_ENABLE_CUDA - if (std::is_same::value) - rows_per_thread = 1; - else -#endif - { - if (nnz_per_row < 20 && nnz > 5000000) { - rows_per_thread = 256; - } else - rows_per_thread = 64; - } - } - -#ifdef KOKKOS_ENABLE_CUDA - if (team_size < 1) team_size = 256 / vector_length; -#endif - - rows_per_team = rows_per_thread * team_size; - - if (rows_per_team < 0) { - int nnz_per_team = 4096; - int conc = execution_space::concurrency(); - while ((conc * nnz_per_team * 4 > nnz) && (nnz_per_team > 256)) - nnz_per_team /= 2; - int tmp_nnz_per_row = nnz / numRows; - rows_per_team = (nnz_per_team + tmp_nnz_per_row - 1) / tmp_nnz_per_row; - } - - return rows_per_team; -} From 4547294880dcf23c664dcb9133c946005a4c33fb Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Mon, 3 Oct 2022 16:59:04 -0600 Subject: [PATCH 110/226] .github: Set minimum permissions --- .github/workflows/format.yml | 3 +++ .github/workflows/osx.yml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 328881b6d7..df1df44ad7 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -6,6 +6,9 @@ on: - master - develop +permissions: + contents: none + jobs: clang-format-check: runs-on: ubuntu-20.04 diff --git a/.github/workflows/osx.yml b/.github/workflows/osx.yml index aa14cace30..07c0cb8d1e 100644 --- a/.github/workflows/osx.yml +++ b/.github/workflows/osx.yml @@ -10,6 +10,9 @@ on: - 'docs/**' types: [ opened, reopened, synchronize ] +permissions: + contents: none + # Cancels any in progress 'workflow' associated with this PR concurrency: group: ${{ github.workflow }}-${{ github.ref }} From 67c8040705e0446a3b49441fd6029bc62e275a1c Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 5 Oct 2022 10:20:21 -0600 Subject: [PATCH 111/226] scripts/cm_test_all_sandia: Update openblas tpl --- scripts/cm_test_all_sandia | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index cfb37bece5..3bdb415918 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -878,7 +878,7 @@ elif [ "$MACHINE" = "blake" ]; then ONEAPI_WARNING_FLAGS="" GCC72_MODULE_TPL_LIST="$BASE_MODULE_LIST,openblas/0.2.20/gcc/7.2.0" - GCC102_MODULE_TPL_LIST="$BASE_MODULE_LIST,openblas/0.3.13/gcc/10.2.0" + GCC102_MODULE_TPL_LIST="$BASE_MODULE_LIST,openblas/0.3.21/gcc/10.2.0" if [ "$SPOT_CHECK" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) From 5d2c347de9ec83edc2ab3fe8f4e18385dc1ac54b Mon Sep 17 00:00:00 2001 From: Thomas Conrad Clevenger Date: Thu, 15 Sep 2022 10:51:23 -0600 Subject: [PATCH 112/226] change to device_type --- sparse/src/KokkosSparse_BsrMatrix.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sparse/src/KokkosSparse_BsrMatrix.hpp b/sparse/src/KokkosSparse_BsrMatrix.hpp index a615eff478..c2c5618236 100644 --- a/sparse/src/KokkosSparse_BsrMatrix.hpp +++ b/sparse/src/KokkosSparse_BsrMatrix.hpp @@ -391,11 +391,11 @@ class BsrMatrix { HostMirror; //! Type of the graph structure of the sparse matrix. typedef Kokkos::StaticCrsGraph + device_type, memory_traits, size_type> StaticCrsGraphType; //! Type of the graph structure of the sparse matrix - consistent with Kokkos. typedef Kokkos::StaticCrsGraph + device_type, memory_traits, size_type> staticcrsgraph_type; //! Type of column indices in the sparse matrix. typedef typename staticcrsgraph_type::entries_type index_type; From e683dd4de800340c0214c5684a689ddfa569e1da Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Fri, 7 Oct 2022 16:30:41 -0600 Subject: [PATCH 113/226] apply clang-format --- sparse/src/KokkosSparse_BsrMatrix.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sparse/src/KokkosSparse_BsrMatrix.hpp b/sparse/src/KokkosSparse_BsrMatrix.hpp index c2c5618236..12f4dff651 100644 --- a/sparse/src/KokkosSparse_BsrMatrix.hpp +++ b/sparse/src/KokkosSparse_BsrMatrix.hpp @@ -390,12 +390,12 @@ class BsrMatrix { typedef BsrMatrix HostMirror; //! Type of the graph structure of the sparse matrix. - typedef Kokkos::StaticCrsGraph + typedef Kokkos::StaticCrsGraph StaticCrsGraphType; //! Type of the graph structure of the sparse matrix - consistent with Kokkos. - typedef Kokkos::StaticCrsGraph + typedef Kokkos::StaticCrsGraph staticcrsgraph_type; //! Type of column indices in the sparse matrix. typedef typename staticcrsgraph_type::entries_type index_type; From 7db220b4d23b15d26e320ce6804af64f2c98e626 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Mon, 3 Oct 2022 21:24:02 -0600 Subject: [PATCH 114/226] TeamGemvInternal: Update headers and namespace in KokkosBatched_Gemv_Decl.hpp Update for 12-arg invoke overload, moved to file KokkosBlas2_serial_gemv_internal.hpp into the KokkosBlas::Impl namespace --- batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp | 6 +++--- batched/dense/src/KokkosBatched_Gemv_Decl.hpp | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp b/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp index 5ee01069d5..e9bc0c58dd 100644 --- a/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp @@ -5,9 +5,9 @@ #include "KokkosBatched_Util.hpp" -// #include "KokkosBlas1_set_impl.hpp" -// #include "KokkosBlas1_team_scal_impl.hpp" -// #include "KokkosBlas2_serial_gemv_inner_multiple_dot.hpp" +//#include "KokkosBlas1_set_impl.hpp" +//#include "KokkosBlas1_team_scal_impl.hpp" +//#include "KokkosBlas2_serial_gemv_inner_multiple_dot.hpp" namespace KokkosBatched { diff --git a/batched/dense/src/KokkosBatched_Gemv_Decl.hpp b/batched/dense/src/KokkosBatched_Gemv_Decl.hpp index f4a70d4eb5..303414f187 100644 --- a/batched/dense/src/KokkosBatched_Gemv_Decl.hpp +++ b/batched/dense/src/KokkosBatched_Gemv_Decl.hpp @@ -95,6 +95,7 @@ struct Gemv { #include "KokkosBatched_Gemv_Team_Impl.hpp" #include "KokkosBatched_Gemv_TeamVector_Impl.hpp" +#include "KokkosBlas2_serial_gemv_internal.hpp" #define KOKKOSBATCHED_SERIAL_GEMV_NO_TRANSPOSE_INTERNAL_INVOKE( \ ALGOTYPE, M, N, ALPHA, A, AS0, AS1, X, XS, BETA, Y, YS) \ @@ -108,12 +109,12 @@ struct Gemv { #define KOKKOSBATCHED_TEAM_GEMV_NO_TRANSPOSE_INTERNAL_INVOKE( \ ALGOTYPE, MEMBER, M, N, ALPHA, A, AS0, AS1, X, XS, BETA, Y, YS) \ - KokkosBatched::TeamGemvInternal::invoke( \ + KokkosBlas::Impl::TeamGemvInternal::invoke( \ MEMBER, M, N, ALPHA, A, AS0, AS1, X, XS, BETA, Y, YS) #define KOKKOSBATCHED_TEAM_GEMV_TRANSPOSE_INTERNAL_INVOKE( \ ALGOTYPE, MEMBER, M, N, ALPHA, A, AS0, AS1, X, XS, BETA, Y, YS) \ - KokkosBatched::TeamGemvInternal::invoke( \ + KokkosBlas::Impl::TeamGemvInternal::invoke( \ MEMBER, N, M, ALPHA, A, AS1, AS0, X, XS, BETA, Y, YS) #define KOKKOSBATCHED_GEMV_NO_TRANSPOSE_INTERNAL_INVOKE( \ From e015b8ebabd9bb0ee8e337910e5b55fe1f1111ae Mon Sep 17 00:00:00 2001 From: Vinh Dang Date: Tue, 11 Oct 2022 16:07:05 -0600 Subject: [PATCH 115/226] Remove src subdir --- batched/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/batched/CMakeLists.txt b/batched/CMakeLists.txt index 71903ef4cc..669e1ca808 100644 --- a/batched/CMakeLists.txt +++ b/batched/CMakeLists.txt @@ -1,5 +1,5 @@ # Adding source directory to the build -LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/src) +LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/src) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/impl) From 2f30abc59e9011bb2a4a804c16c8d3489e44f7e5 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 3 Oct 2022 20:32:40 -0600 Subject: [PATCH 116/226] ROTMG: adding rotmg implementation to KokkosBlas This adds a full implementation for rotmg, its ETI and TPLs. --- blas/CMakeLists.txt | 7 + .../KokkosBlas1_rotmg_eti_spec_inst.cpp.in | 54 +++ .../KokkosBlas1_rotmg_eti_spec_avail.hpp.in | 51 +++ .../KokkosBlas1_rotmg_eti_spec_decl.hpp.in | 51 +++ blas/impl/KokkosBlas1_rotmg_impl.hpp | 237 ++++++++++++ blas/impl/KokkosBlas1_rotmg_spec.hpp | 174 +++++++++ blas/src/KokkosBlas1_rotmg.hpp | 112 ++++++ .../tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp | 157 ++++++++ blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp | 353 ++++++++++++++++++ blas/tpls/KokkosBlas_Host_tpl.cpp | 21 ++ blas/tpls/KokkosBlas_Host_tpl.hpp | 2 + blas/unit_test/Test_Blas.hpp | 1 + blas/unit_test/Test_Blas1_rotmg.hpp | 235 ++++++++++++ cmake/kokkoskernels_eti_floats.cmake | 3 + 14 files changed, 1458 insertions(+) create mode 100644 blas/eti/generated_specializations_cpp/rotmg/KokkosBlas1_rotmg_eti_spec_inst.cpp.in create mode 100644 blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_avail.hpp.in create mode 100644 blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_decl.hpp.in create mode 100644 blas/impl/KokkosBlas1_rotmg_impl.hpp create mode 100644 blas/impl/KokkosBlas1_rotmg_spec.hpp create mode 100644 blas/src/KokkosBlas1_rotmg.hpp create mode 100644 blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp create mode 100644 blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp create mode 100644 blas/unit_test/Test_Blas1_rotmg.hpp diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt index 5f632ce497..e8bda62044 100644 --- a/blas/CMakeLists.txt +++ b/blas/CMakeLists.txt @@ -255,6 +255,13 @@ KOKKOSKERNELS_GENERATE_ETI(Blas1_rotg rotg TYPE_LISTS FLOATS DEVICES ) +KOKKOSKERNELS_GENERATE_ETI(Blas1_rotmg rotmg + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS REAL_FLOATS LAYOUTS DEVICES +) + KOKKOSKERNELS_GENERATE_ETI(Blas2_gemv gemv COMPONENTS blas HEADER_LIST ETI_HEADERS diff --git a/blas/eti/generated_specializations_cpp/rotmg/KokkosBlas1_rotmg_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/rotmg/KokkosBlas1_rotmg_eti_spec_inst.cpp.in new file mode 100644 index 0000000000..3acae58abd --- /dev/null +++ b/blas/eti/generated_specializations_cpp/rotmg/KokkosBlas1_rotmg_eti_spec_inst.cpp.in @@ -0,0 +1,54 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + + +#define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true +#include "KokkosKernels_config.h" +#include "KokkosBlas1_rotmg_spec.hpp" + +namespace KokkosBlas { +namespace Impl { +@BLAS1_ROTMG_ETI_INST_BLOCK@ +} //IMPL +} //Kokkos diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_avail.hpp.in new file mode 100644 index 0000000000..b889295fdb --- /dev/null +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_avail.hpp.in @@ -0,0 +1,51 @@ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROTMG_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_ROTMG_ETI_SPEC_AVAIL_HPP_ + +namespace KokkosBlas { +namespace Impl { +@BLAS1_ROTMG_ETI_AVAIL_BLOCK@ + } //IMPL +} //Kokkos +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_decl.hpp.in new file mode 100644 index 0000000000..4a99d3c1d8 --- /dev/null +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_decl.hpp.in @@ -0,0 +1,51 @@ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROTMG_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_ROTMG_ETI_SPEC_DECL_HPP_ + +namespace KokkosBlas { +namespace Impl { +@BLAS1_ROTMG_ETI_DECL_BLOCK@ + } //IMPL +} //Kokkos +#endif diff --git a/blas/impl/KokkosBlas1_rotmg_impl.hpp b/blas/impl/KokkosBlas1_rotmg_impl.hpp new file mode 100644 index 0000000000..8791002d4f --- /dev/null +++ b/blas/impl/KokkosBlas1_rotmg_impl.hpp @@ -0,0 +1,237 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROTMG_IMPL_HPP_ +#define KOKKOSBLAS1_ROTMG_IMPL_HPP_ + +#include +#include +#include +#include + +namespace KokkosBlas { +namespace Impl { + +template +KOKKOS_INLINE_FUNCTION void rotmg_impl(DXView const& d1, DXView const& d2, + DXView const& x1, YView const& y1, + PView const& param) { + using Scalar = typename DXView::non_const_value_type; + + const Scalar one = Kokkos::ArithTraits::one(); + const Scalar zero = Kokkos::ArithTraits::zero(); + + const Scalar gamma = 4096; + const Scalar gammasq = 4096 * 4096; + const Scalar gammasqinv = one / gammasq; + + Scalar flag = zero; + Scalar h11 = zero, h12 = zero, h21 = zero, h22 = zero; + + // Quick exit if d1 negative + if (d1() < 0) { + flag = -one; + + d1() = zero; + d2() = zero; + x1() = zero; + } else { + Scalar p2 = d2() * y1(); + + // Trivial case p2 == 0 + if (p2 == zero) { + flag = -(one + one); + param(0) = flag; + return; + } + + // General case + Scalar p1 = d1() * x1(); + Scalar q1 = p1 * x1(); + Scalar q2 = p2 * y1(); + if (Kokkos::abs(q1) > Kokkos::abs(q2)) { + h21 = -y1() / x1(); + h12 = p2 / p1; + Scalar u = one - h12 * h21; + if (u > zero) { + flag = zero; + d1() = d1() / u; + d2() = d2() / u; + x1() = x1() * u; + } else { + flag = -one; + h11 = zero; + h12 = zero; + h21 = zero; + h22 = zero; + + d1() = zero; + d2() = zero; + x1() = zero; + } + } else { + if (q2 < 0) { + flag = -one; + h11 = zero; + h12 = zero; + h21 = zero; + h22 = zero; + + d1() = zero; + d2() = zero; + x1() = zero; + } else { + flag = one; + h11 = p1 / p2; + h22 = x1() / y1(); + Scalar u = one + h11 * h22; + Scalar tmp = d2() / u; + d2() = d1() / u; + d1() = tmp; + x1() = y1() * u; + } + } + + // Rescale d1, h11 and h12 + if (d1() != zero) { + while ((d1() <= gammasqinv) || (d1() >= gammasq)) { + if (flag == zero) { + h11 = one; + h22 = one; + flag = -one; + } else { + h21 = -one; + h12 = one; + flag = -one; + } + + if (d1() <= gammasqinv) { + d1() = d1() * gammasq; + x1() = x1() / gamma; + h11 = h11 / gamma; + h12 = h12 / gamma; + } else { + d1() = d1() / gammasq; + x1() = x1() * gamma; + h11 = h11 * gamma; + h12 = h12 * gamma; + } + } + } + + // Rescale d2, h21 and h22 + if (d2() != zero) { + while ((Kokkos::abs(d2()) <= gammasqinv) || + (Kokkos::abs(d2()) >= gammasq)) { + if (flag == zero) { + h11 = one; + h22 = one; + flag = -one; + } else { + h21 = -one; + h12 = one; + flag = -one; + } + + if (Kokkos::abs(d2()) <= gammasqinv) { + d2() = d2() * gammasq; + h21 = h21 / gamma; + h22 = h22 / gamma; + } else { + d2() = d2() / gammasq; + h21 = h21 * gamma; + h22 = h22 * gamma; + } + } + } + + // Setup output parameters + if (flag < zero) { + param(1) = h11; + param(2) = h21; + param(3) = h12; + param(4) = h22; + } else if (flag == zero) { + param(2) = h21; + param(3) = h12; + } else { + param(1) = h11; + param(4) = h22; + } + param(0) = flag; + } +} + +template +struct rotmg_functor { + using Scalar = typename DXView::non_const_value_type; + + DXView d1, d2, x1; + YView y1; + PView param; + + rotmg_functor(DXView& d1_, DXView& d2_, DXView& x1_, const YView& y1_, + PView& param_) + : d1(d1_), d2(d2_), x1(x1_), y1(y1_), param(param_) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const int) const { rotmg_impl(d1, d2, x1, y1, param); } +}; + +template +void Rotmg_Invoke(execution_space const& space, DXView const& d1, + DXView const& d2, DXView const& x1, YView const& y1, + PView const& param) { + using Scalar = typename DXView::value_type; + static_assert(!Kokkos::ArithTraits::is_complex, + "rotmg is not defined for complex types!"); + + rotmg_functor myFunc(d1, d2, x1, y1, param); + Kokkos::RangePolicy rotmg_policy(space, 0, 1); + Kokkos::parallel_for("KokkosBlas1::rotmg", rotmg_policy, myFunc); +} + +} // namespace Impl +} // namespace KokkosBlas + +#endif // KOKKOSBLAS1_ROTMG_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_rotmg_spec.hpp b/blas/impl/KokkosBlas1_rotmg_spec.hpp new file mode 100644 index 0000000000..b6b84697aa --- /dev/null +++ b/blas/impl/KokkosBlas1_rotmg_spec.hpp @@ -0,0 +1,174 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROTMG_SPEC_HPP_ +#define KOKKOSBLAS1_ROTMG_SPEC_HPP_ + +#include +#include + +// Include the actual functors +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +#include +#endif + +namespace KokkosBlas { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct rotmg_eti_spec_avail { + enum : bool { value = false }; +}; +} // namespace Impl +} // namespace KokkosBlas + +// +// Macro for declaration of full specialization availability +// KokkosBlas::Impl::Rotmg. This is NOT for users!!! All +// the declarations of full specializations go in this header file. +// We may spread out definitions (see _INST macro below) across one or +// more .cpp files. +// +#define KOKKOSBLAS1_ROTMG_ETI_SPEC_AVAIL(SCALAR, LAYOUT, EXEC_SPACE, \ + MEM_SPACE) \ + template <> \ + struct rotmg_eti_spec_avail< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +// Include the actual specialization declarations +#include +#include + +namespace KokkosBlas { +namespace Impl { + +// Unification layer +template < + class execution_space, class DXView, class YView, class PView, + bool tpl_spec_avail = + rotmg_tpl_spec_avail::value, + bool eti_spec_avail = + rotmg_eti_spec_avail::value> +struct Rotmg { + static void rotmg(execution_space const& space, DXView& d1, DXView& d2, + DXView& x1, YView& y1, PView& param); +}; + +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +//! Full specialization of Rotmg. +template +struct Rotmg { + static void rotmg(execution_space const& space, DXView& d1, DXView& d2, + DXView& x1, YView& y1, PView& param) { + Kokkos::Profiling::pushRegion(KOKKOSKERNELS_IMPL_COMPILE_LIBRARY + ? "KokkosBlas::rotmg[ETI]" + : "KokkosBlas::rotmg[noETI]"); +#ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION + if (KOKKOSKERNELS_IMPL_COMPILE_LIBRARY) + printf("KokkosBlas1::rotmg<> ETI specialization for < %s, %s, %s >\n", + typeid(DXView).name(), typeid(YView).name(), typeid(PView).name()); + else { + printf("KokkosBlas1::rotmg<> non-ETI specialization for < %s, %s, %s >\n", + typeid(DXView).name(), typeid(YView).name(), typeid(PView).name()); + } +#endif + Rotmg_Invoke(space, d1, d2, x1, y1, + param); + Kokkos::Profiling::popRegion(); + } +}; +#endif + +} // namespace Impl +} // namespace KokkosBlas + +// +// Macro for declaration of full specialization of +// KokkosBlas::Impl::Rotmg. This is NOT for users!!! All +// the declarations of full specializations go in this header file. +// We may spread out definitions (see _DEF macro below) across one or +// more .cpp files. +// +#define KOKKOSBLAS1_ROTMG_ETI_SPEC_DECL(SCALAR, LAYOUT, EXEC_SPACE, MEM_SPACE) \ + extern template struct Rotmg< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + false, true>; + +// +// Macro for definition of full specialization of +// KokkosBlas::Impl::Rotmg. This is NOT for users!!! We +// use this macro in one or more .cpp files in this directory. +// +#define KOKKOSBLAS1_ROTMG_ETI_SPEC_INST(SCALAR, LAYOUT, EXEC_SPACE, MEM_SPACE) \ + template struct Rotmg< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + false, true>; + +#include +#include + +#endif // KOKKOSBLAS1_ROTMG_SPEC_HPP_ diff --git a/blas/src/KokkosBlas1_rotmg.hpp b/blas/src/KokkosBlas1_rotmg.hpp new file mode 100644 index 0000000000..43efa8d3b2 --- /dev/null +++ b/blas/src/KokkosBlas1_rotmg.hpp @@ -0,0 +1,112 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_ROTMG_HPP_ +#define KOKKOSBLAS1_ROTMG_HPP_ + +#include +#include + +namespace KokkosBlas { + +/// \brief Compute the coefficients to apply a modified Givens rotation. +/// +/// \tparam execution_space the execution space where the kernel will be +/// executed \tparam DXView a rank0 view type that hold non const data \tparam +/// YView a rank0 view type that holds const data \tparam PView a rank1 view of +/// static extent 5 that holds non const data +/// +/// \param d1 [in/out] +/// \param d2 [in/out] +/// \param x1 [in/out] +/// \param y1 [in] +/// \param param [out] +/// +template +void rotmg(execution_space const& space, DXView const& d1, DXView const& d2, + DXView const& x1, YView const& y1, PView const& param) { + static_assert( + Kokkos::SpaceAccessibility::accessible, + "rotmg: execution_space cannot access data in DXView"); + + using DXView_Internal = Kokkos::View< + typename DXView::value_type, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + Kokkos::Device, + Kokkos::MemoryTraits>; + + using YView_Internal = Kokkos::View< + typename YView::value_type, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + Kokkos::Device, + Kokkos::MemoryTraits>; + + using PView_Internal = Kokkos::View< + typename PView::value_type[5], + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + Kokkos::Device, + Kokkos::MemoryTraits>; + + DXView_Internal d1_(d1), d2_(d2), x1_(x1); + YView_Internal y1_(y1); + PView_Internal param_(param); + + Kokkos::Profiling::pushRegion("KokkosBlas::rotmg"); + Impl::Rotmg::rotmg(space, d1_, d2_, x1_, y1_, param_); + Kokkos::Profiling::popRegion(); +} + +template +void rotmg(DXView const& d1, DXView const& d2, DXView const& x1, + YView const& y1, PView const& param) { + const typename PView::execution_space space = + typename PView::execution_space(); + rotmg(space, d1, d2, x1, y1, param); +} + +} // namespace KokkosBlas + +#endif // KOKKOSBLAS1_ROTMG_HPP_ diff --git a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp new file mode 100644 index 0000000000..372c5aeb2c --- /dev/null +++ b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp @@ -0,0 +1,157 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_HPP_ + +namespace KokkosBlas { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct rotmg_tpl_spec_avail { + enum : bool { value = false }; +}; +} // namespace Impl +} // namespace KokkosBlas + +namespace KokkosBlas { +namespace Impl { + +// Generic Host side BLAS (could be MKL or whatever) +#ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS +#define KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_BLAS(SCALAR, LAYOUT, EXEC_SPACE, \ + MEM_SPACE) \ + template <> \ + struct rotmg_tpl_spec_avail< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +#ifdef KOKKOS_ENABLE_SERIAL +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutLeft, + Kokkos::Serial, Kokkos::HostSpace) +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutRight, + Kokkos::Serial, Kokkos::HostSpace) +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutRight, + Kokkos::Serial, Kokkos::HostSpace) +#endif + +#ifdef KOKKOS_ENABLE_OPENMP +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutLeft, + Kokkos::OpenMP, Kokkos::HostSpace) +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutRight, + Kokkos::OpenMP, Kokkos::HostSpace) +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutRight, + Kokkos::OpenMP, Kokkos::HostSpace) +#endif +#endif + +// cuBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS +#define KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_CUBLAS(SCALAR, LAYOUT, EXEC_SPACE, \ + MEM_SPACE) \ + template <> \ + struct rotmg_tpl_spec_avail< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutLeft, + Kokkos::Cuda, Kokkos::CudaSpace) +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutRight, + Kokkos::Cuda, Kokkos::CudaSpace) +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutRight, + Kokkos::Cuda, Kokkos::CudaSpace) +#endif + +// rocBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS +#define KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(SCALAR, LAYOUT, EXEC_SPACE, \ + MEM_SPACE) \ + template <> \ + struct rotmg_tpl_spec_avail< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutLeft, + Kokkos::HIP, Kokkos::HIPSpace) +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutRight, + Kokkos::HIP, Kokkos::HIPSpace) +KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutRight, + Kokkos::HIP, Kokkos::HIPSpace) +#endif + +} // namespace Impl +} // namespace KokkosBlas +#endif diff --git a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp new file mode 100644 index 0000000000..72f64c32e5 --- /dev/null +++ b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp @@ -0,0 +1,353 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_HPP_ + +namespace KokkosBlas { +namespace Impl { + +namespace { +template +inline void rotmg_print_specialization() { +#ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION + printf("KokkosBlas1::rotmg<> TPL Blas specialization for < %s >\n", + typeid(Scalar).name()); +#endif +} +} // namespace +} // namespace Impl +} // namespace KokkosBlas + +// Generic Host side BLAS (could be MKL or whatever) +#ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS +#include "KokkosBlas_Host_tpl.hpp" + +namespace KokkosBlas { +namespace Impl { + +#define KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(SCALAR, LAYOUT, EXEC_SPACE, \ + MEM_SPACE, ETI_SPEC_AVAIL) \ + template <> \ + struct Rotmg< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using DXView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using YView = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using PView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotmg(EXEC_SPACE const& /* space */, DXView& d1, DXView& d2, \ + DXView& x1, YView& y1, PView& param) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotmg[TPL_BLAS,double]"); \ + HostBlas::rotmg(d1.data(), d2.data(), x1.data(), y1.data(), \ + param.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#ifdef KOKKOS_ENABLE_SERIAL +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, false) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutRight, + Kokkos::Serial, Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutRight, + Kokkos::Serial, Kokkos::HostSpace, false) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, false) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, false) +#endif + +#ifdef KOKKOS_ENABLE_OPENMP +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, false) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutRight, + Kokkos::OpenMP, Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutRight, + Kokkos::OpenMP, Kokkos::HostSpace, false) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, false) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, false) +#endif + +} // namespace Impl +} // namespace KokkosBlas + +#endif + +// cuBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS +#include + +namespace KokkosBlas { +namespace Impl { + +#define KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXEC_SPACE, MEM_SPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotmg< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using DXView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using YView = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using PView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + \ + static void rotmg(EXEC_SPACE const& space, DXView const& d1, \ + DXView const& d2, DXView const& x1, YView const& y1, \ + PView const& param) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotmg[TPL_CUBLAS,double]"); \ + rotmg_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& s = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(s.handle, space.cuda_stream())); \ + cublasDrotmg(s.handle, d1.data(), d2.data(), x1.data(), y1.data(), \ + param.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) + +#define KOKKOSBLAS1_SROTMG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXEC_SPACE, MEM_SPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotmg< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using DXView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using YView = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using PView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + \ + static void rotmg(EXEC_SPACE const& space, DXView const& d1, \ + DXView const& d2, DXView const& x1, YView const& y1, \ + PView const& param) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotmg[TPL_CUBLAS,float]"); \ + rotmg_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& s = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(s.handle, space.cuda_stream())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSrotmg(s.handle, d1.data(), \ + d2.data(), x1.data(), \ + y1.data(), param.data())); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +KOKKOSBLAS1_SROTMG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_SROTMG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_SROTMG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_SROTMG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) + +} // namespace Impl +} // namespace KokkosBlas + +#endif + +// rocBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS +#include + +namespace KokkosBlas { +namespace Impl { + +#define KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXEC_SPACE, \ + MEM_SPACE, ETI_SPEC_AVAIL) \ + template <> \ + struct Rotmg< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using DXView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using YView = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using PView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + \ + static void rotmg(EXEC_SPACE const& space, DXView const& d1, \ + DXView const& d2, DXView const& x1, YView const& y1, \ + PView const& param) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,double]"); \ + rotmg_print_specialization(); \ + KokkosBlas::Impl::RocBlasSingleton& s = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblasSetStream(s.handle, space.hip_stream())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_drotmg(s.handle, &a, &b, &c, &s)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, false) +KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, false) + +#define KOKKOSBLAS1_SROTMG_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXEC_SPACE, \ + MEM_SPACE, ETI_SPEC_AVAIL) \ + template <> \ + struct Rotmg< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using DXView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using YView = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using PView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + \ + static void rotmg(EXEC_SPACE const& space, DXView const& d1, \ + DXView const& d2, DXView const& x1, YView const& y1, \ + PView const& param) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,float]"); \ + rotmg_print_specialization(); \ + KokkosBlas::Impl::RocBlasSingleton& s = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblasSetStream(s.handle, space.hip_stream())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_srotmg(s.handle, &a, &b, &c, &s)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +KOKKOSBLAS1_SROTMG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_SROTMG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_SROTMG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, false) +KOKKOSBLAS1_SROTMG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, false) + +} // namespace Impl +} // namespace KokkosBlas + +#endif + +#endif diff --git a/blas/tpls/KokkosBlas_Host_tpl.cpp b/blas/tpls/KokkosBlas_Host_tpl.cpp index 2467bb7215..64bfe57ef8 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.cpp +++ b/blas/tpls/KokkosBlas_Host_tpl.cpp @@ -139,6 +139,14 @@ void F77_BLAS_MANGLE(zrotg, ZROTG)(std::complex* a, std::complex* b, double* c, std::complex* s); +/// +/// rotmg +/// +void F77_BLAS_MANGLE(srotmg, SROTMG)(float* d1, float* d2, float* x1, + const float* y1, float* param); +void F77_BLAS_MANGLE(drotmg, DROTMG)(double* d1, double* d2, double* x1, + const double* y1, double* param); + /// /// Gemv /// @@ -356,6 +364,9 @@ void F77_BLAS_MANGLE(zscal, #define F77_FUNC_CROTG F77_BLAS_MANGLE(crotg, CROTG) #define F77_FUNC_ZROTG F77_BLAS_MANGLE(zrotg, ZROTG) +#define F77_FUNC_SROTMG F77_BLAS_MANGLE(srotmg, SROTMG) +#define F77_FUNC_DROTMG F77_BLAS_MANGLE(drotmg, DROTMG) + #define F77_FUNC_SGEMV F77_BLAS_MANGLE(sgemv, SGEMV) #define F77_FUNC_DGEMV F77_BLAS_MANGLE(dgemv, DGEMV) #define F77_FUNC_CGEMV F77_BLAS_MANGLE(cgemv, CGEMV) @@ -435,6 +446,11 @@ void HostBlas::rotg(float* a, float* b, float* c, float* s) { F77_FUNC_SROTG(a, b, c, s); } template <> +void HostBlas::rotmg(float* d1, float* d2, float* x1, const float* y1, + float* param) { + F77_FUNC_SROTMG(d1, d2, x1, y1, param); +} +template <> void HostBlas::gemv(const char trans, int m, int n, const float alpha, const float* a, int lda, const float* b, int ldb, const float beta, @@ -528,6 +544,11 @@ void HostBlas::rotg(double* a, double* b, double* c, double* s) { F77_FUNC_DROTG(a, b, c, s); } template <> +void HostBlas::rotmg(double* d1, double* d2, double* x1, + const double* y1, double* param) { + F77_FUNC_DROTMG(d1, d2, x1, y1, param); +} +template <> void HostBlas::gemv(const char trans, int m, int n, const double alpha, const double* a, int lda, const double* b, int ldb, const double beta, diff --git a/blas/tpls/KokkosBlas_Host_tpl.hpp b/blas/tpls/KokkosBlas_Host_tpl.hpp index b598cd1556..4cdbf78567 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.hpp +++ b/blas/tpls/KokkosBlas_Host_tpl.hpp @@ -78,6 +78,8 @@ struct HostBlas { static void rotg(T *a, T *b, mag_type *c, T *s); + static void rotmg(T *d1, T *d2, T *x1, const T *y1, T *param); + static void gemv(const char trans, int m, int n, const T alpha, const T *a, int lda, const T *b, int ldb, const T beta, /* */ T *c, int ldc); diff --git a/blas/unit_test/Test_Blas.hpp b/blas/unit_test/Test_Blas.hpp index b794d74bde..0b13917872 100644 --- a/blas/unit_test/Test_Blas.hpp +++ b/blas/unit_test/Test_Blas.hpp @@ -20,6 +20,7 @@ #include "Test_Blas1_nrminf.hpp" #include "Test_Blas1_reciprocal.hpp" #include "Test_Blas1_rotg.hpp" +#include "Test_Blas1_rotmg.hpp" #include "Test_Blas1_scal.hpp" #include "Test_Blas1_sum.hpp" #include "Test_Blas1_update.hpp" diff --git a/blas/unit_test/Test_Blas1_rotmg.hpp b/blas/unit_test/Test_Blas1_rotmg.hpp new file mode 100644 index 0000000000..21c1316afc --- /dev/null +++ b/blas/unit_test/Test_Blas1_rotmg.hpp @@ -0,0 +1,235 @@ +#include + +namespace Test { +template +void test_rotmg_impl(View0& d1, View0& d2, View0& x1, View0& y1, PView& param, + RView& ref_vals) { + using scalar_type = typename View0::non_const_value_type; + using YView = typename View0::const_type; + + YView y1_const(y1); + + KokkosBlas::rotmg(d1, d2, x1, y1_const, param); + + const scalar_type eps = Kokkos::ArithTraits::eps(); + auto d1_h = Kokkos::create_mirror_view(d1); + Kokkos::deep_copy(d1_h, d1); + EXPECT_NEAR_KK_REL(d1_h(), ref_vals(0), 10 * eps, "rotmg: d1 is off"); + + auto d2_h = Kokkos::create_mirror_view(d2); + Kokkos::deep_copy(d2_h, d2); + EXPECT_NEAR_KK_REL(d2_h(), ref_vals(1), 10 * eps, "rotmg: d2 is off"); + + auto x1_h = Kokkos::create_mirror_view(x1); + Kokkos::deep_copy(x1_h, x1); + EXPECT_NEAR_KK_REL(x1_h(), ref_vals(2), 10 * eps, "rotmg: x1 is off"); + + auto y1_h = Kokkos::create_mirror_view(y1_const); + Kokkos::deep_copy(y1_h, y1_const); + EXPECT_NEAR_KK_REL(y1_h(), ref_vals(3), 10 * eps, "rotmg: y1 is off"); + + auto param_h = Kokkos::create_mirror_view(param); + Kokkos::deep_copy(param_h, param); + EXPECT_NEAR_KK_REL(param_h(0), ref_vals(4), 10 * eps, + "rotmg: param(0) is off"); + EXPECT_NEAR_KK_REL(param_h(1), ref_vals(5), 10 * eps, + "rotmg: param(1) is off"); + EXPECT_NEAR_KK_REL(param_h(2), ref_vals(6), 10 * eps, + "rotmg: param(2) is off"); + EXPECT_NEAR_KK_REL(param_h(3), ref_vals(7), 10 * eps, + "rotmg: param(3) is off"); + EXPECT_NEAR_KK_REL(param_h(4), ref_vals(8), 10 * eps, + "rotmg: param(4) is off"); +} + +template +void set_rotmg_input_ref_vals(const int test_case, View0& d1, View0& d2, + View0& x1, View0& y1, PView& param, + RView& ref_vals) { + constexpr double gamma = 4096; + Kokkos::deep_copy(param, 0.0); + switch (test_case) { + case 0: + Kokkos::deep_copy(d1, 0.1); + Kokkos::deep_copy(d2, 0.3); + Kokkos::deep_copy(x1, 1.2); + Kokkos::deep_copy(y1, 0.2); + + ref_vals(0) = 12.0 / 130.0; + ref_vals(1) = 36.0 / 130.0; + ref_vals(2) = 1.3; + ref_vals(3) = 0.2; + ref_vals(4) = 0.0; + ref_vals(5) = 0.0; + ref_vals(6) = -1.0 / 6.0; + ref_vals(7) = 0.5; + ref_vals(8) = 0.0; + break; + case 1: + Kokkos::deep_copy(d1, 0.7); + Kokkos::deep_copy(d2, 0.2); + Kokkos::deep_copy(x1, 0.6); + Kokkos::deep_copy(y1, 4.2); + + ref_vals(0) = 14.0 / 75.0; + ref_vals(1) = 49.0 / 75.0; + ref_vals(2) = 4.5; + ref_vals(3) = 4.2; + ref_vals(4) = 1.0; + ref_vals(5) = 0.5; + ref_vals(6) = 0.0; + ref_vals(7) = 0.0; + ref_vals(8) = 1.0 / 7.0; + break; + case 2: + Kokkos::deep_copy(d1, 0.0); + Kokkos::deep_copy(d2, 0.0); + Kokkos::deep_copy(x1, 0.0); + Kokkos::deep_copy(y1, 0.0); + + ref_vals(0) = 0.0; + ref_vals(1) = 0.0; + ref_vals(2) = 0.0; + ref_vals(3) = 0.0; + ref_vals(4) = -2.0; + ref_vals(5) = 0.0; + ref_vals(6) = 0.0; + ref_vals(7) = 0.0; + ref_vals(8) = 0.0; + break; + case 3: + Kokkos::deep_copy(d1, 4.0); + Kokkos::deep_copy(d2, -1.0); + Kokkos::deep_copy(x1, 2.0); + Kokkos::deep_copy(y1, 4.0); + + ref_vals(0) = 0.0; + ref_vals(1) = 0.0; + ref_vals(2) = 0.0; + ref_vals(3) = 4.0; + ref_vals(4) = -1.0; + ref_vals(5) = 0.0; + ref_vals(6) = 0.0; + ref_vals(7) = 0.0; + ref_vals(8) = 0.0; + break; + case 4: + Kokkos::deep_copy(d1, 6.0e-10); + Kokkos::deep_copy(d2, 2.0e-2); + Kokkos::deep_copy(x1, 1.0e5); + Kokkos::deep_copy(y1, 10.0); + + ref_vals(0) = 45.0e-11 * gamma * gamma; + ref_vals(1) = 15.0e-3; + ref_vals(2) = 4.0e5 / (3 * gamma); + ref_vals(3) = 10.0; + ref_vals(4) = -1.0; + ref_vals(5) = 1.0 / gamma; + ref_vals(6) = -1.0e-4; + ref_vals(7) = 1.0e4 / (3 * gamma); + ref_vals(8) = 1.0; + break; + case 5: + Kokkos::deep_copy(d1, 4.0e10); + Kokkos::deep_copy(d2, 2.0e-2); + Kokkos::deep_copy(x1, 1.0e-5); + Kokkos::deep_copy(y1, 10.0); + + ref_vals(0) = 4.0e10 / (1.5 * gamma * gamma); + ref_vals(1) = 2.0e-2 / 1.5; + ref_vals(2) = 6144.0e-5; + ref_vals(3) = 10.0; + ref_vals(4) = -1.0; + ref_vals(5) = 4096.0; + ref_vals(6) = -1.0e6; + ref_vals(7) = 5.0e-7 * gamma; + ref_vals(8) = 1.0; + break; + case 6: + Kokkos::deep_copy(d1, 2.0e-10); + Kokkos::deep_copy(d2, 4.0e-2); + Kokkos::deep_copy(x1, 1.0e5); + Kokkos::deep_copy(y1, 10.0); + + ref_vals(0) = 4.0 / 150.0; + ref_vals(1) = (2.0e-10 / 1.5) * (gamma * gamma); + ref_vals(2) = 15.0; + ref_vals(3) = 10.0; + ref_vals(4) = -1.0; + ref_vals(5) = 5.0e-5; + ref_vals(6) = -1.0 / gamma; + ref_vals(7) = 1.0; + ref_vals(8) = 1.0e4 / gamma; + break; + case 7: + Kokkos::deep_copy(d1, 2.0e10); + Kokkos::deep_copy(d2, 4.0e-2); + Kokkos::deep_copy(x1, 1.0e-5); + Kokkos::deep_copy(y1, 10.0); + + ref_vals(0) = 4.0 / 150.0; + ref_vals(1) = 2.0e10 / (1.5 * gamma * gamma); + ref_vals(2) = 15.0; + ref_vals(3) = 10.0; + ref_vals(4) = -1.0; + ref_vals(5) = 5.0e5; + ref_vals(6) = -4096.0; + ref_vals(7) = 1.0; + ref_vals(8) = 4096.0e-6; + break; + case 8: + Kokkos::deep_copy(d1, 4.0); + Kokkos::deep_copy(d2, -2.0); + Kokkos::deep_copy(x1, 8.0); + Kokkos::deep_copy(y1, 4.0); + + ref_vals(0) = 32.0 / 7.0; + ref_vals(1) = -16.0 / 7.0; + ref_vals(2) = 7.0; + ref_vals(3) = 4.0; + ref_vals(4) = 0.0; + ref_vals(5) = 0.0; + ref_vals(6) = -0.5; + ref_vals(7) = -0.25; + ref_vals(8) = 0.0; + break; + default: + throw std::runtime_error("rotmg test: test case unrecognized!"); + break; + } +} +} // namespace Test + +template +int test_rotmg() { + Kokkos::View> + d1("d1"), d2("d2"), x1("x1"), y1("y1"); + Kokkos::View> + param("param"); + Kokkos::View ref_vals( + "reference values"); + + constexpr int num_test_cases = 9; + for (int test_case = 0; test_case < num_test_cases; ++test_case) { + Test::set_rotmg_input_ref_vals(test_case, d1, d2, x1, y1, param, ref_vals); + Test::test_rotmg_impl(d1, d2, x1, y1, param, ref_vals); + } + + return 1; +} + +#define KOKKOSKERNELS_EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ + TEST_F(TestCategory, rotmg##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::Test::rotg"); \ + test_rotmg(); \ + Kokkos::Profiling::popRegion(); \ + } + +#define NO_TEST_COMPLEX + +#include + +#undef KOKKOSKERNELS_EXECUTE_TEST +#undef NO_TEST_COMPLEX diff --git a/cmake/kokkoskernels_eti_floats.cmake b/cmake/kokkoskernels_eti_floats.cmake index 3448874336..bb89bd333e 100644 --- a/cmake/kokkoskernels_eti_floats.cmake +++ b/cmake/kokkoskernels_eti_floats.cmake @@ -32,6 +32,9 @@ KOKKOSKERNELS_ADD_OPTION( "Whether to pre instantiate kernels for the scalar type Kokkos::Experimental::bhalf_t. Disabling this may increase build times. Default: OFF" ) +SET(REAL_FLOATS + FLOAT + DOUBLE) SET(FLOATS FLOAT DOUBLE From a44908a1737c39668b7e2628d62a8fc684a872ea Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Sun, 9 Oct 2022 17:37:59 -0600 Subject: [PATCH 117/226] ROTG: fixing interface to make it more uniform with rest of BLAS change interface from references to Kokkos::View, still need to check that the TLPs are working fine though... --- blas/CMakeLists.txt | 2 +- blas/impl/KokkosBlas1_rotg_impl.hpp | 91 ++- blas/impl/KokkosBlas1_rotg_spec.hpp | 70 +- blas/src/KokkosBlas1_rotg.hpp | 39 +- blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp | 162 ++++- blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp | 675 +++++++++++++----- blas/unit_test/Test_Blas1_rotg.hpp | 35 +- 7 files changed, 784 insertions(+), 290 deletions(-) diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt index 5f632ce497..03714bc71d 100644 --- a/blas/CMakeLists.txt +++ b/blas/CMakeLists.txt @@ -252,7 +252,7 @@ KOKKOSKERNELS_GENERATE_ETI(Blas1_rotg rotg COMPONENTS blas HEADER_LIST ETI_HEADERS SOURCE_LIST SOURCES - TYPE_LISTS FLOATS DEVICES + TYPE_LISTS FLOATS LAYOUTS DEVICES ) KOKKOSKERNELS_GENERATE_ETI(Blas2_gemv gemv diff --git a/blas/impl/KokkosBlas1_rotg_impl.hpp b/blas/impl/KokkosBlas1_rotg_impl.hpp index 7b2d8d0e2b..34f5a2fac6 100644 --- a/blas/impl/KokkosBlas1_rotg_impl.hpp +++ b/blas/impl/KokkosBlas1_rotg_impl.hpp @@ -51,69 +51,94 @@ namespace KokkosBlas { namespace Impl { -/// \brief Compute Givens rotation coefficients. -template ::is_complex, bool>::type = true> -void Rotg_Invoke(Scalar& a, Scalar& b, Scalar& c, Scalar& s) { +KOKKOS_INLINE_FUNCTION void rotg_impl(Scalar* a, Scalar* b, Magnitude* c, + Scalar* s) { const Scalar one = Kokkos::ArithTraits::one(); const Scalar zero = Kokkos::ArithTraits::zero(); - const Scalar numerical_scaling = Kokkos::abs(a) + Kokkos::abs(b); + const Scalar numerical_scaling = Kokkos::abs(*a) + Kokkos::abs(*b); if (numerical_scaling == zero) { - c = one; - s = zero; - a = zero; - b = zero; + *c = one; + *s = zero; + *a = zero; + *b = zero; } else { - const Scalar scaled_a = a / numerical_scaling; - const Scalar scaled_b = b / numerical_scaling; + const Scalar scaled_a = *a / numerical_scaling; + const Scalar scaled_b = *b / numerical_scaling; Scalar norm = Kokkos::sqrt(scaled_a * scaled_a + scaled_b * scaled_b) * numerical_scaling; - Scalar sign = Kokkos::abs(a) > Kokkos::abs(b) ? a : b; + Scalar sign = Kokkos::abs(*a) > Kokkos::abs(*b) ? *a : *b; norm = Kokkos::copysign(norm, sign); - c = a / norm; - s = b / norm; + *c = *a / norm; + *s = *b / norm; Scalar z = one; - if (Kokkos::abs(a) > Kokkos::abs(b)) { - z = s; + if (Kokkos::abs(*a) > Kokkos::abs(*b)) { + z = *s; } - if ((Kokkos::abs(b) >= Kokkos::abs(a)) && (c != zero)) { - z = one / c; + if ((Kokkos::abs(*b) >= Kokkos::abs(*a)) && (*c != zero)) { + z = one / *c; } - a = norm; - b = z; + *a = norm; + *b = z; } } -template ::is_complex, bool>::type = true> -void Rotg_Invoke(Scalar& a, Scalar& b, - typename Kokkos::ArithTraits::mag_type& c, Scalar& s) { +KOKKOS_INLINE_FUNCTION void rotg_impl(Scalar* a, Scalar* b, Magnitude* c, + Scalar* s) { using mag_type = typename Kokkos::ArithTraits::mag_type; const Scalar one = Kokkos::ArithTraits::one(); const Scalar zero = Kokkos::ArithTraits::zero(); const mag_type mag_zero = Kokkos::ArithTraits::zero(); - const mag_type numerical_scaling = Kokkos::abs(a) + Kokkos::abs(b); - if (Kokkos::abs(a) == zero) { - c = mag_zero; - s = one; - a = b; + const mag_type numerical_scaling = Kokkos::abs(*a) + Kokkos::abs(*b); + if (Kokkos::abs(*a) == zero) { + *c = mag_zero; + *s = one; + *a = *b; } else { - const Scalar scaled_a = Kokkos::abs(a / numerical_scaling); - const Scalar scaled_b = Kokkos::abs(b / numerical_scaling); + const Scalar scaled_a = Kokkos::abs(*a / numerical_scaling); + const Scalar scaled_b = Kokkos::abs(*b / numerical_scaling); mag_type norm = Kokkos::abs(Kokkos::sqrt(scaled_a * scaled_a + scaled_b * scaled_b)) * numerical_scaling; - Scalar unit_a = a / Kokkos::abs(a); - c = Kokkos::abs(a) / norm; - s = unit_a * Kokkos::conj(b) / norm; - a = unit_a * norm; + Scalar unit_a = *a / Kokkos::abs(*a); + *c = Kokkos::abs(*a) / norm; + *s = unit_a * Kokkos::conj(*b) / norm; + *a = unit_a * norm; + } +} + +template +struct rotg_functor { + SViewType a, b; + MViewType c; + SViewType s; + + rotg_functor(SViewType const& a_, SViewType const& b_, MViewType const& c_, + SViewType const& s_) + : a(a_), b(b_), c(c_), s(s_) {} + + KOKKOS_INLINE_FUNCTION + void operator()(int const) const { + rotg_impl(a.data(), b.data(), c.data(), s.data()); } +}; + +/// \brief Compute Givens rotation coefficients. +template +void Rotg_Invoke(ExecutionSpace const& space, SViewType const& a, + SViewType const& b, MViewType const& c, SViewType const& s) { + Kokkos::RangePolicy rotg_policy(space, 0, 1); + rotg_functor rotg_func(a, b, c, s); + Kokkos::parallel_for("KokkosBlas::rotg", rotg_policy, rotg_func); } } // namespace Impl diff --git a/blas/impl/KokkosBlas1_rotg_spec.hpp b/blas/impl/KokkosBlas1_rotg_spec.hpp index f0b5d25ce6..fb2c5bac91 100644 --- a/blas/impl/KokkosBlas1_rotg_spec.hpp +++ b/blas/impl/KokkosBlas1_rotg_spec.hpp @@ -56,7 +56,7 @@ namespace KokkosBlas { namespace Impl { // Specialization struct which defines whether a specialization exists -template +template struct rotg_eti_spec_avail { enum : bool { value = false }; }; @@ -70,10 +70,16 @@ struct rotg_eti_spec_avail { // We may spread out definitions (see _INST macro below) across one or // more .cpp files. // -#define KOKKOSBLAS1_ROTG_ETI_SPEC_AVAIL(SCALAR, EXECSPACE, MEMSPACE) \ - template <> \ - struct rotg_eti_spec_avail { \ - enum : bool { value = true }; \ +#define KOKKOSBLAS1_ROTG_ETI_SPEC_AVAIL(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ + template <> \ + struct rotg_eti_spec_avail< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View::mag_type, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ }; // Include the actual specialization declarations @@ -84,38 +90,38 @@ namespace KokkosBlas { namespace Impl { // Unification layer -template ::value, + rotg_tpl_spec_avail::value, bool eti_spec_avail = - rotg_eti_spec_avail::value> + rotg_eti_spec_avail::value> struct Rotg { - static void rotg(Scalar& a, Scalar& b, - typename Kokkos::ArithTraits::mag_type& c, - Scalar& s); + static void rotg(ExecutionSpace const& space, SViewType const& a, + SViewType const& b, MViewType const& c, SViewType const& s); }; #if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY //! Full specialization of Rotg. -template -struct Rotg +struct Rotg { - static void rotg(Scalar& a, Scalar& b, - typename Kokkos::ArithTraits::mag_type& c, - Scalar& s) { + static void rotg(ExecutionSpace const& space, SViewType const& a, + SViewType const& b, MViewType const& c, SViewType const& s) { Kokkos::Profiling::pushRegion(KOKKOSKERNELS_IMPL_COMPILE_LIBRARY ? "KokkosBlas::rotg[ETI]" : "KokkosBlas::rotg[noETI]"); #ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION if (KOKKOSKERNELS_IMPL_COMPILE_LIBRARY) - printf("KokkosBlas1::rotg<> ETI specialization for < %s >\n", - typeid(Scalar).name()); + printf("KokkosBlas1::rotg<> ETI specialization for < %s, %s, %s >\n", + typeid(ExecutionSpace).name(), typeid(SViewType).name(), + typeid(MViewType).name()); else { - printf("KokkosBlas1::rotg<> non-ETI specialization for < %s >\n", - typeid(Scalar).name()); + printf("KokkosBlas1::rotg<> non-ETI specialization for < %s, %s, %s >\n", + typeid(ExecutionSpace).name(), typeid(SViewType).name(), + typeid(MViewType).name()); } #endif - Rotg_Invoke(a, b, c, s); + Rotg_Invoke(space, a, b, c, s); Kokkos::Profiling::popRegion(); } }; @@ -131,16 +137,30 @@ struct Rotg; +#define KOKKOSBLAS1_ROTG_ETI_SPEC_DECL(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ + extern template struct Rotg< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View::mag_type, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + false, true>; // // Macro for definition of full specialization of // KokkosBlas::Impl::Rotg. This is NOT for users!!! We // use this macro in one or more .cpp files in this directory. // -#define KOKKOSBLAS1_ROTG_ETI_SPEC_INST(SCALAR, EXECSPACE, MEMSPACE) \ - template struct Rotg; +#define KOKKOSBLAS1_ROTG_ETI_SPEC_INST(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ + template struct Rotg< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View::mag_type, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + false, true>; #include #include diff --git a/blas/src/KokkosBlas1_rotg.hpp b/blas/src/KokkosBlas1_rotg.hpp index 1a2f12a297..4d70a8a8be 100644 --- a/blas/src/KokkosBlas1_rotg.hpp +++ b/blas/src/KokkosBlas1_rotg.hpp @@ -58,12 +58,41 @@ namespace KokkosBlas { /// rotated value \param b [in/out] on input one of the values to rotate, on /// output the rotated value \param c [out] cosine value associated with the /// rotation \param s [out] sine value associated with the rotation -template -void rotg(Scalar& a, Scalar& b, - typename Kokkos::ArithTraits::mag_type& c, Scalar& s) { +template +void rotg(execution_space const& space, SViewType const& a, SViewType const& b, + MViewType const& c, SViewType const& s) { + static_assert(SViewType::rank == 0, + "rotg: the inputs need to be rank 0 views"); + static_assert(MViewType::rank == 0, + "rotg: the inputs need to be rank 0 views"); + static_assert( + !Kokkos::ArithTraits::is_complex); + static_assert( + Kokkos::SpaceAccessibility::accessible, + "rotg: execution_space cannot access data in SViewType"); + static_assert( + Kokkos::SpaceAccessibility::accessible, + "rotg: execution_space cannot access data in MViewType"); + + using SView_Internal = Kokkos::View< + typename SViewType::value_type, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + Kokkos::Device, + Kokkos::MemoryTraits>; + using MView_Internal = Kokkos::View< + typename MViewType::value_type, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + Kokkos::Device, + Kokkos::MemoryTraits>; + + SView_Internal a_(a), b_(b), s_(s); + MView_Internal c_(c); + Kokkos::Profiling::pushRegion("KokkosBlas::rotg"); - Impl::Rotg::rotg(a, b, c, s); + Impl::Rotg::rotg(space, a, b, + c, s); Kokkos::Profiling::popRegion(); } diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp index 6575953a78..4d1320c402 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp @@ -48,7 +48,7 @@ namespace KokkosBlas { namespace Impl { // Specialization struct which defines whether a specialization exists -template +template struct rotg_tpl_spec_avail { enum : bool { value = false }; }; @@ -60,53 +60,157 @@ namespace Impl { // Generic Host side BLAS (could be MKL or whatever) #ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS -#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(SCALAR, EXECSPACE) \ - template \ - struct rotg_tpl_spec_avail { \ - enum : bool { value = true }; \ +#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(SCALAR, LAYOUT, EXECSPACE, \ + MEMSPACE) \ + template <> \ + struct rotg_tpl_spec_avail< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View::mag_type, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ }; #ifdef KOKKOS_ENABLE_SERIAL -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(double, Kokkos::Serial) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(float, Kokkos::Serial) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::Serial) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::Serial) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutRight, + Kokkos::Serial, Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::LayoutLeft, + Kokkos::Serial, Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace) #endif #ifdef KOKKOS_ENABLE_OPENMP -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(double, Kokkos::OpenMP) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(float, Kokkos::OpenMP) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::OpenMP) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::OpenMP) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutRight, + Kokkos::OpenMP, Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::LayoutLeft, + Kokkos::OpenMP, Kokkos::HostSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace) #endif #endif // cuBLAS #ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS -#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(SCALAR, EXECSPACE) \ - template \ - struct rotg_tpl_spec_avail { \ - enum : bool { value = true }; \ +#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(SCALAR, LAYOUT, EXECSPACE, \ + MEMSPACE) \ + template <> \ + struct rotg_tpl_spec_avail< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View::mag_type, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ }; -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::Cuda) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::Cuda) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, Kokkos::Cuda) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, Kokkos::Cuda) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutRight, + Kokkos::Cuda, Kokkos::CudaSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace) + +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutRight, + Kokkos::Cuda, Kokkos::CudaUVMSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace) #endif // rocBLAS #ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS -#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(SCALAR, EXECSPACE) \ - template \ - struct rotg_tpl_spec_avail { \ - enum : bool { value = true }; \ +#define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(SCALAR, LAYOUT, EXECSPACE, \ + MEMSPACE) \ + template <> \ + struct rotg_tpl_spec_avail< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View::mag_type, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ }; -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::HIP) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::HIP) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, Kokkos::HIP) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, Kokkos::HIP) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutRight, + Kokkos::HIP, Kokkos::HIPSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace) #endif } // namespace Impl diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp index be91b5997b..7847abe6ec 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp @@ -67,84 +67,184 @@ inline void rotg_print_specialization() { namespace KokkosBlas { namespace Impl { -#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(EXECSPACE, ETI_SPEC_AVAIL) \ - template \ - struct Rotg { \ - static void rotg(double& a, double& b, double& c, double& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,double]"); \ - HostBlas::rotg(&a, &b, &c, &s); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const, SViewType const& a, SViewType const& b, \ + MViewType const& c, SViewType const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,double]"); \ + HostBlas::rotg(a.data(), b.data(), c.data(), s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ }; -#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(EXECSPACE, ETI_SPEC_AVAIL) \ - template \ - struct Rotg { \ - static void rotg(float& a, float& b, float& c, float& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,float]"); \ - HostBlas::rotg(&a, &b, &c, &s); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const, SViewType const& a, SViewType const& b, \ + MViewType const& c, SViewType const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,float]"); \ + HostBlas::rotg(a.data(), b.data(), c.data(), s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ }; -#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(EXECSPACE, ETI_SPEC_AVAIL) \ - template \ - struct Rotg, EXECSPACE, MEMSPACE, true, \ - ETI_SPEC_AVAIL> { \ - static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ - double& c, Kokkos::complex& s) { \ - Kokkos::Profiling::pushRegion( \ - "KokkosBlas::rotg[TPL_BLAS,complex]"); \ - HostBlas >::rotg( \ - reinterpret_cast*>(&a), \ - reinterpret_cast*>(&b), &c, \ - reinterpret_cast*>(&s)); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg< \ + EXECSPACE, \ + Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const, SViewType const& a, SViewType const& b, \ + MViewType const& c, SViewType const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::rotg[TPL_BLAS,complex]"); \ + HostBlas>::rotg( \ + reinterpret_cast*>(a.data()), \ + reinterpret_cast*>(b.data()), c.data(), \ + reinterpret_cast*>(s.data())); \ + Kokkos::Profiling::popRegion(); \ + } \ }; -#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(EXECSPACE, ETI_SPEC_AVAIL) \ - template \ - struct Rotg, EXECSPACE, MEMSPACE, true, \ - ETI_SPEC_AVAIL> { \ - static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ - float& c, Kokkos::complex& s) { \ - Kokkos::Profiling::pushRegion( \ - "KokkosBlas::rotg[TPL_BLAS,complex]"); \ - HostBlas >::rotg( \ - reinterpret_cast*>(&a), \ - reinterpret_cast*>(&b), &c, \ - reinterpret_cast*>(&s)); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const, SViewType const& a, SViewType const& b, \ + MViewType const& c, SViewType const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::rotg[TPL_BLAS,complex]"); \ + HostBlas>::rotg( \ + reinterpret_cast*>(a.data()), \ + reinterpret_cast*>(b.data()), c.data(), \ + reinterpret_cast*>(s.data())); \ + Kokkos::Profiling::popRegion(); \ + } \ }; #ifdef KOKKOS_ENABLE_SERIAL -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, true) -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, false) - -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, true) -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, false) - -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, true) -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, false) - -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, true) -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::Serial, false) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, false) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, false) + +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, false) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, false) + +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, false) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, false) + +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, false) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, false) #endif #ifdef KOKKOS_ENABLE_OPENMP -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, true) -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, false) - -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, true) -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, false) - -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, true) -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, false) - -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, true) -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, false) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, false) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, false) + +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, false) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, false) + +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, false) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, false) + +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, false) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, false) #endif } // namespace Impl @@ -159,79 +259,200 @@ KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::OpenMP, false) namespace KokkosBlas { namespace Impl { -#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ - template \ - struct Rotg { \ - static void rotg(double& a, double& b, double& c, double& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,double]"); \ - rotg_print_specialization(); \ - KokkosBlas::Impl::CudaBlasSingleton& singleton = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - cublasDrotg(singleton.handle, &a, &b, &c, &s); \ - Kokkos::Profiling::popRegion(); \ - } \ - }; - -#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ - template \ - struct Rotg { \ - static void rotg(float& a, float& b, float& c, float& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,float]"); \ - rotg_print_specialization(); \ - KokkosBlas::Impl::CudaBlasSingleton& singleton = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - cublasSrotg(singleton.handle, &a, &b, &c, &s); \ - Kokkos::Profiling::popRegion(); \ - } \ - }; - -#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ - template \ - struct Rotg, EXECSPACE, MEMSPACE, true, \ - ETI_SPEC_AVAIL> { \ - static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ - double& c, Kokkos::complex& s) { \ - Kokkos::Profiling::pushRegion( \ - "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ - rotg_print_specialization, EXECSPACE>(); \ +#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const& space, SViewType const& a, \ + SViewType const& b, MViewType const& c, \ + SViewType const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,double]"); \ + rotg_print_specialization(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - cublasZrotg(singleton.handle, reinterpret_cast(&a), \ - reinterpret_cast(&b), &c, \ - reinterpret_cast(&s)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + cublasDrotg(singleton.handle, a.data(), b.data(), c.data(), s.data()); \ Kokkos::Profiling::popRegion(); \ } \ }; -#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ - template \ - struct Rotg, EXECSPACE, MEMSPACE, true, \ - ETI_SPEC_AVAIL> { \ - static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ - float& c, Kokkos::complex& s) { \ - Kokkos::Profiling::pushRegion( \ - "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ - rotg_print_specialization, EXECSPACE>(); \ - KokkosBlas::Impl::CudaBlasSingleton& singleton = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - cublasCrotg(singleton.handle, reinterpret_cast(&a), \ - reinterpret_cast(&b), &c, \ - reinterpret_cast(&s)); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const& space, SViewType const& a, \ + SViewType const& b, MViewType const& c, \ + SViewType const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,float]"); \ + rotg_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + cublasSrotg(singleton.handle, a.data(), b.data(), c.data(), s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ }; -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, true) -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, false) - -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, true) -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, false) +#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template \ + struct Rotg< \ + EXECSPACE, \ + Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewTypeKokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const& space, SViewType const& a, \ + SViewType const& b, MViewType const& c, \ + SViewType const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ + rotg_print_specialization, EXECSPACE>(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + cublasZrotg(singleton.handle, \ + reinterpret_cast(a.data()), \ + reinterpret_cast(b.data()), c.data(), \ + reinterpret_cast(s.data())); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, true) -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, false) +#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template \ + struct Rotg, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const& space, SViewType const& a, \ + SViewType const& b, MViewType const& c, \ + SViewType const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ + rotg_print_specialization, EXECSPACE>(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + cublasCrotg(singleton.handle, reinterpret_cast(a.data()), \ + reinterpret_cast(b.data()), c.data(), \ + reinterpret_cast(s.data())); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, true) -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, false) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) + +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) + +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) + +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) } // namespace Impl } // namespace KokkosBlas @@ -245,83 +466,173 @@ KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(Kokkos::Cuda, false) namespace KokkosBlas { namespace Impl { -#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ - template \ - struct Rotg { \ - static void rotg(double& a, double& b, double& c, double& s) { \ +#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const& space, SViewType const& a, \ + SViewType const& b, MViewType const& c, \ + SViewType const& s) { \ Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,double]"); \ rotg_print_specialization(); \ KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ - rocblas_drotg(singleton.handle, &a, &b, &c, &s)); \ + rocblasSetStream(singleton.handle, space.hip_stream())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_drotg( \ + singleton.handle, a.data(), b.data(), c.data(), s.data())); \ Kokkos::Profiling::popRegion(); \ } \ }; -#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ - template \ - struct Rotg { \ - static void rotg(float& a, float& b, float& c, float& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,float]"); \ - rotg_print_specialization(); \ - KokkosBlas::Impl::RocBlasSingleton& singleton = \ - KokkosBlas::Impl::RocBlasSingleton::singleton(); \ - KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ - rocblas_srotg(singleton.handle, &a, &b, &c, &s)); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const& space, SViewType const& a, \ + SViewType const& b, MViewType const& c, \ + SViewType const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,float]"); \ + rotg_print_specialization(); \ + KokkosBlas::Impl::RocBlasSingleton& singleton = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblasSetStream(singleton.handle, space.hip_stream())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_srotg( \ + singleton.handle, a.data(), b.data(), c.data(), s.data())); \ + Kokkos::Profiling::popRegion(); \ + } \ }; -#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ +#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ template \ - struct Rotg, EXECSPACE, MEMSPACE, true, \ - ETI_SPEC_AVAIL> { \ - static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ - double& c, Kokkos::complex& s) { \ + struct Rotg< \ + EXECSPACE, \ + Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const& space, SViewType const& a, \ + SViewType const& b, MViewType const& c, \ + SViewType const& s) { \ Kokkos::Profiling::pushRegion( \ "KokkosBlas::nrm1[TPL_ROCBLAS,complex]"); \ rotg_print_specialization, EXECSPACE>(); \ KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblasSetStream(singleton.handle, space.hip_stream())); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_zrotg( \ - singleton.handle, reinterpret_cast(&a), \ - reinterpret_cast(&b), &c, \ - reinterpret_cast(&s))); \ + singleton.handle, \ + reinterpret_cast(a.data()), \ + reinterpret_cast(b.data()), c.data(), \ + reinterpret_cast(s.data()))); \ Kokkos::Profiling::popRegion(); \ } \ }; -#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(EXECSPACE, ETI_SPEC_AVAIL) \ - template \ - struct Rotg, EXECSPACE, MEMSPACE, true, \ - ETI_SPEC_AVAIL> { \ - static void rotg(Kokkos::complex& a, Kokkos::complex& b, \ - float& c, Kokkos::complex& s) { \ - Kokkos::Profiling::pushRegion( \ - "KokkosBlas::nrm1[TPL_ROCBLAS,complex]"); \ - rotg_print_specialization, EXECSPACE>(); \ - KokkosBlas::Impl::RocBlasSingleton& singleton = \ - KokkosBlas::Impl::RocBlasSingleton::singleton(); \ - KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_crotg( \ - singleton.handle, reinterpret_cast(&a), \ - reinterpret_cast(&b), &c, \ - reinterpret_cast(&s))); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template \ + struct Rotg, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const& space, SViewType const& a, \ + SViewType const& b, MViewType const& c, \ + SViewType const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::nrm1[TPL_ROCBLAS,complex]"); \ + rotg_print_specialization, EXECSPACE>(); \ + KokkosBlas::Impl::RocBlasSingleton& singleton = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblasSetStream(singleton.handle, space.hip_stream())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_crotg( \ + singleton.handle, \ + reinterpret_cast(a.data()), \ + reinterpret_cast(b.data()), c.data(), \ + reinterpret_cast(s.data()))); \ + Kokkos::Profiling::popRegion(); \ + } \ }; -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, true) -KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, false) - -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, true) -KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, false) - -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, true) -KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, false) - -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, true) -KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::HIP, false) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, false) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, false) + +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, false) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, false) + +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, false) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, false) + +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, false) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, false) } // namespace Impl } // namespace KokkosBlas diff --git a/blas/unit_test/Test_Blas1_rotg.hpp b/blas/unit_test/Test_Blas1_rotg.hpp index 5e54ee671e..a09cba8f05 100644 --- a/blas/unit_test/Test_Blas1_rotg.hpp +++ b/blas/unit_test/Test_Blas1_rotg.hpp @@ -1,24 +1,27 @@ #include namespace Test { -template -void test_rotg_impl(const Scalar a_in, const Scalar b_in) { - using magnitude_type = typename Kokkos::ArithTraits::mag_type; - const magnitude_type eps = Kokkos::ArithTraits::eps(); - const Scalar zero = Kokkos::ArithTraits::zero(); +template +void test_rotg_impl(ExecSpace const& space, Scalar const a_in, Scalar const b_in) { + using magnitude_type = typename Kokkos::ArithTraits::mag_type; + using SViewType = Kokkos::View; + using MViewType = Kokkos::View; + + // const magnitude_type eps = Kokkos::ArithTraits::eps(); + // const Scalar zero = Kokkos::ArithTraits::zero(); // Initialize inputs/outputs - Scalar a = a_in; - Scalar b = b_in; - magnitude_type c = Kokkos::ArithTraits::zero(); - Scalar s = zero; + SViewType a("a"); Kokkos::deep_copy(a, a_in); + SViewType b("b"); Kokkos::deep_copy(b, b_in); + MViewType c("c"); + SViewType s("s"); - KokkosBlas::rotg(a, b, c, s); + KokkosBlas::rotg(space, a, b, c, s); // Check that a*c - b*s == 0 // and a == sqrt(a*a + b*b) - EXPECT_NEAR_KK(a_in * s - b_in * c, zero, 10 * eps); - EXPECT_NEAR_KK(Kokkos::sqrt(a_in * a_in + b_in * b_in), a, 10 * eps); + // EXPECT_NEAR_KK(a_in * s - b_in * c, zero, 10 * eps); + // EXPECT_NEAR_KK(Kokkos::sqrt(a_in * a_in + b_in * b_in), a, 10 * eps); } } // namespace Test @@ -28,9 +31,11 @@ int test_rotg() { const Scalar one = Kokkos::ArithTraits::one(); const Scalar two = one + one; - Test::test_rotg_impl(one, zero); - Test::test_rotg_impl(one / two, one / two); - Test::test_rotg_impl(2.1 * one, 1.3 * one); + ExecutionSpace space{}; + + Test::test_rotg_impl(space, one, zero); + Test::test_rotg_impl(space, one / two, one / two); + Test::test_rotg_impl(space, 2.1 * one, 1.3 * one); return 1; } From d6c559a12b45e5003b839305acf7bbc800c03745 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 12 Oct 2022 09:06:04 -0600 Subject: [PATCH 118/226] ROTG: applying clang-format to the test --- blas/unit_test/Test_Blas1_rotg.hpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/blas/unit_test/Test_Blas1_rotg.hpp b/blas/unit_test/Test_Blas1_rotg.hpp index a09cba8f05..601f63219d 100644 --- a/blas/unit_test/Test_Blas1_rotg.hpp +++ b/blas/unit_test/Test_Blas1_rotg.hpp @@ -2,7 +2,8 @@ namespace Test { template -void test_rotg_impl(ExecSpace const& space, Scalar const a_in, Scalar const b_in) { +void test_rotg_impl(ExecSpace const& space, Scalar const a_in, + Scalar const b_in) { using magnitude_type = typename Kokkos::ArithTraits::mag_type; using SViewType = Kokkos::View; using MViewType = Kokkos::View; @@ -11,8 +12,10 @@ void test_rotg_impl(ExecSpace const& space, Scalar const a_in, Scalar const b_in // const Scalar zero = Kokkos::ArithTraits::zero(); // Initialize inputs/outputs - SViewType a("a"); Kokkos::deep_copy(a, a_in); - SViewType b("b"); Kokkos::deep_copy(b, b_in); + SViewType a("a"); + Kokkos::deep_copy(a, a_in); + SViewType b("b"); + Kokkos::deep_copy(b, b_in); MViewType c("c"); SViewType s("s"); From 44f562cb3298dcc9148fb5c918c280e81fbe5f4d Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Mon, 26 Sep 2022 18:21:38 -0600 Subject: [PATCH 119/226] cm_test_all_sandia: updates and cleanup - Add gcc/8.3.1 to weaver (rhel8 queue option) - Cleanup: remove unused blake compiler, remove white --- scripts/cm_test_all_sandia | 107 ++++++++----------------------------- 1 file changed, 21 insertions(+), 86 deletions(-) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index 3bdb415918..8f2182da87 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -132,11 +132,6 @@ if [[ "$HOSTNAME" == inouye* ]]; then MACHINE=inouye fi -if [[ "$HOSTNAME" =~ (white|ride).* ]]; then - MACHINE=white - module load git -fi - if [[ "$HOSTNAME" =~ weaver.* ]]; then MACHINE=weaver source /etc/profile.d/modules.sh @@ -684,68 +679,13 @@ elif [ "$MACHINE" = "inouye" ]; then fi SPACK_HOST_ARCH="+a64fx" -elif [ "$MACHINE" = "white" ]; then - MODULE_ENVIRONMENT="source /etc/profile.d/modules.sh" - eval "$MODULE_ENVIRONMENT" - SKIP_HWLOC=True - export SLURM_TASKS_PER_NODE=32 - - BASE_MODULE_LIST="cmake/3.19.3,/" - IBM_MODULE_LIST="cmake/3.19.3,/xl/,gcc/7.2.0" - CUDA_MODULE_LIST="cmake/3.19.3,/,gcc/7.2.0,ibm/xl/16.1.1" - CUDA10_MODULE_LIST="cmake/3.19.3,/,gcc/7.4.0,ibm/xl/16.1.1" - - GCC72_MODULE_TPL_LIST="cmake/3.19.3,/,netlib/3.8.0/gcc/7.2.0" - GCC74_MODULE_TPL_LIST="cmake/3.19.3,/,openblas/0.3.4/gcc/7.4.0" - CUDA_MODULE_TPL_LIST="cmake/3.19.3,/,gcc/7.2.0,netlib/3.8.0/gcc/7.2.0" - CUDA10_MODULE_TPL_LIST="cmake/3.19.3,/,gcc/7.4.0,openblas/0.3.4/gcc/7.4.0" - IBM_MODULE_TPL_LIST="cmake/3.19.3,/xl/,gcc/7.2.0,netlib/3.8.0/ibm/xl/16.1.1" - - # Don't do Threads on white. - GCC_BUILD_LIST="OpenMP,Serial,OpenMP_Serial" - - # Don't run the IBM toolchain with CXX14 on white - # "ibm/16.1.1 $IBM_MODULE_LIST "Serial" xlC $IBM_WARNING_FLAGS" - if [ "$SPOT_CHECK" = "True" ]; then - # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/6.4.0 $BASE_MODULE_LIST "OpenMP_Serial" g++ $GCC_WARNING_FLAGS" - "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "cuda/9.2.88 $CUDA_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/10.1.105 $CUDA_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - ) - elif [ "$SPOT_CHECK_TPLS" = "True" ]; then - # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/7.2.0 $GCC72_MODULE_TPL_LIST "Serial,OpenMP" g++ $GCC_WARNING_FLAGS" - "gcc/7.4.0 $GCC74_MODULE_TPL_LIST "OpenMP" g++ $GCC_WARNING_FLAGS" - "cuda/9.2.88 $CUDA_MODULE_TPL_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/10.1.105 $CUDA10_MODULE_TPL_LIST "Cuda_Serial" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - ) - else - # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/5.4.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/6.4.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/9.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "ibm/16.1.1 $IBM_MODULE_LIST $IBM_BUILD_LIST xlC $IBM_WARNING_FLAGS" - "cuda/9.2.88 $CUDA_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/10.0.130 $CUDA10_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/10.1.105 $CUDA10_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - ) - fi - - if [ -z "$ARCH_FLAG" ]; then - ARCH_FLAG="--arch=Power8,Pascal60" - fi - SPACK_HOST_ARCH="+power8" - SPACK_CUDA_ARCH="+pascal60" - SPACK_CUDA_HOST_COMPILER="%gcc@7.2.0" elif [ "$MACHINE" = "weaver" ]; then MODULE_ENVIRONMENT="source /etc/profile.d/modules.sh" eval "$MODULE_ENVIRONMENT" SKIP_HWLOC=True +# used with rhel7W queue BASE_MODULE_LIST="cmake/3.19.3,/" - IBM_MODULE_LIST="cmake/3.19.3,/xl/,gcc/7.2.0" CUDA_MODULE_LIST="cmake/3.19.3,/,ibm/xl/16.1.1,gcc/7.2.0" CUDA10_MODULE_LIST="cmake/3.19.3,/,ibm/xl/16.1.1,gcc/7.4.0" @@ -754,25 +694,27 @@ elif [ "$MACHINE" = "weaver" ]; then GCC93_MODULE_TPL_LIST="cmake/3.19.3,/,openblas/0.3.20/gcc/9.3.0,gcc/9.3.0" CUDA_MODULE_TPL_LIST="cmake/3.19.3,/,gcc/7.2.0,netlib/3.8.0/gcc/7.2.0" CUDA10_MODULE_TPL_LIST="cmake/3.19.3,/,gcc/7.2.0,openblas/0.2.20/gcc/7.2.0" - # Cuda/11 modules available only on the dev queue (rhel8 OS); gcc/8.3.1 load by default - CUDA11_MODULE_LIST="cmake/3.21.2,/,openblas/0.3.18/gcc/8.3.1" + # Issues finding CUBLAS with cuda/10.1.243 module at configure # "Could NOT find TPLCUBLAS (missing: CUDA_CUBLAS_LIBRARIES)" # Once resolved add the compiler + modules below to the SPOT_CHECK_TPLS # "cuda/10.1.243 $CUDA10_MODULE_TPL_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" CLANG13_MODULE_TPL_LIST="cmake/3.21.2,/,openblas/0.3.20/gcc/9.3.0,cuda/10.1.243" +# used with rhel8 queue + BASE_MODULE_LIST="cmake/3.21.2,/" + # Cuda/11 modules available only on the dev queue (rhel8 OS); gcc/8.3.1 load by default + RHEL8_CUDA11_MODULE_LIST="cmake/3.21.2,/,openblas/0.3.18/gcc/8.3.1" + # Don't do Threads on weaver - GCC_BUILD_LIST="OpenMP,Serial,OpenMP_Serial" + GCC_IBM_BUILD_LIST="OpenMP,Serial,OpenMP_Serial" if [ "$SPOT_CHECK" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/6.4.0 $BASE_MODULE_LIST "OpenMP_Serial" g++ $GCC_WARNING_FLAGS" - "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "cuda/9.2.88 $CUDA_MODULE_LIST "Cuda_Serial" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + COMPILERS=("gcc/7.2.0 $BASE_MODULE_LIST $GCC_IBM_BUILD_LIST g++ $GCC_WARNING_FLAGS" "cuda/10.1.243 $CUDA10_MODULE_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/11.2.2 $CUDA11_MODULE_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "gcc/9.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "cuda/11.2.2 $RHEL8_CUDA11_MODULE_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + "gcc/9.3.0 $BASE_MODULE_LIST $GCC_IBM_BUILD_LIST g++ $GCC_WARNING_FLAGS" ) elif [ "$SPOT_CHECK_TPLS" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) @@ -785,18 +727,16 @@ elif [ "$MACHINE" = "weaver" ]; then ) else # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/6.4.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/7.4.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/9.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "ibm/16.1.1 $IBM_MODULE_LIST $IBM_BUILD_LIST xlC $IBM_WARNING_FLAGS" - "cuda/9.2.88 $CUDA_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + COMPILERS=("gcc/7.2.0 $BASE_MODULE_LIST $GCC_IBM_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/7.4.0 $BASE_MODULE_LIST $GCC_IBM_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/8.3.1 $RHEL8_BASE_MODULE_LIST $GCC_IBM_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/9.3.0 $BASE_MODULE_LIST $GCC_IBM_BUILD_LIST g++ $GCC_WARNING_FLAGS" "cuda/10.0.130 $CUDA10_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/10.1.105 $CUDA10_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/10.1.243 $CUDA10_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/10.2.089 $CUDA10_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/10.2.2 $CUDA11_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/11.2.2 $CUDA11_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + "cuda/11.2.2 $RHEL8_CUDA11_MODULE_LIST $CUDA_IBM_BUILD_LIST ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + "clang/13.0.0 $CLANG13_MODULE_TPL_LIST $CUDA_IBM_BUILD_LIST clang++ $CUDA_WARNING_FLAGS" ) fi @@ -896,20 +836,15 @@ elif [ "$MACHINE" = "blake" ]; then # Format: (compiler module-list build-list exe-name warning-flag) # TODO: Failing toolchains: #"pgi/18.7.0 $BASE_MODULE_LIST $GCC_BUILD_LIST pgc++ $PGI_WARNING_FLAGS" - COMPILERS=("intel/18.1.163 $BASE_MODULE_LIST_INTEL "OpenMP,Threads" icpc $INTEL_WARNING_FLAGS" - "gcc/7.2.0 $GCC72_MODULE_TPL_LIST "OpenMP_Serial" g++ $GCC_WARNING_FLAGS" + COMPILERS=("gcc/7.2.0 $GCC72_MODULE_TPL_LIST "OpenMP_Serial" g++ $GCC_WARNING_FLAGS" "intel/19.5.281 $BASE_MODULE_LIST_INTEL "OpenMP,Threads" icpc $INTEL_WARNING_FLAGS" "gcc/10.2.0 $GCC102_MODULE_TPL_LIST "OpenMP_Serial" g++ $GCC_WARNING_FLAGS" ) else - COMPILERS=("intel/17.4.196 $BASE_MODULE_LIST_INTEL $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "intel/18.1.163 $BASE_MODULE_LIST_INTEL $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "intel/19.1.144 $BASE_MODULE_LIST_INTEL $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + COMPILERS=("intel/19.1.144 $BASE_MODULE_LIST_INTEL $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" "intel/19.3.199 $BASE_MODULE_LIST_INTEL $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" "intel/19.5.281 $BASE_MODULE_LIST_INTEL $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" "intel/2021.1.1 $BASE_MODULE_LIST_ONEAPI $INTEL_BUILD_LIST icpx $ONEAPI_WARNING_FLAGS" - "gcc/5.5.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/6.4.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" "gcc/8.1.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" "gcc/8.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" @@ -1254,7 +1189,7 @@ setup_env() { if [[ "${SPOT_CHECK_TPLS}" = "True" ]]; then # Some machines will require explicitly setting include dirs and libs - if ([[ "$MACHINE" = white* ]] || [[ "$MACHINE" = weaver* ]] || [[ "$MACHINE" = blake* ]] || [[ "$MACHINE" = sogpu* ]]) && [[ "$mod" = openblas* ]]; then + if ([[ "$MACHINE" = weaver* ]] || [[ "$MACHINE" = blake* ]] || [[ "$MACHINE" = sogpu* ]]) && [[ "$mod" = openblas* ]]; then BLAS_LIBRARY_DIRS="${OPENBLAS_ROOT}/lib" LAPACK_LIBRARY_DIRS="${OPENBLAS_ROOT}/lib" # BLAS_LIBRARIES="openblas" @@ -1265,7 +1200,7 @@ setup_env() { KOKKOSKERNELS_EXTRA_LINKER_FLAGS_CMD="--extra-linker-flags=-lgfortran,-lm" echo "TPL PATHS: KOKKOSKERNELS_TPL_PATH_CMD=$KOKKOSKERNELS_TPL_PATH_CMD" echo "TPL LIBS: KOKKOSKERNELS_TPL_LIBS_CMD=$KOKKOSKERNELS_TPL_LIBS_CMD" - elif ([[ "$MACHINE" = white* ]] || [[ "$MACHINE" = weaver* ]]) && [[ "$mod" = netlib* ]]; then + elif ([[ "$MACHINE" = weaver* ]]) && [[ "$mod" = netlib* ]]; then BLAS_LIBRARY_DIRS="${BLAS_ROOT}/lib" LAPACK_LIBRARY_DIRS="${BLAS_ROOT}/lib" BLAS_LIBRARIES="blas" From 7c10721b9ef9a8886d405d969e4a7e844ef61c85 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Thu, 13 Oct 2022 15:16:51 -0600 Subject: [PATCH 120/226] cm_test_all_sandia: fix base module list prepend the rhel8 base module list variable with 'RHEL8_' --- scripts/cm_test_all_sandia | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index 8f2182da87..f52d5ac150 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -702,7 +702,7 @@ elif [ "$MACHINE" = "weaver" ]; then CLANG13_MODULE_TPL_LIST="cmake/3.21.2,/,openblas/0.3.20/gcc/9.3.0,cuda/10.1.243" # used with rhel8 queue - BASE_MODULE_LIST="cmake/3.21.2,/" + RHEL8_BASE_MODULE_LIST="cmake/3.21.2,/" # Cuda/11 modules available only on the dev queue (rhel8 OS); gcc/8.3.1 load by default RHEL8_CUDA11_MODULE_LIST="cmake/3.21.2,/,openblas/0.3.18/gcc/8.3.1" From 8a6cf39031418482b96fb09356e1521d599fb88d Mon Sep 17 00:00:00 2001 From: Daniel Arndt Date: Mon, 17 Oct 2022 13:50:53 +0000 Subject: [PATCH 121/226] SYCL: Use KOKKOS_IMPL_DO_NOT_USE_PRINTF instead of printf in kernels --- sparse/impl/KokkosSparse_mdf_impl.hpp | 77 ++++++++++++++------------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/sparse/impl/KokkosSparse_mdf_impl.hpp b/sparse/impl/KokkosSparse_mdf_impl.hpp index 16e652d638..3a43766b96 100644 --- a/sparse/impl/KokkosSparse_mdf_impl.hpp +++ b/sparse/impl/KokkosSparse_mdf_impl.hpp @@ -153,12 +153,13 @@ struct MDF_discarded_fill_norm { KAS::abs(At.values(alphaIdx) * A.values(betaIdx)) * KAS::abs(At.values(alphaIdx) * A.values(betaIdx)); if (verbosity > 1) { - printf("Adding value A[%d,%d]=%f to discard norm of row %d\n", - int(At.graph.entries(alphaIdx)), - int(A.graph.entries(betaIdx)), - KAS::abs(At.values(alphaIdx) * A.values(betaIdx)) * - KAS::abs(At.values(alphaIdx) * A.values(betaIdx)), - int(rowIdx)); + KOKKOS_IMPL_DO_NOT_USE_PRINTF( + "Adding value A[%d,%d]=%f to discard norm of row %d\n", + int(At.graph.entries(alphaIdx)), + int(A.graph.entries(betaIdx)), + KAS::abs(At.values(alphaIdx) * A.values(betaIdx)) * + KAS::abs(At.values(alphaIdx) * A.values(betaIdx)), + int(rowIdx)); } } } @@ -166,8 +167,9 @@ struct MDF_discarded_fill_norm { } else if (fillRowIdx == rowIdx) { diag_val = At.values(alphaIdx); if (verbosity > 1) { - printf("Row %d diagonal value dected, values(%d)=%f\n", int(rowIdx), - int(alphaIdx), At.values(alphaIdx)); + KOKKOS_IMPL_DO_NOT_USE_PRINTF( + "Row %d diagonal value dected, values(%d)=%f\n", int(rowIdx), + int(alphaIdx), At.values(alphaIdx)); } } } @@ -179,7 +181,7 @@ struct MDF_discarded_fill_norm { if (verbosity > 0) { const ordinal_type degree = ordinal_type(A.graph.row_map(rowIdx + 1) - A.graph.row_map(rowIdx) - 1); - printf( + KOKKOS_IMPL_DO_NOT_USE_PRINTF( "Row %d has discarded fill of %f, deficiency of %d and degree %d\n", rowIdx, KAS::sqrt(discard_norm), deficiency(rowIdx), degree); } @@ -356,11 +358,11 @@ struct MDF_factorize_row { permutation_inv(permutation(selected_row_idx)) = selected_row_idx; if (verbosity > 0) { - printf("Permutation vector: { "); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("Permutation vector: { "); for (ordinal_type rowIdx = 0; rowIdx < A.numRows(); ++rowIdx) { - printf("%d ", permutation(rowIdx)); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%d ", permutation(rowIdx)); } - printf("}\n"); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("}\n"); } // Insert the upper part of the selected row in U @@ -381,25 +383,26 @@ struct MDF_factorize_row { row_mapU(factorization_step + 1) = U_entryIdx; if (verbosity > 0) { - printf("Diagonal values of row %d is %f\n", selected_row, diag); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("Diagonal values of row %d is %f\n", + selected_row, diag); } if (verbosity > 2) { - printf("U, row_map={ "); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("U, row_map={ "); for (ordinal_type rowIdx = 0; rowIdx < factorization_step + 1; ++rowIdx) { - printf("%d ", int(row_mapU(rowIdx))); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%d ", int(row_mapU(rowIdx))); } - printf("}, entries={ "); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("}, entries={ "); for (size_type entryIdx = row_mapU(0); entryIdx < row_mapU(factorization_step + 1); ++entryIdx) { - printf("%d ", int(entriesU(entryIdx))); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%d ", int(entriesU(entryIdx))); } - printf("}, values={ "); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("}, values={ "); for (size_type entryIdx = row_mapU(0); entryIdx < row_mapU(factorization_step + 1); ++entryIdx) { - printf("%f ", valuesU(entryIdx)); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%f ", valuesU(entryIdx)); } - printf("}\n"); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("}\n"); } // Insert the lower part of the selected column of A @@ -420,20 +423,21 @@ struct MDF_factorize_row { row_mapL(factorization_step + 1) = L_entryIdx; if (verbosity > 2) { - printf("L(%d), [row_map(%d), row_map(%d)[ = [%d, %d[, entries={ ", - int(factorization_step), int(factorization_step), - int(factorization_step + 1), int(row_mapL(factorization_step)), - int(row_mapL(factorization_step + 1))); + KOKKOS_IMPL_DO_NOT_USE_PRINTF( + "L(%d), [row_map(%d), row_map(%d)[ = [%d, %d[, entries={ ", + int(factorization_step), int(factorization_step), + int(factorization_step + 1), int(row_mapL(factorization_step)), + int(row_mapL(factorization_step + 1))); for (size_type entryIdx = row_mapL(factorization_step); entryIdx < row_mapL(factorization_step + 1); ++entryIdx) { - printf("%d ", int(entriesL(entryIdx))); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%d ", int(entriesL(entryIdx))); } - printf("}, values={ "); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("}, values={ "); for (size_type entryIdx = row_mapL(factorization_step); entryIdx < row_mapL(factorization_step + 1); ++entryIdx) { - printf("%f ", valuesL(entryIdx)); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%f ", valuesL(entryIdx)); } - printf("}\n"); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("}\n"); } // If this was the last row no need to update A and At! @@ -489,8 +493,9 @@ struct MDF_factorize_row { At.values(alphaIdx) * A.values(betaIdx) / diag_val; if (verbosity > 1) { - printf("A[%d, %d] -= %f\n", int(fillRowIdx), int(fillColIdx), - At.values(alphaIdx) * A.values(betaIdx) / diag_val); + KOKKOS_IMPL_DO_NOT_USE_PRINTF( + "A[%d, %d] -= %f\n", int(fillRowIdx), int(fillColIdx), + At.values(alphaIdx) * A.values(betaIdx) / diag_val); } } } @@ -508,16 +513,16 @@ struct MDF_factorize_row { } if (verbosity > 0) { - printf("New values in A: { "); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("New values in A: { "); for (size_type entryIdx = 0; entryIdx < A.nnz(); ++entryIdx) { - printf("%f ", A.values(entryIdx)); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%f ", A.values(entryIdx)); } - printf("}\n"); - printf("New values in At: { "); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("}\n"); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("New values in At: { "); for (size_type entryIdx = 0; entryIdx < At.nnz(); ++entryIdx) { - printf("%f ", At.values(entryIdx)); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%f ", At.values(entryIdx)); } - printf("}\n"); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("}\n"); } } // operator() From b6f2365a2c8c3bd932d84988cfa7dbde78a681d6 Mon Sep 17 00:00:00 2001 From: "Roscoe A. Bartlett" Date: Mon, 17 Oct 2022 15:38:49 -0600 Subject: [PATCH 122/226] KokkosKernels: Remove listing of undefined TPL deps (trilinos/Trilinos#11152) Updated TriBITS 'master' now catches undefined TPLs listed as dependencies of a TriBITS package. (Amazingly, classic TriBITS simply silently ignored these undefined TPLs. See tribits/CHANGELOG.md entry in TriBITSPub/TriBITS#530.) This works with older TriBITS and will be needed when TriBITS 'master' is snapshotted into Trilinos 'develop'. --- cmake/Dependencies.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index e8b1c6a5e2..4ce5a98dc0 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -1,6 +1,6 @@ TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( LIB_REQUIRED_PACKAGES KokkosCore KokkosContainers KokkosAlgorithms - LIB_OPTIONAL_TPLS quadmath MKL BLAS LAPACK CUSPARSE MAGMA METIS SuperLU Cholmod LAPACKE CBLAS ARMPL ROCBLAS ROCSPARSE CUBLAS + LIB_OPTIONAL_TPLS quadmath MKL BLAS LAPACK CUSPARSE METIS SuperLU Cholmod CUBLAS TEST_OPTIONAL_TPLS yaml-cpp ) # NOTE: If you update names in LIB_OPTIONAL_TPLS above, make sure to map those names in From ac65a17c4adcdbb1231c8358d96aa095b8edcf74 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Mon, 24 Oct 2022 11:21:34 -0600 Subject: [PATCH 123/226] docs: Fix RTD build paths --- docs/CMakeLists.txt | 7 +++++-- docs/Doxyfile.in | 5 ++++- docs/conf.py | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index 267c808a0e..40680b0705 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -11,9 +11,12 @@ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/conf.py DESTINATION ${CMAKE_CURRENT_BINARY file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/index.rst DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) # Find all public headers in KokkosKernels and Kokkos::kokkos -file(GLOB_RECURSE ${PROJECT_NAME}_PUBLIC_HEADERS ${PROJECT_SOURCE_DIR}/src/*.hpp ${KOKKOS_INCLUDE_DIR}/*.hpp) +file(GLOB_RECURSE ${PROJECT_NAME}_PUBLIC_HEADERS ${PROJECT_SOURCE_DIR}/sparse/src/*.hpp + ${PROJECT_SOURCE_DIR}/blas/src/*.hpp + ${PROJECT_SOURCE_DIR}/batched/dense/src/*.hpp + ${PROJECT_SOURCE_DIR}/batched/sparse/src/*.hpp + ${KOKKOS_INCLUDE_DIR}/*.hpp) -set(DOXYGEN_KOKKOSKERNELS_INPUT_DIR ${PROJECT_SOURCE_DIR}/src) set(DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/doxygen/) set(DOXYGEN_INDEX_FILE ${DOXYGEN_OUTPUT_DIR}/xml/index.xml) set(DOXYFILE_IN ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in) diff --git a/docs/Doxyfile.in b/docs/Doxyfile.in index 5ffa339622..5cb072a465 100644 --- a/docs/Doxyfile.in +++ b/docs/Doxyfile.in @@ -871,7 +871,10 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = "@DOXYGEN_KOKKOSKERNELS_INPUT_DIR@" +INPUT = @CMAKE_SOURCE_DIR@/sparse/src/ \ + @CMAKE_SOURCE_DIR@/blas/src/ \ + @CMAKE_SOURCE_DIR@/batched/dense/src/ \ + @CMAKE_SOURCE_DIR@/batched/sparse/src/ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses diff --git a/docs/conf.py b/docs/conf.py index f1678c649a..b4fd2bbcbc 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -19,7 +19,7 @@ def configureDoxyfile(input_dir, output_dir, doxyfile_in, doxyfile_out): with open(doxyfile_in, 'r') as file : filedata = file.read() - filedata = filedata.replace('@DOXYGEN_KOKKOSKERNELS_INPUT_DIR@', input_dir) + filedata = filedata.replace('@CMAKE_SOURCE_DIR@', input_dir) filedata = filedata.replace('@DOXYGEN_OUTPUT_DIR@', output_dir) with open(doxyfile_out, 'w') as file: From 50d812c0250f3c95f7b4b74fa47a114aa1b50d71 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Mon, 24 Oct 2022 11:21:54 -0600 Subject: [PATCH 124/226] docs: Fix build warnings --- docs/developer/apidocs/blas3.rst | 1 - docs/developer/apidocs/sparse.rst | 12 +++++++----- sparse/src/KokkosKernels_Handle.hpp | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/developer/apidocs/blas3.rst b/docs/developer/apidocs/blas3.rst index 810b28a5a3..3fa4e3e9c7 100644 --- a/docs/developer/apidocs/blas3.rst +++ b/docs/developer/apidocs/blas3.rst @@ -3,6 +3,5 @@ BLAS3 -- KokkosKernels blas3 interfaces gemm ---- -.. doxygenfunction:: KokkosBlas::gemm(const char transA, const char transB, AMat::const_value_type alpha, const AMat &a, const BMat &b, CMat::const_value_type beta, const CMat &c) .. doxygenfunction:: KokkosBlas::gemm(const char transA[], const char transB[], typename AViewType::const_value_type &alpha, const AViewType &A, const BViewType &B, typename CViewType::const_value_type &beta, const CViewType &C) .. doxygenfunction:: KokkosBlas::gemm(const typename CViewType::execution_space &space, const char transA[], const char transB[], typename AViewType::const_value_type &alpha, const AViewType &A, const BViewType &B, typename CViewType::const_value_type &beta, const CViewType &C) diff --git a/docs/developer/apidocs/sparse.rst b/docs/developer/apidocs/sparse.rst index 84ec48a519..463e00a733 100644 --- a/docs/developer/apidocs/sparse.rst +++ b/docs/developer/apidocs/sparse.rst @@ -8,11 +8,13 @@ crsmatrix spmv ---- -.. doxygenfunction:: KokkosSparse::spmv(KokkosKernels::Experimental::Controls, const char[], const AlphaType&, const AMatrix&, const XVector&, const BetaType&, const YVector&) -.. doxygenfunction:: KokkosSparse::spmv(KokkosKernels::Experimental::Controls, const char mode[], const AlphaType &alpha, const AMatrix &A, const XVector &x, const BetaType &beta, const YVector &y) -.. doxygenfunction:: KokkosSparse::spmv(KokkosKernels::Experimental::Controls controls, const char mode[], const AlphaType &alpha, const AMatrix &A, const XVector &x, const BetaType &beta, const YVector &y, const RANK_ONE) -.. doxygenfunction:: KokkosSparse::spmv(KokkosKernels::Experimental::Controls, const char mode[], const AlphaType &alpha, const AMatrix &A, const XVector &x, const BetaType &beta, const YVector &y, const RANK_TWO) -.. doxygenfunction:: KokkosSparse::spmv(const char mode[], const AlphaType &alpha, const AMatrix &A, const XVector &x, const BetaType &beta, const YVector &y) + +.. doxygenfunctions:: KokkosSparse::spmv(KokkosKernels::Experimental::Controls, const char[], const AlphaType&, const AMatrix&, const XVector&, const BetaType&, const YVector&) +.. doxygenfunctions:: KokkosSparse::spmv(KokkosKernels::Experimental::Controls controls, const char mode[], const AlphaType &alpha, const AMatrix &A, const XVector &x, const BetaType &beta, const YVector &y) +.. doxygenfunctions:: KokkosSparse::spmv(KokkosKernels::Experimental::Controls controls, const char mode[], const AlphaType &alpha, const AMatrix &A, const XVector &x, const BetaType &beta, const YVector &y, const RANK_ONE) +.. doxygenfunctions:: KokkosSparse::spmv(KokkosKernels::Experimental::Controls controls, const char mode[], const AlphaType &alpha, const AMatrix &A, const XVector &x, const BetaType &beta, const YVector &y, const RANK_TWO) +.. doxygenfunctions:: KokkosSparse::spmv(const char mode[], const AlphaType &alpha, const AMatrix &A, const XVector &x, const BetaType &beta, const YVector &y) + trsv ---- diff --git a/sparse/src/KokkosKernels_Handle.hpp b/sparse/src/KokkosKernels_Handle.hpp index 2aa587011b..a918dc61bf 100644 --- a/sparse/src/KokkosKernels_Handle.hpp +++ b/sparse/src/KokkosKernels_Handle.hpp @@ -444,7 +444,7 @@ class KokkosKernelsHandle { /** * \brief Sets whether to use dynamic scheduling or * not for those kernels where load-imbalances might occur. - * \input is_dynamic: true or false -> dynamic or static scheduling. + * @param is_dynamic: true or false -> dynamic or static scheduling.. */ void set_dynamic_scheduling(const bool is_dynamic) { this->use_dynamic_scheduling = is_dynamic; From e013a71bc1d1e4cde417ace47f90a4d08ef93328 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Mon, 24 Oct 2022 11:34:57 -0600 Subject: [PATCH 125/226] docs: Fix source path --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index b4fd2bbcbc..ce7385acad 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -50,7 +50,7 @@ def configureDoxyfile(input_dir, output_dir, doxyfile_in, doxyfile_out): if read_the_docs_build: cwd = os.getcwd() print(cwd) - input_dir = cwd + '/../src/' + input_dir = cwd + '/..' output_dir = cwd +'/doxygen/' doxyfile_in = cwd + '/Doxyfile.in' doxyfile_out = cwd + '/Doxyfile' From 71e6f7099b195b7006172dc6efa8b69ade8919b7 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Thu, 27 Oct 2022 08:27:12 -0600 Subject: [PATCH 126/226] ROTMG: fix TPLs builds for Intel and ARM The TPLs have their own slightly different way of implementing rotmg, the changes here are handling that by disabling ARMPL and losening the tolerance when running with MKL. Overall this is not a very big deal... --- .../tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp | 5 ++- blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp | 5 ++- blas/unit_test/Test_Blas1_rotmg.hpp | 44 ++++++++++++------- 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp index 372c5aeb2c..28a4a6b9d9 100644 --- a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp @@ -59,7 +59,8 @@ namespace KokkosBlas { namespace Impl { // Generic Host side BLAS (could be MKL or whatever) -#ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS +#if defined(KOKKOSKERNELS_ENABLE_TPL_BLAS) && \ + !defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) #define KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_BLAS(SCALAR, LAYOUT, EXEC_SPACE, \ MEM_SPACE) \ template <> \ @@ -96,7 +97,7 @@ KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutRight, KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutRight, Kokkos::OpenMP, Kokkos::HostSpace) #endif -#endif +#endif // KOKKOSKERNELS_ENABLE_TPL_BLAS // cuBLAS #ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS diff --git a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp index 72f64c32e5..0da3009d12 100644 --- a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp @@ -61,7 +61,8 @@ inline void rotmg_print_specialization() { } // namespace KokkosBlas // Generic Host side BLAS (could be MKL or whatever) -#ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS +#if defined(KOKKOSKERNELS_ENABLE_TPL_BLAS) && \ + !defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) #include "KokkosBlas_Host_tpl.hpp" namespace KokkosBlas { @@ -139,7 +140,7 @@ KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutRight, Kokkos::OpenMP, } // namespace Impl } // namespace KokkosBlas -#endif +#endif // KOKKOSKERNELS_ENABLE_TPL_BLAS // cuBLAS #ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS diff --git a/blas/unit_test/Test_Blas1_rotmg.hpp b/blas/unit_test/Test_Blas1_rotmg.hpp index 21c1316afc..45d02aeae6 100644 --- a/blas/unit_test/Test_Blas1_rotmg.hpp +++ b/blas/unit_test/Test_Blas1_rotmg.hpp @@ -12,34 +12,36 @@ void test_rotmg_impl(View0& d1, View0& d2, View0& x1, View0& y1, PView& param, KokkosBlas::rotmg(d1, d2, x1, y1_const, param); const scalar_type eps = Kokkos::ArithTraits::eps(); - auto d1_h = Kokkos::create_mirror_view(d1); + const scalar_type tol = +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL + 100 * + eps; // Guessing MKL implements sin/cos differently so need larger tol +#else + 10 * eps; +#endif + auto d1_h = Kokkos::create_mirror_view(d1); Kokkos::deep_copy(d1_h, d1); - EXPECT_NEAR_KK_REL(d1_h(), ref_vals(0), 10 * eps, "rotmg: d1 is off"); + EXPECT_NEAR_KK_REL(d1_h(), ref_vals(0), tol, "rotmg: d1 is off"); auto d2_h = Kokkos::create_mirror_view(d2); Kokkos::deep_copy(d2_h, d2); - EXPECT_NEAR_KK_REL(d2_h(), ref_vals(1), 10 * eps, "rotmg: d2 is off"); + EXPECT_NEAR_KK_REL(d2_h(), ref_vals(1), tol, "rotmg: d2 is off"); auto x1_h = Kokkos::create_mirror_view(x1); Kokkos::deep_copy(x1_h, x1); - EXPECT_NEAR_KK_REL(x1_h(), ref_vals(2), 10 * eps, "rotmg: x1 is off"); + EXPECT_NEAR_KK_REL(x1_h(), ref_vals(2), tol, "rotmg: x1 is off"); auto y1_h = Kokkos::create_mirror_view(y1_const); Kokkos::deep_copy(y1_h, y1_const); - EXPECT_NEAR_KK_REL(y1_h(), ref_vals(3), 10 * eps, "rotmg: y1 is off"); + EXPECT_NEAR_KK_REL(y1_h(), ref_vals(3), tol, "rotmg: y1 is off"); auto param_h = Kokkos::create_mirror_view(param); Kokkos::deep_copy(param_h, param); - EXPECT_NEAR_KK_REL(param_h(0), ref_vals(4), 10 * eps, - "rotmg: param(0) is off"); - EXPECT_NEAR_KK_REL(param_h(1), ref_vals(5), 10 * eps, - "rotmg: param(1) is off"); - EXPECT_NEAR_KK_REL(param_h(2), ref_vals(6), 10 * eps, - "rotmg: param(2) is off"); - EXPECT_NEAR_KK_REL(param_h(3), ref_vals(7), 10 * eps, - "rotmg: param(3) is off"); - EXPECT_NEAR_KK_REL(param_h(4), ref_vals(8), 10 * eps, - "rotmg: param(4) is off"); + EXPECT_NEAR_KK_REL(param_h(0), ref_vals(4), tol, "rotmg: param(0) is off"); + EXPECT_NEAR_KK_REL(param_h(1), ref_vals(5), tol, "rotmg: param(1) is off"); + EXPECT_NEAR_KK_REL(param_h(2), ref_vals(6), tol, "rotmg: param(2) is off"); + EXPECT_NEAR_KK_REL(param_h(3), ref_vals(7), tol, "rotmg: param(3) is off"); + EXPECT_NEAR_KK_REL(param_h(4), ref_vals(8), tol, "rotmg: param(4) is off"); } template @@ -213,8 +215,16 @@ int test_rotmg() { constexpr int num_test_cases = 9; for (int test_case = 0; test_case < num_test_cases; ++test_case) { - Test::set_rotmg_input_ref_vals(test_case, d1, d2, x1, y1, param, ref_vals); - Test::test_rotmg_impl(d1, d2, x1, y1, param, ref_vals); +#if defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) + if (test_case == 2) { + } else { +#endif + Test::set_rotmg_input_ref_vals(test_case, d1, d2, x1, y1, param, + ref_vals); + Test::test_rotmg_impl(d1, d2, x1, y1, param, ref_vals); +#if defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) + } +#endif } return 1; From 5454e15eda551cb12c04bd66a737a2d0760308ee Mon Sep 17 00:00:00 2001 From: Vinh Dang Date: Thu, 27 Oct 2022 14:16:13 -0700 Subject: [PATCH 127/226] Add TPL for cusparseSpSV for sptrsv with cuda 11 --- .../KokkosSparse_sptrsv_cuSPARSE_impl.hpp | 160 ++++++++++++++++++ sparse/src/KokkosSparse_sptrsv_handle.hpp | 46 +++++ 2 files changed, 206 insertions(+) diff --git a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp index 61d0dc3ccf..a07217538e 100644 --- a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp @@ -60,6 +60,113 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, ain_nonzero_index_view_type entries, ain_values_scalar_view_type values, bool trans) { #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE +#if (CUDA_VERSION >= 11030) + typedef typename KernelHandle::nnz_lno_t idx_type; + typedef typename KernelHandle::size_type size_type; + typedef typename KernelHandle::scalar_t scalar_type; + typedef typename KernelHandle::memory_space memory_space; + typedef typename KernelHandle::nnz_scalar_view_t nnz_scalar_view_t; + + const bool is_cuda_space = + std::is_same::value || + std::is_same::value || + std::is_same::value; + + if (!is_cuda_space) { + throw std::runtime_error( + "KokkosKernels sptrsvcuSPARSE_symbolic: MEMORY IS NOT ALLOCATED IN GPU " + "DEVICE for CUSPARSE\n"); + } else if (std::is_same::value) { + bool is_lower = sptrsv_handle->is_lower_tri(); + sptrsv_handle->create_cuSPARSE_Handle(trans, is_lower); + + typename KernelHandle::SPTRSVcuSparseHandleType* h = + sptrsv_handle->get_cuSparseHandle(); + + cusparseStatus_t status; + + int64_t nnz = static_cast(entries.extent(0)); + size_t pBufferSize; + + if (!std::is_same::value) + sptrsv_handle->allocate_tmp_int_rowmap(row_map.extent(0)); + const int* rm = !std::is_same::value + ? sptrsv_handle->get_int_rowmap_ptr_copy(row_map) + : (const int*)row_map.data(); + const int* ent = (const int*)entries.data(); + const scalar_type* vals = values.data(); + const scalar_type alpha = scalar_type(1.0); + + cudaDataType cudaValueType; + if (std::is_same::value) { + cudaValueType = CUDA_R_64F; + } else if (std::is_same::value) { + cudaValueType = CUDA_R_32F; + } else if (std::is_same>::value) { + cudaValueType = CUDA_C_64F; + } else if (std::is_same>::value) { + cudaValueType = CUDA_C_32F; + } else { + throw std::runtime_error("CUSPARSE wrapper error: unsupported type.\n"); + } + + // Create sparse matrix in CSR format + status = cusparseCreateCsr(&(h->matDescr), static_cast(nrows), static_cast(nrows), nnz, + (void*)rm, (void*)ent, (void*)vals, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, + CUSPARSE_INDEX_BASE_ZERO, cudaValueType); + + // Create dummy dense vector B (RHS) + nnz_scalar_view_t b_dummy ( "b_dummy", nrows ); + cusparseCreateDnVec(&(h->vecBDescr_dummy), static_cast(nrows), b_dummy.data(), cudaValueType); + + // Create dummy dense vector X (LHS) + nnz_scalar_view_t x_dummy ( "x_dummy", nrows ); + cusparseCreateDnVec(&(h->vecXDescr_dummy), static_cast(nrows), x_dummy.data(), cudaValueType); + + // Specify Lower|Upper fill mode + if (is_lower) { + cusparseFillMode_t fillmode = CUSPARSE_FILL_MODE_LOWER; + cusparseSpMatSetAttribute(h->matDescr, CUSPARSE_SPMAT_FILL_MODE, &fillmode, sizeof(fillmode)); + } + else { + cusparseFillMode_t fillmode = CUSPARSE_FILL_MODE_UPPER; + cusparseSpMatSetAttribute(h->matDescr, CUSPARSE_SPMAT_FILL_MODE, &fillmode, sizeof(fillmode)); + } + + // Specify Unit|Non-Unit diagonal type. + cusparseDiagType_t diagtype = CUSPARSE_DIAG_TYPE_NON_UNIT; + cusparseSpMatSetAttribute(h->matDescr, CUSPARSE_SPMAT_DIAG_TYPE, &diagtype, sizeof(diagtype)); + + // Allocate an external buffer for analysis + status = cusparseSpSV_bufferSize(h->handle, h->transpose, + &alpha, h->matDescr, h->vecBDescr_dummy, h->vecXDescr_dummy, cudaValueType, + CUSPARSE_SPSV_ALG_DEFAULT, h->spsvDescr, + &pBufferSize); + + if (CUSPARSE_STATUS_SUCCESS != status) + std::cout << "bufferSize status error name " << (status) << std::endl; + + // pBuffer returned by cudaMalloc is automatically aligned to 128 bytes. + cudaError_t my_error; + my_error = cudaMalloc((void**)&(h->pBuffer), pBufferSize); + + if (cudaSuccess != my_error) + std::cout << "cudmalloc pBuffer error_t error name " + << cudaGetErrorString(my_error) << std::endl; + + //Run analysis + status = cusparseSpSV_analysis(h->handle, h->transpose, + &alpha, h->matDescr, h->vecBDescr_dummy, h->vecXDescr_dummy, cudaValueType, + CUSPARSE_SPSV_ALG_DEFAULT, h->spsvDescr, h->pBuffer); + + if (CUSPARSE_STATUS_SUCCESS != status) + std::cout << "analysis status error name " << (status) << std::endl; + } else { + throw std::runtime_error( + "CUSPARSE requires local ordinals to be integer.\n"); + } +#else //CUDA_VERSION < 11030 typedef typename KernelHandle::nnz_lno_t idx_type; typedef typename KernelHandle::size_type size_type; typedef typename KernelHandle::scalar_t scalar_type; @@ -182,6 +289,7 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, throw std::runtime_error( "CUSPARSE requires local ordinals to be integer.\n"); } +#endif #else (void)sptrsv_handle; (void)nrows; @@ -207,6 +315,57 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, x_values_scalar_view_type lhs, bool /*trans*/ ) { #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE +#if (CUDA_VERSION >= 11030) + typedef typename KernelHandle::nnz_lno_t idx_type; + typedef typename KernelHandle::size_type size_type; + typedef typename KernelHandle::scalar_t scalar_type; + + if (std::is_same::value) { + cusparseStatus_t status; + + typename KernelHandle::SPTRSVcuSparseHandleType* h = + sptrsv_handle->get_cuSparseHandle(); + + //const int* rm = !std::is_same::value + // ? sptrsv_handle->get_int_rowmap_ptr() + // : (const int*)row_map.data(); + //const int* ent = (const int*)entries.data(); + //const scalar_type* vals = values.data(); + const scalar_type* bv = rhs.data(); + scalar_type* xv = lhs.data(); + const scalar_type alpha = scalar_type(1.0); + + cudaDataType cudaValueType; + if (std::is_same::value) { + cudaValueType = CUDA_R_64F; + } else if (std::is_same::value) { + cudaValueType = CUDA_R_32F; + } else if (std::is_same>::value) { + cudaValueType = CUDA_C_64F; + } else if (std::is_same>::value) { + cudaValueType = CUDA_C_32F; + } else { + throw std::runtime_error("CUSPARSE wrapper error: unsupported type.\n"); + } + + // Create dense vector B (RHS) + cusparseCreateDnVec(&(h->vecBDescr), static_cast(nrows), (void*)bv, cudaValueType); + + // Create dense vector X (LHS) + cusparseCreateDnVec(&(h->vecXDescr), static_cast(nrows), (void*)xv, cudaValueType); + + //Solve + status = cusparseSpSV_solve(h->handle, h->transpose, &alpha, h->matDescr, + h->vecBDescr, h->vecXDescr, cudaValueType, + CUSPARSE_SPSV_ALG_DEFAULT, h->spsvDescr); + + if (CUSPARSE_STATUS_SUCCESS != status) + std::cout << "solve status error name " << (status) << std::endl; + } else { + throw std::runtime_error( + "CUSPARSE requires local ordinals to be integer.\n"); + } +#else //CUDA_VERSION < 11030 typedef typename KernelHandle::nnz_lno_t idx_type; typedef typename KernelHandle::size_type size_type; typedef typename KernelHandle::scalar_t scalar_type; @@ -283,6 +442,7 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, throw std::runtime_error( "CUSPARSE requires local ordinals to be integer.\n"); } +#endif #else (void)sptrsv_handle; (void)nrows; diff --git a/sparse/src/KokkosSparse_sptrsv_handle.hpp b/sparse/src/KokkosSparse_sptrsv_handle.hpp index 4c9c98d6c1..da24e55108 100644 --- a/sparse/src/KokkosSparse_sptrsv_handle.hpp +++ b/sparse/src/KokkosSparse_sptrsv_handle.hpp @@ -154,6 +154,51 @@ class SPTRSVHandle { mtx_scalar_view_t; #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE +#if (CUDA_VERSION >= 11030) + struct cuSparseHandleType { + cusparseHandle_t handle; + cusparseOperation_t transpose; + cusparseSpMatDescr_t matDescr; + cusparseDnVecDescr_t vecBDescr, vecBDescr_dummy; + cusparseDnVecDescr_t vecXDescr, vecXDescr_dummy; + cusparseSpSVDescr_t spsvDescr; + void *pBuffer{nullptr}; + + cuSparseHandleType(bool transpose_, bool is_lower) { + cusparseStatus_t status; + status = cusparseCreate(&handle); + if (status != CUSPARSE_STATUS_SUCCESS) { + throw std::runtime_error("cusparseCreate ERROR\n"); + } + cusparseSetPointerMode(handle, CUSPARSE_POINTER_MODE_HOST); + + if (transpose_) { + transpose = CUSPARSE_OPERATION_TRANSPOSE; + } else { + transpose = CUSPARSE_OPERATION_NON_TRANSPOSE; + } + + status = cusparseSpSV_createDescr(&spsvDescr); + if (status != CUSPARSE_STATUS_SUCCESS) { + throw std::runtime_error("cusparseSpSV_createDescr spsvDescr ERROR\n"); + } + } + + ~cuSparseHandleType() { + if (pBuffer != nullptr) { + cudaFree(pBuffer); + pBuffer = nullptr; + } + cusparseDestroySpMat(matDescr); + cusparseDestroyDnVec(vecBDescr); + cusparseDestroyDnVec(vecBDescr_dummy); + cusparseDestroyDnVec(vecXDescr); + cusparseDestroyDnVec(vecXDescr_dummy); + cusparseSpSV_destroyDescr(spsvDescr); + cusparseDestroy(handle); + } + }; +#else //CUDA_VERSION < 11030 struct cuSparseHandleType { cusparseHandle_t handle; cusparseOperation_t transpose; @@ -202,6 +247,7 @@ class SPTRSVHandle { cusparseDestroy(handle); } }; +#endif typedef cuSparseHandleType SPTRSVcuSparseHandleType; #endif From 6226ac687131a55320cad247fecc71c37276eef7 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Thu, 27 Oct 2022 15:56:09 -0600 Subject: [PATCH 128/226] cm_generate_makefile: add rocblas, rocsparse tpl options --- cm_generate_makefile.bash | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/cm_generate_makefile.bash b/cm_generate_makefile.bash index a41b4488ff..b98abbbfc8 100755 --- a/cm_generate_makefile.bash +++ b/cm_generate_makefile.bash @@ -178,6 +178,8 @@ get_kernels_tpls_list() { KOKKOSKERNELS_USER_TPL_LIBNAME_CMD= CUBLAS_DEFAULT=OFF CUSPARSE_DEFAULT=OFF + ROCBLAS_DEFAULT=OFF + ROCSPARSE_DEFAULT=OFF PARSE_TPLS_LIST=$(echo $KOKKOSKERNELS_TPLS | tr "," "\n") for TPLS_ in $PARSE_TPLS_LIST do @@ -189,6 +191,12 @@ get_kernels_tpls_list() { if [ "$UC_TPLS" == "CUSPARSE" ]; then CUSPARSE_DEFAULT=ON fi + if [ "$UC_TPLS" == "ROCBLAS" ]; then + ROCBLAS_DEFAULT=ON + fi + if [ "$UC_TPLS" == "ROCSPARSE" ]; then + ROCSPARSE_DEFAULT=ON + fi if [ "$UC_TPLS" == "BLAS" ]; then if [ "$BLAS_PATH" != "" ]; then echo User BLAS_PATH=$BLAS_PATH @@ -216,6 +224,12 @@ get_kernels_tpls_list() { if [ "$CUSPARSE_DEFAULT" == "OFF" ]; then KOKKOSKERNELS_TPLS_CMD="-DKokkosKernels_ENABLE_TPL_CUSPARSE=OFF ${KOKKOSKERNELS_TPLS_CMD}" fi + if [ "$ROCBLAS_DEFAULT" == "OFF" ]; then + KOKKOSKERNELS_TPLS_CMD="-DKokkosKernels_ENABLE_TPL_ROCBLAS=OFF ${KOKKOSKERNELS_TPLS_CMD}" + fi + if [ "$ROCSPARSE_DEFAULT" == "OFF" ]; then + KOKKOSKERNELS_TPLS_CMD="-DKokkosKernels_ENABLE_TPL_ROCSPARSE=OFF ${KOKKOSKERNELS_TPLS_CMD}" + fi } get_kernels_extra_linker_flags() { @@ -331,7 +345,7 @@ display_help_text() { echo "--with-tpls=[TPLS]: Set tpls to be instantiated (Proper support requies that appropriate compiler and device must be enabled)." echo " This may require providing paths and the library name if using custom installs not on a default path" echo " that CMake searches" - echo " Options: blas, mkl, cublas, cusparse, magma, armpl" + echo " Options: blas, mkl, cublas, cusparse, magma, armpl, rocblas, rocsparse" echo "--user-blas-path=[PATH]: Set path to location of user-specified BLAS library." echo "--user-blas-lib=[LIB]: Library name of desired BLAS install." echo " Example: For the typical \"libblas.a\" provide \"blas\"" From 7869190dafb4dc74d494de8ee15b9c11e18f50b7 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Thu, 27 Oct 2022 18:00:05 -0600 Subject: [PATCH 129/226] ROTMG: fixing small inconsistencies in test and adding ARMPL comment --- blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp | 2 ++ blas/unit_test/Test_Blas1_rotmg.hpp | 7 ------- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp index 28a4a6b9d9..98d4768311 100644 --- a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp @@ -59,6 +59,8 @@ namespace KokkosBlas { namespace Impl { // Generic Host side BLAS (could be MKL or whatever) +// ARMPL is disabled as it does not detect some corner +// cases correctly which leads to failing unit-tests #if defined(KOKKOSKERNELS_ENABLE_TPL_BLAS) && \ !defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) #define KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_BLAS(SCALAR, LAYOUT, EXEC_SPACE, \ diff --git a/blas/unit_test/Test_Blas1_rotmg.hpp b/blas/unit_test/Test_Blas1_rotmg.hpp index 45d02aeae6..530eeca971 100644 --- a/blas/unit_test/Test_Blas1_rotmg.hpp +++ b/blas/unit_test/Test_Blas1_rotmg.hpp @@ -215,16 +215,9 @@ int test_rotmg() { constexpr int num_test_cases = 9; for (int test_case = 0; test_case < num_test_cases; ++test_case) { -#if defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) - if (test_case == 2) { - } else { -#endif Test::set_rotmg_input_ref_vals(test_case, d1, d2, x1, y1, param, ref_vals); Test::test_rotmg_impl(d1, d2, x1, y1, param, ref_vals); -#if defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) - } -#endif } return 1; From 148d84cbf952f73085b455deeee1a4f793a10b6b Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Thu, 27 Oct 2022 18:02:37 -0600 Subject: [PATCH 130/226] ROTMG: applying clang-format --- blas/unit_test/Test_Blas1_rotmg.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/blas/unit_test/Test_Blas1_rotmg.hpp b/blas/unit_test/Test_Blas1_rotmg.hpp index 530eeca971..08ba20670a 100644 --- a/blas/unit_test/Test_Blas1_rotmg.hpp +++ b/blas/unit_test/Test_Blas1_rotmg.hpp @@ -215,9 +215,8 @@ int test_rotmg() { constexpr int num_test_cases = 9; for (int test_case = 0; test_case < num_test_cases; ++test_case) { - Test::set_rotmg_input_ref_vals(test_case, d1, d2, x1, y1, param, - ref_vals); - Test::test_rotmg_impl(d1, d2, x1, y1, param, ref_vals); + Test::set_rotmg_input_ref_vals(test_case, d1, d2, x1, y1, param, ref_vals); + Test::test_rotmg_impl(d1, d2, x1, y1, param, ref_vals); } return 1; From a2fb862eb0dfa1c8388176a2d59ca3bf45df8157 Mon Sep 17 00:00:00 2001 From: James Foucar Date: Fri, 28 Oct 2022 15:03:56 -0600 Subject: [PATCH 131/226] Jgfouca/par ilut (#1506) * Make par_ilut files by copying spiluk * post rebase cleanups * Remove ILUT alg selection * Remove fill_level for numeric phase of par_ilut * minor cleanup * add candidates working * Remove unused * CUDA building and running * add dbg printfs * Add full numeric checks * Fixes for upstream merge * Get rid of unused template arg for spadd_symbolic * Residual done * Some cleanup and documentation * Replace prefix_sum with much simpler impl * Add deterministic option to par_ilut. Be sure to sort transpose_matrix output * Remove debug output * Switch from typedefs to using * Improve doxygen for par ilut * Warning cleanup * Run clang formatter on everything * Make handle destructor callable by device * Change correct handle * Fixes for complex scalar * Fix spadd perf tests * Remove numeric stuff from symbolic par_ilut * Use struct to reduce type duplication * Remove reinterpret casts again with fix * Fix warnings * Fix small type bug in ExclusiveParallelPrefixSum * Fixes for when Kokkos::Serial is not available * Formatting * Fix uninitialized error for L|U_new_row_map * Fix ExclusiveParallelPrefixSum to allow for uninitialized or garbage in last view element input --- common/src/KokkosKernels_SimpleUtils.hpp | 28 +- perf_test/sparse/KokkosSparse_spadd.cpp | 16 +- sparse/CMakeLists.txt | 14 + ...arse_par_ilut_numeric_eti_spec_inst.cpp.in | 53 + ...rse_par_ilut_symbolic_eti_spec_inst.cpp.in | 53 + ...rse_par_ilut_numeric_eti_spec_avail.hpp.in | 53 + ...arse_par_ilut_numeric_eti_spec_decl.hpp.in | 53 + ...se_par_ilut_symbolic_eti_spec_avail.hpp.in | 53 + ...rse_par_ilut_symbolic_eti_spec_decl.hpp.in | 53 + .../KokkosSparse_par_ilut_numeric_impl.hpp | 951 ++++++++++++++++++ .../KokkosSparse_par_ilut_numeric_spec.hpp | 274 +++++ .../KokkosSparse_par_ilut_symbolic_impl.hpp | 123 +++ .../KokkosSparse_par_ilut_symbolic_spec.hpp | 206 ++++ .../impl/KokkosSparse_spgemm_numeric_spec.hpp | 2 +- sparse/src/KokkosKernels_Handle.hpp | 48 +- sparse/src/KokkosSparse.hpp | 1 + sparse/src/KokkosSparse_par_ilut.hpp | 482 +++++++++ sparse/src/KokkosSparse_par_ilut_handle.hpp | 196 ++++ sparse/src/KokkosSparse_spadd.hpp | 13 +- sparse/src/KokkosSparse_spgemm_handle.hpp | 2 +- ...Sparse_par_ilut_numeric_tpl_spec_avail.hpp | 62 ++ ...sSparse_par_ilut_numeric_tpl_spec_decl.hpp | 52 + ...parse_par_ilut_symbolic_tpl_spec_avail.hpp | 60 ++ ...Sparse_par_ilut_symbolic_tpl_spec_decl.hpp | 52 + sparse/unit_test/Test_Sparse.hpp | 1 + sparse/unit_test/Test_Sparse_par_ilut.hpp | 327 ++++++ sparse/unit_test/Test_Sparse_spadd.hpp | 22 +- 27 files changed, 3199 insertions(+), 51 deletions(-) create mode 100644 sparse/eti/generated_specializations_cpp/par_ilut_numeric/KokkosSparse_par_ilut_numeric_eti_spec_inst.cpp.in create mode 100644 sparse/eti/generated_specializations_cpp/par_ilut_symbolic/KokkosSparse_par_ilut_symbolic_eti_spec_inst.cpp.in create mode 100644 sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_avail.hpp.in create mode 100644 sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_decl.hpp.in create mode 100644 sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_avail.hpp.in create mode 100644 sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_decl.hpp.in create mode 100644 sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp create mode 100644 sparse/impl/KokkosSparse_par_ilut_numeric_spec.hpp create mode 100644 sparse/impl/KokkosSparse_par_ilut_symbolic_impl.hpp create mode 100644 sparse/impl/KokkosSparse_par_ilut_symbolic_spec.hpp create mode 100644 sparse/src/KokkosSparse_par_ilut.hpp create mode 100644 sparse/src/KokkosSparse_par_ilut_handle.hpp create mode 100644 sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_avail.hpp create mode 100644 sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_decl.hpp create mode 100644 sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_avail.hpp create mode 100644 sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_decl.hpp create mode 100644 sparse/unit_test/Test_Sparse_par_ilut.hpp diff --git a/common/src/KokkosKernels_SimpleUtils.hpp b/common/src/KokkosKernels_SimpleUtils.hpp index bb2a6d43b9..86944e9c4d 100644 --- a/common/src/KokkosKernels_SimpleUtils.hpp +++ b/common/src/KokkosKernels_SimpleUtils.hpp @@ -75,15 +75,16 @@ class SquareRootFunctor { template struct ExclusiveParallelPrefixSum { - typedef typename view_t::value_type idx; + typedef typename view_t::value_type value_type; view_t array_sum; ExclusiveParallelPrefixSum(view_t arr_) : array_sum(arr_) {} KOKKOS_INLINE_FUNCTION - void operator()(const size_t ii, size_t &update, const bool final) const { - idx val = array_sum(ii); + void operator()(const size_t ii, value_type &update, const bool final) const { + value_type val = + (ii == array_sum.extent(0) - 1) ? value_type(0) : array_sum(ii); if (final) { - array_sum(ii) = idx(update); + array_sum(ii) = value_type(update); } update += val; } @@ -118,6 +119,25 @@ inline void kk_exclusive_parallel_prefix_sum( ExclusiveParallelPrefixSum(arr)); } +/*** + * \brief Function performs the exclusive parallel prefix sum. That is each + * entry holds the sum until itself. This version also returns the final sum + * equivalent to the sum-reduction of arr before doing the scan. + * \param num_elements: size of the array + * \param arr: the array for which the prefix sum will be performed. + * \param finalSum: will be set to arr[num_elements - 1] after computing the + * prefix sum. + */ +template +inline void kk_exclusive_parallel_prefix_sum( + typename view_t::value_type num_elements, view_t arr, + typename view_t::non_const_value_type &finalSum) { + typedef Kokkos::RangePolicy my_exec_space; + Kokkos::parallel_scan("KokkosKernels::Common::PrefixSum", + my_exec_space(0, num_elements), + ExclusiveParallelPrefixSum(arr), finalSum); +} + /*** * \brief Function performs the inclusive parallel prefix sum. That is each * entry holds the sum until itself including itself. \param num_elements: size diff --git a/perf_test/sparse/KokkosSparse_spadd.cpp b/perf_test/sparse/KokkosSparse_spadd.cpp index 5448843168..09b26fbc76 100644 --- a/perf_test/sparse/KokkosSparse_spadd.cpp +++ b/perf_test/sparse/KokkosSparse_spadd.cpp @@ -171,9 +171,6 @@ void run_experiment(const Params& params) { lno_view_t; typedef typename crsMat_t::StaticCrsGraphType::entries_type::non_const_type lno_nnz_view_t; - typedef typename crsMat_t::StaticCrsGraphType::row_map_type const_lno_view_t; - typedef - typename crsMat_t::StaticCrsGraphType::entries_type const_lno_nnz_view_t; lno_view_t row_mapC; // entriesC, valuesC and cusparseBuffer are allocated inside @@ -200,10 +197,8 @@ void run_experiment(const Params& params) { double numericTime = 0; // Do an untimed warm up symbolic, and preallocate space for C entries/values - spadd_symbolic(&kh, A.graph.row_map, A.graph.entries, - B.graph.row_map, B.graph.entries, row_mapC); + spadd_symbolic(&kh, A.graph.row_map, A.graph.entries, B.graph.row_map, + B.graph.entries, row_mapC); bool use_kk = !params.use_cusparse && !params.use_mkl; @@ -261,11 +256,8 @@ void run_experiment(const Params& params) { for (int sumRep = 0; sumRep < params.repeat; sumRep++) { timer.reset(); if (use_kk) { - spadd_symbolic(&kh, A.graph.row_map, A.graph.entries, - B.graph.row_map, B.graph.entries, - row_mapC); + spadd_symbolic(&kh, A.graph.row_map, A.graph.entries, B.graph.row_map, + B.graph.entries, row_mapC); c_nnz = addHandle->get_c_nnz(); } else if (params.use_cusparse) { #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE diff --git a/sparse/CMakeLists.txt b/sparse/CMakeLists.txt index 800e93e153..9457d5b368 100644 --- a/sparse/CMakeLists.txt +++ b/sparse/CMakeLists.txt @@ -125,6 +125,20 @@ KOKKOSKERNELS_GENERATE_ETI(Sparse_spiluk_numeric spiluk_numeric TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) +KOKKOSKERNELS_GENERATE_ETI(Sparse_par_ilut_symbolic par_ilut_symbolic + COMPONENTS sparse + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES +) + +KOKKOSKERNELS_GENERATE_ETI(Sparse_par_ilut_numeric par_ilut_numeric + COMPONENTS sparse + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES +) + KOKKOSKERNELS_GENERATE_ETI(Sparse_sptrsv_symbolic sptrsv_symbolic COMPONENTS sparse HEADER_LIST ETI_HEADERS diff --git a/sparse/eti/generated_specializations_cpp/par_ilut_numeric/KokkosSparse_par_ilut_numeric_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/par_ilut_numeric/KokkosSparse_par_ilut_numeric_eti_spec_inst.cpp.in new file mode 100644 index 0000000000..de06bdfa4d --- /dev/null +++ b/sparse/eti/generated_specializations_cpp/par_ilut_numeric/KokkosSparse_par_ilut_numeric_eti_spec_inst.cpp.in @@ -0,0 +1,53 @@ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + + +#define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true +#include "KokkosKernels_config.h" + +#include "KokkosSparse_par_ilut_numeric_spec.hpp" +namespace KokkosSparse { +namespace Impl { +@SPARSE_PAR_ILUT_NUMERIC_ETI_INST_BLOCK@ + } //IMPL +} //Kokkos diff --git a/sparse/eti/generated_specializations_cpp/par_ilut_symbolic/KokkosSparse_par_ilut_symbolic_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/par_ilut_symbolic/KokkosSparse_par_ilut_symbolic_eti_spec_inst.cpp.in new file mode 100644 index 0000000000..adaa577bb7 --- /dev/null +++ b/sparse/eti/generated_specializations_cpp/par_ilut_symbolic/KokkosSparse_par_ilut_symbolic_eti_spec_inst.cpp.in @@ -0,0 +1,53 @@ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + + +#define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true +#include "KokkosKernels_config.h" + +#include "KokkosSparse_par_ilut_symbolic_spec.hpp" +namespace KokkosSparse { +namespace Impl { +@SPARSE_PAR_ILUT_SYMBOLIC_ETI_INST_BLOCK@ + } //IMPL +} //Kokkos diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_avail.hpp.in new file mode 100644 index 0000000000..718a78f203 --- /dev/null +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_avail.hpp.in @@ -0,0 +1,53 @@ +#ifndef KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_AVAIL_HPP_ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +namespace KokkosSparse { +namespace Impl { + +@SPARSE_PAR_ILUT_NUMERIC_ETI_AVAIL_BLOCK@ + +} // Impl +} // KokkosSparse +#endif // KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_AVAIL_HPP_ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_decl.hpp.in new file mode 100644 index 0000000000..23738d1acf --- /dev/null +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_decl.hpp.in @@ -0,0 +1,53 @@ +#ifndef KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_DECL_HPP_ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +namespace KokkosSparse { +namespace Impl { + +@SPARSE_PAR_ILUT_NUMERIC_DECL_BLOCK@ + +} // Impl +} // KokkosSparse +#endif // KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_DECL_HPP_ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_avail.hpp.in new file mode 100644 index 0000000000..f26d7cb598 --- /dev/null +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_avail.hpp.in @@ -0,0 +1,53 @@ +#ifndef KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +namespace KokkosSparse { +namespace Impl { + +@SPARSE_PAR_ILUT_SYMBOLIC_ETI_AVAIL_BLOCK@ + +} // Impl +} // KokkosSparse +#endif // KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_decl.hpp.in new file mode 100644 index 0000000000..d7f643850e --- /dev/null +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_decl.hpp.in @@ -0,0 +1,53 @@ +#ifndef KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_DECL_HPP_ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +namespace KokkosSparse { +namespace Impl { + +@SPARSE_PAR_ILUT_SYMBOLIC_ETI_DECL_BLOCK@ + +} // Impl +} // KokkosSparse +#endif // KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_DECL_HPP_ diff --git a/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp b/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp new file mode 100644 index 0000000000..f66e4586ac --- /dev/null +++ b/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp @@ -0,0 +1,951 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSSPARSE_IMPL_PAR_ILUT_NUMERIC_HPP_ +#define KOKKOSSPARSE_IMPL_PAR_ILUT_NUMERIC_HPP_ + +/// \file KokkosSparse_par_ilut_numeric_impl.hpp +/// \brief Implementation(s) of the numeric phase of sparse parallel ILUT. + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +//#define NUMERIC_OUTPUT_INFO + +namespace KokkosSparse { +namespace Impl { +namespace Experimental { + +template +struct IlutWrap { + // + // Useful types + // + using execution_space = typename IlutHandle::execution_space; + using index_t = typename IlutHandle::nnz_lno_t; + using size_type = typename IlutHandle::size_type; + using scalar_t = typename IlutHandle::nnz_scalar_t; + using HandleDeviceEntriesType = typename IlutHandle::nnz_lno_view_t; + using HandleDeviceRowMapType = typename IlutHandle::nnz_row_view_t; + using HandleDeviceValueType = typename IlutHandle::nnz_value_view_t; + using karith = typename Kokkos::ArithTraits; + using policy_type = typename IlutHandle::TeamPolicy; + using member_type = typename policy_type::member_type; + using range_policy = typename IlutHandle::RangePolicy; + + /** + * prefix_sum: Take a row_map of counts and transform it to sums, and + * return the total sum. + */ + template + static size_type prefix_sum(RowMapType& row_map) { + size_type result = 0; + KokkosKernels::Impl::kk_exclusive_parallel_prefix_sum< + RowMapType, typename IlutHandle::HandleExecSpace>(row_map.extent(0), + row_map, result); + return result; + } + + /** + * Just a convenience wrapper around spgemm + */ + template + static void multiply_matrices( + KHandle& kh, IlutHandle& ih, const LRowMapType& L_row_map, + const LEntriesType& L_entries, const LValuesType& L_values, + const URowMapType& U_row_map, const UEntriesType& U_entries, + const UValuesType& U_values, LURowMapType& LU_row_map, + LUEntriesType& LU_entries, LUValuesType& LU_values) { + const size_type nrows = ih.get_nrows(); + + KokkosSparse::Experimental::spgemm_symbolic( + &kh, nrows, nrows, nrows, L_row_map, L_entries, false, U_row_map, + U_entries, false, LU_row_map); + + const size_type lu_nnz_size = kh.get_spgemm_handle()->get_c_nnz(); + Kokkos::resize(LU_entries, lu_nnz_size); + Kokkos::resize(LU_values, lu_nnz_size); + + KokkosSparse::Experimental::spgemm_numeric( + &kh, nrows, nrows, nrows, L_row_map, L_entries, L_values, false, + U_row_map, U_entries, U_values, false, LU_row_map, LU_entries, + LU_values); + + // Need to sort LU CRS if on CUDA! + sort_crs_matrix(LU_row_map, LU_entries, LU_values); + } + + /** + * Just a convenience wrapper around transpose_matrix + */ + template + static void transpose_wrap(IlutHandle& ih, const RowMapType& row_map, + const EntriesType& entries, + const ValuesType& values, TRowMapType& t_row_map, + TEntriesType& t_entries, TValuesType& t_values) { + const size_type nrows = ih.get_nrows(); + + // Need to reset t_row_map + Kokkos::deep_copy(t_row_map, 0); + + Kokkos::resize(t_entries, entries.extent(0)); + Kokkos::resize(t_values, values.extent(0)); + + KokkosSparse::Impl::transpose_matrix< + HandleDeviceRowMapType, HandleDeviceEntriesType, HandleDeviceValueType, + HandleDeviceRowMapType, HandleDeviceEntriesType, HandleDeviceValueType, + HandleDeviceRowMapType, execution_space>( + nrows, nrows, row_map, entries, values, t_row_map, t_entries, t_values); + + // Need to ensure output is sorted + sort_crs_matrix(t_row_map, t_entries, t_values); + } + + /** + * Adds new entries from the sparsity pattern of A - L * U + * to L and U, where new values are chosen based on the residual + * value divided by the corresponding diagonal entry. + */ + template + static void add_candidates( + IlutHandle& ih, const ARowMapType& A_row_map, + const AEntriesType& A_entries, const AValuesType& A_values, + const LRowMapType& L_row_map, const LEntriesType& L_entries, + const LValuesType& L_values, const URowMapType& U_row_map, + const UEntriesType& U_entries, const UValuesType& U_values, + const LURowMapType& LU_row_map, const LUEntriesType& LU_entries, + const LUValuesType& LU_values, LNewRowMapType& L_new_row_map, + LNewEntriesType& L_new_entries, LNewValuesType& L_new_values, + UNewRowMapType& U_new_row_map, UNewEntriesType& U_new_entries, + UNewValuesType& U_new_values) { + const size_type nrows = ih.get_nrows(); + + const policy_type policy = ih.get_default_team_policy(); + + // Sizing run for add_candidates. Count nnz's and remove dupes + Kokkos::parallel_for( + "add_candidates sizing", policy, + KOKKOS_LAMBDA(const member_type& team) { + const auto row_idx = team.league_rank(); + + const auto a_row_nnz_begin = A_row_map(row_idx); + const auto a_row_nnz_end = A_row_map(row_idx + 1); + + const auto lu_row_nnz_begin = LU_row_map(row_idx); + const auto lu_row_nnz_end = LU_row_map(row_idx + 1); + + // Really wish kokkos could do a multi-reduce here + size_type a_l_nnz = 0, a_u_nnz = 0, lu_l_nnz = 0, lu_u_nnz = 0, + dup_l_nnz = 0, dup_u_nnz = 0; + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(team, a_row_nnz_begin, a_row_nnz_end), + [&](const size_type nnz, size_type& nnzL_inner) { + const auto col_idx = A_entries(nnz); + nnzL_inner += col_idx <= row_idx; + }, + a_l_nnz); + + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(team, a_row_nnz_begin, a_row_nnz_end), + [&](const size_type nnz, size_type& nnzU_inner) { + const auto col_idx = A_entries(nnz); + nnzU_inner += col_idx >= row_idx; + }, + a_u_nnz); + + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(team, lu_row_nnz_begin, lu_row_nnz_end), + [&](const size_type nnz, size_type& nnzL_inner) { + const auto col_idx = LU_entries(nnz); + nnzL_inner += col_idx <= row_idx; + }, + lu_l_nnz); + + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(team, lu_row_nnz_begin, lu_row_nnz_end), + [&](const size_type nnz, size_type& nnzU_inner) { + const auto col_idx = LU_entries(nnz); + nnzU_inner += col_idx >= row_idx; + }, + lu_u_nnz); + + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(team, a_row_nnz_begin, a_row_nnz_end), + [&](const size_type nnz, size_type& dupL_inner) { + const auto a_col_idx = A_entries(nnz); + if (a_col_idx <= row_idx) { + for (size_type lu_i = lu_row_nnz_begin; lu_i < lu_row_nnz_end; + ++lu_i) { + const auto lu_col_idx = LU_entries(lu_i); + if (a_col_idx == lu_col_idx) { + ++dupL_inner; + break; + } else if (lu_col_idx > a_col_idx) { + break; + } + } + } + }, + dup_l_nnz); + + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(team, a_row_nnz_begin, a_row_nnz_end), + [&](const size_type nnz, size_type& dupU_inner) { + const auto a_col_idx = A_entries(nnz); + if (a_col_idx >= row_idx) { + for (size_type lu_i = lu_row_nnz_begin; lu_i < lu_row_nnz_end; + ++lu_i) { + const auto lu_col_idx = LU_entries(lu_i); + if (a_col_idx == lu_col_idx) { + ++dupU_inner; + break; + } else if (lu_col_idx > a_col_idx) { + break; + } + } + } + }, + dup_u_nnz); + + team.team_barrier(); + + Kokkos::single(Kokkos::PerTeam(team), [&]() { + const auto l_nnz = (a_l_nnz + lu_l_nnz - dup_l_nnz); + const auto u_nnz = (a_u_nnz + lu_u_nnz - dup_u_nnz); + + L_new_row_map(row_idx) = l_nnz; + U_new_row_map(row_idx) = u_nnz; + }); + }); + + // prefix sum + const size_type l_new_nnz_tot = prefix_sum(L_new_row_map); + const size_type u_new_nnz_tot = prefix_sum(U_new_row_map); + + Kokkos::resize(L_new_entries, l_new_nnz_tot); + Kokkos::resize(U_new_entries, u_new_nnz_tot); + Kokkos::resize(L_new_values, l_new_nnz_tot); + Kokkos::resize(U_new_values, u_new_nnz_tot); + + constexpr auto sentinel = std::numeric_limits::max(); + + // Now compute the actual candidate values + Kokkos::parallel_for( + "add_candidates", + range_policy(0, nrows), // No team level parallelism in this alg + KOKKOS_LAMBDA(const size_type row_idx) { + auto a_row_nnz_begin = A_row_map(row_idx); + const auto a_row_nnz_end = A_row_map(row_idx + 1); + const auto a_tot = a_row_nnz_end - a_row_nnz_begin; + + auto lu_row_nnz_begin = LU_row_map(row_idx); + const auto lu_row_nnz_end = LU_row_map(row_idx + 1); + const auto lu_tot = lu_row_nnz_end - lu_row_nnz_begin; + + const auto tot = a_tot + lu_tot; + + size_type l_new_nnz = L_new_row_map(row_idx); + size_type u_new_nnz = U_new_row_map(row_idx); + size_type l_old_begin = L_row_map(row_idx); + size_type l_old_end = L_row_map(row_idx + 1) - 1; // skip diagonal + size_type u_old_begin = U_row_map(row_idx); + size_type u_old_end = U_row_map(row_idx + 1); + bool finished_l = l_old_begin == l_old_end; + bool skip = false; + for (size_type i = 0; i < tot; ++i) { + if (skip) { + skip = false; + continue; + } + + const auto a_col = a_row_nnz_begin < a_row_nnz_end + ? A_entries(a_row_nnz_begin) + : sentinel; + auto a_val = a_row_nnz_begin < a_row_nnz_end + ? A_values(a_row_nnz_begin) + : 0.; + const auto lu_col = lu_row_nnz_begin < lu_row_nnz_end + ? LU_entries(lu_row_nnz_begin) + : sentinel; + auto lu_val = lu_row_nnz_begin < lu_row_nnz_end + ? LU_values(lu_row_nnz_begin) + : 0.; + + const size_type col_idx = Kokkos::fmin(a_col, lu_col); + + const bool a_active = col_idx == a_col; + const bool lu_active = col_idx == lu_col; + + a_val = a_active ? a_val : 0.; + lu_val = lu_active ? lu_val : 0.; + + skip = a_active && lu_active; + + a_row_nnz_begin += a_active; + lu_row_nnz_begin += lu_active; + + const auto r_val = a_val - lu_val; + // load matching entry of L + U + const auto lpu_col = + finished_l ? (u_old_begin < u_old_end ? U_entries(u_old_begin) + : sentinel) + : L_entries(l_old_begin); + const auto lpu_val = + finished_l + ? (u_old_begin < u_old_end ? U_values(u_old_begin) : 0.) + : L_values(l_old_begin); + // load diagonal entry of U for lower diagonal entries + const auto diag = + col_idx < row_idx ? U_values(U_row_map(col_idx)) : 1.; + // if there is already an entry present, use that instead. + const auto out_val = lpu_col == col_idx ? lpu_val : r_val / diag; + // store output entries + if (row_idx >= col_idx) { + L_new_entries(l_new_nnz) = col_idx; + L_new_values(l_new_nnz) = row_idx == col_idx ? 1. : out_val; + ++l_new_nnz; + } + if (row_idx <= col_idx) { + U_new_entries(u_new_nnz) = col_idx; + U_new_values(u_new_nnz) = out_val; + ++u_new_nnz; + } + // advance entry of L + U if we used it + if (finished_l) { + u_old_begin += (lpu_col == col_idx); + } else { + l_old_begin += (lpu_col == col_idx); + finished_l = (l_old_begin == l_old_end); + } + } + }); + } + + /** + * A device-safe lower_bound impl + */ + template + KOKKOS_FUNCTION static ForwardIterator kok_lower_bound(ForwardIterator first, + ForwardIterator last, + const T& val) { + ForwardIterator it; + size_t count, step; + count = last - first; + while (count > 0) { + it = first; + step = count / 2; + it += step; + if (*it < val) { // or: if (comp(*it,val)), for version (2) + first = ++it; + count -= step + 1; + } else + count = step; + } + return first; + } + + /** + * The compute_sum component of compute_l_u_factors + */ + template + KOKKOS_FUNCTION static Kokkos::pair< + typename AValuesType::non_const_value_type, size_type> + compute_sum(const size_type row_idx, typename IlutHandle::nnz_lno_t col_idx, + const ARowMapType& A_row_map, const AEntriesType& A_entries, + const AValuesType& A_values, const LRowMapType& L_row_map, + const LEntriesType& L_entries, const LValuesType& L_values, + const UtRowMapType& Ut_row_map, const UtEntriesType& Ut_entries, + const UtValuesType& Ut_values) { + const auto a_row_nnz_begin = A_row_map(row_idx); + const auto a_row_nnz_end = A_row_map(row_idx + 1); + auto a_nnz_it = kok_lower_bound(A_entries.data() + a_row_nnz_begin, + A_entries.data() + a_row_nnz_end, col_idx); + const size_type a_nnz = a_nnz_it - A_entries.data(); + const bool has_a = a_nnz < a_row_nnz_end && A_entries(a_nnz) == col_idx; + const auto a_val = has_a ? A_values(a_nnz) : 0.0; + scalar_t sum = 0.0; + size_type ut_nnz = 0; + + auto l_row_nnz = L_row_map(row_idx); + const auto l_row_nnz_end = L_row_map(row_idx + 1); + + auto ut_row_nnz = Ut_row_map(col_idx); + const auto ut_row_nnz_end = Ut_row_map(col_idx + 1); + + const auto last_entry = Kokkos::fmin(row_idx, col_idx); + while (l_row_nnz < l_row_nnz_end && ut_row_nnz < ut_row_nnz_end) { + const auto l_col = L_entries(l_row_nnz); + const auto u_row = Ut_entries(ut_row_nnz); + if (l_col == u_row && l_col < last_entry) { + sum += L_values(l_row_nnz) * Ut_values(ut_row_nnz); + } + if (static_cast(u_row) == row_idx) { + ut_nnz = ut_row_nnz; + } + + l_row_nnz += l_col <= u_row ? 1 : 0; + ut_row_nnz += u_row <= l_col ? 1 : 0; + } + + return Kokkos::make_pair(a_val - sum, ut_nnz); + } + + template + KOKKOS_FUNCTION static void compute_l_u_factors_impl( + const ARowMapType& A_row_map, const AEntriesType& A_entries, + const AValuesType& A_values, LRowMapType& L_row_map, + LEntriesType& L_entries, LValuesType& L_values, URowMapType& U_row_map, + UEntriesType& U_entries, UValuesType& U_values, UtRowMapType& Ut_row_map, + UtEntriesType& Ut_entries, UtValuesType& Ut_values, MemberType& team) { + const auto row_idx = team.league_rank(); + + const auto l_row_nnz_begin = L_row_map(row_idx); + const auto l_row_nnz_end = L_row_map(row_idx + 1); + + Kokkos::parallel_for( + Kokkos::TeamThreadRange(team, l_row_nnz_begin, l_row_nnz_end - 1), + [&](const size_type l_nnz) { + const auto col_idx = L_entries(l_nnz); + const auto u_diag = Ut_values(Ut_row_map(col_idx + 1) - 1); + if (u_diag != 0.0) { + const auto new_val = + compute_sum(row_idx, col_idx, A_row_map, A_entries, A_values, + L_row_map, L_entries, L_values, Ut_row_map, + Ut_entries, Ut_values) + .first / + u_diag; + L_values(l_nnz) = new_val; + } + }); + + team.team_barrier(); + + const auto u_row_nnz_begin = U_row_map(row_idx); + const auto u_row_nnz_end = U_row_map(row_idx + 1); + + Kokkos::parallel_for( + Kokkos::TeamThreadRange(team, u_row_nnz_begin, u_row_nnz_end), + [&](const size_type u_nnz) { + const auto col_idx = U_entries(u_nnz); + const auto sum = compute_sum(row_idx, col_idx, A_row_map, A_entries, + A_values, L_row_map, L_entries, L_values, + Ut_row_map, Ut_entries, Ut_values); + const auto new_val = sum.first; + const auto ut_nnz = sum.second; + U_values(u_nnz) = new_val; + Ut_values(ut_nnz) = new_val; // ut_nnz is not guarateed to fail into + // range used exclusively by this team + }); + } + + /** + * Implements a single iteration/sweep of the fixed-point ILU algorithm. + * The results of this function are non-deterministic due to concurrent + * reading and writing of Ut values. deterministic can be set to true to + * make this function determistic, but it will be run in Serial exe space + * if so. + */ + template + static void compute_l_u_factors( + IlutHandle& ih, const ARowMapType& A_row_map, + const AEntriesType& A_entries, const AValuesType& A_values, + LRowMapType& L_row_map, LEntriesType& L_entries, LValuesType& L_values, + URowMapType& U_row_map, UEntriesType& U_entries, UValuesType& U_values, + UtRowMapType& Ut_row_map, UtEntriesType& Ut_entries, + UtValuesType& Ut_values, bool deterministic) { + if (deterministic) { +#ifdef KOKKOS_ENABLE_SERIAL + using spolicy_type = Kokkos::TeamPolicy; + using smember_type = typename spolicy_type::member_type; + + const size_type nrows = ih.get_nrows(); + spolicy_type policy(nrows, 1); + + auto A_row_map_h = Kokkos::create_mirror_view(A_row_map); + auto A_entries_h = Kokkos::create_mirror_view(A_entries); + auto A_values_h = Kokkos::create_mirror_view(A_values); + auto L_row_map_h = Kokkos::create_mirror_view(L_row_map); + auto L_entries_h = Kokkos::create_mirror_view(L_entries); + auto L_values_h = Kokkos::create_mirror_view(L_values); + auto U_row_map_h = Kokkos::create_mirror_view(U_row_map); + auto U_entries_h = Kokkos::create_mirror_view(U_entries); + auto U_values_h = Kokkos::create_mirror_view(U_values); + auto Ut_row_map_h = Kokkos::create_mirror_view(Ut_row_map); + auto Ut_entries_h = Kokkos::create_mirror_view(Ut_entries); + auto Ut_values_h = Kokkos::create_mirror_view(Ut_values); + + Kokkos::deep_copy(A_row_map_h, A_row_map); + Kokkos::deep_copy(A_entries_h, A_entries); + Kokkos::deep_copy(A_values_h, A_values); + Kokkos::deep_copy(L_row_map_h, L_row_map); + Kokkos::deep_copy(L_entries_h, L_entries); + Kokkos::deep_copy(L_values_h, L_values); + Kokkos::deep_copy(U_row_map_h, U_row_map); + Kokkos::deep_copy(U_entries_h, U_entries); + Kokkos::deep_copy(U_values_h, U_values); + Kokkos::deep_copy(Ut_row_map_h, Ut_row_map); + Kokkos::deep_copy(Ut_entries_h, Ut_entries); + Kokkos::deep_copy(Ut_values_h, Ut_values); + + Kokkos::parallel_for( + "compute_l_u_factors", policy, + KOKKOS_LAMBDA(const smember_type& team) { + compute_l_u_factors_impl( + A_row_map_h, A_entries_h, A_values_h, L_row_map_h, L_entries_h, + L_values_h, U_row_map_h, U_entries_h, U_values_h, Ut_row_map_h, + Ut_entries_h, Ut_values_h, team); + }); + + Kokkos::deep_copy(L_values, L_values_h); + Kokkos::deep_copy(U_values, U_values_h); + Kokkos::deep_copy(Ut_values, Ut_values_h); +#else + throw std::runtime_error( + "compute_l_u factors cannot be deterministic without Kokkos::Serial " + "available"); +#endif + } else { + const auto policy = ih.get_default_team_policy(); + + Kokkos::parallel_for( + "compute_l_u_factors", policy, + KOKKOS_LAMBDA(const member_type& team) { + compute_l_u_factors_impl(A_row_map, A_entries, A_values, L_row_map, + L_entries, L_values, U_row_map, U_entries, + U_values, Ut_row_map, Ut_entries, + Ut_values, team); + }); + } + } + + /** + * Select threshold based on filter rank. Do all this on host + */ + template + static typename IlutHandle::float_t threshold_select( + ValuesType& values, const typename IlutHandle::nnz_lno_t rank, + ValuesCopyType& values_copy) { + const index_t size = values.extent(0); + + Kokkos::resize(values_copy, size); + Kokkos::deep_copy(values_copy, values); + + auto begin = values_copy.data(); + auto target = begin + rank; + auto end = begin + size; + std::nth_element(begin, target, end, [](scalar_t a, scalar_t b) { + return karith::abs(a) < karith::abs(b); + }); + + return karith::abs(values_copy(rank)); + } + + /** + * Remove non-diagnal elements that are below the threshold. + */ + template + static void threshold_filter(IlutHandle& ih, + const typename IlutHandle::float_t threshold, + const IRowMapType& I_row_map, + const IEntriesType& I_entries, + const IValuesType& I_values, + ORowMapType& O_row_map, OEntriesType& O_entries, + OValuesType& O_values) { + const auto policy = ih.get_default_team_policy(); + const size_type nrows = ih.get_nrows(); + + Kokkos::parallel_for( + "threshold_filter count", policy, + KOKKOS_LAMBDA(const member_type& team) { + const auto row_idx = team.league_rank(); + + const auto row_nnx_begin = I_row_map(row_idx); + const auto row_nnx_end = I_row_map(row_idx + 1); + + size_type count = 0; + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(team, row_nnx_begin, row_nnx_end), + [&](const size_type nnz, size_type& count_inner) { + if (karith::abs(I_values(nnz)) >= threshold || + I_entries(nnz) == row_idx) { + count_inner += 1; + } + }, + count); + + Kokkos::single(Kokkos::PerTeam(team), + [=]() { O_row_map(row_idx) = count; }); + }); + + const auto new_nnz = prefix_sum(O_row_map); + + Kokkos::resize(O_entries, new_nnz); + Kokkos::resize(O_values, new_nnz); + + Kokkos::parallel_for( + "threshold_filter assign", range_policy(0, nrows), + KOKKOS_LAMBDA(const size_type row_idx) { + const auto i_row_nnx_begin = I_row_map(row_idx); + const auto i_row_nnx_end = I_row_map(row_idx + 1); + + auto onnz = O_row_map(row_idx); + + for (size_type innz = i_row_nnx_begin; innz < i_row_nnx_end; ++innz) { + if (karith::abs(I_values(innz)) >= threshold || + static_cast(I_entries(innz)) == row_idx) { + O_entries(onnz) = I_entries(innz); + O_values(onnz) = I_values(innz); + ++onnz; + } + } + }); + } + + /** + * Compute residual norm for R = A - LU + */ + template + static typename IlutHandle::nnz_scalar_t compute_residual_norm( + KHandle& kh, IlutHandle& ih, const ARowMapType& A_row_map, + const AEntriesType& A_entries, const AValuesType& A_values, + const LRowMapType& L_row_map, const LEntriesType& L_entries, + const LValuesType& L_values, const URowMapType& U_row_map, + const UEntriesType& U_entries, const UValuesType& U_values, + RRowMapType& R_row_map, REntriesType& R_entries, RValuesType& R_values, + LURowMapType& LU_row_map, LUEntriesType& LU_entries, + LUValuesType& LU_values) { + multiply_matrices(kh, ih, L_row_map, L_entries, L_values, U_row_map, + U_entries, U_values, LU_row_map, LU_entries, LU_values); + + auto addHandle = kh.get_spadd_handle(); + KokkosSparse::Experimental::spadd_symbolic( + &kh, A_row_map, A_entries, LU_row_map, LU_entries, R_row_map); + + const size_type r_nnz = addHandle->get_c_nnz(); + Kokkos::resize(R_entries, r_nnz); + Kokkos::resize(R_values, r_nnz); + + KokkosSparse::Experimental::spadd_numeric( + &kh, A_row_map, A_entries, A_values, 1., LU_row_map, LU_entries, + LU_values, -1., R_row_map, R_entries, R_values); + + scalar_t result; + + auto policy = ih.get_default_team_policy(); + + Kokkos::parallel_reduce( + "compute_residual_norm", policy, + KOKKOS_LAMBDA(const member_type& team, scalar_t& total_sum) { + const auto row_idx = team.league_rank(); + + const auto a_row_nnz_begin = A_row_map(row_idx); + const auto a_row_nnz_end = A_row_map(row_idx + 1); + + const auto a_row_entries_begin = A_entries.data() + a_row_nnz_begin; + const auto a_row_entries_end = A_entries.data() + a_row_nnz_end; + + const auto r_row_nnz_begin = R_row_map(row_idx); + const auto r_row_nnz_end = R_row_map(row_idx + 1); + + scalar_t team_sum = 0.; + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(team, r_row_nnz_begin, r_row_nnz_end), + [&](const size_type nnz, scalar_t& sum_inner) { + const auto r_col_idx = R_entries(nnz); + const index_t* lb = kok_lower_bound( + a_row_entries_begin, a_row_entries_end, r_col_idx); + if (lb != a_row_entries_end && *lb == r_col_idx) { + sum_inner += R_values(nnz) * R_values(nnz); + } + }, + team_sum); + + Kokkos::single(Kokkos::PerTeam(team), + [&]() { total_sum += team_sum; }); + }, + result); + + return karith::sqrt(result); + } + + /** + * Set the initial L/U values for the initial approximation + */ + template + static void initialize_LU( + IlutHandle& ih, const ARowMapType& A_row_map, + const AEntriesType& A_entries, const AValuesType& A_values, + const LRowMapType& L_row_map, const LEntriesType& L_entries, + const LValuesType& L_values, const URowMapType& U_row_map, + const UEntriesType& U_entries, const UValuesType& U_values) { + const size_type nrows = ih.get_nrows(); + + Kokkos::parallel_for( + "approx LU values", + range_policy(0, nrows), // No team level parallelism in this alg + KOKKOS_LAMBDA(const index_t& row_idx) { + const auto row_nnz_begin = A_row_map(row_idx); + const auto row_nnz_end = A_row_map(row_idx + 1); + + size_type current_index_l = L_row_map(row_idx); + size_type current_index_u = + U_row_map(row_idx) + 1; // we treat the diagonal separately + + // if there is no diagonal value, set it to 1 by default + scalar_t diag = 1.; + + for (size_type row_nnz = row_nnz_begin; row_nnz < row_nnz_end; + ++row_nnz) { + const auto val = A_values(row_nnz); + const auto col_idx = A_entries(row_nnz); + + if (col_idx < row_idx) { + L_entries(current_index_l) = col_idx; + L_values(current_index_l) = val; + ++current_index_l; + } else if (col_idx == row_idx) { + // save diagonal + diag = val; + } else { + U_entries(current_index_u) = col_idx; + U_values(current_index_u) = val; + ++current_index_u; + } + } + + // store diagonal values separately + const auto l_diag_idx = L_row_map(row_idx + 1) - 1; + const auto u_diag_idx = U_row_map(row_idx); + L_entries(l_diag_idx) = row_idx; + U_entries(u_diag_idx) = row_idx; + L_values(l_diag_idx) = 1.; + U_values(u_diag_idx) = diag; + }); + } + + /** + * The main par_ilut numeric function. + */ + template + static void ilut_numeric(KHandle& kh, IlutHandle& thandle, + const ARowMapType& A_row_map, + const AEntriesType& A_entries, + const AValuesType& A_values, LRowMapType& L_row_map, + LEntriesType& L_entries, LValuesType& L_values, + URowMapType& U_row_map, UEntriesType& U_entries, + UValuesType& U_values, bool deterministic) { + const size_type nrows = thandle.get_nrows(); + const auto fill_in_limit = thandle.get_fill_in_limit(); + const auto l_nnz_limit = + static_cast(fill_in_limit * thandle.get_nnzL()); + const auto u_nnz_limit = + static_cast(fill_in_limit * thandle.get_nnzU()); + + const auto residual_norm_delta_stop = + thandle.get_residual_norm_delta_stop(); + const size_type max_iter = thandle.get_max_iter(); + + std::string myalg("SPGEMM_KK_MEMORY"); + KokkosSparse::SPGEMMAlgorithm spgemm_algorithm = + KokkosSparse::StringToSPGEMMAlgorithm(myalg); + kh.create_spgemm_handle(spgemm_algorithm); + + kh.create_spadd_handle(true /*we expect inputs to be sorted*/); + + // + // temporary workspaces and scalars + // + HandleDeviceRowMapType LU_row_map( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "LU_row_map"), + nrows + 1), + L_new_row_map( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "L_new_row_map"), + nrows + 1), + U_new_row_map( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "U_new_row_map"), + nrows + 1), + R_row_map(Kokkos::view_alloc(Kokkos::WithoutInitializing, "R_row_map"), + nrows + 1), + Ut_new_row_map("Ut_new_row_map", nrows + 1); + + HandleDeviceEntriesType LU_entries, L_new_entries, U_new_entries, + Ut_new_entries, R_entries; + HandleDeviceValueType LU_values, L_new_values, U_new_values, Ut_new_values, + V_copy_d, R_values; + auto V_copy = Kokkos::create_mirror_view(V_copy_d); + + size_type itr = 0; + scalar_t prev_residual = std::numeric_limits::max(); + bool converged = false; + + // Set the initial L/U values for the initial approximation + initialize_LU(thandle, A_row_map, A_entries, A_values, L_row_map, L_entries, + L_values, U_row_map, U_entries, U_values); + + // + // main loop + // + while (!converged && itr < max_iter) { + // LU = L*U + if (prev_residual == std::numeric_limits::max()) { + multiply_matrices(kh, thandle, L_row_map, L_entries, L_values, + U_row_map, U_entries, U_values, LU_row_map, + LU_entries, LU_values); + } + + // Identify candidate locations and add them + add_candidates(thandle, A_row_map, A_entries, A_values, L_row_map, + L_entries, L_values, U_row_map, U_entries, U_values, + LU_row_map, LU_entries, LU_values, L_new_row_map, + L_new_entries, L_new_values, U_new_row_map, U_new_entries, + U_new_values); + + // Get transpose of U_new, needed for compute_l_u_factors + transpose_wrap(thandle, U_new_row_map, U_new_entries, U_new_values, + Ut_new_row_map, Ut_new_entries, Ut_new_values); + + // Do one sweep of the fixed-point ILU algorithm + compute_l_u_factors( + thandle, A_row_map, A_entries, A_values, L_new_row_map, L_new_entries, + L_new_values, U_new_row_map, U_new_entries, U_new_values, + Ut_new_row_map, Ut_new_entries, Ut_new_values, deterministic); + + // Filter smallest elements from L_new and U_new. Store result back + // in L and U. + { + const index_t l_nnz = L_new_values.extent(0); + const index_t u_nnz = U_new_values.extent(0); + + const auto l_filter_rank = std::max(0, l_nnz - l_nnz_limit - 1); + const auto u_filter_rank = std::max(0, u_nnz - u_nnz_limit - 1); + + const auto l_threshold = + threshold_select(L_new_values, l_filter_rank, V_copy); + const auto u_threshold = + threshold_select(U_new_values, u_filter_rank, V_copy); + + threshold_filter(thandle, l_threshold, L_new_row_map, L_new_entries, + L_new_values, L_row_map, L_entries, L_values); + + threshold_filter(thandle, u_threshold, U_new_row_map, U_new_entries, + U_new_values, U_row_map, U_entries, U_values); + } + + // Get transpose of U, needed for compute_l_u_factors. Store in Ut_new* + // since we aren't using those temporaries anymore + transpose_wrap(thandle, U_row_map, U_entries, U_values, Ut_new_row_map, + Ut_new_entries, Ut_new_values); + + // Do one sweep of the fixed-point ILU algorithm + compute_l_u_factors(thandle, A_row_map, A_entries, A_values, L_row_map, + L_entries, L_values, U_row_map, U_entries, U_values, + Ut_new_row_map, Ut_new_entries, Ut_new_values, + deterministic); + + // Compute residual and terminate if converged + { + const auto curr_residual = compute_residual_norm( + kh, thandle, A_row_map, A_entries, A_values, L_row_map, L_entries, + L_values, U_row_map, U_entries, U_values, R_row_map, R_entries, + R_values, LU_row_map, LU_entries, LU_values); + + if (karith::abs(prev_residual - curr_residual) <= + karith::abs(residual_norm_delta_stop)) { + converged = true; + } else { + prev_residual = curr_residual; + } + } + + ++itr; + } + + kh.destroy_spgemm_handle(); + kh.destroy_spadd_handle(); + } // end ilut_numeric + +}; // struct IlutWrap + +} // namespace Experimental +} // namespace Impl +} // namespace KokkosSparse + +#endif diff --git a/sparse/impl/KokkosSparse_par_ilut_numeric_spec.hpp b/sparse/impl/KokkosSparse_par_ilut_numeric_spec.hpp new file mode 100644 index 0000000000..56302c9d24 --- /dev/null +++ b/sparse/impl/KokkosSparse_par_ilut_numeric_spec.hpp @@ -0,0 +1,274 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSSPARSE_IMPL_PAR_ILUT_NUMERIC_SPEC_HPP_ +#define KOKKOSSPARSE_IMPL_PAR_ILUT_NUMERIC_SPEC_HPP_ + +#include +#include +#include +#include "KokkosSparse_CrsMatrix.hpp" +#include "KokkosKernels_Handle.hpp" + +// Include the actual functors +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +#include +#include +#endif + +namespace KokkosSparse { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct par_ilut_numeric_eti_spec_avail { + enum : bool { value = false }; +}; + +} // namespace Impl +} // namespace KokkosSparse + +#define KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_AVAIL( \ + SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ + MEM_SPACE_TYPE) \ + template <> \ + struct par_ilut_numeric_eti_spec_avail< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ + Kokkos::View< \ + const OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + const ORDINAL_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + const SCALAR_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits > > { \ + enum : bool { value = true }; \ + }; + +// Include the actual specialization declarations +#include +#include + +namespace KokkosSparse { +namespace Impl { + +// Unification layer +/// \brief Implementation of KokkosSparse::par_ilut_numeric + +template ::value, + bool eti_spec_avail = par_ilut_numeric_eti_spec_avail< + KernelHandle, ARowMapType, AEntriesType, AValuesType, LRowMapType, + LEntriesType, LValuesType, URowMapType, UEntriesType, + UValuesType>::value> +struct PAR_ILUT_NUMERIC { + static void par_ilut_numeric(KernelHandle *handle, + const ARowMapType &A_row_map, + const AEntriesType &A_entries, + const AValuesType &A_values, + LRowMapType &L_row_map, LEntriesType &L_entries, + LValuesType &L_values, URowMapType &U_row_map, + UEntriesType &U_entries, UValuesType &U_values, + bool deterministic = false); +}; + +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +//! Full specialization of par_ilut_numeric +// Unification layer +template +struct PAR_ILUT_NUMERIC { + static void par_ilut_numeric(KernelHandle *handle, + const ARowMapType &A_row_map, + const AEntriesType &A_entries, + const AValuesType &A_values, + LRowMapType &L_row_map, LEntriesType &L_entries, + LValuesType &L_values, URowMapType &U_row_map, + UEntriesType &U_entries, UValuesType &U_values, + bool deterministic = false) { + auto par_ilut_handle = handle->get_par_ilut_handle(); + using Ilut = Experimental::IlutWrap< + typename std::remove_pointer::type>; + + Ilut::ilut_numeric(*handle, *par_ilut_handle, A_row_map, A_entries, + A_values, L_row_map, L_entries, L_values, U_row_map, + U_entries, U_values, deterministic); + } +}; + +#endif +} // namespace Impl +} // namespace KokkosSparse + +// +// Macro for declaration of full specialization of +// This is NOT for users!!! All +// the declarations of full specializations go in this header file. +// We may spread out definitions (see _DEF macro below) across one or +// more .cpp files. +// +#define KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_DECL( \ + SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ + MEM_SPACE_TYPE) \ + extern template struct PAR_ILUT_NUMERIC< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ + Kokkos::View< \ + const OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + const ORDINAL_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + const SCALAR_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + false, true>; + +#define KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_INST( \ + SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ + MEM_SPACE_TYPE) \ + template struct PAR_ILUT_NUMERIC< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ + Kokkos::View< \ + const OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + const ORDINAL_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + const SCALAR_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + false, true>; + +#include +#include + +#endif diff --git a/sparse/impl/KokkosSparse_par_ilut_symbolic_impl.hpp b/sparse/impl/KokkosSparse_par_ilut_symbolic_impl.hpp new file mode 100644 index 0000000000..db5654a4f1 --- /dev/null +++ b/sparse/impl/KokkosSparse_par_ilut_symbolic_impl.hpp @@ -0,0 +1,123 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSSPARSE_IMPL_PAR_ILUT_SYMBOLIC_HPP_ +#define KOKKOSSPARSE_IMPL_PAR_ILUT_SYMBOLIC_HPP_ + +/// \file KokkosSparse_par_ilut_symbolic_impl.hpp +/// \brief Implementation of the symbolic phase of sparse ILU(k). + +#include +#include +#include +#include +#include +#include + +//#define SYMBOLIC_OUTPUT_INFO + +namespace KokkosSparse { +namespace Impl { +namespace Experimental { + +template +void ilut_symbolic(IlutHandle& thandle, const ARowMapType& A_row_map_d, + const AEntriesType& A_entries_d, LRowMapType& L_row_map_d, + URowMapType& U_row_map_d) { + using execution_space = typename ARowMapType::execution_space; + using policy_type = Kokkos::TeamPolicy; + using member_type = typename policy_type::member_type; + using size_type = typename IlutHandle::size_type; + using Ilut = IlutWrap; + + const auto policy = thandle.get_default_team_policy(); + + // Sizing for the initial L/U approximation + Kokkos::parallel_for( + "symbolic sizing", policy, KOKKOS_LAMBDA(const member_type& team) { + const auto row_idx = team.league_rank(); + + const auto row_nnz_begin = A_row_map_d(row_idx); + const auto row_nnz_end = A_row_map_d(row_idx + 1); + + size_type nnzsL_temp = 0, nnzsU_temp = 0; + // Multi-reductions are not supported at the TeamThread level + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(team, row_nnz_begin, row_nnz_end), + [&](const size_type nnz, size_type& nnzsL_inner) { + const auto col_idx = A_entries_d(nnz); + nnzsL_inner += col_idx < row_idx; + }, + nnzsL_temp); + + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(team, row_nnz_begin, row_nnz_end), + [&](const size_type nnz, size_type& nnzsU_inner) { + const auto col_idx = A_entries_d(nnz); + nnzsU_inner += col_idx > row_idx; + }, + nnzsU_temp); + + team.team_barrier(); + + Kokkos::single(Kokkos::PerTeam(team), [&]() { + L_row_map_d(row_idx) = nnzsL_temp + 1; + U_row_map_d(row_idx) = nnzsU_temp + 1; + }); + }); + + const size_type nnzsL = Ilut::prefix_sum(L_row_map_d); + const size_type nnzsU = Ilut::prefix_sum(U_row_map_d); + + thandle.set_nnzL(nnzsL); + thandle.set_nnzU(nnzsU); + +} // end ilut_symbolic + +} // namespace Experimental +} // namespace Impl +} // namespace KokkosSparse + +#endif diff --git a/sparse/impl/KokkosSparse_par_ilut_symbolic_spec.hpp b/sparse/impl/KokkosSparse_par_ilut_symbolic_spec.hpp new file mode 100644 index 0000000000..2ba47683c5 --- /dev/null +++ b/sparse/impl/KokkosSparse_par_ilut_symbolic_spec.hpp @@ -0,0 +1,206 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSSPARSE_IMPL_PAR_ILUT_SYMBOLIC_SPEC_HPP_ +#define KOKKOSSPARSE_IMPL_PAR_ILUT_SYMBOLIC_SPEC_HPP_ + +#include +#include +#include +#include "KokkosSparse_CrsMatrix.hpp" +#include "KokkosKernels_Handle.hpp" + +// Include the actual functors +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +#include +#endif + +namespace KokkosSparse { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct par_ilut_symbolic_eti_spec_avail { + enum : bool { value = false }; +}; + +} // namespace Impl +} // namespace KokkosSparse + +#define KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_AVAIL( \ + SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ + MEM_SPACE_TYPE) \ + template <> \ + struct par_ilut_symbolic_eti_spec_avail< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ + Kokkos::View< \ + const OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + const ORDINAL_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits > > { \ + enum : bool { value = true }; \ + }; + +// Include the actual specialization declarations +#include +#include + +namespace KokkosSparse { +namespace Impl { + +// Unification layer +/// \brief Implementation of KokkosSparse::par_ilut_symbolic + +template ::value, + bool eti_spec_avail = par_ilut_symbolic_eti_spec_avail< + KernelHandle, ARowMapType, AEntriesType, LRowMapType, + URowMapType>::value> +struct PAR_ILUT_SYMBOLIC { + static void par_ilut_symbolic(KernelHandle *handle, + const ARowMapType &A_row_map, + const AEntriesType &A_entries, + LRowMapType &L_row_map, URowMapType &U_row_map); +}; + +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +//! Full specialization of par_ilut_symbolic +// Unification layer +template +struct PAR_ILUT_SYMBOLIC { + static void par_ilut_symbolic(KernelHandle *handle, + const ARowMapType &A_row_map, + const AEntriesType &A_entries, + LRowMapType &L_row_map, + URowMapType &U_row_map) { + auto par_ilut_handle = handle->get_par_ilut_handle(); + + Experimental::ilut_symbolic(*par_ilut_handle, A_row_map, A_entries, + L_row_map, U_row_map); + par_ilut_handle->set_symbolic_complete(); + } +}; +#endif +} // namespace Impl +} // namespace KokkosSparse + +// +// Macro for declaration of full specialization of +// This is NOT for users!!! All +// the declarations of full specializations go in this header file. +// We may spread out definitions (see _DEF macro below) across one or +// more .cpp files. +// +#define KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_DECL( \ + SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ + MEM_SPACE_TYPE) \ + extern template struct PAR_ILUT_SYMBOLIC< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ + Kokkos::View< \ + const OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + const ORDINAL_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + false, true>; + +#define KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_INST( \ + SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ + MEM_SPACE_TYPE) \ + template struct PAR_ILUT_SYMBOLIC< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ + Kokkos::View< \ + const OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + const ORDINAL_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + OFFSET_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + false, true>; + +#include +#include + +#endif diff --git a/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp b/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp index e6c7e05632..258df3b4dc 100644 --- a/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp +++ b/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp @@ -248,10 +248,10 @@ struct SPGEMM_NUMERIC< mkl_numeric(sh, m, n, k, row_mapA, entriesA, valuesA, transposeA, row_mapB, entriesB, valuesB, transposeB, row_mapC, entriesC, valuesC, handle->get_verbose()); + break; #else throw std::runtime_error("MKL was not enabled in this build!"); #endif - break; case SPGEMM_MKL2PHASE: mkl2phase_apply(sh, m, n, k, row_mapA, entriesA, valuesA, transposeA, row_mapB, entriesB, valuesB, transposeB, row_mapC, diff --git a/sparse/src/KokkosKernels_Handle.hpp b/sparse/src/KokkosKernels_Handle.hpp index a918dc61bf..40049c0c48 100644 --- a/sparse/src/KokkosKernels_Handle.hpp +++ b/sparse/src/KokkosKernels_Handle.hpp @@ -49,6 +49,7 @@ #include "KokkosSparse_spadd_handle.hpp" #include "KokkosSparse_sptrsv_handle.hpp" #include "KokkosSparse_spiluk_handle.hpp" +#include "KokkosSparse_par_ilut_handle.hpp" #include "KokkosKernels_default_types.hpp" #ifndef _KOKKOSKERNELHANDLE_HPP @@ -183,8 +184,9 @@ class KokkosKernelsHandle { this->spgemmHandle = right_side_handle.get_spgemm_handle(); this->spaddHandle = right_side_handle.get_spadd_handle(); - this->sptrsvHandle = right_side_handle.get_sptrsv_handle(); - this->spilukHandle = right_side_handle.get_spiluk_handle(); + this->sptrsvHandle = right_side_handle.get_sptrsv_handle(); + this->spilukHandle = right_side_handle.get_spiluk_handle(); + this->par_ilutHandle = right_side_handle.get_par_ilut_handle(); this->team_work_size = right_side_handle.get_set_team_work_size(); this->shared_memory_size = right_side_handle.get_shmem_size(); @@ -201,12 +203,13 @@ class KokkosKernelsHandle { is_owner_of_the_gs_sptrsvL_handle = false; is_owner_of_the_gs_sptrsvU_handle = false; // ---------------------------------------- // - is_owner_of_the_d2_gc_handle = false; - is_owner_of_the_gs_handle = false; - is_owner_of_the_spgemm_handle = false; - is_owner_of_the_spadd_handle = false; - is_owner_of_the_sptrsv_handle = false; - is_owner_of_the_spiluk_handle = false; + is_owner_of_the_d2_gc_handle = false; + is_owner_of_the_gs_handle = false; + is_owner_of_the_spgemm_handle = false; + is_owner_of_the_spadd_handle = false; + is_owner_of_the_sptrsv_handle = false; + is_owner_of_the_spiluk_handle = false; + is_owner_of_the_par_ilut_handle = false; // return *this; } @@ -301,6 +304,11 @@ class KokkosKernelsHandle { HandleTempMemorySpace, HandlePersistentMemorySpace> SPILUKHandleType; + typedef typename KokkosSparse::Experimental::PAR_ILUTHandle< + const_size_type, const_nnz_lno_t, const_nnz_scalar_t, HandleExecSpace, + HandleTempMemorySpace, HandlePersistentMemorySpace> + PAR_ILUTHandleType; + private: GraphColoringHandleType *gcHandle; GraphColorDistance2HandleType *gcHandle_d2; @@ -316,6 +324,7 @@ class KokkosKernelsHandle { SPADDHandleType *spaddHandle; SPTRSVHandleType *sptrsvHandle; SPILUKHandleType *spilukHandle; + PAR_ILUTHandleType *par_ilutHandle; int team_work_size; size_t shared_memory_size; @@ -338,6 +347,7 @@ class KokkosKernelsHandle { bool is_owner_of_the_spadd_handle; bool is_owner_of_the_sptrsv_handle; bool is_owner_of_the_spiluk_handle; + bool is_owner_of_the_par_ilut_handle; public: KokkosKernelsHandle() @@ -354,6 +364,7 @@ class KokkosKernelsHandle { spaddHandle(NULL), sptrsvHandle(NULL), spilukHandle(NULL), + par_ilutHandle(NULL), team_work_size(-1), shared_memory_size(16128), suggested_team_size(-1), @@ -374,7 +385,8 @@ class KokkosKernelsHandle { is_owner_of_the_spgemm_handle(true), is_owner_of_the_spadd_handle(true), is_owner_of_the_sptrsv_handle(true), - is_owner_of_the_spiluk_handle(true) {} + is_owner_of_the_spiluk_handle(true), + is_owner_of_the_par_ilut_handle(true) {} ~KokkosKernelsHandle() { this->destroy_gs_handle(); @@ -389,6 +401,7 @@ class KokkosKernelsHandle { this->destroy_spadd_handle(); this->destroy_sptrsv_handle(); this->destroy_spiluk_handle(); + this->destroy_par_ilut_handle(); } void set_verbose(bool verbose_) { this->KKVERBOSE = verbose_; } @@ -872,6 +885,23 @@ class KokkosKernelsHandle { } } + PAR_ILUTHandleType *get_par_ilut_handle() { return this->par_ilutHandle; } + void create_par_ilut_handle(size_type nrows, size_type nnzL = 0, + size_type nnzU = 0) { + this->destroy_par_ilut_handle(); + this->is_owner_of_the_par_ilut_handle = true; + this->par_ilutHandle = new PAR_ILUTHandleType(nrows, nnzL, nnzU); + this->par_ilutHandle->reset_handle(nrows, nnzL, nnzU); + this->par_ilutHandle->set_team_size(this->team_work_size); + this->par_ilutHandle->set_vector_size(this->vector_size); + } + void destroy_par_ilut_handle() { + if (is_owner_of_the_par_ilut_handle && this->par_ilutHandle != nullptr) { + delete this->par_ilutHandle; + this->par_ilutHandle = nullptr; + } + } + }; // end class KokkosKernelsHandle } // namespace Experimental diff --git a/sparse/src/KokkosSparse.hpp b/sparse/src/KokkosSparse.hpp index 20f33a9002..702db14344 100644 --- a/sparse/src/KokkosSparse.hpp +++ b/sparse/src/KokkosSparse.hpp @@ -60,3 +60,4 @@ #include "KokkosSparse_trsv.hpp" #include "KokkosSparse_spgemm.hpp" #include "KokkosSparse_gauss_seidel.hpp" +#include "KokkosSparse_par_ilut.hpp" diff --git a/sparse/src/KokkosSparse_par_ilut.hpp b/sparse/src/KokkosSparse_par_ilut.hpp new file mode 100644 index 0000000000..8136d3b064 --- /dev/null +++ b/sparse/src/KokkosSparse_par_ilut.hpp @@ -0,0 +1,482 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +/// \file KokkosSparse_par_ilut.hpp +/// \brief Parallel threshold incomplete LU factorization ILU(t) +/// +/// This file provides KokkosSparse::par_ilut. This function performs a +/// local (no MPI) sparse ILU(t) on matrices stored in +/// compressed row sparse ("Crs") format. It is expected that symbolic +/// is called before numeric. The numeric function offers a deterministic +/// flag that will force the function to have deterministic results. This +/// is useful for testing but incurs a big performance penalty. +/// +/// This algorithm is described in the paper: +/// PARILUT - A New Parallel Threshold ILU Factorization - Anzt, Chow, Dongarra + +#ifndef KOKKOSSPARSE_PAR_ILUT_HPP_ +#define KOKKOSSPARSE_PAR_ILUT_HPP_ + +#include + +#include "KokkosKernels_helpers.hpp" +#include "KokkosKernels_Error.hpp" +#include "KokkosSparse_par_ilut_symbolic_spec.hpp" +#include "KokkosSparse_par_ilut_numeric_spec.hpp" + +namespace KokkosSparse { +namespace Experimental { + +#define KOKKOSKERNELS_PAR_ILUT_SAME_TYPE(A, B) \ + std::is_same::type, \ + typename std::remove_const::type>::value + +template +void par_ilut_symbolic(KernelHandle* handle, ARowMapType& A_rowmap, + AEntriesType& A_entries, LRowMapType& L_rowmap, + URowMapType& U_rowmap) { + using size_type = typename KernelHandle::size_type; + using ordinal_type = typename KernelHandle::nnz_lno_t; + + static_assert(KOKKOSKERNELS_PAR_ILUT_SAME_TYPE( + typename ARowMapType::non_const_value_type, size_type), + "par_ilut_symbolic: A size_type must match KernelHandle " + "size_type (const doesn't matter)"); + static_assert(KOKKOSKERNELS_PAR_ILUT_SAME_TYPE( + typename AEntriesType::non_const_value_type, ordinal_type), + "par_ilut_symbolic: A entry type must match KernelHandle entry " + "type (aka nnz_lno_t, and const doesn't matter)"); + + static_assert(KOKKOSKERNELS_PAR_ILUT_SAME_TYPE( + typename LRowMapType::non_const_value_type, size_type), + "par_ilut_symbolic: L size_type must match KernelHandle " + "size_type (const doesn't matter)"); + + static_assert(KOKKOSKERNELS_PAR_ILUT_SAME_TYPE( + typename URowMapType::non_const_value_type, size_type), + "par_ilut_symbolic: U size_type must match KernelHandle " + "size_type (const doesn't matter)"); + + static_assert(Kokkos::is_view::value, + "par_ilut_symbolic: A_rowmap is not a Kokkos::View."); + static_assert(Kokkos::is_view::value, + "par_ilut_symbolic: A_entries is not a Kokkos::View."); + static_assert(Kokkos::is_view::value, + "par_ilut_symbolic: L_rowmap is not a Kokkos::View."); + static_assert(Kokkos::is_view::value, + "par_ilut_symbolic: U_rowmap is not a Kokkos::View."); + + static_assert( + (int)LRowMapType::rank == (int)ARowMapType::rank, + "par_ilut_symbolic: The ranks of L_rowmap and A_rowmap do not match."); + + static_assert( + (int)LRowMapType::rank == (int)URowMapType::rank, + "par_ilut_symbolic: The ranks of L_rowmap and U_rowmap do not match."); + + static_assert(LRowMapType::rank == 1, + "par_ilut_symbolic: A_rowmap, L_rowmap and U_rowmap must all " + "have rank 1."); + + static_assert(std::is_same::value, + "par_ilut_symbolic: The output L_rowmap must be nonconst."); + static_assert(std::is_same::value, + "par_ilut_symbolic: The output U_rowmap must be nonconst."); + static_assert(std::is_same::value, + "par_ilut_symbolic: Views LRowMapType and ARowMapType have " + "different device_types."); + static_assert(std::is_same::value, + "par_ilut_symbolic: Views LRowMapType and URowMapType have " + "different device_types."); + + static_assert( + std::is_same< + typename LRowMapType::device_type::execution_space, + typename KernelHandle::PAR_ILUTHandleType::execution_space>::value, + "par_ilut_symbolic: KernelHandle and Views have different execution " + "spaces."); + + using c_size_t = typename KernelHandle::const_size_type; + using c_lno_t = typename KernelHandle::const_nnz_lno_t; + using c_scalar_t = typename KernelHandle::const_nnz_scalar_t; + + using c_exec_t = typename KernelHandle::HandleExecSpace; + using c_temp_t = typename KernelHandle::HandleTempMemorySpace; + using c_persist_t = typename KernelHandle::HandlePersistentMemorySpace; + + using const_handle_type = + typename KokkosKernels::Experimental::KokkosKernelsHandle< + c_size_t, c_lno_t, c_scalar_t, c_exec_t, c_temp_t, c_persist_t>; + + const_handle_type tmp_handle(*handle); + + using ARowMap_Internal = Kokkos::View< + typename ARowMapType::const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + typename ARowMapType::device_type, + Kokkos::MemoryTraits >; + + using AEntries_Internal = Kokkos::View< + typename AEntriesType::const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout< + AEntriesType>::array_layout, + typename AEntriesType::device_type, + Kokkos::MemoryTraits >; + + using LRowMap_Internal = Kokkos::View< + typename LRowMapType::non_const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + typename LRowMapType::device_type, + Kokkos::MemoryTraits >; + + using URowMap_Internal = Kokkos::View< + typename URowMapType::non_const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + typename URowMapType::device_type, + Kokkos::MemoryTraits >; + + ARowMap_Internal A_rowmap_i = A_rowmap; + AEntries_Internal A_entries_i = A_entries; + LRowMap_Internal L_rowmap_i = L_rowmap; + URowMap_Internal U_rowmap_i = U_rowmap; + + KokkosSparse::Impl::PAR_ILUT_SYMBOLIC< + const_handle_type, ARowMap_Internal, AEntries_Internal, LRowMap_Internal, + URowMap_Internal>::par_ilut_symbolic(&tmp_handle, A_rowmap_i, A_entries_i, + L_rowmap_i, U_rowmap_i); + +} // par_ilut_symbolic + +template +void par_ilut_numeric(KernelHandle* handle, ARowMapType& A_rowmap, + AEntriesType& A_entries, AValuesType& A_values, + LRowMapType& L_rowmap, LEntriesType& L_entries, + LValuesType& L_values, URowMapType& U_rowmap, + UEntriesType& U_entries, UValuesType& U_values, + bool deterministic) { + using size_type = typename KernelHandle::size_type; + using ordinal_type = typename KernelHandle::nnz_lno_t; + using scalar_type = typename KernelHandle::nnz_scalar_t; + + static_assert( + KOKKOSKERNELS_PAR_ILUT_SAME_TYPE( + typename ARowMapType::non_const_value_type, size_type), + "par_ilut_numeric: A size_type must match KernelHandle size_type " + "(const doesn't matter)"); + static_assert(KOKKOSKERNELS_PAR_ILUT_SAME_TYPE( + typename AEntriesType::non_const_value_type, ordinal_type), + "par_ilut_numeric: A entry type must match KernelHandle entry " + "type (aka nnz_lno_t, and const doesn't matter)"); + static_assert(KOKKOSKERNELS_PAR_ILUT_SAME_TYPE( + typename AValuesType::value_type, scalar_type), + "par_ilut_numeric: A scalar type must match KernelHandle entry " + "type (aka nnz_scalar_t, and const doesn't matter)"); + + static_assert( + KOKKOSKERNELS_PAR_ILUT_SAME_TYPE( + typename LRowMapType::non_const_value_type, size_type), + "par_ilut_numeric: L size_type must match KernelHandle size_type " + "(const doesn't matter)"); + static_assert(KOKKOSKERNELS_PAR_ILUT_SAME_TYPE( + typename LEntriesType::non_const_value_type, ordinal_type), + "par_ilut_numeric: L entry type must match KernelHandle entry " + "type (aka nnz_lno_t, and const doesn't matter)"); + static_assert(KOKKOSKERNELS_PAR_ILUT_SAME_TYPE( + typename LValuesType::value_type, scalar_type), + "par_ilut_numeric: L scalar type must match KernelHandle entry " + "type (aka nnz_scalar_t, and const doesn't matter)"); + + static_assert( + KOKKOSKERNELS_PAR_ILUT_SAME_TYPE( + typename URowMapType::non_const_value_type, size_type), + "par_ilut_numeric: U size_type must match KernelHandle size_type " + "(const doesn't matter)"); + static_assert(KOKKOSKERNELS_PAR_ILUT_SAME_TYPE( + typename UEntriesType::non_const_value_type, ordinal_type), + "par_ilut_numeric: U entry type must match KernelHandle entry " + "type (aka nnz_lno_t, and const doesn't matter)"); + static_assert(KOKKOSKERNELS_PAR_ILUT_SAME_TYPE( + typename UValuesType::value_type, scalar_type), + "par_ilut_numeric: U scalar type must match KernelHandle entry " + "type (aka nnz_scalar_t, and const doesn't matter)"); + + static_assert(Kokkos::is_view::value, + "par_ilut_numeric: A_rowmap is not a Kokkos::View."); + static_assert(Kokkos::is_view::value, + "par_ilut_numeric: A_entries is not a Kokkos::View."); + static_assert(Kokkos::is_view::value, + "par_ilut_numeric: A_values is not a Kokkos::View."); + static_assert(Kokkos::is_view::value, + "par_ilut_numeric: L_rowmap is not a Kokkos::View."); + static_assert(Kokkos::is_view::value, + "par_ilut_numeric: L_entries is not a Kokkos::View."); + static_assert(Kokkos::is_view::value, + "par_ilut_numeric: L_values is not a Kokkos::View."); + static_assert(Kokkos::is_view::value, + "par_ilut_numeric: U_rowmap is not a Kokkos::View."); + static_assert(Kokkos::is_view::value, + "par_ilut_numeric: U_entries is not a Kokkos::View."); + static_assert(Kokkos::is_view::value, + "par_ilut_numeric: U_values is not a Kokkos::View."); + + static_assert( + (int)LRowMapType::rank == (int)ARowMapType::rank, + "par_ilut_numeric: The ranks of L_rowmap and A_rowmap do not match."); + static_assert( + (int)LEntriesType::rank == (int)AEntriesType::rank, + "par_ilut_numeric: The ranks of L_entries and A_entries do not match."); + static_assert( + (int)LValuesType::rank == (int)AValuesType::rank, + "par_ilut_numeric: The ranks of L_values and A_values do not match."); + + static_assert( + (int)LRowMapType::rank == (int)URowMapType::rank, + "par_ilut_numeric: The ranks of L_rowmap and U_rowmap do not match."); + static_assert( + (int)LEntriesType::rank == (int)UEntriesType::rank, + "par_ilut_numeric: The ranks of L_entries and U_entries do not match."); + static_assert( + (int)LValuesType::rank == (int)UValuesType::rank, + "par_ilut_numeric: The ranks of L_values and U_values do not match."); + + static_assert(LRowMapType::rank == 1, + "par_ilut_numeric: A_rowmap, L_rowmap and U_rowmap must all " + "have rank 1."); + static_assert(LEntriesType::rank == 1, + "par_ilut_numeric: A_entries, L_entries and U_entries must all " + "have rank 1."); + static_assert(LValuesType::rank == 1, + "par_ilut_numeric: A_values, L_values and U_values must all " + "have rank 1."); + + static_assert( + std::is_same::value, + "par_ilut_numeric: The output L_entries must be nonconst."); + static_assert(std::is_same::value, + "par_ilut_numeric: The output L_values must be nonconst."); + static_assert( + std::is_same::value, + "par_ilut_numeric: The output U_entries must be nonconst."); + static_assert(std::is_same::value, + "par_ilut_numeric: The output U_values must be nonconst."); + + static_assert(std::is_same::value, + "par_ilut_numeric: Views LRowMapType and ARowMapType have " + "different device_types."); + static_assert(std::is_same::value, + "par_ilut_numeric: Views LEntriesType and AEntriesType have " + "different device_types."); + static_assert(std::is_same::value, + "par_ilut_numeric: Views LValuesType and AValuesType have " + "different device_types."); + + static_assert(std::is_same::value, + "par_ilut_numeric: Views LRowMapType and URowMapType have " + "different device_types."); + static_assert(std::is_same::value, + "par_ilut_numeric: Views LEntriesType and UEntriesType have " + "different device_types."); + static_assert(std::is_same::value, + "par_ilut_numeric: Views LValuesType and UValuesType have " + "different device_types."); + + static_assert( + std::is_same< + typename LRowMapType::device_type::execution_space, + typename KernelHandle::PAR_ILUTHandleType::execution_space>::value, + "par_ilut_numeric: KernelHandle and Views have different execution " + "spaces."); + static_assert( + std::is_same< + typename LEntriesType::device_type::execution_space, + typename KernelHandle::PAR_ILUTHandleType::execution_space>::value, + "par_ilut_numeric: KernelHandle and Views have different execution " + "spaces."); + static_assert( + std::is_same< + typename LValuesType::device_type::execution_space, + typename KernelHandle::PAR_ILUTHandleType::execution_space>::value, + "par_ilut_numeric: KernelHandle and Views have different execution " + "spaces."); + + static_assert( + std::is_same::value, + "par_ilut_numeric: rowmap and entries have different device types."); + static_assert( + std::is_same::value, + "par_ilut_numeric: rowmap and values have different device types."); + + // Check if symbolic has been called + if (handle->get_par_ilut_handle()->is_symbolic_complete() == false) { + std::ostringstream os; + os << "KokkosSparse::Experimental::par_ilut_numeric: par_ilut_symbolic " + "must be " + "called before par_ilut_numeric."; + KokkosKernels::Impl::throw_runtime_exception(os.str()); + } + + using c_size_t = typename KernelHandle::const_size_type; + using c_lno_t = typename KernelHandle::const_nnz_lno_t; + using c_scalar_t = typename KernelHandle::const_nnz_scalar_t; + + using c_exec_t = typename KernelHandle::HandleExecSpace; + using c_temp_t = typename KernelHandle::HandleTempMemorySpace; + using c_persist_t = typename KernelHandle::HandlePersistentMemorySpace; + + using const_handle_type = + typename KokkosKernels::Experimental::KokkosKernelsHandle< + c_size_t, c_lno_t, c_scalar_t, c_exec_t, c_temp_t, c_persist_t>; + + const_handle_type tmp_handle(*handle); + + using ARowMap_Internal = Kokkos::View< + typename ARowMapType::const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + typename ARowMapType::device_type, + Kokkos::MemoryTraits >; + + using AEntries_Internal = Kokkos::View< + typename AEntriesType::const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout< + AEntriesType>::array_layout, + typename AEntriesType::device_type, + Kokkos::MemoryTraits >; + + using AValues_Internal = Kokkos::View< + typename AValuesType::const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + typename AValuesType::device_type, + Kokkos::MemoryTraits >; + + using LRowMap_Internal = Kokkos::View< + typename LRowMapType::non_const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + typename LRowMapType::device_type, + Kokkos::MemoryTraits >; + + using LEntries_Internal = + Kokkos::View::array_layout, + typename LEntriesType::device_type, + Kokkos::MemoryTraits >; + + using LValues_Internal = Kokkos::View< + typename LValuesType::non_const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + typename LValuesType::device_type, + Kokkos::MemoryTraits >; + + using URowMap_Internal = Kokkos::View< + typename URowMapType::non_const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + typename URowMapType::device_type, + Kokkos::MemoryTraits >; + + using UEntries_Internal = + Kokkos::View::array_layout, + typename UEntriesType::device_type, + Kokkos::MemoryTraits >; + + using UValues_Internal = Kokkos::View< + typename UValuesType::non_const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + typename UValuesType::device_type, + Kokkos::MemoryTraits >; + + ARowMap_Internal A_rowmap_i = A_rowmap; + AEntries_Internal A_entries_i = A_entries; + AValues_Internal A_values_i = A_values; + LRowMap_Internal L_rowmap_i = L_rowmap; + LEntries_Internal L_entries_i = L_entries; + LValues_Internal L_values_i = L_values; + URowMap_Internal U_rowmap_i = U_rowmap; + UEntries_Internal U_entries_i = U_entries; + UValues_Internal U_values_i = U_values; + + KokkosSparse::Impl::PAR_ILUT_NUMERIC< + const_handle_type, ARowMap_Internal, AEntries_Internal, AValues_Internal, + LRowMap_Internal, LEntries_Internal, LValues_Internal, URowMap_Internal, + UEntries_Internal, + UValues_Internal>::par_ilut_numeric(&tmp_handle, A_rowmap_i, A_entries_i, + A_values_i, L_rowmap_i, L_entries_i, + L_values_i, U_rowmap_i, U_entries_i, + U_values_i, deterministic); + + // These may have been resized + L_entries = L_entries_i; + L_values = L_values_i; + U_entries = U_entries_i; + U_values = U_values_i; + +} // par_ilut_numeric + +} // namespace Experimental +} // namespace KokkosSparse + +#undef KOKKOSKERNELS_PAR_ILUT_SAME_TYPE + +#endif // KOKKOSSPARSE_PAR_ILUT_HPP_ diff --git a/sparse/src/KokkosSparse_par_ilut_handle.hpp b/sparse/src/KokkosSparse_par_ilut_handle.hpp new file mode 100644 index 0000000000..d8bc6b11f2 --- /dev/null +++ b/sparse/src/KokkosSparse_par_ilut_handle.hpp @@ -0,0 +1,196 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include +#include + +#ifndef _PAR_ILUTHANDLE_HPP +#define _PAR_ILUTHANDLE_HPP + +#define KEEP_DIAG + +namespace KokkosSparse { +namespace Experimental { + +template +class PAR_ILUTHandle { + public: + using HandleExecSpace = ExecutionSpace; + using HandleTempMemorySpace = TemporaryMemorySpace; + using HandlePersistentMemorySpace = PersistentMemorySpace; + + using execution_space = ExecutionSpace; + using memory_space = HandlePersistentMemorySpace; + using TeamPolicy = Kokkos::TeamPolicy; + using RangePolicy = Kokkos::RangePolicy; + + using size_type = typename std::remove_const::type; + using const_size_type = const size_type; + + using nnz_lno_t = typename std::remove_const::type; + using const_nnz_lno_t = const nnz_lno_t; + + using nnz_scalar_t = typename std::remove_const::type; + using const_nnz_scalar_t = const nnz_scalar_t; + + using float_t = typename Kokkos::ArithTraits::mag_type; + + using nnz_row_view_t = + typename Kokkos::View; + + using nnz_lno_view_t = + typename Kokkos::View; + + using nnz_value_view_t = + typename Kokkos::View; + + using signed_integral_t = typename std::make_signed< + typename nnz_row_view_t::non_const_value_type>::type; + + using signed_nnz_lno_view_t = + Kokkos::View; + + private: + size_type nrows; + size_type nnzL; + size_type nnzU; + size_type max_iter; + nnz_scalar_t residual_norm_delta_stop; + + bool symbolic_complete; + + int team_size; + int vector_size; + + float_t fill_in_limit; + + public: + PAR_ILUTHandle(const size_type nrows_, const size_type nnzL_ = 0, + const size_type nnzU_ = 0, const size_type max_iter_ = 1, + const nnz_scalar_t residual_norm_delta_stop_ = 0., + const float_t fill_in_limit_ = 0.75, + bool symbolic_complete_ = false) + : nrows(nrows_), + nnzL(nnzL_), + nnzU(nnzU_), + max_iter(max_iter_), + residual_norm_delta_stop(residual_norm_delta_stop_), + symbolic_complete(symbolic_complete_), + team_size(-1), + vector_size(-1), + fill_in_limit(fill_in_limit_) {} + + void reset_handle(const size_type nrows_, const size_type nnzL_, + const size_type nnzU_) { + set_nrows(nrows_); + set_nnzL(nnzL_); + set_nnzU(nnzU_); + reset_symbolic_complete(); + } + + KOKKOS_INLINE_FUNCTION + ~PAR_ILUTHandle() {} + + KOKKOS_INLINE_FUNCTION + size_type get_nrows() const { return nrows; } + + KOKKOS_INLINE_FUNCTION + void set_nrows(const size_type nrows_) { this->nrows = nrows_; } + + KOKKOS_INLINE_FUNCTION + size_type get_nnzL() const { return nnzL; } + + KOKKOS_INLINE_FUNCTION + void set_nnzL(const size_type nnzL_) { this->nnzL = nnzL_; } + + KOKKOS_INLINE_FUNCTION + size_type get_nnzU() const { return nnzU; } + + KOKKOS_INLINE_FUNCTION + void set_nnzU(const size_type nnzU_) { this->nnzU = nnzU_; } + + bool is_symbolic_complete() const { return symbolic_complete; } + + void set_symbolic_complete() { this->symbolic_complete = true; } + void reset_symbolic_complete() { this->symbolic_complete = false; } + + void set_team_size(const int ts) { this->team_size = ts; } + int get_team_size() const { return this->team_size; } + + void set_vector_size(const int vs) { this->vector_size = vs; } + int get_vector_size() const { return this->vector_size; } + + void set_max_iter(const size_type max_iter_) { this->max_iter = max_iter_; } + int get_max_iter() const { return this->max_iter; } + + void set_residual_norm_delta_stop( + const nnz_scalar_t residual_norm_delta_stop_) { + this->residual_norm_delta_stop = residual_norm_delta_stop_; + } + nnz_scalar_t get_residual_norm_delta_stop() const { + return this->residual_norm_delta_stop; + } + + void set_fill_in_limit(const float_t fill_in_limit_) { + this->fill_in_limit = fill_in_limit_; + } + float_t get_fill_in_limit() const { return this->fill_in_limit; } + + TeamPolicy get_default_team_policy() const { + if (team_size == -1) { + return TeamPolicy(nrows, Kokkos::AUTO); + } else { + return TeamPolicy(nrows, team_size); + } + } +}; + +} // namespace Experimental +} // namespace KokkosSparse + +#endif diff --git a/sparse/src/KokkosSparse_spadd.hpp b/sparse/src/KokkosSparse_spadd.hpp index 38bead14de..50c862f27c 100644 --- a/sparse/src/KokkosSparse_spadd.hpp +++ b/sparse/src/KokkosSparse_spadd.hpp @@ -57,8 +57,7 @@ namespace Experimental { // kernel handle has information about whether it is sorted add or not. template + typename blno_nnz_view_t_, typename clno_row_view_t_> void spadd_symbolic( KernelHandle* handle, const alno_row_view_t_ a_rowmap, const alno_nnz_view_t_ a_entries, const blno_row_view_t_ b_rowmap, @@ -222,13 +221,9 @@ void spadd_symbolic(KernelHandle* handle, const AMatrix& A, const BMatrix& B, row_map_type row_mapC( Kokkos::view_alloc(Kokkos::WithoutInitializing, "row map"), A.numRows() + 1); - KokkosSparse::Experimental::spadd_symbolic< - KernelHandle, typename AMatrix::row_map_type::const_type, - typename AMatrix::index_type::const_type, - typename BMatrix::row_map_type::const_type, - typename BMatrix::index_type::const_type, row_map_type, entries_type>( - handle, A.graph.row_map, A.graph.entries, B.graph.row_map, - B.graph.entries, row_mapC); + KokkosSparse::Experimental::spadd_symbolic(handle, A.graph.row_map, + A.graph.entries, B.graph.row_map, + B.graph.entries, row_mapC); // Now create and allocate the entries and values // views so we can build a graph and then matrix C diff --git a/sparse/src/KokkosSparse_spgemm_handle.hpp b/sparse/src/KokkosSparse_spgemm_handle.hpp index 7514082ef1..feb0e66afd 100644 --- a/sparse/src/KokkosSparse_spgemm_handle.hpp +++ b/sparse/src/KokkosSparse_spgemm_handle.hpp @@ -235,7 +235,7 @@ class SPGEMMHandle { }; #else struct cuSparseSpgemmHandleType { - cusparse_spgemm_handle_t handle; + cusparseHandle_t handle; cusparseOperation_t transA; cusparseOperation_t transB; cusparseMatDescr_t a_descr; diff --git a/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_avail.hpp new file mode 100644 index 0000000000..748c1ae1ae --- /dev/null +++ b/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_avail.hpp @@ -0,0 +1,62 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSPARSE_PAR_ILUT_NUMERIC_TPL_SPEC_AVAIL_HPP_ +#define KOKKOSPARSE_PAR_ILUT_NUMERIC_TPL_SPEC_AVAIL_HPP_ + +namespace KokkosSparse { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct par_ilut_numeric_tpl_spec_avail { + enum : bool { value = false }; +}; + +} // namespace Impl +} // namespace KokkosSparse + +#endif diff --git a/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_decl.hpp new file mode 100644 index 0000000000..f59c1bdb55 --- /dev/null +++ b/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_decl.hpp @@ -0,0 +1,52 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSPARSE_PAR_ILUT_NUMERIC_TPL_SPEC_DECL_HPP_ +#define KOKKOSPARSE_PAR_ILUT_NUMERIC_TPL_SPEC_DECL_HPP_ + +namespace KokkosSparse { +namespace Impl {} +} // namespace KokkosSparse + +#endif diff --git a/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_avail.hpp new file mode 100644 index 0000000000..f63df5d638 --- /dev/null +++ b/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_avail.hpp @@ -0,0 +1,60 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSPARSE_PAR_ILUT_SYMBOLIC_TPL_SPEC_AVAIL_HPP_ +#define KOKKOSPARSE_PAR_ILUT_SYMBOLIC_TPL_SPEC_AVAIL_HPP_ + +namespace KokkosSparse { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct par_ilut_symbolic_tpl_spec_avail { + enum : bool { value = false }; +}; + +} // namespace Impl +} // namespace KokkosSparse + +#endif diff --git a/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_decl.hpp new file mode 100644 index 0000000000..e30dee508a --- /dev/null +++ b/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_decl.hpp @@ -0,0 +1,52 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSPARSE_PAR_ILUT_SYMBOLIC_TPL_SPEC_DECL_HPP_ +#define KOKKOSPARSE_PAR_ILUT_SYMBOLIC_TPL_SPEC_DECL_HPP_ + +namespace KokkosSparse { +namespace Impl {} +} // namespace KokkosSparse + +#endif diff --git a/sparse/unit_test/Test_Sparse.hpp b/sparse/unit_test/Test_Sparse.hpp index 33269b6b0e..cde0ede5e3 100644 --- a/sparse/unit_test/Test_Sparse.hpp +++ b/sparse/unit_test/Test_Sparse.hpp @@ -20,6 +20,7 @@ #include "Test_Sparse_spmv_bsr.hpp" #include "Test_Sparse_sptrsv.hpp" #include "Test_Sparse_trsv.hpp" +#include "Test_Sparse_par_ilut.hpp" #include "Test_Sparse_Transpose.hpp" #include "Test_Sparse_TestUtils_RandCscMat.hpp" #include "Test_Sparse_csc2csr.hpp" diff --git a/sparse/unit_test/Test_Sparse_par_ilut.hpp b/sparse/unit_test/Test_Sparse_par_ilut.hpp new file mode 100644 index 0000000000..85d2f8d7c9 --- /dev/null +++ b/sparse/unit_test/Test_Sparse_par_ilut.hpp @@ -0,0 +1,327 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +#include +#include + +#include "KokkosSparse_CrsMatrix.hpp" +#include "KokkosKernels_IOUtils.hpp" +#include "KokkosBlas1_nrm2.hpp" +#include "KokkosSparse_spmv.hpp" +#include "KokkosSparse_par_ilut.hpp" + +#include + +using namespace KokkosSparse; +using namespace KokkosSparse::Experimental; +using namespace KokkosKernels; +using namespace KokkosKernels::Experimental; + +typedef Kokkos::complex kokkos_complex_double; +typedef Kokkos::complex kokkos_complex_float; + +namespace Test { + +template +std::vector> decompress_matrix( + Kokkos::View& row_map, + Kokkos::View& entries, + Kokkos::View& values) { + const size_type nrows = row_map.size() - 1; + std::vector> result; + result.resize(nrows); + for (auto& row : result) { + row.resize(nrows, 0.0); + } + + auto hrow_map = Kokkos::create_mirror_view(row_map); + auto hentries = Kokkos::create_mirror_view(entries); + auto hvalues = Kokkos::create_mirror_view(values); + Kokkos::deep_copy(hrow_map, row_map); + Kokkos::deep_copy(hentries, entries); + Kokkos::deep_copy(hvalues, values); + + for (size_type row_idx = 0; row_idx < nrows; ++row_idx) { + const size_type row_nnz_begin = hrow_map(row_idx); + const size_type row_nnz_end = hrow_map(row_idx + 1); + for (size_type row_nnz = row_nnz_begin; row_nnz < row_nnz_end; ++row_nnz) { + const lno_t col_idx = hentries(row_nnz); + const scalar_t value = hvalues(row_nnz); + result[row_idx][col_idx] = value; + } + } + + return result; +} + +template +void check_matrix(const std::string& name, + Kokkos::View& row_map, + Kokkos::View& entries, + Kokkos::View& values, + const std::vector>& expected) { + const auto decompressed_mtx = decompress_matrix(row_map, entries, values); + + const size_type nrows = row_map.size() - 1; + for (size_type row_idx = 0; row_idx < nrows; ++row_idx) { + for (size_type col_idx = 0; col_idx < nrows; ++col_idx) { + EXPECT_NEAR(expected[row_idx][col_idx], + decompressed_mtx[row_idx][col_idx], 0.01) + << "Failed check is: " << name << "[" << row_idx << "][" << col_idx + << "]"; + } + } +} + +template +void print_matrix(const std::vector>& matrix) { + for (const auto& row : matrix) { + for (const auto& item : row) { + std::printf("%.2f ", item); + } + std::cout << std::endl; + } +} + +template +void run_test_par_ilut() { + typedef Kokkos::View RowMapType; + typedef Kokkos::View EntriesType; + typedef Kokkos::View ValuesType; + + // Simple test fixture A + std::vector> A = {{1., 6., 4., 7.}, + {2., -5., 0., 8.}, + {0.5, -3., 6., 0.}, + {0.2, -0.5, -9., 0.}}; + + const scalar_t ZERO = scalar_t(0); + + const size_type nrows = A.size(); + + // Count A nnz's + size_type nnz = 0; + for (size_type row_idx = 0; row_idx < nrows; ++row_idx) { + for (size_type col_idx = 0; col_idx < nrows; ++col_idx) { + if (A[row_idx][col_idx] != ZERO) { + ++nnz; + } + } + } + + // Allocate device CRS views for A + RowMapType row_map("row_map", nrows + 1); + EntriesType entries("entries", nnz); + ValuesType values("values", nnz); + + // Create host mirror views for CRS A + auto hrow_map = Kokkos::create_mirror_view(row_map); + auto hentries = Kokkos::create_mirror_view(entries); + auto hvalues = Kokkos::create_mirror_view(values); + + // Compress A into CRS (host views) + size_type curr_nnz = 0; + for (size_type row_idx = 0; row_idx < nrows; ++row_idx) { + for (size_type col_idx = 0; col_idx < nrows; ++col_idx) { + if (A[row_idx][col_idx] != ZERO) { + hentries(curr_nnz) = col_idx; + hvalues(curr_nnz) = A[row_idx][col_idx]; + ++curr_nnz; + } + hrow_map(row_idx + 1) = curr_nnz; + } + } + + // Copy host A CRS views to device A CRS views + Kokkos::deep_copy(row_map, hrow_map); + Kokkos::deep_copy(entries, hentries); + Kokkos::deep_copy(values, hvalues); + + // Make kernel handle + typedef KokkosKernels::Experimental::KokkosKernelsHandle< + size_type, lno_t, scalar_t, typename device::execution_space, + typename device::memory_space, typename device::memory_space> + KernelHandle; + + KernelHandle kh; + + kh.create_par_ilut_handle(nrows); + + auto par_ilut_handle = kh.get_par_ilut_handle(); + + // Allocate L and U CRS views as outputs + RowMapType L_row_map("L_row_map", nrows + 1); + RowMapType U_row_map("U_row_map", nrows + 1); + + // Initial L/U approximations for A + par_ilut_symbolic(&kh, row_map, entries, L_row_map, U_row_map); + + const size_type nnzL = par_ilut_handle->get_nnzL(); + const size_type nnzU = par_ilut_handle->get_nnzU(); + + EXPECT_EQ(nnzL, 10); + EXPECT_EQ(nnzU, 8); + + EntriesType L_entries("L_entries", nnzL); + ValuesType L_values("L_values", nnzL); + EntriesType U_entries("U_entries", nnzU); + ValuesType U_values("U_values", nnzU); + + par_ilut_numeric(&kh, row_map, entries, values, L_row_map, L_entries, + L_values, U_row_map, U_entries, U_values, +#ifdef KOKKOS_ENABLE_SERIAL + true /*deterministic*/ +#else + false /*cannot ask for determinism*/ +#endif + ); + + // Use this to check LU + // std::vector > expected_LU = { + // {1.0, 6.0, 4.0, 7.0}, + // {2.0, 7.0, 8.0, 22.0}, + // {0.5, 18.0, 8.0, -20.5}, + // {0.2, 3.7, -53.2, -1.60} + // }; + + // check_matrix("LU numeric", L_row_map, L_entries, L_values, expected_LU); + + // Use these fixtures to test add_candidates + // std::vector > expected_L_candidates = { + // {1., 0., 0., 0.}, + // {2., 1., 0., 0.}, + // {0.50, -3., 1., 0.}, + // {0.20, -0.50, -9., 1.} + // }; + + // check_matrix("L numeric", L_row_map, L_entries, L_values, + // expected_L_candidates); + + // std::vector > expected_U_candidates = { + // {1., 6., 4., 7.}, + // {0., -5., -8., 8.}, + // {0., 0., 6., 20.50}, + // {0., 0., 0., 1.} + // }; + + // check_matrix("U numeric", U_row_map, U_entries, U_values, + // expected_U_candidates); + + // Use these fixtures to test compute_l_u_factors + // std::vector > expected_L_candidates = { + // {1., 0., 0., 0.}, + // {2., 1., 0., 0.}, + // {0.50, 0.35, 1., 0.}, + // {0.20, 0.10, -1.32, 1.} + // }; + + // check_matrix("L numeric", L_row_map, L_entries, L_values, + // expected_L_candidates); + + // std::vector > expected_U_candidates = { + // {1., 6., 4., 7.}, + // {0., -17., -8., -6.}, + // {0., 0., 6.82, -1.38}, + // {0., 0., 0., -2.62} + // }; + + // check_matrix("U numeric", U_row_map, U_entries, U_values, + // expected_U_candidates); + + // Serial is required for deterministic mode and the checks below cannot + // reliably pass without determinism. +#ifdef KOKKOS_ENABLE_SERIAL + + // Use these fixtures to test full numeric + std::vector> expected_L_candidates = { + {1., 0., 0., 0.}, + {2., 1., 0., 0.}, + {0.50, 0.35, 1., 0.}, + {0., 0., -1.32, 1.}}; + + check_matrix("L numeric", L_row_map, L_entries, L_values, + expected_L_candidates); + + std::vector> expected_U_candidates = { + {1., 6., 4., 7.}, + {0., -17., -8., -6.}, + {0., 0., 6.82, 0.}, + {0., 0., 0., 0.} // [3] = 0 for full alg, -2.62 for post-threshold only + }; + + check_matrix("U numeric", U_row_map, U_entries, U_values, + expected_U_candidates); + + // Checking + + kh.destroy_par_ilut_handle(); +#endif +} + +} // namespace Test + +template +void test_par_ilut() { + Test::run_test_par_ilut(); +} + +#define KOKKOSKERNELS_EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ + TEST_F(TestCategory, \ + sparse##_##par_ilut##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ + test_par_ilut(); \ + } + +#define NO_TEST_COMPLEX + +#include + +#undef KOKKOSKERNELS_EXECUTE_TEST +#define NO_TEST_COMPLEX diff --git a/sparse/unit_test/Test_Sparse_spadd.hpp b/sparse/unit_test/Test_Sparse_spadd.hpp index 881f891837..84d30a7dde 100644 --- a/sparse/unit_test/Test_Sparse_spadd.hpp +++ b/sparse/unit_test/Test_Sparse_spadd.hpp @@ -114,12 +114,9 @@ void test_spadd(lno_t numRows, lno_t numCols, size_type minNNZ, // initialized Kokkos::deep_copy(c_row_map, (size_type)5); auto addHandle = handle.get_spadd_handle(); - KokkosSparse::Experimental::spadd_symbolic< - KernelHandle, typename row_map_type::const_type, - typename entries_type::const_type, typename row_map_type::const_type, - typename entries_type::const_type, row_map_type, entries_type>( - &handle, A.graph.row_map, A.graph.entries, B.graph.row_map, - B.graph.entries, c_row_map); + KokkosSparse::Experimental::spadd_symbolic(&handle, A.graph.row_map, + A.graph.entries, B.graph.row_map, + B.graph.entries, c_row_map); size_type c_nnz = addHandle->get_c_nnz(); // Fill values, entries with incorrect incorret values_type c_values( @@ -127,15 +124,10 @@ void test_spadd(lno_t numRows, lno_t numCols, size_type minNNZ, Kokkos::deep_copy(c_values, ((typename KAT::mag_type)5) * KAT::one()); entries_type c_entries("C entries", c_nnz); Kokkos::deep_copy(c_entries, (lno_t)5); - KokkosSparse::Experimental::spadd_numeric< - KernelHandle, typename row_map_type::const_type, - typename entries_type::const_type, scalar_t, - typename values_type::const_type, typename row_map_type::const_type, - typename entries_type::const_type, scalar_t, - typename values_type::const_type, row_map_type, entries_type, - values_type>(&handle, A.graph.row_map, A.graph.entries, A.values, - KAT::one(), B.graph.row_map, B.graph.entries, B.values, - KAT::one(), c_row_map, c_entries, c_values); + KokkosSparse::Experimental::spadd_numeric( + &handle, A.graph.row_map, A.graph.entries, A.values, KAT::one(), + B.graph.row_map, B.graph.entries, B.values, KAT::one(), c_row_map, + c_entries, c_values); // done with handle // create C using CRS arrays crsMat_t C("C", numRows, numCols, c_nnz, c_values, c_row_map, c_entries); From a80d58c086aaf95d02cd7f1c27dce3fe14d715ce Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Sat, 29 Oct 2022 11:51:00 -0600 Subject: [PATCH 132/226] ROTG: fixing TPL layer and its ETI, see issue #1577 A couple of obvious mistake made it into the repo, I am not sure how these have been able to pass the auto-tester? --- blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp | 4 ++-- blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp index 4d1320c402..a17a5cdb05 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp @@ -139,7 +139,7 @@ KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutRight, Kokkos::Cuda, Kokkos::CudaSpace) KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, Kokkos::CudaSpace) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutRight, Kokkos::Cuda, Kokkos::CudaSpace) KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, Kokkos::LayoutLeft, Kokkos::Cuda, @@ -160,7 +160,7 @@ KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutRight, Kokkos::Cuda, Kokkos::CudaUVMSpace) KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, Kokkos::CudaUVMSpace) -KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, +KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutRight, Kokkos::Cuda, Kokkos::CudaUVMSpace) KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, Kokkos::LayoutLeft, Kokkos::Cuda, diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp index 7847abe6ec..63f5e6dd5c 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp @@ -320,7 +320,7 @@ namespace Impl { #define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ ETI_SPEC_AVAIL) \ - template \ + template <> \ struct Rotg< \ EXECSPACE, \ Kokkos::View, LAYOUT, \ @@ -329,9 +329,9 @@ namespace Impl { Kokkos::View, \ Kokkos::MemoryTraits>, \ true, ETI_SPEC_AVAIL> { \ - using SViewTypeKokkos::View, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>; \ + using SViewType = Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>;\ using MViewType = \ Kokkos::View, \ Kokkos::MemoryTraits>; \ @@ -355,7 +355,7 @@ namespace Impl { #define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ ETI_SPEC_AVAIL) \ - template \ + template <> \ struct Rotg, LAYOUT, \ Kokkos::Device, \ @@ -529,7 +529,7 @@ namespace Impl { #define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ ETI_SPEC_AVAIL) \ - template \ + template <> \ struct Rotg< \ EXECSPACE, \ Kokkos::View, LAYOUT, \ @@ -565,7 +565,7 @@ namespace Impl { #define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ ETI_SPEC_AVAIL) \ - template \ + template <> \ struct Rotg, LAYOUT, \ Kokkos::Device, \ From a798539df4cb482a8f8a447ad459873761e47960 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Sat, 29 Oct 2022 11:54:48 -0600 Subject: [PATCH 133/226] ROTG: applying clang-format --- blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp | 66 ++++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp index 63f5e6dd5c..c53fd9f5a0 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp @@ -318,39 +318,39 @@ namespace Impl { } \ }; -#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg< \ - EXECSPACE, \ - Kokkos::View, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - true, ETI_SPEC_AVAIL> { \ - using SViewType = Kokkos::View, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>;\ - using MViewType = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rotg(EXECSPACE const& space, SViewType const& a, \ - SViewType const& b, MViewType const& c, \ - SViewType const& s) { \ - Kokkos::Profiling::pushRegion( \ - "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ - rotg_print_specialization, EXECSPACE>(); \ - KokkosBlas::Impl::CudaBlasSingleton& singleton = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetStream(singleton.handle, space.cuda_stream())); \ - cublasZrotg(singleton.handle, \ - reinterpret_cast(a.data()), \ - reinterpret_cast(b.data()), c.data(), \ - reinterpret_cast(s.data())); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg< \ + EXECSPACE, \ + Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const& space, SViewType const& a, \ + SViewType const& b, MViewType const& c, \ + SViewType const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ + rotg_print_specialization, EXECSPACE>(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + cublasZrotg(singleton.handle, \ + reinterpret_cast(a.data()), \ + reinterpret_cast(b.data()), c.data(), \ + reinterpret_cast(s.data())); \ + Kokkos::Profiling::popRegion(); \ + } \ }; #define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ From 117ca6829072b447bdee3d6b7b6029da0458d6c2 Mon Sep 17 00:00:00 2001 From: Vinh Dang Date: Sun, 30 Oct 2022 00:10:10 -0700 Subject: [PATCH 134/226] Allow int64_t --- .../KokkosSparse_sptrsv_cuSPARSE_impl.hpp | 75 +++++++++++++------ sparse/src/KokkosSparse_sptrsv_handle.hpp | 18 ++++- 2 files changed, 69 insertions(+), 24 deletions(-) diff --git a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp index a07217538e..ed380c6d01 100644 --- a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp @@ -72,11 +72,14 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, std::is_same::value || std::is_same::value; + const bool is_idx_type_supported = std::is_same::value || + std::is_same::value; + if (!is_cuda_space) { throw std::runtime_error( "KokkosKernels sptrsvcuSPARSE_symbolic: MEMORY IS NOT ALLOCATED IN GPU " "DEVICE for CUSPARSE\n"); - } else if (std::is_same::value) { + } else if (is_idx_type_supported) { bool is_lower = sptrsv_handle->is_lower_tri(); sptrsv_handle->create_cuSPARSE_Handle(trans, is_lower); @@ -87,17 +90,37 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, int64_t nnz = static_cast(entries.extent(0)); size_t pBufferSize; - - if (!std::is_same::value) - sptrsv_handle->allocate_tmp_int_rowmap(row_map.extent(0)); - const int* rm = !std::is_same::value - ? sptrsv_handle->get_int_rowmap_ptr_copy(row_map) - : (const int*)row_map.data(); - const int* ent = (const int*)entries.data(); - const scalar_type* vals = values.data(); + void* rm; + //NOTE (Oct-29-2022): + //cusparseCreateCsr only supports the same sizes (either 32 bits or 64 bits) + //for row_map_type and entries_type + if (std::is_same::value) { + if (!std::is_same::value) + sptrsv_handle->allocate_tmp_int_rowmap(row_map.extent(0)); + rm = !std::is_same::value + ? (void*)sptrsv_handle->get_int_rowmap_ptr_copy(row_map) + : (void*)row_map.data(); + } + else {//idx_type has 64 bits + if (!std::is_same::value) + sptrsv_handle->allocate_tmp_int64_rowmap(row_map.extent(0)); + rm = !std::is_same::value + ? (void*)sptrsv_handle->get_int64_rowmap_ptr_copy(row_map) + : (void*)row_map.data(); + } const scalar_type alpha = scalar_type(1.0); + cusparseIndexType_t cudaCsrColIndType, cudaCsrRowMapType; cudaDataType cudaValueType; + + if (std::is_same::value) { + cudaCsrColIndType = CUSPARSE_INDEX_32I; + cudaCsrRowMapType = CUSPARSE_INDEX_32I; + } else {//idx_type has 64 bits + cudaCsrColIndType = CUSPARSE_INDEX_64I; + cudaCsrRowMapType = CUSPARSE_INDEX_64I; + } + if (std::is_same::value) { cudaValueType = CUDA_R_64F; } else if (std::is_same::value) { @@ -112,8 +135,8 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, // Create sparse matrix in CSR format status = cusparseCreateCsr(&(h->matDescr), static_cast(nrows), static_cast(nrows), nnz, - (void*)rm, (void*)ent, (void*)vals, - CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, + rm, (void*)entries.data(), (void*)values.data(), + cudaCsrRowMapType, cudaCsrColIndType, CUSPARSE_INDEX_BASE_ZERO, cudaValueType); // Create dummy dense vector B (RHS) @@ -164,7 +187,7 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, std::cout << "analysis status error name " << (status) << std::endl; } else { throw std::runtime_error( - "CUSPARSE requires local ordinals to be integer.\n"); + "CUSPARSE requires local ordinals to be integer (32 bits or 64 bits).\n"); } #else //CUDA_VERSION < 11030 typedef typename KernelHandle::nnz_lno_t idx_type; @@ -319,20 +342,26 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, typedef typename KernelHandle::nnz_lno_t idx_type; typedef typename KernelHandle::size_type size_type; typedef typename KernelHandle::scalar_t scalar_type; + typedef typename KernelHandle::memory_space memory_space; - if (std::is_same::value) { + const bool is_cuda_space = + std::is_same::value || + std::is_same::value || + std::is_same::value; + + const bool is_idx_type_supported = std::is_same::value || + std::is_same::value; + + if (!is_cuda_space) { + throw std::runtime_error( + "KokkosKernels sptrsvcuSPARSE_solve: MEMORY IS NOT ALLOCATED IN GPU " + "DEVICE for CUSPARSE\n"); + } else if (is_idx_type_supported) { cusparseStatus_t status; typename KernelHandle::SPTRSVcuSparseHandleType* h = sptrsv_handle->get_cuSparseHandle(); - //const int* rm = !std::is_same::value - // ? sptrsv_handle->get_int_rowmap_ptr() - // : (const int*)row_map.data(); - //const int* ent = (const int*)entries.data(); - //const scalar_type* vals = values.data(); - const scalar_type* bv = rhs.data(); - scalar_type* xv = lhs.data(); const scalar_type alpha = scalar_type(1.0); cudaDataType cudaValueType; @@ -349,10 +378,10 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, } // Create dense vector B (RHS) - cusparseCreateDnVec(&(h->vecBDescr), static_cast(nrows), (void*)bv, cudaValueType); + cusparseCreateDnVec(&(h->vecBDescr), static_cast(nrows), (void*)rhs.data(), cudaValueType); // Create dense vector X (LHS) - cusparseCreateDnVec(&(h->vecXDescr), static_cast(nrows), (void*)xv, cudaValueType); + cusparseCreateDnVec(&(h->vecXDescr), static_cast(nrows), (void*)lhs.data(), cudaValueType); //Solve status = cusparseSpSV_solve(h->handle, h->transpose, &alpha, h->matDescr, @@ -363,7 +392,7 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, std::cout << "solve status error name " << (status) << std::endl; } else { throw std::runtime_error( - "CUSPARSE requires local ordinals to be integer.\n"); + "CUSPARSE requires local ordinals to be integer (32 bits or 64 bits).\n"); } #else //CUDA_VERSION < 11030 typedef typename KernelHandle::nnz_lno_t idx_type; diff --git a/sparse/src/KokkosSparse_sptrsv_handle.hpp b/sparse/src/KokkosSparse_sptrsv_handle.hpp index da24e55108..5dbc4073ad 100644 --- a/sparse/src/KokkosSparse_sptrsv_handle.hpp +++ b/sparse/src/KokkosSparse_sptrsv_handle.hpp @@ -108,6 +108,8 @@ class SPTRSVHandle { typedef typename nnz_row_view_t::HostMirror host_nnz_row_view_t; typedef typename Kokkos::View int_row_view_t; + typedef typename Kokkos::View + int64_row_view_t; // typedef typename row_lno_persistent_work_view_t::HostMirror // row_lno_persistent_work_host_view_t; //Host view type typedef typename Kokkos::View< @@ -383,6 +385,7 @@ class SPTRSVHandle { #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE SPTRSVcuSparseHandleType *cuSPARSEHandle; int_row_view_t tmp_int_rowmap; + int64_row_view_t tmp_int64_rowmap; #endif #ifdef KOKKOSKERNELS_ENABLE_SUPERNODAL_SPTRSV @@ -489,7 +492,8 @@ class SPTRSVHandle { #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE , cuSPARSEHandle(nullptr), - tmp_int_rowmap() + tmp_int_rowmap(), + tmp_int64_rowmap() #endif #ifdef KOKKOSKERNELS_ENABLE_SUPERNODAL_SPTRSV , @@ -897,6 +901,18 @@ class SPTRSVHandle { } int_row_view_t get_int_rowmap_view() { return tmp_int_rowmap; } int *get_int_rowmap_ptr() { return tmp_int_rowmap.data(); } + + void allocate_tmp_int64_rowmap(size_type N) { + tmp_int64_rowmap = int64_row_view_t( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "tmp_int64_rowmap"), N); + } + template + int64_t *get_int64_rowmap_ptr_copy(const RowViewType &rowmap) { + Kokkos::deep_copy(tmp_int64_rowmap, rowmap); + Kokkos::fence(); + return tmp_int64_rowmap.data(); + } + int64_t *get_int64_rowmap_ptr() { return tmp_int64_rowmap.data(); } #endif bool algm_requires_symb_lvlsched() const { From 9c964e7c5ccd5055108b036a8400bc9b099fc832 Mon Sep 17 00:00:00 2001 From: Vinh Dang Date: Sun, 30 Oct 2022 00:36:44 -0700 Subject: [PATCH 135/226] Apply clang format --- .../KokkosSparse_sptrsv_cuSPARSE_impl.hpp | 89 ++++++++++--------- sparse/src/KokkosSparse_sptrsv_handle.hpp | 4 +- 2 files changed, 51 insertions(+), 42 deletions(-) diff --git a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp index ed380c6d01..2fe3daa6c8 100644 --- a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp @@ -74,7 +74,7 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, const bool is_idx_type_supported = std::is_same::value || std::is_same::value; - + if (!is_cuda_space) { throw std::runtime_error( "KokkosKernels sptrsvcuSPARSE_symbolic: MEMORY IS NOT ALLOCATED IN GPU " @@ -91,17 +91,16 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, int64_t nnz = static_cast(entries.extent(0)); size_t pBufferSize; void* rm; - //NOTE (Oct-29-2022): - //cusparseCreateCsr only supports the same sizes (either 32 bits or 64 bits) - //for row_map_type and entries_type + // NOTE (Oct-29-2022): + // cusparseCreateCsr only supports the same sizes (either 32 bits or 64 + // bits) for row_map_type and entries_type if (std::is_same::value) { if (!std::is_same::value) sptrsv_handle->allocate_tmp_int_rowmap(row_map.extent(0)); rm = !std::is_same::value ? (void*)sptrsv_handle->get_int_rowmap_ptr_copy(row_map) : (void*)row_map.data(); - } - else {//idx_type has 64 bits + } else { // idx_type has 64 bits if (!std::is_same::value) sptrsv_handle->allocate_tmp_int64_rowmap(row_map.extent(0)); rm = !std::is_same::value @@ -116,7 +115,7 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, if (std::is_same::value) { cudaCsrColIndType = CUSPARSE_INDEX_32I; cudaCsrRowMapType = CUSPARSE_INDEX_32I; - } else {//idx_type has 64 bits + } else { // idx_type has 64 bits cudaCsrColIndType = CUSPARSE_INDEX_64I; cudaCsrRowMapType = CUSPARSE_INDEX_64I; } @@ -134,38 +133,43 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, } // Create sparse matrix in CSR format - status = cusparseCreateCsr(&(h->matDescr), static_cast(nrows), static_cast(nrows), nnz, - rm, (void*)entries.data(), (void*)values.data(), + status = cusparseCreateCsr(&(h->matDescr), static_cast(nrows), + static_cast(nrows), nnz, rm, + (void*)entries.data(), (void*)values.data(), cudaCsrRowMapType, cudaCsrColIndType, CUSPARSE_INDEX_BASE_ZERO, cudaValueType); // Create dummy dense vector B (RHS) - nnz_scalar_view_t b_dummy ( "b_dummy", nrows ); - cusparseCreateDnVec(&(h->vecBDescr_dummy), static_cast(nrows), b_dummy.data(), cudaValueType); + nnz_scalar_view_t b_dummy("b_dummy", nrows); + cusparseCreateDnVec(&(h->vecBDescr_dummy), static_cast(nrows), + b_dummy.data(), cudaValueType); // Create dummy dense vector X (LHS) - nnz_scalar_view_t x_dummy ( "x_dummy", nrows ); - cusparseCreateDnVec(&(h->vecXDescr_dummy), static_cast(nrows), x_dummy.data(), cudaValueType); + nnz_scalar_view_t x_dummy("x_dummy", nrows); + cusparseCreateDnVec(&(h->vecXDescr_dummy), static_cast(nrows), + x_dummy.data(), cudaValueType); // Specify Lower|Upper fill mode if (is_lower) { cusparseFillMode_t fillmode = CUSPARSE_FILL_MODE_LOWER; - cusparseSpMatSetAttribute(h->matDescr, CUSPARSE_SPMAT_FILL_MODE, &fillmode, sizeof(fillmode)); - } - else { + cusparseSpMatSetAttribute(h->matDescr, CUSPARSE_SPMAT_FILL_MODE, + &fillmode, sizeof(fillmode)); + } else { cusparseFillMode_t fillmode = CUSPARSE_FILL_MODE_UPPER; - cusparseSpMatSetAttribute(h->matDescr, CUSPARSE_SPMAT_FILL_MODE, &fillmode, sizeof(fillmode)); - } + cusparseSpMatSetAttribute(h->matDescr, CUSPARSE_SPMAT_FILL_MODE, + &fillmode, sizeof(fillmode)); + } // Specify Unit|Non-Unit diagonal type. cusparseDiagType_t diagtype = CUSPARSE_DIAG_TYPE_NON_UNIT; - cusparseSpMatSetAttribute(h->matDescr, CUSPARSE_SPMAT_DIAG_TYPE, &diagtype, sizeof(diagtype)); + cusparseSpMatSetAttribute(h->matDescr, CUSPARSE_SPMAT_DIAG_TYPE, &diagtype, + sizeof(diagtype)); // Allocate an external buffer for analysis - status = cusparseSpSV_bufferSize(h->handle, h->transpose, - &alpha, h->matDescr, h->vecBDescr_dummy, h->vecXDescr_dummy, cudaValueType, - CUSPARSE_SPSV_ALG_DEFAULT, h->spsvDescr, - &pBufferSize); + status = cusparseSpSV_bufferSize( + h->handle, h->transpose, &alpha, h->matDescr, h->vecBDescr_dummy, + h->vecXDescr_dummy, cudaValueType, CUSPARSE_SPSV_ALG_DEFAULT, + h->spsvDescr, &pBufferSize); if (CUSPARSE_STATUS_SUCCESS != status) std::cout << "bufferSize status error name " << (status) << std::endl; @@ -178,18 +182,20 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, std::cout << "cudmalloc pBuffer error_t error name " << cudaGetErrorString(my_error) << std::endl; - //Run analysis - status = cusparseSpSV_analysis(h->handle, h->transpose, - &alpha, h->matDescr, h->vecBDescr_dummy, h->vecXDescr_dummy, cudaValueType, - CUSPARSE_SPSV_ALG_DEFAULT, h->spsvDescr, h->pBuffer); + // Run analysis + status = cusparseSpSV_analysis(h->handle, h->transpose, &alpha, h->matDescr, + h->vecBDescr_dummy, h->vecXDescr_dummy, + cudaValueType, CUSPARSE_SPSV_ALG_DEFAULT, + h->spsvDescr, h->pBuffer); if (CUSPARSE_STATUS_SUCCESS != status) std::cout << "analysis status error name " << (status) << std::endl; } else { throw std::runtime_error( - "CUSPARSE requires local ordinals to be integer (32 bits or 64 bits).\n"); + "CUSPARSE requires local ordinals to be integer (32 bits or 64 " + "bits).\n"); } -#else //CUDA_VERSION < 11030 +#else // CUDA_VERSION < 11030 typedef typename KernelHandle::nnz_lno_t idx_type; typedef typename KernelHandle::size_type size_type; typedef typename KernelHandle::scalar_t scalar_type; @@ -223,9 +229,9 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, if (!std::is_same::value) sptrsv_handle->allocate_tmp_int_rowmap(row_map.extent(0)); - const int* rm = !std::is_same::value - ? sptrsv_handle->get_int_rowmap_ptr_copy(row_map) - : (const int*)row_map.data(); + const int* rm = !std::is_same::value + ? sptrsv_handle->get_int_rowmap_ptr_copy(row_map) + : (const int*)row_map.data(); const int* ent = (const int*)entries.data(); const scalar_type* vals = values.data(); @@ -378,12 +384,14 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, } // Create dense vector B (RHS) - cusparseCreateDnVec(&(h->vecBDescr), static_cast(nrows), (void*)rhs.data(), cudaValueType); + cusparseCreateDnVec(&(h->vecBDescr), static_cast(nrows), + (void*)rhs.data(), cudaValueType); // Create dense vector X (LHS) - cusparseCreateDnVec(&(h->vecXDescr), static_cast(nrows), (void*)lhs.data(), cudaValueType); + cusparseCreateDnVec(&(h->vecXDescr), static_cast(nrows), + (void*)lhs.data(), cudaValueType); - //Solve + // Solve status = cusparseSpSV_solve(h->handle, h->transpose, &alpha, h->matDescr, h->vecBDescr, h->vecXDescr, cudaValueType, CUSPARSE_SPSV_ALG_DEFAULT, h->spsvDescr); @@ -392,9 +400,10 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, std::cout << "solve status error name " << (status) << std::endl; } else { throw std::runtime_error( - "CUSPARSE requires local ordinals to be integer (32 bits or 64 bits).\n"); + "CUSPARSE requires local ordinals to be integer (32 bits or 64 " + "bits).\n"); } -#else //CUDA_VERSION < 11030 +#else // CUDA_VERSION < 11030 typedef typename KernelHandle::nnz_lno_t idx_type; typedef typename KernelHandle::size_type size_type; typedef typename KernelHandle::scalar_t scalar_type; @@ -407,9 +416,9 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, int nnz = entries.extent_int(0); - const int* rm = !std::is_same::value - ? sptrsv_handle->get_int_rowmap_ptr() - : (const int*)row_map.data(); + const int* rm = !std::is_same::value + ? sptrsv_handle->get_int_rowmap_ptr() + : (const int*)row_map.data(); const int* ent = (const int*)entries.data(); const scalar_type* vals = values.data(); const scalar_type* bv = rhs.data(); diff --git a/sparse/src/KokkosSparse_sptrsv_handle.hpp b/sparse/src/KokkosSparse_sptrsv_handle.hpp index 5dbc4073ad..cf1b1ee564 100644 --- a/sparse/src/KokkosSparse_sptrsv_handle.hpp +++ b/sparse/src/KokkosSparse_sptrsv_handle.hpp @@ -163,7 +163,7 @@ class SPTRSVHandle { cusparseSpMatDescr_t matDescr; cusparseDnVecDescr_t vecBDescr, vecBDescr_dummy; cusparseDnVecDescr_t vecXDescr, vecXDescr_dummy; - cusparseSpSVDescr_t spsvDescr; + cusparseSpSVDescr_t spsvDescr; void *pBuffer{nullptr}; cuSparseHandleType(bool transpose_, bool is_lower) { @@ -200,7 +200,7 @@ class SPTRSVHandle { cusparseDestroy(handle); } }; -#else //CUDA_VERSION < 11030 +#else // CUDA_VERSION < 11030 struct cuSparseHandleType { cusparseHandle_t handle; cusparseOperation_t transpose; From 74906cfec369014dc7cd2bc3541dad86f521d22b Mon Sep 17 00:00:00 2001 From: Vinh Dang Date: Sun, 30 Oct 2022 00:45:42 -0700 Subject: [PATCH 136/226] Apply clang format --- sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp index 2fe3daa6c8..3f4af7dbd1 100644 --- a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp @@ -455,9 +455,9 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, cualpha.x = 1.0; cualpha.y = 0.0; status = cusparseZcsrsv2_solve( - h->handle, h->transpose, nrows, nnz, &cualpha, h->descr, - (cuDoubleComplex*)vals, (int*)rm, (int*)ent, h->info, - (cuDoubleComplex*)bv, (cuDoubleComplex*)xv, h->policy, h->pBuffer); + h->handle, h->transpose, nrows, nnz, &cualpha, h->descr, + (cuDoubleComplex*)vals, (int*)rm, (int*)ent, h->info, + (cuDoubleComplex*)bv, (cuDoubleComplex*)xv, h->policy, h->pBuffer); if (CUSPARSE_STATUS_SUCCESS != status) std::cout << "solve status error name " << (status) << std::endl; @@ -466,9 +466,9 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, cualpha.x = 1.0; cualpha.y = 0.0; status = cusparseCcsrsv2_solve( - h->handle, h->transpose, nrows, nnz, &cualpha, h->descr, - (cuComplex*)vals, (int*)rm, (int*)ent, h->info, (cuComplex*)bv, - (cuComplex*)xv, h->policy, h->pBuffer); + h->handle, h->transpose, nrows, nnz, &cualpha, h->descr, + (cuComplex*)vals, (int*)rm, (int*)ent, h->info, (cuComplex*)bv, + (cuComplex*)xv, h->policy, h->pBuffer); if (CUSPARSE_STATUS_SUCCESS != status) std::cout << "solve status error name " << (status) << std::endl; From f566a2f1003e7e2c9681ca2e6d0178a76a4330dc Mon Sep 17 00:00:00 2001 From: Vinh Dang Date: Sun, 30 Oct 2022 00:51:24 -0700 Subject: [PATCH 137/226] Apply clang format --- .../KokkosSparse_sptrsv_cuSPARSE_impl.hpp | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp index 3f4af7dbd1..d7c44579fe 100644 --- a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp @@ -229,9 +229,9 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, if (!std::is_same::value) sptrsv_handle->allocate_tmp_int_rowmap(row_map.extent(0)); - const int* rm = !std::is_same::value - ? sptrsv_handle->get_int_rowmap_ptr_copy(row_map) - : (const int*)row_map.data(); + const int* rm = !std::is_same::value + ? sptrsv_handle->get_int_rowmap_ptr_copy(row_map) + : (const int*)row_map.data(); const int* ent = (const int*)entries.data(); const scalar_type* vals = values.data(); @@ -416,9 +416,9 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, int nnz = entries.extent_int(0); - const int* rm = !std::is_same::value - ? sptrsv_handle->get_int_rowmap_ptr() - : (const int*)row_map.data(); + const int* rm = !std::is_same::value + ? sptrsv_handle->get_int_rowmap_ptr() + : (const int*)row_map.data(); const int* ent = (const int*)entries.data(); const scalar_type* vals = values.data(); const scalar_type* bv = rhs.data(); @@ -455,9 +455,9 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, cualpha.x = 1.0; cualpha.y = 0.0; status = cusparseZcsrsv2_solve( - h->handle, h->transpose, nrows, nnz, &cualpha, h->descr, - (cuDoubleComplex*)vals, (int*)rm, (int*)ent, h->info, - (cuDoubleComplex*)bv, (cuDoubleComplex*)xv, h->policy, h->pBuffer); + h->handle, h->transpose, nrows, nnz, &cualpha, h->descr, + (cuDoubleComplex*)vals, (int*)rm, (int*)ent, h->info, + (cuDoubleComplex*)bv, (cuDoubleComplex*)xv, h->policy, h->pBuffer); if (CUSPARSE_STATUS_SUCCESS != status) std::cout << "solve status error name " << (status) << std::endl; @@ -466,9 +466,9 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, cualpha.x = 1.0; cualpha.y = 0.0; status = cusparseCcsrsv2_solve( - h->handle, h->transpose, nrows, nnz, &cualpha, h->descr, - (cuComplex*)vals, (int*)rm, (int*)ent, h->info, (cuComplex*)bv, - (cuComplex*)xv, h->policy, h->pBuffer); + h->handle, h->transpose, nrows, nnz, &cualpha, h->descr, + (cuComplex*)vals, (int*)rm, (int*)ent, h->info, (cuComplex*)bv, + (cuComplex*)xv, h->policy, h->pBuffer); if (CUSPARSE_STATUS_SUCCESS != status) std::cout << "solve status error name " << (status) << std::endl; From b63cef4359deba2b51c62e1739c49f9cd1470367 Mon Sep 17 00:00:00 2001 From: Daniel Arndt Date: Mon, 31 Oct 2022 19:08:17 +0000 Subject: [PATCH 138/226] Update kk_get_free_total_memory for SYCL --- common/src/KokkosKernels_ExecSpaceUtils.hpp | 38 ++++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/common/src/KokkosKernels_ExecSpaceUtils.hpp b/common/src/KokkosKernels_ExecSpaceUtils.hpp index 41e750e93e..09943d695f 100644 --- a/common/src/KokkosKernels_ExecSpaceUtils.hpp +++ b/common/src/KokkosKernels_ExecSpaceUtils.hpp @@ -50,7 +50,7 @@ #if defined(KOKKOS_ENABLE_SYCL) && defined(KOKKOS_ARCH_INTEL_GPU) #include -#include +#include #endif namespace KokkosKernels { @@ -225,25 +225,29 @@ inline void kk_get_free_total_memory( uint32_t n_memory_modules = 0; zesDeviceEnumMemoryModules(level_zero_handle, &n_memory_modules, nullptr); - if (n_memory_modules != 1) { - std::ostringstream oss; - oss << "Error: number of memory modules for the SYCL backend: " - << n_memory_modules - << ". We only support querying free/total memory if exactly one memory " - "module was found. Make sure that ZES_ENABLE_SYSMAN=1 is set at run " - "time if no memeory modules were found!"; - throw std::runtime_error(oss.str()); + if (n_memory_modules == 0) { + throw std::runtime_error( + "Error: No memory modules for the SYCL backend found. Make sure that " + "ZES_ENABLE_SYSMAN=1 is set at run time!"); } - zes_mem_handle_t memory_module_handle; + total_mem = 0; + free_mem = 0; + std::vector mem_handles(n_memory_modules); zesDeviceEnumMemoryModules(level_zero_handle, &n_memory_modules, - &memory_module_handle); - zes_mem_state_t memory_properties{ - ZES_STRUCTURE_TYPE_MEM_PROPERTIES, - }; - zesMemoryGetState(memory_module_handle, &memory_properties); - total_mem = memory_properties.size; - free_mem = memory_properties.free; + mem_handles.data()); + + for (auto& mem_handle : mem_handles) { + zes_mem_properties_t memory_properties{ZES_STRUCTURE_TYPE_MEM_PROPERTIES}; + zesMemoryGetProperties(mem_handle, &memory_properties); + // Only report HBM which zeMemAllocDevice allocates from. + if (memory_properties.type != ZES_MEM_TYPE_HBM) continue; + + zes_mem_state_t memory_states{ZES_STRUCTURE_TYPE_MEM_STATE}; + zesMemoryGetState(mem_handle, &memory_states); + total_mem += memory_states.size; + free_mem += memory_states.free; + } } template <> From 9429243336677e536fdf6747ee9ff979b407b5a0 Mon Sep 17 00:00:00 2001 From: brian-kelley Date: Mon, 31 Oct 2022 23:20:50 -0600 Subject: [PATCH 139/226] ParILUT: convert two lambdas to functors (#1580) This works around a possible compiler bug. cudaErrorInvalidDeviceFunction was raised at runtime even though these lambdas are marked KOKKOS_LAMBDA and -expt-extended-lambda was being passed to nvcc. Strange because the code looks fine, and there are many other lambdas in the ParILUT implementation. --- .../KokkosSparse_par_ilut_numeric_impl.hpp | 129 +++++++++++++----- 1 file changed, 94 insertions(+), 35 deletions(-) diff --git a/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp b/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp index f66e4586ac..d3e74bc530 100644 --- a/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp +++ b/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp @@ -607,6 +607,93 @@ struct IlutWrap { return karith::abs(values_copy(rank)); } + template + struct ThresholdFilterCountFunctor { + using float_t = typename IlutHandle::float_t; + ThresholdFilterCountFunctor(const float_t threshold_, + const IRowMapType& I_row_map_, + const IEntriesType& I_entries_, + const IValuesType& I_values_, + const ORowMapType& O_row_map_) + : threshold(threshold_), + I_row_map(I_row_map_), + I_entries(I_entries_), + I_values(I_values_), + O_row_map(O_row_map_) {} + + KOKKOS_INLINE_FUNCTION void operator()(const member_type& team) const { + const auto row_idx = team.league_rank(); + + const auto row_nnx_begin = I_row_map(row_idx); + const auto row_nnx_end = I_row_map(row_idx + 1); + + size_type count = 0; + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(team, row_nnx_begin, row_nnx_end), + [&](const size_type nnz, size_type& count_inner) { + if (karith::abs(I_values(nnz)) >= threshold || + I_entries(nnz) == row_idx) { + count_inner += 1; + } + }, + count); + + Kokkos::single(Kokkos::PerTeam(team), + [=]() { O_row_map(row_idx) = count; }); + } + + float_t threshold; + IRowMapType I_row_map; + IEntriesType I_entries; + IValuesType I_values; + ORowMapType O_row_map; + }; + + template + struct ThresholdFilterAssignFunctor { + using float_t = typename IlutHandle::float_t; + ThresholdFilterAssignFunctor(const float_t threshold_, + const IRowMapType& I_row_map_, + const IEntriesType& I_entries_, + const IValuesType& I_values_, + const ORowMapType& O_row_map_, + const OEntriesType& O_entries_, + const OValuesType& O_values_) + : threshold(threshold_), + I_row_map(I_row_map_), + I_entries(I_entries_), + I_values(I_values_), + O_row_map(O_row_map_), + O_entries(O_entries_), + O_values(O_values_) {} + + KOKKOS_INLINE_FUNCTION void operator()(const size_type row_idx) const { + const auto i_row_nnx_begin = I_row_map(row_idx); + const auto i_row_nnx_end = I_row_map(row_idx + 1); + + auto onnz = O_row_map(row_idx); + + for (size_type innz = i_row_nnx_begin; innz < i_row_nnx_end; ++innz) { + if (karith::abs(I_values(innz)) >= threshold || + static_cast(I_entries(innz)) == row_idx) { + O_entries(onnz) = I_entries(innz); + O_values(onnz) = I_values(innz); + ++onnz; + } + } + } + + float_t threshold; + IRowMapType I_row_map; + IEntriesType I_entries; + IValuesType I_values; + ORowMapType O_row_map; + OEntriesType O_entries; + OValuesType O_values; + }; + /** * Remove non-diagnal elements that are below the threshold. */ @@ -624,26 +711,9 @@ struct IlutWrap { Kokkos::parallel_for( "threshold_filter count", policy, - KOKKOS_LAMBDA(const member_type& team) { - const auto row_idx = team.league_rank(); - - const auto row_nnx_begin = I_row_map(row_idx); - const auto row_nnx_end = I_row_map(row_idx + 1); - - size_type count = 0; - Kokkos::parallel_reduce( - Kokkos::TeamThreadRange(team, row_nnx_begin, row_nnx_end), - [&](const size_type nnz, size_type& count_inner) { - if (karith::abs(I_values(nnz)) >= threshold || - I_entries(nnz) == row_idx) { - count_inner += 1; - } - }, - count); - - Kokkos::single(Kokkos::PerTeam(team), - [=]() { O_row_map(row_idx) = count; }); - }); + ThresholdFilterCountFunctor( + threshold, I_row_map, I_entries, I_values, O_row_map)); const auto new_nnz = prefix_sum(O_row_map); @@ -652,21 +722,10 @@ struct IlutWrap { Kokkos::parallel_for( "threshold_filter assign", range_policy(0, nrows), - KOKKOS_LAMBDA(const size_type row_idx) { - const auto i_row_nnx_begin = I_row_map(row_idx); - const auto i_row_nnx_end = I_row_map(row_idx + 1); - - auto onnz = O_row_map(row_idx); - - for (size_type innz = i_row_nnx_begin; innz < i_row_nnx_end; ++innz) { - if (karith::abs(I_values(innz)) >= threshold || - static_cast(I_entries(innz)) == row_idx) { - O_entries(onnz) = I_entries(innz); - O_values(onnz) = I_values(innz); - ++onnz; - } - } - }); + ThresholdFilterAssignFunctor( + threshold, I_row_map, I_entries, I_values, O_row_map, O_entries, + O_values)); } /** From 36136d89f453a71480a065168da86bc9bd9ae9ef Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Tue, 25 Oct 2022 14:02:33 -0600 Subject: [PATCH 140/226] scripts/cm_test_all_sandia: Add cuda11 tpl spot check --- scripts/cm_test_all_sandia | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index f52d5ac150..fb3a086620 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -704,7 +704,7 @@ elif [ "$MACHINE" = "weaver" ]; then # used with rhel8 queue RHEL8_BASE_MODULE_LIST="cmake/3.21.2,/" # Cuda/11 modules available only on the dev queue (rhel8 OS); gcc/8.3.1 load by default - RHEL8_CUDA11_MODULE_LIST="cmake/3.21.2,/,openblas/0.3.18/gcc/8.3.1" + RHEL8_CUDA11_MODULE_LIST="cmake/3.21.2,/,openblas/0.3.20/gcc/9.3.0" # Don't do Threads on weaver GCC_IBM_BUILD_LIST="OpenMP,Serial,OpenMP_Serial" @@ -722,6 +722,7 @@ elif [ "$MACHINE" = "weaver" ]; then "gcc/7.4.0 $GCC74_MODULE_TPL_LIST "OpenMP" g++ $GCC_WARNING_FLAGS" "cuda/9.2.88 $CUDA_MODULE_TPL_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/10.1.243 $CUDA10_MODULE_TPL_LIST "Cuda_Serial" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + "cuda/11.2.2 $RHEL8_CUDA11_MODULE_LIST "Cuda_Serial" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "gcc/9.3.0 $GCC93_MODULE_TPL_LIST "OpenMP,Serial" g++ $GCC_WARNING_FLAGS" "clang/13.0.0 $CLANG13_MODULE_TPL_LIST "Cuda" clang++ $CUDA_WARNING_FLAGS" ) From 491fbfba3c183c5d7ba2b2eb5fdd1e3a9e2a8bac Mon Sep 17 00:00:00 2001 From: brian-kelley Date: Tue, 1 Nov 2022 19:52:01 -0600 Subject: [PATCH 141/226] First phase of SpGEMM TPL refactor (#1582) * Remove cusparse handles from CrsMatrix * Add cusparse spgemm wrapper for 11.0-11.3 It reuses less than the interfaces of 11.4+ or 10.x (having to call the full compute in symbolic to get C_nnz) but is still an improvement over SPGEMM_KK. * Run format --- .../KokkosSparse_spgemm_cuSPARSE_impl.hpp | 132 ++++++++++++++++-- sparse/src/KokkosSparse_CrsMatrix.hpp | 51 +------ sparse/src/KokkosSparse_spgemm_handle.hpp | 14 +- 3 files changed, 131 insertions(+), 66 deletions(-) diff --git a/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp index 932101e42c..e20ab4acd9 100644 --- a/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp @@ -91,6 +91,8 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, // CUDA_VERSION coming along with CUDAToolkit is easier to find than // CUSPARSE_VERSION #if (CUDA_VERSION >= 11040) + // Newest versions of cuSPARSE have the generic SpGEMM interface, with "reuse" + // functions. if (!std::is_same::value || !std::is_same::value) { throw std::runtime_error( @@ -141,6 +143,7 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_workEstimation( h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, h->alg, h->spgemmDescr, &bufferSize1, buffer1)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer1)); //---------------------------------------------------------------------- // Compute nnz of C @@ -158,7 +161,6 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, h->alg, h->spgemmDescr, &bufferSize2, buffer2, &h->bufferSize3, h->buffer3, &h->bufferSize4, h->buffer4)); - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer1)); KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer2)); int64_t C_nrow, C_ncol, C_nnz; @@ -172,8 +174,89 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, (void)row_mapC; #elif defined(CUSPARSE_VERSION) && (11000 <= CUSPARSE_VERSION) - throw std::runtime_error( - "SpGEMM cuSPARSE backend is not yet supported for this CUDA version\n"); + // cuSPARSE from CUDA 11.0-11.3 (inclusive) supports the new "generic" SpGEMM + // interface, just not the "reuse" set of functions. This means compute must + // be called in both symbolic and numeric (otherwise, the NNZ of C can't be + // known by symbolic) + if (!std::is_same::value || + !std::is_same::value) { + throw std::runtime_error( + "cusparseSpGEMM requires local ordinals to be 32-bit integer."); + } + + handle->set_sort_option(1); // tells users the output is sorted + handle->create_cusparse_spgemm_handle(transposeA, transposeB); + typename KernelHandle::cuSparseSpgemmHandleType *h = + handle->get_cusparse_spgemm_handle(); + + // Follow + // https://github.com/NVIDIA/CUDALibrarySamples/blob/master/cuSPARSE/spgemm + + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); + + // In non-reuse interface, forced to give A,B dummy values to + // cusparseSpGEMM_compute. And it actually reads them, so they must be + // allocated and of the correct type. This compute will be called again in + // numeric with the real values. + // + // The dummy values can be uninitialized. cusparseSpGEMM_compute does + // not remove numerical zeros from the sparsity pattern. + void *dummyValues; + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc( + &dummyValues, + sizeof(scalar_type) * std::max(entriesA.extent(0), entriesB.extent(0)))); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &h->descr_A, m, n, entriesA.extent(0), (void *)row_mapA.data(), + (void *)entriesA.data(), dummyValues, CUSPARSE_INDEX_32I, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &h->descr_B, n, k, entriesB.extent(0), (void *)row_mapB.data(), + (void *)entriesB.data(), dummyValues, CUSPARSE_INDEX_32I, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &h->descr_C, m, k, 0, NULL, NULL, NULL, CUSPARSE_INDEX_32I, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); + + //---------------------------------------------------------------------- + // query workEstimation buffer size, allocate, then call again with buffer. + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_workEstimation( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, h->alg, h->spgemmDescr, &h->bufferSize3, + NULL)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&h->buffer3, h->bufferSize3)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_workEstimation( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, h->alg, h->spgemmDescr, &h->bufferSize3, + h->buffer3)); + + //---------------------------------------------------------------------- + // query compute buffer size, allocate, then call again with buffer. + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr, + &h->bufferSize4, NULL)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&h->buffer4, h->bufferSize4)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr, + &h->bufferSize4, h->buffer4)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(dummyValues)); + + int64_t C_nrow, C_ncol, C_nnz; + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSpMatGetSize(h->descr_C, &C_nrow, &C_ncol, &C_nnz)); + if (C_nnz > std::numeric_limits::max()) { + throw std::runtime_error("nnz of C overflowed over 32-bit int\n"); + } + handle->set_c_nnz(C_nnz); + h->C_populated = false; // sparsity pattern of C is not set yet + (void)row_mapC; + #else if (std::is_same::value && std::is_same::value) { @@ -252,7 +335,7 @@ void cuSPARSE_apply( #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE typedef typename KernelHandle::nnz_lno_t idx; - typedef typename KernelHandle::nnz_scalar_t value_type; + typedef typename KernelHandle::nnz_scalar_t scalar_type; typedef typename ain_row_index_view_type::device_type device1; typedef typename ain_nonzero_index_view_type::device_type device2; @@ -303,8 +386,8 @@ void cuSPARSE_apply( } // C' = alpha * opA(A) * opB(B) + beta * C - const auto alpha = Kokkos::ArithTraits::one(); - const auto beta = Kokkos::ArithTraits::zero(); + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); // alpha, beta are on host, but since we use singleton on the cusparse // handle, we save/restore the pointer mode to not interference with @@ -325,9 +408,32 @@ void cuSPARSE_apply( (void)k; #elif (CUSPARSE_VERSION >= 11000) - throw std::runtime_error( - "SpGEMM cuSPARSE backend is not yet supported for this CUDA version\n"); + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); + typename KernelHandle::cuSparseSpgemmHandleType *h = + handle->get_cusparse_spgemm_handle(); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_A, (void *)row_mapA.data(), + (void *)entriesA.data(), (void *)valuesA.data())); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_B, (void *)row_mapB.data(), + (void *)entriesB.data(), (void *)valuesB.data())); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_C, (void *)row_mapC.data(), + (void *)entriesC.data(), (void *)valuesC.data())); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr, + &h->bufferSize4, h->buffer4)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_copy( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr)); + (void)m; + (void)n; + (void)k; + #else + if (std::is_same::value) { int *a_xadj = (int *)row_mapA.data(); int *b_xadj = (int *)row_mapB.data(); @@ -343,16 +449,16 @@ void cuSPARSE_apply( int nnzA = entriesA.extent(0); int nnzB = entriesB.extent(0); - value_type *a_ew = (value_type *)valuesA.data(); - value_type *b_ew = (value_type *)valuesB.data(); - value_type *c_ew = (value_type *)valuesC.data(); + scalar_type *a_ew = (scalar_type *)valuesA.data(); + scalar_type *b_ew = (scalar_type *)valuesB.data(); + scalar_type *c_ew = (scalar_type *)valuesC.data(); - if (std::is_same::value) { + if (std::is_same::value) { cusparseScsrgemm(h->handle, h->transA, h->transB, m, n, k, h->a_descr, nnzA, (float *)a_ew, a_xadj, a_adj, h->b_descr, nnzB, (float *)b_ew, b_xadj, b_adj, h->c_descr, (float *)c_ew, c_xadj, c_adj); - } else if (std::is_same::value) { + } else if (std::is_same::value) { cusparseDcsrgemm(h->handle, h->transA, h->transB, m, n, k, h->a_descr, nnzA, (double *)a_ew, a_xadj, a_adj, h->b_descr, nnzB, (double *)b_ew, b_xadj, b_adj, h->c_descr, diff --git a/sparse/src/KokkosSparse_CrsMatrix.hpp b/sparse/src/KokkosSparse_CrsMatrix.hpp index 9cbb22c38d..c39ce348e4 100644 --- a/sparse/src/KokkosSparse_CrsMatrix.hpp +++ b/sparse/src/KokkosSparse_CrsMatrix.hpp @@ -438,11 +438,6 @@ class CrsMatrix { size_type> const_type; -#ifdef KOKKOS_USE_CUSPARSE - cusparseHandle_t cusparse_handle; - cusparseMatDescr_t cusparse_descr; -#endif // KOKKOS_USE_CUSPARSE - /// \name Storage of the actual sparsity structure and values. /// /// CrsMatrix uses the compressed sparse row (CSR) storage format to @@ -491,13 +486,7 @@ class CrsMatrix { : graph(B.graph.entries, B.graph.row_map), values(B.values), numCols_(B.numCols()), - dev_config(B.dev_config) -#ifdef KOKKOS_USE_CUSPARSE - , - cusparse_handle(B.cusparse_handle), - cusparse_descr(B.cusparse_descr) -#endif // KOKKOS_USE_CUSPARSE - { + dev_config(B.dev_config) { graph.row_block_offsets = B.graph.row_block_offsets; // TODO: MD 07/2017: Changed the copy constructor of graph // as the constructor of StaticCrsGraph does not allow copy from non const @@ -523,11 +512,6 @@ class CrsMatrix { numCols_ = mat_.numCols(); graph = StaticCrsGraphType(cols, rowmap); - -#ifdef KOKKOS_USE_CUSPARSE - cusparseCreate(&cusparse_handle); - cusparseCreateMatDescr(&cusparse_descr); -#endif // KOKKOS_USE_CUSPARSE } /// \brief Construct with a graph that will be shared. @@ -560,12 +544,7 @@ class CrsMatrix { const OrdinalType& ncols) : graph(graph_.entries, graph_.row_map), values(label, graph_.entries.extent(0)), - numCols_(ncols) { -#ifdef KOKKOS_USE_CUSPARSE - cusparseCreate(&cusparse_handle); - cusparseCreateMatDescr(&cusparse_descr); -#endif // KOKKOS_USE_CUSPARSE - } + numCols_(ncols) {} /// \brief Constructor that accepts a a static graph, and values. /// @@ -586,12 +565,7 @@ class CrsMatrix { const values_type& vals, const Kokkos::StaticCrsGraph& graph_) - : graph(graph_.entries, graph_.row_map), values(vals), numCols_(ncols) { -#ifdef KOKKOS_USE_CUSPARSE - cusparseCreate(&cusparse_handle); - cusparseCreateMatDescr(&cusparse_descr); -#endif // KOKKOS_USE_CUSPARSE - } + : graph(graph_.entries, graph_.row_map), values(vals), numCols_(ncols) {} /// \brief Constructor that copies raw arrays of host data in /// 3-array CRS (compresed row storage) format. @@ -654,20 +628,6 @@ class CrsMatrix { Kokkos::view_alloc(Kokkos::WithoutInitializing, "values"), annz); UnmanagedValues valuesRaw(val, annz); Kokkos::deep_copy(this->values, valuesRaw); - - // FIXME (mfh 09 Aug 2013) Specialize this on the Device type. - // Only use cuSPARSE for the Cuda Device. -#ifdef KOKKOS_USE_CUSPARSE - // FIXME (mfh 09 Aug 2013) This is actually static initialization - // of the library; you should do it once for the whole program, - // not once per matrix. We need to protect this somehow. - cusparseCreate(&cusparse_handle); - - // This is a per-matrix attribute. It encapsulates things like - // whether the matrix is lower or upper triangular, etc. Ditto - // for other TPLs like MKL. - cusparseCreateMatDescr(&cusparse_descr); -#endif // KOKKOS_USE_CUSPARSE } /// \brief Constructor that accepts a row map, column indices, and @@ -708,11 +668,6 @@ class CrsMatrix { << "."; throw std::invalid_argument(os.str()); } - -#ifdef KOKKOS_USE_CUSPARSE - cusparseCreate(&cusparse_handle); - cusparseCreateMatDescr(&cusparse_descr); -#endif // KOKKOS_USE_CUSPARSE } KOKKOS_INLINE_FUNCTION diff --git a/sparse/src/KokkosSparse_spgemm_handle.hpp b/sparse/src/KokkosSparse_spgemm_handle.hpp index feb0e66afd..9f89083957 100644 --- a/sparse/src/KokkosSparse_spgemm_handle.hpp +++ b/sparse/src/KokkosSparse_spgemm_handle.hpp @@ -189,7 +189,7 @@ class SPGEMMHandle { #endif #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE -#if (CUDA_VERSION >= 11040) +#if (CUDA_VERSION >= 11000) struct cuSparseSpgemmHandleType { KokkosKernels::Experimental::Controls kkControls; cusparseHandle_t cusparseHandle; @@ -672,15 +672,19 @@ class SPGEMMHandle { #if defined(KOKKOS_ENABLE_CUDA) if (std::is_same::value) { -#if defined(KOKKOSKERNELS_ENABLE_TPL_CUSPARSE) && \ - (CUDA_VERSION >= 11040 || CUSPARSE_VERSION < 11000) +#if defined(KOKKOSKERNELS_ENABLE_TPL_CUSPARSE) this->algorithm_type = SPGEMM_CUSPARSE; +#ifdef VERBOSE + std::cout << "Cuda Execution Space, Default Algorithm: SPGEMM_CUSPARSE" + << std::endl; +#endif #else this->algorithm_type = SPGEMM_KK; -#endif #ifdef VERBOSE - std::cout << "Cuda Execution Space, Default Algorithm: SPGEMM_CUSPARSE" + std::cout << "Cuda Execution Space, without cuSPARSE, Default Algorithm: " + "SPGEMM_KK" << std::endl; +#endif #endif } #endif From 6e306b338a5c3972b6360f03a97c880b7da75a85 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 12 Oct 2022 08:54:32 -0600 Subject: [PATCH 142/226] ROT: adding the ROT function to level 1 BLAS This shall include all interfaces and implementations for the host call version of the function. Device calls may be added in later PRs. The implementation will include TPL support for current GPU and CPU libraries. while adding support for cublas I realized that the cos and sin values should not be complex value even for Crot and Zrot... this will require rewriting the whole implementation from ETI level down : ( Added cuBLAS support and discovered during testing that cuBLAS does not work if a device pointer is given for c and s inputs. Accordingly the TPL layer implementation now copies back and forth to the host to avoid a segfault. --- blas/CMakeLists.txt | 7 + .../rot/KokkosBlas1_rot_eti_spec_inst.cpp.in | 54 +++ .../KokkosBlas1_rot_eti_spec_avail.hpp.in | 51 +++ .../KokkosBlas1_rot_eti_spec_decl.hpp.in | 51 +++ blas/impl/KokkosBlas1_rot_impl.hpp | 84 ++++ blas/impl/KokkosBlas1_rot_spec.hpp | 166 +++++++ blas/src/KokkosBlas1_rot.hpp | 106 +++++ blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp | 136 ++++++ blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp | 415 ++++++++++++++++++ blas/tpls/KokkosBlas_Host_tpl.cpp | 41 ++ blas/tpls/KokkosBlas_Host_tpl.hpp | 3 + blas/unit_test/Test_Blas.hpp | 1 + blas/unit_test/Test_Blas1_rot.hpp | 96 ++++ 13 files changed, 1211 insertions(+) create mode 100644 blas/eti/generated_specializations_cpp/rot/KokkosBlas1_rot_eti_spec_inst.cpp.in create mode 100644 blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_avail.hpp.in create mode 100644 blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_decl.hpp.in create mode 100644 blas/impl/KokkosBlas1_rot_impl.hpp create mode 100644 blas/impl/KokkosBlas1_rot_spec.hpp create mode 100644 blas/src/KokkosBlas1_rot.hpp create mode 100644 blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp create mode 100644 blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp create mode 100644 blas/unit_test/Test_Blas1_rot.hpp diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt index 4e9cef22e7..dcf8a2dcc0 100644 --- a/blas/CMakeLists.txt +++ b/blas/CMakeLists.txt @@ -248,6 +248,13 @@ KOKKOSKERNELS_GENERATE_ETI(Blas1_reciprocal_mv reciprocal TYPE_LISTS FLOATS LAYOUTS DEVICES ) +KOKKOSKERNELS_GENERATE_ETI(Blas1_rot rot + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + KOKKOSKERNELS_GENERATE_ETI(Blas1_rotg rotg COMPONENTS blas HEADER_LIST ETI_HEADERS diff --git a/blas/eti/generated_specializations_cpp/rot/KokkosBlas1_rot_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/rot/KokkosBlas1_rot_eti_spec_inst.cpp.in new file mode 100644 index 0000000000..7bfb830e3a --- /dev/null +++ b/blas/eti/generated_specializations_cpp/rot/KokkosBlas1_rot_eti_spec_inst.cpp.in @@ -0,0 +1,54 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + + +#define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true +#include "KokkosKernels_config.h" +#include "KokkosBlas1_rot_spec.hpp" + +namespace KokkosBlas { +namespace Impl { +@BLAS1_ROT_ETI_INST_BLOCK@ +} //IMPL +} //Kokkos diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_avail.hpp.in new file mode 100644 index 0000000000..715c6673da --- /dev/null +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_avail.hpp.in @@ -0,0 +1,51 @@ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROT_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_ROT_ETI_SPEC_AVAIL_HPP_ + +namespace KokkosBlas { +namespace Impl { +@BLAS1_ROT_ETI_AVAIL_BLOCK@ + } //IMPL +} //Kokkos +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_decl.hpp.in new file mode 100644 index 0000000000..e610161851 --- /dev/null +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_decl.hpp.in @@ -0,0 +1,51 @@ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROT_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_ROT_ETI_SPEC_DECL_HPP_ + +namespace KokkosBlas { +namespace Impl { +@BLAS1_ROT_ETI_DECL_BLOCK@ + } //IMPL +} //Kokkos +#endif diff --git a/blas/impl/KokkosBlas1_rot_impl.hpp b/blas/impl/KokkosBlas1_rot_impl.hpp new file mode 100644 index 0000000000..a613f1ea1e --- /dev/null +++ b/blas/impl/KokkosBlas1_rot_impl.hpp @@ -0,0 +1,84 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROT_IMPL_HPP_ +#define KOKKOSBLAS1_ROT_IMPL_HPP_ + +#include +#include +#include + +namespace KokkosBlas { +namespace Impl { + +template +struct rot_functor { + using scalar_type = typename Vector::non_const_value_type; + + Vector X, Y; + Scalar c, s; + + rot_functor(Vector const& X_, Vector const& Y_, Scalar const& c_, + Scalar const& s_) + : X(X_), Y(Y_), c(c_), s(s_) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const int entryIdx) const { + const scalar_type temp = c() * X(entryIdx) + s() * Y(entryIdx); + Y(entryIdx) = c() * Y(entryIdx) - s() * X(entryIdx); + X(entryIdx) = temp; + } +}; + +template +void Rot_Invoke(ExecutionSpace const& space, Vector const& X, Vector const& Y, + Scalar const& c, Scalar const& s) { + Kokkos::RangePolicy rot_policy(space, 0, X.extent(0)); + rot_functor rot_func(X, Y, c, s); + Kokkos::parallel_for("KokkosBlas::rot", rot_policy, rot_func); +} + +} // namespace Impl +} // namespace KokkosBlas + +#endif // KOKKOSBLAS1_ROT_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_rot_spec.hpp b/blas/impl/KokkosBlas1_rot_spec.hpp new file mode 100644 index 0000000000..4417fb417d --- /dev/null +++ b/blas/impl/KokkosBlas1_rot_spec.hpp @@ -0,0 +1,166 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_ROT_SPEC_HPP_ +#define KOKKOSBLAS1_ROT_SPEC_HPP_ + +#include +#include +#include + +// Include the actual functors +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +#include +#endif + +namespace KokkosBlas { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct rot_eti_spec_avail { + enum : bool { value = false }; +}; +} // namespace Impl +} // namespace KokkosBlas + +// +// Macro for declaration of full specialization availability +// KokkosBlas::Impl::Rot. This is NOT for users!!! All +// the declarations of full specializations go in this header file. +// We may spread out definitions (see _INST macro below) across one or +// more .cpp files. +// +#define KOKKOSBLAS1_ROT_ETI_SPEC_AVAIL(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ + template <> \ + struct rot_eti_spec_avail, \ + Kokkos::MemoryTraits>, \ + Kokkos::View::mag_type, \ + LAYOUT, Kokkos::Device, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +// Include the actual specialization declarations +#include +#include + +namespace KokkosBlas { +namespace Impl { + +// Unification layer +template ::value, + bool eti_spec_avail = + rot_eti_spec_avail::value> +struct Rot { + static void rot(ExecutionSpace const& space, Vector const& X, Vector const& Y, + Scalar const& c, Scalar const& s); +}; + +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +//! Full specialization of Rot. +template +struct Rot { + static void rot(ExecutionSpace const& space, Vector const& X, Vector const& Y, + Scalar const& c, Scalar const& s) { + Kokkos::Profiling::pushRegion(KOKKOSKERNELS_IMPL_COMPILE_LIBRARY + ? "KokkosBlas::rot[ETI]" + : "KokkosBlas::rot[noETI]"); +#ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION + if (KOKKOSKERNELS_IMPL_COMPILE_LIBRARY) + printf("KokkosBlas1::rot<> ETI specialization for < %s, %s, %s >\n", + typeid(ExecutionSpace).name(), typeid(Vector).name(), + typeid(Scalar).name()); + else { + printf("KokkosBlas1::rot<> non-ETI specialization for < %s, %s, %s >\n", + typeid(ExecutionSpace).name(), typeid(Vector).name(), + typeid(Scalar).name()); + } +#endif + Rot_Invoke(space, X, Y, c, s); + Kokkos::Profiling::popRegion(); + } +}; +#endif + +} // namespace Impl +} // namespace KokkosBlas + +// +// Macro for declaration of full specialization of +// KokkosBlas::Impl::Rot. This is NOT for users!!! All +// the declarations of full specializations go in this header file. +// We may spread out definitions (see _DEF macro below) across one or +// more .cpp files. +// +#define KOKKOSBLAS1_ROT_ETI_SPEC_DECL(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ + extern template struct Rot, \ + Kokkos::MemoryTraits>, \ + Kokkos::View::mag_type, \ + LAYOUT, Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + false, true>; + +// +// Macro for definition of full specialization of +// KokkosBlas::Impl::Rot. This is NOT for users!!! We +// use this macro in one or more .cpp files in this directory. +// +#define KOKKOSBLAS1_ROT_ETI_SPEC_INST(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ + template struct Rot, \ + Kokkos::MemoryTraits>, \ + Kokkos::View::mag_type, \ + LAYOUT, Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + false, true>; + +#include +#include + +#endif // KOKKOSBLAS1_ROT_SPEC_HPP_ diff --git a/blas/src/KokkosBlas1_rot.hpp b/blas/src/KokkosBlas1_rot.hpp new file mode 100644 index 0000000000..acb1a3c807 --- /dev/null +++ b/blas/src/KokkosBlas1_rot.hpp @@ -0,0 +1,106 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_ROT_HPP_ +#define KOKKOSBLAS1_ROT_HPP_ + +#include + +namespace KokkosBlas { + +template +void rot(execution_space const& space, Vector const& X, Vector const& Y, + Scalar const& c, Scalar const& s) { + static_assert(Kokkos::is_execution_space::value, + "rot: execution_space template parameter is not a Kokkos " + "execution space."); + static_assert(Vector::rank == 1, + "rot: Vector template parameter needs to be a rank 1 view"); + static_assert(Scalar::rank == 0, + "rot: Scalar template parameter needs to be a rank 0 view"); + static_assert( + Kokkos::SpaceAccessibility::accessible, + "rot: Vector template parameter memory space needs to be accessible from " + "execution_space template parameter"); + static_assert( + Kokkos::SpaceAccessibility::accessible, + "rot: Vector template parameter memory space needs to be accessible from " + "execution_space template parameter"); + static_assert( + std::is_same::value, + "rot: Vector template parameter needs to store non-const values"); + + using Vector_Internal = Kokkos::View< + typename Vector::non_const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + Kokkos::Device, + Kokkos::MemoryTraits>; + + using Scalar_Internal = Kokkos::View< + typename Scalar::non_const_value_type, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + Kokkos::Device, + Kokkos::MemoryTraits>; + + Vector_Internal X_(X), Y_(Y); + Scalar_Internal c_(c), s_(s); + + Kokkos::Profiling::pushRegion("KokkosBlas::rot"); + Impl::Rot::rot(space, X_, + Y_, c_, s_); + Kokkos::Profiling::popRegion(); +} + +template +void rot(Vector const& X, Vector const& Y, Scalar const& c, Scalar const& s) { + const typename Vector::execution_space space = + typename Vector::execution_space(); + rot(space, X, Y, c, s); +} + +} // namespace KokkosBlas +#endif // KOKKOSBLAS1_ROT_HPP_ diff --git a/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp new file mode 100644 index 0000000000..167effee2a --- /dev/null +++ b/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp @@ -0,0 +1,136 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_HPP_ + +namespace KokkosBlas { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct rot_tpl_spec_avail { + enum : bool { value = false }; +}; +} // namespace Impl +} // namespace KokkosBlas + +namespace KokkosBlas { +namespace Impl { + +// Generic Host side BLAS (could be MKL or whatever) +#ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS +#define KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_BLAS(SCALAR, LAYOUT, EXECSPACE) \ + template <> \ + struct rot_tpl_spec_avail, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +#ifdef KOKKOS_ENABLE_SERIAL +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutLeft, Kokkos::Serial) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutLeft, Kokkos::Serial) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::LayoutLeft, + Kokkos::Serial) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::LayoutLeft, + Kokkos::Serial) +#endif + +#ifdef KOKKOS_ENABLE_OPENMP +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutLeft, Kokkos::OpenMP) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutLeft, Kokkos::OpenMP) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::LayoutLeft, + Kokkos::OpenMP) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::LayoutLeft, + Kokkos::OpenMP) +#endif +#endif + +// cuBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS +#define KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ + template <> \ + struct rot_tpl_spec_avail, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutLeft, Kokkos::Cuda, Kokkos::CudaSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, Kokkos::CudaSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, Kokkos::LayoutLeft, Kokkos::Cuda, Kokkos::CudaSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, Kokkos::LayoutLeft, Kokkos::Cuda, Kokkos::CudaSpace) +#endif + +// rocBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS +#define KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ + template <> \ + struct rot_tpl_spec_avail, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutLeft, Kokkos::HIP, Kokkos::HIPSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutLeft, Kokkos::HIP, Kokkos::HIPSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, Kokkos::LayoutLeft, Kokkos::HIP, Kokkos::HIPSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, Kokkos::LayoutLeft, Kokkos::HIP, Kokkos::HIPSpace) +#endif + +} // namespace Impl +} // namespace KokkosBlas +#endif diff --git a/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp new file mode 100644 index 0000000000..922bf4f671 --- /dev/null +++ b/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp @@ -0,0 +1,415 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_ROT_TPL_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_ROT_TPL_SPEC_DECL_HPP_ + +namespace KokkosBlas { +namespace Impl { + +namespace { +template +inline void rot_print_specialization() { +#ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION + printf("KokkosBlas::rot<> TPL Blas specialization for < %s, %s, %s >\n", + typeid(Vector).name(), typeid(Scalar).name(), + typeid(ExecutionSpace).name); +#endif +} +} // namespace +} // namespace Impl +} // namespace KokkosBlas + +// Generic Host side BLAS (could be MKL or whatever) +#ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS +#include "KokkosBlas_Host_tpl.hpp" + +namespace KokkosBlas { +namespace Impl { + +#define KOKKOSBLAS1_DROT_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, ETI_SPEC_AVAIL) \ + template <> \ + struct Rot, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using Vector = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using Scalar = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& /*space*/, Vector const& X, \ + Vector const& Y, Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,double]"); \ + HostBlas::rot(X.extent_int(0), X.data(), 1, Y.data(), 1, \ + c.data(), s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_SROT_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, ETI_SPEC_AVAIL) \ + template <> \ + struct Rot, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using Vector = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using Scalar = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& /*space*/, Vector const& X, \ + Vector const& Y, Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,float]"); \ + HostBlas::rot(X.extent_int(0), X.data(), 1, Y.data(), 1, \ + c.data(), s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rot, EXECSPACE, MEMSPACE, true, \ + ETI_SPEC_AVAIL> { \ + using Vector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using Scalar = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& /*space*/, Vector const& X, \ + Vector const& Y, Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::rotg[TPL_BLAS,complex]"); \ + HostBlas >::rot(X.extent_int(0), \ + reinterpret_cast*>(X.data()), 1, \ + reinterpret_cast*>(Y.data()), 1, \ + c.data(), s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_CROT_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, ETI_SPEC_AVAIL) \ + template \ + struct Rot, EXECSPACE, MEMSPACE, true, \ + ETI_SPEC_AVAIL> { \ + using Vector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using Scalar = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& /*space*/, Vector const& X, \ + Vector const& Y, Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::rotg[TPL_BLAS,complex]"); \ + HostBlas >::rot(X.extent_int(0), \ + reinterpret_cast*>(X.data()), 1, \ + reinterpret_cast*>(Y.data()), 1, \ + c.data(), s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#ifdef KOKKOS_ENABLE_SERIAL +KOKKOSBLAS1_DROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, true) +KOKKOSBLAS1_DROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, false) + +KOKKOSBLAS1_SROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, true) +KOKKOSBLAS1_SROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, false) + +KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, true) +KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, false) + +KOKKOSBLAS1_CROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, true) +KOKKOSBLAS1_CROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, false) +#endif + +#ifdef KOKKOS_ENABLE_OPENMP +KOKKOSBLAS1_DROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, true) +KOKKOSBLAS1_DROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, false) + +KOKKOSBLAS1_SROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, true) +KOKKOSBLAS1_SROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, false) + +KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, true) +KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, false) + +KOKKOSBLAS1_CROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, true) +KOKKOSBLAS1_CROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, false) +#endif + +} // namespace Impl +} // namespace KokkosBlas + +#endif // KOKKOSKERNELS_ENABLE_TPL_BLAS + +// cuBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS +#include + +namespace KokkosBlas { +namespace Impl { + +#define KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rot, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using Vector = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using Scalar = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& space, Vector const& X, \ + Vector const& Y, Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,double]"); \ + rot_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSetStream(singleton.handle, space.cuda_stream())); \ + typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ + typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ + Kokkos::deep_copy(cos, c); \ + Kokkos::deep_copy(sin, s); \ + cublasDrot(singleton.handle, X.extent_int(0), X.data(), 1, \ + Y.data(), 1, cos.data(), sin.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_SROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rot, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using Vector = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using Scalar = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& space, Vector const& X, \ + Vector const& Y, Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,float]"); \ + rot_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSetStream(singleton.handle, space.cuda_stream())); \ + typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ + typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ + Kokkos::deep_copy(cos, c); \ + Kokkos::deep_copy(sin, s); \ + cublasSrot(singleton.handle, X.extent_int(0), X.data(), 1, \ + Y.data(), 1, cos.data(), sin.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + + +#define KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rot*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using Vector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using Scalar = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& space, Vector const& X, \ + Vector const& Y, Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,complex]"); \ + rot_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSetStream(singleton.handle, space.cuda_stream())); \ + typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ + typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ + Kokkos::deep_copy(cos, c); \ + Kokkos::deep_copy(sin, s); \ + cublasZdrot(singleton.handle, X.extent_int(0), \ + reinterpret_cast(X.data()), 1, \ + reinterpret_cast(Y.data()), 1, \ + c.data(), s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + + +#define KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rot*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using Vector = Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using Scalar = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& space, Vector const& X, \ + Vector const& Y, Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,complex]"); \ + rot_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSetStream(singleton.handle, space.cuda_stream())); \ + typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ + typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ + Kokkos::deep_copy(cos, c); \ + Kokkos::deep_copy(sin, s); \ + cublasCsrot(singleton.handle, X.extent_int(0), \ + reinterpret_cast(X.data()), 1, \ + reinterpret_cast(Y.data()), 1, \ + c.data(), s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + + +KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) + +KOKKOSBLAS1_SROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_SROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_SROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_SROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_SROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_SROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +KOKKOSBLAS1_SROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_SROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) + +KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) + +KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +} // namespace Impl +} // namespace KokkosBlas +#endif // KOKKOSKERNELS_ENABLE_TPL_CUBLAS + +#endif diff --git a/blas/tpls/KokkosBlas_Host_tpl.cpp b/blas/tpls/KokkosBlas_Host_tpl.cpp index 64bfe57ef8..1bf86ec4be 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.cpp +++ b/blas/tpls/KokkosBlas_Host_tpl.cpp @@ -127,6 +127,20 @@ void F77_BLAS_MANGLE(zaxpy, const std::complex* x, const int* x_inc, /* */ std::complex* y, const int* y_inc); +/// +/// rot +/// +void F77_BLAS_MANGLE(srot, SROT)(int const* N, float* X, int const* incx, + float* Y, int const* incy, float* c, float* s); +void F77_BLAS_MANGLE(drot, DROT)(int const* N, double* X, int const* incx, + double* Y, int const* incy, double* c, double* s); +void F77_BLAS_MANGLE(crot, CROT)(int const* N, std::complex* X, int const* incx, + std::complex* Y, int const* incy, + float* c, float* s); +void F77_BLAS_MANGLE(zrot, ZROT)(int const* N, std::complex* X, int const* incx, + std::complex* Y, int const* incy, + double* c, double* s); + /// /// rotg /// @@ -359,6 +373,11 @@ void F77_BLAS_MANGLE(zscal, #define F77_FUNC_CAXPY F77_BLAS_MANGLE(caxpy, CAXPY) #define F77_FUNC_ZAXPY F77_BLAS_MANGLE(zaxpy, ZAXPY) +#define F77_FUNC_SROT F77_BLAS_MANGLE(srot, SROT) +#define F77_FUNC_DROT F77_BLAS_MANGLE(drot, DROT) +#define F77_FUNC_CROT F77_BLAS_MANGLE(crot, CROT) +#define F77_FUNC_ZROT F77_BLAS_MANGLE(zrot, ZROT) + #define F77_FUNC_SROTG F77_BLAS_MANGLE(srotg, SROTG) #define F77_FUNC_DROTG F77_BLAS_MANGLE(drotg, DROTG) #define F77_FUNC_CROTG F77_BLAS_MANGLE(crotg, CROTG) @@ -442,6 +461,11 @@ void HostBlas::axpy(int n, const float alpha, const float* x, int x_inc, F77_FUNC_SAXPY(&n, &alpha, x, &x_inc, y, &y_inc); } template <> +void HostBlas::rot(int const N, float* X, int const incx, + float* Y, int const incy, float* c, float* s) { + F77_FUNC_SROT(&N, X, &incx, Y, &incy, c, s); +} +template <> void HostBlas::rotg(float* a, float* b, float* c, float* s) { F77_FUNC_SROTG(a, b, c, s); } @@ -540,6 +564,11 @@ void HostBlas::axpy(int n, const double alpha, const double* x, F77_FUNC_DAXPY(&n, &alpha, x, &x_inc, y, &y_inc); } template <> +void HostBlas::rot(int const N, double* X, int const incx, + double* Y, int const incy, double* c, double* s) { + F77_FUNC_DROT(&N, X, &incx, Y, &incy, c, s); +} +template <> void HostBlas::rotg(double* a, double* b, double* c, double* s) { F77_FUNC_DROTG(a, b, c, s); } @@ -653,6 +682,12 @@ void HostBlas >::axpy(int n, F77_FUNC_CAXPY(&n, &alpha, x, &x_inc, y, &y_inc); } template <> +void HostBlas >::rot(int const N, std::complex* X, int const incx, + std::complex* Y, int const incy, + float* c, float* s) { + F77_FUNC_CROT(&N, X, &incx, Y, &incy, c, s); +} +template <> void HostBlas >::rotg(std::complex* a, std::complex* b, float* c, std::complex* s) { @@ -793,6 +828,12 @@ void HostBlas >::axpy(int n, F77_FUNC_ZAXPY(&n, &alpha, x, &x_inc, y, &y_inc); } template <> +void HostBlas >::rot(int const N, std::complex* X, int const incx, + std::complex* Y, int const incy, + double* c, double* s) { + F77_FUNC_ZROT(&N, X, &incx, Y, &incy, c, s); +} +template <> void HostBlas >::rotg(std::complex* a, std::complex* b, double* c, std::complex* s) { diff --git a/blas/tpls/KokkosBlas_Host_tpl.hpp b/blas/tpls/KokkosBlas_Host_tpl.hpp index 4cdbf78567..b6ab4aa351 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.hpp +++ b/blas/tpls/KokkosBlas_Host_tpl.hpp @@ -76,6 +76,9 @@ struct HostBlas { static void axpy(int n, const T alpha, const T *x, int x_inc, /* */ T *y, int y_inc); + static void rot(int const N, T *X, int const incx, + T *Y, int const incy, mag_type *c, mag_type *s); + static void rotg(T *a, T *b, mag_type *c, T *s); static void rotmg(T *d1, T *d2, T *x1, const T *y1, T *param); diff --git a/blas/unit_test/Test_Blas.hpp b/blas/unit_test/Test_Blas.hpp index 0b13917872..851acf9f26 100644 --- a/blas/unit_test/Test_Blas.hpp +++ b/blas/unit_test/Test_Blas.hpp @@ -19,6 +19,7 @@ #include "Test_Blas1_nrm2w.hpp" #include "Test_Blas1_nrminf.hpp" #include "Test_Blas1_reciprocal.hpp" +#include "Test_Blas1_rot.hpp" #include "Test_Blas1_rotg.hpp" #include "Test_Blas1_rotmg.hpp" #include "Test_Blas1_scal.hpp" diff --git a/blas/unit_test/Test_Blas1_rot.hpp b/blas/unit_test/Test_Blas1_rot.hpp new file mode 100644 index 0000000000..b5510afe7f --- /dev/null +++ b/blas/unit_test/Test_Blas1_rot.hpp @@ -0,0 +1,96 @@ +#include + +template +int test_rot() { + using mag_type = typename Kokkos::ArithTraits::mag_type; + using vector_type = Kokkos::View; + using scalar_type = Kokkos::View; + using vector_ref_type = Kokkos::View; + + vector_type X("X", 4), Y("Y", 4); + vector_ref_type Xref("Xref", 4), Yref("Yref", 4); + scalar_type c("c"), s("s"); + + // Initialize inputs + typename vector_type::HostMirror X_h = Kokkos::create_mirror_view(X); + typename vector_type::HostMirror Y_h = Kokkos::create_mirror_view(Y); + X_h(0) = 0.6; + X_h(1) = 0.1; + X_h(2) = -0.5; + X_h(3) = 0.8; + Y_h(0) = 0.5; + Y_h(1) = -0.9; + Y_h(2) = 0.3; + Y_h(3) = 0.7; + Kokkos::deep_copy(X, X_h); + Kokkos::deep_copy(Y, Y_h); + + Kokkos::deep_copy(c, 0.8); + Kokkos::deep_copy(s, 0.6); + + // Compute the rotated vectors + KokkosBlas::rot(X, Y, c, s); + Kokkos::fence(); + + // Bring solution back to host + Kokkos::deep_copy(X_h, X); + Kokkos::deep_copy(Y_h, Y); + + // Check outputs against reference values + Xref(0) = 0.78; + Xref(1) = -0.46; + Xref(2) = -0.22; + Xref(3) = 1.06; + Yref(0) = 0.04; + Yref(1) = -0.78; + Yref(2) = 0.54; + Yref(3) = 0.08; + + Scalar const tol = 10 * Kokkos::ArithTraits::eps(); + for (int idx = 0; idx < 4; ++idx) { + Test::EXPECT_NEAR_KK_REL(X_h(idx), Xref(idx), tol); + Test::EXPECT_NEAR_KK_REL(Y_h(idx), Yref(idx), tol); + } + + return 1; +} + +#if defined(KOKKOSKERNELS_INST_FLOAT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, rot_float) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::rot"); + test_rot(); + Kokkos::Profiling::popRegion(); +} +#endif + +#if defined(KOKKOSKERNELS_INST_DOUBLE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, rot_double) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::rot"); + test_rot(); + Kokkos::Profiling::popRegion(); +} +#endif + +#if defined(KOKKOSKERNELS_INST_COMPLEX_FLOAT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, rot_complex_float) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::rot"); + test_rot, TestExecSpace>(); + Kokkos::Profiling::popRegion(); +} +#endif + +#if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, rot_complex_double) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::rot"); + test_rot, TestExecSpace>(); + Kokkos::Profiling::popRegion(); +} +#endif From dc08d75eae8a02b9ade45112bbe41f3641b6898f Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 2 Nov 2022 17:42:09 -0600 Subject: [PATCH 143/226] ROT*: fixing cuBLAS interface and tests cuBLAS segfaults when some inputs are given as device pointers despite the documentation claiming it as legal. To avoid that issue inputs/outputs are copied to host before and after cuBLAS call --- blas/impl/KokkosBlas1_rot_spec.hpp | 43 +- blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp | 438 +++++++++--------- blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp | 123 +++-- blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp | 41 +- blas/tpls/KokkosBlas_Host_tpl.cpp | 39 +- blas/tpls/KokkosBlas_Host_tpl.hpp | 4 +- blas/unit_test/Test_Blas1_rotmg.hpp | 7 + 7 files changed, 396 insertions(+), 299 deletions(-) diff --git a/blas/impl/KokkosBlas1_rot_spec.hpp b/blas/impl/KokkosBlas1_rot_spec.hpp index 4417fb417d..8c64728c5b 100644 --- a/blas/impl/KokkosBlas1_rot_spec.hpp +++ b/blas/impl/KokkosBlas1_rot_spec.hpp @@ -73,12 +73,13 @@ struct rot_eti_spec_avail { // #define KOKKOSBLAS1_ROT_ETI_SPEC_AVAIL(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ template <> \ - struct rot_eti_spec_avail, \ - Kokkos::MemoryTraits>, \ - Kokkos::View::mag_type, \ - LAYOUT, Kokkos::Device, \ - Kokkos::MemoryTraits>> { \ + struct rot_eti_spec_avail< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View::mag_type, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>> { \ enum : bool { value = true }; \ }; @@ -138,13 +139,14 @@ struct Rot, \ - Kokkos::MemoryTraits>, \ - Kokkos::View::mag_type, \ - LAYOUT, Kokkos::Device, \ - Kokkos::MemoryTraits>, \ - false, true>; + extern template struct Rot< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View::mag_type, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + false, true>; // // Macro for definition of full specialization of @@ -152,13 +154,14 @@ struct Rot, \ - Kokkos::MemoryTraits>, \ - Kokkos::View::mag_type, \ - LAYOUT, Kokkos::Device, \ - Kokkos::MemoryTraits>, \ - false, true>; + template struct Rot< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View::mag_type, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + false, true>; #include #include diff --git a/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp index 922bf4f671..beaa388175 100644 --- a/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp @@ -69,97 +69,97 @@ namespace KokkosBlas { namespace Impl { #define KOKKOSBLAS1_DROT_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, ETI_SPEC_AVAIL) \ - template <> \ - struct Rot, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - true, ETI_SPEC_AVAIL> { \ - using Vector = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - using Scalar = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& /*space*/, Vector const& X, \ - Vector const& Y, Scalar const& c, Scalar const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,double]"); \ - HostBlas::rot(X.extent_int(0), X.data(), 1, Y.data(), 1, \ - c.data(), s.data()); \ - Kokkos::Profiling::popRegion(); \ - } \ + template <> \ + struct Rot, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using Vector = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using Scalar = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& /*space*/, Vector const& X, \ + Vector const& Y, Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,double]"); \ + HostBlas::rot(X.extent_int(0), X.data(), 1, Y.data(), 1, \ + c.data(), s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ }; #define KOKKOSBLAS1_SROT_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, ETI_SPEC_AVAIL) \ - template <> \ - struct Rot, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - true, ETI_SPEC_AVAIL> { \ - using Vector = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - using Scalar = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& /*space*/, Vector const& X, \ - Vector const& Y, Scalar const& c, Scalar const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,float]"); \ - HostBlas::rot(X.extent_int(0), X.data(), 1, Y.data(), 1, \ - c.data(), s.data()); \ - Kokkos::Profiling::popRegion(); \ - } \ + template <> \ + struct Rot, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using Vector = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using Scalar = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& /*space*/, Vector const& X, \ + Vector const& Y, Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,float]"); \ + HostBlas::rot(X.extent_int(0), X.data(), 1, Y.data(), 1, \ + c.data(), s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ }; #define KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, ETI_SPEC_AVAIL) \ - template \ - struct Rot, EXECSPACE, MEMSPACE, true, \ - ETI_SPEC_AVAIL> { \ - using Vector = Kokkos::View*, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>; \ - using Scalar = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& /*space*/, Vector const& X, \ - Vector const& Y, Scalar const& c, Scalar const& s) { \ - Kokkos::Profiling::pushRegion( \ - "KokkosBlas::rotg[TPL_BLAS,complex]"); \ - HostBlas >::rot(X.extent_int(0), \ - reinterpret_cast*>(X.data()), 1, \ - reinterpret_cast*>(Y.data()), 1, \ - c.data(), s.data()); \ - Kokkos::Profiling::popRegion(); \ - } \ + template \ + struct Rot, EXECSPACE, MEMSPACE, true, \ + ETI_SPEC_AVAIL> { \ + using Vector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using Scalar = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& /*space*/, Vector const& X, \ + Vector const& Y, Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::rotg[TPL_BLAS,complex]"); \ + HostBlas>::rot( \ + X.extent_int(0), reinterpret_cast*>(X.data()), \ + 1, reinterpret_cast*>(Y.data()), 1, c.data(), \ + s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ }; #define KOKKOSBLAS1_CROT_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, ETI_SPEC_AVAIL) \ - template \ - struct Rot, EXECSPACE, MEMSPACE, true, \ - ETI_SPEC_AVAIL> { \ - using Vector = Kokkos::View*, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>; \ - using Scalar = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& /*space*/, Vector const& X, \ - Vector const& Y, Scalar const& c, Scalar const& s) { \ - Kokkos::Profiling::pushRegion( \ - "KokkosBlas::rotg[TPL_BLAS,complex]"); \ - HostBlas >::rot(X.extent_int(0), \ - reinterpret_cast*>(X.data()), 1, \ - reinterpret_cast*>(Y.data()), 1, \ - c.data(), s.data()); \ - Kokkos::Profiling::popRegion(); \ - } \ + template \ + struct Rot, EXECSPACE, MEMSPACE, true, \ + ETI_SPEC_AVAIL> { \ + using Vector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using Scalar = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& /*space*/, Vector const& X, \ + Vector const& Y, Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::rotg[TPL_BLAS,complex]"); \ + HostBlas>::rot( \ + X.extent_int(0), reinterpret_cast*>(X.data()), \ + 1, reinterpret_cast*>(Y.data()), 1, c.data(), \ + s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ }; #ifdef KOKKOS_ENABLE_SERIAL @@ -193,7 +193,7 @@ KOKKOSBLAS1_CROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, false) } // namespace Impl } // namespace KokkosBlas -#endif // KOKKOSKERNELS_ENABLE_TPL_BLAS +#endif // KOKKOSKERNELS_ENABLE_TPL_BLAS // cuBLAS #ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS @@ -202,144 +202,146 @@ KOKKOSBLAS1_CROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, false) namespace KokkosBlas { namespace Impl { -#define KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template <> \ - struct Rot, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - true, ETI_SPEC_AVAIL> { \ - using Vector = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ - using Scalar = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& space, Vector const& X, \ - Vector const& Y, Scalar const& c, Scalar const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,double]"); \ - rot_print_specialization(); \ - KokkosBlas::Impl::CudaBlasSingleton& singleton = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSetStream(singleton.handle, space.cuda_stream())); \ - typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ - typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ - Kokkos::deep_copy(cos, c); \ - Kokkos::deep_copy(sin, s); \ - cublasDrot(singleton.handle, X.extent_int(0), X.data(), 1, \ - Y.data(), 1, cos.data(), sin.data()); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rot< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using Vector = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using Scalar = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& space, Vector const& X, Vector const& Y, \ + Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,double]"); \ + rot_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ + typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ + Kokkos::deep_copy(cos, c); \ + Kokkos::deep_copy(sin, s); \ + cublasDrot(singleton.handle, X.extent_int(0), X.data(), 1, Y.data(), 1, \ + cos.data(), sin.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ }; - -#define KOKKOSBLAS1_SROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template <> \ - struct Rot, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - true, ETI_SPEC_AVAIL> { \ - using Vector = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ - using Scalar = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& space, Vector const& X, \ - Vector const& Y, Scalar const& c, Scalar const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,float]"); \ - rot_print_specialization(); \ - KokkosBlas::Impl::CudaBlasSingleton& singleton = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSetStream(singleton.handle, space.cuda_stream())); \ - typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ - typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ - Kokkos::deep_copy(cos, c); \ - Kokkos::deep_copy(sin, s); \ - cublasSrot(singleton.handle, X.extent_int(0), X.data(), 1, \ - Y.data(), 1, cos.data(), sin.data()); \ - Kokkos::Profiling::popRegion(); \ - } \ - }; - -#define KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template <> \ - struct Rot*, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - true, ETI_SPEC_AVAIL> { \ - using Vector = Kokkos::View*, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>; \ - using Scalar = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& space, Vector const& X, \ - Vector const& Y, Scalar const& c, Scalar const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,complex]"); \ - rot_print_specialization(); \ - KokkosBlas::Impl::CudaBlasSingleton& singleton = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSetStream(singleton.handle, space.cuda_stream())); \ - typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ - typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ - Kokkos::deep_copy(cos, c); \ - Kokkos::deep_copy(sin, s); \ - cublasZdrot(singleton.handle, X.extent_int(0), \ - reinterpret_cast(X.data()), 1, \ - reinterpret_cast(Y.data()), 1, \ - c.data(), s.data()); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_SROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rot, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using Vector = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using Scalar = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& space, Vector const& X, Vector const& Y, \ + Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,float]"); \ + rot_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ + typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ + Kokkos::deep_copy(cos, c); \ + Kokkos::deep_copy(sin, s); \ + cublasSrot(singleton.handle, X.extent_int(0), X.data(), 1, Y.data(), 1, \ + cos.data(), sin.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ }; - -#define KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template <> \ - struct Rot*, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - true, ETI_SPEC_AVAIL> { \ - using Vector = Kokkos::View, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>; \ - using Scalar = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& space, Vector const& X, \ - Vector const& Y, Scalar const& c, Scalar const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,complex]"); \ - rot_print_specialization(); \ - KokkosBlas::Impl::CudaBlasSingleton& singleton = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSetStream(singleton.handle, space.cuda_stream())); \ - typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ - typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ - Kokkos::deep_copy(cos, c); \ - Kokkos::deep_copy(sin, s); \ - cublasCsrot(singleton.handle, X.extent_int(0), \ - reinterpret_cast(X.data()), 1, \ - reinterpret_cast(Y.data()), 1, \ - c.data(), s.data()); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rot*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using Vector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using Scalar = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& space, Vector const& X, Vector const& Y, \ + Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::rot[TPL_CUBLAS,complex]"); \ + rot_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ + typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ + Kokkos::deep_copy(cos, c); \ + Kokkos::deep_copy(sin, s); \ + cublasZdrot(singleton.handle, X.extent_int(0), \ + reinterpret_cast(X.data()), 1, \ + reinterpret_cast(Y.data()), 1, c.data(), \ + s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ }; +#define KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rot*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using Vector = Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using Scalar = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& space, Vector const& X, Vector const& Y, \ + Scalar const& c, Scalar const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::rot[TPL_CUBLAS,complex]"); \ + rot_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ + typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ + Kokkos::deep_copy(cos, c); \ + Kokkos::deep_copy(sin, s); \ + cublasCsrot(singleton.handle, X.extent_int(0), \ + reinterpret_cast(X.data()), 1, \ + reinterpret_cast(Y.data()), 1, c.data(), \ + s.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, Kokkos::CudaSpace, true) @@ -356,7 +358,7 @@ KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, Kokkos::CudaUVMSpace, true) KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, - Kokkos::CudaUVMSpace, false) + Kokkos::CudaUVMSpace, false) KOKKOSBLAS1_SROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, Kokkos::CudaSpace, true) @@ -390,7 +392,7 @@ KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, Kokkos::CudaUVMSpace, true) KOKKOSBLAS1_ZROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, - Kokkos::CudaUVMSpace, false) + Kokkos::CudaUVMSpace, false) KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, Kokkos::CudaSpace, true) @@ -410,6 +412,6 @@ KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, Kokkos::CudaUVMSpace, false) } // namespace Impl } // namespace KokkosBlas -#endif // KOKKOSKERNELS_ENABLE_TPL_CUBLAS +#endif // KOKKOSKERNELS_ENABLE_TPL_CUBLAS #endif diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp index c53fd9f5a0..3deda48a5c 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp @@ -259,34 +259,47 @@ KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::OpenMP, namespace KokkosBlas { namespace Impl { -#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg< \ - EXECSPACE, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - true, ETI_SPEC_AVAIL> { \ - using SViewType = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ - using MViewType = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rotg(EXECSPACE const& space, SViewType const& a, \ - SViewType const& b, MViewType const& c, \ - SViewType const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,double]"); \ - rotg_print_specialization(); \ - KokkosBlas::Impl::CudaBlasSingleton& singleton = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetStream(singleton.handle, space.cuda_stream())); \ - cublasDrotg(singleton.handle, a.data(), b.data(), c.data(), s.data()); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const& space, SViewType const& a, \ + SViewType const& b, MViewType const& c, \ + SViewType const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,double]"); \ + rotg_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + typename SViewType::HostMirror a_h = Kokkos::create_mirror_view(a); \ + typename SViewType::HostMirror b_h = Kokkos::create_mirror_view(b); \ + typename MViewType::HostMirror cos = Kokkos::create_mirror_view(c); \ + typename SViewType::HostMirror sin = Kokkos::create_mirror_view(s); \ + Kokkos::deep_copy(cos, c); \ + Kokkos::deep_copy(sin, s); \ + Kokkos::deep_copy(a_h, a); \ + Kokkos::deep_copy(b_h, b); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasDrotg( \ + singleton.handle, a_h.data(), b_h.data(), cos.data(), sin.data())); \ + Kokkos::deep_copy(c, cos); \ + Kokkos::deep_copy(s, sin); \ + Kokkos::deep_copy(a, a_h); \ + Kokkos::deep_copy(b, b_h); \ + Kokkos::Profiling::popRegion(); \ + } \ }; #define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ @@ -313,7 +326,20 @@ namespace Impl { KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - cublasSrotg(singleton.handle, a.data(), b.data(), c.data(), s.data()); \ + typename SViewType::HostMirror a_h = Kokkos::create_mirror_view(a); \ + typename SViewType::HostMirror b_h = Kokkos::create_mirror_view(b); \ + typename MViewType::HostMirror cos = Kokkos::create_mirror_view(c); \ + typename SViewType::HostMirror sin = Kokkos::create_mirror_view(s); \ + Kokkos::deep_copy(cos, c); \ + Kokkos::deep_copy(sin, s); \ + Kokkos::deep_copy(a_h, a); \ + Kokkos::deep_copy(b_h, b); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSrotg( \ + singleton.handle, a_h.data(), b_h.data(), cos.data(), sin.data())); \ + Kokkos::deep_copy(c, cos); \ + Kokkos::deep_copy(s, sin); \ + Kokkos::deep_copy(a, a_h); \ + Kokkos::deep_copy(b, b_h); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -345,10 +371,22 @@ namespace Impl { KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - cublasZrotg(singleton.handle, \ - reinterpret_cast(a.data()), \ - reinterpret_cast(b.data()), c.data(), \ - reinterpret_cast(s.data())); \ + typename SViewType::HostMirror a_h = Kokkos::create_mirror_view(a); \ + typename SViewType::HostMirror b_h = Kokkos::create_mirror_view(b); \ + typename MViewType::HostMirror cos = Kokkos::create_mirror_view(c); \ + typename SViewType::HostMirror sin = Kokkos::create_mirror_view(s); \ + Kokkos::deep_copy(cos, c); \ + Kokkos::deep_copy(sin, s); \ + Kokkos::deep_copy(a_h, a); \ + Kokkos::deep_copy(b_h, b); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasZrotg( \ + singleton.handle, reinterpret_cast(a_h.data()), \ + reinterpret_cast(b_h.data()), cos.data(), \ + reinterpret_cast(sin.data()))); \ + Kokkos::deep_copy(c, cos); \ + Kokkos::deep_copy(s, sin); \ + Kokkos::deep_copy(a, a_h); \ + Kokkos::deep_copy(b, b_h); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -379,9 +417,22 @@ namespace Impl { KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - cublasCrotg(singleton.handle, reinterpret_cast(a.data()), \ - reinterpret_cast(b.data()), c.data(), \ - reinterpret_cast(s.data())); \ + typename SViewType::HostMirror a_h = Kokkos::create_mirror_view(a); \ + typename SViewType::HostMirror b_h = Kokkos::create_mirror_view(b); \ + typename MViewType::HostMirror cos = Kokkos::create_mirror_view(c); \ + typename SViewType::HostMirror sin = Kokkos::create_mirror_view(s); \ + Kokkos::deep_copy(cos, c); \ + Kokkos::deep_copy(sin, s); \ + Kokkos::deep_copy(a_h, a); \ + Kokkos::deep_copy(b_h, b); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasCrotg( \ + singleton.handle, reinterpret_cast(a_h.data()), \ + reinterpret_cast(b_h.data()), cos.data(), \ + reinterpret_cast(sin.data()))); \ + Kokkos::deep_copy(c, cos); \ + Kokkos::deep_copy(s, sin); \ + Kokkos::deep_copy(a, a_h); \ + Kokkos::deep_copy(b, b_h); \ Kokkos::Profiling::popRegion(); \ } \ }; diff --git a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp index 0da3009d12..5a914befc1 100644 --- a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp @@ -181,8 +181,24 @@ namespace Impl { KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(s.handle, space.cuda_stream())); \ - cublasDrotmg(s.handle, d1.data(), d2.data(), x1.data(), y1.data(), \ - param.data()); \ + typename DXView::HostMirror d1_h = Kokkos::create_mirror_view(d1); \ + typename DXView::HostMirror d2_h = Kokkos::create_mirror_view(d2); \ + typename DXView::HostMirror x1_h = Kokkos::create_mirror_view(x1); \ + typename YView::non_const_type::HostMirror y1_h = \ + Kokkos::create_mirror_view(y1); \ + typename PView::HostMirror param_h = Kokkos::create_mirror_view(param); \ + Kokkos::deep_copy(d1_h, d1); \ + Kokkos::deep_copy(d2_h, d2); \ + Kokkos::deep_copy(x1_h, x1); \ + Kokkos::deep_copy(y1_h, y1); \ + Kokkos::deep_copy(param_h, param); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasDrotmg(s.handle, d1_h.data(), \ + d2_h.data(), x1_h.data(), \ + y1_h.data(), param_h.data())); \ + Kokkos::deep_copy(d1, d1_h); \ + Kokkos::deep_copy(d2, d2_h); \ + Kokkos::deep_copy(x1, x1_h); \ + Kokkos::deep_copy(param, param_h); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -227,9 +243,24 @@ KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(s.handle, space.cuda_stream())); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSrotmg(s.handle, d1.data(), \ - d2.data(), x1.data(), \ - y1.data(), param.data())); \ + typename DXView::HostMirror d1_h = Kokkos::create_mirror_view(d1); \ + typename DXView::HostMirror d2_h = Kokkos::create_mirror_view(d2); \ + typename DXView::HostMirror x1_h = Kokkos::create_mirror_view(x1); \ + typename YView::non_const_type::HostMirror y1_h = \ + Kokkos::create_mirror_view(y1); \ + typename PView::HostMirror param_h = Kokkos::create_mirror_view(param); \ + Kokkos::deep_copy(d1_h, d1); \ + Kokkos::deep_copy(d2_h, d2); \ + Kokkos::deep_copy(x1_h, x1); \ + Kokkos::deep_copy(y1_h, y1); \ + Kokkos::deep_copy(param_h, param); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSrotmg(s.handle, d1_h.data(), \ + d2_h.data(), x1_h.data(), \ + y1_h.data(), param_h.data())); \ + Kokkos::deep_copy(d1, d1_h); \ + Kokkos::deep_copy(d2, d2_h); \ + Kokkos::deep_copy(x1, x1_h); \ + Kokkos::deep_copy(param, param_h); \ Kokkos::Profiling::popRegion(); \ } \ }; diff --git a/blas/tpls/KokkosBlas_Host_tpl.cpp b/blas/tpls/KokkosBlas_Host_tpl.cpp index 1bf86ec4be..7d43703f43 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.cpp +++ b/blas/tpls/KokkosBlas_Host_tpl.cpp @@ -131,15 +131,16 @@ void F77_BLAS_MANGLE(zaxpy, /// rot /// void F77_BLAS_MANGLE(srot, SROT)(int const* N, float* X, int const* incx, - float* Y, int const* incy, float* c, float* s); + float* Y, int const* incy, float* c, float* s); void F77_BLAS_MANGLE(drot, DROT)(int const* N, double* X, int const* incx, - double* Y, int const* incy, double* c, double* s); -void F77_BLAS_MANGLE(crot, CROT)(int const* N, std::complex* X, int const* incx, - std::complex* Y, int const* incy, - float* c, float* s); -void F77_BLAS_MANGLE(zrot, ZROT)(int const* N, std::complex* X, int const* incx, - std::complex* Y, int const* incy, - double* c, double* s); + double* Y, int const* incy, double* c, + double* s); +void F77_BLAS_MANGLE(crot, CROT)(int const* N, std::complex* X, + int const* incx, std::complex* Y, + int const* incy, float* c, float* s); +void F77_BLAS_MANGLE(zrot, ZROT)(int const* N, std::complex* X, + int const* incx, std::complex* Y, + int const* incy, double* c, double* s); /// /// rotg @@ -461,8 +462,8 @@ void HostBlas::axpy(int n, const float alpha, const float* x, int x_inc, F77_FUNC_SAXPY(&n, &alpha, x, &x_inc, y, &y_inc); } template <> -void HostBlas::rot(int const N, float* X, int const incx, - float* Y, int const incy, float* c, float* s) { +void HostBlas::rot(int const N, float* X, int const incx, float* Y, + int const incy, float* c, float* s) { F77_FUNC_SROT(&N, X, &incx, Y, &incy, c, s); } template <> @@ -564,8 +565,8 @@ void HostBlas::axpy(int n, const double alpha, const double* x, F77_FUNC_DAXPY(&n, &alpha, x, &x_inc, y, &y_inc); } template <> -void HostBlas::rot(int const N, double* X, int const incx, - double* Y, int const incy, double* c, double* s) { +void HostBlas::rot(int const N, double* X, int const incx, double* Y, + int const incy, double* c, double* s) { F77_FUNC_DROT(&N, X, &incx, Y, &incy, c, s); } template <> @@ -682,9 +683,9 @@ void HostBlas >::axpy(int n, F77_FUNC_CAXPY(&n, &alpha, x, &x_inc, y, &y_inc); } template <> -void HostBlas >::rot(int const N, std::complex* X, int const incx, - std::complex* Y, int const incy, - float* c, float* s) { +void HostBlas >::rot(int const N, std::complex* X, + int const incx, std::complex* Y, + int const incy, float* c, float* s) { F77_FUNC_CROT(&N, X, &incx, Y, &incy, c, s); } template <> @@ -828,9 +829,11 @@ void HostBlas >::axpy(int n, F77_FUNC_ZAXPY(&n, &alpha, x, &x_inc, y, &y_inc); } template <> -void HostBlas >::rot(int const N, std::complex* X, int const incx, - std::complex* Y, int const incy, - double* c, double* s) { +void HostBlas >::rot(int const N, std::complex* X, + int const incx, + std::complex* Y, + int const incy, double* c, + double* s) { F77_FUNC_ZROT(&N, X, &incx, Y, &incy, c, s); } template <> diff --git a/blas/tpls/KokkosBlas_Host_tpl.hpp b/blas/tpls/KokkosBlas_Host_tpl.hpp index b6ab4aa351..b0746474d4 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.hpp +++ b/blas/tpls/KokkosBlas_Host_tpl.hpp @@ -76,8 +76,8 @@ struct HostBlas { static void axpy(int n, const T alpha, const T *x, int x_inc, /* */ T *y, int y_inc); - static void rot(int const N, T *X, int const incx, - T *Y, int const incy, mag_type *c, mag_type *s); + static void rot(int const N, T *X, int const incx, T *Y, int const incy, + mag_type *c, mag_type *s); static void rotg(T *a, T *b, mag_type *c, T *s); diff --git a/blas/unit_test/Test_Blas1_rotmg.hpp b/blas/unit_test/Test_Blas1_rotmg.hpp index 08ba20670a..143c7eb5d6 100644 --- a/blas/unit_test/Test_Blas1_rotmg.hpp +++ b/blas/unit_test/Test_Blas1_rotmg.hpp @@ -215,6 +215,13 @@ int test_rotmg() { constexpr int num_test_cases = 9; for (int test_case = 0; test_case < num_test_cases; ++test_case) { +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS + // There is a bug in the current cuBLAS implementation for this + // corner case so we do not test it when cuBLAS is enabled. + if (test_case == 4 || test_case == 5) { + continue; + } +#endif Test::set_rotmg_input_ref_vals(test_case, d1, d2, x1, y1, param, ref_vals); Test::test_rotmg_impl(d1, d2, x1, y1, param, ref_vals); } From 1891cf750dad6e1aa98aa2a419b1e268fbf73d1b Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 2 Nov 2022 17:51:06 -0600 Subject: [PATCH 144/226] ROT: applying clang-format --- blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp | 87 +++++++++++--------- 1 file changed, 50 insertions(+), 37 deletions(-) diff --git a/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp index 167effee2a..26c0ebde51 100644 --- a/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp @@ -61,15 +61,16 @@ namespace Impl { // Generic Host side BLAS (could be MKL or whatever) #ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS #define KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_BLAS(SCALAR, LAYOUT, EXECSPACE) \ - template <> \ - struct rot_tpl_spec_avail, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>> { \ - enum : bool { value = true }; \ + template <> \ + struct rot_tpl_spec_avail< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ }; #ifdef KOKKOS_ENABLE_SERIAL @@ -93,42 +94,54 @@ KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::LayoutLeft, // cuBLAS #ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS -#define KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ - template <> \ - struct rot_tpl_spec_avail, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>> { \ - enum : bool { value = true }; \ +#define KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(SCALAR, LAYOUT, EXECSPACE, \ + MEMSPACE) \ + template <> \ + struct rot_tpl_spec_avail< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ }; -KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutLeft, Kokkos::Cuda, Kokkos::CudaSpace) -KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, Kokkos::CudaSpace) -KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, Kokkos::LayoutLeft, Kokkos::Cuda, Kokkos::CudaSpace) -KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, Kokkos::LayoutLeft, Kokkos::Cuda, Kokkos::CudaSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) #endif // rocBLAS #ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS -#define KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ - template <> \ - struct rot_tpl_spec_avail, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>> { \ - enum : bool { value = true }; \ +#define KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(SCALAR, LAYOUT, EXECSPACE, \ + MEMSPACE) \ + template <> \ + struct rot_tpl_spec_avail< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ }; -KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutLeft, Kokkos::HIP, Kokkos::HIPSpace) -KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutLeft, Kokkos::HIP, Kokkos::HIPSpace) -KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, Kokkos::LayoutLeft, Kokkos::HIP, Kokkos::HIPSpace) -KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, Kokkos::LayoutLeft, Kokkos::HIP, Kokkos::HIPSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) #endif } // namespace Impl From 020ad7d97c728fedefb3ceb570184915593a77c8 Mon Sep 17 00:00:00 2001 From: Vinh Dang Date: Fri, 4 Nov 2022 00:51:57 -0700 Subject: [PATCH 145/226] Address Luc's comments --- .../KokkosSparse_sptrsv_cuSPARSE_impl.hpp | 171 +++++++----------- sparse/src/KokkosSparse_sptrsv_handle.hpp | 33 ++-- 2 files changed, 79 insertions(+), 125 deletions(-) diff --git a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp index d7c44579fe..19af87b91e 100644 --- a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp @@ -45,9 +45,8 @@ #ifndef _KOKKOSSPTRSVCUSPARSE_HPP #define _KOKKOSSPTRSVCUSPARSE_HPP -#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE -#include "cusparse.h" -#endif +#include "KokkosSparse_Utils_cusparse.hpp" + namespace KokkosSparse { namespace Impl { @@ -79,15 +78,17 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, throw std::runtime_error( "KokkosKernels sptrsvcuSPARSE_symbolic: MEMORY IS NOT ALLOCATED IN GPU " "DEVICE for CUSPARSE\n"); - } else if (is_idx_type_supported) { + } else if (!is_idx_type_supported) { + throw std::runtime_error( + "CUSPARSE requires local ordinals to be integer (32 bits or 64 " + "bits).\n"); + } else { bool is_lower = sptrsv_handle->is_lower_tri(); sptrsv_handle->create_cuSPARSE_Handle(trans, is_lower); typename KernelHandle::SPTRSVcuSparseHandleType* h = sptrsv_handle->get_cuSparseHandle(); - cusparseStatus_t status; - int64_t nnz = static_cast(entries.extent(0)); size_t pBufferSize; void* rm; @@ -95,105 +96,77 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, // cusparseCreateCsr only supports the same sizes (either 32 bits or 64 // bits) for row_map_type and entries_type if (std::is_same::value) { - if (!std::is_same::value) + if (!std::is_same::value) { sptrsv_handle->allocate_tmp_int_rowmap(row_map.extent(0)); - rm = !std::is_same::value - ? (void*)sptrsv_handle->get_int_rowmap_ptr_copy(row_map) - : (void*)row_map.data(); + rm = (void*)sptrsv_handle->get_int_rowmap_ptr_copy(row_map); + } else { + rm = (void*)row_map.data(); + } } else { // idx_type has 64 bits - if (!std::is_same::value) + if (!std::is_same::value) { sptrsv_handle->allocate_tmp_int64_rowmap(row_map.extent(0)); - rm = !std::is_same::value - ? (void*)sptrsv_handle->get_int64_rowmap_ptr_copy(row_map) - : (void*)row_map.data(); + rm = (void*)sptrsv_handle->get_int64_rowmap_ptr_copy(row_map); + } else { + rm = (void*)row_map.data(); + } } const scalar_type alpha = scalar_type(1.0); - cusparseIndexType_t cudaCsrColIndType, cudaCsrRowMapType; - cudaDataType cudaValueType; - - if (std::is_same::value) { - cudaCsrColIndType = CUSPARSE_INDEX_32I; - cudaCsrRowMapType = CUSPARSE_INDEX_32I; - } else { // idx_type has 64 bits - cudaCsrColIndType = CUSPARSE_INDEX_64I; - cudaCsrRowMapType = CUSPARSE_INDEX_64I; - } - - if (std::is_same::value) { - cudaValueType = CUDA_R_64F; - } else if (std::is_same::value) { - cudaValueType = CUDA_R_32F; - } else if (std::is_same>::value) { - cudaValueType = CUDA_C_64F; - } else if (std::is_same>::value) { - cudaValueType = CUDA_C_32F; - } else { - throw std::runtime_error("CUSPARSE wrapper error: unsupported type.\n"); - } + cusparseIndexType_t cudaCsrRowMapType = + cusparse_index_type_t_from(); + cusparseIndexType_t cudaCsrColIndType = + cusparse_index_type_t_from(); + cudaDataType cudaValueType = cuda_data_type_from(); // Create sparse matrix in CSR format - status = cusparseCreateCsr(&(h->matDescr), static_cast(nrows), - static_cast(nrows), nnz, rm, - (void*)entries.data(), (void*)values.data(), - cudaCsrRowMapType, cudaCsrColIndType, - CUSPARSE_INDEX_BASE_ZERO, cudaValueType); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &(h->matDescr), static_cast(nrows), + static_cast(nrows), nnz, rm, (void*)entries.data(), + (void*)values.data(), cudaCsrRowMapType, cudaCsrColIndType, + CUSPARSE_INDEX_BASE_ZERO, cudaValueType)); // Create dummy dense vector B (RHS) nnz_scalar_view_t b_dummy("b_dummy", nrows); - cusparseCreateDnVec(&(h->vecBDescr_dummy), static_cast(nrows), - b_dummy.data(), cudaValueType); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCreateDnVec(&(h->vecBDescr_dummy), static_cast(nrows), + b_dummy.data(), cudaValueType)); // Create dummy dense vector X (LHS) nnz_scalar_view_t x_dummy("x_dummy", nrows); - cusparseCreateDnVec(&(h->vecXDescr_dummy), static_cast(nrows), - x_dummy.data(), cudaValueType); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCreateDnVec(&(h->vecXDescr_dummy), static_cast(nrows), + x_dummy.data(), cudaValueType)); // Specify Lower|Upper fill mode if (is_lower) { cusparseFillMode_t fillmode = CUSPARSE_FILL_MODE_LOWER; - cusparseSpMatSetAttribute(h->matDescr, CUSPARSE_SPMAT_FILL_MODE, - &fillmode, sizeof(fillmode)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpMatSetAttribute( + h->matDescr, CUSPARSE_SPMAT_FILL_MODE, &fillmode, sizeof(fillmode))); } else { cusparseFillMode_t fillmode = CUSPARSE_FILL_MODE_UPPER; - cusparseSpMatSetAttribute(h->matDescr, CUSPARSE_SPMAT_FILL_MODE, - &fillmode, sizeof(fillmode)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpMatSetAttribute( + h->matDescr, CUSPARSE_SPMAT_FILL_MODE, &fillmode, sizeof(fillmode))); } // Specify Unit|Non-Unit diagonal type. cusparseDiagType_t diagtype = CUSPARSE_DIAG_TYPE_NON_UNIT; - cusparseSpMatSetAttribute(h->matDescr, CUSPARSE_SPMAT_DIAG_TYPE, &diagtype, - sizeof(diagtype)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpMatSetAttribute( + h->matDescr, CUSPARSE_SPMAT_DIAG_TYPE, &diagtype, sizeof(diagtype))); // Allocate an external buffer for analysis - status = cusparseSpSV_bufferSize( + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpSV_bufferSize( h->handle, h->transpose, &alpha, h->matDescr, h->vecBDescr_dummy, h->vecXDescr_dummy, cudaValueType, CUSPARSE_SPSV_ALG_DEFAULT, - h->spsvDescr, &pBufferSize); - - if (CUSPARSE_STATUS_SUCCESS != status) - std::cout << "bufferSize status error name " << (status) << std::endl; + h->spsvDescr, &pBufferSize)); // pBuffer returned by cudaMalloc is automatically aligned to 128 bytes. - cudaError_t my_error; - my_error = cudaMalloc((void**)&(h->pBuffer), pBufferSize); - - if (cudaSuccess != my_error) - std::cout << "cudmalloc pBuffer error_t error name " - << cudaGetErrorString(my_error) << std::endl; + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void**)&(h->pBuffer), pBufferSize)); // Run analysis - status = cusparseSpSV_analysis(h->handle, h->transpose, &alpha, h->matDescr, - h->vecBDescr_dummy, h->vecXDescr_dummy, - cudaValueType, CUSPARSE_SPSV_ALG_DEFAULT, - h->spsvDescr, h->pBuffer); - - if (CUSPARSE_STATUS_SUCCESS != status) - std::cout << "analysis status error name " << (status) << std::endl; - } else { - throw std::runtime_error( - "CUSPARSE requires local ordinals to be integer (32 bits or 64 " - "bits).\n"); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpSV_analysis( + h->handle, h->transpose, &alpha, h->matDescr, h->vecBDescr_dummy, + h->vecXDescr_dummy, cudaValueType, CUSPARSE_SPSV_ALG_DEFAULT, + h->spsvDescr, h->pBuffer)); } #else // CUDA_VERSION < 11030 typedef typename KernelHandle::nnz_lno_t idx_type; @@ -273,7 +246,7 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, if (CUSPARSE_STATUS_SUCCESS != status) std::cout << "analysis status error name " << (status) << std::endl; - } else if (std::is_same>::value) { + } else if (std::is_same >::value) { cusparseZcsrsv2_bufferSize(h->handle, h->transpose, nrows, nnz, h->descr, (cuDoubleComplex*)vals, (int*)rm, (int*)ent, h->info, &pBufferSize); @@ -292,7 +265,7 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, if (CUSPARSE_STATUS_SUCCESS != status) std::cout << "analysis status error name " << (status) << std::endl; - } else if (std::is_same>::value) { + } else if (std::is_same >::value) { cusparseCcsrsv2_bufferSize(h->handle, h->transpose, nrows, nnz, h->descr, (cuComplex*)vals, (int*)rm, (int*)ent, h->info, &pBufferSize); @@ -362,46 +335,32 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, throw std::runtime_error( "KokkosKernels sptrsvcuSPARSE_solve: MEMORY IS NOT ALLOCATED IN GPU " "DEVICE for CUSPARSE\n"); - } else if (is_idx_type_supported) { - cusparseStatus_t status; - + } else if (!is_idx_type_supported) { + throw std::runtime_error( + "CUSPARSE requires local ordinals to be integer (32 bits or 64 " + "bits).\n"); + } else { typename KernelHandle::SPTRSVcuSparseHandleType* h = sptrsv_handle->get_cuSparseHandle(); const scalar_type alpha = scalar_type(1.0); - cudaDataType cudaValueType; - if (std::is_same::value) { - cudaValueType = CUDA_R_64F; - } else if (std::is_same::value) { - cudaValueType = CUDA_R_32F; - } else if (std::is_same>::value) { - cudaValueType = CUDA_C_64F; - } else if (std::is_same>::value) { - cudaValueType = CUDA_C_32F; - } else { - throw std::runtime_error("CUSPARSE wrapper error: unsupported type.\n"); - } + cudaDataType cudaValueType = cuda_data_type_from(); // Create dense vector B (RHS) - cusparseCreateDnVec(&(h->vecBDescr), static_cast(nrows), - (void*)rhs.data(), cudaValueType); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCreateDnVec(&(h->vecBDescr), static_cast(nrows), + (void*)rhs.data(), cudaValueType)); // Create dense vector X (LHS) - cusparseCreateDnVec(&(h->vecXDescr), static_cast(nrows), - (void*)lhs.data(), cudaValueType); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCreateDnVec(&(h->vecXDescr), static_cast(nrows), + (void*)lhs.data(), cudaValueType)); // Solve - status = cusparseSpSV_solve(h->handle, h->transpose, &alpha, h->matDescr, - h->vecBDescr, h->vecXDescr, cudaValueType, - CUSPARSE_SPSV_ALG_DEFAULT, h->spsvDescr); - - if (CUSPARSE_STATUS_SUCCESS != status) - std::cout << "solve status error name " << (status) << std::endl; - } else { - throw std::runtime_error( - "CUSPARSE requires local ordinals to be integer (32 bits or 64 " - "bits).\n"); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpSV_solve( + h->handle, h->transpose, &alpha, h->matDescr, h->vecBDescr, + h->vecXDescr, cudaValueType, CUSPARSE_SPSV_ALG_DEFAULT, h->spsvDescr)); } #else // CUDA_VERSION < 11030 typedef typename KernelHandle::nnz_lno_t idx_type; @@ -450,7 +409,7 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, if (CUSPARSE_STATUS_SUCCESS != status) std::cout << "solve status error name " << (status) << std::endl; - } else if (std::is_same>::value) { + } else if (std::is_same >::value) { cuDoubleComplex cualpha; cualpha.x = 1.0; cualpha.y = 0.0; @@ -461,7 +420,7 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, if (CUSPARSE_STATUS_SUCCESS != status) std::cout << "solve status error name " << (status) << std::endl; - } else if (std::is_same>::value) { + } else if (std::is_same >::value) { cuComplex cualpha; cualpha.x = 1.0; cualpha.y = 0.0; diff --git a/sparse/src/KokkosSparse_sptrsv_handle.hpp b/sparse/src/KokkosSparse_sptrsv_handle.hpp index cf1b1ee564..7933d11a8c 100644 --- a/sparse/src/KokkosSparse_sptrsv_handle.hpp +++ b/sparse/src/KokkosSparse_sptrsv_handle.hpp @@ -50,7 +50,7 @@ #define KOKKOSSPARSE_SPTRSVHANDLE_HPP #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE -#include "cusparse.h" +#include "KokkosSparse_Utils_cusparse.hpp" #endif #if defined(KOKKOS_ENABLE_CUDA) && 10000 < CUDA_VERSION && \ @@ -167,12 +167,10 @@ class SPTRSVHandle { void *pBuffer{nullptr}; cuSparseHandleType(bool transpose_, bool is_lower) { - cusparseStatus_t status; - status = cusparseCreate(&handle); - if (status != CUSPARSE_STATUS_SUCCESS) { - throw std::runtime_error("cusparseCreate ERROR\n"); - } - cusparseSetPointerMode(handle, CUSPARSE_POINTER_MODE_HOST); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreate(&handle)); + + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetPointerMode(handle, CUSPARSE_POINTER_MODE_HOST)); if (transpose_) { transpose = CUSPARSE_OPERATION_TRANSPOSE; @@ -180,24 +178,21 @@ class SPTRSVHandle { transpose = CUSPARSE_OPERATION_NON_TRANSPOSE; } - status = cusparseSpSV_createDescr(&spsvDescr); - if (status != CUSPARSE_STATUS_SUCCESS) { - throw std::runtime_error("cusparseSpSV_createDescr spsvDescr ERROR\n"); - } + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpSV_createDescr(&spsvDescr)); } ~cuSparseHandleType() { if (pBuffer != nullptr) { - cudaFree(pBuffer); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(pBuffer)); pBuffer = nullptr; } - cusparseDestroySpMat(matDescr); - cusparseDestroyDnVec(vecBDescr); - cusparseDestroyDnVec(vecBDescr_dummy); - cusparseDestroyDnVec(vecXDescr); - cusparseDestroyDnVec(vecXDescr_dummy); - cusparseSpSV_destroyDescr(spsvDescr); - cusparseDestroy(handle); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroySpMat(matDescr)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(vecBDescr)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(vecBDescr_dummy)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(vecXDescr)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(vecXDescr_dummy)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpSV_destroyDescr(spsvDescr)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroy(handle)); } }; #else // CUDA_VERSION < 11030 From 75292a766187f7b518e6c3100e5a6a7cb479e5bb Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Fri, 4 Nov 2022 16:00:04 -0600 Subject: [PATCH 146/226] ROTM: adding blas 1 function for modified rotation This adds the final rotation function to Kokkos Kernels: rotm. It should include function API, specialization, implementation, ETI, TPLs and tests. --- blas/CMakeLists.txt | 7 + .../KokkosBlas1_rotm_eti_spec_inst.cpp.in | 54 +++ .../KokkosBlas1_rotm_eti_spec_avail.hpp.in | 51 +++ .../KokkosBlas1_rotm_eti_spec_decl.hpp.in | 51 +++ blas/impl/KokkosBlas1_rotm_impl.hpp | 137 +++++++ blas/impl/KokkosBlas1_rotm_spec.hpp | 166 +++++++++ blas/src/KokkosBlas1_rotm.hpp | 128 +++++++ blas/tpls/KokkosBlas1_rotm_tpl_spec_avail.hpp | 153 ++++++++ blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp | 350 ++++++++++++++++++ blas/tpls/KokkosBlas_Host_tpl.cpp | 23 ++ blas/tpls/KokkosBlas_Host_tpl.hpp | 3 + blas/unit_test/Test_Blas.hpp | 1 + blas/unit_test/Test_Blas1_rotm.hpp | 167 +++++++++ 13 files changed, 1291 insertions(+) create mode 100644 blas/eti/generated_specializations_cpp/rotm/KokkosBlas1_rotm_eti_spec_inst.cpp.in create mode 100644 blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_avail.hpp.in create mode 100644 blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_decl.hpp.in create mode 100644 blas/impl/KokkosBlas1_rotm_impl.hpp create mode 100644 blas/impl/KokkosBlas1_rotm_spec.hpp create mode 100644 blas/src/KokkosBlas1_rotm.hpp create mode 100644 blas/tpls/KokkosBlas1_rotm_tpl_spec_avail.hpp create mode 100644 blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp create mode 100644 blas/unit_test/Test_Blas1_rotm.hpp diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt index 4e9cef22e7..067d2ff732 100644 --- a/blas/CMakeLists.txt +++ b/blas/CMakeLists.txt @@ -255,6 +255,13 @@ KOKKOSKERNELS_GENERATE_ETI(Blas1_rotg rotg TYPE_LISTS FLOATS LAYOUTS DEVICES ) +KOKKOSKERNELS_GENERATE_ETI(Blas1_rotm rotm + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS REAL_FLOATS LAYOUTS DEVICES +) + KOKKOSKERNELS_GENERATE_ETI(Blas1_rotmg rotmg COMPONENTS blas HEADER_LIST ETI_HEADERS diff --git a/blas/eti/generated_specializations_cpp/rotm/KokkosBlas1_rotm_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/rotm/KokkosBlas1_rotm_eti_spec_inst.cpp.in new file mode 100644 index 0000000000..cc8ca57e80 --- /dev/null +++ b/blas/eti/generated_specializations_cpp/rotm/KokkosBlas1_rotm_eti_spec_inst.cpp.in @@ -0,0 +1,54 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + + +#define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true +#include "KokkosKernels_config.h" +#include "KokkosBlas1_rotm_spec.hpp" + +namespace KokkosBlas { +namespace Impl { +@BLAS1_ROTM_ETI_INST_BLOCK@ +} //IMPL +} //Kokkos diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_avail.hpp.in new file mode 100644 index 0000000000..ac39ed93f2 --- /dev/null +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_avail.hpp.in @@ -0,0 +1,51 @@ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROTM_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_ROTM_ETI_SPEC_AVAIL_HPP_ + +namespace KokkosBlas { +namespace Impl { +@BLAS1_ROTM_ETI_AVAIL_BLOCK@ + } //IMPL +} //Kokkos +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_decl.hpp.in new file mode 100644 index 0000000000..ec5395bd2d --- /dev/null +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_decl.hpp.in @@ -0,0 +1,51 @@ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROTM_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_ROTM_ETI_SPEC_DECL_HPP_ + +namespace KokkosBlas { +namespace Impl { +@BLAS1_ROTM_ETI_DECL_BLOCK@ + } //IMPL +} //Kokkos +#endif diff --git a/blas/impl/KokkosBlas1_rotm_impl.hpp b/blas/impl/KokkosBlas1_rotm_impl.hpp new file mode 100644 index 0000000000..cffc716839 --- /dev/null +++ b/blas/impl/KokkosBlas1_rotm_impl.hpp @@ -0,0 +1,137 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROTM_IMPL_HPP_ +#define KOKKOSBLAS1_ROTM_IMPL_HPP_ + +#include +#include +#include +#include + +namespace KokkosBlas { +namespace Impl { + +template +struct rotm_functor { + using Scalar = typename VectorView::non_const_value_type; + + // Dispatch tags + struct minus_one_tag {}; + struct zero_tag {}; + struct one_tag {}; + + VectorView X, Y; + ParamView param; + + rotm_functor(VectorView const& X_, VectorView const& Y_, + ParamView const& param_) + : X(X_), Y(Y_), param(param_) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const minus_one_tag&, const int idx) const { + Scalar const tmp = X(idx); + X(idx) = param(1) * tmp + param(3) * Y(idx); + Y(idx) = param(2) * tmp + param(4) * Y(idx); + } + + KOKKOS_INLINE_FUNCTION + void operator()(const zero_tag&, const int idx) const { + Scalar const tmp = X(idx); + X(idx) = tmp + param(3) * Y(idx); + Y(idx) = param(2) * tmp + Y(idx); + } + + KOKKOS_INLINE_FUNCTION + void operator()(const one_tag&, const int idx) const { + Scalar const tmp = X(idx); + X(idx) = param(1) * tmp + Y(idx); + Y(idx) = -tmp + param(4) * Y(idx); + } +}; + +template +void Rotm_Invoke(execution_space const& space, VectorView const& X, + VectorView const& Y, ParamView const& param) { + using Scalar = typename VectorView::value_type; + static_assert(!Kokkos::ArithTraits::is_complex, + "rotm is not defined for complex types!"); + + Scalar const zero = Kokkos::ArithTraits::zero(); + Scalar const one = Kokkos::ArithTraits::one(); + Scalar const two = one + one; + + rotm_functor myFunc(X, Y, param); + + typename ParamView::HostMirror param_h = Kokkos::create_mirror_view(param); + Kokkos::deep_copy(param_h, param); + Scalar const flag = param_h(0); + + if (flag == -two) { + return; + } else if (flag == -one) { + Kokkos::RangePolicy< + execution_space, + typename rotm_functor::minus_one_tag> + rotm_policy(space, 0, X.extent(0)); + Kokkos::parallel_for("KokkosBlas1::rotm_minus_one", rotm_policy, myFunc); + } else if (flag == zero) { + Kokkos::RangePolicy::zero_tag> + rotm_policy(space, 0, X.extent(0)); + Kokkos::parallel_for("KokkosBlas1::rotm_zero", rotm_policy, myFunc); + } else if (flag == one) { + Kokkos::RangePolicy::one_tag> + rotm_policy(space, 0, X.extent(0)); + Kokkos::parallel_for("KokkosBlas1::rotm_one", rotm_policy, myFunc); + } else { + throw std::runtime_error( + "KokkosBlas::rotm: param(0) is not -2, -1, 0 or 1!"); + } +} + +} // namespace Impl +} // namespace KokkosBlas + +#endif // KOKKOSBLAS1_ROTM_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_rotm_spec.hpp b/blas/impl/KokkosBlas1_rotm_spec.hpp new file mode 100644 index 0000000000..a43086c659 --- /dev/null +++ b/blas/impl/KokkosBlas1_rotm_spec.hpp @@ -0,0 +1,166 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_ROTM_SPEC_HPP_ +#define KOKKOSBLAS1_ROTM_SPEC_HPP_ + +#include +#include + +// Include the actual functors +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +#include +#endif + +namespace KokkosBlas { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct rotm_eti_spec_avail { + enum : bool { value = false }; +}; +} // namespace Impl +} // namespace KokkosBlas + +// +// Macro for declaration of full specialization availability +// KokkosBlas::Impl::Rotm. This is NOT for users!!! All +// the declarations of full specializations go in this header file. +// We may spread out definitions (see _INST macro below) across one or +// more .cpp files. +// +#define KOKKOSBLAS1_ROTM_ETI_SPEC_AVAIL(SCALAR, LAYOUT, EXEC_SPACE, MEM_SPACE) \ + template <> \ + struct rotm_eti_spec_avail< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +// Include the actual specialization declarations +#include +#include + +namespace KokkosBlas { +namespace Impl { + +// Unification layer +template < + class execution_space, class VectorView, class ParamView, + bool tpl_spec_avail = + rotm_tpl_spec_avail::value, + bool eti_spec_avail = + rotm_eti_spec_avail::value> +struct Rotm { + static void rotm(execution_space const& space, VectorView const& X, + VectorView const& Y, ParamView const& param); +}; + +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +//! Full specialization of Rotm. +template +struct Rotm { + static void rotm(execution_space const& space, VectorView const& X, + VectorView const& Y, ParamView const& param) { + Kokkos::Profiling::pushRegion(KOKKOSKERNELS_IMPL_COMPILE_LIBRARY + ? "KokkosBlas::rotm[ETI]" + : "KokkosBlas::rotm[noETI]"); +#ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION + if (KOKKOSKERNELS_IMPL_COMPILE_LIBRARY) + printf("KokkosBlas1::rotm<> ETI specialization for < %s, %s >\n", + typeid(VectorView).name(), typeid(ParamView).name()); + else { + printf("KokkosBlas1::rotm<> non-ETI specialization for < %s, %s >\n", + typeid(VectorView).name(), typeid(ParamView).name()); + } +#endif + Rotm_Invoke(space, X, Y, param); + Kokkos::Profiling::popRegion(); + } +}; +#endif + +} // namespace Impl +} // namespace KokkosBlas + +// +// Macro for declaration of full specialization of +// KokkosBlas::Impl::Rotm. This is NOT for users!!! All +// the declarations of full specializations go in this header file. +// We may spread out definitions (see _DEF macro below) across one or +// more .cpp files. +// +#define KOKKOSBLAS1_ROTM_ETI_SPEC_DECL(SCALAR, LAYOUT, EXEC_SPACE, MEM_SPACE) \ + extern template struct Rotm< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + false, true>; + +// +// Macro for definition of full specialization of +// KokkosBlas::Impl::Rotm. This is NOT for users!!! We +// use this macro in one or more .cpp files in this directory. +// +#define KOKKOSBLAS1_ROTM_ETI_SPEC_INST(SCALAR, LAYOUT, EXEC_SPACE, MEM_SPACE) \ + template struct Rotm< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + false, true>; + +#include +#include + +#endif // KOKKOSBLAS1_ROTM_SPEC_HPP_ diff --git a/blas/src/KokkosBlas1_rotm.hpp b/blas/src/KokkosBlas1_rotm.hpp new file mode 100644 index 0000000000..38e0a78039 --- /dev/null +++ b/blas/src/KokkosBlas1_rotm.hpp @@ -0,0 +1,128 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_ROTM_HPP_ +#define KOKKOSBLAS1_ROTM_HPP_ + +#include +#include + +namespace KokkosBlas { + +/// \brief Applies modified Givens rotation coefficients to vectors x and y. +/// +/// \tparam execution_space the execution space where the kernel will be +/// executed, it can be used to specify a stream too. +/// \tparam VectorView a rank1 view type that hold non const data +/// \tparam ParamView a rank1 view of static extent [5] type that +/// holds const data +/// +/// \param space [in] execution space used for parallel loops in this kernel +/// \param x1 [in/out] vector to be rotated with param coefficients +/// \param y1 [in/out] vector to be rotated with param coefficients +/// \param param [in] output of rotmg contains rotation coefficients +/// +template +void rotm(execution_space const& space, VectorView const& X, + VectorView const& Y, ParamView const& param) { + static_assert(Kokkos::is_execution_space::value, + "rotm: execution_space template parameter is not a Kokkos " + "execution space."); + static_assert( + VectorView::rank == 1, + "rotm: VectorView template parameter needs to be a rank 1 view"); + static_assert(ParamView::rank == 1, + "rotm: ParamView template parameter needs to be a rank 1 view"); + static_assert( + Kokkos::SpaceAccessibility::accessible, + "rotm: VectorView template parameter memory space needs to be accessible " + "from execution_space template parameter"); + static_assert( + Kokkos::SpaceAccessibility::accessible, + "rotm: ScalarView template parameter memory space needs to be accessible " + "from execution_space template parameter"); + static_assert( + std::is_same::value, + "rotm: VectorView template parameter needs to store non-const values"); + static_assert( + !Kokkos::ArithTraits::is_complex, + "rotm: VectorView template parameter cannot use complex value_type"); + static_assert( + !Kokkos::ArithTraits::is_complex, + "rotm: ParamView template parameter cannot use complex value_type"); + + using VectorView_Internal = Kokkos::View< + typename VectorView::non_const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + Kokkos::Device, + Kokkos::MemoryTraits>; + + using ParamView_Internal = Kokkos::View< + typename ParamView::const_value_type[5], + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + Kokkos::Device, + Kokkos::MemoryTraits>; + + VectorView_Internal X_(X), Y_(Y); + ParamView_Internal param_(param); + + Kokkos::Profiling::pushRegion("KokkosBlas::rotm"); + Impl::Rotm::rotm( + space, X_, Y_, param_); + Kokkos::Profiling::popRegion(); +} + +template +void rotm(VectorView const& X, VectorView const& Y, ParamView const& param) { + const typename VectorView::execution_space space = + typename VectorView::execution_space(); + rotm(space, X, Y, param); +} + +} // namespace KokkosBlas + +#endif // KOKKOSBLAS1_ROTM_HPP_ diff --git a/blas/tpls/KokkosBlas1_rotm_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotm_tpl_spec_avail.hpp new file mode 100644 index 0000000000..668b31e435 --- /dev/null +++ b/blas/tpls/KokkosBlas1_rotm_tpl_spec_avail.hpp @@ -0,0 +1,153 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_HPP_ + +namespace KokkosBlas { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct rotm_tpl_spec_avail { + enum : bool { value = false }; +}; +} // namespace Impl +} // namespace KokkosBlas + +namespace KokkosBlas { +namespace Impl { + +// Generic Host side BLAS (could be MKL or whatever) +// ARMPL is disabled as it does not detect some corner +// cases correctly which leads to failing unit-tests +#if defined(KOKKOSKERNELS_ENABLE_TPL_BLAS) +#define KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_BLAS(SCALAR, LAYOUT, EXEC_SPACE, \ + MEM_SPACE) \ + template <> \ + struct rotm_tpl_spec_avail< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +#ifdef KOKKOS_ENABLE_SERIAL +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutRight, + Kokkos::Serial, Kokkos::HostSpace) +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace) +#endif + +#ifdef KOKKOS_ENABLE_OPENMP +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace) +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutRight, + Kokkos::OpenMP, Kokkos::HostSpace) +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace) +#endif +#endif // KOKKOSKERNELS_ENABLE_TPL_BLAS + +// cuBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS +#define KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_CUBLAS(SCALAR, LAYOUT, EXEC_SPACE, \ + MEM_SPACE) \ + template <> \ + struct rotm_tpl_spec_avail< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutRight, + Kokkos::Cuda, Kokkos::CudaSpace) +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace) +#endif + +// rocBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS +#define KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_ROCBLAS(SCALAR, LAYOUT, EXEC_SPACE, \ + MEM_SPACE) \ + template <> \ + struct rotm_tpl_spec_avail< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutRight, + Kokkos::HIP, Kokkos::HIPSpace) +KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace) +#endif + +} // namespace Impl +} // namespace KokkosBlas +#endif diff --git a/blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp new file mode 100644 index 0000000000..a73b95e7e8 --- /dev/null +++ b/blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp @@ -0,0 +1,350 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_HPP_ + +namespace KokkosBlas { +namespace Impl { + +namespace { +template +inline void rotm_print_specialization() { +#ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION + printf("KokkosBlas1::rotm<> TPL Blas specialization for < %s >\n", + typeid(Scalar).name()); +#endif +} +} // namespace +} // namespace Impl +} // namespace KokkosBlas + +// Generic Host side BLAS (could be MKL or whatever) +#if defined(KOKKOSKERNELS_ENABLE_TPL_BLAS) +#include "KokkosBlas_Host_tpl.hpp" + +namespace KokkosBlas { +namespace Impl { + +#define KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(SCALAR, LAYOUT, EXEC_SPACE, \ + MEM_SPACE, ETI_SPEC_AVAIL) \ + template <> \ + struct Rotm< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using VectorView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using ParamView = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotm(EXEC_SPACE const& /* space */, VectorView& X, \ + VectorView& Y, ParamView& param) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotm[TPL_BLAS,SCALAR]"); \ + HostBlas::rotm(X.extent(0), X.data(), 1, Y.data(), 1, \ + param.data()); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#ifdef KOKKOS_ENABLE_SERIAL +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, false) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, false) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutLeft, Kokkos::Serial, + Kokkos::HostSpace, false) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutRight, Kokkos::Serial, + Kokkos::HostSpace, false) +#endif + +#ifdef KOKKOS_ENABLE_OPENMP +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, false) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(double, Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, false) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutLeft, Kokkos::OpenMP, + Kokkos::HostSpace, false) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, true) +KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_BLAS(float, Kokkos::LayoutRight, Kokkos::OpenMP, + Kokkos::HostSpace, false) +#endif + +} // namespace Impl +} // namespace KokkosBlas + +#endif // KOKKOSKERNELS_ENABLE_TPL_BLAS + +// cuBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS +#include + +namespace KokkosBlas { +namespace Impl { + +#define KOKKOSBLAS1_DROTM_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXEC_SPACE, MEM_SPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotm< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using VectorView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using ParamView = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + \ + static void rotm(EXEC_SPACE const& space, VectorView const& X, \ + VectorView const& Y, ParamView const& param) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotm[TPL_CUBLAS,double]"); \ + rotm_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& s = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(s.handle, space.cuda_stream())); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(s.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(s.handle, CUBLAS_POINTER_MODE_DEVICE)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasDrotm( \ + s.handle, X.extent(0), X.data(), 1, Y.data(), 1, param.data())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(s.handle, pointer_mode)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +KOKKOSBLAS1_DROTM_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_DROTM_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_DROTM_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_DROTM_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) + +#define KOKKOSBLAS1_SROTM_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXEC_SPACE, MEM_SPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotm< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using VectorView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using ParamView = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + \ + static void rotm(EXEC_SPACE const& space, VectorView const& X, \ + VectorView const& Y, ParamView const& param) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotm[TPL_CUBLAS,float]"); \ + rotm_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& s = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(s.handle, space.cuda_stream())); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(s.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(s.handle, CUBLAS_POINTER_MODE_DEVICE)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSrotm( \ + s.handle, X.extent(0), X.data(), 1, Y.data(), 1, param.data())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(s.handle, pointer_mode)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +KOKKOSBLAS1_SROTM_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_SROTM_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_SROTM_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_SROTM_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) + +} // namespace Impl +} // namespace KokkosBlas + +#endif + +// rocBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS +#include + +namespace KokkosBlas { +namespace Impl { + +#define KOKKOSBLAS1_DROTM_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXEC_SPACE, MEM_SPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotm< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using DXView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using YView = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using PView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + \ + static void rotm(EXEC_SPACE const& space, DXView const& d1, \ + DXView const& d2, DXView const& x1, YView const& y1, \ + PView const& param) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,double]"); \ + rotm_print_specialization(); \ + KokkosBlas::Impl::RocBlasSingleton& s = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblasSetStream(s.handle, space.hip_stream())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_drotm(s.handle, &a, &b, &c, &s)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +KOKKOSBLAS1_DROTM_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_DROTM_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_DROTM_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, false) +KOKKOSBLAS1_DROTM_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, false) + +#define KOKKOSBLAS1_SROTM_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXEC_SPACE, MEM_SPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotm< \ + EXEC_SPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using DXView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using YView = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using PView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + \ + static void rotm(EXEC_SPACE const& space, DXView const& d1, \ + DXView const& d2, DXView const& x1, YView const& y1, \ + PView const& param) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,float]"); \ + rotm_print_specialization(); \ + KokkosBlas::Impl::RocBlasSingleton& s = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblasSetStream(s.handle, space.hip_stream())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_srotm(s.handle, &a, &b, &c, &s)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +KOKKOSBLAS1_SROTM_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_SROTM_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_SROTM_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, false) +KOKKOSBLAS1_SROTM_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, false) + +} // namespace Impl +} // namespace KokkosBlas + +#endif + +#endif diff --git a/blas/tpls/KokkosBlas_Host_tpl.cpp b/blas/tpls/KokkosBlas_Host_tpl.cpp index 64bfe57ef8..efa4b89187 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.cpp +++ b/blas/tpls/KokkosBlas_Host_tpl.cpp @@ -139,6 +139,16 @@ void F77_BLAS_MANGLE(zrotg, ZROTG)(std::complex* a, std::complex* b, double* c, std::complex* s); +/// +/// rotmg +/// +void F77_BLAS_MANGLE(srotm, SROTM)(const int* n, float* X, const int* incx, + float* Y, const int* incy, + float const* param); +void F77_BLAS_MANGLE(drotm, DROTM)(const int* n, double* X, const int* incx, + double* Y, const int* incy, + double const* param); + /// /// rotmg /// @@ -364,6 +374,9 @@ void F77_BLAS_MANGLE(zscal, #define F77_FUNC_CROTG F77_BLAS_MANGLE(crotg, CROTG) #define F77_FUNC_ZROTG F77_BLAS_MANGLE(zrotg, ZROTG) +#define F77_FUNC_SROTM F77_BLAS_MANGLE(srotm, SROTM) +#define F77_FUNC_DROTM F77_BLAS_MANGLE(drotm, DROTM) + #define F77_FUNC_SROTMG F77_BLAS_MANGLE(srotmg, SROTMG) #define F77_FUNC_DROTMG F77_BLAS_MANGLE(drotmg, DROTMG) @@ -446,6 +459,11 @@ void HostBlas::rotg(float* a, float* b, float* c, float* s) { F77_FUNC_SROTG(a, b, c, s); } template <> +void HostBlas::rotm(const int n, float* X, const int incx, float* Y, + const int incy, const float* param) { + F77_FUNC_SROTM(&n, X, &incx, Y, &incy, param); +} +template <> void HostBlas::rotmg(float* d1, float* d2, float* x1, const float* y1, float* param) { F77_FUNC_SROTMG(d1, d2, x1, y1, param); @@ -544,6 +562,11 @@ void HostBlas::rotg(double* a, double* b, double* c, double* s) { F77_FUNC_DROTG(a, b, c, s); } template <> +void HostBlas::rotm(const int n, double* X, const int incx, double* Y, + const int incy, const double* param) { + F77_FUNC_DROTM(&n, X, &incx, Y, &incy, param); +} +template <> void HostBlas::rotmg(double* d1, double* d2, double* x1, const double* y1, double* param) { F77_FUNC_DROTMG(d1, d2, x1, y1, param); diff --git a/blas/tpls/KokkosBlas_Host_tpl.hpp b/blas/tpls/KokkosBlas_Host_tpl.hpp index 4cdbf78567..02c827488b 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.hpp +++ b/blas/tpls/KokkosBlas_Host_tpl.hpp @@ -78,6 +78,9 @@ struct HostBlas { static void rotg(T *a, T *b, mag_type *c, T *s); + static void rotm(const int n, T *X, const int incx, T *Y, const int incy, + T const *param); + static void rotmg(T *d1, T *d2, T *x1, const T *y1, T *param); static void gemv(const char trans, int m, int n, const T alpha, const T *a, diff --git a/blas/unit_test/Test_Blas.hpp b/blas/unit_test/Test_Blas.hpp index 0b13917872..be14f70940 100644 --- a/blas/unit_test/Test_Blas.hpp +++ b/blas/unit_test/Test_Blas.hpp @@ -20,6 +20,7 @@ #include "Test_Blas1_nrminf.hpp" #include "Test_Blas1_reciprocal.hpp" #include "Test_Blas1_rotg.hpp" +#include "Test_Blas1_rotm.hpp" #include "Test_Blas1_rotmg.hpp" #include "Test_Blas1_scal.hpp" #include "Test_Blas1_sum.hpp" diff --git a/blas/unit_test/Test_Blas1_rotm.hpp b/blas/unit_test/Test_Blas1_rotm.hpp new file mode 100644 index 0000000000..94c1b01503 --- /dev/null +++ b/blas/unit_test/Test_Blas1_rotm.hpp @@ -0,0 +1,167 @@ +#include + +namespace Test { + +template +void set_rotm_inputs(const int &test_case, vector_view_type &X, + vector_view_type &Y, param_view_type ¶m, + vector_ref_type &Xref, vector_ref_type &Yref) { + // Initialize X and Y inputs + typename vector_view_type::HostMirror X_h = Kokkos::create_mirror_view(X); + typename vector_view_type::HostMirror Y_h = Kokkos::create_mirror_view(Y); + + X_h(0) = 0.6; + X_h(1) = 0.1; + X_h(2) = -0.5; + X_h(3) = 0.8; + Y_h(0) = 0.5; + Y_h(1) = -0.9; + Y_h(2) = 0.3; + Y_h(3) = 0.7; + Kokkos::deep_copy(X, X_h); + Kokkos::deep_copy(Y, Y_h); + + // Initialize Xref, Yref and param (test case dependent) + typename param_view_type::HostMirror param_h = + Kokkos::create_mirror_view(param); + switch (test_case) { + case 0: + param_h(0) = -2.0; + param_h(1) = 0.0; + param_h(2) = 0.0; + param_h(3) = 0.0; + param_h(4) = 0.0; + + Xref(0) = 0.60; + Xref(1) = 0.10; + Xref(2) = -0.50; + Xref(3) = 0.80; + Yref(0) = 0.50; + Yref(1) = -0.90; + Yref(2) = 0.30; + Yref(3) = 0.70; + break; + + case 1: + param_h(0) = -1.0; + param_h(1) = 2.0; + param_h(2) = -3.0; + param_h(3) = -4.0; + param_h(4) = 5.0; + + Xref(0) = -0.80; + Xref(1) = 3.80; + Xref(2) = -2.20; + Xref(3) = -1.20; + Yref(0) = 0.70; + Yref(1) = -4.80; + Yref(2) = 3.00; + Yref(3) = 1.10; + break; + + case 2: + param_h(0) = 0.0; + param_h(1) = 0.0; + param_h(2) = 2.0; + param_h(3) = -3.0; + param_h(4) = 0.0; + + Xref(0) = -0.90; + Xref(1) = 2.80; + Xref(2) = -1.40; + Xref(3) = -1.30; + Yref(0) = 1.70; + Yref(1) = -0.70; + Yref(2) = -0.70; + Yref(3) = 2.30; + break; + + case 3: + param_h(0) = 1.0; + param_h(1) = 5.0; + param_h(2) = 2.0; + param_h(3) = 0.0; + param_h(4) = -4.0; + + Xref(0) = 3.50; + Xref(1) = -0.40; + Xref(2) = -2.20; + Xref(3) = 4.70; + Yref(0) = -2.60; + Yref(1) = 3.50; + Yref(2) = -0.70; + Yref(3) = -3.60; + break; + default: throw std::runtime_error("rotm: unimplemented test case!"); + } + + Kokkos::deep_copy(param, param_h); + + return; +} + +template +void check_results(vector_view_type &X, vector_view_type &Y, + vector_ref_type &Xref, vector_ref_type &Yref) { + using Scalar = typename vector_view_type::value_type; + + typename vector_view_type::HostMirror X_h = Kokkos::create_mirror_view(X); + typename vector_view_type::HostMirror Y_h = Kokkos::create_mirror_view(Y); + Kokkos::deep_copy(X_h, X); + Kokkos::deep_copy(Y_h, Y); + + Scalar const tol = 10 * Kokkos::ArithTraits::eps(); + for (int idx = 0; idx < 4; ++idx) { + Test::EXPECT_NEAR_KK_REL(X_h(idx), Xref(idx), tol); + Test::EXPECT_NEAR_KK_REL(Y_h(idx), Yref(idx), tol); + } + + return; +} + +} // namespace Test + +template +int test_rotm() { + using vector_view_type = Kokkos::View; + using vector_ref_type = Kokkos::View; + using param_view_type = Kokkos::View; + + vector_view_type X("X", 4), Y("Y", 4); + vector_ref_type Xref("Xref", 4), Yref("Yref", 4); + param_view_type param("param"); + + for (int test_case = 0; test_case < 4; ++test_case) { + // Initialize inputs + Test::set_rotm_inputs(test_case, X, Y, param, Xref, Yref); + + // Compute the rotated vectors + KokkosBlas::rotm(X, Y, param); + Kokkos::fence(); + + // Check outputs + Test::check_results(X, Y, Xref, Yref); + } + + return 1; +} + +#if defined(KOKKOSKERNELS_INST_FLOAT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, rotm_float) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::rotm"); + test_rotm(); + Kokkos::Profiling::popRegion(); +} +#endif + +#if defined(KOKKOSKERNELS_INST_DOUBLE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, rotm_double) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::rotm"); + test_rotm(); + Kokkos::Profiling::popRegion(); +} +#endif From d2d0a39eb6dd9cf75643fadd6990dd8ff48c26b1 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 7 Nov 2022 15:19:07 -0700 Subject: [PATCH 147/226] ROT: fixing cuBLAS call and renaming template paramters The cuBLAS TPL layer was copying scalar values to host which can be avoided by setting the pointer mode correctly in the library. The extraneous copies have been removed. Additionally some template paramters have been renamed for clarity and consistency. --- blas/impl/KokkosBlas1_rot_impl.hpp | 18 +-- blas/impl/KokkosBlas1_rot_spec.hpp | 30 ++-- blas/src/KokkosBlas1_rot.hpp | 60 ++++---- blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp | 2 +- blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp | 132 ++++++++++-------- blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp | 108 ++++++-------- blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp | 56 +++----- 7 files changed, 191 insertions(+), 215 deletions(-) diff --git a/blas/impl/KokkosBlas1_rot_impl.hpp b/blas/impl/KokkosBlas1_rot_impl.hpp index a613f1ea1e..64b01e8d83 100644 --- a/blas/impl/KokkosBlas1_rot_impl.hpp +++ b/blas/impl/KokkosBlas1_rot_impl.hpp @@ -51,15 +51,15 @@ namespace KokkosBlas { namespace Impl { -template +template struct rot_functor { - using scalar_type = typename Vector::non_const_value_type; + using scalar_type = typename VectorView::non_const_value_type; - Vector X, Y; - Scalar c, s; + VectorView X, Y; + ScalarView c, s; - rot_functor(Vector const& X_, Vector const& Y_, Scalar const& c_, - Scalar const& s_) + rot_functor(VectorView const& X_, VectorView const& Y_, ScalarView const& c_, + ScalarView const& s_) : X(X_), Y(Y_), c(c_), s(s_) {} KOKKOS_INLINE_FUNCTION @@ -70,9 +70,9 @@ struct rot_functor { } }; -template -void Rot_Invoke(ExecutionSpace const& space, Vector const& X, Vector const& Y, - Scalar const& c, Scalar const& s) { +template +void Rot_Invoke(ExecutionSpace const& space, VectorView const& X, VectorView const& Y, + ScalarView const& c, ScalarView const& s) { Kokkos::RangePolicy rot_policy(space, 0, X.extent(0)); rot_functor rot_func(X, Y, c, s); Kokkos::parallel_for("KokkosBlas::rot", rot_policy, rot_func); diff --git a/blas/impl/KokkosBlas1_rot_spec.hpp b/blas/impl/KokkosBlas1_rot_spec.hpp index 8c64728c5b..d8ea35b936 100644 --- a/blas/impl/KokkosBlas1_rot_spec.hpp +++ b/blas/impl/KokkosBlas1_rot_spec.hpp @@ -57,7 +57,7 @@ namespace KokkosBlas { namespace Impl { // Specialization struct which defines whether a specialization exists -template +template struct rot_eti_spec_avail { enum : bool { value = false }; }; @@ -91,38 +91,38 @@ namespace KokkosBlas { namespace Impl { // Unification layer -template ::value, + rot_tpl_spec_avail::value, bool eti_spec_avail = - rot_eti_spec_avail::value> + rot_eti_spec_avail::value> struct Rot { - static void rot(ExecutionSpace const& space, Vector const& X, Vector const& Y, - Scalar const& c, Scalar const& s); + static void rot(ExecutionSpace const& space, VectorView const& X, VectorView const& Y, + ScalarView const& c, ScalarView const& s); }; #if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY //! Full specialization of Rot. -template -struct Rot +struct Rot { - static void rot(ExecutionSpace const& space, Vector const& X, Vector const& Y, - Scalar const& c, Scalar const& s) { + static void rot(ExecutionSpace const& space, VectorView const& X, VectorView const& Y, + ScalarView const& c, ScalarView const& s) { Kokkos::Profiling::pushRegion(KOKKOSKERNELS_IMPL_COMPILE_LIBRARY ? "KokkosBlas::rot[ETI]" : "KokkosBlas::rot[noETI]"); #ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION if (KOKKOSKERNELS_IMPL_COMPILE_LIBRARY) printf("KokkosBlas1::rot<> ETI specialization for < %s, %s, %s >\n", - typeid(ExecutionSpace).name(), typeid(Vector).name(), - typeid(Scalar).name()); + typeid(ExecutionSpace).name(), typeid(VectorView).name(), + typeid(ScalarView).name()); else { printf("KokkosBlas1::rot<> non-ETI specialization for < %s, %s, %s >\n", - typeid(ExecutionSpace).name(), typeid(Vector).name(), - typeid(Scalar).name()); + typeid(ExecutionSpace).name(), typeid(VectorView).name(), + typeid(ScalarView).name()); } #endif - Rot_Invoke(space, X, Y, c, s); + Rot_Invoke(space, X, Y, c, s); Kokkos::Profiling::popRegion(); } }; diff --git a/blas/src/KokkosBlas1_rot.hpp b/blas/src/KokkosBlas1_rot.hpp index acb1a3c807..514bb11e3a 100644 --- a/blas/src/KokkosBlas1_rot.hpp +++ b/blas/src/KokkosBlas1_rot.hpp @@ -49,56 +49,56 @@ namespace KokkosBlas { -template -void rot(execution_space const& space, Vector const& X, Vector const& Y, - Scalar const& c, Scalar const& s) { +template +void rot(execution_space const& space, VectorView const& X, VectorView const& Y, + ScalarView const& c, ScalarView const& s) { static_assert(Kokkos::is_execution_space::value, "rot: execution_space template parameter is not a Kokkos " "execution space."); - static_assert(Vector::rank == 1, - "rot: Vector template parameter needs to be a rank 1 view"); - static_assert(Scalar::rank == 0, - "rot: Scalar template parameter needs to be a rank 0 view"); + static_assert(VectorView::rank == 1, + "rot: VectorView template parameter needs to be a rank 1 view"); + static_assert(ScalarView::rank == 0, + "rot: ScalarView template parameter needs to be a rank 0 view"); static_assert( Kokkos::SpaceAccessibility::accessible, - "rot: Vector template parameter memory space needs to be accessible from " + typename VectorView::memory_space>::accessible, + "rot: VectorView template parameter memory space needs to be accessible from " "execution_space template parameter"); static_assert( Kokkos::SpaceAccessibility::accessible, - "rot: Vector template parameter memory space needs to be accessible from " + typename ScalarView::memory_space>::accessible, + "rot: VectorView template parameter memory space needs to be accessible from " "execution_space template parameter"); static_assert( - std::is_same::value, - "rot: Vector template parameter needs to store non-const values"); + std::is_same::value, + "rot: VectorView template parameter needs to store non-const values"); - using Vector_Internal = Kokkos::View< - typename Vector::non_const_value_type*, - typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, - Kokkos::Device, + using VectorView_Internal = Kokkos::View< + typename VectorView::non_const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + Kokkos::Device, Kokkos::MemoryTraits>; - using Scalar_Internal = Kokkos::View< - typename Scalar::non_const_value_type, - typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, - Kokkos::Device, + using ScalarView_Internal = Kokkos::View< + typename ScalarView::non_const_value_type, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + Kokkos::Device, Kokkos::MemoryTraits>; - Vector_Internal X_(X), Y_(Y); - Scalar_Internal c_(c), s_(s); + VectorView_Internal X_(X), Y_(Y); + ScalarView_Internal c_(c), s_(s); Kokkos::Profiling::pushRegion("KokkosBlas::rot"); - Impl::Rot::rot(space, X_, - Y_, c_, s_); + Impl::Rot:: + rot(space, X_, Y_, c_, s_); Kokkos::Profiling::popRegion(); } -template -void rot(Vector const& X, Vector const& Y, Scalar const& c, Scalar const& s) { - const typename Vector::execution_space space = - typename Vector::execution_space(); +template +void rot(VectorView const& X, VectorView const& Y, ScalarView const& c, ScalarView const& s) { + const typename VectorView::execution_space space = + typename VectorView::execution_space(); rot(space, X, Y, c, s); } diff --git a/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp index 26c0ebde51..4f8f8c37c2 100644 --- a/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp @@ -48,7 +48,7 @@ namespace KokkosBlas { namespace Impl { // Specialization struct which defines whether a specialization exists -template +template struct rot_tpl_spec_avail { enum : bool { value = false }; }; diff --git a/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp index beaa388175..4339c30770 100644 --- a/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp @@ -49,11 +49,11 @@ namespace KokkosBlas { namespace Impl { namespace { -template +template inline void rot_print_specialization() { #ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION printf("KokkosBlas::rot<> TPL Blas specialization for < %s, %s, %s >\n", - typeid(Vector).name(), typeid(Scalar).name(), + typeid(VectorView).name(), typeid(ScalarView).name(), typeid(ExecutionSpace).name); #endif } @@ -78,15 +78,15 @@ namespace Impl { Kokkos::Device, \ Kokkos::MemoryTraits>, \ true, ETI_SPEC_AVAIL> { \ - using Vector = Kokkos::View, \ Kokkos::MemoryTraits>; \ - using Scalar = Kokkos::View, \ Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& /*space*/, Vector const& X, \ - Vector const& Y, Scalar const& c, Scalar const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,double]"); \ + static void rot(EXECSPACE const& /*space*/, VectorView const& X, \ + VectorView const& Y, ScalarView const& c, ScalarView const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_BLAS,double]"); \ HostBlas::rot(X.extent_int(0), X.data(), 1, Y.data(), 1, \ c.data(), s.data()); \ Kokkos::Profiling::popRegion(); \ @@ -103,15 +103,15 @@ namespace Impl { Kokkos::Device, \ Kokkos::MemoryTraits>, \ true, ETI_SPEC_AVAIL> { \ - using Vector = Kokkos::View, \ Kokkos::MemoryTraits>; \ - using Scalar = Kokkos::View, \ Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& /*space*/, Vector const& X, \ - Vector const& Y, Scalar const& c, Scalar const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_BLAS,float]"); \ + static void rot(EXECSPACE const& /*space*/, VectorView const& X, \ + VectorView const& Y, ScalarView const& c, ScalarView const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_BLAS,float]"); \ HostBlas::rot(X.extent_int(0), X.data(), 1, Y.data(), 1, \ c.data(), s.data()); \ Kokkos::Profiling::popRegion(); \ @@ -122,16 +122,16 @@ namespace Impl { template \ struct Rot, EXECSPACE, MEMSPACE, true, \ ETI_SPEC_AVAIL> { \ - using Vector = Kokkos::View*, LAYOUT, \ + using VectorView = Kokkos::View*, LAYOUT, \ Kokkos::Device, \ Kokkos::MemoryTraits>; \ - using Scalar = Kokkos::View, \ Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& /*space*/, Vector const& X, \ - Vector const& Y, Scalar const& c, Scalar const& s) { \ + static void rot(EXECSPACE const& /*space*/, VectorView const& X, \ + VectorView const& Y, ScalarView const& c, ScalarView const& s) { \ Kokkos::Profiling::pushRegion( \ - "KokkosBlas::rotg[TPL_BLAS,complex]"); \ + "KokkosBlas::rot[TPL_BLAS,complex]"); \ HostBlas>::rot( \ X.extent_int(0), reinterpret_cast*>(X.data()), \ 1, reinterpret_cast*>(Y.data()), 1, c.data(), \ @@ -144,16 +144,16 @@ namespace Impl { template \ struct Rot, EXECSPACE, MEMSPACE, true, \ ETI_SPEC_AVAIL> { \ - using Vector = Kokkos::View*, LAYOUT, \ + using VectorView = Kokkos::View*, LAYOUT, \ Kokkos::Device, \ Kokkos::MemoryTraits>; \ - using Scalar = Kokkos::View, \ Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& /*space*/, Vector const& X, \ - Vector const& Y, Scalar const& c, Scalar const& s) { \ + static void rot(EXECSPACE const& /*space*/, VectorView const& X, \ + VectorView const& Y, ScalarView const& c, ScalarView const& s) { \ Kokkos::Profiling::pushRegion( \ - "KokkosBlas::rotg[TPL_BLAS,complex]"); \ + "KokkosBlas::rot[TPL_BLAS,complex]"); \ HostBlas>::rot( \ X.extent_int(0), reinterpret_cast*>(X.data()), \ 1, reinterpret_cast*>(Y.data()), 1, c.data(), \ @@ -212,26 +212,29 @@ namespace Impl { Kokkos::View, \ Kokkos::MemoryTraits>, \ true, ETI_SPEC_AVAIL> { \ - using Vector = \ + using VectorView = \ Kokkos::View, \ Kokkos::MemoryTraits>; \ - using Scalar = \ + using ScalarView = \ Kokkos::View, \ Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& space, Vector const& X, Vector const& Y, \ - Scalar const& c, Scalar const& s) { \ + static void rot(EXECSPACE const& space, VectorView const& X, VectorView const& Y, \ + ScalarView const& c, ScalarView const& s) { \ Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,double]"); \ - rot_print_specialization(); \ + rot_print_specialization(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ - typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ - Kokkos::deep_copy(cos, c); \ - Kokkos::deep_copy(sin, s); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ cublasDrot(singleton.handle, X.extent_int(0), X.data(), 1, Y.data(), 1, \ - cos.data(), sin.data()); \ + c.data(), s.data()); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -245,26 +248,29 @@ namespace Impl { Kokkos::View, \ Kokkos::MemoryTraits>, \ true, ETI_SPEC_AVAIL> { \ - using Vector = \ + using VectorView = \ Kokkos::View, \ Kokkos::MemoryTraits>; \ - using Scalar = \ + using ScalarView = \ Kokkos::View, \ Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& space, Vector const& X, Vector const& Y, \ - Scalar const& c, Scalar const& s) { \ + static void rot(EXECSPACE const& space, VectorView const& X, VectorView const& Y, \ + ScalarView const& c, ScalarView const& s) { \ Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,float]"); \ - rot_print_specialization(); \ + rot_print_specialization(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ - typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ - Kokkos::deep_copy(cos, c); \ - Kokkos::deep_copy(sin, s); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ cublasSrot(singleton.handle, X.extent_int(0), X.data(), 1, Y.data(), 1, \ - cos.data(), sin.data()); \ + c.data(), s.data()); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -279,29 +285,32 @@ namespace Impl { Kokkos::View, \ Kokkos::MemoryTraits>, \ true, ETI_SPEC_AVAIL> { \ - using Vector = Kokkos::View*, LAYOUT, \ + using VectorView = Kokkos::View*, LAYOUT, \ Kokkos::Device, \ Kokkos::MemoryTraits>; \ - using Scalar = \ + using ScalarView = \ Kokkos::View, \ Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& space, Vector const& X, Vector const& Y, \ - Scalar const& c, Scalar const& s) { \ + static void rot(EXECSPACE const& space, VectorView const& X, VectorView const& Y, \ + ScalarView const& c, ScalarView const& s) { \ Kokkos::Profiling::pushRegion( \ "KokkosBlas::rot[TPL_CUBLAS,complex]"); \ - rot_print_specialization(); \ + rot_print_specialization(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ - typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ - Kokkos::deep_copy(cos, c); \ - Kokkos::deep_copy(sin, s); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ cublasZdrot(singleton.handle, X.extent_int(0), \ reinterpret_cast(X.data()), 1, \ reinterpret_cast(Y.data()), 1, c.data(), \ s.data()); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -316,29 +325,32 @@ namespace Impl { Kokkos::View, \ Kokkos::MemoryTraits>, \ true, ETI_SPEC_AVAIL> { \ - using Vector = Kokkos::View, LAYOUT, \ + using VectorView = Kokkos::View, LAYOUT, \ Kokkos::Device, \ Kokkos::MemoryTraits>; \ - using Scalar = \ + using ScalarView = \ Kokkos::View, \ Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& space, Vector const& X, Vector const& Y, \ - Scalar const& c, Scalar const& s) { \ + static void rot(EXECSPACE const& space, VectorView const& X, VectorView const& Y, \ + ScalarView const& c, ScalarView const& s) { \ Kokkos::Profiling::pushRegion( \ "KokkosBlas::rot[TPL_CUBLAS,complex]"); \ - rot_print_specialization(); \ + rot_print_specialization(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - typename Scalar::HostMirror cos = Kokkos::create_mirror_view(c); \ - typename Scalar::HostMirror sin = Kokkos::create_mirror_view(s); \ - Kokkos::deep_copy(cos, c); \ - Kokkos::deep_copy(sin, s); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ cublasCsrot(singleton.handle, X.extent_int(0), \ reinterpret_cast(X.data()), 1, \ reinterpret_cast(Y.data()), 1, c.data(), \ s.data()); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp index 3deda48a5c..cbb8e98e68 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp @@ -278,26 +278,21 @@ namespace Impl { static void rotg(EXECSPACE const& space, SViewType const& a, \ SViewType const& b, MViewType const& c, \ SViewType const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,double]"); \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_CUBLAS,double]"); \ rotg_print_specialization(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - typename SViewType::HostMirror a_h = Kokkos::create_mirror_view(a); \ - typename SViewType::HostMirror b_h = Kokkos::create_mirror_view(b); \ - typename MViewType::HostMirror cos = Kokkos::create_mirror_view(c); \ - typename SViewType::HostMirror sin = Kokkos::create_mirror_view(s); \ - Kokkos::deep_copy(cos, c); \ - Kokkos::deep_copy(sin, s); \ - Kokkos::deep_copy(a_h, a); \ - Kokkos::deep_copy(b_h, b); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE));\ KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasDrotg( \ - singleton.handle, a_h.data(), b_h.data(), cos.data(), sin.data())); \ - Kokkos::deep_copy(c, cos); \ - Kokkos::deep_copy(s, sin); \ - Kokkos::deep_copy(a, a_h); \ - Kokkos::deep_copy(b, b_h); \ + singleton.handle, a.data(), b.data(), c.data(), s.data())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -320,26 +315,21 @@ namespace Impl { static void rotg(EXECSPACE const& space, SViewType const& a, \ SViewType const& b, MViewType const& c, \ SViewType const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_CUBLAS,float]"); \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_CUBLAS,float]"); \ rotg_print_specialization(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - typename SViewType::HostMirror a_h = Kokkos::create_mirror_view(a); \ - typename SViewType::HostMirror b_h = Kokkos::create_mirror_view(b); \ - typename MViewType::HostMirror cos = Kokkos::create_mirror_view(c); \ - typename SViewType::HostMirror sin = Kokkos::create_mirror_view(s); \ - Kokkos::deep_copy(cos, c); \ - Kokkos::deep_copy(sin, s); \ - Kokkos::deep_copy(a_h, a); \ - Kokkos::deep_copy(b_h, b); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE));\ KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSrotg( \ - singleton.handle, a_h.data(), b_h.data(), cos.data(), sin.data())); \ - Kokkos::deep_copy(c, cos); \ - Kokkos::deep_copy(s, sin); \ - Kokkos::deep_copy(a, a_h); \ - Kokkos::deep_copy(b, b_h); \ + singleton.handle, a.data(), b.data(), c.data(), s.data())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -365,28 +355,23 @@ namespace Impl { SViewType const& b, MViewType const& c, \ SViewType const& s) { \ Kokkos::Profiling::pushRegion( \ - "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ + "KokkosBlas::rotg[TPL_CUBLAS,complex]"); \ rotg_print_specialization, EXECSPACE>(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - typename SViewType::HostMirror a_h = Kokkos::create_mirror_view(a); \ - typename SViewType::HostMirror b_h = Kokkos::create_mirror_view(b); \ - typename MViewType::HostMirror cos = Kokkos::create_mirror_view(c); \ - typename SViewType::HostMirror sin = Kokkos::create_mirror_view(s); \ - Kokkos::deep_copy(cos, c); \ - Kokkos::deep_copy(sin, s); \ - Kokkos::deep_copy(a_h, a); \ - Kokkos::deep_copy(b_h, b); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE));\ KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasZrotg( \ - singleton.handle, reinterpret_cast(a_h.data()), \ - reinterpret_cast(b_h.data()), cos.data(), \ - reinterpret_cast(sin.data()))); \ - Kokkos::deep_copy(c, cos); \ - Kokkos::deep_copy(s, sin); \ - Kokkos::deep_copy(a, a_h); \ - Kokkos::deep_copy(b, b_h); \ + singleton.handle, reinterpret_cast(a.data()), \ + reinterpret_cast(b.data()), c.data(), \ + reinterpret_cast(s.data()))); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -411,28 +396,23 @@ namespace Impl { SViewType const& b, MViewType const& c, \ SViewType const& s) { \ Kokkos::Profiling::pushRegion( \ - "KokkosBlas::nrm1[TPL_CUBLAS,complex]"); \ + "KokkosBlas::rotg[TPL_CUBLAS,complex]"); \ rotg_print_specialization, EXECSPACE>(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - typename SViewType::HostMirror a_h = Kokkos::create_mirror_view(a); \ - typename SViewType::HostMirror b_h = Kokkos::create_mirror_view(b); \ - typename MViewType::HostMirror cos = Kokkos::create_mirror_view(c); \ - typename SViewType::HostMirror sin = Kokkos::create_mirror_view(s); \ - Kokkos::deep_copy(cos, c); \ - Kokkos::deep_copy(sin, s); \ - Kokkos::deep_copy(a_h, a); \ - Kokkos::deep_copy(b_h, b); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE));\ KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasCrotg( \ - singleton.handle, reinterpret_cast(a_h.data()), \ - reinterpret_cast(b_h.data()), cos.data(), \ - reinterpret_cast(sin.data()))); \ - Kokkos::deep_copy(c, cos); \ - Kokkos::deep_copy(s, sin); \ - Kokkos::deep_copy(a, a_h); \ - Kokkos::deep_copy(b, b_h); \ + singleton.handle, reinterpret_cast(a.data()), \ + reinterpret_cast(b.data()), c.data(), \ + reinterpret_cast(s.data()))); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -536,7 +516,7 @@ namespace Impl { static void rotg(EXECSPACE const& space, SViewType const& a, \ SViewType const& b, MViewType const& c, \ SViewType const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,double]"); \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_ROCBLAS,double]"); \ rotg_print_specialization(); \ KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ @@ -566,7 +546,7 @@ namespace Impl { static void rotg(EXECSPACE const& space, SViewType const& a, \ SViewType const& b, MViewType const& c, \ SViewType const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,float]"); \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_ROCBLAS,float]"); \ rotg_print_specialization(); \ KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ @@ -599,7 +579,7 @@ namespace Impl { SViewType const& b, MViewType const& c, \ SViewType const& s) { \ Kokkos::Profiling::pushRegion( \ - "KokkosBlas::nrm1[TPL_ROCBLAS,complex]"); \ + "KokkosBlas::rotg[TPL_ROCBLAS,complex]"); \ rotg_print_specialization, EXECSPACE>(); \ KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ @@ -634,7 +614,7 @@ namespace Impl { SViewType const& b, MViewType const& c, \ SViewType const& s) { \ Kokkos::Profiling::pushRegion( \ - "KokkosBlas::nrm1[TPL_ROCBLAS,complex]"); \ + "KokkosBlas::rotg[TPL_ROCBLAS,complex]"); \ rotg_print_specialization, EXECSPACE>(); \ KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ diff --git a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp index 5a914befc1..dee280fefb 100644 --- a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp @@ -181,24 +181,16 @@ namespace Impl { KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(s.handle, space.cuda_stream())); \ - typename DXView::HostMirror d1_h = Kokkos::create_mirror_view(d1); \ - typename DXView::HostMirror d2_h = Kokkos::create_mirror_view(d2); \ - typename DXView::HostMirror x1_h = Kokkos::create_mirror_view(x1); \ - typename YView::non_const_type::HostMirror y1_h = \ - Kokkos::create_mirror_view(y1); \ - typename PView::HostMirror param_h = Kokkos::create_mirror_view(param); \ - Kokkos::deep_copy(d1_h, d1); \ - Kokkos::deep_copy(d2_h, d2); \ - Kokkos::deep_copy(x1_h, x1); \ - Kokkos::deep_copy(y1_h, y1); \ - Kokkos::deep_copy(param_h, param); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasDrotmg(s.handle, d1_h.data(), \ - d2_h.data(), x1_h.data(), \ - y1_h.data(), param_h.data())); \ - Kokkos::deep_copy(d1, d1_h); \ - Kokkos::deep_copy(d2, d2_h); \ - Kokkos::deep_copy(x1, x1_h); \ - Kokkos::deep_copy(param, param_h); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(s.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(s.handle, CUBLAS_POINTER_MODE_DEVICE));\ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasDrotmg(s.handle, d1.data(), \ + d2.data(), x1.data(), \ + y1.data(), param.data())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(s.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -243,24 +235,16 @@ KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(s.handle, space.cuda_stream())); \ - typename DXView::HostMirror d1_h = Kokkos::create_mirror_view(d1); \ - typename DXView::HostMirror d2_h = Kokkos::create_mirror_view(d2); \ - typename DXView::HostMirror x1_h = Kokkos::create_mirror_view(x1); \ - typename YView::non_const_type::HostMirror y1_h = \ - Kokkos::create_mirror_view(y1); \ - typename PView::HostMirror param_h = Kokkos::create_mirror_view(param); \ - Kokkos::deep_copy(d1_h, d1); \ - Kokkos::deep_copy(d2_h, d2); \ - Kokkos::deep_copy(x1_h, x1); \ - Kokkos::deep_copy(y1_h, y1); \ - Kokkos::deep_copy(param_h, param); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSrotmg(s.handle, d1_h.data(), \ - d2_h.data(), x1_h.data(), \ - y1_h.data(), param_h.data())); \ - Kokkos::deep_copy(d1, d1_h); \ - Kokkos::deep_copy(d2, d2_h); \ - Kokkos::deep_copy(x1, x1_h); \ - Kokkos::deep_copy(param, param_h); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(s.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(s.handle, CUBLAS_POINTER_MODE_DEVICE));\ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSrotmg(s.handle, d1.data(), \ + d2.data(), x1.data(), \ + y1.data(), param.data())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(s.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; From edf9fab5f6a2bfb1e6c9e007f3f07cb344247c1f Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 7 Nov 2022 15:22:56 -0700 Subject: [PATCH 148/226] ROT: applying clang-format --- blas/impl/KokkosBlas1_rot_impl.hpp | 4 +- blas/impl/KokkosBlas1_rot_spec.hpp | 10 +- blas/src/KokkosBlas1_rot.hpp | 13 +- blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp | 286 +++++++++--------- blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp | 190 ++++++------ blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp | 40 +-- 6 files changed, 282 insertions(+), 261 deletions(-) diff --git a/blas/impl/KokkosBlas1_rot_impl.hpp b/blas/impl/KokkosBlas1_rot_impl.hpp index 64b01e8d83..b787f1077f 100644 --- a/blas/impl/KokkosBlas1_rot_impl.hpp +++ b/blas/impl/KokkosBlas1_rot_impl.hpp @@ -71,8 +71,8 @@ struct rot_functor { }; template -void Rot_Invoke(ExecutionSpace const& space, VectorView const& X, VectorView const& Y, - ScalarView const& c, ScalarView const& s) { +void Rot_Invoke(ExecutionSpace const& space, VectorView const& X, + VectorView const& Y, ScalarView const& c, ScalarView const& s) { Kokkos::RangePolicy rot_policy(space, 0, X.extent(0)); rot_functor rot_func(X, Y, c, s); Kokkos::parallel_for("KokkosBlas::rot", rot_policy, rot_func); diff --git a/blas/impl/KokkosBlas1_rot_spec.hpp b/blas/impl/KokkosBlas1_rot_spec.hpp index d8ea35b936..f20ea29df6 100644 --- a/blas/impl/KokkosBlas1_rot_spec.hpp +++ b/blas/impl/KokkosBlas1_rot_spec.hpp @@ -97,8 +97,9 @@ template ::value> struct Rot { - static void rot(ExecutionSpace const& space, VectorView const& X, VectorView const& Y, - ScalarView const& c, ScalarView const& s); + static void rot(ExecutionSpace const& space, VectorView const& X, + VectorView const& Y, ScalarView const& c, + ScalarView const& s); }; #if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY @@ -106,8 +107,9 @@ struct Rot { template struct Rot { - static void rot(ExecutionSpace const& space, VectorView const& X, VectorView const& Y, - ScalarView const& c, ScalarView const& s) { + static void rot(ExecutionSpace const& space, VectorView const& X, + VectorView const& Y, ScalarView const& c, + ScalarView const& s) { Kokkos::Profiling::pushRegion(KOKKOSKERNELS_IMPL_COMPILE_LIBRARY ? "KokkosBlas::rot[ETI]" : "KokkosBlas::rot[noETI]"); diff --git a/blas/src/KokkosBlas1_rot.hpp b/blas/src/KokkosBlas1_rot.hpp index 514bb11e3a..2fee409c78 100644 --- a/blas/src/KokkosBlas1_rot.hpp +++ b/blas/src/KokkosBlas1_rot.hpp @@ -62,12 +62,14 @@ void rot(execution_space const& space, VectorView const& X, VectorView const& Y, static_assert( Kokkos::SpaceAccessibility::accessible, - "rot: VectorView template parameter memory space needs to be accessible from " + "rot: VectorView template parameter memory space needs to be accessible " + "from " "execution_space template parameter"); static_assert( Kokkos::SpaceAccessibility::accessible, - "rot: VectorView template parameter memory space needs to be accessible from " + "rot: VectorView template parameter memory space needs to be accessible " + "from " "execution_space template parameter"); static_assert( std::is_same:: - rot(space, X_, Y_, c_, s_); + Impl::Rot::rot( + space, X_, Y_, c_, s_); Kokkos::Profiling::popRegion(); } template -void rot(VectorView const& X, VectorView const& Y, ScalarView const& c, ScalarView const& s) { +void rot(VectorView const& X, VectorView const& Y, ScalarView const& c, + ScalarView const& s) { const typename VectorView::execution_space space = typename VectorView::execution_space(); rot(space, X, Y, c, s); diff --git a/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp index 4339c30770..709a96cfa2 100644 --- a/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp @@ -78,15 +78,18 @@ namespace Impl { Kokkos::Device, \ Kokkos::MemoryTraits>, \ true, ETI_SPEC_AVAIL> { \ - using VectorView = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - using ScalarView = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& /*space*/, VectorView const& X, \ - VectorView const& Y, ScalarView const& c, ScalarView const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_BLAS,double]"); \ + using VectorView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using ScalarView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& /*space*/, VectorView const& X, \ + VectorView const& Y, ScalarView const& c, \ + ScalarView const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_BLAS,double]"); \ HostBlas::rot(X.extent_int(0), X.data(), 1, Y.data(), 1, \ c.data(), s.data()); \ Kokkos::Profiling::popRegion(); \ @@ -103,15 +106,18 @@ namespace Impl { Kokkos::Device, \ Kokkos::MemoryTraits>, \ true, ETI_SPEC_AVAIL> { \ - using VectorView = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - using ScalarView = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& /*space*/, VectorView const& X, \ - VectorView const& Y, ScalarView const& c, ScalarView const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_BLAS,float]"); \ + using VectorView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using ScalarView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& /*space*/, VectorView const& X, \ + VectorView const& Y, ScalarView const& c, \ + ScalarView const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_BLAS,float]"); \ HostBlas::rot(X.extent_int(0), X.data(), 1, Y.data(), 1, \ c.data(), s.data()); \ Kokkos::Profiling::popRegion(); \ @@ -122,16 +128,19 @@ namespace Impl { template \ struct Rot, EXECSPACE, MEMSPACE, true, \ ETI_SPEC_AVAIL> { \ - using VectorView = Kokkos::View*, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>; \ - using ScalarView = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& /*space*/, VectorView const& X, \ - VectorView const& Y, ScalarView const& c, ScalarView const& s) { \ + using VectorView = \ + Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using ScalarView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& /*space*/, VectorView const& X, \ + VectorView const& Y, ScalarView const& c, \ + ScalarView const& s) { \ Kokkos::Profiling::pushRegion( \ - "KokkosBlas::rot[TPL_BLAS,complex]"); \ + "KokkosBlas::rot[TPL_BLAS,complex]"); \ HostBlas>::rot( \ X.extent_int(0), reinterpret_cast*>(X.data()), \ 1, reinterpret_cast*>(Y.data()), 1, c.data(), \ @@ -144,16 +153,19 @@ namespace Impl { template \ struct Rot, EXECSPACE, MEMSPACE, true, \ ETI_SPEC_AVAIL> { \ - using VectorView = Kokkos::View*, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>; \ - using ScalarView = Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& /*space*/, VectorView const& X, \ - VectorView const& Y, ScalarView const& c, ScalarView const& s) { \ + using VectorView = \ + Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using ScalarView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& /*space*/, VectorView const& X, \ + VectorView const& Y, ScalarView const& c, \ + ScalarView const& s) { \ Kokkos::Profiling::pushRegion( \ - "KokkosBlas::rot[TPL_BLAS,complex]"); \ + "KokkosBlas::rot[TPL_BLAS,complex]"); \ HostBlas>::rot( \ X.extent_int(0), reinterpret_cast*>(X.data()), \ 1, reinterpret_cast*>(Y.data()), 1, c.data(), \ @@ -202,41 +214,42 @@ KOKKOSBLAS1_CROT_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, false) namespace KokkosBlas { namespace Impl { -#define KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template <> \ - struct Rot< \ - EXECSPACE, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - true, ETI_SPEC_AVAIL> { \ - using VectorView = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ - using ScalarView = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& space, VectorView const& X, VectorView const& Y, \ - ScalarView const& c, ScalarView const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,double]"); \ - rot_print_specialization(); \ - KokkosBlas::Impl::CudaBlasSingleton& singleton = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetStream(singleton.handle, space.cuda_stream())); \ - cublasPointerMode_t pointer_mode; \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasGetPointerMode(singleton.handle, &pointer_mode)); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ - cublasDrot(singleton.handle, X.extent_int(0), X.data(), 1, Y.data(), 1, \ - c.data(), s.data()); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, pointer_mode)); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rot< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using VectorView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using ScalarView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& space, VectorView const& X, \ + VectorView const& Y, ScalarView const& c, \ + ScalarView const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,double]"); \ + rot_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ + cublasDrot(singleton.handle, X.extent_int(0), X.data(), 1, Y.data(), 1, \ + c.data(), s.data()); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ + Kokkos::Profiling::popRegion(); \ + } \ }; #define KOKKOSBLAS1_SROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ @@ -248,29 +261,30 @@ namespace Impl { Kokkos::View, \ Kokkos::MemoryTraits>, \ true, ETI_SPEC_AVAIL> { \ - using VectorView = \ + using VectorView = \ Kokkos::View, \ Kokkos::MemoryTraits>; \ - using ScalarView = \ + using ScalarView = \ Kokkos::View, \ Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& space, VectorView const& X, VectorView const& Y, \ - ScalarView const& c, ScalarView const& s) { \ + static void rot(EXECSPACE const& space, VectorView const& X, \ + VectorView const& Y, ScalarView const& c, \ + ScalarView const& s) { \ Kokkos::Profiling::pushRegion("KokkosBlas::rot[TPL_CUBLAS,float]"); \ - rot_print_specialization(); \ + rot_print_specialization(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - cublasPointerMode_t pointer_mode; \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasGetPointerMode(singleton.handle, &pointer_mode)); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ cublasSrot(singleton.handle, X.extent_int(0), X.data(), 1, Y.data(), 1, \ c.data(), s.data()); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -285,74 +299,76 @@ namespace Impl { Kokkos::View, \ Kokkos::MemoryTraits>, \ true, ETI_SPEC_AVAIL> { \ - using VectorView = Kokkos::View*, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>; \ - using ScalarView = \ + using VectorView = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using ScalarView = \ Kokkos::View, \ Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& space, VectorView const& X, VectorView const& Y, \ - ScalarView const& c, ScalarView const& s) { \ + static void rot(EXECSPACE const& space, VectorView const& X, \ + VectorView const& Y, ScalarView const& c, \ + ScalarView const& s) { \ Kokkos::Profiling::pushRegion( \ "KokkosBlas::rot[TPL_CUBLAS,complex]"); \ - rot_print_specialization(); \ + rot_print_specialization(); \ KokkosBlas::Impl::CudaBlasSingleton& singleton = \ KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - cublasPointerMode_t pointer_mode; \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasGetPointerMode(singleton.handle, &pointer_mode)); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ cublasZdrot(singleton.handle, X.extent_int(0), \ reinterpret_cast(X.data()), 1, \ reinterpret_cast(Y.data()), 1, c.data(), \ s.data()); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; -#define KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template <> \ - struct Rot*, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - true, ETI_SPEC_AVAIL> { \ - using VectorView = Kokkos::View, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>; \ - using ScalarView = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& space, VectorView const& X, VectorView const& Y, \ - ScalarView const& c, ScalarView const& s) { \ - Kokkos::Profiling::pushRegion( \ - "KokkosBlas::rot[TPL_CUBLAS,complex]"); \ - rot_print_specialization(); \ - KokkosBlas::Impl::CudaBlasSingleton& singleton = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetStream(singleton.handle, space.cuda_stream())); \ - cublasPointerMode_t pointer_mode; \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasGetPointerMode(singleton.handle, &pointer_mode)); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ - cublasCsrot(singleton.handle, X.extent_int(0), \ - reinterpret_cast(X.data()), 1, \ - reinterpret_cast(Y.data()), 1, c.data(), \ - s.data()); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, pointer_mode)); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_CROT_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rot*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using VectorView = Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using ScalarView = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& space, VectorView const& X, \ + VectorView const& Y, ScalarView const& c, \ + ScalarView const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::rot[TPL_CUBLAS,complex]"); \ + rot_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ + cublasCsrot(singleton.handle, X.extent_int(0), \ + reinterpret_cast(X.data()), 1, \ + reinterpret_cast(Y.data()), 1, c.data(), \ + s.data()); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ + Kokkos::Profiling::popRegion(); \ + } \ }; KOKKOSBLAS1_DROT_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp index cbb8e98e68..0c7e814334 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp @@ -259,42 +259,42 @@ KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_BLAS(Kokkos::LayoutRight, Kokkos::OpenMP, namespace KokkosBlas { namespace Impl { -#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg< \ - EXECSPACE, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - true, ETI_SPEC_AVAIL> { \ - using SViewType = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ - using MViewType = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rotg(EXECSPACE const& space, SViewType const& a, \ - SViewType const& b, MViewType const& c, \ - SViewType const& s) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_CUBLAS,double]"); \ - rotg_print_specialization(); \ - KokkosBlas::Impl::CudaBlasSingleton& singleton = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetStream(singleton.handle, space.cuda_stream())); \ - cublasPointerMode_t pointer_mode; \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasGetPointerMode(singleton.handle, &pointer_mode)); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE));\ - KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasDrotg( \ - singleton.handle, a.data(), b.data(), c.data(), s.data())); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, pointer_mode)); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_DROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const& space, SViewType const& a, \ + SViewType const& b, MViewType const& c, \ + SViewType const& s) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotg[TPL_CUBLAS,double]"); \ + rotg_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasDrotg(singleton.handle, a.data(), \ + b.data(), c.data(), s.data())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ + Kokkos::Profiling::popRegion(); \ + } \ }; #define KOKKOSBLAS1_SROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ @@ -321,59 +321,59 @@ namespace Impl { KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - cublasPointerMode_t pointer_mode; \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasGetPointerMode(singleton.handle, &pointer_mode)); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE));\ - KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSrotg( \ - singleton.handle, a.data(), b.data(), c.data(), s.data())); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, pointer_mode)); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSrotg(singleton.handle, a.data(), \ + b.data(), c.data(), s.data())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; -#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ - ETI_SPEC_AVAIL) \ - template <> \ - struct Rotg< \ - EXECSPACE, \ - Kokkos::View, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - true, ETI_SPEC_AVAIL> { \ - using SViewType = Kokkos::View, LAYOUT, \ - Kokkos::Device, \ - Kokkos::MemoryTraits>; \ - using MViewType = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ - static void rotg(EXECSPACE const& space, SViewType const& a, \ - SViewType const& b, MViewType const& c, \ - SViewType const& s) { \ - Kokkos::Profiling::pushRegion( \ - "KokkosBlas::rotg[TPL_CUBLAS,complex]"); \ - rotg_print_specialization, EXECSPACE>(); \ - KokkosBlas::Impl::CudaBlasSingleton& singleton = \ - KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetStream(singleton.handle, space.cuda_stream())); \ - cublasPointerMode_t pointer_mode; \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasGetPointerMode(singleton.handle, &pointer_mode)); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE));\ - KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasZrotg( \ - singleton.handle, reinterpret_cast(a.data()), \ - reinterpret_cast(b.data()), c.data(), \ - reinterpret_cast(s.data()))); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, pointer_mode)); \ - Kokkos::Profiling::popRegion(); \ - } \ +#define KOKKOSBLAS1_ZROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Rotg< \ + EXECSPACE, \ + Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using SViewType = Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using MViewType = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void rotg(EXECSPACE const& space, SViewType const& a, \ + SViewType const& b, MViewType const& c, \ + SViewType const& s) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::rotg[TPL_CUBLAS,complex]"); \ + rotg_print_specialization, EXECSPACE>(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasZrotg( \ + singleton.handle, reinterpret_cast(a.data()), \ + reinterpret_cast(b.data()), c.data(), \ + reinterpret_cast(s.data()))); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ + Kokkos::Profiling::popRegion(); \ + } \ }; #define KOKKOSBLAS1_CROTG_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ @@ -402,17 +402,17 @@ namespace Impl { KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(singleton.handle, space.cuda_stream())); \ - cublasPointerMode_t pointer_mode; \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasGetPointerMode(singleton.handle, &pointer_mode)); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE));\ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(singleton.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, CUBLAS_POINTER_MODE_DEVICE)); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasCrotg( \ - singleton.handle, reinterpret_cast(a.data()), \ - reinterpret_cast(b.data()), c.data(), \ - reinterpret_cast(s.data()))); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(singleton.handle, pointer_mode)); \ + singleton.handle, reinterpret_cast(a.data()), \ + reinterpret_cast(b.data()), c.data(), \ + reinterpret_cast(s.data()))); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; diff --git a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp index dee280fefb..0305cde3f5 100644 --- a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp @@ -181,16 +181,16 @@ namespace Impl { KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(s.handle, space.cuda_stream())); \ - cublasPointerMode_t pointer_mode; \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasGetPointerMode(s.handle, &pointer_mode)); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(s.handle, CUBLAS_POINTER_MODE_DEVICE));\ - KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasDrotmg(s.handle, d1.data(), \ - d2.data(), x1.data(), \ - y1.data(), param.data())); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(s.handle, pointer_mode)); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(s.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(s.handle, CUBLAS_POINTER_MODE_DEVICE)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasDrotmg(s.handle, d1.data(), \ + d2.data(), x1.data(), \ + y1.data(), param.data())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(s.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -235,16 +235,16 @@ KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ cublasSetStream(s.handle, space.cuda_stream())); \ - cublasPointerMode_t pointer_mode; \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasGetPointerMode(s.handle, &pointer_mode)); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(s.handle, CUBLAS_POINTER_MODE_DEVICE));\ - KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSrotmg(s.handle, d1.data(), \ - d2.data(), x1.data(), \ - y1.data(), param.data())); \ - KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ - cublasSetPointerMode(s.handle, pointer_mode)); \ + cublasPointerMode_t pointer_mode; \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasGetPointerMode(s.handle, &pointer_mode)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(s.handle, CUBLAS_POINTER_MODE_DEVICE)); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSrotmg(s.handle, d1.data(), \ + d2.data(), x1.data(), \ + y1.data(), param.data())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetPointerMode(s.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; From 907dba20f5da20eaffc33ef985426da21ed92db6 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 9 Nov 2022 10:07:09 -0700 Subject: [PATCH 149/226] SPMM: fixing cuSPARSE issue with incompatible compute type and op When the cusparse compute type selected is real (in stead of complex) conjugate transpose is not a valid matrix operation, instead transpose needs to be selected to avoid an error. --- sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp index 0bfeec3288..ace756d22d 100644 --- a/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp @@ -185,6 +185,18 @@ void spmv_mv_cusparse(const KokkosKernels::Experimental::Controls &controls, const cudaDataType computeType = compute_type(); + // cuSPARSE fails when conjugate_transpose is requested on R types + // to avoid this problem we switch to transpose since the two are + // equivalent in that case. + if ((computeType == CUDA_R_32F) || (computeType == CUDA_R_64F)) { + if (opA == CUSPARSE_OPERATION_CONJUGATE_TRANSPOSE) { + opA = CUSPARSE_OPERATION_TRANSPOSE; + } + if (opB == CUSPARSE_OPERATION_CONJUGATE_TRANSPOSE) { + opB = CUSPARSE_OPERATION_TRANSPOSE; + } + } + size_t bufferSize = 0; KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpMM_bufferSize( cusparseHandle, opA, opB, &alpha, A_cusparse, vecX, &beta, vecY, @@ -333,4 +345,4 @@ KOKKOSSPARSE_SPMV_MV_CUSPARSE(Kokkos::Experimental::half_t, int, int, #endif // defined(CUSPARSE_VERSION) && (10301 <= CUSPARSE_VERSION) #endif // KOKKOSKERNELS_ENABLE_TPL_CUSPARSE -#endif // KOKKOSPARSE_SPMV_MV_TPL_SPEC_DECL_HPP_ \ No newline at end of file +#endif // KOKKOSPARSE_SPMV_MV_TPL_SPEC_DECL_HPP_ From 372493d3e5f04a0002d9242559ccd5313404487b Mon Sep 17 00:00:00 2001 From: kliegeois Date: Wed, 9 Nov 2022 12:54:35 -0700 Subject: [PATCH 150/226] Update of the perf tests based on Luc's comments --- .../CG/Functor_TestBatchedTeamVectorCG_1.hpp | 8 +-- .../CG/Functor_TestBatchedTeamVectorCG_2.hpp | 8 +-- .../CG/Functor_TestBatchedTeamVectorCG_3.hpp | 8 +-- .../sparse/CG/KokkosBatched_Test_CG.cpp | 38 ++++++------- .../Functor_TestBatchedTeamVectorGMRES_1.hpp | 8 +-- .../Functor_TestBatchedTeamVectorGMRES_2.hpp | 8 +-- .../Functor_TestBatchedTeamVectorGMRES_3.hpp | 8 +-- .../sparse/GMRES/KokkosBatched_Test_GMRES.cpp | 42 ++++++-------- .../KokkosBatched_Test_Sparse_Helper.hpp | 43 --------------- .../sparse/SPMV/KokkosBatched_Test_SPMV.cpp | 55 +++++++++---------- .../KokkosBatched_Test_cusolverDn.cpp | 5 -- .../KokkosBatched_Test_cusolverSp.cpp | 5 -- 12 files changed, 84 insertions(+), 152 deletions(-) diff --git a/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_1.hpp b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_1.hpp index 4d39d9191c..186228a31e 100644 --- a/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_1.hpp +++ b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_1.hpp @@ -99,10 +99,10 @@ struct Functor_TestBatchedTeamVectorCG_1 { _handle.tmp_view = typename KrylovHandleType::TemporaryViewType( "", _X.extent(0), 4 * _X.extent(1)); - Kokkos::TeamPolicy auto_policy( - ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); - Kokkos::TeamPolicy tuned_policy( - ceil(1. * _D.extent(0) / _N_team), _team_size, _vector_length); + Kokkos::TeamPolicy auto_policy(_handle.get_number_of_teams(), + Kokkos::AUTO(), Kokkos::AUTO()); + Kokkos::TeamPolicy tuned_policy(_handle.get_number_of_teams(), + _team_size, _vector_length); Kokkos::TeamPolicy policy; if (_team_size < 1) diff --git a/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_2.hpp b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_2.hpp index 8814d79e23..98975e9255 100644 --- a/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_2.hpp +++ b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_2.hpp @@ -120,10 +120,10 @@ struct Functor_TestBatchedTeamVectorCG_2 { _handle.tmp_view = typename KrylovHandleType::TemporaryViewType( "", _X.extent(0), 4 * _X.extent(1)); - Kokkos::TeamPolicy auto_policy( - ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); - Kokkos::TeamPolicy tuned_policy( - ceil(1. * _D.extent(0) / _N_team), _team_size, _vector_length); + Kokkos::TeamPolicy auto_policy(_handle.get_number_of_teams(), + Kokkos::AUTO(), Kokkos::AUTO()); + Kokkos::TeamPolicy tuned_policy(_handle.get_number_of_teams(), + _team_size, _vector_length); Kokkos::TeamPolicy policy; if (_team_size < 1) diff --git a/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_3.hpp b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_3.hpp index f753be0e5e..852487b91a 100644 --- a/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_3.hpp +++ b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_3.hpp @@ -117,10 +117,10 @@ struct Functor_TestBatchedTeamVectorCG_3 { _handle.set_memory_strategy(0); - Kokkos::TeamPolicy auto_policy( - ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); - Kokkos::TeamPolicy tuned_policy( - ceil(1. * _D.extent(0) / _N_team), _team_size, _vector_length); + Kokkos::TeamPolicy auto_policy(_handle.get_number_of_teams(), + Kokkos::AUTO(), Kokkos::AUTO()); + Kokkos::TeamPolicy tuned_policy(_handle.get_number_of_teams(), + _team_size, _vector_length); Kokkos::TeamPolicy policy; if (_team_size < 1) diff --git a/perf_test/batched/sparse/CG/KokkosBatched_Test_CG.cpp b/perf_test/batched/sparse/CG/KokkosBatched_Test_CG.cpp index fd114272f3..b01b0c4005 100644 --- a/perf_test/batched/sparse/CG/KokkosBatched_Test_CG.cpp +++ b/perf_test/batched/sparse/CG/KokkosBatched_Test_CG.cpp @@ -43,27 +43,11 @@ /// Kokkos headers #include "Kokkos_Core.hpp" -#include "Kokkos_Timer.hpp" -#include "Kokkos_Random.hpp" -#include "Kokkos_UnorderedMap.hpp" -#include "Kokkos_Sort.hpp" -/// KokkosKernels headers +#include "Kokkos_ArithTraits.hpp" #include "KokkosBatched_Util.hpp" #include "KokkosBatched_Vector.hpp" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include "KokkosBatched_Test_Sparse_Helper.hpp" #include "KokkosBatched_Spmv.hpp" @@ -128,8 +112,11 @@ int main(int argc, char *argv[]) { << std::endl << "-timers : Filename of the output timers." << std::endl - << "-n1 : Number of repetitions 1." << std::endl - << "-n2 : Number of repetitions 2." << std::endl + << "-n1 : Number of repetitions of the experience." + << std::endl + << "-n2 : Number of the kernel calls inside one " + "experience." + << std::endl << "-team_size : Used team size." << std::endl << "-n_implementations: Number of implementations to use: test " "all " @@ -137,6 +124,17 @@ int main(int argc, char *argv[]) { << std::endl << "-implementation : Specify only one implementation at a time." << std::endl + << " Note: implementation 0 : use scratch pad " + "only for scalar temporary variable." + << std::endl + << " Note: implementation 1 : use scratch pad " + "for scalar temporary variables and for the graph of the " + "matrices." + << std::endl + << " Note: implementation 2 : use scratch pad " + "for scalar and vector temporary variables and for the graph of " + "the matrices." + << std::endl << "-l : Specify left layout." << std::endl << "-r : Specify right layout." << std::endl << "-C : Specify if the convergence is monitored." @@ -273,8 +271,6 @@ int main(int argc, char *argv[]) { flush.run(); exec_space().fence(); - exec_space().fence(); - if (i_impl == 0 && layout_left) { t_spmv += Functor_TestBatchedTeamVectorCG_1 auto_policy( - ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); - Kokkos::TeamPolicy tuned_policy( - ceil(1. * _D.extent(0) / _N_team), _team_size, _vector_length); + Kokkos::TeamPolicy auto_policy(_handle.get_number_of_teams(), + Kokkos::AUTO(), Kokkos::AUTO()); + Kokkos::TeamPolicy tuned_policy(_handle.get_number_of_teams(), + _team_size, _vector_length); Kokkos::TeamPolicy policy; if (_team_size < 1) diff --git a/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_2.hpp b/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_2.hpp index e21ab808c7..4840bd1511 100644 --- a/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_2.hpp +++ b/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_2.hpp @@ -169,10 +169,10 @@ struct Functor_TestBatchedTeamVectorGMRES_2 { Kokkos::Timer timer; Kokkos::Profiling::pushRegion(name.c_str()); - Kokkos::TeamPolicy auto_policy( - ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); - Kokkos::TeamPolicy tuned_policy( - ceil(1. * _D.extent(0) / _N_team), _team_size, _vector_length); + Kokkos::TeamPolicy auto_policy(_handle.get_number_of_teams(), + Kokkos::AUTO(), Kokkos::AUTO()); + Kokkos::TeamPolicy tuned_policy(_handle.get_number_of_teams(), + _team_size, _vector_length); Kokkos::TeamPolicy policy; if (_team_size < 1) diff --git a/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_3.hpp b/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_3.hpp index 4f833b92e8..3594a36ddf 100644 --- a/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_3.hpp +++ b/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_3.hpp @@ -169,10 +169,10 @@ struct Functor_TestBatchedTeamVectorGMRES_3 { Kokkos::Timer timer; Kokkos::Profiling::pushRegion(name.c_str()); - Kokkos::TeamPolicy auto_policy( - ceil(1. * _D.extent(0) / _N_team), Kokkos::AUTO(), Kokkos::AUTO()); - Kokkos::TeamPolicy tuned_policy( - ceil(1. * _D.extent(0) / _N_team), _team_size, _vector_length); + Kokkos::TeamPolicy auto_policy(_handle.get_number_of_teams(), + Kokkos::AUTO(), Kokkos::AUTO()); + Kokkos::TeamPolicy tuned_policy(_handle.get_number_of_teams(), + _team_size, _vector_length); Kokkos::TeamPolicy policy; if (_team_size < 1) diff --git a/perf_test/batched/sparse/GMRES/KokkosBatched_Test_GMRES.cpp b/perf_test/batched/sparse/GMRES/KokkosBatched_Test_GMRES.cpp index 81576caeb6..a395365e09 100644 --- a/perf_test/batched/sparse/GMRES/KokkosBatched_Test_GMRES.cpp +++ b/perf_test/batched/sparse/GMRES/KokkosBatched_Test_GMRES.cpp @@ -46,27 +46,11 @@ /// Kokkos headers #include "Kokkos_Core.hpp" -#include "Kokkos_Timer.hpp" -#include "Kokkos_Random.hpp" -#include "Kokkos_UnorderedMap.hpp" -#include "Kokkos_Sort.hpp" -/// KokkosKernels headers +#include "Kokkos_ArithTraits.hpp" #include "KokkosBatched_Util.hpp" #include "KokkosBatched_Vector.hpp" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include "KokkosBatched_Test_Sparse_Helper.hpp" #include "KokkosBatched_Spmv.hpp" @@ -74,11 +58,6 @@ #include "KokkosBatched_Krylov_Handle.hpp" #include "KokkosBatched_GMRES.hpp" #include "KokkosBatched_JacobiPrec.hpp" -#include "KokkosBatched_Dot.hpp" -#include "KokkosBatched_Util.hpp" -#include "KokkosBatched_Dot_Internal.hpp" -#include "KokkosBatched_Spmv_Serial_Impl.hpp" -#include "KokkosBatched_Copy_Decl.hpp" typedef Kokkos::DefaultExecutionSpace exec_space; typedef typename exec_space::memory_space memory_space; @@ -150,8 +129,11 @@ int main(int argc, char *argv[]) { << "-other_level : Select the scratch pad level (if used) " "where everything except the Arnoldi vectors are stored." << std::endl - << "-n1 : Number of repetitions 1." << std::endl - << "-n2 : Number of repetitions 2." << std::endl + << "-n1 : Number of repetitions of the experience." + << std::endl + << "-n2 : Number of the kernel calls inside one " + "experience." + << std::endl << "-team_size : Used team size." << std::endl << "-n_implementations: Number of implementations to use: test " "all " @@ -159,6 +141,16 @@ int main(int argc, char *argv[]) { << std::endl << "-implementation : Specify only one implementation at a time." << std::endl + << " Note: implementation 0 : does not use " + "scratch pad." + << std::endl + << " Note: implementation 1 : use scratch pad " + "for the graph and for the diagonal entries of the matrices." + << std::endl + << " Note: implementation 2 : use scratch pad " + "for the graph and for the diagonal entries of the matrices and " + "for the temporary variable but not for the Arnoldi vectors." + << std::endl << "-l : Specify left layout." << std::endl << "-r : Specify right layout." << std::endl << "-P : Specify if a Jacobi preconditioner is " @@ -318,8 +310,6 @@ int main(int argc, char *argv[]) { flush.run(); exec_space().fence(); - exec_space().fence(); - if (i_impl == 0 && layout_left) { if (use_preconditioner) t_spmv += Functor_TestBatchedTeamVectorGMRES_1< diff --git a/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp b/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp index 71fbd129ad..ca096117a9 100644 --- a/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp +++ b/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp @@ -105,21 +105,6 @@ void readArrayFromMM(std::string name, const XType &x) { input.close(); Kokkos::deep_copy(x, x_h); - - /* - std::ofstream myfile; - myfile.open("x-data.txt"); - - - for (size_t i = 0; i < x_h.extent(0); ++i) { - for (size_t j = 0; j < x_h.extent(1); ++j) { - myfile << std::setprecision (15) << x_h(i, j) << " "; - } - myfile << std::endl; - } - - myfile.close(); - */ } template @@ -195,21 +180,6 @@ void readCRSFromMM(std::string name, const VType &V, const IntType &r, Kokkos::deep_copy(V, V_h); Kokkos::deep_copy(r, r_h); Kokkos::deep_copy(c, c_h); - - /* - std::ofstream myfile; - myfile.open("a-data.txt"); - - - for (size_t i = 0; i < nrows; ++i) { - for (size_t j = r_h(i); j < r_h(i+1); ++j) { - myfile << std::setprecision (15) << i+1 << " " << c_h(j)+1 << " " << - V_h(0, j) << std::endl; - } - } - - myfile.close(); - */ } template @@ -238,17 +208,4 @@ void getInvDiagFromCRS(const VType &V, const IntType &r, const IntType &c, } Kokkos::deep_copy(diag, diag_values_host); - - /* - std::ofstream myfile; - myfile.open("a-diag.txt"); - - - for (size_t i = 0; i < BlkSize; ++i) { - myfile << std::setprecision (15) << i+1 << " " << diag_values_host(0, i) - << std::endl; - } - - myfile.close(); - */ } diff --git a/perf_test/batched/sparse/SPMV/KokkosBatched_Test_SPMV.cpp b/perf_test/batched/sparse/SPMV/KokkosBatched_Test_SPMV.cpp index a04464829b..9416a27492 100644 --- a/perf_test/batched/sparse/SPMV/KokkosBatched_Test_SPMV.cpp +++ b/perf_test/batched/sparse/SPMV/KokkosBatched_Test_SPMV.cpp @@ -44,30 +44,12 @@ /// Kokkos headers #include "Kokkos_Core.hpp" -#include "Kokkos_Timer.hpp" -#include "Kokkos_Random.hpp" -#include "Kokkos_UnorderedMap.hpp" -#include "Kokkos_Sort.hpp" - -/// KokkosKernels headers +#include "Kokkos_ArithTraits.hpp" #include "KokkosBatched_Util.hpp" -#include "KokkosBatched_Vector.hpp" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "KokkosBatched_Test_Sparse_Helper.hpp" +#include "KokkosBatched_SPMV_View.hpp" #include "KokkosBatched_Spmv.hpp" typedef Kokkos::DefaultExecutionSpace exec_space; @@ -106,9 +88,6 @@ struct Functor_TestBatchedTeamVectorSpmv { template KOKKOS_INLINE_FUNCTION void operator()(const MemberType &member) const { - // int team_size = member.team_size(); - // printf("team_size %d\n", team_size); - // std::cout << "member.team_size() = " << member.team_size() << std::endl; const int first_matrix = static_cast(member.league_rank()) * _matrices_per_team; const int N = _D.extent(0); @@ -209,8 +188,11 @@ int main(int argc, char *argv[]) { << std::endl << "-timers : Filename of the output timers." << std::endl - << "-n1 : Number of repetitions 1." << std::endl - << "-n2 : Number of repetitions 2." << std::endl + << "-n1 : Number of repetitions of the experience." + << std::endl + << "-n2 : Number of the kernel calls inside one " + "experience." + << std::endl << "-team_size : Used team size." << std::endl << "-n_implementations: Number of implementations to use: test " "all " @@ -218,6 +200,24 @@ int main(int argc, char *argv[]) { << std::endl << "-implementation : Specify only one implementation at a time." << std::endl + << " Note: implementation 0 : use a Team " + "approach where a Team have to apply N_team SPMV. A given team " + "applies N_team SPMV sequentially and uses a ThreadRange over " + "the row and a VectorRange over the non zero entries of a given " + "row." + << std::endl + << " Note: implementation 1 : use a Team " + "approach where a Team have to apply N_team SPMV. A given team " + "uses a fused thread vector range policy to loop over the " + "independent fibers." + << std::endl + << " Note: implementation 2 : same as " + "implementation 1 but using scratch pad for the graph." + << std::endl + << " Note: implementation 3 : same as " + "implementation 1 but using the kernels from " + "batched/sparse/impl/*." + << std::endl << "-l : Specify left layout." << std::endl << "-r : Specify right layout." << std::endl << "-N_team : Specify the number of systems per team." @@ -348,9 +348,8 @@ int main(int argc, char *argv[]) { timer.reset(); exec_space().fence(); - int N_team = i_impl == 0 ? 1 : N_team_potential; - N_team = N_team_potential; - int number_of_teams = i_impl == 0 ? N : ceil(1. * N / N_team); + int N_team = N_team_potential; + int number_of_teams = ceil(static_cast(N) / N_team); if (layout_left) { using policy_type = Kokkos::TeamPolicy; diff --git a/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverDn.cpp b/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverDn.cpp index f386ace952..05d45a19fd 100644 --- a/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverDn.cpp +++ b/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverDn.cpp @@ -60,10 +60,6 @@ #include "KokkosKernels_config.h" #include "KokkosKernels_SparseUtils_cusparse.hpp" -/// KokkosKernels headers -#include "KokkosBatched_Util.hpp" -#include "KokkosBatched_Vector.hpp" - #include #include #include @@ -85,7 +81,6 @@ #include "KokkosBatched_Gesv.hpp" #include "KokkosBatched_JacobiPrec.hpp" #include "KokkosBatched_Dot.hpp" -#include "KokkosBatched_Util.hpp" #include "KokkosBatched_Dot_Internal.hpp" #include "KokkosBatched_Spmv_Serial_Impl.hpp" #include "KokkosBatched_Copy_Decl.hpp" diff --git a/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverSp.cpp b/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverSp.cpp index dfa346094d..2c9efe41de 100644 --- a/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverSp.cpp +++ b/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverSp.cpp @@ -63,10 +63,6 @@ #include "KokkosKernels_config.h" #include "KokkosKernels_SparseUtils_cusparse.hpp" -/// KokkosKernels headers -#include "KokkosBatched_Util.hpp" -#include "KokkosBatched_Vector.hpp" - #include #include #include @@ -87,7 +83,6 @@ #include "KokkosBatched_Gesv.hpp" #include "KokkosBatched_JacobiPrec.hpp" #include "KokkosBatched_Dot.hpp" -#include "KokkosBatched_Util.hpp" #include "KokkosBatched_Dot_Internal.hpp" #include "KokkosBatched_Spmv_Serial_Impl.hpp" #include "KokkosBatched_Copy_Decl.hpp" From 9c0b52daa95ff44cfc57d66eabedf106ba23141c Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Thu, 6 Oct 2022 08:58:08 -0600 Subject: [PATCH 151/226] src/sparse: Add crs2ccs - Adds KokkosSparse::crs2ccs - Adds KokkosSparse::CcsMatrix - Rewrite ccs2crs to call transpose_matrix --- docs/developer/apidocs/sparse.rst | 15 + sparse/impl/KokkosSparse_spgemm_imp_outer.hpp | 2 +- sparse/impl/KokkosSparse_spmv_spec.hpp | 2 +- sparse/impl/KokkosSparse_spmv_struct_spec.hpp | 2 +- sparse/src/KokkosSparse_CcsMatrix.hpp | 293 ++++++++++++++++++ sparse/src/KokkosSparse_CrsMatrix.hpp | 2 +- sparse/src/KokkosSparse_Utils.hpp | 4 +- sparse/src/KokkosSparse_ccs2crs.hpp | 160 ++++++++++ sparse/src/KokkosSparse_crs2ccs.hpp | 159 ++++++++++ sparse/src/KokkosSparse_csc2csr.hpp | 250 --------------- sparse/unit_test/Test_Sparse.hpp | 5 +- ...pp => Test_Sparse_TestUtils_RandCsMat.hpp} | 56 ++-- .../Test_Sparse_block_gauss_seidel.hpp | 1 - sparse/unit_test/Test_Sparse_ccs2crs.hpp | 195 ++++++++++++ sparse/unit_test/Test_Sparse_crs2ccs.hpp | 194 ++++++++++++ sparse/unit_test/Test_Sparse_csc2csr.hpp | 46 ++- test_common/KokkosKernels_MatrixConverter.cpp | 2 +- test_common/KokkosKernels_TestUtils.hpp | 117 +++---- 18 files changed, 1149 insertions(+), 356 deletions(-) create mode 100644 sparse/src/KokkosSparse_CcsMatrix.hpp create mode 100644 sparse/src/KokkosSparse_ccs2crs.hpp create mode 100644 sparse/src/KokkosSparse_crs2ccs.hpp delete mode 100644 sparse/src/KokkosSparse_csc2csr.hpp rename sparse/unit_test/{Test_Sparse_TestUtils_RandCscMat.hpp => Test_Sparse_TestUtils_RandCsMat.hpp} (62%) create mode 100644 sparse/unit_test/Test_Sparse_ccs2crs.hpp create mode 100644 sparse/unit_test/Test_Sparse_crs2ccs.hpp diff --git a/docs/developer/apidocs/sparse.rst b/docs/developer/apidocs/sparse.rst index 463e00a733..ed877ac567 100644 --- a/docs/developer/apidocs/sparse.rst +++ b/docs/developer/apidocs/sparse.rst @@ -6,6 +6,21 @@ crsmatrix .. doxygenclass:: KokkosSparse::CrsMatrix :members: +ccsmatrix +--------- +.. doxygenclass:: KokkosSparse::CcsMatrix + :members: + +crs2ccs +------- +.. doxygenfunction:: KokkosSparse::crs2ccs(OrdinalType nrows, OrdinalType ncols, SizeType nnz, ValViewType vals, RowMapViewType row_map, ColIdViewType col_ids) +.. doxygenfunction:: KokkosSparse::crs2ccs(KokkosSparse::CrsMatrix &crsMatrix) + +ccs2crs +------- +.. doxygenfunction:: KokkosSparse::ccs2crs(OrdinalType nrows, OrdinalType ncols, SizeType nnz, ValViewType vals, ColMapViewType col_map, RowIdViewType row_ids) +.. doxygenfunction:: KokkosSparse::ccs2crs(KokkosSparse::CcsMatrix &ccsMatrix) + spmv ---- diff --git a/sparse/impl/KokkosSparse_spgemm_imp_outer.hpp b/sparse/impl/KokkosSparse_spgemm_imp_outer.hpp index c6a24e2163..8a390cc9a4 100644 --- a/sparse/impl/KokkosSparse_spgemm_imp_outer.hpp +++ b/sparse/impl/KokkosSparse_spgemm_imp_outer.hpp @@ -570,7 +570,7 @@ void KokkosSPGEMM( diff --git a/sparse/impl/KokkosSparse_spmv_spec.hpp b/sparse/impl/KokkosSparse_spmv_spec.hpp index cc29d72b77..fda6839c8f 100644 --- a/sparse/impl/KokkosSparse_spmv_spec.hpp +++ b/sparse/impl/KokkosSparse_spmv_spec.hpp @@ -176,7 +176,7 @@ struct SPMV { /// /// The first 5 template parameters are the template parameters of the /// input 1-D View of coefficients 'alpha'. The next 5 template -/// parameters are the same as those of KokkosSparse::CrsMatrix. In +/// parameters are the same as those of KokkosSparse::CrsMatrix. In /// particular: /// /// AT: type of each entry of the sparse matrix diff --git a/sparse/impl/KokkosSparse_spmv_struct_spec.hpp b/sparse/impl/KokkosSparse_spmv_struct_spec.hpp index ad175c2dfa..28892ef8b7 100644 --- a/sparse/impl/KokkosSparse_spmv_struct_spec.hpp +++ b/sparse/impl/KokkosSparse_spmv_struct_spec.hpp @@ -176,7 +176,7 @@ struct SPMV_STRUCT { /// /// The first 5 template parameters are the template parameters of the /// input 1-D View of coefficients 'alpha'. The next 5 template -/// parameters are the same as those of KokkosSparse::CrsMatrix. In +/// parameters are the same as those of KokkosSparse::CrsMatrix. In /// particular: /// /// AT: type of each entry of the sparse matrix diff --git a/sparse/src/KokkosSparse_CcsMatrix.hpp b/sparse/src/KokkosSparse_CcsMatrix.hpp new file mode 100644 index 0000000000..c2ae9c806e --- /dev/null +++ b/sparse/src/KokkosSparse_CcsMatrix.hpp @@ -0,0 +1,293 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +/// \file KokkosSparse_CcsMatrix.hpp +/// \brief Local sparse matrix interface +/// +/// This file provides KokkosSparse::CcsMatrix. This implements a +/// local (no MPI) sparse matrix stored in compressed column sparse +/// ("Ccs") format. + +#ifndef KOKKOS_SPARSE_CCSMATRIX_HPP_ +#define KOKKOS_SPARSE_CCSMATRIX_HPP_ + +#include "Kokkos_Core.hpp" +#include +#include +#include +#include "KokkosSparse_findRelOffset.hpp" +#include "KokkosKernels_default_types.hpp" +#include "KokkosKernels_Macros.hpp" + +namespace Kokkos { +/// \class StaticCcsGraph +/// \brief Compressed column storage array copied from Kokkos::StaticCrsGraph. +/// +/// \tparam DataType The type of stored entries. If a StaticCcsGraph is +/// used as the graph of a sparse matrix, then this is usually an +/// integer type, the type of the column indices in the sparse +/// matrix. +/// +/// \tparam Arg1Type The second template parameter, corresponding +/// either to the Device type (if there are no more template +/// parameters) or to the Layout type (if there is at least one more +/// template parameter). +/// +/// \tparam Arg2Type The third template parameter, which if provided +/// corresponds to the Device type. +/// +/// \tparam Arg3Type The third template parameter, which if provided +/// corresponds to the MemoryTraits. +/// +/// \tparam SizeType The type of col offsets. Usually the default +/// parameter suffices. However, setting a nondefault value is +/// necessary in some cases, for example, if you want to have a +/// sparse matrices with dimensions (and therefore column indices) +/// that fit in \c int, but want to store more than INT_MAX +/// entries in the sparse matrix. +/// +/// A col has a range of entries: +///
    +///
  • col_map[i0] <= entry < col_map[i0+1]
  • +///
  • 0 <= i1 < col_map[i0+1] - col_map[i0]
  • +///
  • entries( entry , i2 , i3 , ... );
  • +///
  • entries( col_map[i0] + i1 , i2 , i3 , ... );
  • +///
+template ::size_type> +class StaticCcsGraph { + private: + using traits = ViewTraits; + + public: + using data_type = DataType; + using array_layout = typename traits::array_layout; + using execution_space = typename traits::execution_space; + using device_type = typename traits::device_type; + using memory_traits = typename traits::memory_traits; + using size_type = SizeType; + + using col_map_type = + View; + using entries_type = + View; + using row_block_type = + View; + + entries_type entries; + col_map_type col_map; + + //! Construct an empty view. + KOKKOS_INLINE_FUNCTION + StaticCcsGraph() : entries(), col_map() {} + + //! Copy constructor (shallow copy). + KOKKOS_INLINE_FUNCTION + StaticCcsGraph(const StaticCcsGraph& rhs) + : entries(rhs.entries), col_map(rhs.col_map) {} + + template + KOKKOS_INLINE_FUNCTION StaticCcsGraph(const EntriesType& entries_, + const ColMapType& col_map_) + : entries(entries_), col_map(col_map_) {} + + /** \brief Return number of columns in the graph + */ + KOKKOS_INLINE_FUNCTION + size_type numCols() const { + return (col_map.extent(0) != 0) + ? col_map.extent(0) - static_cast(1) + : static_cast(0); + } +}; +} // namespace Kokkos + +namespace KokkosSparse { +/// \class CcsMatrix +/// \brief Compressed sparse column implementation of a sparse matrix. +/// \tparam ScalarType The type of entries in the sparse matrix. +/// \tparam OrdinalType The type of column indices in the sparse matrix. +/// \tparam Device The Kokkos Device type. +/// \tparam MemoryTraits Traits describing how Kokkos manages and +/// accesses data. The default parameter suffices for most users. +/// +/// "Ccs" stands for "compressed column sparse." +template ::size_type> +class CcsMatrix { + static_assert( + std::is_signed::value, + "CcsMatrix requires that OrdinalType is a signed integer type."); + + public: + //! Type of the matrix's execution space. + typedef typename Device::execution_space execution_space; + //! Type of the matrix's memory space. + typedef typename Device::memory_space memory_space; + //! Canonical device type + typedef Kokkos::Device device_type; + typedef MemoryTraits memory_traits; + + /// \brief Type of each entry of the "column map." + /// + /// The "column map" corresponds to the \c ptr array of column offsets in + /// compressed sparse column (CCS) storage. + typedef SizeType size_type; + //! Type of each value in the matrix. + typedef ScalarType value_type; + //! Type of each (column) index in the matrix. + typedef OrdinalType ordinal_type; + //! Type of the graph structure of the sparse matrix - consistent with Kokkos. + typedef Kokkos::StaticCcsGraph + staticccsgraph_type; + //! Type of the "column map" (which contains the offset for each column's + //! data). + typedef typename staticccsgraph_type::col_map_type col_map_type; + typedef Kokkos::View + values_type; + //! Type of column indices in the sparse matrix. + typedef typename staticccsgraph_type::entries_type index_type; + + /// \name Storage of the actual sparsity structure and values. + /// + /// CcsMatrix uses the compressed sparse column (CCS) storage format to + /// store the sparse matrix. + //@{ + //! The graph (sparsity structure) of the sparse matrix. + staticccsgraph_type graph; + //! The 1-D array of values of the sparse matrix. + values_type values; + //@} + + private: + /// \brief The number of rows in the CCS matrix + ordinal_type numRows_; + + public: + /// \brief Default constructor; constructs an empty sparse matrix. + KOKKOS_INLINE_FUNCTION + CcsMatrix() : numRows_(0) {} + + // clang-format off + /// \brief Constructor that accepts a column map, row indices, and + /// values. + /// + /// The matrix will store and use the column map, indices, and values + /// directly (by view, not by deep copy). + /// + /// \param label [in] The sparse matrix's label. + /// \param nrows [in] The number of rows. + /// \param ncols [in] The number of columns. + /// \param annz [in] The number of entries. + /// \param vals [in] The entries. + /// \param colmap [in] The column map (containing the offsets to the data in + /// each column). + /// \param rows [in] The row indices. + // clang-format on + CcsMatrix(const std::string& /* label */, const OrdinalType nrows, + const OrdinalType ncols, const size_type annz, + const values_type& vals, const col_map_type& colmap, + const index_type& rows) + : graph(rows, colmap), values(vals), numRows_(nrows) { + const ordinal_type actualNumRows = + (colmap.extent(0) != 0) + ? static_cast(colmap.extent(0) - + static_cast(1)) + : static_cast(0); + if (ncols != actualNumRows) { + std::ostringstream os; + os << "Input argument ncols = " << ncols + << " != the actual number of " + "rows " + << actualNumRows << " according to the 'rows' input argument."; + throw std::invalid_argument(os.str()); + } + if (annz != nnz()) { + std::ostringstream os; + os << "Input argument annz = " << annz << " != this->nnz () = " << nnz() + << "."; + throw std::invalid_argument(os.str()); + } + } + + //! The number of rows in the sparse matrix. + KOKKOS_INLINE_FUNCTION ordinal_type numCols() const { + return graph.numCols(); + } + + //! The number of columns in the sparse matrix. + KOKKOS_INLINE_FUNCTION ordinal_type numRows() const { return numRows_; } + + //! The number of "point" (non-block) rows in the matrix. Since Ccs is not + //! blocked, this is just the number of regular rows. + KOKKOS_INLINE_FUNCTION ordinal_type numPointRows() const { return numRows(); } + + //! The number of "point" (non-block) columns in the matrix. Since Ccs is not + //! blocked, this is just the number of regular columns. + KOKKOS_INLINE_FUNCTION ordinal_type numPointCols() const { return numCols(); } + + //! The number of stored entries in the sparse matrix. + KOKKOS_INLINE_FUNCTION size_type nnz() const { + return graph.entries.extent(0); + } +}; + +/// \class is_ccs_matrix +/// \brief is_ccs_matrix::value is true if T is a CcsMatrix<...>, false +/// otherwise +template +struct is_ccs_matrix : public std::false_type {}; +template +struct is_ccs_matrix> : public std::true_type {}; +template +struct is_ccs_matrix> : public std::true_type {}; + +} // namespace KokkosSparse +#endif diff --git a/sparse/src/KokkosSparse_CrsMatrix.hpp b/sparse/src/KokkosSparse_CrsMatrix.hpp index c39ce348e4..dda08faba9 100644 --- a/sparse/src/KokkosSparse_CrsMatrix.hpp +++ b/sparse/src/KokkosSparse_CrsMatrix.hpp @@ -42,7 +42,7 @@ //@HEADER */ -/// \file Kokkos_Sparse_CrsMatrix.hpp +/// \file KokkosSparse_CrsMatrix.hpp /// \brief Local sparse matrix interface /// /// This file provides KokkosSparse::CrsMatrix. This implements a diff --git a/sparse/src/KokkosSparse_Utils.hpp b/sparse/src/KokkosSparse_Utils.hpp index e8f7fca72d..2616d8fbb7 100644 --- a/sparse/src/KokkosSparse_Utils.hpp +++ b/sparse/src/KokkosSparse_Utils.hpp @@ -434,7 +434,7 @@ void transpose_matrix( TransposeFunctor_t tm(num_rows, num_cols, xadj, adj, vals, t_xadj, t_adj, t_vals, tmp_row_view, true, team_size); - Kokkos::parallel_for("KokkosKernels::Impl::transpose_matrix::S0", + Kokkos::parallel_for("KokkosSparse::Impl::transpose_matrix::S0", count_tp_t((num_rows + team_size - 1) / team_size, team_size, thread_size), tm); @@ -446,7 +446,7 @@ void transpose_matrix( Kokkos::deep_copy(tmp_row_view, t_xadj); Kokkos::parallel_for( - "KokkosKernels::Impl::transpose_matrix::S1", + "KokkosSparse::Impl::transpose_matrix::S1", fill_tp_t((num_rows + team_size - 1) / team_size, team_size, thread_size), tm); diff --git a/sparse/src/KokkosSparse_ccs2crs.hpp b/sparse/src/KokkosSparse_ccs2crs.hpp new file mode 100644 index 0000000000..ae42592b1e --- /dev/null +++ b/sparse/src/KokkosSparse_ccs2crs.hpp @@ -0,0 +1,160 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include "KokkosKernels_Utils.hpp" +#include "KokkosSparse_CcsMatrix.hpp" +#include "KokkosSparse_CrsMatrix.hpp" + +#ifndef _KOKKOSSPARSE_CCS2CRS_HPP +#define _KOKKOSSPARSE_CCS2CRS_HPP +namespace KokkosSparse { +namespace Impl { +template +class Ccs2Crs { + private: + using CrsST = typename ValViewType::value_type; + using CrsOT = OrdinalType; + using CrsET = typename ValViewType::execution_space; + using CrsMT = void; + using CrsSzT = SizeType; + using CrsType = CrsMatrix; + using CrsValsViewType = typename CrsType::values_type; + using CrsRowMapViewType = typename CrsType::row_map_type::non_const_type; + using CrsColIdViewType = typename CrsType::index_type; + + OrdinalType __nrows; + OrdinalType __ncols; + SizeType __nnz; + ValViewType __vals; + ColMapViewType __col_map; + RowIdViewType __row_ids; + + RowIdViewType __crs_row_cnt; + + CrsValsViewType __crs_vals; + CrsRowMapViewType __crs_row_map; + CrsColIdViewType __crs_col_ids; + + public: + Ccs2Crs(OrdinalType nrows, OrdinalType ncols, SizeType nnz, ValViewType vals, + ColMapViewType col_map, RowIdViewType row_ids) + : __nrows(nrows), + __ncols(ncols), + __nnz(nnz), + __vals(vals), + __col_map(col_map), + __row_ids(row_ids) { + __crs_vals = CrsValsViewType( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "__crs_vals"), nnz); + __crs_row_map = + CrsRowMapViewType(Kokkos::view_alloc("__crs_row_map"), nrows + 1); + __crs_col_ids = CrsColIdViewType( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "__crs_col_ids"), nnz); + + KokkosSparse::Impl::transpose_matrix< + ColMapViewType, RowIdViewType, ValViewType, CrsRowMapViewType, + CrsColIdViewType, CrsValsViewType, CrsRowMapViewType, CrsET>( + __ncols, __nrows, __col_map, __row_ids, __vals, __crs_row_map, + __crs_col_ids, __crs_vals); + } + + CrsType get_crsMat() { + return CrsType("ccs2crs", __nrows, __ncols, __nnz, __crs_vals, + __crs_row_map, __crs_col_ids); + } +}; +} // namespace Impl +// clang-format off +/// +/// \brief Blocking function that converts a ccs matrix to a CrsMatrix. +/// Ccs values are copied from column-contiguous layout into row-contiguous layout. +/// \tparam OrdinalType The view value type associated with the RowIdViewType +/// \tparam SizeType The type of nnz +/// \tparam ValViewType The values view type +/// \tparam ColMapViewType The column map view type +/// \tparam RowIdViewType The row ids view type +/// \param nrows The number of rows in the ccs matrix +/// \param ncols The number of columns in the ccs matrix +/// \param nnz The number of non-zeros in the ccs matrix +/// \param vals The values view of the ccs matrix +/// \param col_map The column map view of the ccs matrix +/// \param row_ids The row ids view of the ccs matrix +/// \return A KokkosSparse::CrsMatrix. +/// +/// \note In KokkosKernels sparse code, adj stands for adjacency list +/// and here we're passing in a ccs matrix with xadj=col_map and adj=row_ids. +// clang-format on +template +auto ccs2crs(OrdinalType nrows, OrdinalType ncols, SizeType nnz, + ValViewType vals, ColMapViewType col_map, RowIdViewType row_ids) { + using Ccs2crsType = Impl::Ccs2Crs; + Ccs2crsType ccs2Crs(nrows, ncols, nnz, vals, col_map, row_ids); + return ccs2Crs.get_crsMat(); +} + +/// +/// @brief Blocking function that converts a crs matrix to a CcsMatrix. +/// Ccs values are copied from column-contiguous layout into row-contiguous +/// layout. +/// +/// \tparam ScalarType The ccsMatrix::scalar_type +/// \tparam OrdinalType The ccsMatrix::ordinal_type +/// \tparam Device The ccsMatrix::device_type +/// \tparam MemoryTraits The ccsMatrix::memory_traits +/// \tparam SizeType The ccsMatrix::size_type +/// \param ccsMatrix The KokkosSparse::CcsMatrix. +/// \return A KokkosSparse::CrsMatrix. +template +auto ccs2crs(KokkosSparse::CcsMatrix &ccsMatrix) { + return ccs2crs(ccsMatrix.numRows(), ccsMatrix.numCols(), ccsMatrix.nnz(), + ccsMatrix.values, ccsMatrix.graph.col_map, + ccsMatrix.graph.entries); +} +} // namespace KokkosSparse +#endif // _KOKKOSSPARSE_CCS2CRS_HPP diff --git a/sparse/src/KokkosSparse_crs2ccs.hpp b/sparse/src/KokkosSparse_crs2ccs.hpp new file mode 100644 index 0000000000..3fd165ae47 --- /dev/null +++ b/sparse/src/KokkosSparse_crs2ccs.hpp @@ -0,0 +1,159 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include "KokkosKernels_Utils.hpp" +#include "KokkosSparse_CcsMatrix.hpp" +#include "KokkosSparse_CrsMatrix.hpp" + +#ifndef _KOKKOSSPARSE_CRS2CCS_HPP +#define _KOKKOSSPARSE_CRS2CCS_HPP +namespace KokkosSparse { +namespace Impl { +template +class Crs2Ccs { + private: + using CcsST = typename ValViewType::value_type; + using CcsOT = OrdinalType; + using CcsET = typename ValViewType::execution_space; + using CcsMT = void; + using CcsSzT = SizeType; + using CcsType = CcsMatrix; + using CcsValsViewType = typename CcsType::values_type; + using CcsColMapViewType = typename CcsType::col_map_type::non_const_type; + using CcsRowIdViewType = typename CcsType::index_type; + + OrdinalType __nrows; + OrdinalType __ncols; + SizeType __nnz; + ValViewType __vals; + RowMapViewType __row_map; + ColIdViewType __col_ids; + + CcsValsViewType __ccs_vals; + CcsColMapViewType __ccs_col_map; + CcsRowIdViewType __ccs_row_ids; + + public: + Crs2Ccs(OrdinalType nrows, OrdinalType ncols, SizeType nnz, ValViewType vals, + RowMapViewType row_map, ColIdViewType col_ids) + : __nrows(nrows), + __ncols(ncols), + __nnz(nnz), + __vals(vals), + __row_map(row_map), + __col_ids(col_ids) { + __ccs_vals = CcsValsViewType( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "__ccs_vals"), nnz); + __ccs_col_map = + CcsColMapViewType(Kokkos::view_alloc("__ccs_col_map"), ncols + 1); + __ccs_row_ids = CcsRowIdViewType( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "__ccs_row_ids"), nnz); + + KokkosSparse::Impl::transpose_matrix< + RowMapViewType, ColIdViewType, ValViewType, CcsColMapViewType, + CcsRowIdViewType, CcsValsViewType, CcsColMapViewType, CcsET>( + __nrows, __ncols, __row_map, __col_ids, __vals, __ccs_col_map, + __ccs_row_ids, __ccs_vals); + } + + CcsType get_ccsMat() { + return CcsType("crs2ccs", __nrows, __ncols, __nnz, __ccs_vals, + __ccs_col_map, __ccs_row_ids); + } +}; +} // namespace Impl +// clang-format off +/// +/// \brief Blocking function that converts a CrsMatrix to a CcsMatrix. +/// Crs values are copied from row-contiguous layout into column-contiguous layout. +/// \tparam OrdinalType The view value type associated with the RowIdViewType +/// \tparam SizeType The type of nnz +/// \tparam ValViewType The values view type +/// \tparam RowMapViewType The column map view type +/// \tparam ColIdViewType The row ids view type +/// \param nrows The number of rows in the crs matrix +/// \param ncols The number of columns in the crs matrix +/// \param nnz The number of non-zeros in the crs matrix +/// \param vals The values view of the crs matrix +/// \param row_map The row map view of the crs matrix +/// \param col_ids The col ids view of the crs matrix +/// \return A KokkosSparse::CcsMatrix. +/// +/// \note In KokkosKernels sparse code, adj stands for adjacency list +/// and here we're passing in a crs matrix with xadj=row_map and adj=col_ids. +// clang-format on +template +auto crs2ccs(OrdinalType nrows, OrdinalType ncols, SizeType nnz, + ValViewType vals, RowMapViewType row_map, ColIdViewType col_ids) { + using Crs2ccsType = Impl::Crs2Ccs; + Crs2ccsType crs2Ccs(nrows, ncols, nnz, vals, row_map, col_ids); + return crs2Ccs.get_ccsMat(); +} + +/// +/// @brief Blocking function that converts a crs matrix to a CcsMatrix. +/// Crs values are copied from row-contiguous layout into column-contiguous +/// layout. +/// +/// \tparam ScalarType The crsMatrix::scalar_type +/// \tparam OrdinalType The crsMatrix::ordinal_type +/// \tparam Device The crsMatrix::device_type +/// \tparam MemoryTraits The crsMatrix::memory_traits +/// \tparam SizeType The crsMatrix::size_type +/// \param crsMatrix The KokkosSparse::CrsMatrix. +/// \return A KokkosSparse::CcsMatrix. +template +auto crs2ccs(KokkosSparse::CrsMatrix &crsMatrix) { + return crs2ccs(crsMatrix.numRows(), crsMatrix.numCols(), crsMatrix.nnz(), + crsMatrix.values, crsMatrix.graph.row_map, + crsMatrix.graph.entries); +} +} // namespace KokkosSparse + +#endif // _KOKKOSSPARSE_CRS2CCS_HPP \ No newline at end of file diff --git a/sparse/src/KokkosSparse_csc2csr.hpp b/sparse/src/KokkosSparse_csc2csr.hpp deleted file mode 100644 index 32f0c2b745..0000000000 --- a/sparse/src/KokkosSparse_csc2csr.hpp +++ /dev/null @@ -1,250 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include "KokkosKernels_Utils.hpp" -#include - -#ifndef _KOKKOSSPARSE_CSC2CSR_HPP -#define _KOKKOSSPARSE_CSC2CSR_HPP -namespace KokkosSparse { -namespace Impl { -template -class Csc2Csr { - private: - using CrsST = typename ValViewType::value_type; - using CrsOT = OrdinalType; - using CrsET = typename ValViewType::execution_space; - using CrsMT = void; - using CrsSzT = SizeType; - using CrsType = CrsMatrix; - using CrsValsViewType = typename CrsType::values_type; - using CrsRowMapViewType = typename CrsType::row_map_type::non_const_type; - using CrsColIdViewType = typename CrsType::index_type; - - OrdinalType __nrows; - OrdinalType __ncols; - SizeType __nnz; - ValViewType __vals; - RowIdViewType __row_ids; - ColMapViewType __col_map; - - RowIdViewType __crs_row_cnt; - - CrsValsViewType __crs_vals; - CrsRowMapViewType __crs_row_map; - CrsRowMapViewType __crs_row_map_scratch; - CrsColIdViewType __crs_col_ids; - - public: - struct AlgoTags { - struct s1RowCnt {}; - struct s2RowMap {}; - struct s3Copy {}; - }; - - using s1RowCntTag = typename AlgoTags::s1RowCnt; - using s3CopyTag = typename AlgoTags::s3Copy; - - private: - using TeamPolicyType = Kokkos::TeamPolicy; - - int __suggested_team_size, __suggested_vec_size, __league_size; - - template - void __run(FunctorType &functor) { - // s1RowCntTag - { - Kokkos::parallel_for("Csc2Csr", - Kokkos::RangePolicy(0, __nnz), - functor); - CrsET().fence(); - } - // s2RowMapTag - { - namespace KE = Kokkos::Experimental; - CrsET crsET; - // Use exclusive scan so we can allocate the row map uninitialized and - // avoid accessing device views on the host. - KE::exclusive_scan(crsET, KE::cbegin(__crs_row_cnt), - KE::cend(__crs_row_cnt), KE::begin(__crs_row_map), 0); - CrsET().fence(); - Kokkos::deep_copy(__crs_row_map_scratch, __crs_row_map); - CrsET().fence(); - } - // s3CopyTag - { - TeamPolicyType teamPolicy(__ncols, __suggested_team_size, - __suggested_vec_size); - Kokkos::parallel_for("Csc2Csr", teamPolicy, functor); - CrsET().fence(); - } - // TODO: s3CopySortCompressTag - } - - public: - template - class __Functor { - private: - OrdinalType __nrows; - OrdinalType __ncols; - SizeType __nnz; - ValViewType __vals; - CrsValsViewType __crs_vals; - RowIdViewType __row_ids; - CrsRowMapViewType __crs_row_map; - CrsRowMapViewType __crs_row_map_scratch; - ColMapViewType __col_map; - CrsColIdViewType __crs_col_ids; - RowIdViewType __crs_row_cnt; - - public: - __Functor(OrdinalType nrows, OrdinalType ncols, SizeType nnz, - ValViewType vals, CrsValsViewType crs_vals, RowIdViewType row_ids, - CrsRowMapViewType crs_row_map, - CrsRowMapViewType crs_row_map_scratch, ColMapViewType col_map, - CrsColIdViewType crs_col_ids, RowIdViewType crs_row_cnt) - : __nrows(nrows), - __ncols(ncols), - __nnz(nnz), - __vals(vals), - __crs_vals(crs_vals), - __row_ids(row_ids), - __crs_row_map(crs_row_map), - __crs_row_map_scratch(crs_row_map_scratch), - __col_map(col_map), - __crs_col_ids(crs_col_ids), - __crs_row_cnt(crs_row_cnt){}; - - KOKKOS_INLINE_FUNCTION - void operator()(const s3CopyTag &, const MemberType &member) const { - auto j = member.league_rank(); - auto col_start = __col_map(j); - auto col_len = __col_map(j + 1) - col_start; - - Kokkos::parallel_for( - Kokkos::TeamVectorRange(member, 0, col_len), [&](const int &k) { - auto idx = col_start + k; - auto i = __row_ids(idx); - auto crs_idx = - Kokkos::atomic_fetch_inc(&__crs_row_map_scratch.data()[i]); - __crs_col_ids(crs_idx) = j; - __crs_vals(crs_idx) = __vals(idx); - }); - } - - KOKKOS_INLINE_FUNCTION - void operator()(const s1RowCntTag &, const int &thread_id) const { - Kokkos::atomic_inc(&__crs_row_cnt.data()[__row_ids(thread_id)]); - } - }; - - Csc2Csr(OrdinalType nrows, OrdinalType ncols, SizeType nnz, ValViewType vals, - RowIdViewType row_ids, ColMapViewType col_map, int league_size = 2) - : __nrows(nrows), - __ncols(ncols), - __nnz(nnz), - __vals(vals), - __row_ids(row_ids), - __col_map(col_map), - __league_size(league_size) { - __crs_vals = CrsValsViewType( - Kokkos::view_alloc(Kokkos::WithoutInitializing, "__crs_vals"), nnz); - __crs_row_map = CrsRowMapViewType( - Kokkos::view_alloc(Kokkos::WithoutInitializing, "__crs_row_map"), - nrows + 1); - __crs_row_map_scratch = - CrsRowMapViewType(Kokkos::view_alloc(Kokkos::WithoutInitializing, - "__crs_row_map_scratch"), - nrows + 1); - __crs_col_ids = CrsColIdViewType( - Kokkos::view_alloc(Kokkos::WithoutInitializing, "__crs_col_ids"), nnz); - - __crs_row_cnt = RowIdViewType("__crs_row_cnt", __nrows + 1); - - __Functor functor( - __nrows, __ncols, __nnz, __vals, __crs_vals, __row_ids, __crs_row_map, - __crs_row_map_scratch, __col_map, __crs_col_ids, __crs_row_cnt); - - KokkosKernels::Impl::get_suggested_vector_size( - __suggested_vec_size, __nrows, __nnz); - __suggested_team_size = - KokkosKernels::Impl::get_suggested_team_size( - functor, __suggested_vec_size); - - __run(functor); - } - - CrsType get_csrMat() { - return CrsType("csc2csr", __nrows, __ncols, __nnz, __crs_vals, - __crs_row_map, __crs_col_ids); - } -}; -} // namespace Impl -/// -/// \brief Converts a csc matrix to a CrsMatrix. -/// \tparam OrdinalType The view value type associated with the RowIdViewType -/// \tparam SizeType The type of nnz -/// \tparam ValViewType The values view type -/// \tparam RowIdViewType The row ids view type -/// \tparam ColMapViewType The column map view type -/// \param nrows The number of rows in the csc matrix -/// \param ncols The number of columns in the csc matrix -/// \param nnz The number of non-zeros in the csc matrix -/// \param vals The values view of the csc matrix -/// \param row_ids The row ids view of the csc matrix -/// \param col_map The column map view of the csc matrix -/// \return A KokkosSparse::CrsMatrix. -template -auto csc2csr(OrdinalType nrows, OrdinalType ncols, SizeType nnz, - ValViewType vals, RowIdViewType row_ids, ColMapViewType col_map, - int league_size) { - using Csc2csrType = Impl::Csc2Csr; - Csc2csrType csc2Csr(nrows, ncols, nnz, vals, row_ids, col_map, league_size); - return csc2Csr.get_csrMat(); -} -} // namespace KokkosSparse -#endif // _KOKKOSSPARSE_CSC2CSR_HPP diff --git a/sparse/unit_test/Test_Sparse.hpp b/sparse/unit_test/Test_Sparse.hpp index cde0ede5e3..a9562dff39 100644 --- a/sparse/unit_test/Test_Sparse.hpp +++ b/sparse/unit_test/Test_Sparse.hpp @@ -22,8 +22,9 @@ #include "Test_Sparse_trsv.hpp" #include "Test_Sparse_par_ilut.hpp" #include "Test_Sparse_Transpose.hpp" -#include "Test_Sparse_TestUtils_RandCscMat.hpp" -#include "Test_Sparse_csc2csr.hpp" +#include "Test_Sparse_TestUtils_RandCsMat.hpp" +#include "Test_Sparse_ccs2crs.hpp" +#include "Test_Sparse_crs2ccs.hpp" // TPL specific tests, these require // particular pairs of backend and TPL diff --git a/sparse/unit_test/Test_Sparse_TestUtils_RandCscMat.hpp b/sparse/unit_test/Test_Sparse_TestUtils_RandCsMat.hpp similarity index 62% rename from sparse/unit_test/Test_Sparse_TestUtils_RandCscMat.hpp rename to sparse/unit_test/Test_Sparse_TestUtils_RandCsMat.hpp index fc33f9f08b..07fe611cba 100644 --- a/sparse/unit_test/Test_Sparse_TestUtils_RandCscMat.hpp +++ b/sparse/unit_test/Test_Sparse_TestUtils_RandCsMat.hpp @@ -46,19 +46,25 @@ namespace Test { template -void doCscMat(size_t m, size_t n, ScalarType min_val, ScalarType max_val) { +void doCsMat(size_t m, size_t n, ScalarType min_val, ScalarType max_val) { auto expected_min = ScalarType(1.0); int64_t expected_nnz = 0; - RandCscMat cm(m, n, min_val, max_val); + RandCsMatrix cm(m, n, min_val, max_val); for (int64_t i = 0; i < cm.get_nnz(); ++i) ASSERT_GE(cm(i), expected_min) << cm.info; - for (int64_t j = 0; j < cm.get_n(); ++j) { - for (int64_t i = 0; i < cm.get_col_len(j); ++i) - ASSERT_FLOAT_EQ(cm(cm.get_col_start(j) + i), cm(expected_nnz + i)) - << cm.info; - expected_nnz += cm.get_col_len(j); + auto map_d = cm.get_map(); + auto map = Kokkos::create_mirror_view(map_d); + Kokkos::deep_copy(map, map_d); + + for (int64_t j = 0; j < cm.get_dim1(); ++j) { + int64_t row_len = j < static_cast(m) ? (map(j + 1) - map(j)) : 0; + for (int64_t i = 0; i < row_len; ++i) { + int64_t row_start = j < static_cast(m) ? map(j) : 0; + ASSERT_FLOAT_EQ(cm(row_start + i), cm(expected_nnz + i)) << cm.info; + } + expected_nnz += row_len; } ASSERT_EQ(cm.get_nnz(), expected_nnz) << cm.info; @@ -66,40 +72,40 @@ void doCscMat(size_t m, size_t n, ScalarType min_val, ScalarType max_val) { auto vals = cm.get_vals(); ASSERT_EQ(vals.extent(0), cm.get_nnz() + 1) << cm.info; - auto row_ids = cm.get_row_ids(); - ASSERT_EQ(row_ids.extent(0), cm.get_n() * cm.get_m() + 1) << cm.info; + auto row_ids = cm.get_ids(); + ASSERT_EQ(row_ids.extent(0), cm.get_dim1() * cm.get_dim2() + 1) << cm.info; - auto col_map = cm.get_col_map(); - ASSERT_EQ(col_map.extent(0), cm.get_n() + 1); + auto col_map = cm.get_map(); + ASSERT_EQ(col_map.extent(0), cm.get_dim1() + 1); } template -void doAllCscMat(size_t m, size_t n) { +void doAllCsMat(size_t m, size_t n) { int min = 1, max = 10; - // Verify that CscMax is constructed properly. - doCscMat(m, n, min, max); - doCscMat(m, n, min, max); + // Verify that CsMax is constructed properly. + doCsMat(m, n, min, max); + doCsMat(m, n, min, max); - doCscMat(m, n, min, max); - doCscMat(m, n, min, max); + doCsMat(m, n, min, max); + doCsMat(m, n, min, max); - // Verify that CscMax can be instantiated with complex types. - RandCscMat, Kokkos::LayoutLeft, ExeSpaceType> cmcf( + // Verify that CsMat can be instantiated with complex types. + RandCsMatrix, Kokkos::LayoutLeft, ExeSpaceType> cmcf( m, n, min, max); - RandCscMat, Kokkos::LayoutRight, ExeSpaceType> cmcd( + RandCsMatrix, Kokkos::LayoutRight, ExeSpaceType> cmcd( m, n, min, max); } -// Test randomly generated csc matrices -TEST_F(TestCategory, sparse_randcscmat) { +// Test randomly generated Cs matrices +TEST_F(TestCategory, sparse_randcsmat) { // Square cases - for (int dim = 1; dim < 1024; dim *= 4) doAllCscMat(dim, dim); + for (int dim = 1; dim < 1024; dim *= 4) doAllCsMat(dim, dim); // Non-square cases for (int dim = 1; dim < 1024; dim *= 4) { - doAllCscMat(dim * 3, dim); - doAllCscMat(dim, dim * 3); + doAllCsMat(dim * 3, dim); + doAllCsMat(dim, dim * 3); } } } // namespace Test \ No newline at end of file diff --git a/sparse/unit_test/Test_Sparse_block_gauss_seidel.hpp b/sparse/unit_test/Test_Sparse_block_gauss_seidel.hpp index c250af361f..38c806ddf9 100644 --- a/sparse/unit_test/Test_Sparse_block_gauss_seidel.hpp +++ b/sparse/unit_test/Test_Sparse_block_gauss_seidel.hpp @@ -177,7 +177,6 @@ void test_block_gauss_seidel_rank1(lno_t numRows, size_type nnz, using crsMat_t = typename KokkosSparse::CrsMatrix; using MatrixConverter = KokkosSparse::Impl::MatrixConverter; - typedef typename device::execution_space exec_space; typedef typename crsMat_t::StaticCrsGraphType graph_t; typedef typename crsMat_t::values_type::non_const_type scalar_view_t; diff --git a/sparse/unit_test/Test_Sparse_ccs2crs.hpp b/sparse/unit_test/Test_Sparse_ccs2crs.hpp new file mode 100644 index 0000000000..6d9b45eb99 --- /dev/null +++ b/sparse/unit_test/Test_Sparse_ccs2crs.hpp @@ -0,0 +1,195 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include "KokkosSparse_ccs2crs.hpp" +#include "KokkosSparse_crs2ccs.hpp" +#include "KokkosKernels_TestUtils.hpp" + +namespace Test { +template +void check_crs_matrix(CrsType crsMat, CcsType ccsMat) { + auto ccs_row_ids_d = ccsMat.get_ids(); + auto ccs_col_map_d = ccsMat.get_map(); + auto ccs_vals_d = ccsMat.get_vals(); + + using ViewTypeRowIds = decltype(ccs_row_ids_d); + using ViewTypeColMap = decltype(ccs_col_map_d); + using ViewTypeVals = decltype(ccs_vals_d); + + // Copy to host + typename ViewTypeRowIds::HostMirror ccs_row_ids = + Kokkos::create_mirror_view(ccs_row_ids_d); + Kokkos::deep_copy(ccs_row_ids, ccs_row_ids_d); + typename ViewTypeColMap::HostMirror ccs_col_map = + Kokkos::create_mirror_view(ccs_col_map_d); + Kokkos::deep_copy(ccs_col_map, ccs_col_map_d); + typename ViewTypeVals::HostMirror ccs_vals = + Kokkos::create_mirror_view(ccs_vals_d); + Kokkos::deep_copy(ccs_vals, ccs_vals_d); + + auto crs_col_ids_d = crsMat.graph.entries; + auto crs_row_map_d = crsMat.graph.row_map; + auto crs_vals_d = crsMat.values; + + using ViewTypeCrsColIds = decltype(crs_col_ids_d); + using ViewTypeCrsRowMap = decltype(crs_row_map_d); + using ViewTypeCrsVals = decltype(crs_vals_d); + + // Copy to host + typename ViewTypeCrsColIds::HostMirror crs_col_ids = + Kokkos::create_mirror_view(crs_col_ids_d); + Kokkos::deep_copy(crs_col_ids, crs_col_ids_d); + typename ViewTypeCrsRowMap::HostMirror crs_row_map = + Kokkos::create_mirror_view(crs_row_map_d); + Kokkos::deep_copy(crs_row_map, crs_row_map_d); + typename ViewTypeCrsVals::HostMirror crs_vals = + Kokkos::create_mirror_view(crs_vals_d); + Kokkos::deep_copy(crs_vals, crs_vals_d); + + Kokkos::fence(); + + for (int j = 0; j < ccsMat.get_dim1(); ++j) { + auto col_start = ccs_col_map(j); + auto col_len = ccs_col_map(j + 1) - col_start; + + for (int k = 0; k < col_len; ++k) { + auto i = col_start + k; + + auto row_start = crs_row_map(ccs_row_ids(i)); + auto row_len = crs_row_map(ccs_row_ids(i) + 1) - row_start; + auto row_end = row_start + row_len; + + if (row_len == 0) continue; + + // Linear search for corresponding element in crs matrix + int l = row_start; + while (l < row_end && crs_col_ids(l) != j) { + ++l; + } + + if (l == row_end) + FAIL() << "crs element at (i: " << ccs_row_ids(i) << ", j: " << j + << ") not found!" << std::endl; + + ASSERT_EQ(ccs_vals(i), crs_vals(l)) + << "(i: " << ccs_row_ids(i) << ", j: " << j << ")" << std::endl; + } + } +} +template +void doCcs2Crs(size_t m, size_t n, ScalarType min_val, ScalarType max_val, + bool fully_sparse = false) { + RandCsMatrix ccsMat( + n, m, min_val, max_val, fully_sparse); + + auto crsMat = KokkosSparse::ccs2crs(ccsMat.get_dim2(), ccsMat.get_dim1(), + ccsMat.get_nnz(), ccsMat.get_vals(), + ccsMat.get_map(), ccsMat.get_ids()); + + check_crs_matrix(crsMat, ccsMat); +} + +template +void doAllScalarsCcs2Crs(size_t m, size_t n, int min, int max) { + doCcs2Crs(m, n, min, max); + doCcs2Crs(m, n, min, max); + doCcs2Crs, LayoutType, ExeSpaceType>(m, n, min, max); + doCcs2Crs, LayoutType, ExeSpaceType>(m, n, min, max); +} + +template +void doAllLayoutsCcs2Crs(size_t m, size_t n, int min, int max) { + doAllScalarsCcs2Crs(m, n, min, max); + doAllScalarsCcs2Crs(m, n, min, max); +} + +template +void doAllCcs2crs(size_t m, size_t n) { + int min = 1, max = 10; + doAllLayoutsCcs2Crs(m, n, min, max); +} + +TEST_F(TestCategory, sparse_ccs2crs) { + uint64_t ticks = + std::chrono::high_resolution_clock::now().time_since_epoch().count() % + UINT32_MAX; + std::srand(ticks); + + // Empty cases + doCcs2Crs(1, 0, 1, 10); + doCcs2Crs(0, 1, 1, 10); + + doCcs2Crs(1, 0, 1, 10); + doCcs2Crs(0, 1, 1, 10); + + doCcs2Crs(0, 0, 1, 10); + doCcs2Crs(0, 0, 1, 10); + + // Square cases + for (size_t i = 4; i < 1024; i *= 4) { + size_t dim = (std::rand() % 511) + 1; + doAllCcs2crs(dim, dim); + } + + // Non-square cases + for (size_t i = 1; i < 1024; i *= 4) { + size_t m = (std::rand() % 511) + 1; + size_t n = (std::rand() % 511) + 1; + while (n == m) n = (std::rand() % 511) + 1; + doAllCcs2crs(m, n); + } + + // Fully sparse cases + doCcs2Crs(5, 5, 1, 10, true); + doCcs2Crs(50, 10, 10, 100, true); + + // Test the convenience wrapper that accepts a ccs matrix + RandCsMatrix csMat(2, 2, 10, 10, + false); + auto ccsMatrix = crs2ccs(csMat.get_dim1(), csMat.get_dim2(), csMat.get_nnz(), + csMat.get_vals(), csMat.get_map(), csMat.get_ids()); + auto crsMatrix = ccs2crs(ccsMatrix); + check_crs_matrix(crsMatrix, csMat); +} +} // namespace Test \ No newline at end of file diff --git a/sparse/unit_test/Test_Sparse_crs2ccs.hpp b/sparse/unit_test/Test_Sparse_crs2ccs.hpp new file mode 100644 index 0000000000..b915573c81 --- /dev/null +++ b/sparse/unit_test/Test_Sparse_crs2ccs.hpp @@ -0,0 +1,194 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include "KokkosSparse_crs2ccs.hpp" +#include "KokkosSparse_ccs2crs.hpp" +#include "KokkosKernels_TestUtils.hpp" + +namespace Test { +template +void check_ccs_matrix(CcsType ccsMat, CrsType crsMat) { + auto crs_col_ids_d = crsMat.get_ids(); + auto crs_row_map_d = crsMat.get_map(); + auto crs_vals_d = crsMat.get_vals(); + + using ViewTypeRowIds = decltype(crs_col_ids_d); + using ViewTypeColMap = decltype(crs_row_map_d); + using ViewTypeVals = decltype(crs_vals_d); + + // Copy to host + typename ViewTypeRowIds::HostMirror crs_col_ids = + Kokkos::create_mirror_view(crs_col_ids_d); + Kokkos::deep_copy(crs_col_ids, crs_col_ids_d); + typename ViewTypeColMap::HostMirror crs_row_map = + Kokkos::create_mirror_view(crs_row_map_d); + Kokkos::deep_copy(crs_row_map, crs_row_map_d); + typename ViewTypeVals::HostMirror crs_vals = + Kokkos::create_mirror_view(crs_vals_d); + Kokkos::deep_copy(crs_vals, crs_vals_d); + + auto ccs_row_ids_d = ccsMat.graph.entries; + auto ccs_col_map_d = ccsMat.graph.col_map; + auto ccs_vals_d = ccsMat.values; + + using ViewTypeCrsColIds = decltype(ccs_row_ids_d); + using ViewTypeCrsRowMap = decltype(ccs_col_map_d); + using ViewTypeCrsVals = decltype(ccs_vals_d); + + // Copy to host + typename ViewTypeCrsColIds::HostMirror ccs_row_ids = + Kokkos::create_mirror_view(ccs_row_ids_d); + Kokkos::deep_copy(ccs_row_ids, ccs_row_ids_d); + typename ViewTypeCrsRowMap::HostMirror ccs_col_map = + Kokkos::create_mirror_view(ccs_col_map_d); + Kokkos::deep_copy(ccs_col_map, ccs_col_map_d); + typename ViewTypeCrsVals::HostMirror ccs_vals = + Kokkos::create_mirror_view(ccs_vals_d); + Kokkos::deep_copy(ccs_vals, ccs_vals_d); + + for (int j = 0; j < crsMat.get_dim2(); ++j) { + auto col_start = ccs_col_map(j); + auto col_len = ccs_col_map(j + 1) - col_start; + + for (int k = 0; k < col_len; ++k) { + auto i = col_start + k; + + auto row_start = crs_row_map(ccs_row_ids(i)); + auto row_len = crs_row_map(ccs_row_ids(i) + 1) - row_start; + auto row_end = row_start + row_len; + + if (row_len == 0) continue; + + // Linear search for corresponding element in crs matrix + int l = row_start; + while (l < row_end && crs_col_ids(l) != j) { + ++l; + } + + if (l == row_end) + FAIL() << "ccs element at (i: " << ccs_row_ids(i) << ", j: " << j + << ") not found!" << std::endl; + + ASSERT_EQ(ccs_vals(i), crs_vals(l)) + << "(i: " << ccs_row_ids(i) << ", j: " << j << ")" << std::endl; + } + } +} + +template +void doCrs2Ccs(size_t m, size_t n, ScalarType min_val, ScalarType max_val, + bool fully_sparse = false) { + RandCsMatrix crsMat( + m, n, min_val, max_val, fully_sparse); + + auto ccsMat = KokkosSparse::crs2ccs(crsMat.get_dim1(), crsMat.get_dim2(), + crsMat.get_nnz(), crsMat.get_vals(), + crsMat.get_map(), crsMat.get_ids()); + + check_ccs_matrix(ccsMat, crsMat); +} + +template +void doAllScalarsCrs2Ccs(size_t m, size_t n, int min, int max) { + doCrs2Ccs(m, n, min, max); + doCrs2Ccs(m, n, min, max); + doCrs2Ccs, LayoutType, ExeSpaceType>(m, n, min, max); + doCrs2Ccs, LayoutType, ExeSpaceType>(m, n, min, max); +} + +template +void doAllLayoutsCrs2Ccs(size_t m, size_t n, int min, int max) { + doAllScalarsCrs2Ccs(m, n, min, max); + doAllScalarsCrs2Ccs(m, n, min, max); +} + +template +void doAllCrs2Ccs(size_t m, size_t n) { + int min = 1, max = 10; + doAllLayoutsCrs2Ccs(m, n, min, max); +} + +TEST_F(TestCategory, sparse_crs2ccs) { + uint64_t ticks = + std::chrono::high_resolution_clock::now().time_since_epoch().count() % + UINT32_MAX; + std::srand(ticks); + + // Empty cases + doCrs2Ccs(1, 0, 1, 10); + doCrs2Ccs(0, 1, 1, 10); + + doCrs2Ccs(1, 0, 1, 10); + doCrs2Ccs(0, 1, 1, 10); + + doCrs2Ccs(0, 0, 1, 10); + doCrs2Ccs(0, 0, 1, 10); + + // Square cases + for (size_t i = 4; i < 1024; i *= 4) { + size_t dim = (std::rand() % 511) + 1; + doAllCrs2Ccs(dim, dim); + } + + // Non-square cases + for (size_t i = 1; i < 1024; i *= 4) { + size_t m = (std::rand() % 511) + 1; + size_t n = (std::rand() % 511) + 1; + while (n == m) n = (std::rand() % 511) + 1; + doAllCrs2Ccs(m, n); + } + + // Fully sparse cases + doCrs2Ccs(5, 5, 1, 10, true); + doCrs2Ccs(50, 10, 10, 100, true); + + // Test the convenience wrapper that accepts a crs matrix + RandCsMatrix csMat(2, 2, 10, 10, + false); + auto crsMatrix = ccs2crs(csMat.get_dim2(), csMat.get_dim1(), csMat.get_nnz(), + csMat.get_vals(), csMat.get_map(), csMat.get_ids()); + auto ccsMatrix = crs2ccs(crsMatrix); + check_ccs_matrix(ccsMatrix, csMat); +} +} // namespace Test \ No newline at end of file diff --git a/sparse/unit_test/Test_Sparse_csc2csr.hpp b/sparse/unit_test/Test_Sparse_csc2csr.hpp index e7d2ad868e..fc8e3186f7 100644 --- a/sparse/unit_test/Test_Sparse_csc2csr.hpp +++ b/sparse/unit_test/Test_Sparse_csc2csr.hpp @@ -49,16 +49,15 @@ namespace Test { template void doCsc2Csr(size_t m, size_t n, ScalarType min_val, ScalarType max_val, bool fully_sparse = false) { - RandCscMat cscMat( - m, n, min_val, max_val, fully_sparse); - constexpr int league_size = 32; + RandCsMatrix cscMat( + n, m, min_val, max_val, fully_sparse); - auto csrMat = KokkosSparse::csc2csr( - cscMat.get_m(), cscMat.get_n(), cscMat.get_nnz(), cscMat.get_vals(), - cscMat.get_row_ids(), cscMat.get_col_map(), league_size); + auto csrMat = KokkosSparse::csc2csr(cscMat.get_dim2(), cscMat.get_dim1(), + cscMat.get_nnz(), cscMat.get_vals(), + cscMat.get_map(), cscMat.get_ids()); - auto csc_row_ids_d = cscMat.get_row_ids(); - auto csc_col_map_d = cscMat.get_col_map(); + auto csc_row_ids_d = cscMat.get_ids(); + auto csc_col_map_d = cscMat.get_map(); auto csc_vals_d = cscMat.get_vals(); using ViewTypeRowIds = decltype(csc_row_ids_d); @@ -97,7 +96,7 @@ void doCsc2Csr(size_t m, size_t n, ScalarType min_val, ScalarType max_val, Kokkos::fence(); - for (int j = 0; j < cscMat.get_n(); ++j) { + for (int j = 0; j < cscMat.get_dim1(); ++j) { auto col_start = csc_col_map(j); auto col_len = csc_col_map(j + 1) - col_start; @@ -147,17 +146,36 @@ void doAllCsc2csr(size_t m, size_t n) { } TEST_F(TestCategory, sparse_csc2csr) { + uint64_t ticks = + std::chrono::high_resolution_clock::now().time_since_epoch().count() % + UINT32_MAX; + std::srand(ticks); + + // Empty cases + doCsc2Csr(1, 0, 1, 10); + doCsc2Csr(0, 1, 1, 10); + + doCsc2Csr(1, 0, 1, 10); + doCsc2Csr(0, 1, 1, 10); + + doCsc2Csr(0, 0, 1, 10); + doCsc2Csr(0, 0, 1, 10); + // Square cases - for (size_t dim = 4; dim < 1024; dim *= 4) + for (size_t i = 4; i < 1024; i *= 4) { + size_t dim = (std::rand() % 511) + 1; doAllCsc2csr(dim, dim); + } // Non-square cases - for (size_t dim = 1; dim < 1024; dim *= 4) { - doAllCsc2csr(dim * 3, dim); - doAllCsc2csr(dim, dim * 3); + for (size_t i = 1; i < 1024; i *= 4) { + size_t m = (std::rand() % 511) + 1; + size_t n = (std::rand() % 511) + 1; + while (n == m) n = (std::rand() % 511) + 1; + doAllCsc2csr(m, n); } - // Fully sparse + // Fully sparse cases doCsc2Csr(5, 5, 1, 10, true); doCsc2Csr(50, 10, 10, 100, true); } diff --git a/test_common/KokkosKernels_MatrixConverter.cpp b/test_common/KokkosKernels_MatrixConverter.cpp index a56c8788aa..1b9c05e457 100644 --- a/test_common/KokkosKernels_MatrixConverter.cpp +++ b/test_common/KokkosKernels_MatrixConverter.cpp @@ -251,7 +251,7 @@ int main(int argc, char *argv[]) { cols_view_t new_entries("new_rowmap", a_crsmat.nnz()); values_view_t new_values("new_rowmap", a_crsmat.nnz()); - KokkosKernels::Impl::transpose_matrix< + KokkosSparse::Impl::transpose_matrix< c_row_map_view_t, c_cols_view_t, c_values_view_t, row_map_view_t, cols_view_t, values_view_t, row_map_view_t, MyExecSpace>( a_crsmat.numRows(), a_crsmat.numCols(), a_crsmat.graph.row_map, diff --git a/test_common/KokkosKernels_TestUtils.hpp b/test_common/KokkosKernels_TestUtils.hpp index d534695afd..350e3a21bf 100644 --- a/test_common/KokkosKernels_TestUtils.hpp +++ b/test_common/KokkosKernels_TestUtils.hpp @@ -548,42 +548,47 @@ int string_compare_no_case(const char* str1, const char* str2) { return strcmp(str1_s.c_str(), str2_s.c_str()); } -/// /brief Csc matrix class for testing purposes. +/// /brief Cs (Compressed Sparse) matrix class for testing purposes. +/// This class is for testing purposes only and will generate a random +/// Crs / Ccs matrix when instantiated. The class is intentionally written +/// without the use of "row" and "column" member names. +/// dim1 refers to either rows for Crs matrix or columns for a Ccs matrix. +/// dim2 refers to either columns for a Crs matrix or rows for a Ccs matrix. /// \tparam ScalarType /// \tparam LayoutType /// \tparam ExeSpaceType template -class RandCscMat { +class RandCsMatrix { private: - using ValViewTypeD = Kokkos::View; - using RowIdViewTypeD = Kokkos::View; - using ColMapViewTypeD = Kokkos::View; - int64_t __nrows; - int64_t __ncols; + using ValViewTypeD = Kokkos::View; + using IdViewTypeD = Kokkos::View; + using MapViewTypeD = Kokkos::View; + int64_t __dim2; + int64_t __dim1; int64_t __nnz = 0; - ColMapViewTypeD __col_map_d; - RowIdViewTypeD __row_ids_d; + MapViewTypeD __map_d; + IdViewTypeD __ids_d; ValViewTypeD __vals_d; - using ColMapViewTypeH = typename ColMapViewTypeD::HostMirror; - using RowIdViewTypeH = typename RowIdViewTypeD::HostMirror; - using ValViewTypeH = typename ValViewTypeD::HostMirror; - ColMapViewTypeH __col_map; - RowIdViewTypeH __row_ids; + using MapViewTypeH = typename MapViewTypeD::HostMirror; + using IdViewTypeH = typename IdViewTypeD::HostMirror; + using ValViewTypeH = typename ValViewTypeD::HostMirror; + MapViewTypeH __map; + IdViewTypeH __ids; ValViewTypeH __vals; bool __fully_sparse; - /// Generates a random column map where: - /// 1. __col_map(i) is in [__row_ids.data(), &row_ids.data()[nnz - 1] - /// 2. __col_map(i) > col_map(i - 1) for i > 1 - /// 3. __col_map(i) == col_map(j) iff __col_map(i) == col_map(j) == nullptr - /// 4. __col_map(i) - col_map(i - 1) is in [0, m] - void __populate_random_csc_mat(uint64_t ticks) { + /// Generates a random map where (using Ccs terminology): + /// 1. __map(i) is in [__ids.data(), &row_ids.data()[nnz - 1] + /// 2. __map(i) > col_map(i - 1) for i > 1 + /// 3. __map(i) == col_map(j) iff __map(i) == col_map(j) == nullptr + /// 4. __map(i) - col_map(i - 1) is in [0, m] + void __populate_random_cs_mat(uint64_t ticks) { std::srand(ticks); - for (int64_t col_idx = 0; col_idx < __ncols; col_idx++) { - int64_t r = std::rand() % (__nrows + 1); - if (r == 0 || __fully_sparse) { // 100% sparse column - __col_map(col_idx) = __nnz; - } else { // sparse column with r elements + for (int64_t col_idx = 0; col_idx < __dim1; col_idx++) { + int64_t r = std::rand() % (__dim2 + 1); + if (r == 0 || __fully_sparse) { // 100% sparse vector + __map(col_idx) = __nnz; + } else { // sparse vector with r elements // Populate r row ids std::vector v(r); @@ -591,26 +596,26 @@ class RandCscMat { std::shuffle(v.begin(), v.end(), std::mt19937(std::random_device()())); - for (int64_t i = 0; i < r; i++) __row_ids(i + __nnz) = v.at(i); + for (int64_t i = 0; i < r; i++) __ids(i + __nnz) = v.at(i); // Point to new column and accumulate number of non zeros - __col_map(col_idx) = __nnz; + __map(col_idx) = __nnz; __nnz += r; } } - // last entry in map points to end of row id list - __col_map(__ncols) = __nnz; + // last entry in map points to end of id list + __map(__dim1) = __nnz; // Copy to device - Kokkos::deep_copy(__col_map_d, __col_map); - Kokkos::deep_copy(__row_ids_d, __row_ids); + Kokkos::deep_copy(__map_d, __map); + Kokkos::deep_copy(__ids_d, __ids); ExeSpaceType().fence(); } template T __getter_copy_helper(T src) { - T dst(std::string("RandCscMat.") + typeid(T).name() + " copy", + T dst(std::string("RandCsMatrix.") + typeid(T).name() + " copy", src.extent(0)); Kokkos::deep_copy(dst, src); ExeSpaceType().fence(); @@ -619,36 +624,36 @@ class RandCscMat { public: std::string info; - /// Constructs a random csc matrix. - /// \param m The number of rows. - /// \param n The number of columns. + /// Constructs a random cs matrix. + /// \param dim1 The first dimension: rows for Crs or columns for Ccs + /// \param dim2 The second dimension: columns for Crs or rows for Ccs /// \param min_val The minimum scalar value in the matrix. /// \param max_val The maximum scalar value in the matrix. - RandCscMat(int64_t m, int64_t n, ScalarType min_val, ScalarType max_val, - bool fully_sparse = false) { - __ncols = n; - __nrows = m; + RandCsMatrix(int64_t dim1, int64_t dim2, ScalarType min_val, + ScalarType max_val, bool fully_sparse = false) { + __dim1 = dim1; + __dim2 = dim2; __fully_sparse = fully_sparse; - __col_map_d = ColMapViewTypeD("RandCscMat.ColMapViewType", __ncols + 1); - __col_map = Kokkos::create_mirror_view(__col_map_d); - __row_ids_d = RowIdViewTypeD("RandCscMat.RowIdViewType", - m * n + 1); // over-allocated - __row_ids = Kokkos::create_mirror_view(__row_ids_d); + __map_d = MapViewTypeD("RandCsMatrix.ColMapViewType", __dim1 + 1); + __map = Kokkos::create_mirror_view(__map_d); + __ids_d = IdViewTypeD("RandCsMatrix.RowIdViewType", + dim2 * dim1 + 1); // over-allocated + __ids = Kokkos::create_mirror_view(__ids_d); uint64_t ticks = std::chrono::high_resolution_clock::now().time_since_epoch().count() % UINT32_MAX; info = std::string( - std::string("RandCscMat<") + typeid(ScalarType).name() + ", " + + std::string("RandCsMatrix<") + typeid(ScalarType).name() + ", " + typeid(LayoutType).name() + ", " + typeid(ExeSpaceType).name() + ">(" + - std::to_string(m) + ", " + std::to_string(n) + + std::to_string(dim2) + ", " + std::to_string(dim1) + "...): rand seed: " + std::to_string(ticks) + ", fully sparse: " + (__fully_sparse ? "true" : "false") + "\n"); Kokkos::Random_XorShift64_Pool random(ticks); - __populate_random_csc_mat(ticks); + __populate_random_cs_mat(ticks); - __vals_d = ValViewTypeD("RandCscMat.ValViewType", __nnz + 1); + __vals_d = ValViewTypeD("RandCsMatrix.ValViewType", __nnz + 1); __vals = Kokkos::create_mirror_view(__vals_d); Kokkos::fill_random(__vals, random, min_val, max_val); // random scalars Kokkos::fence(); @@ -661,17 +666,15 @@ class RandCscMat { // O(c), where c is a constant. ScalarType operator()(int64_t idx) { return __vals(idx); } - int64_t get_nnz() { return __nnz; } - int64_t get_m() { return __nrows; } - int64_t get_n() { return __ncols; } - int64_t get_col_len(int64_t j) { - return j < __ncols ? (__col_map(j + 1) - __col_map(j)) : 0; - } - int64_t get_col_start(int64_t j) { return j < __ncols ? __col_map(j) : 0; } + // dimension2: This is either columns for a Crs matrix or rows for a Ccs + // matrix. + int64_t get_dim2() { return __dim2; } + // dimension1: This is either rows for Crs matrix or columns for a Ccs matrix. + int64_t get_dim1() { return __dim1; } ValViewTypeD get_vals() { return __getter_copy_helper(__vals_d); } - RowIdViewTypeD get_row_ids() { return __getter_copy_helper(__row_ids_d); } - ColMapViewTypeD get_col_map() { return __getter_copy_helper(__col_map_d); } + IdViewTypeD get_ids() { return __getter_copy_helper(__ids_d); } + MapViewTypeD get_map() { return __getter_copy_helper(__map_d); } }; /// \brief Randomly shuffle the entries in each row (col) of a Crs (Ccs) matrix. From 8bff4c15977ac411b1d513cea49f15aa87cb5156 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Mon, 14 Nov 2022 16:24:35 -0700 Subject: [PATCH 152/226] scripts/cm_test_all_sandia: - Switch from cmake 3.19 to cmake 3.23.1 due to missing system libraries sparse/unit_test: - Pass in matrix members to check_crs_matrix and check_ccs_matrix so that the transposed rows/cols are indexed correctly. --- scripts/cm_test_all_sandia | 18 +++++++-------- sparse/unit_test/Test_Sparse_ccs2crs.hpp | 28 ++++++++++++++++-------- sparse/unit_test/Test_Sparse_crs2ccs.hpp | 26 ++++++++++++++-------- 3 files changed, 45 insertions(+), 27 deletions(-) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index fb3a086620..a672b3f551 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -685,15 +685,15 @@ elif [ "$MACHINE" = "weaver" ]; then SKIP_HWLOC=True # used with rhel7W queue - BASE_MODULE_LIST="cmake/3.19.3,/" - CUDA_MODULE_LIST="cmake/3.19.3,/,ibm/xl/16.1.1,gcc/7.2.0" - CUDA10_MODULE_LIST="cmake/3.19.3,/,ibm/xl/16.1.1,gcc/7.4.0" - - GCC72_MODULE_TPL_LIST="cmake/3.19.3,/,openblas/0.2.20/gcc/7.2.0" - GCC74_MODULE_TPL_LIST="cmake/3.19.3,/,openblas/0.2.20/gcc/7.2.0,gcc/7.4.0" - GCC93_MODULE_TPL_LIST="cmake/3.19.3,/,openblas/0.3.20/gcc/9.3.0,gcc/9.3.0" - CUDA_MODULE_TPL_LIST="cmake/3.19.3,/,gcc/7.2.0,netlib/3.8.0/gcc/7.2.0" - CUDA10_MODULE_TPL_LIST="cmake/3.19.3,/,gcc/7.2.0,openblas/0.2.20/gcc/7.2.0" + BASE_MODULE_LIST="cmake/3.23.1,/" + CUDA_MODULE_LIST="cmake/3.23.1,/,ibm/xl/16.1.1,gcc/7.2.0" + CUDA10_MODULE_LIST="cmake/3.23.1,/,ibm/xl/16.1.1,gcc/7.4.0" + + GCC72_MODULE_TPL_LIST="cmake/3.23.1,/,openblas/0.2.20/gcc/7.2.0" + GCC74_MODULE_TPL_LIST="cmake/3.23.1,/,openblas/0.2.20/gcc/7.2.0,gcc/7.4.0" + GCC93_MODULE_TPL_LIST="cmake/3.23.1,/,openblas/0.3.20/gcc/9.3.0,gcc/9.3.0" + CUDA_MODULE_TPL_LIST="cmake/3.23.1,/,gcc/7.2.0,netlib/3.8.0/gcc/7.2.0" + CUDA10_MODULE_TPL_LIST="cmake/3.23.1,/,gcc/7.2.0,openblas/0.2.20/gcc/7.2.0" # Issues finding CUBLAS with cuda/10.1.243 module at configure # "Could NOT find TPLCUBLAS (missing: CUDA_CUBLAS_LIBRARIES)" diff --git a/sparse/unit_test/Test_Sparse_ccs2crs.hpp b/sparse/unit_test/Test_Sparse_ccs2crs.hpp index 6d9b45eb99..e094d3011e 100644 --- a/sparse/unit_test/Test_Sparse_ccs2crs.hpp +++ b/sparse/unit_test/Test_Sparse_ccs2crs.hpp @@ -47,12 +47,11 @@ #include "KokkosKernels_TestUtils.hpp" namespace Test { -template -void check_crs_matrix(CrsType crsMat, CcsType ccsMat) { - auto ccs_row_ids_d = ccsMat.get_ids(); - auto ccs_col_map_d = ccsMat.get_map(); - auto ccs_vals_d = ccsMat.get_vals(); - +template +void check_crs_matrix(CrsType crsMat, IdType ccs_row_ids_d, + MapType ccs_col_map_d, ValsType ccs_vals_d, + ColsType cols) { using ViewTypeRowIds = decltype(ccs_row_ids_d); using ViewTypeColMap = decltype(ccs_col_map_d); using ViewTypeVals = decltype(ccs_vals_d); @@ -89,7 +88,7 @@ void check_crs_matrix(CrsType crsMat, CcsType ccsMat) { Kokkos::fence(); - for (int j = 0; j < ccsMat.get_dim1(); ++j) { + for (int j = 0; j < cols; ++j) { auto col_start = ccs_col_map(j); auto col_len = ccs_col_map(j + 1) - col_start; @@ -127,7 +126,12 @@ void doCcs2Crs(size_t m, size_t n, ScalarType min_val, ScalarType max_val, ccsMat.get_nnz(), ccsMat.get_vals(), ccsMat.get_map(), ccsMat.get_ids()); - check_crs_matrix(crsMat, ccsMat); + auto ccs_row_ids_d = ccsMat.get_ids(); + auto ccs_col_map_d = ccsMat.get_map(); + auto ccs_vals_d = ccsMat.get_vals(); + auto cols = ccsMat.get_dim1(); + + check_crs_matrix(crsMat, ccs_row_ids_d, ccs_col_map_d, ccs_vals_d, cols); } template @@ -190,6 +194,12 @@ TEST_F(TestCategory, sparse_ccs2crs) { auto ccsMatrix = crs2ccs(csMat.get_dim1(), csMat.get_dim2(), csMat.get_nnz(), csMat.get_vals(), csMat.get_map(), csMat.get_ids()); auto crsMatrix = ccs2crs(ccsMatrix); - check_crs_matrix(crsMatrix, csMat); + + auto ccs_row_ids_d = ccsMatrix.graph.entries; + auto ccs_col_map_d = ccsMatrix.graph.col_map; + auto ccs_vals_d = ccsMatrix.values; + auto cols = ccsMatrix.numCols(); + + check_crs_matrix(crsMatrix, ccs_row_ids_d, ccs_col_map_d, ccs_vals_d, cols); } } // namespace Test \ No newline at end of file diff --git a/sparse/unit_test/Test_Sparse_crs2ccs.hpp b/sparse/unit_test/Test_Sparse_crs2ccs.hpp index b915573c81..0553d1101f 100644 --- a/sparse/unit_test/Test_Sparse_crs2ccs.hpp +++ b/sparse/unit_test/Test_Sparse_crs2ccs.hpp @@ -47,12 +47,11 @@ #include "KokkosKernels_TestUtils.hpp" namespace Test { -template -void check_ccs_matrix(CcsType ccsMat, CrsType crsMat) { - auto crs_col_ids_d = crsMat.get_ids(); - auto crs_row_map_d = crsMat.get_map(); - auto crs_vals_d = crsMat.get_vals(); - +template +void check_ccs_matrix(CcsType ccsMat, IdType crs_col_ids_d, + MapType crs_row_map_d, ValsType crs_vals_d, + ColsType cols) { using ViewTypeRowIds = decltype(crs_col_ids_d); using ViewTypeColMap = decltype(crs_row_map_d); using ViewTypeVals = decltype(crs_vals_d); @@ -87,7 +86,7 @@ void check_ccs_matrix(CcsType ccsMat, CrsType crsMat) { Kokkos::create_mirror_view(ccs_vals_d); Kokkos::deep_copy(ccs_vals, ccs_vals_d); - for (int j = 0; j < crsMat.get_dim2(); ++j) { + for (int j = 0; j < cols; ++j) { auto col_start = ccs_col_map(j); auto col_len = ccs_col_map(j + 1) - col_start; @@ -126,7 +125,11 @@ void doCrs2Ccs(size_t m, size_t n, ScalarType min_val, ScalarType max_val, crsMat.get_nnz(), crsMat.get_vals(), crsMat.get_map(), crsMat.get_ids()); - check_ccs_matrix(ccsMat, crsMat); + auto crs_col_ids_d = crsMat.get_ids(); + auto crs_row_map_d = crsMat.get_map(); + auto crs_vals_d = crsMat.get_vals(); + auto cols = crsMat.get_dim2(); + check_ccs_matrix(ccsMat, crs_col_ids_d, crs_row_map_d, crs_vals_d, cols); } template @@ -189,6 +192,11 @@ TEST_F(TestCategory, sparse_crs2ccs) { auto crsMatrix = ccs2crs(csMat.get_dim2(), csMat.get_dim1(), csMat.get_nnz(), csMat.get_vals(), csMat.get_map(), csMat.get_ids()); auto ccsMatrix = crs2ccs(crsMatrix); - check_ccs_matrix(ccsMatrix, csMat); + + auto crs_col_ids_d = crsMatrix.graph.entries; + auto crs_row_map_d = crsMatrix.graph.row_map; + auto crs_vals_d = crsMatrix.values; + auto cols = crsMatrix.numCols(); + check_ccs_matrix(ccsMatrix, crs_col_ids_d, crs_row_map_d, crs_vals_d, cols); } } // namespace Test \ No newline at end of file From b1c2b1b18a39f8d79d44906c3069db60cf1c0124 Mon Sep 17 00:00:00 2001 From: Vinh Dang Date: Tue, 15 Nov 2022 13:23:32 -0700 Subject: [PATCH 153/226] Fix seg fault by moving deleting dense vec descriptors to symbolic and solve --- sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp | 8 ++++++++ sparse/src/KokkosSparse_sptrsv_handle.hpp | 4 ---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp index 19af87b91e..c2a4fcd43a 100644 --- a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp @@ -167,6 +167,10 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, h->handle, h->transpose, &alpha, h->matDescr, h->vecBDescr_dummy, h->vecXDescr_dummy, cudaValueType, CUSPARSE_SPSV_ALG_DEFAULT, h->spsvDescr, h->pBuffer)); + + //Destroy dummy dense vector descriptors + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(h->vecBDescr_dummy)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(h->vecXDescr_dummy)); } #else // CUDA_VERSION < 11030 typedef typename KernelHandle::nnz_lno_t idx_type; @@ -361,6 +365,10 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpSV_solve( h->handle, h->transpose, &alpha, h->matDescr, h->vecBDescr, h->vecXDescr, cudaValueType, CUSPARSE_SPSV_ALG_DEFAULT, h->spsvDescr)); + + //Destroy dense vector descriptors + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(h->vecBDescr)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(h->vecXDescr)); } #else // CUDA_VERSION < 11030 typedef typename KernelHandle::nnz_lno_t idx_type; diff --git a/sparse/src/KokkosSparse_sptrsv_handle.hpp b/sparse/src/KokkosSparse_sptrsv_handle.hpp index 7933d11a8c..a5aacca361 100644 --- a/sparse/src/KokkosSparse_sptrsv_handle.hpp +++ b/sparse/src/KokkosSparse_sptrsv_handle.hpp @@ -187,10 +187,6 @@ class SPTRSVHandle { pBuffer = nullptr; } KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroySpMat(matDescr)); - KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(vecBDescr)); - KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(vecBDescr_dummy)); - KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(vecXDescr)); - KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(vecXDescr_dummy)); KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpSV_destroyDescr(spsvDescr)); KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroy(handle)); } From 47f9e39d2fe66db1eb4d88bc9b0e507860cf4c47 Mon Sep 17 00:00:00 2001 From: Vinh Dang Date: Tue, 15 Nov 2022 13:48:45 -0700 Subject: [PATCH 154/226] Fix clang format --- sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp index c2a4fcd43a..a45d98eea9 100644 --- a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp @@ -168,7 +168,7 @@ void sptrsvcuSPARSE_symbolic(KernelHandle* sptrsv_handle, h->vecXDescr_dummy, cudaValueType, CUSPARSE_SPSV_ALG_DEFAULT, h->spsvDescr, h->pBuffer)); - //Destroy dummy dense vector descriptors + // Destroy dummy dense vector descriptors KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(h->vecBDescr_dummy)); KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(h->vecXDescr_dummy)); } @@ -366,7 +366,7 @@ void sptrsvcuSPARSE_solve(KernelHandle* sptrsv_handle, h->handle, h->transpose, &alpha, h->matDescr, h->vecBDescr, h->vecXDescr, cudaValueType, CUSPARSE_SPSV_ALG_DEFAULT, h->spsvDescr)); - //Destroy dense vector descriptors + // Destroy dense vector descriptors KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(h->vecBDescr)); KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyDnVec(h->vecXDescr)); } From 95c88e9e18e90d7e4d9940510ea6e58f2846d844 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Mon, 14 Nov 2022 17:07:21 -0700 Subject: [PATCH 155/226] batched/dense: Reduce register pressure on MI100 --- batched/dense/src/KokkosBatched_Gemm_Decl.hpp | 59 +++++++++++++++---- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/batched/dense/src/KokkosBatched_Gemm_Decl.hpp b/batched/dense/src/KokkosBatched_Gemm_Decl.hpp index 9e830c95d4..a9bc848789 100644 --- a/batched/dense/src/KokkosBatched_Gemm_Decl.hpp +++ b/batched/dense/src/KokkosBatched_Gemm_Decl.hpp @@ -259,6 +259,42 @@ template class BatchedDblBufGemm; +//////////////////////////////// tile_m ////////////////////////////////// +template +constexpr KOKKOS_INLINE_FUNCTION int kk_gemm_dlb_buf_tile_m() { + return 32; +} +//////////////////////////////// tile_n ////////////////////////////////// +template +constexpr KOKKOS_INLINE_FUNCTION int kk_gemm_dlb_buf_tile_n() { + return 32; +} +//////////////////////////////// tile_k ////////////////////////////////// +template +constexpr KOKKOS_INLINE_FUNCTION int kk_gemm_dlb_buf_tile_k() { + return 8; +} + +// On MI100, batched_scalar_batched_gemm_nt_nt_dcomplex_dcomplex_right fails +// without this. See https://github.com/kokkos/kokkos-kernels/issues/1547. +// This reduces the register allocations (REG_M and REG_N) in the double +// buffering algorithm by a factor of 2. +#if defined(KOKKOS_ENABLE_HIP) && defined(KOKKOS_ARCH_VEGA908) +template <> +constexpr KOKKOS_INLINE_FUNCTION int +kk_gemm_dlb_buf_tile_k() { + return 16; +} +#endif +////////////////////////// alpha_in_fma_thresh //////////////////////////// +constexpr KOKKOS_INLINE_FUNCTION size_t kk_gemm_dbl_buf_alpha_in_fma_thresh() { +#ifdef __CUDACC_RDC__ + return 24; +#else + return 64; +#endif // __CUDAACC_RDC__ +} + // clang-format off /// \brief Blocking solve of general matrix multiply on a batch of uniform matrices. /// @@ -458,19 +494,19 @@ int BatchedGemm(BatchedGemmHandleType *const handle, const ScalarType alpha, // Begin checking conditions for optimal BatchedGemm invocation. using view_scalar_type = typename CViewType::value_type; using layout_type = typename CViewType::array_layout; + using exec_space = typename CViewType::execution_space; constexpr bool is_vector = KokkosBatched::is_vector::value; - constexpr bool on_gpu = KokkosKernels::Impl::kk_is_gpu_exec_space< - typename CViewType::execution_space>(); + constexpr bool on_gpu = + KokkosKernels::Impl::kk_is_gpu_exec_space(); constexpr bool on_x86_64 = KokkosKernels::Impl::kk_is_x86_64_mem_space< - typename CViewType::execution_space::memory_space>(); + typename exec_space::memory_space>(); constexpr bool on_a64fx = KokkosKernels::Impl::kk_is_a64fx_mem_space< - typename CViewType::execution_space::memory_space>(); + typename exec_space::memory_space>(); if (handle->enableDebug) { std::cout << "view_scalar_type:" << typeid(view_scalar_type).name() << std::endl - << "execution_space:" - << typeid(typename CViewType::execution_space).name() << std::endl + << "execution_space:" << typeid(exec_space).name() << std::endl << std::endl << "is_vector:" << is_vector << std::endl << "on_gpu:" << on_gpu << std::endl @@ -521,12 +557,11 @@ int BatchedGemm(BatchedGemmHandleType *const handle, const ScalarType alpha, ? (c_m >= 16) : (c_m >= 24 && c_m <= 32) || c_m >= 40)) { handle->teamSz = handle->vecLen = 8; - constexpr int tile_m = 32, tile_n = 32, tile_k = 8; -#ifdef __CUDACC_RDC__ - constexpr size_t alpha_in_fma_thresh = 24; -#else - constexpr size_t alpha_in_fma_thresh = 64; -#endif // __CUDAACC_RDC__ + constexpr int tile_m = Impl::kk_gemm_dlb_buf_tile_m(); + constexpr int tile_n = Impl::kk_gemm_dlb_buf_tile_n(); + constexpr int tile_k = Impl::kk_gemm_dlb_buf_tile_k(); + constexpr size_t alpha_in_fma_thresh = + Impl::kk_gemm_dbl_buf_alpha_in_fma_thresh(); if (c_m % 32 == 0) { // No bounds checking if (c_m >= alpha_in_fma_thresh) { // apply alpha in fma From d85c55730ffdddf3d8b7c5f0791789c8c652d3b2 Mon Sep 17 00:00:00 2001 From: Brian Kelley Date: Tue, 15 Nov 2022 17:06:08 -0700 Subject: [PATCH 156/226] Fix Trilinos issue #11033 (using SpGEMM with nonstandard scalar type, with MKL enabled). Mirror of Trilinos PR #11278. --- sparse/src/KokkosSparse_Utils_mkl.hpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/sparse/src/KokkosSparse_Utils_mkl.hpp b/sparse/src/KokkosSparse_Utils_mkl.hpp index b9eb3a9bd2..3b1e28fd84 100644 --- a/sparse/src/KokkosSparse_Utils_mkl.hpp +++ b/sparse/src/KokkosSparse_Utils_mkl.hpp @@ -123,16 +123,16 @@ template class MKLSparseMatrix { sparse_matrix_t mtx; - static_assert(mkl_is_supported_value_type::value, - "Scalar type used in MKLSparseMatrix is NOT " - "supported by MKL"); - public: inline MKLSparseMatrix(sparse_matrix_t mtx_) : mtx(mtx_) {} // Constructs MKL sparse matrix from KK sparse views (m rows x n cols) inline MKLSparseMatrix(const MKL_INT num_rows, const MKL_INT num_cols, - MKL_INT *xadj, MKL_INT *adj, value_type *values); + MKL_INT *xadj, MKL_INT *adj, value_type *values) { + throw std::runtime_error( + "Scalar type used in MKLSparseMatrix is NOT " + "supported by MKL"); + } // Allows using MKLSparseMatrix directly in MKL calls inline operator sparse_matrix_t() const { return mtx; } @@ -140,7 +140,11 @@ class MKLSparseMatrix { // Exports MKL sparse matrix contents into KK views inline void export_data(MKL_INT &num_rows, MKL_INT &num_cols, MKL_INT *&rows_start, MKL_INT *&columns, - value_type *&values); + value_type *&values) { + throw std::runtime_error( + "Scalar type used in MKLSparseMatrix is NOT " + "supported by MKL"); + } inline void destroy() { KOKKOSKERNELS_MKL_SAFE_CALL(mkl_sparse_destroy(mtx)); @@ -256,4 +260,4 @@ inline void MKLSparseMatrix>::export_data( #endif // KOKKOSKERNELS_ENABLE_TPL_MKL -#endif // _KOKKOSKERNELS_SPARSEUTILS_MKL_HPP \ No newline at end of file +#endif // _KOKKOSKERNELS_SPARSEUTILS_MKL_HPP From d1e54d59576159faae69f4e1c2a07c99eda92ea2 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Mon, 7 Nov 2022 16:36:16 -0700 Subject: [PATCH 157/226] scripts/cm_test_all_sandia: Include --with-tpls for tpl spot checks perf_test/sparse: Remove unused typenames sparse: Remove unused spgemm typenames --- perf_test/sparse/KokkosSparse_spmv_merge.cpp | 5 ++- perf_test/sparse/KokkosSparse_sptrsv_aux.hpp | 1 - scripts/cm_test_all_sandia | 7 +++- .../KokkosSparse_spgemm_cuSPARSE_impl.hpp | 35 ++++++++++--------- 4 files changed, 26 insertions(+), 22 deletions(-) diff --git a/perf_test/sparse/KokkosSparse_spmv_merge.cpp b/perf_test/sparse/KokkosSparse_spmv_merge.cpp index e0973bacd8..abf05c6a8a 100644 --- a/perf_test/sparse/KokkosSparse_spmv_merge.cpp +++ b/perf_test/sparse/KokkosSparse_spmv_merge.cpp @@ -196,9 +196,8 @@ void print_help() { } int main(int argc, char** argv) { - using Scalar = default_scalar; - using lno_t = default_lno_t; - using size_type = default_size_type; + using Scalar = default_scalar; + using lno_t = default_lno_t; bool compare = false; lno_t loop = 100; diff --git a/perf_test/sparse/KokkosSparse_sptrsv_aux.hpp b/perf_test/sparse/KokkosSparse_sptrsv_aux.hpp index 3c96a4d9a5..b0c8a62ad9 100644 --- a/perf_test/sparse/KokkosSparse_sptrsv_aux.hpp +++ b/perf_test/sparse/KokkosSparse_sptrsv_aux.hpp @@ -266,7 +266,6 @@ bool check_cusparse(host_crsmat_t &Mtx, bool col_majorL, crsmat_t &L, using host_values_view_t = typename host_crsmat_t::values_type::non_const_type; - using host_scalar_t = typename host_values_view_t::value_type; using execution_space = typename values_view_t::execution_space; using memory_space = typename execution_space::memory_space; diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index a672b3f551..c4043a044a 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -86,6 +86,11 @@ print_help() { echo "" echo "--make-par-level=N: Set parallelism level for builds (default: N=12)" echo "" + echo "--with-tpls=TPLS: set KOKKOSKERNELS_ENABLE_TPLS" + echo " Provide a comma-separated list of TPLs" + echo " Valid items:" + echo " blas, mkl, cublas, cusparse, magma, armpl, rocblas, rocsparse" + echo "" echo "ARGS: list of expressions matching compilers to test" echo " supported compilers sems" @@ -1173,7 +1178,7 @@ setup_env() { NEW_TPL_LIST=$(echo ${NEW_TPL_LIST} | sed 's/.\w*$//') #echo "TESTING NEW_TPL_LIST=$NEW_TPL_LIST" - KOKKOSKERNELS_ENABLE_TPL_CMD="--with-tpls=${NEW_TPL_LIST}" + KOKKOSKERNELS_ENABLE_TPL_CMD="--with-tpls=${KOKKOSKERNELS_ENABLE_TPLS},${NEW_TPL_LIST}" #echo "TPL USAGE: KOKKOSKERNELS_ENABLE_TPL_CMD=$KOKKOSKERNELS_ENABLE_TPL_CMD" fi diff --git a/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp index e20ab4acd9..30e2fdbd79 100644 --- a/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp @@ -66,15 +66,9 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, bin_nonzero_index_view_type entriesB, bool transposeB, cin_row_index_view_type row_mapC) { #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE - using device1 = typename ain_row_index_view_type::device_type; - using device2 = typename ain_nonzero_index_view_type::device_type; - using idx = typename KernelHandle::nnz_lno_t; - using size_type = typename KernelHandle::size_type; - using scalar_type = typename KernelHandle::nnz_scalar_t; - - // In case the KernelHandle uses const types! - using non_const_idx = typename std::remove_cv::type; - using non_const_size_type = typename std::remove_cv::type; + using device1 = typename ain_row_index_view_type::device_type; + using device2 = typename ain_nonzero_index_view_type::device_type; + using idx = typename KernelHandle::nnz_lno_t; // TODO this is not correct, check memory space. if (std::is_same::value) { @@ -93,8 +87,10 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, #if (CUDA_VERSION >= 11040) // Newest versions of cuSPARSE have the generic SpGEMM interface, with "reuse" // functions. - if (!std::is_same::value || - !std::is_same::value) { + if (!std::is_same::type, int>::value || + !std::is_same< + typename std::remove_cv::type, + int>::value) { throw std::runtime_error( "cusparseSpGEMMreuse requires local ordinals to be 32-bit integer."); } @@ -174,12 +170,15 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, (void)row_mapC; #elif defined(CUSPARSE_VERSION) && (11000 <= CUSPARSE_VERSION) + using scalar_type = typename KernelHandle::nnz_scalar_t; // cuSPARSE from CUDA 11.0-11.3 (inclusive) supports the new "generic" SpGEMM // interface, just not the "reuse" set of functions. This means compute must // be called in both symbolic and numeric (otherwise, the NNZ of C can't be // known by symbolic) - if (!std::is_same::value || - !std::is_same::value) { + if (!std::is_same::type, int>::value || + !std::is_same< + typename std::remove_cv::type, + int>::value) { throw std::runtime_error( "cusparseSpGEMM requires local ordinals to be 32-bit integer."); } @@ -259,7 +258,8 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, #else - if (std::is_same::value && std::is_same::value) { + if (std::is_same::value && + std::is_same::value) { const idx *a_xadj = (const idx *)row_mapA.data(); const idx *b_xadj = (const idx *)row_mapB.data(); idx *c_xadj = (idx *)row_mapC.data(); @@ -267,7 +267,7 @@ void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, const idx *a_adj = entriesA.data(); const idx *b_adj = entriesB.data(); handle->create_cusparse_spgemm_handle(transposeA, transposeB); - typename KernelHandle::get_cusparse_spgemm_handle *h = + typename KernelHandle::cuSparseSpgemmHandleType *h = handle->get_cusparse_spgemm_handle(); int nnzA = entriesA.extent(0); @@ -408,8 +408,9 @@ void cuSPARSE_apply( (void)k; #elif (CUSPARSE_VERSION >= 11000) - const auto alpha = Kokkos::ArithTraits::one(); - const auto beta = Kokkos::ArithTraits::zero(); + using scalar_type = typename KernelHandle::nnz_scalar_t; + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); typename KernelHandle::cuSparseSpgemmHandleType *h = handle->get_cusparse_spgemm_handle(); KOKKOS_CUSPARSE_SAFE_CALL( From af21fa8d4ff0480afcdc91fb1d7811de4a809eb3 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Tue, 8 Nov 2022 15:48:13 -0700 Subject: [PATCH 158/226] ROT* HIP: testing and improving rocBLAS support for ROT* kernels The rotation functions now support stream execution and proper pointer mode setting in the rocBLAS TPL interface layer. --- blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp | 2 + blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp | 36 ++++++++-- blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp | 71 ++++++++++--------- blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp | 30 ++++++-- 4 files changed, 97 insertions(+), 42 deletions(-) diff --git a/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp index 4f8f8c37c2..49e612214a 100644 --- a/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp @@ -119,6 +119,7 @@ KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, #endif // rocBLAS +/* #ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS #define KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(SCALAR, LAYOUT, EXECSPACE, \ MEMSPACE) \ @@ -143,6 +144,7 @@ KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, Kokkos::LayoutLeft, Kokkos::HIP, Kokkos::HIPSpace) #endif +*/ } // namespace Impl } // namespace KokkosBlas diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp index 0c7e814334..ef2f0b5488 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp @@ -521,9 +521,16 @@ namespace Impl { KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ - rocblasSetStream(singleton.handle, space.hip_stream())); \ + rocblas_set_stream(singleton.handle, space.hip_stream())); \ + rocblas_pointer_mode pointer_mode; \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_get_pointer_mode(singleton.handle, &pointer_mode)); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_set_pointer_mode( \ + singleton.handle, rocblas_pointer_mode_device)); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_drotg( \ singleton.handle, a.data(), b.data(), c.data(), s.data())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_pointer_mode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -551,9 +558,16 @@ namespace Impl { KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ - rocblasSetStream(singleton.handle, space.hip_stream())); \ + rocblas_set_stream(singleton.handle, space.hip_stream())); \ + rocblas_pointer_mode pointer_mode; \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_get_pointer_mode(singleton.handle, &pointer_mode)); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_set_pointer_mode( \ + singleton.handle, rocblas_pointer_mode_device)); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_srotg( \ singleton.handle, a.data(), b.data(), c.data(), s.data())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_pointer_mode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -584,12 +598,19 @@ namespace Impl { KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ - rocblasSetStream(singleton.handle, space.hip_stream())); \ + rocblas_set_stream(singleton.handle, space.hip_stream())); \ + rocblas_pointer_mode pointer_mode; \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_get_pointer_mode(singleton.handle, &pointer_mode)); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_set_pointer_mode( \ + singleton.handle, rocblas_pointer_mode_device)); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_zrotg( \ singleton.handle, \ reinterpret_cast(a.data()), \ reinterpret_cast(b.data()), c.data(), \ reinterpret_cast(s.data()))); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_pointer_mode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -619,12 +640,19 @@ namespace Impl { KokkosBlas::Impl::RocBlasSingleton& singleton = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ - rocblasSetStream(singleton.handle, space.hip_stream())); \ + rocblas_set_stream(singleton.handle, space.hip_stream())); \ + rocblas_pointer_mode pointer_mode; \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_get_pointer_mode(singleton.handle, &pointer_mode)); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_set_pointer_mode( \ + singleton.handle, rocblas_pointer_mode_device)); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_crotg( \ singleton.handle, \ reinterpret_cast(a.data()), \ reinterpret_cast(b.data()), c.data(), \ reinterpret_cast(s.data()))); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_pointer_mode(singleton.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; diff --git a/blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp index a73b95e7e8..7cc983f42e 100644 --- a/blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp @@ -256,34 +256,37 @@ namespace Impl { template <> \ struct Rotm< \ EXEC_SPACE, \ - Kokkos::View, \ + Kokkos::View, \ Kokkos::MemoryTraits>, \ - Kokkos::View, \ Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ true, ETI_SPEC_AVAIL> { \ - using DXView = \ - Kokkos::View, \ + using VectorView = \ + Kokkos::View, \ Kokkos::MemoryTraits>; \ - using YView = Kokkos::View, \ Kokkos::MemoryTraits>; \ - using PView = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ \ - static void rotm(EXEC_SPACE const& space, DXView const& d1, \ - DXView const& d2, DXView const& x1, YView const& y1, \ - PView const& param) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,double]"); \ + static void rotm(EXEC_SPACE const& space, VectorView const& X, \ + VectorView const& Y, PView const& param) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotm[TPL_ROCBLAS,double]"); \ rotm_print_specialization(); \ KokkosBlas::Impl::RocBlasSingleton& s = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ - rocblasSetStream(s.handle, space.hip_stream())); \ - KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_drotm(s.handle, &a, &b, &c, &s)); \ + rocblas_set_stream(s.handle, space.hip_stream())); \ + rocblas_pointer_mode pointer_mode; \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_get_pointer_mode(s.handle, &pointer_mode)); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_pointer_mode(s.handle, rocblas_pointer_mode_device)); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_drotm(s.handle, static_cast(X.extent(0)), X.data(), 1, \ + Y.data(), 1, param.data())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_pointer_mode(s.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -302,33 +305,37 @@ KOKKOSBLAS1_DROTM_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, template <> \ struct Rotm< \ EXEC_SPACE, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ + Kokkos::View, \ Kokkos::MemoryTraits>, \ - Kokkos::View, \ + Kokkos::View, \ Kokkos::MemoryTraits>, \ true, ETI_SPEC_AVAIL> { \ - using DXView = \ - Kokkos::View, \ + using VectorView = \ + Kokkos::View, \ Kokkos::MemoryTraits>; \ - using YView = Kokkos::View, \ Kokkos::MemoryTraits>; \ - using PView = \ - Kokkos::View, \ - Kokkos::MemoryTraits>; \ \ - static void rotm(EXEC_SPACE const& space, DXView const& d1, \ - DXView const& d2, DXView const& x1, YView const& y1, \ - PView const& param) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,float]"); \ + static void rotm(EXEC_SPACE const& space, VectorView const& X, \ + VectorView const& Y, PView const& param) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotm[TPL_ROCBLAS,float]"); \ rotm_print_specialization(); \ KokkosBlas::Impl::RocBlasSingleton& s = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ - rocblasSetStream(s.handle, space.hip_stream())); \ - KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_srotm(s.handle, &a, &b, &c, &s)); \ + rocblas_set_stream(s.handle, space.hip_stream())); \ + rocblas_pointer_mode pointer_mode; \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_get_pointer_mode(s.handle, &pointer_mode)); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_pointer_mode(s.handle, rocblas_pointer_mode_device)); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_srotm(s.handle, static_cast(X.extent(0)), X.data(), 1, \ + Y.data(), 1, param.data())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_pointer_mode(s.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; diff --git a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp index 0305cde3f5..30619f3970 100644 --- a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp @@ -296,13 +296,22 @@ namespace Impl { static void rotmg(EXEC_SPACE const& space, DXView const& d1, \ DXView const& d2, DXView const& x1, YView const& y1, \ PView const& param) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,double]"); \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotmg[TPL_ROCBLAS,double]"); \ rotmg_print_specialization(); \ KokkosBlas::Impl::RocBlasSingleton& s = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ - rocblasSetStream(s.handle, space.hip_stream())); \ - KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_drotmg(s.handle, &a, &b, &c, &s)); \ + rocblas_set_stream(s.handle, space.hip_stream())); \ + rocblas_pointer_mode pointer_mode; \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_get_pointer_mode(s.handle, &pointer_mode)); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_pointer_mode(s.handle, rocblas_pointer_mode_device)); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_drotmg(s.handle, d1.data(), \ + d2.data(), x1.data(), \ + y1.data(), param.data())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_pointer_mode(s.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; @@ -341,13 +350,22 @@ KOKKOSBLAS1_DROTMG_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, static void rotmg(EXEC_SPACE const& space, DXView const& d1, \ DXView const& d2, DXView const& x1, YView const& y1, \ PView const& param) { \ - Kokkos::Profiling::pushRegion("KokkosBlas::nrm1[TPL_ROCBLAS,float]"); \ + Kokkos::Profiling::pushRegion("KokkosBlas::rotmg[TPL_ROCBLAS,float]"); \ rotmg_print_specialization(); \ KokkosBlas::Impl::RocBlasSingleton& s = \ KokkosBlas::Impl::RocBlasSingleton::singleton(); \ KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ - rocblasSetStream(s.handle, space.hip_stream())); \ - KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_srotmg(s.handle, &a, &b, &c, &s)); \ + rocblas_set_stream(s.handle, space.hip_stream())); \ + rocblas_pointer_mode pointer_mode; \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_get_pointer_mode(s.handle, &pointer_mode)); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_pointer_mode(s.handle, rocblas_pointer_mode_device)); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_srotmg(s.handle, d1.data(), \ + d2.data(), x1.data(), \ + y1.data(), param.data())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_pointer_mode(s.handle, pointer_mode)); \ Kokkos::Profiling::popRegion(); \ } \ }; From ab7e6c7ea5f13bb2127078e51d6812da7e5901ef Mon Sep 17 00:00:00 2001 From: brian-kelley Date: Mon, 21 Nov 2022 13:14:10 -0700 Subject: [PATCH 159/226] VBD/VBDBIT D1 coloring: support distributed graphs (#1598) Like other graph algorithms, ignore neighbors >= numVerts (when the graph is the local part of a distributed Tpetra CrsGraph, these neighbors correspond to remotes). Fixes #1596. Also add to D1 coloring perf test in --verbose mode: - Check that input graph (without remote edges) is structurally symmetric - Check that coloring is valid --- .../impl/KokkosGraph_Distance1Color_impl.hpp | 48 ++++++---- perf_test/graph/KokkosGraph_color.cpp | 92 ++++++++++++++++++- 2 files changed, 117 insertions(+), 23 deletions(-) diff --git a/graph/impl/KokkosGraph_Distance1Color_impl.hpp b/graph/impl/KokkosGraph_Distance1Color_impl.hpp index 2ababa0a96..b767a095af 100644 --- a/graph/impl/KokkosGraph_Distance1Color_impl.hpp +++ b/graph/impl/KokkosGraph_Distance1Color_impl.hpp @@ -2009,14 +2009,17 @@ class GraphColor_VBD void operator()(const int node) const { typedef typename std::remove_reference::type atomic_incr_type; - int myScore = score_(node); - int numNeighs = xadj_(node + 1) - xadj_(node); - for (int neigh = 0; neigh < numNeighs; ++neigh) { - if (myScore < score_(adj_(xadj_(node) + neigh))) { + int myScore = score_(node); + int numNeighs = xadj_(node + 1) - xadj_(node); + nnz_lno_t numVerts = xadj_.extent(0) - 1; + size_type rowBegin = xadj_(node); + for (int i = 0; i < numNeighs; ++i) { + nnz_lno_t neigh = adj_(rowBegin + i); + if (neigh >= numVerts) continue; + if (myScore < score_(neigh)) { dependency_(node) = dependency_(node) + 1; } - if ((myScore == score_(adj_(xadj_(node) + neigh))) && - (node < adj_(xadj_(node) + neigh))) { + if ((myScore == score_(neigh)) && (node < adj_(xadj_(node) + i))) { dependency_(node) = dependency_(node) + 1; } } @@ -2063,6 +2066,7 @@ class GraphColor_VBD KOKKOS_INLINE_FUNCTION void operator()(const size_type frontierIdx) const { + nnz_lno_t numVerts = xadj_.extent(0) - 1; typedef typename std::remove_reference::type atomic_incr_type; size_type frontierNode = frontier_(frontierIdx); @@ -2072,21 +2076,24 @@ class GraphColor_VBD // Loop over neighbors, find banned colors, decrement dependency and // update newFrontier - for (size_type neigh = xadj_(frontierNode); - neigh < xadj_(frontierNode + 1); ++neigh) { - bannedColors_(frontierIdx, colors_(adj_(neigh))) = 1; + for (size_type i = xadj_(frontierNode); i < xadj_(frontierNode + 1); + ++i) { + nnz_lno_t neigh = adj_(i); + // Skip remote edges (in case this is part of a distributed graph) + if (neigh >= numVerts) continue; + bannedColors_(frontierIdx, colors_(neigh)) = 1; // We want to avoid the cost of atomic operations when not needed // so let's check that the node is not already colored, i.e. // its dependency is not -1. - if (dependency_(adj_(neigh)) >= 0) { + if (dependency_(neigh) >= 0) { nnz_lno_t myDependency = - Kokkos::atomic_fetch_add(&dependency_(adj_(neigh)), -1); - // dependency(myAdj(neigh)) = dependency(myAdj(neigh)) - 1; + Kokkos::atomic_fetch_add(&dependency_(neigh), -1); + // dependency(neigh) = dependency(neigh) - 1; if (myDependency - 1 == 0) { const size_type newFrontierIdx = Kokkos::atomic_fetch_add( &newFrontierSize_(), atomic_incr_type(1)); - newFrontier_(newFrontierIdx) = adj_(neigh); + newFrontier_(newFrontierIdx) = neigh; } } } // Loop over neighbors @@ -2133,6 +2140,7 @@ class GraphColor_VBD void operator()(const size_type frontierIdx) const { typedef typename std::remove_reference::type atomic_incr_type; + nnz_lno_t numVerts = xadj_.extent(0) - 1; size_type frontierNode = frontier_(frontierIdx); // Initialize bit array to all bits = 0 unsigned long long bannedColors = 0; @@ -2141,9 +2149,11 @@ class GraphColor_VBD while (myColor == 0) { // Loop over neighbors, find banned colors in the range: // [colorOffset + 1, colorOffset + 64] - for (size_type neigh = xadj_(frontierNode); - neigh < xadj_(frontierNode + 1); ++neigh) { - color_t neighColor = colors_(adj_(neigh)); + for (size_type i = xadj_(frontierNode); i < xadj_(frontierNode + 1); + ++i) { + nnz_lno_t neigh = adj_(i); + if (neigh >= numVerts) continue; + color_t neighColor = colors_(neigh); // Check that the color is in the current range if (neighColor > colorOffset && neighColor < colorOffset + 65) { // Set bannedColors' bit in location colors(adj_(neigh)) to 1. @@ -2153,13 +2163,13 @@ class GraphColor_VBD // We want to avoid the cost of atomic operations when not needed // so let's check that the node is not already colored, i.e. // its dependency is not -1. - if (colorOffset == 0 && dependency_(adj_(neigh)) >= 0) { + if (colorOffset == 0 && dependency_(neigh) >= 0) { nnz_lno_t myDependency = - Kokkos::atomic_fetch_add(&dependency_(adj_(neigh)), -1); + Kokkos::atomic_fetch_add(&dependency_(neigh), -1); if (myDependency - 1 == 0) { const size_type newFrontierIdx = Kokkos::atomic_fetch_add( &newFrontierSize_(), atomic_incr_type(1)); - newFrontier_(newFrontierIdx) = adj_(neigh); + newFrontier_(newFrontierIdx) = neigh; } } } // Loop over neighbors diff --git a/perf_test/graph/KokkosGraph_color.cpp b/perf_test/graph/KokkosGraph_color.cpp index 8a97d77a38..b9e00d0fa6 100644 --- a/perf_test/graph/KokkosGraph_color.cpp +++ b/perf_test/graph/KokkosGraph_color.cpp @@ -239,6 +239,64 @@ int parse_inputs(KokkosKernels::Experiment::Parameters ¶ms, int argc, return 0; } +using KokkosKernels::Impl::xorshiftHash; + +template +bool verifySymmetric(lno_t numVerts, const rowmap_t &d_rowmap, + const entries_t &d_entries) { + auto rowmap = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), d_rowmap); + auto entries = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), d_entries); + size_t hash = 0; + for (lno_t v = 0; v < numVerts; v++) { + size_type rowBegin = rowmap(v); + size_type rowEnd = rowmap(v + 1); + for (size_type i = rowBegin; i < rowEnd; i++) { + lno_t nei = entries(i); + if (nei < numVerts && nei != v) { + hash ^= xorshiftHash(xorshiftHash(v) ^ + xorshiftHash(nei)); + } + } + } + return hash == 0U; +} + +template +bool verifyColoring(lno_t numVerts, const rowmap_t &d_rowmap, + const entries_t &d_entries, const colors_t &d_colors) { + auto rowmap = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), d_rowmap); + auto entries = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), d_entries); + auto colors = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), d_colors); + // Just do the simplest possible neighbors-of-neighbors loop to find conflicts + for (lno_t v = 0; v < numVerts; v++) { + if (colors(v) == 0) { + std::cout << "Vertex " << v << " is uncolored.\n"; + return false; + } + size_type rowBegin = rowmap(v); + size_type rowEnd = rowmap(v + 1); + for (size_type i = rowBegin; i < rowEnd; i++) { + lno_t nei = entries(i); + if (nei < numVerts && nei != v) { + // check for dist-1 conflict + if (colors(v) == colors(nei)) { + std::cout << "Dist-1 conflict between " << v << " and " << nei + << '\n'; + return false; + } + } + } + } + return true; +} + namespace KokkosKernels { namespace Experiment { @@ -274,6 +332,19 @@ void run_experiment(crsGraph_t crsGraph, int num_cols, Parameters params) { size_type, lno_t, lno_t, ExecSpace, TempMemSpace, PersistentMemSpace> KernelHandle; + if (verbose) { + if (verifySymmetric( + crsGraph.numRows(), crsGraph.row_map, crsGraph.entries)) { + std::cout << std::endl << "Graph is symmetric (valid input)" << std::endl; + } else { + std::cout << std::endl + << "Graph is nonsymmetric (INVALID INPUT)" << std::endl; + // Don't attempt coloring when input is invalid + return; + } + } + KernelHandle kh; kh.set_team_work_size(chunk_size); kh.set_shmem_size(shmemsize); @@ -319,13 +390,26 @@ void run_experiment(crsGraph_t crsGraph, int num_cols, Parameters params) { "Num Phases:" << kh.get_graph_coloring_handle()->get_num_phases() << std::endl; std::cout << "\t"; - KokkosKernels::Impl::print_1Dview( - kh.get_graph_coloring_handle()->get_vertex_colors()); + + auto colors = kh.get_graph_coloring_handle()->get_vertex_colors(); + KokkosKernels::Impl::print_1Dview(colors); + + if (verbose) { + if (verifyColoring( + crsGraph.numRows(), crsGraph.row_map, crsGraph.entries, colors)) { + std::cout << std::endl + << "Graph Coloring is VALID" << std::endl + << std::endl; + } else { + std::cout << std::endl << "Graph Coloring is NOT VALID" << std::endl; + break; + } + } if (params.coloring_output_file != NULL) { std::ofstream os(params.coloring_output_file, std::ofstream::out); - KokkosKernels::Impl::print_1Dview( - os, kh.get_graph_coloring_handle()->get_vertex_colors(), true, "\n"); + KokkosKernels::Impl::print_1Dview(os, colors, true, "\n"); } totalTime += kh.get_graph_coloring_handle()->get_overall_coloring_time(); } From b126a06a238d1cca191abab00ba67a756c224aff Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Tue, 22 Nov 2022 13:28:09 -0700 Subject: [PATCH 160/226] docs/developer: Fix typo --- docs/developer/style.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developer/style.rst b/docs/developer/style.rst index ddd9ce5197..7dedf408ed 100644 --- a/docs/developer/style.rst +++ b/docs/developer/style.rst @@ -11,7 +11,7 @@ We follow google's c++ coding style. See https://google.github.io/styleguide/cpp do if [ -e $file ]; then clang-format-8 -i -style=file $FILE - git add $FILEA + git add $FILE fi done chmod +x kokkos-kernels/.git/hooks/pre-commit From e50781df34462f1910f360aa090154b005e6bc35 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Tue, 22 Nov 2022 16:38:47 -0700 Subject: [PATCH 161/226] scripts/cm_test_all_sandia: Update cmake version --- scripts/cm_test_all_sandia | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index c4043a044a..d03d6cdcbc 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -704,12 +704,12 @@ elif [ "$MACHINE" = "weaver" ]; then # "Could NOT find TPLCUBLAS (missing: CUDA_CUBLAS_LIBRARIES)" # Once resolved add the compiler + modules below to the SPOT_CHECK_TPLS # "cuda/10.1.243 $CUDA10_MODULE_TPL_LIST "Cuda_OpenMP" ${KOKKOS_PATH}/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - CLANG13_MODULE_TPL_LIST="cmake/3.21.2,/,openblas/0.3.20/gcc/9.3.0,cuda/10.1.243" + CLANG13_MODULE_TPL_LIST="cmake/3.23.1,/,openblas/0.3.20/gcc/9.3.0,cuda/10.1.243" # used with rhel8 queue - RHEL8_BASE_MODULE_LIST="cmake/3.21.2,/" + RHEL8_BASE_MODULE_LIST="cmake/3.23.1,/" # Cuda/11 modules available only on the dev queue (rhel8 OS); gcc/8.3.1 load by default - RHEL8_CUDA11_MODULE_LIST="cmake/3.21.2,/,openblas/0.3.20/gcc/9.3.0" + RHEL8_CUDA11_MODULE_LIST="cmake/3.23.1,/,openblas/0.3.20/gcc/9.3.0" # Don't do Threads on weaver GCC_IBM_BUILD_LIST="OpenMP,Serial,OpenMP_Serial" From e5d4f6d1239b7ebf60904725927493593cad6a09 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 23 Nov 2022 09:43:52 -0700 Subject: [PATCH 162/226] ROTMG: rocblas TPL turned off For the time being the TPL does not seem to return correct results which is a bit strange. Turnging it off for the time being and will talk with the AMD folks about it... --- blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp | 16 ++++++++-------- blas/unit_test/Test_Blas1_rotmg.hpp | 1 + 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp index 98d4768311..ccde587450 100644 --- a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp @@ -145,14 +145,14 @@ KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutRight, enum : bool { value = true }; \ }; -KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutLeft, - Kokkos::HIP, Kokkos::HIPSpace) -KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutLeft, Kokkos::HIP, - Kokkos::HIPSpace) -KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutRight, - Kokkos::HIP, Kokkos::HIPSpace) -KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutRight, - Kokkos::HIP, Kokkos::HIPSpace) +// KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutLeft, +// Kokkos::HIP, Kokkos::HIPSpace) +// KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutLeft, Kokkos::HIP, +// Kokkos::HIPSpace) +// KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutRight, +// Kokkos::HIP, Kokkos::HIPSpace) +// KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutRight, +// Kokkos::HIP, Kokkos::HIPSpace) #endif } // namespace Impl diff --git a/blas/unit_test/Test_Blas1_rotmg.hpp b/blas/unit_test/Test_Blas1_rotmg.hpp index 143c7eb5d6..f485087d47 100644 --- a/blas/unit_test/Test_Blas1_rotmg.hpp +++ b/blas/unit_test/Test_Blas1_rotmg.hpp @@ -42,6 +42,7 @@ void test_rotmg_impl(View0& d1, View0& d2, View0& x1, View0& y1, PView& param, EXPECT_NEAR_KK_REL(param_h(2), ref_vals(6), tol, "rotmg: param(2) is off"); EXPECT_NEAR_KK_REL(param_h(3), ref_vals(7), tol, "rotmg: param(3) is off"); EXPECT_NEAR_KK_REL(param_h(4), ref_vals(8), tol, "rotmg: param(4) is off"); + } template From 88fa4c6e3a458978b1932db749bc32158684adfd Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Fri, 25 Nov 2022 10:13:35 -0700 Subject: [PATCH 163/226] ROTMG: turning off rocblas, applying clang-format --- blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp | 6 +++++- blas/unit_test/Test_Blas1_rotmg.hpp | 1 - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp index ccde587450..e9b26800cd 100644 --- a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp @@ -145,9 +145,13 @@ KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutRight, enum : bool { value = true }; \ }; +// Turning off use of rocBLAS as it returns false results in some of the +// param values as well as x1 and d1. These values can e Inf which really +// should be checked by rocBLAS : ( // KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutLeft, // Kokkos::HIP, Kokkos::HIPSpace) -// KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutLeft, Kokkos::HIP, +// KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutLeft, +// Kokkos::HIP, // Kokkos::HIPSpace) // KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutRight, // Kokkos::HIP, Kokkos::HIPSpace) diff --git a/blas/unit_test/Test_Blas1_rotmg.hpp b/blas/unit_test/Test_Blas1_rotmg.hpp index f485087d47..143c7eb5d6 100644 --- a/blas/unit_test/Test_Blas1_rotmg.hpp +++ b/blas/unit_test/Test_Blas1_rotmg.hpp @@ -42,7 +42,6 @@ void test_rotmg_impl(View0& d1, View0& d2, View0& x1, View0& y1, PView& param, EXPECT_NEAR_KK_REL(param_h(2), ref_vals(6), tol, "rotmg: param(2) is off"); EXPECT_NEAR_KK_REL(param_h(3), ref_vals(7), tol, "rotmg: param(3) is off"); EXPECT_NEAR_KK_REL(param_h(4), ref_vals(8), tol, "rotmg: param(4) is off"); - } template From 19cec1c7bd280c7aa5428ecc54790458914585c9 Mon Sep 17 00:00:00 2001 From: Vinh Dang Date: Fri, 25 Nov 2022 14:43:10 -0700 Subject: [PATCH 164/226] Return CUDA_C_64F for Kokkos::complex --- sparse/src/KokkosSparse_Utils_cusparse.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sparse/src/KokkosSparse_Utils_cusparse.hpp b/sparse/src/KokkosSparse_Utils_cusparse.hpp index b33d6137d7..6f2b1de5e5 100644 --- a/sparse/src/KokkosSparse_Utils_cusparse.hpp +++ b/sparse/src/KokkosSparse_Utils_cusparse.hpp @@ -153,7 +153,7 @@ inline cudaDataType cuda_data_type_from>() { } template <> inline cudaDataType cuda_data_type_from>() { - return CUDA_C_32F; + return CUDA_C_64F; } #if defined(CUSPARSE_VERSION) && (10300 <= CUSPARSE_VERSION) From 2b0da64bfb1bcf9b90521eb9ff01d4c748aa35fa Mon Sep 17 00:00:00 2001 From: Vinh Dang Date: Mon, 28 Nov 2022 10:13:10 -0700 Subject: [PATCH 165/226] Disable compile check in cuda_data_type_from --- sparse/src/KokkosSparse_Utils_cusparse.hpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sparse/src/KokkosSparse_Utils_cusparse.hpp b/sparse/src/KokkosSparse_Utils_cusparse.hpp index 6f2b1de5e5..fee413d0ce 100644 --- a/sparse/src/KokkosSparse_Utils_cusparse.hpp +++ b/sparse/src/KokkosSparse_Utils_cusparse.hpp @@ -118,9 +118,12 @@ inline void cusparse_internal_safe_call(cusparseStatus_t cusparseStatus, template cudaDataType cuda_data_type_from() { + // Note: compile-time failure is disabled to allow for packages such as + // Ifpack2 to more easily support scalar types that cuSPARSE may not. + // compile-time failure with a nice message if called on an unsupported type - static_assert(!std::is_same::value, - "cuSparse TPL does not support scalar type"); + // static_assert(!std::is_same::value, + // "cuSparse TPL does not support scalar type"); // static_assert(false, ...) is allowed to error even if the code is not // instantiated. obfuscate the predicate Despite this function being // uncompilable, the compiler may decide that a return statement is missing, From efdb309d105edce220db643a387aa9fd872e0b72 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Mon, 28 Nov 2022 14:38:56 -0700 Subject: [PATCH 166/226] sparse/unit_test: Use native spmv impl in bsr unit tests --- sparse/unit_test/Test_Sparse_spmv_bsr.hpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sparse/unit_test/Test_Sparse_spmv_bsr.hpp b/sparse/unit_test/Test_Sparse_spmv_bsr.hpp index 344a203567..7cfc56bc2f 100644 --- a/sparse/unit_test/Test_Sparse_spmv_bsr.hpp +++ b/sparse/unit_test/Test_Sparse_spmv_bsr.hpp @@ -215,7 +215,14 @@ void check_bsrm_times_v(const char fOp[], scalar_t alpha, scalar_t beta, // // Make reference computation with a CrsMatrix variable // - KokkosSparse::spmv(fOp, alpha, Acrs, xref, beta, ycrs); + KokkosKernels::Experimental::Controls controls; + // Use the native implementation since the CUDA 11.2.2 spmv implementation + // is not matching the bsr spmv test tolerance when OFFSET is int. + // See https://github.com/kokkos/kokkos-kernels/issues/1586 +#if defined(KOKKOSKERNELS_ENABLE_TPL_CUSPARSE) && (11200 <= CUSPARSE_VERSION) + controls.setParameter("algorithm", "native"); +#endif + KokkosSparse::spmv(controls, fOp, alpha, Acrs, xref, beta, ycrs); y_vector_type ybsr("bsr_product_result", nRow); auto h_ybsr = Kokkos::create_mirror_view(ybsr); From 769843f30f241cf7cee65344dbc2f4507053c49b Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 28 Nov 2022 17:08:49 -0700 Subject: [PATCH 167/226] SPGEMM: fixing the rocsparse interface The way it was done initially did not cast pointers from Kokkos complex type to rocsparse complex type which leads to unknown conversion errors down the road... --- .../KokkosSparse_spgemm_rocSPARSE_impl.hpp | 230 ++++++++++++++---- 1 file changed, 179 insertions(+), 51 deletions(-) diff --git a/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp b/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp index bc2837130e..f2b4f0e38f 100644 --- a/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp @@ -58,60 +58,188 @@ namespace Impl { //============================================================================= // Overload rocsparse_Xcsrgemm_buffer_size() over scalar types -#define ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(scalar_type, TOKEN) \ - inline rocsparse_status rocsparse_Xcsrgemm_buffer_size( \ - rocsparse_handle handle, rocsparse_operation trans_A, \ - rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, \ - rocsparse_int k, const scalar_type *alpha, \ - const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, \ - const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, \ - const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, \ - const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, \ - const scalar_type *beta, const rocsparse_mat_descr descr_D, \ - rocsparse_int nnz_D, const rocsparse_int *csr_row_ptr_D, \ - const rocsparse_int *csr_col_ind_D, rocsparse_mat_info info_C, \ - size_t *buffer_size) { \ - return rocsparse_##TOKEN##csrgemm_buffer_size( \ - handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, \ - csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, \ - csr_col_ind_B, beta, descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, \ - info_C, buffer_size); \ - } -ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(float, s) -ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(double, d) -ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(rocsparse_float_complex, c) -ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(rocsparse_double_complex, z) +inline rocsparse_status rocsparse_Xcsrgemm_buffer_size( + rocsparse_handle handle, rocsparse_operation trans_A, + rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, + rocsparse_int k, const float *alpha, const rocsparse_mat_descr descr_A, + rocsparse_int nnz_A, const rocsparse_int *csr_row_ptr_A, + const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, + rocsparse_int nnz_B, const rocsparse_int *csr_row_ptr_B, + const rocsparse_int *csr_col_ind_B, const float *beta, + const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, + const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, + rocsparse_mat_info info_C, size_t *buffer_size) { + return rocsparse_scsrgemm_buffer_size( + handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, csr_row_ptr_A, + csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, csr_col_ind_B, beta, + descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, info_C, buffer_size); +} + +inline rocsparse_status rocsparse_Xcsrgemm_buffer_size( + rocsparse_handle handle, rocsparse_operation trans_A, + rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, + rocsparse_int k, const double *alpha, const rocsparse_mat_descr descr_A, + rocsparse_int nnz_A, const rocsparse_int *csr_row_ptr_A, + const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, + rocsparse_int nnz_B, const rocsparse_int *csr_row_ptr_B, + const rocsparse_int *csr_col_ind_B, const double *beta, + const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, + const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, + rocsparse_mat_info info_C, size_t *buffer_size) { + return rocsparse_dcsrgemm_buffer_size( + handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, csr_row_ptr_A, + csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, csr_col_ind_B, beta, + descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, info_C, buffer_size); +} + +inline rocsparse_status rocsparse_Xcsrgemm_buffer_size( + rocsparse_handle handle, rocsparse_operation trans_A, + rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, + rocsparse_int k, const Kokkos::complex *alpha, + const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, + const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, + const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, + const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, + const Kokkos::complex *beta, const rocsparse_mat_descr descr_D, + rocsparse_int nnz_D, const rocsparse_int *csr_row_ptr_D, + const rocsparse_int *csr_col_ind_D, rocsparse_mat_info info_C, + size_t *buffer_size) { + return rocsparse_ccsrgemm_buffer_size( + handle, trans_A, trans_B, m, n, k, + reinterpret_cast(alpha), descr_A, nnz_A, + csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, + csr_col_ind_B, reinterpret_cast(beta), + descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, info_C, buffer_size); +} + +inline rocsparse_status rocsparse_Xcsrgemm_buffer_size( + rocsparse_handle handle, rocsparse_operation trans_A, + rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, + rocsparse_int k, const Kokkos::complex *alpha, + const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, + const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, + const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, + const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, + const Kokkos::complex *beta, const rocsparse_mat_descr descr_D, + rocsparse_int nnz_D, const rocsparse_int *csr_row_ptr_D, + const rocsparse_int *csr_col_ind_D, rocsparse_mat_info info_C, + size_t *buffer_size) { + return rocsparse_zcsrgemm_buffer_size( + handle, trans_A, trans_B, m, n, k, + reinterpret_cast(alpha), descr_A, nnz_A, + csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, + csr_col_ind_B, reinterpret_cast(beta), + descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, info_C, buffer_size); +} //============================================================================= // Overload rocsparse_Xcsrgemm_numeric() over scalar types -#define ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(scalar_type, TOKEN) \ - inline rocsparse_status rocsparse_Xcsrgemm_numeric( \ - rocsparse_handle handle, rocsparse_operation trans_A, \ - rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, \ - rocsparse_int k, const scalar_type *alpha, \ - const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, \ - const scalar_type *csr_val_A, const rocsparse_int *csr_row_ptr_A, \ - const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, \ - rocsparse_int nnz_B, const scalar_type *csr_val_B, \ - const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, \ - const scalar_type *beta, const rocsparse_mat_descr descr_D, \ - rocsparse_int nnz_D, const scalar_type *csr_val_D, \ - const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, \ - const rocsparse_mat_descr descr_C, rocsparse_int nnz_C, \ - scalar_type *csr_val_C, const rocsparse_int *csr_row_ptr_C, \ - const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, \ - void *buffer) { \ - return rocsparse_##TOKEN##csrgemm_numeric( \ - handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, csr_val_A, \ - csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_val_B, \ - csr_row_ptr_B, csr_col_ind_B, beta, descr_D, nnz_D, csr_val_D, \ - csr_row_ptr_D, csr_col_ind_D, descr_C, nnz_C, csr_val_C, \ - csr_row_ptr_C, csr_col_ind_C, info_C, buffer); \ - } -ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(float, s) -ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(double, d) -ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(rocsparse_float_complex, c) -ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(rocsparse_double_complex, z) +inline rocsparse_status rocsparse_Xcsrgemm_numeric( + rocsparse_handle handle, rocsparse_operation trans_A, + rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, + rocsparse_int k, const float *alpha, const rocsparse_mat_descr descr_A, + rocsparse_int nnz_A, const float *csr_val_A, + const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, + const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, + const float *csr_val_B, const rocsparse_int *csr_row_ptr_B, + const rocsparse_int *csr_col_ind_B, const float *beta, + const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, + const float *csr_val_D, const rocsparse_int *csr_row_ptr_D, + const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, + rocsparse_int nnz_C, float *csr_val_C, const rocsparse_int *csr_row_ptr_C, + const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, + void *buffer) { + return rocsparse_scsrgemm_numeric( + handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, csr_val_A, + csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_val_B, csr_row_ptr_B, + csr_col_ind_B, beta, descr_D, nnz_D, csr_val_D, csr_row_ptr_D, + csr_col_ind_D, descr_C, nnz_C, csr_val_C, csr_row_ptr_C, csr_col_ind_C, + info_C, buffer); +} + +inline rocsparse_status rocsparse_Xcsrgemm_numeric( + rocsparse_handle handle, rocsparse_operation trans_A, + rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, + rocsparse_int k, const double *alpha, const rocsparse_mat_descr descr_A, + rocsparse_int nnz_A, const double *csr_val_A, + const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, + const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, + const double *csr_val_B, const rocsparse_int *csr_row_ptr_B, + const rocsparse_int *csr_col_ind_B, const double *beta, + const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, + const double *csr_val_D, const rocsparse_int *csr_row_ptr_D, + const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, + rocsparse_int nnz_C, double *csr_val_C, const rocsparse_int *csr_row_ptr_C, + const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, + void *buffer) { + return rocsparse_dcsrgemm_numeric( + handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, csr_val_A, + csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_val_B, csr_row_ptr_B, + csr_col_ind_B, beta, descr_D, nnz_D, csr_val_D, csr_row_ptr_D, + csr_col_ind_D, descr_C, nnz_C, csr_val_C, csr_row_ptr_C, csr_col_ind_C, + info_C, buffer); +} + +inline rocsparse_status rocsparse_Xcsrgemm_numeric( + rocsparse_handle handle, rocsparse_operation trans_A, + rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, + rocsparse_int k, const Kokkos::complex *alpha, + const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, + const Kokkos::complex *csr_val_A, const rocsparse_int *csr_row_ptr_A, + const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, + rocsparse_int nnz_B, const Kokkos::complex *csr_val_B, + const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, + const Kokkos::complex *beta, const rocsparse_mat_descr descr_D, + rocsparse_int nnz_D, const Kokkos::complex *csr_val_D, + const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, + const rocsparse_mat_descr descr_C, rocsparse_int nnz_C, + Kokkos::complex *csr_val_C, const rocsparse_int *csr_row_ptr_C, + const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, + void *buffer) { + return rocsparse_ccsrgemm_numeric( + handle, trans_A, trans_B, m, n, k, + reinterpret_cast(alpha), descr_A, nnz_A, + reinterpret_cast(csr_val_A), + csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, + reinterpret_cast(csr_val_B), + csr_row_ptr_B, csr_col_ind_B, + reinterpret_cast(beta), descr_D, nnz_D, + reinterpret_cast(csr_val_D), + csr_row_ptr_D, csr_col_ind_D, descr_C, nnz_C, + reinterpret_cast(csr_val_C), csr_row_ptr_C, + csr_col_ind_C, info_C, buffer); +} + +inline rocsparse_status rocsparse_Xcsrgemm_numeric( + rocsparse_handle handle, rocsparse_operation trans_A, + rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, + rocsparse_int k, const Kokkos::complex *alpha, + const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, + const Kokkos::complex *csr_val_A, + const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, + const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, + const Kokkos::complex *csr_val_B, + const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, + const Kokkos::complex *beta, const rocsparse_mat_descr descr_D, + rocsparse_int nnz_D, const Kokkos::complex *csr_val_D, + const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, + const rocsparse_mat_descr descr_C, rocsparse_int nnz_C, + Kokkos::complex *csr_val_C, const rocsparse_int *csr_row_ptr_C, + const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, + void *buffer) { + return rocsparse_zcsrgemm_numeric( + handle, trans_A, trans_B, m, n, k, + reinterpret_cast(alpha), descr_A, nnz_A, + reinterpret_cast(csr_val_A), + csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, + reinterpret_cast(csr_val_B), + csr_row_ptr_B, csr_col_ind_B, + reinterpret_cast(beta), descr_D, nnz_D, + reinterpret_cast(csr_val_D), + csr_row_ptr_D, csr_col_ind_D, descr_C, nnz_C, + reinterpret_cast(csr_val_C), csr_row_ptr_C, + csr_col_ind_C, info_C, buffer); +} //============================================================================= template Date: Tue, 29 Nov 2022 09:04:53 -0700 Subject: [PATCH 168/226] Batched dense tests: splitting batched dense unit-tests The batched gemm tests are now split into their own unit-test. This should reduce both runtime and compile time when testing Kokkos Kernels. --- batched/dense/unit_test/CMakeLists.txt | 56 +++++++++++++++++++ .../dense/unit_test/Test_Batched_Dense.hpp | 12 ---- .../unit_test/Test_Batched_Dense_GEMM.hpp | 22 ++++++++ .../backends/Test_Cuda_Batched_GEMM.cpp | 7 +++ .../backends/Test_HIP_Batched_GEMM.cpp | 7 +++ .../Test_OpenMPTarget_Batched_GEMM.cpp | 7 +++ .../backends/Test_OpenMP_Batched_GEMM.cpp | 7 +++ .../backends/Test_SYCL_Batched_GEMM.cpp | 7 +++ .../backends/Test_Serial_Batched_GEMM.cpp | 7 +++ .../backends/Test_Threads_Batched_GEMM.cpp | 7 +++ 10 files changed, 127 insertions(+), 12 deletions(-) create mode 100644 batched/dense/unit_test/Test_Batched_Dense_GEMM.hpp create mode 100644 batched/dense/unit_test/backends/Test_Cuda_Batched_GEMM.cpp create mode 100644 batched/dense/unit_test/backends/Test_HIP_Batched_GEMM.cpp create mode 100644 batched/dense/unit_test/backends/Test_OpenMPTarget_Batched_GEMM.cpp create mode 100644 batched/dense/unit_test/backends/Test_OpenMP_Batched_GEMM.cpp create mode 100644 batched/dense/unit_test/backends/Test_SYCL_Batched_GEMM.cpp create mode 100644 batched/dense/unit_test/backends/Test_Serial_Batched_GEMM.cpp create mode 100644 batched/dense/unit_test/backends/Test_Threads_Batched_GEMM.cpp diff --git a/batched/dense/unit_test/CMakeLists.txt b/batched/dense/unit_test/CMakeLists.txt index d12db69f94..8acf282367 100644 --- a/batched/dense/unit_test/CMakeLists.txt +++ b/batched/dense/unit_test/CMakeLists.txt @@ -44,6 +44,14 @@ IF (KOKKOS_ENABLE_CUDA) backends/Test_Cuda_Batched_Dense.cpp COMPONENTS batched_dla ) + + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_gemm_cuda + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_Cuda_Batched_GEMM.cpp + COMPONENTS batched_dla + ) ENDIF () IF (KOKKOS_ENABLE_HIP) @@ -54,6 +62,14 @@ IF (KOKKOS_ENABLE_HIP) backends/Test_HIP_Batched_Dense.cpp COMPONENTS batched_dla ) + + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_gemm_hip + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_HIP_Batched_GEMM.cpp + COMPONENTS batched_dla + ) ENDIF () IF (KOKKOS_ENABLE_SYCL) @@ -64,6 +80,14 @@ IF (KOKKOS_ENABLE_SYCL) backends/Test_SYCL_Batched_Dense.cpp COMPONENTS batched_dla ) + + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_gemm_sycl + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_SYCL_Batched_GEMM.cpp + COMPONENTS batched_dla + ) ENDIF () IF (KOKKOS_ENABLE_OPENMPTARGET) @@ -74,6 +98,14 @@ IF (KOKKOS_ENABLE_OPENMPTARGET) # backends/Test_OpenMPTarget_Batched_Dense.cpp # COMPONENTS batched_dla # ) + + # KOKKOSKERNELS_ADD_UNIT_TEST( + # batched_gemm_openmptarget + # SOURCES + # ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + # backends/Test_OpenMPTarget_Batched_GEMM.cpp + # COMPONENTS batched_dla + # ) ENDIF () @@ -91,6 +123,14 @@ IF (KOKKOS_ENABLE_SERIAL) backends/Test_Serial_Batched_Dense.cpp COMPONENTS batched_dla ) + + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_gemm_serial + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_Serial_Batched_GEMM.cpp + COMPONENTS batched_dla + ) ENDIF () IF (KOKKOS_ENABLE_OPENMP) @@ -101,6 +141,14 @@ IF (KOKKOS_ENABLE_OPENMP) backends/Test_OpenMP_Batched_Dense.cpp COMPONENTS batched_dla ) + + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_gemm_openmp + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_OpenMP_Batched_GEMM.cpp + COMPONENTS batched_dla + ) ENDIF () IF (KOKKOS_ENABLE_THREADS) @@ -111,5 +159,13 @@ IF (KOKKOS_ENABLE_THREADS) backends/Test_Threads_Batched_Dense.cpp COMPONENTS batched_dla ) + + KOKKOSKERNELS_ADD_UNIT_TEST( + batched_gemm_threads + SOURCES + ${PACKAGE_SOURCE_DIR}/test_common/Test_Main.cpp + backends/Test_Threads_Batched_GEMM.cpp + COMPONENTS batched_dla + ) ENDIF () diff --git a/batched/dense/unit_test/Test_Batched_Dense.hpp b/batched/dense/unit_test/Test_Batched_Dense.hpp index a154e9e14f..2cb6c07be4 100644 --- a/batched/dense/unit_test/Test_Batched_Dense.hpp +++ b/batched/dense/unit_test/Test_Batched_Dense.hpp @@ -7,12 +7,6 @@ #include "Test_Batched_SerialAxpy_Complex.hpp" #include "Test_Batched_SerialEigendecomposition.hpp" #include "Test_Batched_SerialEigendecomposition_Real.hpp" -#include "Test_Batched_SerialGemm.hpp" -#include "Test_Batched_SerialGemm_Real.hpp" -#include "Test_Batched_SerialGemm_Complex.hpp" -#include "Test_Batched_BatchedGemm.hpp" -#include "Test_Batched_BatchedGemm_Real.hpp" -#include "Test_Batched_BatchedGemm_Complex.hpp" #include "Test_Batched_SerialGesv.hpp" #include "Test_Batched_SerialGesv_Real.hpp" #include "Test_Batched_SerialInverseLU.hpp" @@ -42,9 +36,6 @@ #include "Test_Batched_TeamAxpy.hpp" #include "Test_Batched_TeamAxpy_Real.hpp" #include "Test_Batched_TeamAxpy_Complex.hpp" -#include "Test_Batched_TeamGemm.hpp" -#include "Test_Batched_TeamGemm_Real.hpp" -#include "Test_Batched_TeamGemm_Complex.hpp" #include "Test_Batched_TeamGesv.hpp" #include "Test_Batched_TeamGesv_Real.hpp" #include "Test_Batched_TeamInverseLU.hpp" @@ -69,9 +60,6 @@ #include "Test_Batched_TeamVectorAxpy_Complex.hpp" #include "Test_Batched_TeamVectorEigendecomposition.hpp" #include "Test_Batched_TeamVectorEigendecomposition_Real.hpp" -#include "Test_Batched_TeamVectorGemm.hpp" -#include "Test_Batched_TeamVectorGemm_Real.hpp" -#include "Test_Batched_TeamVectorGemm_Complex.hpp" #include "Test_Batched_TeamVectorGesv.hpp" #include "Test_Batched_TeamVectorGesv_Real.hpp" #include "Test_Batched_TeamVectorQR.hpp" diff --git a/batched/dense/unit_test/Test_Batched_Dense_GEMM.hpp b/batched/dense/unit_test/Test_Batched_Dense_GEMM.hpp new file mode 100644 index 0000000000..bbb608ed13 --- /dev/null +++ b/batched/dense/unit_test/Test_Batched_Dense_GEMM.hpp @@ -0,0 +1,22 @@ +#ifndef TEST_BATCHED_DENSE_GEMM_HPP +#define TEST_BATCHED_DENSE_GEMM_HPP + +// Serial kernels +#include "Test_Batched_SerialGemm.hpp" +#include "Test_Batched_SerialGemm_Real.hpp" +#include "Test_Batched_SerialGemm_Complex.hpp" +#include "Test_Batched_BatchedGemm.hpp" +#include "Test_Batched_BatchedGemm_Real.hpp" +#include "Test_Batched_BatchedGemm_Complex.hpp" + +// Team Kernels +#include "Test_Batched_TeamGemm.hpp" +#include "Test_Batched_TeamGemm_Real.hpp" +#include "Test_Batched_TeamGemm_Complex.hpp" + +// TeamVector Kernels +#include "Test_Batched_TeamVectorGemm.hpp" +#include "Test_Batched_TeamVectorGemm_Real.hpp" +#include "Test_Batched_TeamVectorGemm_Complex.hpp" + +#endif // TEST_BATCHED_DENSE_GEMM_HPP diff --git a/batched/dense/unit_test/backends/Test_Cuda_Batched_GEMM.cpp b/batched/dense/unit_test/backends/Test_Cuda_Batched_GEMM.cpp new file mode 100644 index 0000000000..d6768e5f80 --- /dev/null +++ b/batched/dense/unit_test/backends/Test_Cuda_Batched_GEMM.cpp @@ -0,0 +1,7 @@ +#ifndef TEST_CUDA_BATCHED_GEMM_CPP +#define TEST_CUDA_BATCHED_GEMM_CPP + +#include +#include + +#endif // TEST_CUDA_BATCHED_GEMM_CPP diff --git a/batched/dense/unit_test/backends/Test_HIP_Batched_GEMM.cpp b/batched/dense/unit_test/backends/Test_HIP_Batched_GEMM.cpp new file mode 100644 index 0000000000..8b9b763bdd --- /dev/null +++ b/batched/dense/unit_test/backends/Test_HIP_Batched_GEMM.cpp @@ -0,0 +1,7 @@ +#ifndef TEST_HIP_BATCHED_GEMM_CPP +#define TEST_HIP_BATCHED_GEMM_CPP + +#include +#include + +#endif // TEST_HIP_BATCHED_GEMM_CPP diff --git a/batched/dense/unit_test/backends/Test_OpenMPTarget_Batched_GEMM.cpp b/batched/dense/unit_test/backends/Test_OpenMPTarget_Batched_GEMM.cpp new file mode 100644 index 0000000000..5ac03a88c7 --- /dev/null +++ b/batched/dense/unit_test/backends/Test_OpenMPTarget_Batched_GEMM.cpp @@ -0,0 +1,7 @@ +#ifndef TEST_OPENMPTARGET_BATCHED_GEMM_CPP +#define TEST_OPENMPTARGET_BATCHED_GEMM_CPP + +#include +#include + +#endif // TEST_OPENMPTARGET_BATCHED_GEMM_CPP diff --git a/batched/dense/unit_test/backends/Test_OpenMP_Batched_GEMM.cpp b/batched/dense/unit_test/backends/Test_OpenMP_Batched_GEMM.cpp new file mode 100644 index 0000000000..dbb14d5a36 --- /dev/null +++ b/batched/dense/unit_test/backends/Test_OpenMP_Batched_GEMM.cpp @@ -0,0 +1,7 @@ +#ifndef TEST_OPENMP_BATCHED_GEMM_CPP +#define TEST_OPENMP_BATCHED_GEMM_CPP + +#include +#include + +#endif // TEST_OPENMP_BATCHED_GEMM_CPP diff --git a/batched/dense/unit_test/backends/Test_SYCL_Batched_GEMM.cpp b/batched/dense/unit_test/backends/Test_SYCL_Batched_GEMM.cpp new file mode 100644 index 0000000000..d0dedd3115 --- /dev/null +++ b/batched/dense/unit_test/backends/Test_SYCL_Batched_GEMM.cpp @@ -0,0 +1,7 @@ +#ifndef TEST_SYCL_BATCHED_GEMM_CPP +#define TEST_SYCL_BATCHED_GEMM_CPP + +#include +#include + +#endif // TEST_SYCL_BATCHED_GEMM_CPP diff --git a/batched/dense/unit_test/backends/Test_Serial_Batched_GEMM.cpp b/batched/dense/unit_test/backends/Test_Serial_Batched_GEMM.cpp new file mode 100644 index 0000000000..4ccc9c1922 --- /dev/null +++ b/batched/dense/unit_test/backends/Test_Serial_Batched_GEMM.cpp @@ -0,0 +1,7 @@ +#ifndef TEST_SERIAL_BATCHED_GEMM_CPP +#define TEST_SERIAL_BATCHED_GEMM_CPP + +#include +#include + +#endif // TEST_SERIAL_BATCHED_GEMM_CPP diff --git a/batched/dense/unit_test/backends/Test_Threads_Batched_GEMM.cpp b/batched/dense/unit_test/backends/Test_Threads_Batched_GEMM.cpp new file mode 100644 index 0000000000..639454e62b --- /dev/null +++ b/batched/dense/unit_test/backends/Test_Threads_Batched_GEMM.cpp @@ -0,0 +1,7 @@ +#ifndef TEST_THREADS_BATCHED_GEMM_CPP +#define TEST_THREADS_BATCHED_GEMM_CPP + +#include +#include + +#endif // TEST_THREADS_BATCHED_GEMM_CPP From b322df9689cfd7ced369a276ad22ce142e8e4c15 Mon Sep 17 00:00:00 2001 From: Damien L-G Date: Thu, 1 Dec 2022 16:38:26 -0500 Subject: [PATCH 169/226] Make sure to call ExecutionSpace::concurrency from an object In anticipation of Kokkos turning ExecutionSpace::concurrency() into a non-static member function. --- .../src/KokkosKernels_Uniform_Initialized_MemoryPool.hpp | 4 ++-- .../graph/KokkosKernels_Example_Distance2GraphColor.cpp | 2 +- .../KokkosKernels_Example_HashmapAccumulator.cpp | 2 +- graph/src/KokkosGraph_CoarsenConstruct.hpp | 6 +++--- graph/src/KokkosGraph_Triangle.hpp | 4 ++-- perf_test/graph/KokkosGraph_color_d2.cpp | 6 +++--- perf_test/sparse/KokkosSparse_spmv_test.hpp | 2 +- perf_test/sparse/spmv/Kokkos_SPMV.hpp | 2 +- perf_test/sparse/spmv/Kokkos_SPMV_Inspector.hpp | 8 ++++---- sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp | 2 +- sparse/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp | 4 ++-- sparse/impl/KokkosSparse_gauss_seidel_impl.hpp | 6 +++--- sparse/impl/KokkosSparse_spgemm_impl.hpp | 4 ++-- sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp | 2 +- sparse/impl/KokkosSparse_spgemm_jacobi_sparseacc_impl.hpp | 2 +- sparse/impl/KokkosSparse_spmv_impl.hpp | 2 +- sparse/impl/KokkosSparse_spmv_struct_impl.hpp | 2 +- 17 files changed, 30 insertions(+), 30 deletions(-) diff --git a/common/src/KokkosKernels_Uniform_Initialized_MemoryPool.hpp b/common/src/KokkosKernels_Uniform_Initialized_MemoryPool.hpp index 93dc94f07e..1008a39ea3 100644 --- a/common/src/KokkosKernels_Uniform_Initialized_MemoryPool.hpp +++ b/common/src/KokkosKernels_Uniform_Initialized_MemoryPool.hpp @@ -80,7 +80,7 @@ enum PoolType { OneThread2OneChunk, ManyThread2OneChunk }; not * enough memory. This case still would work for #chunks = #threads, with an extra atomic - * operation. On GPUs, even when #chunks = Kokkos::Cuda::concurrency(), this + * operation. On GPUs, even when #chunks = Kokkos::Cuda().concurrency(), this option is safe * to use. * @@ -116,7 +116,7 @@ enum PoolType { OneThread2OneChunk, ManyThread2OneChunk }; * --- either requires the initializations to go into loop body, resulting in N work in each loop. * --- Or, we can use preinitialized 2d views where the first dimension is - ExecutionSpace::concurrency() + ExecutionSpace().concurrency() * However, this case becomes a problem in CUDA, as concurrency is pretty high and we might not have * enough memory for that. diff --git a/example/graph/KokkosKernels_Example_Distance2GraphColor.cpp b/example/graph/KokkosKernels_Example_Distance2GraphColor.cpp index e921ed06cd..2e855566d5 100644 --- a/example/graph/KokkosKernels_Example_Distance2GraphColor.cpp +++ b/example/graph/KokkosKernels_Example_Distance2GraphColor.cpp @@ -473,7 +473,7 @@ void run_example(CrsGraph_type crsGraph, DataType num_cols, Parameters params) { << " Num Edges : " << crsGraph.entries.extent(0) << std::endl << " Concurrency : " - << Kokkos::DefaultExecutionSpace::concurrency() << std::endl + << Kokkos::DefaultExecutionSpace().concurrency() << std::endl << " Algorithm : " << label_algorithm << std::endl << "Coloring Stats" << std::endl << " Num colors : " << num_colors << std::endl diff --git a/example/hashmap_accumulator/KokkosKernels_Example_HashmapAccumulator.cpp b/example/hashmap_accumulator/KokkosKernels_Example_HashmapAccumulator.cpp index aec112b584..be3adcf6c2 100644 --- a/example/hashmap_accumulator/KokkosKernels_Example_HashmapAccumulator.cpp +++ b/example/hashmap_accumulator/KokkosKernels_Example_HashmapAccumulator.cpp @@ -220,7 +220,7 @@ void experiment(const parameters_t& params) { size_t max_value = 100; // Get the concurrecny - size_t concurrency = execution_space::concurrency(); + size_t concurrency = execution_space().concurrency(); // Set up random number generator std::random_device rd; diff --git a/graph/src/KokkosGraph_CoarsenConstruct.hpp b/graph/src/KokkosGraph_CoarsenConstruct.hpp index ae40aec410..9e9b4049e6 100644 --- a/graph/src/KokkosGraph_CoarsenConstruct.hpp +++ b/graph/src/KokkosGraph_CoarsenConstruct.hpp @@ -1050,7 +1050,7 @@ class coarse_builder { 3 * max_entries; // for hash nexts, keys, and values (unless scalar_t // != ordinal_t, in which case memory is unused) mem_chunk_size += 10; // for metadata - mem_chunk_count = exec_space::concurrency(); + mem_chunk_count = exec_space().concurrency(); if (mem_chunk_count > remaining_count) { mem_chunk_count = remaining_count + 1; } @@ -1385,7 +1385,7 @@ class coarse_builder { wgt_by_source); if (is_host_space) { bool use_dyn = - should_use_dyn(n, g.graph.row_map, exec_space::concurrency()); + should_use_dyn(n, g.graph.row_map, exec_space().concurrency()); if (use_dyn) { Kokkos::parallel_for("move edges to coarse matrix", dyn_policy_t(0, n), translateF); @@ -1422,7 +1422,7 @@ class coarse_builder { if (is_host_space) { bool use_dyn = - should_use_dyn(nc, source_offsets, exec_space::concurrency()); + should_use_dyn(nc, source_offsets, exec_space().concurrency()); if (use_dyn) { Kokkos::parallel_for( "move deduped edges to new coarse matrix", dyn_policy_t(0, nc), diff --git a/graph/src/KokkosGraph_Triangle.hpp b/graph/src/KokkosGraph_Triangle.hpp index b9780a23c6..3432ad0711 100644 --- a/graph/src/KokkosGraph_Triangle.hpp +++ b/graph/src/KokkosGraph_Triangle.hpp @@ -266,7 +266,7 @@ void triangle_generic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, KokkosKernels::Impl::kk_sort_by_row_size( m, row_mapA.data(), new_indices.data(), sort_decreasing_order, - ExecutionSpace::concurrency()); + ExecutionSpace().concurrency()); } sh->set_lower_triangular_permutation(new_indices); } @@ -299,7 +299,7 @@ void triangle_generic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, m, row_mapA, entriesA, null_values, lower_triangular_matrix_rowmap, lower_triangular_matrix_entries, null_values, new_indices, handle->is_dynamic_scheduling(), - handle->get_team_work_size(1, ExecutionSpace::concurrency(), m)); + handle->get_team_work_size(1, ExecutionSpace().concurrency(), m)); sh->set_lower_triangular_matrix(lower_triangular_matrix_rowmap, lower_triangular_matrix_entries); diff --git a/perf_test/graph/KokkosGraph_color_d2.cpp b/perf_test/graph/KokkosGraph_color_d2.cpp index bc4add8b34..ea143ee609 100644 --- a/perf_test/graph/KokkosGraph_color_d2.cpp +++ b/perf_test/graph/KokkosGraph_color_d2.cpp @@ -539,7 +539,7 @@ void run_experiment(crsGraph_t crsGraph, int num_cols, << " Num Edges : " << crsGraph.entries.extent(0) << std::endl << " Concurrency : " - << Kokkos::DefaultExecutionSpace::concurrency() << std::endl + << Kokkos::DefaultExecutionSpace().concurrency() << std::endl << " Algorithm : " << label_algorithm << std::endl << "Overall Time/Stats" << std::endl << " Total Time : " << total_time << std::endl @@ -602,7 +602,7 @@ void run_experiment(crsGraph_t crsGraph, int num_cols, << currentDateTimeStr << "," << crsGraph.numRows() << "," << crsGraph.entries.extent(0) << "," << Kokkos::DefaultExecutionSpace::name() << "," << label_algorithm - << "," << Kokkos::DefaultExecutionSpace::concurrency() << "," + << "," << Kokkos::DefaultExecutionSpace().concurrency() << "," << repeat << "," << total_time << "," << total_time_matrix_squared << "," << total_time_matrix_squared_d1 << "," << total_time_color_greedy << "," << total_time_find_conflicts @@ -636,7 +636,7 @@ void run_experiment(crsGraph_t crsGraph, int num_cols, << currentDateTimeStr << "," << crsGraph.numRows() << "," << crsGraph.entries.extent(0) << "," << Kokkos::DefaultExecutionSpace::name() << "," << label_algorithm - << "," << Kokkos::DefaultExecutionSpace::concurrency() << ","; + << "," << Kokkos::DefaultExecutionSpace().concurrency() << ","; KokkosGraph::Impl::graph_print_distance2_color_histogram(&kh, true); std::cout << std::endl; } diff --git a/perf_test/sparse/KokkosSparse_spmv_test.hpp b/perf_test/sparse/KokkosSparse_spmv_test.hpp index b6ff552faf..31acb797d3 100644 --- a/perf_test/sparse/KokkosSparse_spmv_test.hpp +++ b/perf_test/sparse/KokkosSparse_spmv_test.hpp @@ -192,7 +192,7 @@ void matvec(AType& A, XType x, YType y, Ordinal rows_per_thread, int team_size, printf("PTR: %p\n", static_cast(A.graph.row_block_offsets.data())); A.graph.create_block_partitioning( - AType::execution_space::concurrency()); + typename AType::execution_space().concurrency()); printf("PTR2: %p\n", static_cast(A.graph.row_block_offsets.data())); } diff --git a/perf_test/sparse/spmv/Kokkos_SPMV.hpp b/perf_test/sparse/spmv/Kokkos_SPMV.hpp index cc98865c81..8eefd363c9 100644 --- a/perf_test/sparse/spmv/Kokkos_SPMV.hpp +++ b/perf_test/sparse/spmv/Kokkos_SPMV.hpp @@ -151,7 +151,7 @@ int launch_parameters(int numRows, int nnz, int rows_per_thread, int& team_size, if (rows_per_team < 0) { int nnz_per_team = 4096; - int conc = execution_space::concurrency(); + int conc = execution_space().concurrency(); while ((conc * nnz_per_team * 4 > nnz) && (nnz_per_team > 256)) nnz_per_team /= 2; int tmp_nnz_per_row = nnz / numRows; diff --git a/perf_test/sparse/spmv/Kokkos_SPMV_Inspector.hpp b/perf_test/sparse/spmv/Kokkos_SPMV_Inspector.hpp index 3a631fc743..8ff2e0c7e5 100644 --- a/perf_test/sparse/spmv/Kokkos_SPMV_Inspector.hpp +++ b/perf_test/sparse/spmv/Kokkos_SPMV_Inspector.hpp @@ -128,13 +128,13 @@ void kk_inspector_matvec(AType A, XType x, YType y, int team_size, typedef typename AType::non_const_ordinal_type lno_t; typedef typename AType::non_const_value_type scalar_t; + int const concurrency = execution_space().concurrency(); static int worksets = std::is_same::value - ? team_size > 0 ? execution_space::concurrency() / team_size - : execution_space::concurrency() + ? team_size > 0 ? concurrency / team_size : concurrency : // static - team_size > 0 ? execution_space::concurrency() * 32 / team_size - : execution_space::concurrency() * 32; // dynamic + team_size > 0 ? concurrency * 32 / team_size + : concurrency * 32; // dynamic static Kokkos::View workset_offsets; if (workset_offsets.extent(0) == 0) { workset_offsets = Kokkos::View("WorksetOffsets", worksets + 1); diff --git a/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp b/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp index aae9d83b5f..2e857d2dbe 100644 --- a/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp +++ b/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp @@ -1501,7 +1501,7 @@ void KokkosBSPGEMMconcurrency - << " MyExecSpace::concurrency():" << MyExecSpace::concurrency() + << " MyExecSpace().concurrency():" << MyExecSpace().concurrency() << " numchunks:" << num_chunks << std::endl; } diff --git a/sparse/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp b/sparse/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp index bb95eea101..3938b67ec6 100644 --- a/sparse/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp +++ b/sparse/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp @@ -781,7 +781,7 @@ class ClusterGaussSeidel { scalar_persistent_work_view_t inverse_diagonal( Kokkos::view_alloc(Kokkos::WithoutInitializing, "Aii^-1"), num_rows); nnz_lno_t rows_per_team = this->handle->get_team_work_size( - suggested_team_size, MyExecSpace::concurrency(), num_rows); + suggested_team_size, MyExecSpace().concurrency(), num_rows); if (have_diagonal_given) { Kokkos::deep_copy(inverse_diagonal, this->given_inverse_diagonal); @@ -839,7 +839,7 @@ class ClusterGaussSeidel { this->handle->get_suggested_team_size(suggested_vector_size); nnz_lno_t rows_per_team = this->handle->get_team_work_size( - suggested_team_size, MyExecSpace::concurrency(), num_rows); + suggested_team_size, MyExecSpace().concurrency(), num_rows); // Get clusters per team. Round down to favor finer granularity, since // this is sensitive to load imbalance nnz_lno_t clusters_per_team = diff --git a/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp b/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp index 313e398620..c67757a65f 100644 --- a/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp +++ b/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp @@ -1111,7 +1111,7 @@ class PointGaussSeidel { brows, permuted_xadj, num_values_in_l1, num_large_rows); num_big_rows = KOKKOSKERNELS_MACRO_MIN( num_large_rows, - (size_type)(MyExecSpace::concurrency() / suggested_vector_size)); + (size_type)(MyExecSpace().concurrency() / suggested_vector_size)); // std::cout << "num_big_rows:" << num_big_rows << std::endl; if (KokkosKernels::Impl::kk_is_gpu_exec_space()) { @@ -1389,7 +1389,7 @@ class PointGaussSeidel { int suggested_team_size = this->handle->get_suggested_team_size(suggested_vector_size); nnz_lno_t rows_per_team = this->handle->get_team_work_size( - suggested_team_size, MyExecSpace::concurrency(), num_rows); + suggested_team_size, MyExecSpace().concurrency(), num_rows); nnz_lno_t block_size = gsHandle->get_block_size(); nnz_lno_t block_matrix_size = block_size * block_size; @@ -1590,7 +1590,7 @@ class PointGaussSeidel { int suggested_team_size = this->handle->get_suggested_team_size(suggested_vector_size); nnz_lno_t team_row_chunk_size = this->handle->get_team_work_size( - suggested_team_size, MyExecSpace::concurrency(), brows); + suggested_team_size, MyExecSpace().concurrency(), brows); // size_t shmem_size_to_use = this->handle->get_shmem_size(); size_t l1_shmem_size = gsHandle->get_level_1_mem(); diff --git a/sparse/impl/KokkosSparse_spgemm_impl.hpp b/sparse/impl/KokkosSparse_spgemm_impl.hpp index dadc944b09..776579ded2 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl.hpp @@ -625,7 +625,7 @@ class KokkosSPGEMM { valsB(), transposeB(transposeB_), shmem_size(handle_->get_shmem_size()), - concurrency(MyExecSpace::concurrency()), + concurrency(MyExecSpace().concurrency()), use_dynamic_schedule(handle_->is_dynamic_scheduling()), KOKKOSKERNELS_VERBOSE(handle_->get_verbose()), MyEnumExecSpace(this->handle->get_handle_exec_space()), @@ -656,7 +656,7 @@ class KokkosSPGEMM { valsB(valsB_), transposeB(transposeB_), shmem_size(handle_->get_shmem_size()), - concurrency(MyExecSpace::concurrency()), + concurrency(MyExecSpace().concurrency()), use_dynamic_schedule(handle_->is_dynamic_scheduling()), KOKKOSKERNELS_VERBOSE(handle_->get_verbose()), MyEnumExecSpace(this->handle->get_handle_exec_space()), diff --git a/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp b/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp index 94cec7af04..50d3681eed 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp @@ -1589,7 +1589,7 @@ void KokkosSPGEMM nnz) && (nnz_per_team > 256)) nnz_per_team /= 2; rows_per_team = (nnz_per_team + nnz_per_row - 1) / nnz_per_row; diff --git a/sparse/impl/KokkosSparse_spmv_struct_impl.hpp b/sparse/impl/KokkosSparse_spmv_struct_impl.hpp index 71387b5d06..6949a86866 100644 --- a/sparse/impl/KokkosSparse_spmv_struct_impl.hpp +++ b/sparse/impl/KokkosSparse_spmv_struct_impl.hpp @@ -810,7 +810,7 @@ int64_t spmv_struct_launch_parameters(int64_t numInterior, int64_t nnz, if (rows_per_team < 0) { int64_t nnz_per_team = 4096; - int64_t conc = execution_space::concurrency(); + int64_t conc = execution_space().concurrency(); while ((conc * nnz_per_team * 4 > nnz) && (nnz_per_team > 256)) nnz_per_team /= 2; rows_per_team = (nnz_per_team + nnz_per_row - 1) / nnz_per_row; From bf9ef5b03e4d120de261c15aea854a38a91646ce Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 30 Nov 2022 11:31:27 -0700 Subject: [PATCH 170/226] SWAP: adding implementation of level 1 BLAS function This commit provides a basic native implementation, ETI and TPL layers as well as basic testing of the capability. --- blas/CMakeLists.txt | 7 + .../KokkosBlas1_swap_eti_spec_inst.cpp.in | 54 ++ .../KokkosBlas1_swap_eti_spec_avail.hpp.in | 51 ++ .../KokkosBlas1_swap_eti_spec_decl.hpp.in | 51 ++ blas/impl/KokkosBlas1_swap_impl.hpp | 82 +++ blas/impl/KokkosBlas1_swap_spec.hpp | 165 +++++ blas/src/KokkosBlas1_swap.hpp | 143 +++++ blas/tpls/KokkosBlas1_swap_tpl_spec_avail.hpp | 193 ++++++ blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp | 590 ++++++++++++++++++ blas/tpls/KokkosBlas_Host_tpl.cpp | 45 +- blas/tpls/KokkosBlas_Host_tpl.hpp | 2 + blas/unit_test/Test_Blas.hpp | 1 + blas/unit_test/Test_Blas1_swap.hpp | 96 +++ 13 files changed, 1479 insertions(+), 1 deletion(-) create mode 100644 blas/eti/generated_specializations_cpp/swap/KokkosBlas1_swap_eti_spec_inst.cpp.in create mode 100644 blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_avail.hpp.in create mode 100644 blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_decl.hpp.in create mode 100644 blas/impl/KokkosBlas1_swap_impl.hpp create mode 100644 blas/impl/KokkosBlas1_swap_spec.hpp create mode 100644 blas/src/KokkosBlas1_swap.hpp create mode 100644 blas/tpls/KokkosBlas1_swap_tpl_spec_avail.hpp create mode 100644 blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp create mode 100644 blas/unit_test/Test_Blas1_swap.hpp diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt index 5b7d3654f2..ed426ed131 100644 --- a/blas/CMakeLists.txt +++ b/blas/CMakeLists.txt @@ -276,6 +276,13 @@ KOKKOSKERNELS_GENERATE_ETI(Blas1_rotmg rotmg TYPE_LISTS REAL_FLOATS LAYOUTS DEVICES ) +KOKKOSKERNELS_GENERATE_ETI(Blas1_swap swap + COMPONENTS blas + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS LAYOUTS DEVICES +) + KOKKOSKERNELS_GENERATE_ETI(Blas2_gemv gemv COMPONENTS blas HEADER_LIST ETI_HEADERS diff --git a/blas/eti/generated_specializations_cpp/swap/KokkosBlas1_swap_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/swap/KokkosBlas1_swap_eti_spec_inst.cpp.in new file mode 100644 index 0000000000..3c94c724b1 --- /dev/null +++ b/blas/eti/generated_specializations_cpp/swap/KokkosBlas1_swap_eti_spec_inst.cpp.in @@ -0,0 +1,54 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + + +#define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true +#include "KokkosKernels_config.h" +#include "KokkosBlas1_swap_spec.hpp" + +namespace KokkosBlas { +namespace Impl { +@BLAS1_SWAP_ETI_INST_BLOCK@ +} //IMPL +} //Kokkos diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_avail.hpp.in new file mode 100644 index 0000000000..fb16463a27 --- /dev/null +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_avail.hpp.in @@ -0,0 +1,51 @@ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_SWAP_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_SWAP_ETI_SPEC_AVAIL_HPP_ + +namespace KokkosBlas { +namespace Impl { +@BLAS1_SWAP_ETI_AVAIL_BLOCK@ + } //IMPL +} //Kokkos +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_decl.hpp.in new file mode 100644 index 0000000000..91239f78b0 --- /dev/null +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_decl.hpp.in @@ -0,0 +1,51 @@ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 0.9: Linear Algebra and Graph Kernels +// Copyright 2017 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_SWAP_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_SWAP_ETI_SPEC_DECL_HPP_ + +namespace KokkosBlas { +namespace Impl { +@BLAS1_SWAP_ETI_DECL_BLOCK@ + } //IMPL +} //Kokkos +#endif diff --git a/blas/impl/KokkosBlas1_swap_impl.hpp b/blas/impl/KokkosBlas1_swap_impl.hpp new file mode 100644 index 0000000000..1336279a2d --- /dev/null +++ b/blas/impl/KokkosBlas1_swap_impl.hpp @@ -0,0 +1,82 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSBLAS1_SWAP_IMPL_HPP_ +#define KOKKOSBLAS1_SWAP_IMPL_HPP_ + +#include +#include +// #include + +namespace KokkosBlas { +namespace Impl { + +template +struct swap_functor { + using scalar_type = typename XVector::non_const_value_type; + + XVector X; + YVector Y; + + swap_functor(XVector const& X_, YVector const& Y_) : X(X_), Y(Y_) {} + + KOKKOS_INLINE_FUNCTION + void operator()(int const entryIdx) const { + scalar_type const temp = Y(entryIdx); + Y(entryIdx) = X(entryIdx); + X(entryIdx) = temp; + } +}; + +template +void Swap_Invoke(ExecutionSpace const& space, XVector const& X, + YVector const& Y) { + Kokkos::RangePolicy swap_policy(space, 0, X.extent(0)); + swap_functor swap_func(X, Y); + Kokkos::parallel_for("KokkosBlas::swap", swap_policy, swap_func); +} + +} // namespace Impl +} // namespace KokkosBlas + +#endif // KOKKOSBLAS1_SWAP_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_swap_spec.hpp b/blas/impl/KokkosBlas1_swap_spec.hpp new file mode 100644 index 0000000000..b1d1e55f12 --- /dev/null +++ b/blas/impl/KokkosBlas1_swap_spec.hpp @@ -0,0 +1,165 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_SWAP_SPEC_HPP_ +#define KOKKOSBLAS1_SWAP_SPEC_HPP_ + +#include +#include + +// Include the actual functors +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +#include +#endif + +namespace KokkosBlas { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct swap_eti_spec_avail { + enum : bool { value = false }; +}; +} // namespace Impl +} // namespace KokkosBlas + +// +// Macro for declaration of full specialization availability +// KokkosBlas::Impl::Swap. This is NOT for users!!! All +// the declarations of full specializations go in this header file. +// We may spread out definitions (see _INST macro below) across one or +// more .cpp files. +// +#define KOKKOSBLAS1_SWAP_ETI_SPEC_AVAIL(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ + template <> \ + struct swap_eti_spec_avail< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +// Include the actual specialization declarations +#include +#include + +namespace KokkosBlas { +namespace Impl { + +// Unification layer +template ::value, + bool eti_spec_avail = + swap_eti_spec_avail::value> +struct Swap { + static void swap(ExecutionSpace const& space, XVector const& X, + YVector const& Y); +}; + +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +//! Full specialization of Swap. +template +struct Swap { + static void swap(ExecutionSpace const& space, XVector const& X, + YVector const& Y) { + Kokkos::Profiling::pushRegion(KOKKOSKERNELS_IMPL_COMPILE_LIBRARY + ? "KokkosBlas::swap[ETI]" + : "KokkosBlas::swap[noETI]"); +#ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION + if (KOKKOSKERNELS_IMPL_COMPILE_LIBRARY) + printf("KokkosBlas1::swap<> ETI specialization for < %s, %s, %s >\n", + typeid(ExecutionSpace).name(), typeid(XVector).name(), + typeid(YVector).name()); + else { + printf("KokkosBlas1::swap<> non-ETI specialization for < %s, %s, %s >\n", + typeid(ExecutionSpace).name(), typeid(XVector).name(), + typeid(YVector).name()); + } +#endif + Swap_Invoke(space, X, Y); + Kokkos::Profiling::popRegion(); + } +}; +#endif + +} // namespace Impl +} // namespace KokkosBlas + +// +// Macro for declaration of full specialization of +// KokkosBlas::Impl::Swap. This is NOT for users!!! All +// the declarations of full specializations go in this header file. +// We may spread out definitions (see _DEF macro below) across one or +// more .cpp files. +// +#define KOKKOSBLAS1_SWAP_ETI_SPEC_DECL(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ + extern template struct Swap< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + false, true>; + +// +// Macro for definition of full specialization of +// KokkosBlas::Impl::Swap. This is NOT for users!!! We +// use this macro in one or more .cpp files in this directory. +// +#define KOKKOSBLAS1_SWAP_ETI_SPEC_INST(SCALAR, LAYOUT, EXECSPACE, MEMSPACE) \ + template struct Swap< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + false, true>; + +#include +#include + +#endif // KOKKOSBLAS1_SWAP_SPEC_HPP_ diff --git a/blas/src/KokkosBlas1_swap.hpp b/blas/src/KokkosBlas1_swap.hpp new file mode 100644 index 0000000000..73989dd3ca --- /dev/null +++ b/blas/src/KokkosBlas1_swap.hpp @@ -0,0 +1,143 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_SWAP_HPP_ +#define KOKKOSBLAS1_SWAP_HPP_ + +#include + +namespace KokkosBlas { + +/// \brief Swaps the entries of vectors x and y. +/// +/// \tparam execution_space an execution space to perform parallel work +/// \tparam XVector Type of the first vector x; a 1-D Kokkos::View. +/// \tparam YVector Type of the first vector y; a 1-D Kokkos::View. +/// +/// \param space [in] execution space passed to execution policies +/// \param x [in/out] 1-D View. +/// \param y [in/out] 1-D View. +/// +/// \return x and y with swapped values, note that this is akin to +/// performing a deep_copy, swapping pointers inside view +/// can only be performed if no aliasing, subviews, etc... +/// exist, which cannot be asserted by this function. +template +void swap(execution_space const& space, XVector const& x, YVector const& y) { + // Assert properties of XVector + static_assert(Kokkos::is_view::value, + "KokkosBlas::swap: XVector must be a Kokkos::View."); + static_assert(XVector::rank == 1, + "KokkosBlas::swap: " + "Input vector x must have rank 1."); + static_assert(std::is_same_v, + "KokkosBlas::swap: XVector must store non const values."); + static_assert( + Kokkos::SpaceAccessibility::accessible, + "swap: execution_space cannot access data in XVector"); + + // Assert properties of YVector, could probably use a function for this as + // XVector and YVector are required to have identical properties... + static_assert(Kokkos::is_view::value, + "KokkosBlas::swap: YVector must be a Kokkos::View."); + static_assert(YVector::rank == 1, + "KokkosBlas::swap: " + "Input vector y must have rank 1."); + static_assert(std::is_same_v, + "KokkosBlas::swap: YVector must store non const values."); + static_assert( + Kokkos::SpaceAccessibility::accessible, + "swap: execution_space cannot access data in YVector"); + + using XVector_Internal = Kokkos::View< + typename XVector::non_const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + Kokkos::Device, + Kokkos::MemoryTraits >; + using YVector_Internal = Kokkos::View< + typename YVector::non_const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + Kokkos::Device, + Kokkos::MemoryTraits >; + + XVector_Internal X(x); + YVector_Internal Y(y); + + // Runtime check of the length of X and Y + if (static_cast(X.extent(0)) != static_cast(Y.extent(0))) { + throw std::runtime_error("X and Y must have equal extents!"); + } + + Kokkos::Profiling::pushRegion("KokkosBlas::swap"); + // If X.extent(0) == 0, do nothing + if (X.extent(0) != 0) { + Impl::Swap::swap(space, + X, Y); + } + Kokkos::Profiling::popRegion(); +} + +/// \brief Swaps the entries of vectors x and y. +/// +/// \tparam XVector Type of the first vector x; a 1-D Kokkos::View. +/// \tparam YVector Type of the first vector y; a 1-D Kokkos::View. +/// +/// \param x [in/out] 1-D View. +/// \param y [in/out] 1-D View. +/// +/// \return x and y with swapped values. +template +void swap(const XVector& x, const YVector& y) { + const typename XVector::execution_space space = + typename XVector::execution_space(); + swap(space, x, y); +} + +} // namespace KokkosBlas + +#endif // KOKKOSBLAS1_SWAP_HPP_ diff --git a/blas/tpls/KokkosBlas1_swap_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_swap_tpl_spec_avail.hpp new file mode 100644 index 0000000000..84d438f030 --- /dev/null +++ b/blas/tpls/KokkosBlas1_swap_tpl_spec_avail.hpp @@ -0,0 +1,193 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_HPP_ + +namespace KokkosBlas { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct swap_tpl_spec_avail { + enum : bool { value = false }; +}; +} // namespace Impl +} // namespace KokkosBlas + +namespace KokkosBlas { +namespace Impl { + +// Generic Host side BLAS (could be MKL or whatever) +#ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS +#define KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_BLAS(SCALAR, LAYOUT, EXECSPACE) \ + template <> \ + struct swap_tpl_spec_avail< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +#ifdef KOKKOS_ENABLE_SERIAL +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutLeft, Kokkos::Serial) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutLeft, Kokkos::Serial) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::Serial) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::LayoutLeft, + Kokkos::Serial) +#endif + +#ifdef KOKKOS_ENABLE_OPENMP +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_BLAS(double, Kokkos::LayoutLeft, Kokkos::OpenMP) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_BLAS(float, Kokkos::LayoutLeft, Kokkos::OpenMP) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::OpenMP) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_BLAS(Kokkos::complex, Kokkos::LayoutLeft, + Kokkos::OpenMP) +#endif +#endif + +// cuBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS +#define KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(SCALAR, LAYOUT, EXECSPACE, \ + MEMSPACE) \ + template <> \ + struct swap_tpl_spec_avail< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace) + +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutRight, + Kokkos::Cuda, Kokkos::CudaSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace) + +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace) + +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(double, Kokkos::LayoutRight, + Kokkos::Cuda, Kokkos::CudaUVMSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(float, Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_CUBLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace) +#endif + +// rocBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS +#define KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_ROCBLAS(SCALAR, LAYOUT, EXECSPACE, \ + MEMSPACE) \ + template <> \ + struct swap_tpl_spec_avail< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ + }; + +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, + Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace) + +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_ROCBLAS(double, Kokkos::LayoutRight, + Kokkos::HIP, Kokkos::HIPSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_ROCBLAS(float, Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace) +KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, + Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace) +#endif + +} // namespace Impl +} // namespace KokkosBlas +#endif // KOKKOSBLAS1_SWAP_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp new file mode 100644 index 0000000000..dce52012e5 --- /dev/null +++ b/blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp @@ -0,0 +1,590 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSBLAS1_SWAP_TPL_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_SWAP_TPL_SPEC_DECL_HPP_ + +namespace KokkosBlas { +namespace Impl { + +namespace { +template +inline void swap_print_specialization() { +#ifdef KOKKOSKERNELS_ENABLE_CHECK_SPECIALIZATION + printf("KokkosBlas::swap<> TPL Blas specialization for < %s, %s, %s >\n", + typeid(XVector).name(), typeid(YVector).name(), + typeid(ExecutionSpace).name); +#endif +} +} // namespace +} // namespace Impl +} // namespace KokkosBlas + +// Generic Host side BLAS (could be MKL or whatever) +#ifdef KOKKOSKERNELS_ENABLE_TPL_BLAS +#include "KokkosBlas_Host_tpl.hpp" + +namespace KokkosBlas { +namespace Impl { + +#define KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Swap, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using XVector = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using YVector = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void swap(EXECSPACE const& /*space*/, XVector const& X, \ + YVector const& Y) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::swap[TPL_BLAS,double]"); \ + HostBlas::swap(X.extent_int(0), X.data(), 1, Y.data(), 1); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Swap, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using XVector = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using YVector = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void swap(EXECSPACE const& /*space*/, XVector const& X, \ + YVector const& Y) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::swap[TPL_BLAS,float]"); \ + HostBlas::swap(X.extent_int(0), X.data(), 1, Y.data(), 1); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Swap*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using XVector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using YVector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + static void swap(EXECSPACE const& /*space*/, XVector const& X, \ + YVector const& Y) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::swap[TPL_BLAS,complex]"); \ + HostBlas>::swap( \ + X.extent_int(0), reinterpret_cast*>(X.data()), \ + 1, reinterpret_cast*>(Y.data()), 1); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_BLAS(LAYOUT, EXECSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Swap*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using XVector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using YVector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& /*space*/, XVector const& X, \ + YVector const& Y) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::swap[TPL_BLAS,complex]"); \ + HostBlas>::swap( \ + X.extent_int(0), reinterpret_cast*>(X.data()), \ + 1, reinterpret_cast*>(Y.data()), 1); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#ifdef KOKKOS_ENABLE_SERIAL +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, true) +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, false) + +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, true) +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, false) + +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, true) +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, false) + +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, true) +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::Serial, false) +#endif + +#ifdef KOKKOS_ENABLE_OPENMP +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, true) +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, false) + +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, true) +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, false) + +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, true) +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, false) + +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, true) +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_BLAS(Kokkos::LayoutLeft, Kokkos::OpenMP, false) +#endif + +} // namespace Impl +} // namespace KokkosBlas + +#endif // KOKKOSKERNELS_ENABLE_TPL_BLAS + +// cuBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUBLAS +#include + +namespace KokkosBlas { +namespace Impl { + +#define KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Swap< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using XVector = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using YVector = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void swap(EXECSPACE const& space, XVector const& X, \ + YVector const& Y) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::swap[TPL_CUBLAS,double]"); \ + swap_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasDswap( \ + singleton.handle, X.extent_int(0), X.data(), 1, Y.data(), 1)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Swap< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using XVector = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using YVector = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void swap(EXECSPACE const& space, XVector const& X, \ + YVector const& Y) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::swap[TPL_CUBLAS,float]"); \ + swap_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL(cublasSswap( \ + singleton.handle, X.extent_int(0), X.data(), 1, Y.data(), 1)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Swap*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using XVector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using YVector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + static void swap(EXECSPACE const& space, XVector const& X, \ + YVector const& Y) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::swap[TPL_CUBLAS,complex]"); \ + swap_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasZswap(singleton.handle, X.extent_int(0), \ + reinterpret_cast(X.data()), 1, \ + reinterpret_cast(Y.data()), 1)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_CUBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Swap*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using XVector = Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using YVector = Kokkos::View, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + static void rot(EXECSPACE const& space, XVector const& X, \ + YVector const& Y) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::swap[TPL_CUBLAS,complex]"); \ + swap_print_specialization(); \ + KokkosBlas::Impl::CudaBlasSingleton& singleton = \ + KokkosBlas::Impl::CudaBlasSingleton::singleton(); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasSetStream(singleton.handle, space.cuda_stream())); \ + KOKKOS_CUBLAS_SAFE_CALL_IMPL( \ + cublasCswap(singleton.handle, X.extent_int(0), \ + reinterpret_cast(X.data()), 1, \ + reinterpret_cast(Y.data()), 1)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) + +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) + +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) + +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, true) +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaSpace, false) +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutLeft, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, true) +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_CUBLAS(Kokkos::LayoutRight, Kokkos::Cuda, + Kokkos::CudaUVMSpace, false) +} // namespace Impl +} // namespace KokkosBlas +#endif // KOKKOSKERNELS_ENABLE_TPL_CUBLAS + +// rocBLAS +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS +#include + +namespace KokkosBlas { +namespace Impl { + +#define KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Swap< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using XVector = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using YVector = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void swap(EXECSPACE const& space, XVector const& X, \ + YVector const& Y) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::swap[TPL_ROCBLAS,double]"); \ + swap_print_specialization(); \ + KokkosBlas::Impl::RocBlasSingleton& singleton = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_stream(singleton.handle, space.hip_stream())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_dswap( \ + singleton.handle, X.extent_int(0), X.data(), 1, Y.data(), 1)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Swap< \ + EXECSPACE, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using XVector = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using YVector = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void swap(EXECSPACE const& space, XVector const& X, \ + YVector const& Y) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::swap[TPL_ROCBLAS,float]"); \ + swap_print_specialization(); \ + KokkosBlas::Impl::RocBlasSingleton& singleton = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_stream(singleton.handle, space.hip_stream())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_sswap( \ + singleton.handle, X.extent_int(0), X.data(), 1, Y.data(), 1)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Swap*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using XVector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using YVector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + static void swap(EXECSPACE const& space, XVector const& X, \ + YVector const& Y) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::swap[TPL_ROCBLAS,complex_double]"); \ + swap_print_specialization(); \ + KokkosBlas::Impl::RocBlasSingleton& singleton = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_stream(singleton.handle, space.hip_stream())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_zswap( \ + singleton.handle, X.extent_int(0), \ + reinterpret_cast(X.data()), 1, \ + reinterpret_cast(Y.data()), 1)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_ROCBLAS(LAYOUT, EXECSPACE, MEMSPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct Swap*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>, \ + true, ETI_SPEC_AVAIL> { \ + using XVector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + using YVector = Kokkos::View*, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits>; \ + static void swap(EXECSPACE const& space, XVector const& X, \ + YVector const& Y) { \ + Kokkos::Profiling::pushRegion( \ + "KokkosBlas::swap[TPL_ROCBLAS,complex_float]"); \ + swap_print_specialization(); \ + KokkosBlas::Impl::RocBlasSingleton& singleton = \ + KokkosBlas::Impl::RocBlasSingleton::singleton(); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL( \ + rocblas_set_stream(singleton.handle, space.hip_stream())); \ + KOKKOS_ROCBLAS_SAFE_CALL_IMPL(rocblas_cswap( \ + singleton.handle, X.extent_int(0), \ + reinterpret_cast(X.data()), 1, \ + reinterpret_cast(Y.data()), 1)); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, false) +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_DSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, false) + +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, false) +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_SSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, false) + +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, false) +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_ZSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, false) + +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutLeft, Kokkos::HIP, + Kokkos::HIPSpace, false) +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, true) +KOKKOSBLAS1_CSWAP_TPL_SPEC_DECL_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIP, + Kokkos::HIPSpace, false) +} // namespace Impl +} // namespace KokkosBlas +#endif // KOKKOSKERNELS_ENABLE_TPL_ROCBLAS + +#endif diff --git a/blas/tpls/KokkosBlas_Host_tpl.cpp b/blas/tpls/KokkosBlas_Host_tpl.cpp index c354998063..b847de087e 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.cpp +++ b/blas/tpls/KokkosBlas_Host_tpl.cpp @@ -155,7 +155,7 @@ void F77_BLAS_MANGLE(zrotg, ZROTG)(std::complex* a, std::complex* s); /// -/// rotmg +/// rotm /// void F77_BLAS_MANGLE(srotm, SROTM)(const int* n, float* X, const int* incx, float* Y, const int* incy, @@ -172,6 +172,20 @@ void F77_BLAS_MANGLE(srotmg, SROTMG)(float* d1, float* d2, float* x1, void F77_BLAS_MANGLE(drotmg, DROTMG)(double* d1, double* d2, double* x1, const double* y1, double* param); +/// +/// swap +/// +void F77_BLAS_MANGLE(sswap, SSWAP)(int const* N, float* X, int const* incx, + float* Y, int const* incy); +void F77_BLAS_MANGLE(dswap, DSWAP)(int const* N, double* X, int const* incx, + double* Y, int const* incy); +void F77_BLAS_MANGLE(cswap, CSWAP)(int const* N, std::complex* X, + int const* incx, std::complex* Y, + int const* incy); +void F77_BLAS_MANGLE(zswap, ZSWAP)(int const* N, std::complex* X, + int const* incx, std::complex* Y, + int const* incy); + /// /// Gemv /// @@ -400,6 +414,11 @@ void F77_BLAS_MANGLE(zscal, #define F77_FUNC_SROTMG F77_BLAS_MANGLE(srotmg, SROTMG) #define F77_FUNC_DROTMG F77_BLAS_MANGLE(drotmg, DROTMG) +#define F77_FUNC_SSWAP F77_BLAS_MANGLE(sswap, SSWAP) +#define F77_FUNC_DSWAP F77_BLAS_MANGLE(dswap, DSWAP) +#define F77_FUNC_CSWAP F77_BLAS_MANGLE(cswap, CSWAP) +#define F77_FUNC_ZSWAP F77_BLAS_MANGLE(zswap, ZSWAP) + #define F77_FUNC_SGEMV F77_BLAS_MANGLE(sgemv, SGEMV) #define F77_FUNC_DGEMV F77_BLAS_MANGLE(dgemv, DGEMV) #define F77_FUNC_CGEMV F77_BLAS_MANGLE(cgemv, CGEMV) @@ -494,6 +513,11 @@ void HostBlas::rotmg(float* d1, float* d2, float* x1, const float* y1, F77_FUNC_SROTMG(d1, d2, x1, y1, param); } template <> +void HostBlas::swap(int const N, float* X, int const incx, float* Y, + int const incy) { + F77_FUNC_SSWAP(&N, X, &incx, Y, &incy); +} +template <> void HostBlas::gemv(const char trans, int m, int n, const float alpha, const float* a, int lda, const float* b, int ldb, const float beta, @@ -602,6 +626,11 @@ void HostBlas::rotmg(double* d1, double* d2, double* x1, F77_FUNC_DROTMG(d1, d2, x1, y1, param); } template <> +void HostBlas::swap(int const N, double* X, int const incx, double* Y, + int const incy) { + F77_FUNC_DSWAP(&N, X, &incx, Y, &incy); +} +template <> void HostBlas::gemv(const char trans, int m, int n, const double alpha, const double* a, int lda, const double* b, int ldb, const double beta, @@ -717,6 +746,13 @@ void HostBlas >::rotg(std::complex* a, std::complex* s) { F77_FUNC_CROTG(a, b, c, s); } +template <> +void HostBlas >::swap(int const N, std::complex* X, + int const incx, + std::complex* Y, + int const incy) { + F77_FUNC_CSWAP(&N, X, &incx, Y, &incy); +} template <> void HostBlas >::gemv(const char trans, int m, int n, @@ -865,6 +901,13 @@ void HostBlas >::rotg(std::complex* a, std::complex* s) { F77_FUNC_ZROTG(a, b, c, s); } +template <> +void HostBlas >::swap(int const N, std::complex* X, + int const incx, + std::complex* Y, + int const incy) { + F77_FUNC_ZSWAP(&N, X, &incx, Y, &incy); +} template <> void HostBlas >::gemv( diff --git a/blas/tpls/KokkosBlas_Host_tpl.hpp b/blas/tpls/KokkosBlas_Host_tpl.hpp index a3fbf67b89..2c616c9d95 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.hpp +++ b/blas/tpls/KokkosBlas_Host_tpl.hpp @@ -86,6 +86,8 @@ struct HostBlas { static void rotmg(T *d1, T *d2, T *x1, const T *y1, T *param); + static void swap(int const N, T *X, int const incx, T *Y, int const incy); + static void gemv(const char trans, int m, int n, const T alpha, const T *a, int lda, const T *b, int ldb, const T beta, /* */ T *c, int ldc); diff --git a/blas/unit_test/Test_Blas.hpp b/blas/unit_test/Test_Blas.hpp index 94d7c58877..db65c05f26 100644 --- a/blas/unit_test/Test_Blas.hpp +++ b/blas/unit_test/Test_Blas.hpp @@ -25,6 +25,7 @@ #include "Test_Blas1_rotmg.hpp" #include "Test_Blas1_scal.hpp" #include "Test_Blas1_sum.hpp" +#include "Test_Blas1_swap.hpp" #include "Test_Blas1_update.hpp" // Serial Blas 1 diff --git a/blas/unit_test/Test_Blas1_swap.hpp b/blas/unit_test/Test_Blas1_swap.hpp new file mode 100644 index 0000000000..a7e4fff433 --- /dev/null +++ b/blas/unit_test/Test_Blas1_swap.hpp @@ -0,0 +1,96 @@ +#include "KokkosBlas1_swap.hpp" + +namespace Test { +namespace Impl { + +template +void test_swap(int const vector_length) { + using vector_type = VectorType; + using execution_space = typename vector_type::execution_space; + using scalar_type = typename VectorType::non_const_value_type; + using mag_type = typename Kokkos::ArithTraits::mag_type; + + // Note that Xref and Yref need to always be copies of X and Y + // hence the use of create_mirror instead of create_mirror_view. + vector_type X("X", vector_length), Y("Y", vector_length); + typename vector_type::HostMirror Xref = Kokkos::create_mirror(Y); + typename vector_type::HostMirror Yref = Kokkos::create_mirror(X); + + // Setup values in X, Y and copy them to Xref and Yref + const scalar_type range = 10 * Kokkos::ArithTraits::one(); + Kokkos::Random_XorShift64_Pool rand_pool(13718); + Kokkos::fill_random(X, rand_pool, range); + Kokkos::fill_random(Y, rand_pool, range); + + Kokkos::deep_copy(Xref, Y); + Kokkos::deep_copy(Yref, X); + + KokkosBlas::swap(X, Y); + Kokkos::fence(); + + typename vector_type::HostMirror Xtest = Kokkos::create_mirror_view(X); + typename vector_type::HostMirror Ytest = Kokkos::create_mirror_view(Y); + Kokkos::deep_copy(Xtest, X); + Kokkos::deep_copy(Ytest, Y); + + const mag_type tol = 10 * Kokkos::ArithTraits::eps(); + for (int idx = 0; idx < vector_length; ++idx) { + Test::EXPECT_NEAR_KK_REL(Xtest(idx), Xref(idx), tol); + Test::EXPECT_NEAR_KK_REL(Ytest(idx), Yref(idx), tol); + } +} + +} // namespace Impl +} // namespace Test + +template +int test_swap() { + using Vector = Kokkos::View; + + Test::Impl::test_swap(0); + Test::Impl::test_swap(10); + Test::Impl::test_swap(256); + Test::Impl::test_swap(1024); + + return 0; +} + +#if defined(KOKKOSKERNELS_INST_FLOAT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, swap_float) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::swap_float"); + test_swap(); + Kokkos::Profiling::popRegion(); +} +#endif + +#if defined(KOKKOSKERNELS_INST_DOUBLE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, swap_double) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::swap_double"); + test_swap(); + Kokkos::Profiling::popRegion(); +} +#endif + +#if defined(KOKKOSKERNELS_INST_COMPLEX_FLOAT) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, swap_complex_float) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::swap_complex_float"); + test_swap, TestExecSpace>(); + Kokkos::Profiling::popRegion(); +} +#endif + +#if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) +TEST_F(TestCategory, swap_complex_double) { + Kokkos::Profiling::pushRegion("KokkosBlas::Test::swap_complex_double"); + test_swap, TestExecSpace>(); + Kokkos::Profiling::popRegion(); +} +#endif From a26c7e059f5d9e63a784d5bbefc3b9a01d7dcd65 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Fri, 2 Dec 2022 17:00:56 -0700 Subject: [PATCH 171/226] SWAP: modifying documentation and removing commented header Adding a bit more explicit documentation about non-blocking behavior of the function. Adding function signature to the API documentation. Removing the unused header from the impl file. --- blas/impl/KokkosBlas1_swap_impl.hpp | 1 - blas/src/KokkosBlas1_swap.hpp | 7 +++++++ docs/developer/apidocs/blas1.rst | 5 +++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/blas/impl/KokkosBlas1_swap_impl.hpp b/blas/impl/KokkosBlas1_swap_impl.hpp index 1336279a2d..a1affb5414 100644 --- a/blas/impl/KokkosBlas1_swap_impl.hpp +++ b/blas/impl/KokkosBlas1_swap_impl.hpp @@ -46,7 +46,6 @@ #include #include -// #include namespace KokkosBlas { namespace Impl { diff --git a/blas/src/KokkosBlas1_swap.hpp b/blas/src/KokkosBlas1_swap.hpp index 73989dd3ca..66553ae819 100644 --- a/blas/src/KokkosBlas1_swap.hpp +++ b/blas/src/KokkosBlas1_swap.hpp @@ -63,6 +63,9 @@ namespace KokkosBlas { /// performing a deep_copy, swapping pointers inside view /// can only be performed if no aliasing, subviews, etc... /// exist, which cannot be asserted by this function. +/// +/// This function is non-blocking unless the underlying TPL requested +/// at compile time is itself blocking template void swap(execution_space const& space, XVector const& x, YVector const& y) { // Assert properties of XVector @@ -131,6 +134,10 @@ void swap(execution_space const& space, XVector const& x, YVector const& y) { /// \param y [in/out] 1-D View. /// /// \return x and y with swapped values. +/// +/// This function is non-blocking unless the underlying TPL requested +/// at compile time is itself blocking. Note that the kernel will be +/// executed on the default stream of the execution_space associted with x. template void swap(const XVector& x, const YVector& y) { const typename XVector::execution_space space = diff --git a/docs/developer/apidocs/blas1.rst b/docs/developer/apidocs/blas1.rst index bfeb7fd1bb..1a68066271 100644 --- a/docs/developer/apidocs/blas1.rst +++ b/docs/developer/apidocs/blas1.rst @@ -50,6 +50,11 @@ sum --- .. doxygenfunction:: KokkosBlas::sum(const RV &R, const XMV &X, typename std::enable_if::value, int>::type = 0) +swap +--- +.. doxygenfunction:: KokkosBlas::swap(execution_space const& space, XVector const& X, YVector const& Y) +.. doxygenfunction:: KokkosBlas::swap(XVector const& X, YVector const& Y) + update ------ .. doxygenfunction:: KokkosBlas::update From 1bad2ce9df39984a64d84108f447e89f031c61ac Mon Sep 17 00:00:00 2001 From: Damien L-G Date: Sat, 3 Dec 2022 08:19:12 -0500 Subject: [PATCH 172/226] Do not bother with CMP0074 the miminum CMake version requirement is 3.16 so setting CMP0074 to NEW is unnecessary --- CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 518340aa9f..9e4f125448 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,9 +30,6 @@ IF(NOT KOKKOSKERNELS_HAS_TRILINOS) MATH(EXPR KOKKOSKERNELS_VERSION "${KokkosKernels_VERSION_MAJOR} * 10000 + ${KokkosKernels_VERSION_MINOR} * 100 + ${KokkosKernels_VERSION_PATCH}") ENDIF() -MESSAGE(STATUS "Setting policy CMP0074 to use _ROOT variables") -CMAKE_POLICY(SET CMP0074 NEW) - INCLUDE(GNUInstallDirs) IF (KOKKOSKERNELS_HAS_TRILINOS) SET(TRILINOS_INCDIR ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR}) From 841538a16776c7263b727e717167b901314ee724 Mon Sep 17 00:00:00 2001 From: Damien L-G Date: Sat, 3 Dec 2022 08:21:59 -0500 Subject: [PATCH 173/226] Improve message at configuration time when no TPL is enabled --- CMakeLists.txt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e4f125448..2803ebd649 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -230,10 +230,14 @@ ELSE() MESSAGE(" SPARSE: ${KokkosKernels_ENABLE_SPARSE}") MESSAGE("") MESSAGE("Kokkos Kernels TPLs") - FOREACH(TPL ${KOKKOSKERNELS_TPL_LIST}) - PAD_STRING("${TPL}:" TPL_PADDED 12) - MESSAGE(" ${TPL_PADDED} ${${TPL}_FOUND_INFO}") - ENDFOREACH() + IF(KOKKOSKERNELS_TPL_LIST) + FOREACH(TPL ${KOKKOSKERNELS_TPL_LIST}) + PAD_STRING("${TPL}:" TPL_PADDED 12) + MESSAGE(" ${TPL_PADDED} ${${TPL}_FOUND_INFO}") + ENDFOREACH() + ELSE() + MESSAGE(" (None)") + ENDIF() MESSAGE("=======================") MESSAGE("") From d5ae5ce4d9f66d778ddfe67cf12b8a9d1f4490da Mon Sep 17 00:00:00 2001 From: brian-kelley Date: Mon, 5 Dec 2022 20:33:52 -0700 Subject: [PATCH 174/226] Remove "slow mem space" device ETI (#1619) Instead of instantiating kernels with all possible exec/mem1/mem2 combinations, only do exec/mem. Plug in that one memory space for both "persistent" and "temporary" space of the KokkosKernelsHandle. --- cmake/kokkoskernels_eti_devices.cmake | 8 -- graph/CMakeLists.txt | 2 +- graph/impl/KokkosGraph_color_d1_spec.hpp | 82 ++++++------ sparse/CMakeLists.txt | 14 +- .../KokkosSparse_bspgemm_numeric_spec.hpp | 126 +++++++++--------- .../impl/KokkosSparse_gauss_seidel_spec.hpp | 44 +++--- .../impl/KokkosSparse_spgemm_jacobi_spec.hpp | 72 +++++----- .../impl/KokkosSparse_spgemm_numeric_spec.hpp | 126 +++++++++--------- .../KokkosSparse_spgemm_symbolic_spec.hpp | 12 +- 9 files changed, 239 insertions(+), 247 deletions(-) diff --git a/cmake/kokkoskernels_eti_devices.cmake b/cmake/kokkoskernels_eti_devices.cmake index 9395cec564..ea03953d29 100644 --- a/cmake/kokkoskernels_eti_devices.cmake +++ b/cmake/kokkoskernels_eti_devices.cmake @@ -220,14 +220,6 @@ FOREACH(EXEC ${EXEC_SPACES}) LIST(APPEND DEVICES ${EXEC}_MEMSPACE_${MEM}) SET(${EXEC}_MEMSPACE_${MEM}_CPP_TYPE "${${EXEC}_CPP_TYPE},${MEMSPACE_${MEM}_CPP_TYPE}") SET(KOKKOSKERNELS_INST_${EXEC}_MEMSPACE_${MEM} ON) - FOREACH(MEM2 ${${EXEC}_VALID_MEM_SPACES}) - IF (KOKKOSKERNELS_INST_MEMSPACE_${MEM2}) - LIST(APPEND DEVICES_W_SLOW_SPACE ${EXEC}_MEMSPACE_${MEM}_MEMSPACE_${MEM2}) - SET(${EXEC}_MEMSPACE_${MEM}_MEMSPACE_${MEM2}_CPP_TYPE - "${${EXEC}_CPP_TYPE},${MEMSPACE_${MEM}_CPP_TYPE},${MEMSPACE_${MEM2}_CPP_TYPE}") - SET(KOKKOSKERNELS_INST_${EXEC}_MEMSPACE_${MEM}_MEMSPACE_${MEM2} ON) - ENDIF() - ENDFOREACH() ENDIF() ENDFOREACH() ENDIF() diff --git a/graph/CMakeLists.txt b/graph/CMakeLists.txt index 3d0f0751dc..e6cd0970b5 100644 --- a/graph/CMakeLists.txt +++ b/graph/CMakeLists.txt @@ -23,5 +23,5 @@ KOKKOSKERNELS_GENERATE_ETI(Graph_color_d1 color_d1 COMPONENTS graph HEADER_LIST ETI_HEADERS SOURCE_LIST SOURCES - TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES_W_SLOW_SPACE + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) diff --git a/graph/impl/KokkosGraph_color_d1_spec.hpp b/graph/impl/KokkosGraph_color_d1_spec.hpp index 09366f2c4e..67cd09a099 100644 --- a/graph/impl/KokkosGraph_color_d1_spec.hpp +++ b/graph/impl/KokkosGraph_color_d1_spec.hpp @@ -64,21 +64,21 @@ struct color_d1_eti_spec_avail { } // namespace Impl } // namespace KokkosGraph -#define KOKKOSGRAPH_COLOR_D1_ETI_SPEC_AVAIL( \ - SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE) \ - template <> \ - struct color_d1_eti_spec_avail< \ - KokkosKernels::Experimental::KokkosKernelsHandle< \ - const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>> { \ - enum : bool { value = true }; \ +#define KOKKOSGRAPH_COLOR_D1_ETI_SPEC_AVAIL(SCALAR_TYPE, ORDINAL_TYPE, \ + OFFSET_TYPE, LAYOUT_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \ + template <> \ + struct color_d1_eti_spec_avail< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>> { \ + enum : bool { value = true }; \ }; // Include the actual specialization declarations @@ -118,34 +118,34 @@ struct COLOR_D1, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ +#define KOKKOSGRAPH_COLOR_D1_ETI_SPEC_DECL(SCALAR_TYPE, ORDINAL_TYPE, \ + OFFSET_TYPE, LAYOUT_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \ + extern template struct COLOR_D1< \ + typename KokkosKernels::Experimental::KokkosKernelsHandle< \ + const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ false, true>; -#define KOKKOSGRAPH_COLOR_D1_ETI_SPEC_INST( \ - SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE) \ - template struct COLOR_D1< \ - KokkosKernels::Experimental::KokkosKernelsHandle< \ - const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ - Kokkos::View, \ - Kokkos::MemoryTraits>, \ +#define KOKKOSGRAPH_COLOR_D1_ETI_SPEC_INST(SCALAR_TYPE, ORDINAL_TYPE, \ + OFFSET_TYPE, LAYOUT_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \ + template struct COLOR_D1< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ false, true>; #include diff --git a/sparse/CMakeLists.txt b/sparse/CMakeLists.txt index 9457d5b368..c576fe962a 100644 --- a/sparse/CMakeLists.txt +++ b/sparse/CMakeLists.txt @@ -71,28 +71,28 @@ KOKKOSKERNELS_GENERATE_ETI(Sparse_spgemm_symbolic spgemm_symbolic COMPONENTS sparse HEADER_LIST ETI_HEADERS SOURCE_LIST SOURCES - TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES_W_SLOW_SPACE + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) KOKKOSKERNELS_GENERATE_ETI(Sparse_spgemm_numeric spgemm_numeric COMPONENTS sparse HEADER_LIST ETI_HEADERS SOURCE_LIST SOURCES - TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES_W_SLOW_SPACE + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) KOKKOSKERNELS_GENERATE_ETI(Sparse_bspgemm_numeric bspgemm_numeric COMPONENTS sparse HEADER_LIST ETI_HEADERS SOURCE_LIST SOURCES - TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES_W_SLOW_SPACE + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) KOKKOSKERNELS_GENERATE_ETI(Sparse_spgemm_jacobi spgemm_jacobi COMPONENTS sparse HEADER_LIST ETI_HEADERS SOURCE_LIST SOURCES - TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES_W_SLOW_SPACE + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) # NOTE: SpAdd symbolic doesn't use scalars directly, @@ -157,19 +157,19 @@ KOKKOSKERNELS_GENERATE_ETI(Sparse_gauss_seidel_symbolic gauss_seidel_symbolic COMPONENTS sparse HEADER_LIST ETI_HEADERS SOURCE_LIST SOURCES - TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES_W_SLOW_SPACE + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) KOKKOSKERNELS_GENERATE_ETI(Sparse_gauss_seidel_numeric gauss_seidel_numeric COMPONENTS sparse HEADER_LIST ETI_HEADERS SOURCE_LIST SOURCES - TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES_W_SLOW_SPACE + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) KOKKOSKERNELS_GENERATE_ETI(Sparse_gauss_seidel_apply gauss_seidel_apply COMPONENTS sparse HEADER_LIST ETI_HEADERS SOURCE_LIST SOURCES - TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES_W_SLOW_SPACE + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) diff --git a/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp b/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp index d87c49bd55..ec7a28189d 100644 --- a/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp +++ b/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp @@ -77,38 +77,38 @@ struct bspgemm_numeric_eti_spec_avail { #define KOKKOSSPARSE_BSPGEMM_NUMERIC_ETI_SPEC_AVAIL( \ SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE) \ + MEM_SPACE_TYPE) \ template <> \ struct bspgemm_numeric_eti_spec_avail< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits > > { \ enum : bool { value = true }; \ }; \ @@ -117,33 +117,33 @@ struct bspgemm_numeric_eti_spec_avail { struct bspgemm_numeric_eti_spec_avail< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits > > { \ enum : bool { value = true }; \ }; @@ -265,139 +265,139 @@ struct BSPGEMM_NUMERIC< #define KOKKOSSPARSE_BSPGEMM_NUMERIC_ETI_SPEC_DECL( \ SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE) \ + MEM_SPACE_TYPE) \ extern template struct BSPGEMM_NUMERIC< \ typename KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ false, true>; \ \ extern template struct BSPGEMM_NUMERIC< \ typename KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ false, true>; #define KOKKOSSPARSE_BSPGEMM_NUMERIC_ETI_SPEC_INST( \ SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE) \ + MEM_SPACE_TYPE) \ template struct BSPGEMM_NUMERIC< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ false, true>; \ \ template struct BSPGEMM_NUMERIC< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ false, true>; diff --git a/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp b/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp index 0681138960..6d50bc9fff 100644 --- a/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp +++ b/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp @@ -78,12 +78,12 @@ struct gauss_seidel_apply_eti_spec_avail { #define KOKKOSSPARSE_GAUSS_SEIDEL_SYMBOLIC_ETI_SPEC_AVAIL( \ SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - MEM_SPACE_TYPE, SLOW_MEM_SPACE) \ + MEM_SPACE_TYPE) \ template <> \ struct gauss_seidel_symbolic_eti_spec_avail< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, MEM_SPACE_TYPE, SLOW_MEM_SPACE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ @@ -95,12 +95,12 @@ struct gauss_seidel_apply_eti_spec_avail { #define KOKKOSSPARSE_GAUSS_SEIDEL_NUMERIC_ETI_SPEC_AVAIL( \ SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - MEM_SPACE_TYPE, SLOW_MEM_SPACE) \ + MEM_SPACE_TYPE) \ template <> \ struct gauss_seidel_numeric_eti_spec_avail< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, MEM_SPACE_TYPE, SLOW_MEM_SPACE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ @@ -115,12 +115,12 @@ struct gauss_seidel_apply_eti_spec_avail { #define KOKKOSSPARSE_GAUSS_SEIDEL_APPLY_ETI_SPEC_AVAIL( \ SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - MEM_SPACE_TYPE, SLOW_MEM_SPACE) \ + MEM_SPACE_TYPE) \ template <> \ struct gauss_seidel_apply_eti_spec_avail< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, MEM_SPACE_TYPE, SLOW_MEM_SPACE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ @@ -348,11 +348,11 @@ struct GAUSS_SEIDEL_APPLY, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ @@ -363,11 +363,11 @@ struct GAUSS_SEIDEL_APPLY, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ @@ -378,11 +378,11 @@ struct GAUSS_SEIDEL_APPLY, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ KokkosSparse::SparseMatrixFormat::BSR, \ Kokkos::View, \ @@ -397,7 +397,7 @@ struct GAUSS_SEIDEL_APPLY, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ KokkosSparse::SparseMatrixFormat::CRS, \ Kokkos::View, \ @@ -412,11 +412,11 @@ struct GAUSS_SEIDEL_APPLY, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ KokkosSparse::SparseMatrixFormat::BSR, \ Kokkos::View, \ @@ -431,7 +431,7 @@ struct GAUSS_SEIDEL_APPLY, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ KokkosSparse::SparseMatrixFormat::CRS, \ Kokkos::View, \ @@ -446,11 +446,11 @@ struct GAUSS_SEIDEL_APPLY, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ KokkosSparse::SparseMatrixFormat::BSR, \ Kokkos::View, \ @@ -471,7 +471,7 @@ struct GAUSS_SEIDEL_APPLY, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ KokkosSparse::SparseMatrixFormat::CRS, \ Kokkos::View, \ @@ -492,11 +492,11 @@ struct GAUSS_SEIDEL_APPLY, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ KokkosSparse::SparseMatrixFormat::BSR, \ Kokkos::View, \ @@ -517,7 +517,7 @@ struct GAUSS_SEIDEL_APPLY, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ KokkosSparse::SparseMatrixFormat::CRS, \ Kokkos::View, \ diff --git a/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp b/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp index 92a5250158..d95425c352 100644 --- a/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp +++ b/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp @@ -73,41 +73,41 @@ struct spgemm_jacobi_eti_spec_avail { #define KOKKOSSPARSE_SPGEMM_JACOBI_ETI_SPEC_AVAIL( \ SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE) \ + MEM_SPACE_TYPE) \ template <> \ struct spgemm_jacobi_eti_spec_avail< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits > > { \ enum : bool { value = true }; \ }; @@ -216,79 +216,79 @@ struct SPGEMM_JACOBI, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ false, true>; #define KOKKOSSPARSE_SPGEMM_JACOBI_ETI_SPEC_INST( \ SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE) \ + MEM_SPACE_TYPE) \ template struct SPGEMM_JACOBI< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ false, true>; diff --git a/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp b/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp index 258df3b4dc..0a09040559 100644 --- a/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp +++ b/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp @@ -78,38 +78,38 @@ struct spgemm_numeric_eti_spec_avail { #define KOKKOSSPARSE_SPGEMM_NUMERIC_ETI_SPEC_AVAIL( \ SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE) \ + MEM_SPACE_TYPE) \ template <> \ struct spgemm_numeric_eti_spec_avail< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits > > { \ enum : bool { value = true }; \ }; \ @@ -118,33 +118,33 @@ struct spgemm_numeric_eti_spec_avail { struct spgemm_numeric_eti_spec_avail< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits > > { \ enum : bool { value = true }; \ }; @@ -293,139 +293,139 @@ struct SPGEMM_NUMERIC< #define KOKKOSSPARSE_SPGEMM_NUMERIC_ETI_SPEC_DECL( \ SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE) \ + MEM_SPACE_TYPE) \ extern template struct SPGEMM_NUMERIC< \ typename KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ false, true>; \ \ extern template struct SPGEMM_NUMERIC< \ typename KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ false, true>; #define KOKKOSSPARSE_SPGEMM_NUMERIC_ETI_SPEC_INST( \ SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE) \ + MEM_SPACE_TYPE) \ template struct SPGEMM_NUMERIC< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ false, true>; \ \ template struct SPGEMM_NUMERIC< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, FAST_MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ Kokkos::View, \ + Kokkos::Device, \ Kokkos::MemoryTraits >, \ false, true>; diff --git a/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp b/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp index 67acfa1827..a85ac45a7a 100644 --- a/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp +++ b/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp @@ -75,12 +75,12 @@ struct spgemm_symbolic_eti_spec_avail { #define KOKKOSSPARSE_SPGEMM_SYMBOLIC_ETI_SPEC_AVAIL( \ SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, LAYOUT_TYPE, EXEC_SPACE_TYPE, \ - MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE) \ + MEM_SPACE_TYPE) \ template <> \ struct spgemm_symbolic_eti_spec_avail< \ KokkosKernels::Experimental::KokkosKernelsHandle< \ const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, MEM_SPACE_TYPE, SLOW_MEM_SPACE_TYPE>, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ @@ -223,11 +223,11 @@ struct SPGEMM_SYMBOLIC, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ @@ -247,11 +247,11 @@ struct SPGEMM_SYMBOLIC, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ Kokkos::View, \ Kokkos::MemoryTraits >, \ From b43bd02896a51579bd1bbd8fde8d1df59f4bf2ca Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Wed, 7 Dec 2022 14:10:03 -0700 Subject: [PATCH 175/226] update to version 3.7.* --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2803ebd649..af92c9690c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,7 @@ IF(NOT KOKKOSKERNELS_HAS_TRILINOS) PROJECT(KokkosKernels CXX) ENDIF() SET(KokkosKernels_VERSION_MAJOR 3) - SET(KokkosKernels_VERSION_MINOR 6) + SET(KokkosKernels_VERSION_MINOR 7) SET(KokkosKernels_VERSION_PATCH 99) SET(KokkosKernels_VERSION "${KokkosKernels_VERSION_MAJOR}.${KokkosKernels_VERSION_MINOR}.${KokkosKernels_VERSION_PATCH}") MATH(EXPR KOKKOSKERNELS_VERSION "${KokkosKernels_VERSION_MAJOR} * 10000 + ${KokkosKernels_VERSION_MINOR} * 100 + ${KokkosKernels_VERSION_PATCH}") From 76f8cce55691ef8ecf701661eedc93d9e1d6fe0c Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Thu, 1 Dec 2022 12:57:18 -0700 Subject: [PATCH 176/226] Update changelog --- CHANGELOG.md | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0ea4553b4..ad61d16222 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,148 @@ # Change Log +## [3.7.01](https://github.com/kokkos/kokkos-kernels/tree/3.7.01) (2022-12-01) +[Full Changelog](https://github.com/kokkos/kokkos-kernels/compare/3.7.00...3.7.01) + +### Bug Fixes: + +- Change template type for StaticCrsGraph in BsrMatrix [\#1531](https://github.com/kokkos/kokkos/pull/1531) +- Remove listing of undefined TPL deps [\#1568](https://github.com/kokkos/kokkos/pull/1568) +- Fix using SpGEMM with nonstandard scalar type, with MKL enabled [\#1591](https://github.com/kokkos/kokkos/pull/1591) +- Move destroying dense vector descriptors out of cuSparse sptrsv handle [\#1590](https://github.com/kokkos/kokkos/pull/1590) +- Fix `cuda_data_type_from` to return `CUDA_C_64F` for `Kokkos::complex` [\#1604](https://github.com/kokkos/kokkos/pull/1604) +- Disable compile-time check in cuda_data_type_from on supported scalar types for cuSPARSE [\#1605](https://github.com/kokkos/kokkos/pull/1605) +- Reduce register pressure in batched dense algorithms [\#1588](https://github.com/kokkos/kokkos/pull/1588) + +### Implemented enhancements: + +- Use new cusparseSpSV TPL for SPTRSV when cuSPARSE is enabled with CUDA >= 11.3 [\#1574](https://github.com/kokkos/kokkos/pull/1574) + +## [3.7.00](https://github.com/kokkos/kokkos-kernels/tree/3.7.00) (2022-08-18) +[Full Changelog](https://github.com/kokkos/kokkos-kernels/compare/3.6.01...3.7.00) + +### Features: + +#### Final Bsr algorithms implemented for multigrid: +- Sparse: bsr transpose algorithm [\#1477](https://github.com/kokkos/kokkos-kernels/pull/1477) +- BSR block SpGEMM implementation [\#1099](https://github.com/kokkos/kokkos-kernels/pull/1099) + +#### Adding batched dense linear and non-linear system solvers: +- Add batched GESV [\#1384](https://github.com/kokkos/kokkos-kernels/pull/1384) +- Newton solver: serial on device implementation of Newton's method [\#1479](https://github.com/kokkos/kokkos-kernels/pull/1479) + +#### Add sparse matrix conversion: +- Add csc2csr [\#1342](https://github.com/kokkos/kokkos-kernels/pull/1342) +- csc2csr: update Kokkos_Numeric.hpp header inclusion [\#1449](https://github.com/kokkos/kokkos-kernels/pull/1449) +- sparse: Remove csc2csr copy [\#1375](https://github.com/kokkos/kokkos-kernels/pull/1375) + +#### New documentation in readthedocs +- Added https://kokkos-kernels.readthedocs.io [\#1451](https://github.com/kokkos/kokkos-kernels/pull/1451) +- Restructure docs [\#1368](https://github.com/kokkos/kokkos-kernels/pull/1368) + +#### Fix issues with TPLs for mutlivector SPMV +- Add cuSparse TPL files for CrsMatrix-multivector product [\#1427](https://github.com/kokkos/kokkos-kernels/pull/1427) + +### Deprecations: +- Add template params to forwarding calls in deprecated KokkosKernels::… [\#1441](https://github.com/kokkos/kokkos-kernels/pull/1441) + +### Implemented enhancements: + +#### +- SPILUK: Move host allocations to symbolic [\#1480](https://github.com/kokkos/kokkos-kernels/pull/1480) +- trsv: remove assumptions about entry order within rows [\#1463](https://github.com/kokkos/kokkos-kernels/pull/1463) + +#### Hierarchical BLAS algorithms, added and moved from batched: +- Blas serial axpy and nrm2 [\#1460](https://github.com/kokkos/kokkos-kernels/pull/1460) +- Move Set/Scale unit test to KokkosBlas [\#1455](https://github.com/kokkos/kokkos-kernels/pull/1455) +- Move {Serial,Team,TeamVector} Set to KokkosBlas [\#1454](https://github.com/kokkos/kokkos-kernels/pull/1454) +- Move {Serial,Team,TeamVector}Scale to KokkosBlas [\#1448](https://github.com/kokkos/kokkos-kernels/pull/1448) + +#### Code base organization and clean-ups: +- Common Utils: removing dependency on Sparse Utils in Common Utils [\#1436](https://github.com/kokkos/kokkos-kernels/pull/1436) +- Common cleanup [\#1431](https://github.com/kokkos/kokkos-kernels/pull/1431) +- Clean-up src: re-organizing the src directory [\#1398](https://github.com/kokkos/kokkos-kernels/pull/1398) +- Sparse utils namespace [\#1439](https://github.com/kokkos/kokkos-kernels/pull/1439) + +#### perf tests updates, fixes and clean-ups: +- dot perf test: adding support for HIP and SYCL backend [\#1453](https://github.com/kokkos/kokkos-kernels/pull/1453) +- Add verbosity parameter to GMRES example. Turn off for testing. [\#1385](https://github.com/kokkos/kokkos-kernels/pull/1385) +- KokkosSparse_spiluk.cpp perf test: add int-int guards to cusparse codes [\#1369](https://github.com/kokkos/kokkos-kernels/pull/1369) +- perf_test/blas: Check ARMPL build version [\#1352](https://github.com/kokkos/kokkos-kernels/pull/1352) +- Clean-up batched block tridiag perf test [\#1343](https://github.com/kokkos/kokkos-kernels/pull/1343) +- Reduce lots of macro duplication in sparse unit tests [\#1340](https://github.com/kokkos/kokkos-kernels/pull/1340) + +#### Infrastructure changes: ETI and testing upgrades, minor fixes +- sycl: re-enabling test now that dpcpp has made progress [\#1473](https://github.com/kokkos/kokkos-kernels/pull/1473) +- Only instantiate Kokkos's default Cuda mem space [\#1361](https://github.com/kokkos/kokkos-kernels/pull/1361) +- Sparse and CI updates [\#1411](https://github.com/kokkos/kokkos-kernels/pull/1411) +- Newer sparse tests were not following the new testing pattern [\#1356](https://github.com/kokkos/kokkos-kernels/pull/1356) +- Add ETI for D1 coloring [\#1401](https://github.com/kokkos/kokkos-kernels/pull/1401) +- Add ETI to SpAdd (symbolic and numeric) [\#1399](https://github.com/kokkos/kokkos-kernels/pull/1399) +- Reformat example/fenl files changed in 1382 [\#1464](https://github.com/kokkos/kokkos-kernels/pull/1464) +- Change Controls::getParameter error message from stdout to stderr [\#1416](https://github.com/kokkos/kokkos-kernels/pull/1416) + +#### Kokkos alignment: update our implementations to use newer Kokkos features +- Arith traits integral nan [\#1438](https://github.com/kokkos/kokkos-kernels/pull/1438) +- Kokkos_ArithTraits: re-implementation using Kokkos Core [\#1406](https://github.com/kokkos/kokkos-kernels/pull/1406) +- Value-initialize result of MaxLoc reduction to avoid maybe uninitialized warning [\#1383](https://github.com/kokkos/kokkos-kernels/pull/1383) +- Remove volatile qualifiers in reducer join(), init(), and operator+= methods [\#1382](https://github.com/kokkos/kokkos-kernels/pull/1382) + +#### BLAS and batched algorithms updates +- Update Batched GMRES [\#1392](https://github.com/kokkos/kokkos-kernels/pull/1392) +- GEMV: accumulate in float for scalar = bhalf_t [\#1360](https://github.com/kokkos/kokkos-kernels/pull/1360) +- Restore BLAS-1 MV paths for 1 column [\#1354](https://github.com/kokkos/kokkos-kernels/pull/1354) + +#### Sparse and Graph updates +- Minor updates to cluster Gauss-Seidel [\#1372](https://github.com/kokkos/kokkos-kernels/pull/1372) +- Add unit test for BsrMatrix and BlockCrsMatrix spmv [\#1338](https://github.com/kokkos/kokkos-kernels/pull/1338) +- Refactor SPGEMM MKL Impl [\#1244](https://github.com/kokkos/kokkos-kernels/pull/1244) +- D1 coloring: remove unused but set variable [\#1403](https://github.com/kokkos/kokkos-kernels/pull/1403) + +#### half precision paper +- Minor changes for half precision paper [\#1429](https://github.com/kokkos/kokkos-kernels/pull/1429) +- Add benchmarks for us-rse escience 2022 half precision paper [\#1422](https://github.com/kokkos/kokkos-kernels/pull/1422) + + +### Bug Fixes: +- TPLs: adding CUBLAS in the list of dependencies [\#1482](https://github.com/kokkos/kokkos-kernels/pull/1482) +- Fix MKL build errors [\#1478](https://github.com/kokkos/kokkos-kernels/pull/1478) +- Fixup drop layout template param in rank-0 views [\#1476](https://github.com/kokkos/kokkos-kernels/pull/1476) +- BLAS: fixing test that access results before synching [\#1472](https://github.com/kokkos/kokkos-kernels/pull/1472) +- Fix D1 color ETI with both CudaSpace and UVM [\#1471](https://github.com/kokkos/kokkos-kernels/pull/1471) +- Fix arithtraits warning [\#1468](https://github.com/kokkos/kokkos-kernels/pull/1468) +- Fix build when double not instantiated [\#1467](https://github.com/kokkos/kokkos-kernels/pull/1467) +- Fix -Werror [\#1466](https://github.com/kokkos/kokkos-kernels/pull/1466) +- Fix GitHub CI failing on broken develop [\#1461](https://github.com/kokkos/kokkos-kernels/pull/1461) +- HIP: fix warning from ExecSpaceUtils and GEMV [\#1459](https://github.com/kokkos/kokkos-kernels/pull/1459) +- Removes a duplicate cuda_data_type_from when KOKKOS_HALF_T_IS_FLOAT [\#1456](https://github.com/kokkos/kokkos-kernels/pull/1456) +- Fix incorrect function call in KokkosBatched::TeamGEMV unit test [\#1444](https://github.com/kokkos/kokkos-kernels/pull/1444) +- Fix SYCL nightly test [\#1419](https://github.com/kokkos/kokkos-kernels/pull/1419) +- Fix issues with cuSparse TPL availability for BsrMatrix SpMV [\#1418](https://github.com/kokkos/kokkos-kernels/pull/1418) +- SpMV: fixing issues with unit-tests tolerance [\#1412](https://github.com/kokkos/kokkos-kernels/pull/1412) +- Address 1409 [\#1410](https://github.com/kokkos/kokkos-kernels/pull/1410) +- Fix colliding include guards (copy-paste mistake) [\#1408](https://github.com/kokkos/kokkos-kernels/pull/1408) +- src/sparse: Fix & check for fence post errors [\#1405](https://github.com/kokkos/kokkos-kernels/pull/1405) +- Bspgemm fixes [\#1396](https://github.com/kokkos/kokkos-kernels/pull/1396) +- Fix unused parameter warnings in GEMM test. [\#1381](https://github.com/kokkos/kokkos-kernels/pull/1381) +- Fixes code deprecation warnings. [\#1379](https://github.com/kokkos/kokkos-kernels/pull/1379) +- Fix sign-compare warning in SPMV perf test [\#1371](https://github.com/kokkos/kokkos-kernels/pull/1371) +- Minor MKL fixes [\#1365](https://github.com/kokkos/kokkos-kernels/pull/1365) +- perf_test/batched: Temporarily disable tests [\#1359](https://github.com/kokkos/kokkos-kernels/pull/1359) +- Fix nightly builds following promotion of the math functions in Kokkos [\#1339](https://github.com/kokkos/kokkos-kernels/pull/1339) + + +## [3.6.01](https://github.com/kokkos/kokkos-kernels/tree/3.6.01) (2022-05-23) +[Full Changelog](https://github.com/kokkos/kokkos-kernels/compare/3.6.00...3.6.01) + +### Bug Fixes and Improvements: + +- Improve spiluk numeric phase to avoid race conditions and processing in chunks [\#1390](https://github.com/kokkos/kokkos-kernels/pull/1390) +- Improve sptrsv symbolic phase performance (level scheduling) [\#1380](https://github.com/kokkos/kokkos-kernels/pull/1380) +- Restore BLAS-1 MV paths for 1 column [\#1354](https://github.com/kokkos/kokkos-kernels/pull/1354) +- Fix check that view has const type [\#1370](https://github.com/kokkos/kokkos-kernels/pull/1370) +- Fix check that view has const type part 2 [\#1394](https://github.com/kokkos/kokkos-kernels/pull/1394) + + ## [3.6.00](https://github.com/kokkos/kokkos-kernels/tree/3.6.00) (2022-02-18) [Full Changelog](https://github.com/kokkos/kokkos-kernels/compare/3.5.00...3.6.00) From 61ff6a3d14648cc2aa6cd63250bbc1159d581b86 Mon Sep 17 00:00:00 2001 From: James Foucar Date: Mon, 12 Dec 2022 10:55:12 -0700 Subject: [PATCH 177/226] Move GMRES from example to sparse experimental (#1620) * Add GMRES boilerplate * Remove old par_ilut code * Remove gmres_symbolic * Use correct API for GMRES * Take CSR, not views * Better handling of GmresStats * Add KokkosSparse_Preconditioner.hpp * Examples working * Fix for layoutleft ETI issues * Fix intel warning * Add preconditioner test and refactor prec handling in gmres * Put correct author as contact * Move nrows out of the GMRES handle, get it from the CRS arg * Documentation for handle * Move tol to handle constructor arg * Get rid of unnecessary items on GMRES handle * Improve/update documentation * Update licenses for files I made * Rename gmres files without numeric --- example/gmres/CMakeLists.txt | 13 - example/gmres/README.md | 62 ++- example/gmres/READMEPreconditioners.md | 37 +- example/gmres/ex_real_A.cpp | 51 ++- example/gmres/gmres.hpp | 432 ------------------ example/gmres/test_cmplx_A.cpp | 169 ------- example/gmres/test_prec.cpp | 58 +-- example/gmres/test_real_A.cpp | 182 -------- sparse/CMakeLists.txt | 7 + .../KokkosSparse_gmres_eti_spec_inst.cpp.in | 53 +++ ...arse_par_ilut_numeric_eti_spec_inst.cpp.in | 8 +- ...rse_par_ilut_symbolic_eti_spec_inst.cpp.in | 8 +- .../KokkosSparse_gmres_eti_spec_avail.hpp.in | 53 +++ .../KokkosSparse_gmres_eti_spec_decl.hpp.in | 53 +++ ...rse_par_ilut_numeric_eti_spec_avail.hpp.in | 6 +- ...arse_par_ilut_numeric_eti_spec_decl.hpp.in | 6 +- ...se_par_ilut_symbolic_eti_spec_avail.hpp.in | 6 +- ...rse_par_ilut_symbolic_eti_spec_decl.hpp.in | 6 +- sparse/impl/KokkosSparse_gmres_impl.hpp | 389 ++++++++++++++++ sparse/impl/KokkosSparse_gmres_spec.hpp | 188 ++++++++ .../KokkosSparse_par_ilut_numeric_impl.hpp | 2 +- .../KokkosSparse_par_ilut_numeric_spec.hpp | 2 +- .../KokkosSparse_par_ilut_symbolic_impl.hpp | 2 +- .../KokkosSparse_par_ilut_symbolic_spec.hpp | 2 +- sparse/src/KokkosKernels_Handle.hpp | 38 +- sparse/src/KokkosSparse.hpp | 1 + sparse/src/KokkosSparse_CrsMatrix.hpp | 3 +- .../src}/KokkosSparse_MatrixPrec.hpp | 89 ++-- .../src}/KokkosSparse_Preconditioner.hpp | 63 +-- sparse/src/KokkosSparse_gmres.hpp | 195 ++++++++ sparse/src/KokkosSparse_gmres_handle.hpp | 220 +++++++++ sparse/src/KokkosSparse_par_ilut.hpp | 2 +- sparse/src/KokkosSparse_par_ilut_handle.hpp | 17 +- .../KokkosSparse_gmres_tpl_spec_avail.hpp | 60 +++ .../tpls/KokkosSparse_gmres_tpl_spec_decl.hpp | 52 +++ ...Sparse_par_ilut_numeric_tpl_spec_avail.hpp | 2 +- ...sSparse_par_ilut_numeric_tpl_spec_decl.hpp | 2 +- ...parse_par_ilut_symbolic_tpl_spec_avail.hpp | 2 +- ...Sparse_par_ilut_symbolic_tpl_spec_decl.hpp | 2 +- sparse/unit_test/Test_Sparse.hpp | 1 + sparse/unit_test/Test_Sparse_gmres.hpp | 204 +++++++++ sparse/unit_test/Test_Sparse_par_ilut.hpp | 21 +- 42 files changed, 1733 insertions(+), 1036 deletions(-) delete mode 100644 example/gmres/gmres.hpp delete mode 100644 example/gmres/test_cmplx_A.cpp delete mode 100644 example/gmres/test_real_A.cpp create mode 100644 sparse/eti/generated_specializations_cpp/gmres/KokkosSparse_gmres_eti_spec_inst.cpp.in create mode 100644 sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_avail.hpp.in create mode 100644 sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_decl.hpp.in create mode 100644 sparse/impl/KokkosSparse_gmres_impl.hpp create mode 100644 sparse/impl/KokkosSparse_gmres_spec.hpp rename {example/gmres => sparse/src}/KokkosSparse_MatrixPrec.hpp (68%) rename {example/gmres => sparse/src}/KokkosSparse_Preconditioner.hpp (80%) create mode 100644 sparse/src/KokkosSparse_gmres.hpp create mode 100644 sparse/src/KokkosSparse_gmres_handle.hpp create mode 100644 sparse/tpls/KokkosSparse_gmres_tpl_spec_avail.hpp create mode 100644 sparse/tpls/KokkosSparse_gmres_tpl_spec_decl.hpp create mode 100644 sparse/unit_test/Test_Sparse_gmres.hpp diff --git a/example/gmres/CMakeLists.txt b/example/gmres/CMakeLists.txt index 4265fc4a5f..b7a37b3059 100644 --- a/example/gmres/CMakeLists.txt +++ b/example/gmres/CMakeLists.txt @@ -6,19 +6,6 @@ KOKKOSKERNELS_ADD_EXECUTABLE( SOURCES ex_real_A.cpp ) -# FIXME_SYCL CUDA_ERROR_INVALID_ADDRESS_SPACE -IF(NOT KOKKOS_ENABLE_SYCL) -KOKKOSKERNELS_ADD_EXECUTABLE_AND_TEST( - gmres_test_real_A - SOURCES test_real_A.cpp - ) -ENDIF() - -KOKKOSKERNELS_ADD_EXECUTABLE( - gmres_test_cmplx_A - SOURCES test_cmplx_A.cpp - ) - # FIXME_SYCL CUDA_ERROR_INVALID_ADDRESS_SPACE IF(NOT KOKKOS_ENABLE_SYCL) KOKKOSKERNELS_ADD_EXECUTABLE_AND_TEST( diff --git a/example/gmres/README.md b/example/gmres/README.md index 71753c5084..0e274c2823 100644 --- a/example/gmres/README.md +++ b/example/gmres/README.md @@ -5,62 +5,52 @@ GMRES (the Generalized Minimum RESidual method) is an iterative solver for spars ### Command-Line parameters for ex\_real\_A: Current solver parameters for the real-valued example are as follows: -"**--filename** : The name of a matrix market (.mtx) file for matrix A (Default bcsstk09.mtx)." -"**--max-subsp** : The maximum size of the Kyrlov subspace before restarting (Default 50)." -"**--max-restarts:** Maximum number of GMRES restarts (Default 50)." -"**--tol :** Convergence tolerance. (Default 1e-10)." -"**--ortho :** Type of orthogonalization. Use 'CGS2' or 'MGS'. (Default 'CGS2')" +"**--filename** : The name of a matrix market (.mtx) file for matrix A (Default bcsstk09.mtx)." +"**--max-subsp** : The maximum size of the Kyrlov subspace before restarting (Default 50)." +"**--max-restarts:** Maximum number of GMRES restarts (Default 50)." +"**--tol :** Convergence tolerance. (Default 1e-10)." +"**--ortho :** Type of orthogonalization. Use 'CGS2' or 'MGS'. (Default 'CGS2')" "**--rand\_rhs** : Generate a random right-hand side b. (Without this option, the solver default generates b = vector of ones.)" - -### Solver template paramters: -The GMRES solver has the following template parameters: -**ScalarType:** Type of scalars in the matrix A. (double, float, half, Kokkos::complex, etc.) -**Layout:** Layout of vectors X and B, Kokkos::LayoutLeft, or other Kokkos layouts. -**EXSP:** A Kokkos execution space. -**OrdinalType:** The ordinal type from the Kokkos::CrsMatrix A. - - ### Solver input parameters: -The gmres function takes the following input paramters: -**A:** A Kokkos::CrsMatrix for the linar system Ax=b. -**B:** A Kokkos::View that is the system right-hand side. Must have B.extent(1)=1. (Currently only one right-hand side is supported.) -**X:** A Kokkos::View that is used as both the initial vector for the GMRES iteration and the output for the solution vector. (Must have X.extent(1)=1.) -**opts:** A 'GmresOpts' struct as described below. -**M:** A pointer to a KokkosSparse::Experimental::Preconditioner. Only right preconditioning is supported at this time. - -The solver has a 'GmresOpts' struct to pass in solver options. Available options are: -**tol:** The convergence tolerance for GMRES. Based upon the relative residual. The solver will terminate when norm(b-Ax)/norm(b) <= tol. (Default: 1e-8) -**m:** The restart length (maximum subspace size) for GMRES. (Default: 50) -**maxRestart:** The maximum number of restarts (or 'cycles') that GMRES is to perform. (Default: 50) -**ortho:** The orthogonalization type. Can be "CGS2" (Default) or "MGS". (Two iterations of Classical Gram-Schmidt, or one iteration of Modified Gram-Schmidt.) +The gmres function takes the following input paramters: +**A:** A Kokkos::CrsMatrix for the linar system Ax=b. +**B:** A Kokkos::View that is the system right-hand side. Must have B.extent(1)=1. (Currently only one right-hand side is supported.) +**X:** A Kokkos::View that is used as both the initial vector for the GMRES iteration and the output for the solution vector. (Must have X.extent(1)=1.) +**M:** A pointer to a KokkosSparse::Experimental::Preconditioner. Only right preconditioning is supported at this time. + +### Handle input parameters: +The solver has a GMRESHandle struct to pass in solver options. Available options are: +**tol:** The convergence tolerance for GMRES. Based upon the relative residual. The solver will terminate when norm(b-Ax)/norm(b) <= tol. (Default: 1e-8) +**m:** The restart length (maximum subspace size) for GMRES. (Default: 50) +**maxRestart:** The maximum number of restarts (or 'cycles') that GMRES is to perform. (Default: 50) +**ortho:** The orthogonalization type. Can be "CGS2" (Default) or "MGS". (Two iterations of Classical Gram-Schmidt, or one iteration of Modified Gram-Schmidt.) +**verbose:** Tells solve to print more information ### Solver Output: -The solver outputs a 'GmresStats' struct with solver statistics. These include: - -**numIters**: The number of iterations the GMRES solver took before terminating. -**endRelRes**: The ending relative residual norm attained in the GMRES solve. -**convFlagVal**: An enum FLAG value which will return "Conv" if the solver converged, "NoConv" if the solver did not converge, or "LOA" if the solver converged with respect to the internally computed residual norm but lost accuracy from the true residual norm. -**convFlag**: A string giving the convergence status of the solver upon exit. +The GMRESHandle struct is also used to pass back solver statistics. These include: +**numIters**: The number of iterations the GMRES solver took before terminating. +**endRelRes**: The ending relative residual norm attained in the GMRES solve. +**convFlagVal**: An enum FLAG value which will return "Conv" if the solver converged, "NoConv" if the solver did not converge, or "LOA" if the solver converged with respect to the internally computed residual norm but lost accuracy from the true residual norm. ### Test files: -You can download the matrices for the real example and the complex test from the [SuiteSparse](https://sparse.tamu.edu/) matrix collection. The two matrices needed are: +You can download the matrices for the real example and the complex test from the [SuiteSparse](https://sparse.tamu.edu/) matrix collection. The two matrices needed are: * **young1c** (for complex-valued test) * **bcsstk09** (for real-valued example) The real-valued test uses a matrix generated directly by Kokkos Kernels. ### Test Measurements: -These measurements were taken on 7/23/21, running on an NVIDIA V100 GPU on Weaver7. +These measurements were taken on 7/23/21, running on an NVIDIA V100 GPU on Weaver7. (Timings based upon the GMRES::TotalTime profiling region.) **ex\_real\_A:** Converges in 2271 iterations and 0.9629 seconds. -(The two following timings total the time for the CGS2 and MGS tests.) +(The two following timings total the time for the CGS2 and MGS tests.) **test\_real\_A:** Converges in 30 iterations (with a restart size of 15) and 0.2536 seconds. -**test\_cmplx\_A:** Converges in 652 iterations (to a tolerance of 1e-5) in 2.822 seconds. +**test\_cmplx\_A:** Converges in 652 iterations (to a tolerance of 1e-5) in 2.822 seconds. ### Concerns, enhancements, or bug reporting: If you wish to suggest an enhancement or make a bug report for this solver code, please post an issue at https://github.com/kokkos/kokkos-kernels/issues or email jloe@sandia.gov. diff --git a/example/gmres/READMEPreconditioners.md b/example/gmres/READMEPreconditioners.md index 2c70bef6af..222506a965 100644 --- a/example/gmres/READMEPreconditioners.md +++ b/example/gmres/READMEPreconditioners.md @@ -1,44 +1,40 @@ ## KokkosSparse Preconditioner Interface: -The `KokkosSparse_Preconditioner` class provides an abstract base class interface to use Kokkos-based preconditioners with iterative linear solvers. In particular, this class is designed to work with the Kokkos-based GMRES implementation in `examples/gmres`. It may also be useful for integrating Kokkos-based preconditioners into other solver codes and packages. (For Trilinos users: This class is loosely based upon the IfPack2::Preconditioner class.) The Preconditioner class and derived classes sit in the `KokkosSparse::Experimental` namespace. +The `KokkosSparse_Preconditioner` class provides an abstract base class interface to use Kokkos-based preconditioners with iterative linear solvers. In particular, this class is designed to work with the Kokkos-based GMRES implementation in `examples/gmres`. It may also be useful for integrating Kokkos-based preconditioners into other solver codes and packages. (For Trilinos users: This class is loosely based upon the IfPack2::Preconditioner class.) The Preconditioner class and derived classes sit in the `KokkosSparse::Experimental` namespace. ### Input parameters: ##### Preconditioner template paramters: -The KokkosSparse Preconditioner has the following template parameters: -**ScalarType:** Type of scalars in the preconditioner apply. (double, float, half, Kokkos::complex, etc.) -**Layout:** Layout of vectors X to which the preconditioner will be applied. (Kokkos::LayoutLeft, or other Kokkos layouts.) -**EXSP:** A Kokkos execution space. -**OrdinalType:** The ordinal type from the Kokkos::CrsMatrix A. -**Note:** If using this preconditioner with the Kokkos-based GMRES example, these template parameters must match those used to initialize the GMRES solver. +The KokkosSparse Preconditioner has the following template parameters: +**CRS:** The type of the compressed row sparse matrix. All key types should be derivable from this. ### Preconditioner Base Class Functions (See code for full details.): -**constructor**: Empty in the base class. +**constructor**: Empty in the base class. **apply**`( Kokkos::View &X, Kokkos::View &Y, const char transM[] = "N", ScalarType alpha = 1.0, ScalarType beta = 0):` -Returns `y = beta * y + alpha * M * x` where `M` is the preconditioning operator. (May apply `M` transposed if `transM = 'T' or 'C'` for 'transpose' and 'conjugate transpose' respectively.) -**setParameters():** Used to set preconditioner parameters. -**initialize():** Set up the graph structure of this preconditioner. If the graph structure of the constructor's input matrix has changed, or if you have not yet called `initialize()`, you must call `initialize()` before you may call `compute()` or `apply()`. Thus, `initialize()` corresponds to the "symbolic factorization" step of a sparse factorization, whether or not the specific preconditioner actually does a sparse factorization. -**compute():** Set up the numerical values in this preconditioner. If the values of the constructor's input matrix have changed, or if you have not yet called `compute()`, you must call `compute()` before you may call `apply()`. Thus, `compute()` corresponds to the "numeric factorization" step of a sparse factorization, whether or not the specific preconditioner actually does a sparse factorization. -**isInitialized()** and **isComputed()** return whether the preconditioner has been initialized or computed, respectively. +Returns `y = beta * y + alpha * M * x` where `M` is the preconditioning operator. (May apply `M` transposed if `transM = 'T' or 'C'` for 'transpose' and 'conjugate transpose' respectively.) +**setParameters():** Used to set preconditioner parameters. +**initialize():** Set up the graph structure of this preconditioner. If the graph structure of the constructor's input matrix has changed, or if you have not yet called `initialize()`, you must call `initialize()` before you may call `compute()` or `apply()`. Thus, `initialize()` corresponds to the "symbolic factorization" step of a sparse factorization, whether or not the specific preconditioner actually does a sparse factorization. +**compute():** Set up the numerical values in this preconditioner. If the values of the constructor's input matrix have changed, or if you have not yet called `compute()`, you must call `compute()` before you may call `apply()`. Thus, `compute()` corresponds to the "numeric factorization" step of a sparse factorization, whether or not the specific preconditioner actually does a sparse factorization. +**isInitialized()** and **isComputed()** return whether the preconditioner has been initialized or computed, respectively. **hasTransposeApply()** Returns true if the transposed (or conjugate transposed) operator apply is available for this preconditioner. Base class function returns `false`. ### Derived Preconditioner Classes: #### Matrix Prec: -A simple class that takes a `KokkosSparse::CrsMatrix` to apply as the preconditioner `M`. This matrix is given to the preconditioner constructor function. There are no parameters to set. The functions `initialize` and `compute` do not perform any operations. +A simple class that takes a `KokkosSparse::CrsMatrix` to apply as the preconditioner `M`. This matrix is given to the preconditioner constructor function. There are no parameters to set. The functions `initialize` and `compute` do not perform any operations. ### Testing ##### Command-Line parameters for test\_prec: Current solver parameters for the GMRES preconditioning test are as follows: -"**--mat-size** : The size of the n x n test matrix. (Default: n=1000.) -"**--max-subsp** : The maximum size of the Kyrlov subspace before restarting (Default 50)." -"**--max-restarts:** Maximum number of GMRES restarts (Default 50)." -"**--tol :** Convergence tolerance. (Default 1e-10)." -"**--ortho :** Type of orthogonalization. Use 'CGS2' or 'MGS'. (Default 'CGS2')" -"**--rand\_rhs** : Generate a random right-hand side b. (Without this option, the solver default generates b = vector of ones.)" +"**--mat-size** : The size of the n x n test matrix. (Default: n=1000.) +"**--max-subsp** : The maximum size of the Kyrlov subspace before restarting (Default 50)." +"**--max-restarts:** Maximum number of GMRES restarts (Default 50)." +"**--tol :** Convergence tolerance. (Default 1e-10)." +"**--ortho :** Type of orthogonalization. Use 'CGS2' or 'MGS'. (Default 'CGS2')" +"**--rand\_rhs** : Generate a random right-hand side b. (Without this option, the solver default generates b = vector of ones.)" "**--help** : Display a help message." #### Test Measurements: @@ -48,4 +44,3 @@ Current solver parameters for the GMRES preconditioning test are as follows: If you wish to suggest an enhancement or make a bug report for this preconditioner code, please post an issue at https://github.com/kokkos/kokkos-kernels/issues or email jloe@sandia.gov. SAND2021-9744 O - diff --git a/example/gmres/ex_real_A.cpp b/example/gmres/ex_real_A.cpp index b3e95605f7..f9cb1f8340 100644 --- a/example/gmres/ex_real_A.cpp +++ b/example/gmres/ex_real_A.cpp @@ -49,15 +49,19 @@ #include #include #include - -#include "gmres.hpp" +#include int main(int argc, char* argv[]) { - typedef double ST; - typedef int OT; - typedef Kokkos::DefaultExecutionSpace EXSP; + using ST = double; + using OT = int; + using EXSP = Kokkos::DefaultExecutionSpace; + using MESP = typename EXSP::memory_space; + using CRS = KokkosSparse::CrsMatrix; using ViewVectorType = Kokkos::View; + using KernelHandle = + KokkosKernels::Experimental::KokkosKernelsHandle; std::string filename("bcsstk09.mtx"); // example matrix std::string ortho("CGS2"); // orthog type @@ -104,21 +108,11 @@ int main(int argc, char* argv[]) { std::cout << "File to process is: " << filename << std::endl; std::cout << "Convergence tolerance is: " << convTol << std::endl; - // Set GMRES options: - GmresOpts solverOpts; - solverOpts.tol = convTol; - solverOpts.m = m; - solverOpts.maxRestart = cycLim; - solverOpts.ortho = ortho; - solverOpts.verbose = false; // No verbosity needed for most testing - // Initialize Kokkos AFTER parsing parameters: Kokkos::initialize(); { // Read in a matrix Market file and use it to test the Kokkos Operator. - KokkosSparse::CrsMatrix A = - KokkosSparse::Impl::read_kokkos_crst_matrix< - KokkosSparse::CrsMatrix>(filename.c_str()); + CRS A = KokkosSparse::Impl::read_kokkos_crst_matrix(filename.c_str()); int n = A.numRows(); ViewVectorType X("X", n); // Solution and initial guess @@ -126,6 +120,17 @@ int main(int argc, char* argv[]) { ViewVectorType B(Kokkos::view_alloc(Kokkos::WithoutInitializing, "B"), n); // right-hand side vec + // Make kernel handles and set options + KernelHandle kh; + kh.create_gmres_handle(m, convTol, cycLim); + auto gmres_handle = kh.get_gmres_handle(); + // Get full gmres handle type using decltype. Deferencing a pointer gives a + // reference, so we need to strip that too. + using GMRESHandle = + typename std::remove_reference::type; + gmres_handle->set_ortho(ortho == "CGS2" ? GMRESHandle::Ortho::CGS2 + : GMRESHandle::Ortho::MGS); + if (rand_rhs) { // Make rhs random. int rand_seed = 123; @@ -137,8 +142,11 @@ int main(int argc, char* argv[]) { } // Run GMRS solve: - GmresStats solveStats = - gmres(A, B, X, solverOpts); + KokkosSparse::Experimental::gmres(&kh, A, B, X); + + const auto numIters = gmres_handle->get_num_iters(); + const auto convFlag = gmres_handle->get_conv_flag_val(); + const auto endRelRes = gmres_handle->get_end_rel_res(); // Double check residuals at end of solve: ST nrmB = KokkosBlas::nrm2(B); @@ -147,11 +155,10 @@ int main(int argc, char* argv[]) { ST endRes = KokkosBlas::nrm2(B) / nrmB; std::cout << "=========================================" << std::endl; std::cout << "Verify from main: Ending residual is " << endRes << std::endl; - std::cout << "Number of iterations is: " << solveStats.numIters - << std::endl; + std::cout << "Number of iterations is: " << numIters << std::endl; std::cout << "Diff of residual from main - residual from solver: " - << solveStats.endRelRes - endRes << std::endl; - std::cout << "Convergence flag is : " << solveStats.convFlag() << std::endl; + << endRelRes - endRes << std::endl; + std::cout << "Convergence flag is : " << convFlag << std::endl; } Kokkos::finalize(); } diff --git a/example/gmres/gmres.hpp b/example/gmres/gmres.hpp deleted file mode 100644 index 22b23cde7a..0000000000 --- a/example/gmres/gmres.hpp +++ /dev/null @@ -1,432 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Jennifer Loe (jloe@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include "Kokkos_ArithTraits.hpp" -#include "KokkosKernels_IOUtils.hpp" -#include -#include -#include -#include -#include -#include -#include "KokkosKernels_Error.hpp" - -//////////////////////////////////////////////////////////////////////////////// -// libstdc++ half_t overloads -//////////////////////////////////////////////////////////////////////////////// -namespace Kokkos { -namespace Issue1172WorkAround { -#if !KOKKOS_HALF_T_IS_FLOAT -Kokkos::Experimental::half_t fabs(Kokkos::Experimental::half_t arg) { - using AT = Kokkos::Details::ArithTraits; - return AT::abs(arg); -} - -Kokkos::Experimental::half_t fabs( - Kokkos::complex arg) noexcept { - return Kokkos::Experimental::half_t(Kokkos::abs( - Kokkos::complex((double)arg.real(), (double)arg.imag()))); -} -#endif // KOKKOS_HALF_T_IS_FLOAT - -#if !KOKKOS_BHALF_T_IS_FLOAT -Kokkos::Experimental::bhalf_t fabs(Kokkos::Experimental::bhalf_t arg) { - using AT = Kokkos::Details::ArithTraits; - return AT::abs(arg); -} - -Kokkos::Experimental::bhalf_t fabs( - Kokkos::complex arg) noexcept { - return Kokkos::Experimental::bhalf_t(Kokkos::abs( - Kokkos::complex((double)arg.real(), (double)arg.imag()))); -} -#endif // KOKKOS_BHALF_T_IS_FLOAT - -// This fabs wrapper was added to resolve: -// https://github.com/kokkos/kokkos-kernels/issues/1172 -template -KOKKOS_INLINE_FUNCTION T fabs(const Kokkos::complex &x) { - return Kokkos::abs(x); -} -} // namespace Issue1172WorkAround -} // namespace Kokkos - -// This struct is returned to the user to give solver -// statistics and convergence status. -struct GmresStats { - int numIters; - double endRelRes; - enum FLAG { Conv, NoConv, LOA }; - FLAG convFlagVal; - std::string convFlag() { - switch (convFlagVal) { - case Conv: return "Converged"; - case NoConv: return "Not Converged"; - case LOA: return "Solver has had loss of accuracy."; - default: return "Flag not defined."; - } - } -}; - -// This struct allows the user to pass in several -// options to the solver. -template -struct GmresOpts { - typename Kokkos::Details::ArithTraits::mag_type tol; - int m; - int maxRestart; - bool verbose; - std::string ortho; - std::string precSide; - - GmresOpts() - : tol(1e-8), m(50), maxRestart(50), verbose(true), ortho("CGS2") {} -}; - -template -GmresStats gmres( - const KokkosSparse::CrsMatrix &A, - const Kokkos::View &B, - Kokkos::View &X, - const GmresOpts &opts, - const KokkosSparse::Experimental::Preconditioner< - ScalarType, Layout, EXSP, OrdinalType> *const M = NULL) { - using namespace Kokkos::Issue1172WorkAround; // For 'fabs' wrappers above - Kokkos::Profiling::pushRegion("GMRES::TotalTime:"); - typedef Kokkos::Details::ArithTraits AT; - typedef typename AT::val_type - ST; // So this code will run with ScalarType = std::complex. - typedef typename AT::mag_type MT; - ST one = AT::one(); - ST zero = AT::zero(); - - typedef Kokkos::View ViewVectorType; - typedef Kokkos::View - ViewHostVectorType; - typedef Kokkos::View ViewMatrixType; - - unsigned int n = A.numRows(); - - // Store solver options: - const int m = opts.m; - - // Check compatibility of dimensions at run time. - if (n != unsigned(A.numCols())) { - std::ostringstream os; - os << "gmres: A must be a square matrix: " - << "numRows: " << n << " numCols: " << A.numCols(); - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - - if (X.extent(0) != B.extent(0) || X.extent(0) != n) { - std::ostringstream os; - os << "gmres: Dimensions of A, X, and B do not match: " - << "A: " << n << " x " << n << ", X: " << X.extent(0) - << "x 1, B: " << B.extent(0) << " x 1"; - KokkosKernels::Impl::throw_runtime_exception(os.str()); - } - // Check parameter validity: - if (m <= 0) { - throw std::invalid_argument( - "gmres: Please choose restart size m greater than zero."); - } - if (opts.maxRestart < 0) { - throw std::invalid_argument( - "gmres: Please choose maxRestart greater than zero."); - } - - bool converged = false; - int cycle = 0; // How many times have we restarted? - int numIters = 0; // Number of iterations within the cycle before - // convergence. - MT nrmB, trueRes, relRes, shortRelRes; - GmresStats myStats; - - if (opts.verbose) { - std::cout << "Convergence tolerance is: " << opts.tol << std::endl; - } - - ViewVectorType Xiter( - "Xiter", n); // Intermediate solution at iterations before restart. - ViewVectorType Res(Kokkos::view_alloc(Kokkos::WithoutInitializing, "Res"), - n); // Residual vector - ViewVectorType Wj(Kokkos::view_alloc(Kokkos::WithoutInitializing, "W_j"), - n); // Tmp work vector 1 - ViewVectorType Wj2(Kokkos::view_alloc(Kokkos::WithoutInitializing, "W_j2"), - n); // Tmp work vector 2 - ViewHostVectorType GVec_h( - Kokkos::view_alloc(Kokkos::WithoutInitializing, "GVec"), m + 1); - ViewMatrixType GLsSoln( - "GLsSoln", m, - 1); // LS solution vec for Givens Rotation. Must be 2-D for trsm. - typename ViewMatrixType::HostMirror GLsSoln_h = Kokkos::create_mirror_view( - GLsSoln); // This one is needed for triangular solve. - ViewHostVectorType CosVal_h("CosVal", m); - ViewHostVectorType SinVal_h("SinVal", m); - ViewMatrixType V(Kokkos::view_alloc(Kokkos::WithoutInitializing, "V"), n, - m + 1); - ViewMatrixType VSub; // Subview of 1st m cols for updating soln. - ViewVectorType orthoTmp( - Kokkos::view_alloc(Kokkos::WithoutInitializing, "orthoTmp"), m); - - ViewMatrixType H("H", m + 1, - m); // H matrix on device. Also used in Arn Rec debug. - typename ViewMatrixType::HostMirror H_h = - Kokkos::create_mirror_view(H); // Make H into a host view of H. - - // Compute initial residuals: - nrmB = KokkosBlas::nrm2(B); - Kokkos::deep_copy(Res, B); - - // This is initial true residual, so don't need prec here. - KokkosSparse::spmv("N", one, A, X, zero, Wj); // wj = Ax - KokkosBlas::axpy(-one, Wj, Res); // res = res-Wj = b-Ax. - trueRes = KokkosBlas::nrm2(Res); - if (nrmB != 0) { - relRes = trueRes / nrmB; - } else if (trueRes == 0) { - relRes = trueRes; - } else { // B is zero, but X has wrong initial guess. - Kokkos::deep_copy(X, 0.0); - relRes = 0; - } - shortRelRes = relRes; - if (opts.verbose) { - std::cout << "Initial relative residual is: " << relRes << std::endl; - } - if (relRes < opts.tol) { - converged = true; - } - - while (!converged && cycle <= opts.maxRestart && shortRelRes >= 1e-14) { - GVec_h(0) = trueRes; - - // Run Arnoldi iteration: - auto Vj = Kokkos::subview(V, Kokkos::ALL, 0); - Kokkos::deep_copy(Vj, Res); - KokkosBlas::scal(Vj, one / trueRes, Vj); // V0 = V0/norm(V0) - - for (int j = 0; j < m; j++) { - if (M != NULL) { // Apply Right prec - M->apply(Vj, Wj2); // wj2 = M*Vj - KokkosSparse::spmv("N", one, A, Wj2, zero, Wj); // wj = A*MVj = A*Wj2 - } else { - KokkosSparse::spmv("N", one, A, Vj, zero, Wj); // wj = A*Vj - } - Kokkos::Profiling::pushRegion("GMRES::Orthog:"); - if (opts.ortho == "MGS") { - for (int i = 0; i <= j; i++) { - auto Vi = Kokkos::subview(V, Kokkos::ALL, i); - H_h(i, j) = KokkosBlas::dot(Vi, Wj); // Vi^* Wj - KokkosBlas::axpy(-H_h(i, j), Vi, Wj); // wj = wj-Hij*Vi - } - auto Hj_h = Kokkos::subview(H_h, Kokkos::make_pair(0, j + 1), j); - } else if (opts.ortho == "CGS2") { - auto V0j = Kokkos::subview(V, Kokkos::ALL, Kokkos::make_pair(0, j + 1)); - auto Hj = Kokkos::subview(H, Kokkos::make_pair(0, j + 1), j); - auto Hj_h = Kokkos::subview(H_h, Kokkos::make_pair(0, j + 1), j); - KokkosBlas::gemv("C", one, V0j, Wj, zero, Hj); // Hj = Vj^T * wj - KokkosBlas::gemv("N", -one, V0j, Hj, one, Wj); // wj = wj - Vj * Hj - - // Re-orthog CGS: - auto orthoTmpSub = - Kokkos::subview(orthoTmp, Kokkos::make_pair(0, j + 1)); - KokkosBlas::gemv("C", one, V0j, Wj, zero, - orthoTmpSub); // tmp (Hj) = Vj^T * wj - KokkosBlas::gemv("N", -one, V0j, orthoTmpSub, one, - Wj); // wj = wj - Vj * tmp - KokkosBlas::axpy(one, orthoTmpSub, Hj); // Hj = Hj + tmp - Kokkos::deep_copy(Hj_h, Hj); - } else { - throw std::invalid_argument( - "Invalid argument for 'ortho'. Please use 'CGS2' or 'MGS'."); - } - - MT tmpNrm = KokkosBlas::nrm2(Wj); - H_h(j + 1, j) = tmpNrm; - if (tmpNrm > 1e-14) { - Vj = Kokkos::subview(V, Kokkos::ALL, j + 1); - KokkosBlas::scal(Vj, one / H_h(j + 1, j), Wj); // Vj = Wj/H(j+1,j) - } - Kokkos::Profiling::popRegion(); - - // Givens for real and complex (See Alg 3 in "On computing Givens - // rotations reliably and efficiently" by Demmel, et. al. 2001) Apply - // Givens rotation and compute shortcut residual: - for (int i = 0; i < j; i++) { - ST tempVal = CosVal_h(i) * H_h(i, j) + SinVal_h(i) * H_h(i + 1, j); - H_h(i + 1, j) = - -AT::conj(SinVal_h(i)) * H_h(i, j) + CosVal_h(i) * H_h(i + 1, j); - H_h(i, j) = tempVal; - } - ST f = H_h(j, j); - ST g = H_h(j + 1, j); - MT f2 = AT::real(f) * AT::real(f) + AT::imag(f) * AT::imag(f); - MT g2 = AT::real(g) * AT::real(g) + AT::imag(g) * AT::imag(g); - ST fg2 = f2 + g2; - ST D1 = one / AT::sqrt(f2 * fg2); - CosVal_h(j) = f2 * D1; - fg2 = fg2 * D1; - H_h(j, j) = f * fg2; - SinVal_h(j) = f * D1 * AT::conj(g); - H_h(j + 1, j) = zero; - - GVec_h(j + 1) = GVec_h(j) * (-AT::conj(SinVal_h(j))); - GVec_h(j) = GVec_h(j) * CosVal_h(j); - shortRelRes = fabs(GVec_h(j + 1)) / nrmB; - - if (opts.verbose) { - std::cout << "Shortcut relative residual for iteration " - << j + (cycle * m) << " is: " << shortRelRes << std::endl; - } - if (tmpNrm <= 1e-14 && shortRelRes >= opts.tol) { - throw std::runtime_error( - "GMRES has experienced lucky breakdown, but the residual has not converged.\n\ - Solver terminated without convergence."); - } - if (AT::isNan(ST(shortRelRes))) { - throw std::runtime_error( - "gmres: Relative residual is nan. Terminating solver."); - } - - // If short residual converged, or time to restart, check true residual - if (shortRelRes < opts.tol || j == m - 1) { - // Compute least squares soln with Givens rotation: - auto GLsSolnSub_h = Kokkos::subview( - GLsSoln_h, Kokkos::ALL, - 0); // Original view has rank 2, need a rank 1 here. - auto GVecSub_h = Kokkos::subview(GVec_h, Kokkos::make_pair(0, m)); - Kokkos::deep_copy(GLsSolnSub_h, - GVecSub_h); // Copy LS rhs vec for triangle solve. - auto GLsSolnSub2_h = Kokkos::subview( - GLsSoln_h, Kokkos::make_pair(0, j + 1), Kokkos::ALL); - auto H_Sub_h = Kokkos::subview(H_h, Kokkos::make_pair(0, j + 1), - Kokkos::make_pair(0, j + 1)); - KokkosBlas::trsm("L", "U", "N", "N", one, H_Sub_h, - GLsSolnSub2_h); // GLsSoln = H\GLsSoln - Kokkos::deep_copy(GLsSoln, GLsSoln_h); - - // Update solution and compute residual with Givens: - VSub = Kokkos::subview(V, Kokkos::ALL, Kokkos::make_pair(0, j + 1)); - Kokkos::deep_copy(Xiter, - X); // Can't overwrite X with intermediate solution. - auto GLsSolnSub3 = - Kokkos::subview(GLsSoln, Kokkos::make_pair(0, j + 1), 0); - if (M != NULL) { // Apply right prec to correct soln. - KokkosBlas::gemv("N", one, VSub, GLsSolnSub3, zero, - Wj); // wj = V(1:j+1)*lsSoln - M->apply(Wj, Xiter, "N", one, one); // Xiter = M*wj + X - } else { - KokkosBlas::gemv("N", one, VSub, GLsSolnSub3, one, - Xiter); // x_iter = x + V(1:j+1)*lsSoln - } - KokkosSparse::spmv("N", one, A, Xiter, zero, Wj); // wj = Ax - Kokkos::deep_copy(Res, B); // Reset r=b. - KokkosBlas::axpy(-one, Wj, Res); // r = b-Ax. - trueRes = KokkosBlas::nrm2(Res); - relRes = trueRes / nrmB; - if (opts.verbose) { - std::cout << "True relative residual for iteration " - << j + (cycle * m) << " is : " << relRes << std::endl; - } - numIters = j + 1; - - if (relRes < opts.tol) { - converged = true; - Kokkos::deep_copy( - X, Xiter); // Final solution is the iteration solution. - break; // End Arnoldi iteration. - } else if (shortRelRes < 1e-30) { - std::cout << "Short residual has converged to machine zero, but true " - "residual is not converged.\n" - << "You may have given GMRES a singular matrix. Ending the " - "GMRES iteration." - << std::endl; - break; // End Arnoldi iteration; we can't make any more progress. - } - } - - } // end Arnoldi iter. - - cycle++; - - // This is the end, or it's time to restart. Update solution to most - // recent vector. - Kokkos::deep_copy(X, Xiter); - } - - std::cout << "Ending relative residual is: " << relRes << std::endl; - myStats.endRelRes = static_cast(relRes); - if (converged) { - if (opts.verbose) { - std::cout << "Solver converged! " << std::endl; - } - myStats.convFlagVal = GmresStats::FLAG::Conv; - } else if (shortRelRes < opts.tol) { - if (opts.verbose) { - std::cout << "Shortcut residual converged, but solver experienced a loss " - "of accuracy." - << std::endl; - } - myStats.convFlagVal = GmresStats::FLAG::LOA; - } else { - if (opts.verbose) { - std::cout << "Solver did not converge. :( " << std::endl; - } - myStats.convFlagVal = GmresStats::FLAG::NoConv; - } - if (cycle > 0) { - myStats.numIters = (cycle - 1) * m + numIters; - } else { - myStats.numIters = 0; - } - if (opts.verbose) { - std::cout << "The solver completed " << myStats.numIters << " iterations." - << std::endl; - } - - Kokkos::Profiling::popRegion(); - return myStats; -} diff --git a/example/gmres/test_cmplx_A.cpp b/example/gmres/test_cmplx_A.cpp deleted file mode 100644 index ad8d19fb03..0000000000 --- a/example/gmres/test_cmplx_A.cpp +++ /dev/null @@ -1,169 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Jennifer Loe (jloe@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include "KokkosKernels_IOUtils.hpp" -#include "KokkosSparse_IOUtils.hpp" -#include -#include -#include -#include -#include - -#include "gmres.hpp" - -int main(int /*argc*/, char** /*argv[]*/) { - typedef Kokkos::complex ST; - typedef int OT; - typedef Kokkos::DefaultExecutionSpace EXSP; - - using ViewVectorType = Kokkos::View; - - std::string filename("young1c.mtx"); // example matrix - GmresOpts solverOpts; - solverOpts.m = 100; // Max subspace size before restarting. - solverOpts.tol = 1e-05; // Relative residual convergence tolerance. - solverOpts.maxRestart = 60; - solverOpts.ortho = "CGS2"; // orthog type - solverOpts.verbose = false; // No verbosity needed for most testing - bool pass1 = false; - bool pass2 = false; - - std::cout << "File to process is: " << filename << std::endl; - std::cout << "Convergence tolerance is: " << solverOpts.tol << std::endl; - - // Initialize Kokkos AFTER parsing parameters: - Kokkos::initialize(); - { - // Read in a matrix Market file and use it to test the Kokkos Operator. - KokkosSparse::CrsMatrix A = - KokkosSparse::Impl::read_kokkos_crst_matrix< - KokkosSparse::CrsMatrix>(filename.c_str()); - - int n = A.numRows(); - ViewVectorType X("X", n); // Solution and initial guess - ViewVectorType Wj("Wj", n); // For checking residuals at end. - ViewVectorType B(Kokkos::view_alloc(Kokkos::WithoutInitializing, "B"), - n); // right-hand side vec - - // Make rhs ones so that results are repeatable: - Kokkos::deep_copy(B, 1.0); - - std::cout << "Testing GMRES with CGS2 ortho:" << std::endl; - GmresStats solveStats = - gmres(A, B, X, solverOpts); - - // Double check residuals at end of solve: - double nrmB = KokkosBlas::nrm2(B); - KokkosSparse::spmv("N", 1.0, A, X, 0.0, Wj); // wj = Ax - KokkosBlas::axpy(-1.0, Wj, B); // b = b-Ax. - double endRes = KokkosBlas::nrm2(B) / nrmB; - std::cout << "=======================================" << std::endl; - std::cout << "Verify from main: Ending residual is " << endRes << std::endl; - std::cout << "Number of iterations is: " << solveStats.numIters - << std::endl; - std::cout << "Diff of residual from main - residual from solver: " - << solveStats.endRelRes - endRes << std::endl; - std::cout << "Convergence flag is : " << solveStats.convFlag() << std::endl; - - if (solveStats.numIters < 700 && solveStats.numIters > 600 && - endRes < solverOpts.tol) { - std::cout << "Test CGS2 Passed!" << std::endl; - pass1 = true; - } else { - std::cout << "Solver did not converge within the expected number of " - "iterations. " - << std::endl - << "CGS2 Test Failed." << std::endl; - } - std::cout << "=======================================" << std::endl - << std::endl - << std::endl; - - solverOpts.ortho = "MGS"; - Kokkos::deep_copy(X, 0.0); - Kokkos::deep_copy(B, 1.0); - - std::cout << "Testing GMRES with MGS ortho:" << std::endl; - solveStats = gmres(A, B, X, solverOpts); - - // Double check residuals at end of solve: - nrmB = KokkosBlas::nrm2(B); - KokkosSparse::spmv("N", 1.0, A, X, 0.0, Wj); // wj = Ax - KokkosBlas::axpy(-1.0, Wj, B); // b = b-Ax. - endRes = KokkosBlas::nrm2(B) / nrmB; - std::cout << "=======================================" << std::endl; - std::cout << "Verify from main: Ending residual is " << endRes << std::endl; - std::cout << "Number of iterations is: " << solveStats.numIters - << std::endl; - std::cout << "Diff of residual from main - residual from solver: " - << solveStats.endRelRes - endRes << std::endl; - std::cout << "Convergence flag is : " << solveStats.convFlag() << std::endl; - - if (solveStats.numIters < 700 && solveStats.numIters > 600 && - endRes < solverOpts.tol) { - std::cout << "Test MGS Passed!" << std::endl; - if (pass1) { - pass2 = true; - }; - } else { - std::cout << "Solver did not converge within the expected number of " - "iterations. " - << std::endl - << "MGS Test Failed." << std::endl; - } - std::cout << "=======================================" << std::endl - << std::endl - << std::endl; - } - Kokkos::finalize(); - - if (pass2) { - std::cout << "Both tests have passed!!" << std::endl; - } else { - std::cout << "One or more tests has failed." << std::endl; - } - - return (pass2 ? EXIT_SUCCESS : EXIT_FAILURE); -} diff --git a/example/gmres/test_prec.cpp b/example/gmres/test_prec.cpp index 11122edccd..6b0ec9af70 100644 --- a/example/gmres/test_prec.cpp +++ b/example/gmres/test_prec.cpp @@ -44,18 +44,23 @@ #include #include -#include +#include #include #include #include #include "KokkosSparse_IOUtils.hpp" int main(int argc, char* argv[]) { - typedef double ST; - typedef int OT; - typedef Kokkos::DefaultExecutionSpace EXSP; + using ST = double; + using OT = int; + using EXSP = Kokkos::DefaultExecutionSpace; + using MESP = typename EXSP::memory_space; + using CRS = KokkosSparse::CrsMatrix; using ViewVectorType = Kokkos::View; + using KernelHandle = + KokkosKernels::Experimental::KokkosKernelsHandle; std::string ortho("CGS2"); // orthog type int n = 1000; // Matrix size @@ -102,27 +107,24 @@ int main(int argc, char* argv[]) { } std::cout << "Convergence tolerance is: " << convTol << std::endl; - // Set GMRES options: - GmresOpts solverOpts; - solverOpts.tol = convTol; - solverOpts.m = m; - solverOpts.maxRestart = cycLim; - solverOpts.ortho = ortho; - solverOpts.verbose = false; // No verbosity needed for most testing + // Make kernel handles and set options + KernelHandle kh; + kh.create_gmres_handle(m, convTol, cycLim); + auto gmres_handle = kh.get_gmres_handle(); + // Get full gmres handle type using decltype. Deferencing a pointer gives a + // reference, so we need to strip that too. + using GMRESHandle = + typename std::remove_reference::type; + gmres_handle->set_ortho(ortho == "CGS2" ? GMRESHandle::Ortho::CGS2 + : GMRESHandle::Ortho::MGS); // Initialize Kokkos AFTER parsing parameters: Kokkos::initialize(); { // Generate a diagonal matrix with entries 1, 2, ...., 1000 and its inverse. - KokkosSparse::CrsMatrix A = - KokkosSparse::Impl::kk_generate_diag_matrix< - KokkosSparse::CrsMatrix>(n); - KokkosSparse::Experimental::MatrixPrec* - myPrec = - new KokkosSparse::Experimental::MatrixPrec( - KokkosSparse::Impl::kk_generate_diag_matrix< - KokkosSparse::CrsMatrix>(n, true)); + CRS A = KokkosSparse::Impl::kk_generate_diag_matrix(n); + auto myPrec = new KokkosSparse::Experimental::MatrixPrec( + KokkosSparse::Impl::kk_generate_diag_matrix(n, true)); ViewVectorType X(Kokkos::view_alloc(Kokkos::WithoutInitializing, "X"), n); // Solution and initial guess @@ -141,8 +143,11 @@ int main(int argc, char* argv[]) { Kokkos::deep_copy(B, 1.0); } - GmresStats solveStats = - gmres(A, B, X, solverOpts, myPrec); + KokkosSparse::Experimental::gmres(&kh, A, B, X, myPrec); + + const auto numIters = gmres_handle->get_num_iters(); + const auto convFlag = gmres_handle->get_conv_flag_val(); + const auto endRelRes = gmres_handle->get_end_rel_res(); // Double check residuals at end of solve: ST nrmB = KokkosBlas::nrm2(B); @@ -151,12 +156,11 @@ int main(int argc, char* argv[]) { ST endRes = KokkosBlas::nrm2(B) / nrmB; std::cout << "=========================================" << std::endl; std::cout << "Verify from main: Ending residual is " << endRes << std::endl; - std::cout << "Number of iterations is: " << solveStats.numIters - << std::endl; + std::cout << "Number of iterations is: " << numIters << std::endl; std::cout << "Diff of residual from main - residual from solver: " - << solveStats.endRelRes - endRes << std::endl; - std::cout << "Convergence flag is : " << solveStats.convFlag() << std::endl; - if (endRes < convTol && solveStats.numIters == 1) { + << endRelRes - endRes << std::endl; + std::cout << "Convergence flag is : " << convFlag << std::endl; + if (endRes < convTol && numIters == 1) { pass = true; } } diff --git a/example/gmres/test_real_A.cpp b/example/gmres/test_real_A.cpp deleted file mode 100644 index abfb3f0101..0000000000 --- a/example/gmres/test_real_A.cpp +++ /dev/null @@ -1,182 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Jennifer Loe (jloe@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include "KokkosKernels_IOUtils.hpp" -#include "KokkosSparse_IOUtils.hpp" -#include -#include -#include -#include -#include -#include - -#include "gmres.hpp" - -int main(int /*argc*/, char** /*argv[]*/) { - typedef double ST; - typedef int OT; - typedef Kokkos::DefaultExecutionSpace EXSP; - - // std::cout << "ST: " << typeid(ST).name() << std::endl; - // std::cout << "EXSP: " << typeid(EXSP).name() << std::endl; - - using sp_matrix_type = KokkosSparse::CrsMatrix; - using ViewVectorType = Kokkos::View; - typedef sp_matrix_type::non_const_ordinal_type ncOT; - typedef sp_matrix_type::const_ordinal_type cOT; - typedef sp_matrix_type::non_const_size_type ncST; - - GmresOpts solverOpts; - solverOpts.ortho = "CGS2"; // orthog type - solverOpts.m = 15; // Max subspace size before restarting. - solverOpts.tol = 1e-10; // Relative residual convergence tolerance. - solverOpts.maxRestart = 50; - solverOpts.verbose = false; // No verbosity needed for most testing - bool pass1 = false; - bool pass2 = false; - - std::cout << "Convergence tolerance is: " << solverOpts.tol << std::endl; - - // Initialize Kokkos AFTER parsing parameters: - Kokkos::initialize(); - { - // Create a diagonally dominant sparse matrix to test: - ncST nnz; - cOT n = 5000; - cOT numRows = n; - cOT numCols = n; - cOT diagDominance = 1; - nnz = 10 * numRows; - sp_matrix_type A = - KokkosSparse::Impl::kk_generate_diagonally_dominant_sparse_matrix< - sp_matrix_type>(numRows, numCols, nnz, 0, ncOT(0.01 * numRows), - diagDominance); - - // Set initial vectors: - ViewVectorType X("X", n); // Solution and initial guess - ViewVectorType Wj("Wj", n); // For checking residuals at end. - ViewVectorType B(Kokkos::view_alloc(Kokkos::WithoutInitializing, "B"), - n); // right-hand side vec - - // Make rhs ones so that results are repeatable: - Kokkos::deep_copy(B, 1.0); - - std::cout << "Testing GMRES with CGS2 ortho:" << std::endl; - GmresStats solveStats = - gmres(A, B, X, solverOpts); - - // Double check residuals at end of solve: - double nrmB = static_cast(KokkosBlas::nrm2(B)); - KokkosSparse::spmv("N", ST(1.0), A, X, ST(0.0), Wj); // wj = Ax - KokkosBlas::axpy(ST(-1.0), Wj, B); // b = b-Ax. - double endRes = KokkosBlas::nrm2(B) / nrmB; - std::cout << "=======================================" << std::endl; - std::cout << "Verify from main: Ending residual is " << endRes << std::endl; - std::cout << "Number of iterations is: " << solveStats.numIters - << std::endl; - std::cout << "Diff of residual from main - residual from solver: " - << solveStats.endRelRes - endRes << std::endl; - std::cout << "Convergence flag is : " << solveStats.convFlag() << std::endl; - - if (solveStats.numIters < 40 && solveStats.numIters > 20 && - endRes < static_cast(solverOpts.tol)) { - std::cout << "Test CGS2 Passed!" << std::endl; - pass1 = true; - } else { - std::cout << "Solver did not converge within the expected number of " - "iterations. " - << std::endl - << "CGS2 Test Failed." << std::endl; - } - std::cout << "=======================================" << std::endl - << std::endl - << std::endl; - - solverOpts.ortho = "MGS"; - Kokkos::deep_copy(X, 0.0); - Kokkos::deep_copy(B, 1.0); - - std::cout << "Testing GMRES with MGS ortho:" << std::endl; - solveStats = gmres(A, B, X, solverOpts); - - // Double check residuals at end of solve: - nrmB = static_cast(KokkosBlas::nrm2(B)); - KokkosSparse::spmv("N", ST(1.0), A, X, ST(0.0), Wj); // wj = Ax - KokkosBlas::axpy(ST(-1.0), Wj, B); // b = b-Ax. - endRes = KokkosBlas::nrm2(B) / nrmB; - std::cout << "=======================================" << std::endl; - std::cout << "Verify from main: Ending residual is " << endRes << std::endl; - std::cout << "Number of iterations is: " << solveStats.numIters - << std::endl; - std::cout << "Diff of residual from main - residual from solver: " - << solveStats.endRelRes - endRes << std::endl; - std::cout << "Convergence flag is : " << solveStats.convFlag() << std::endl; - - if (solveStats.numIters < 40 && solveStats.numIters > 20 && - endRes < static_cast(solverOpts.tol)) { - std::cout << "Test MGS Passed!" << std::endl; - if (pass1) { - pass2 = true; - }; - } else { - std::cout << "Solver did not converge within the expected number of " - "iterations. " - << std::endl - << "MGS Test Failed." << std::endl; - } - std::cout << "=======================================" << std::endl - << std::endl - << std::endl; - } - Kokkos::finalize(); - - if (pass2) { - std::cout << "Both tests have passed!!" << std::endl; - } else { - std::cout << "One or more tests has failed." << std::endl; - } - - return (pass2 ? EXIT_SUCCESS : EXIT_FAILURE); -} diff --git a/sparse/CMakeLists.txt b/sparse/CMakeLists.txt index c576fe962a..cdfda0c614 100644 --- a/sparse/CMakeLists.txt +++ b/sparse/CMakeLists.txt @@ -139,6 +139,13 @@ KOKKOSKERNELS_GENERATE_ETI(Sparse_par_ilut_numeric par_ilut_numeric TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) +KOKKOSKERNELS_GENERATE_ETI(Sparse_gmres gmres + COMPONENTS sparse + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES +) + KOKKOSKERNELS_GENERATE_ETI(Sparse_sptrsv_symbolic sptrsv_symbolic COMPONENTS sparse HEADER_LIST ETI_HEADERS diff --git a/sparse/eti/generated_specializations_cpp/gmres/KokkosSparse_gmres_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/gmres/KokkosSparse_gmres_eti_spec_inst.cpp.in new file mode 100644 index 0000000000..6212e38277 --- /dev/null +++ b/sparse/eti/generated_specializations_cpp/gmres/KokkosSparse_gmres_eti_spec_inst.cpp.in @@ -0,0 +1,53 @@ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 3.0: Linear Algebra and Graph Kernels +// Copyright 2020 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact James Foucar (jgfouca@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + + +#define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true +#include "KokkosKernels_config.h" + +#include "KokkosSparse_gmres_spec.hpp" +namespace KokkosSparse { +namespace Impl { +@SPARSE_GMRES_ETI_INST_BLOCK@ + } //IMPL +} //Kokkos diff --git a/sparse/eti/generated_specializations_cpp/par_ilut_numeric/KokkosSparse_par_ilut_numeric_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/par_ilut_numeric/KokkosSparse_par_ilut_numeric_eti_spec_inst.cpp.in index de06bdfa4d..48f188f6f5 100644 --- a/sparse/eti/generated_specializations_cpp/par_ilut_numeric/KokkosSparse_par_ilut_numeric_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/par_ilut_numeric/KokkosSparse_par_ilut_numeric_eti_spec_inst.cpp.in @@ -2,8 +2,8 @@ //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// KokkosKernels 3.0: Linear Algebra and Graph Kernels +// Copyright 2020 Sandia Corporation // // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, // the U.S. Government retains certain rights in this software. @@ -35,7 +35,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER @@ -49,5 +49,5 @@ namespace KokkosSparse { namespace Impl { @SPARSE_PAR_ILUT_NUMERIC_ETI_INST_BLOCK@ - } //IMPL + } //IMPL } //Kokkos diff --git a/sparse/eti/generated_specializations_cpp/par_ilut_symbolic/KokkosSparse_par_ilut_symbolic_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/par_ilut_symbolic/KokkosSparse_par_ilut_symbolic_eti_spec_inst.cpp.in index adaa577bb7..1f605a9fe9 100644 --- a/sparse/eti/generated_specializations_cpp/par_ilut_symbolic/KokkosSparse_par_ilut_symbolic_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/par_ilut_symbolic/KokkosSparse_par_ilut_symbolic_eti_spec_inst.cpp.in @@ -2,8 +2,8 @@ //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// KokkosKernels 3.0: Linear Algebra and Graph Kernels +// Copyright 2020 Sandia Corporation // // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, // the U.S. Government retains certain rights in this software. @@ -35,7 +35,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER @@ -49,5 +49,5 @@ namespace KokkosSparse { namespace Impl { @SPARSE_PAR_ILUT_SYMBOLIC_ETI_INST_BLOCK@ - } //IMPL + } //IMPL } //Kokkos diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_avail.hpp.in new file mode 100644 index 0000000000..8564fe68af --- /dev/null +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_avail.hpp.in @@ -0,0 +1,53 @@ +#ifndef KOKKOSSPARSE_GMRES_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_GMRES_ETI_SPEC_AVAIL_HPP_ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 3.0: Linear Algebra and Graph Kernels +// Copyright 2020 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact James Foucar (jgfouca@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +namespace KokkosSparse { +namespace Impl { + +@SPARSE_GMRES_ETI_AVAIL_BLOCK@ + +} // Impl +} // KokkosSparse +#endif // KOKKOSSPARSE_GMRES_ETI_SPEC_AVAIL_HPP_ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_decl.hpp.in new file mode 100644 index 0000000000..b08f9a0554 --- /dev/null +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_decl.hpp.in @@ -0,0 +1,53 @@ +#ifndef KOKKOSSPARSE_GMRES_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_GMRES_ETI_SPEC_DECL_HPP_ +/* +//@HEADER +// ************************************************************************ +// +// KokkosKernels 3.0: Linear Algebra and Graph Kernels +// Copyright 2020 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact James Foucar (jgfouca@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +namespace KokkosSparse { +namespace Impl { + +@SPARSE_GMRES_DECL_BLOCK@ + +} // Impl +} // KokkosSparse +#endif // KOKKOSSPARSE_GMRES_ETI_SPEC_DECL_HPP_ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_avail.hpp.in index 718a78f203..bc4a15f42a 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_avail.hpp.in @@ -4,8 +4,8 @@ //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// KokkosKernels 3.0: Linear Algebra and Graph Kernels +// Copyright 2020 Sandia Corporation // // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, // the U.S. Government retains certain rights in this software. @@ -37,7 +37,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_decl.hpp.in index 23738d1acf..e35a104a07 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_decl.hpp.in @@ -4,8 +4,8 @@ //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// KokkosKernels 3.0: Linear Algebra and Graph Kernels +// Copyright 2020 Sandia Corporation // // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, // the U.S. Government retains certain rights in this software. @@ -37,7 +37,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_avail.hpp.in index f26d7cb598..feb54d3255 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_avail.hpp.in @@ -4,8 +4,8 @@ //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// KokkosKernels 3.0: Linear Algebra and Graph Kernels +// Copyright 2020 Sandia Corporation // // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, // the U.S. Government retains certain rights in this software. @@ -37,7 +37,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_decl.hpp.in index d7f643850e..ba0aad9884 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_decl.hpp.in @@ -4,8 +4,8 @@ //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// KokkosKernels 3.0: Linear Algebra and Graph Kernels +// Copyright 2020 Sandia Corporation // // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, // the U.S. Government retains certain rights in this software. @@ -37,7 +37,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER diff --git a/sparse/impl/KokkosSparse_gmres_impl.hpp b/sparse/impl/KokkosSparse_gmres_impl.hpp new file mode 100644 index 0000000000..5253dd47aa --- /dev/null +++ b/sparse/impl/KokkosSparse_gmres_impl.hpp @@ -0,0 +1,389 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact James Foucar (jgfouca@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSSPARSE_IMPL_GMRES_HPP_ +#define KOKKOSSPARSE_IMPL_GMRES_HPP_ + +/// \file KokkosSparse_gmres_impl.hpp +/// \brief Implementation(s) of the numeric phase of GMRES. + +#include +#include +#include +#include +#include +#include +#include +#include "KokkosKernels_Error.hpp" + +namespace KokkosSparse { +namespace Impl { +namespace Experimental { + +template +struct GmresWrap { + // + // Useful types + // + using execution_space = typename GmresHandle::execution_space; + using index_t = typename GmresHandle::nnz_lno_t; + using size_type = typename GmresHandle::size_type; + using scalar_t = typename GmresHandle::nnz_scalar_t; + using HandleDeviceEntriesType = typename GmresHandle::nnz_lno_view_t; + using HandleDeviceRowMapType = typename GmresHandle::nnz_row_view_t; + using HandleDeviceValueType = typename GmresHandle::nnz_value_view_t; + using HandleDevice2dValueType = typename GmresHandle::nnz_value_view2d_t; + using karith = typename Kokkos::ArithTraits; + using device_t = typename HandleDeviceEntriesType::device_type; + + /** + * The main gmres numeric function. Copied with slight modifications from + * example/gmres/gmres.hpp + */ + template + static void gmres( + GmresHandle& thandle, const AMatrix& A, const BType& B, XType& X, + KokkosSparse::Experimental::Preconditioner* precond = nullptr) { + using ST = typename karith::val_type; // So this code will run with + // scalar_t = std::complex. + using MT = typename karith::mag_type; + using HandleHostValueType = typename HandleDeviceValueType::HostMirror; + + ST one = karith::one(); + ST zero = karith::zero(); + + Kokkos::Profiling::pushRegion("GMRES::TotalTime:"); + + // Store solver options: + const auto n = A.numRows(); + const int m = thandle.get_m(); + const auto maxRestart = thandle.get_max_restart(); + const auto tol = thandle.get_tol(); + const auto ortho = thandle.get_ortho(); + const auto verbose = thandle.get_verbose(); + + bool converged = false; + size_type cycle = 0; // How many times have we restarted? + size_type numIters = 0; // Number of iterations within the cycle before + // convergence. + MT nrmB, trueRes, relRes, shortRelRes; + + if (verbose) { + std::cout << "Starting GMRES with..." << std::endl; + std::cout << " n: " << n << std::endl; + std::cout << " m: " << m << std::endl; + std::cout << " maxRestart: " << maxRestart << std::endl; + std::cout << " tol: " << tol << std::endl; + std::cout << " ortho: " + << ((ortho == GmresHandle::Ortho::CGS2) ? "CGS2" : "MGS") + << std::endl; + } + + // Make tmp work views + + HandleDeviceValueType Xiter( + "Xiter", n), // Intermediate solution at iterations before restart. + Res(Kokkos::view_alloc(Kokkos::WithoutInitializing, "Res"), + n), // Residual vector + Wj(Kokkos::view_alloc(Kokkos::WithoutInitializing, "W_j"), + n), // Tmp work vector 1 + Wj2(Kokkos::view_alloc(Kokkos::WithoutInitializing, "W_j2"), + n), // Tmp work vector 2 + orthoTmp(Kokkos::view_alloc(Kokkos::WithoutInitializing, "orthoTmp"), + m); + + HandleHostValueType GVec_h( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "GVec"), m + 1); + HandleDevice2dValueType GLsSoln( + "GLsSoln", m, + 1); // LS solution vec for Givens Rotation. Must be 2-D for trsm. + auto GLsSoln_h = Kokkos::create_mirror_view( + GLsSoln); // This one is needed for triangular solve. + HandleHostValueType CosVal_h("CosVal", m), SinVal_h("SinVal", m); + HandleDevice2dValueType V( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "V"), n, m + 1), + VSub, // Subview of 1st m cols for updating soln. + H("H", m + 1, m); // H matrix on device. Also used in Arn Rec debug. + + auto H_h = Kokkos::create_mirror_view(H); // Make H into a host view of H. + + // Compute initial residuals: + nrmB = KokkosBlas::nrm2(B); + Kokkos::deep_copy(Res, B); + + // This is initial true residual, so don't need prec here. + KokkosSparse::spmv("N", one, A, X, zero, Wj); // wj = Ax + KokkosBlas::axpy(-one, Wj, Res); // res = res-Wj = b-Ax. + trueRes = KokkosBlas::nrm2(Res); + if (nrmB != 0) { + relRes = trueRes / nrmB; + } else if (trueRes == 0) { + relRes = trueRes; + } else { // B is zero, but X has wrong initial guess. + Kokkos::deep_copy(X, 0.0); + relRes = 0; + } + shortRelRes = relRes; + if (verbose) { + std::cout << "Initial relative residual is: " << relRes << std::endl; + } + if (relRes < tol) { + converged = true; + } + + while (!converged && cycle <= maxRestart && shortRelRes >= 1e-14) { + GVec_h(0) = trueRes; + + // Run Arnoldi iteration: + auto Vj = Kokkos::subview(V, Kokkos::ALL, 0); + Kokkos::deep_copy(Vj, Res); + KokkosBlas::scal(Vj, one / trueRes, Vj); // V0 = V0/norm(V0) + + for (int j = 0; j < m; j++) { + if (precond) { // Apply Right prec + precond->apply(Vj, Wj2); // wj2 = M*Vj + KokkosSparse::spmv("N", one, A, Wj2, zero, Wj); // wj = A*MVj = A*Wj2 + } else { + KokkosSparse::spmv("N", one, A, Vj, zero, Wj); // wj = A*Vj + } + Kokkos::Profiling::pushRegion("GMRES::Orthog:"); + if (ortho == GmresHandle::Ortho::MGS) { + for (int i = 0; i <= j; i++) { + auto Vi = Kokkos::subview(V, Kokkos::ALL, i); + H_h(i, j) = KokkosBlas::dot(Vi, Wj); // Vi^* Wj + KokkosBlas::axpy(-H_h(i, j), Vi, Wj); // wj = wj-Hij*Vi + } + auto Hj_h = Kokkos::subview(H_h, Kokkos::make_pair(0, j + 1), j); + } else if (ortho == GmresHandle::Ortho::CGS2) { + auto V0j = + Kokkos::subview(V, Kokkos::ALL, Kokkos::make_pair(0, j + 1)); + auto Hj = Kokkos::subview(H, Kokkos::make_pair(0, j + 1), j); + auto Hj_h = Kokkos::subview(H_h, Kokkos::make_pair(0, j + 1), j); + KokkosBlas::gemv("C", one, V0j, Wj, zero, Hj); // Hj = Vj^T * wj + KokkosBlas::gemv("N", -one, V0j, Hj, one, Wj); // wj = wj - Vj * Hj + + // Re-orthog CGS: + auto orthoTmpSub = + Kokkos::subview(orthoTmp, Kokkos::make_pair(0, j + 1)); + KokkosBlas::gemv("C", one, V0j, Wj, zero, + orthoTmpSub); // tmp (Hj) = Vj^T * wj + KokkosBlas::gemv("N", -one, V0j, orthoTmpSub, one, + Wj); // wj = wj - Vj * tmp + KokkosBlas::axpy(one, orthoTmpSub, Hj); // Hj = Hj + tmp + Kokkos::deep_copy(Hj_h, Hj); + } else { + throw std::invalid_argument( + "Invalid argument for 'ortho'. Please use 'CGS2' or 'MGS'."); + } + + MT tmpNrm = KokkosBlas::nrm2(Wj); + H_h(j + 1, j) = tmpNrm; + if (tmpNrm > 1e-14) { + Vj = Kokkos::subview(V, Kokkos::ALL, j + 1); + KokkosBlas::scal(Vj, one / H_h(j + 1, j), Wj); // Vj = Wj/H(j+1,j) + } + Kokkos::Profiling::popRegion(); + + // Givens for real and complex (See Alg 3 in "On computing Givens + // rotations reliably and efficiently" by Demmel, et. al. 2001) Apply + // Givens rotation and compute shortcut residual: + for (int i = 0; i < j; i++) { + ST tempVal = CosVal_h(i) * H_h(i, j) + SinVal_h(i) * H_h(i + 1, j); + H_h(i + 1, j) = -karith::conj(SinVal_h(i)) * H_h(i, j) + + CosVal_h(i) * H_h(i + 1, j); + H_h(i, j) = tempVal; + } + ST f = H_h(j, j); + ST g = H_h(j + 1, j); + MT f2 = karith::real(f) * karith::real(f) + + karith::imag(f) * karith::imag(f); + MT g2 = karith::real(g) * karith::real(g) + + karith::imag(g) * karith::imag(g); + ST fg2 = f2 + g2; + ST D1 = one / karith::sqrt(f2 * fg2); + CosVal_h(j) = f2 * D1; + fg2 = fg2 * D1; + H_h(j, j) = f * fg2; + SinVal_h(j) = f * D1 * karith::conj(g); + H_h(j + 1, j) = zero; + + GVec_h(j + 1) = GVec_h(j) * (-karith::conj(SinVal_h(j))); + GVec_h(j) = GVec_h(j) * CosVal_h(j); + shortRelRes = karith::abs(GVec_h(j + 1)) / nrmB; + + if (verbose) { + std::cout << "Shortcut relative residual for iteration " + << j + (cycle * m) << " is: " << shortRelRes << std::endl; + } + if (tmpNrm <= 1e-14 && shortRelRes >= tol) { + throw std::runtime_error( + "GMRES has experienced lucky breakdown, but the residual has not converged.\n\ + Solver terminated without convergence."); + } + if (karith::isNan(ST(shortRelRes))) { + throw std::runtime_error( + "gmres: Relative residual is nan. Terminating solver."); + } + + // If short residual converged, or time to restart, check true residual + if (shortRelRes < tol || j == m - 1) { + // Compute least squares soln with Givens rotation: + auto GLsSolnSub_h = Kokkos::subview( + GLsSoln_h, Kokkos::ALL, + 0); // Original view has rank 2, need a rank 1 here. + auto GVecSub_h = Kokkos::subview(GVec_h, Kokkos::make_pair(0, m)); + Kokkos::deep_copy(GLsSolnSub_h, + GVecSub_h); // Copy LS rhs vec for triangle solve. + auto GLsSolnSub2_h = Kokkos::subview( + GLsSoln_h, Kokkos::make_pair(0, j + 1), Kokkos::ALL); + auto H_Sub_h = Kokkos::subview(H_h, Kokkos::make_pair(0, j + 1), + Kokkos::make_pair(0, j + 1)); + { + // Hack to get around uninstantiated trsm for layoutleft + KokkosBlas::Impl::SerialTrsm_Invoke("L", "U", "N", "N", one, + H_Sub_h, GLsSolnSub2_h); + } + Kokkos::deep_copy(GLsSoln, GLsSoln_h); + + // Update solution and compute residual with Givens: + VSub = Kokkos::subview(V, Kokkos::ALL, Kokkos::make_pair(0, j + 1)); + Kokkos::deep_copy( + Xiter, + X); // Can't overwrite X with intermediate solution. + auto GLsSolnSub3 = + Kokkos::subview(GLsSoln, Kokkos::make_pair(0, j + 1), 0); + if (precond) { // Apply right prec to correct soln. + KokkosBlas::gemv("N", one, VSub, GLsSolnSub3, zero, + Wj); // wj = V(1:j+1)*lsSoln + precond->apply(Wj, Xiter, "N", one, one); // Xiter = M*wj + X + } else { + KokkosBlas::gemv("N", one, VSub, GLsSolnSub3, one, + Xiter); // x_iter = x + V(1:j+1)*lsSoln + } + KokkosSparse::spmv("N", one, A, Xiter, zero, Wj); // wj = Ax + Kokkos::deep_copy(Res, B); // Reset r=b. + KokkosBlas::axpy(-one, Wj, Res); // r = b-Ax. + trueRes = KokkosBlas::nrm2(Res); + relRes = trueRes / nrmB; + if (verbose) { + std::cout << "True relative residual for iteration " + << j + (cycle * m) << " is : " << relRes << std::endl; + } + numIters = j + 1; + + if (relRes < tol) { + converged = true; + Kokkos::deep_copy( + X, Xiter); // Final solution is the iteration solution. + break; // End Arnoldi iteration. + } else if (shortRelRes < 1e-30) { + if (verbose) { + std::cout + << "Short residual has converged to machine zero, but true " + "residual is not converged.\n" + << "You may have given GMRES a singular matrix. Ending the " + "GMRES iteration." + << std::endl; + } + break; // End Arnoldi iteration; we can't make any more progress. + } + } + + } // end Arnoldi iter. + + cycle++; + + // This is the end, or it's time to restart. Update solution to most + // recent vector. + Kokkos::deep_copy(X, Xiter); + } + + int num_iters = 0; + MT end_rel_res = 0; + typename GmresHandle::Flag conv_flag_val; + if (verbose) { + std::cout << "Ending relative residual is: " << relRes << std::endl; + } + end_rel_res = static_cast(relRes); + if (converged) { + if (verbose) { + std::cout << "Solver converged! " << std::endl; + } + conv_flag_val = GmresHandle::Flag::Conv; + } else if (shortRelRes < tol) { + if (verbose) { + std::cout + << "Shortcut residual converged, but solver experienced a loss " + "of accuracy." + << std::endl; + } + conv_flag_val = GmresHandle::Flag::LOA; + } else { + if (verbose) { + std::cout << "Solver did not converge. :( " << std::endl; + } + conv_flag_val = GmresHandle::Flag::NoConv; + } + if (cycle > 0) { + num_iters = (cycle - 1) * m + numIters; + } else { + num_iters = 0; + } + if (verbose) { + std::cout << "The solver completed " << num_iters << " iterations." + << std::endl; + } + + thandle.set_stats(num_iters, end_rel_res, conv_flag_val); + + Kokkos::Profiling::popRegion(); + } // end gmres + +}; // struct GmresWrap + +} // namespace Experimental +} // namespace Impl +} // namespace KokkosSparse + +#endif diff --git a/sparse/impl/KokkosSparse_gmres_spec.hpp b/sparse/impl/KokkosSparse_gmres_spec.hpp new file mode 100644 index 0000000000..f4f141fcd4 --- /dev/null +++ b/sparse/impl/KokkosSparse_gmres_spec.hpp @@ -0,0 +1,188 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact James Foucar (jgfouca@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#ifndef KOKKOSSPARSE_IMPL_GMRES_SPEC_HPP_ +#define KOKKOSSPARSE_IMPL_GMRES_SPEC_HPP_ + +#include +#include +#include +#include "KokkosSparse_CrsMatrix.hpp" +#include "KokkosKernels_Handle.hpp" + +// Include the actual functors +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +#include +#endif + +namespace KokkosSparse { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct gmres_eti_spec_avail { + enum : bool { value = false }; +}; + +} // namespace Impl +} // namespace KokkosSparse + +#define KOKKOSSPARSE_GMRES_ETI_SPEC_AVAIL(SCALAR_TYPE, ORDINAL_TYPE, \ + OFFSET_TYPE, LAYOUT_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \ + template <> \ + struct gmres_eti_spec_avail< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ + const SCALAR_TYPE, const ORDINAL_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits, const OFFSET_TYPE, \ + Kokkos::View< \ + const SCALAR_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + SCALAR_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits > > { \ + enum : bool { value = true }; \ + }; + +// Include the actual specialization declarations +#include +#include + +namespace KokkosSparse { +namespace Impl { + +// Unification layer +/// \brief Implementation of KokkosSparse::gmres + +template ::value, + bool eti_spec_avail = gmres_eti_spec_avail< + KernelHandle, AT, AO, AD, AM, AS, BType, XType>::value> +struct GMRES { + using AMatrix = CrsMatrix; + static void gmres( + KernelHandle *handle, const AMatrix &A, const BType &B, XType &X, + KokkosSparse::Experimental::Preconditioner *precond = nullptr); +}; + +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +//! Full specialization of gmres +// Unification layer +template +struct GMRES { + using AMatrix = CrsMatrix; + static void gmres( + KernelHandle *handle, const AMatrix &A, const BType &B, XType &X, + KokkosSparse::Experimental::Preconditioner *precond = nullptr) { + auto gmres_handle = handle->get_gmres_handle(); + using Gmres = Experimental::GmresWrap< + typename std::remove_pointer::type>; + + Gmres::gmres(*gmres_handle, A, B, X, precond); + } +}; + +#endif +} // namespace Impl +} // namespace KokkosSparse + +// +// Macro for declaration of full specialization of +// This is NOT for users!!! All +// the declarations of full specializations go in this header file. +// We may spread out definitions (see _DEF macro below) across one or +// more .cpp files. +// +#define KOKKOSSPARSE_GMRES_ETI_SPEC_DECL(SCALAR_TYPE, ORDINAL_TYPE, \ + OFFSET_TYPE, LAYOUT_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \ + extern template struct GMRES< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ + const SCALAR_TYPE, const ORDINAL_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits, const OFFSET_TYPE, \ + Kokkos::View< \ + const SCALAR_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + SCALAR_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + false, true>; + +#define KOKKOSSPARSE_GMRES_ETI_SPEC_INST(SCALAR_TYPE, ORDINAL_TYPE, \ + OFFSET_TYPE, LAYOUT_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \ + template struct GMRES< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ + EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ + const SCALAR_TYPE, const ORDINAL_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits, const OFFSET_TYPE, \ + Kokkos::View< \ + const SCALAR_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + Kokkos::View< \ + SCALAR_TYPE *, LAYOUT_TYPE, \ + Kokkos::Device, \ + Kokkos::MemoryTraits >, \ + false, true>; + +#include +#include + +#endif diff --git a/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp b/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp index d3e74bc530..d381b9e254 100644 --- a/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp +++ b/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp @@ -36,7 +36,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER diff --git a/sparse/impl/KokkosSparse_par_ilut_numeric_spec.hpp b/sparse/impl/KokkosSparse_par_ilut_numeric_spec.hpp index 56302c9d24..0fa811df3e 100644 --- a/sparse/impl/KokkosSparse_par_ilut_numeric_spec.hpp +++ b/sparse/impl/KokkosSparse_par_ilut_numeric_spec.hpp @@ -36,7 +36,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER diff --git a/sparse/impl/KokkosSparse_par_ilut_symbolic_impl.hpp b/sparse/impl/KokkosSparse_par_ilut_symbolic_impl.hpp index db5654a4f1..e7b306b5f1 100644 --- a/sparse/impl/KokkosSparse_par_ilut_symbolic_impl.hpp +++ b/sparse/impl/KokkosSparse_par_ilut_symbolic_impl.hpp @@ -36,7 +36,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER diff --git a/sparse/impl/KokkosSparse_par_ilut_symbolic_spec.hpp b/sparse/impl/KokkosSparse_par_ilut_symbolic_spec.hpp index 2ba47683c5..f8d521db8f 100644 --- a/sparse/impl/KokkosSparse_par_ilut_symbolic_spec.hpp +++ b/sparse/impl/KokkosSparse_par_ilut_symbolic_spec.hpp @@ -36,7 +36,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER diff --git a/sparse/src/KokkosKernels_Handle.hpp b/sparse/src/KokkosKernels_Handle.hpp index 40049c0c48..efd8ac3faf 100644 --- a/sparse/src/KokkosKernels_Handle.hpp +++ b/sparse/src/KokkosKernels_Handle.hpp @@ -50,6 +50,7 @@ #include "KokkosSparse_sptrsv_handle.hpp" #include "KokkosSparse_spiluk_handle.hpp" #include "KokkosSparse_par_ilut_handle.hpp" +#include "KokkosSparse_gmres_handle.hpp" #include "KokkosKernels_default_types.hpp" #ifndef _KOKKOSKERNELHANDLE_HPP @@ -187,6 +188,7 @@ class KokkosKernelsHandle { this->sptrsvHandle = right_side_handle.get_sptrsv_handle(); this->spilukHandle = right_side_handle.get_spiluk_handle(); this->par_ilutHandle = right_side_handle.get_par_ilut_handle(); + this->gmresHandle = right_side_handle.get_gmres_handle(); this->team_work_size = right_side_handle.get_set_team_work_size(); this->shared_memory_size = right_side_handle.get_shmem_size(); @@ -210,6 +212,7 @@ class KokkosKernelsHandle { is_owner_of_the_sptrsv_handle = false; is_owner_of_the_spiluk_handle = false; is_owner_of_the_par_ilut_handle = false; + is_owner_of_the_gmres_handle = false; // return *this; } @@ -309,6 +312,11 @@ class KokkosKernelsHandle { HandleTempMemorySpace, HandlePersistentMemorySpace> PAR_ILUTHandleType; + typedef typename KokkosSparse::Experimental::GMRESHandle< + const_size_type, const_nnz_lno_t, const_nnz_scalar_t, HandleExecSpace, + HandleTempMemorySpace, HandlePersistentMemorySpace> + GMRESHandleType; + private: GraphColoringHandleType *gcHandle; GraphColorDistance2HandleType *gcHandle_d2; @@ -325,6 +333,7 @@ class KokkosKernelsHandle { SPTRSVHandleType *sptrsvHandle; SPILUKHandleType *spilukHandle; PAR_ILUTHandleType *par_ilutHandle; + GMRESHandleType *gmresHandle; int team_work_size; size_t shared_memory_size; @@ -348,6 +357,7 @@ class KokkosKernelsHandle { bool is_owner_of_the_sptrsv_handle; bool is_owner_of_the_spiluk_handle; bool is_owner_of_the_par_ilut_handle; + bool is_owner_of_the_gmres_handle; public: KokkosKernelsHandle() @@ -365,6 +375,7 @@ class KokkosKernelsHandle { sptrsvHandle(NULL), spilukHandle(NULL), par_ilutHandle(NULL), + gmresHandle(NULL), team_work_size(-1), shared_memory_size(16128), suggested_team_size(-1), @@ -386,7 +397,8 @@ class KokkosKernelsHandle { is_owner_of_the_spadd_handle(true), is_owner_of_the_sptrsv_handle(true), is_owner_of_the_spiluk_handle(true), - is_owner_of_the_par_ilut_handle(true) {} + is_owner_of_the_par_ilut_handle(true), + is_owner_of_the_gmres_handle(true) {} ~KokkosKernelsHandle() { this->destroy_gs_handle(); @@ -402,6 +414,7 @@ class KokkosKernelsHandle { this->destroy_sptrsv_handle(); this->destroy_spiluk_handle(); this->destroy_par_ilut_handle(); + this->destroy_gmres_handle(); } void set_verbose(bool verbose_) { this->KKVERBOSE = verbose_; } @@ -886,12 +899,12 @@ class KokkosKernelsHandle { } PAR_ILUTHandleType *get_par_ilut_handle() { return this->par_ilutHandle; } - void create_par_ilut_handle(size_type nrows, size_type nnzL = 0, - size_type nnzU = 0) { + void create_par_ilut_handle(const size_type nrows, const size_type nnzL = 0, + const size_type nnzU = 0, + const size_type max_iter = 1) { this->destroy_par_ilut_handle(); this->is_owner_of_the_par_ilut_handle = true; - this->par_ilutHandle = new PAR_ILUTHandleType(nrows, nnzL, nnzU); - this->par_ilutHandle->reset_handle(nrows, nnzL, nnzU); + this->par_ilutHandle = new PAR_ILUTHandleType(nrows, nnzL, nnzU, max_iter); this->par_ilutHandle->set_team_size(this->team_work_size); this->par_ilutHandle->set_vector_size(this->vector_size); } @@ -902,6 +915,21 @@ class KokkosKernelsHandle { } } + GMRESHandleType *get_gmres_handle() { return this->gmresHandle; } + void create_gmres_handle(const size_type m = 50, + const typename GMRESHandleType::float_t tol = 1e-8, + const size_type max_restart = 50) { + this->destroy_gmres_handle(); + this->is_owner_of_the_gmres_handle = true; + this->gmresHandle = new GMRESHandleType(m, tol, max_restart); + } + void destroy_gmres_handle() { + if (is_owner_of_the_gmres_handle && this->gmresHandle != nullptr) { + delete this->gmresHandle; + this->gmresHandle = nullptr; + } + } + }; // end class KokkosKernelsHandle } // namespace Experimental diff --git a/sparse/src/KokkosSparse.hpp b/sparse/src/KokkosSparse.hpp index 702db14344..9be6aa9bc0 100644 --- a/sparse/src/KokkosSparse.hpp +++ b/sparse/src/KokkosSparse.hpp @@ -61,3 +61,4 @@ #include "KokkosSparse_spgemm.hpp" #include "KokkosSparse_gauss_seidel.hpp" #include "KokkosSparse_par_ilut.hpp" +#include "KokkosSparse_gmres.hpp" diff --git a/sparse/src/KokkosSparse_CrsMatrix.hpp b/sparse/src/KokkosSparse_CrsMatrix.hpp index dda08faba9..7a6459d88e 100644 --- a/sparse/src/KokkosSparse_CrsMatrix.hpp +++ b/sparse/src/KokkosSparse_CrsMatrix.hpp @@ -426,8 +426,7 @@ class CrsMatrix { //! Nonconst version of the type of row offsets in the sparse matrix. typedef typename row_map_type::non_const_value_type non_const_size_type; //! Kokkos Array type of the entries (values) in the sparse matrix. - typedef Kokkos::View + typedef Kokkos::View values_type; //! Const version of the type of the entries in the sparse matrix. typedef typename values_type::const_value_type const_value_type; diff --git a/example/gmres/KokkosSparse_MatrixPrec.hpp b/sparse/src/KokkosSparse_MatrixPrec.hpp similarity index 68% rename from example/gmres/KokkosSparse_MatrixPrec.hpp rename to sparse/src/KokkosSparse_MatrixPrec.hpp index f414c2ac74..1686cc0563 100644 --- a/example/gmres/KokkosSparse_MatrixPrec.hpp +++ b/sparse/src/KokkosSparse_MatrixPrec.hpp @@ -46,49 +46,51 @@ #ifndef KK_MATRIX_PREC_HPP #define KK_MATRIX_PREC_HPP -#include -#include -#include -#include +#include +#include +#include +#include -namespace KokkosSparse{ +namespace KokkosSparse { -namespace Experimental{ +namespace Experimental { /// \class MatrixPrec -/// \brief This is a simple class to use if one -/// already has a matrix representation of their +/// \brief This is a simple class to use if one +/// already has a matrix representation of their /// preconditioner M. The class applies an -/// SpMV with M as the preconditioning step. +/// SpMV with M as the preconditioning step. /// \tparam ScalarType Type of the matrix's entries -/// \tparam Layout Kokkos layout of vectors X and Y to which +/// \tparam Layout Kokkos layout of vectors X and Y to which /// the preconditioner is applied /// \tparam EXSP Execution space for the preconditioner apply -/// \tparam Ordinal Type of the matrix's indices; +/// \tparam Ordinal Type of the matrix's indices; /// /// Preconditioner provides the following methods -/// - initialize() Does nothing; Matrix initialized upon object construction. -/// - isInitialized() returns true +/// - initialize() Does nothing; Matrix initialized upon object construction. +/// - isInitialized() returns true /// - compute() Does nothing; Matrix initialized upon object construction. -/// - isComputed() returns true +/// - isComputed() returns true /// -template< class ScalarType, class Layout, class EXSP, class OrdinalType = int > -class MatrixPrec : virtual public KokkosSparse::Experimental::Preconditioner -{ -private: - using crsMat_t = KokkosSparse::CrsMatrix; - crsMat_t A; +template +class MatrixPrec : public KokkosSparse::Experimental::Preconditioner { + private: + CRS A; - bool isInitialized_ = true; - bool isComputed_ = true; + bool isInitialized_ = true; + bool isComputed_ = true; + + public: + using ScalarType = typename std::remove_const::type; + using EXSP = typename CRS::execution_space; + using karith = typename Kokkos::ArithTraits; -public: //! Constructor: - MatrixPrec (const KokkosSparse::CrsMatrix &mat) - : A(mat) {} + template + MatrixPrec(const CRSArg &mat) : A(mat) {} //! Destructor. - virtual ~MatrixPrec(){} + virtual ~MatrixPrec() {} ///// \brief Apply the preconditioner to X, putting the result in Y. ///// @@ -102,37 +104,36 @@ class MatrixPrec : virtual public KokkosSparse::Experimental::Preconditioner &X, - Kokkos::View &Y, - const char transM[] = "N", - ScalarType alpha = Kokkos::Details::ArithTraits::one(), - ScalarType beta = Kokkos::Details::ArithTraits::zero()) const - { + virtual void apply(const Kokkos::View &X, + const Kokkos::View &Y, + const char transM[] = "N", + ScalarType alpha = karith::one(), + ScalarType beta = karith::zero()) const { KokkosSparse::spmv(transM, alpha, A, X, beta, Y); - }; + } //@} //! Set this preconditioner's parameters. - void setParameters () {} + void setParameters() {} - void initialize() { } + void initialize() {} //! True if the preconditioner has been successfully initialized, else false. - bool isInitialized() const { return isInitialized_;} + bool isInitialized() const { return isInitialized_; } - void compute(){ } + void compute() {} //! True if the preconditioner has been successfully computed, else false. - bool isComputed() const {return isComputed_;} - - //! True if the preconditioner implements a transpose operator apply. - bool hasTransposeApply() const { return true; } + bool isComputed() const { return isComputed_; } + //! True if the preconditioner implements a transpose operator apply. + bool hasTransposeApply() const { return true; } }; -} //End Experimental -} //End namespace KokkosSparse +} // namespace Experimental +} // End namespace KokkosSparse #endif diff --git a/example/gmres/KokkosSparse_Preconditioner.hpp b/sparse/src/KokkosSparse_Preconditioner.hpp similarity index 80% rename from example/gmres/KokkosSparse_Preconditioner.hpp rename to sparse/src/KokkosSparse_Preconditioner.hpp index b8384954ef..999924c9c0 100644 --- a/example/gmres/KokkosSparse_Preconditioner.hpp +++ b/sparse/src/KokkosSparse_Preconditioner.hpp @@ -46,21 +46,20 @@ #ifndef KK_PREC_HPP #define KK_PREC_HPP -#include -#include -#include +#include +#include +#include -namespace KokkosSparse{ - -namespace Experimental{ +namespace KokkosSparse { +namespace Experimental { /// \class Preconditioner /// \brief Interface for KokkosKernels preconditioners /// \tparam ScalarType Type of the matrix's entries -/// \tparam Layout Kokkos layout of vectors X and Y to which +/// \tparam Layout Kokkos layout of vectors X and Y to which /// the preconditioner is applied /// \tparam EXSP Execution space for the preconditioner apply -/// \tparam Ordinal Type of the matrix's indices; +/// \tparam Ordinal Type of the matrix's indices; /// /// Preconditioner provides the following methods /// - initialize() performs all operations based on the graph of the @@ -75,20 +74,23 @@ namespace Experimental{ /// /// Implementations of compute() must internally call initialize() if /// isInitialized() returns false. The preconditioner is applied by -/// apply(). -/// Every time that initialize() is called, the object destroys all the previously -/// allocated information, and reinitializes the preconditioner. Every -/// time compute() is called, the object recomputes the actual values of +/// apply(). +/// Every time that initialize() is called, the object destroys all the +/// previously allocated information, and reinitializes the preconditioner. +/// Every time compute() is called, the object recomputes the actual values of /// the preconditioner. -template< class ScalarType, class Layout, class EXSP, class OrdinalType = int > -class Preconditioner{ - -public: +template +class Preconditioner { + public: + using ScalarType = typename std::remove_const::type; + using EXSP = typename CRS::execution_space; + using karith = typename Kokkos::ArithTraits; + //! Constructor: - Preconditioner(){} + Preconditioner() {} //! Destructor. - virtual ~Preconditioner(){} + virtual ~Preconditioner() {} ///// \brief Apply the preconditioner to X, putting the result in Y. ///// @@ -102,19 +104,19 @@ class Preconditioner{ ///// \param beta [in] Input coefficient of Y ///// ///// If the result of applying this preconditioner to a vector X is - ///// \f$M \cdot X\f$, then this method computes \f$Y = \beta Y + \alpha M \cdot X\f$. + ///// \f$M \cdot X\f$, then this method computes \f$Y = \beta Y + \alpha M + ///\cdot X\f$. ///// The typical case is \f$\beta = 0\f$ and \f$\alpha = 1\f$. // - virtual void - apply (const Kokkos::View &X, - Kokkos::View &Y, - const char transM[] = "N", - ScalarType alpha = Kokkos::Details::ArithTraits::one(), - ScalarType beta = Kokkos::Details::ArithTraits::zero()) const = 0; + virtual void apply(const Kokkos::View &X, + const Kokkos::View &Y, + const char transM[] = "N", + ScalarType alpha = karith::one(), + ScalarType beta = karith::zero()) const = 0; //@} //! Set this preconditioner's parameters. - virtual void setParameters () = 0; + virtual void setParameters() = 0; /// @brief Set up the graph structure of this preconditioner. /// @@ -144,12 +146,11 @@ class Preconditioner{ //! True if the preconditioner has been successfully computed, else false. virtual bool isComputed() const = 0; - //! True if the preconditioner implements a transpose operator apply. - virtual bool hasTransposeApply() const { return false; } - + //! True if the preconditioner implements a transpose operator apply. + virtual bool hasTransposeApply() const { return false; } }; -} // End Experimental -} //End namespace KokkosSparse +} // namespace Experimental +} // End namespace KokkosSparse #endif diff --git a/sparse/src/KokkosSparse_gmres.hpp b/sparse/src/KokkosSparse_gmres.hpp new file mode 100644 index 0000000000..42cd46c17d --- /dev/null +++ b/sparse/src/KokkosSparse_gmres.hpp @@ -0,0 +1,195 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact James Foucar (jgfouca@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +/// \file KokkosSparse_gmres.hpp +/// \brief GMRES Ax = b solver +/// +/// This file provides KokkosSparse::gmres. This function performs a +/// local (no MPI) solve of Ax = b for sparse A. It is expected that A is in +/// compressed row sparse ("Crs") format. +/// +/// This algorithm is described in the paper: +/// GMRES - A Generalized Minimal Residual Algorithm for Solving Nonsymmetric +/// Linear Systems - Saad, Schultz +/// +/// For more info, see example/gmres/README.md + +#ifndef KOKKOSSPARSE_GMRES_HPP_ +#define KOKKOSSPARSE_GMRES_HPP_ + +#include + +#include "KokkosKernels_helpers.hpp" +#include "KokkosKernels_Error.hpp" +#include "KokkosSparse_gmres_spec.hpp" +#include "KokkosSparse_Preconditioner.hpp" + +namespace KokkosSparse { +namespace Experimental { + +#define KOKKOSKERNELS_GMRES_SAME_TYPE(A, B) \ + std::is_same::type, \ + typename std::remove_const::type>::value + +template +void gmres(KernelHandle* handle, AMatrix& A, BType& B, XType& X, + Preconditioner* precond = nullptr) { + using scalar_type = typename KernelHandle::nnz_scalar_t; + using size_type = typename KernelHandle::size_type; + using ordinal_type = typename KernelHandle::nnz_lno_t; + + static_assert( + KOKKOSKERNELS_GMRES_SAME_TYPE(typename BType::value_type, scalar_type), + "gmres: B scalar type must match KernelHandle entry " + "type (aka nnz_scalar_t, and const doesn't matter)"); + + static_assert( + KOKKOSKERNELS_GMRES_SAME_TYPE(typename XType::value_type, scalar_type), + "gmres: X scalar type must match KernelHandle entry " + "type (aka nnz_scalar_t, and const doesn't matter)"); + + static_assert( + KOKKOSKERNELS_GMRES_SAME_TYPE(typename AMatrix::value_type, scalar_type), + "gmres: A scalar type must match KernelHandle entry " + "type (aka nnz_scalar_t, and const doesn't matter)"); + + static_assert(KOKKOSKERNELS_GMRES_SAME_TYPE(typename AMatrix::ordinal_type, + ordinal_type), + "gmres: A ordinal type must match KernelHandle entry " + "type (aka nnz_lno_t, and const doesn't matter)"); + + static_assert( + KOKKOSKERNELS_GMRES_SAME_TYPE(typename AMatrix::size_type, size_type), + "gmres: A size type must match KernelHandle entry " + "type (aka size_type, and const doesn't matter)"); + + static_assert(KokkosSparse::is_crs_matrix::value, + "gmres: A is not a CRS matrix."); + static_assert(Kokkos::is_view::value, + "gmres: B is not a Kokkos::View."); + static_assert(Kokkos::is_view::value, + "gmres: X is not a Kokkos::View."); + + static_assert(BType::rank == 1, "gmres: B must have rank 1"); + static_assert(XType::rank == 1, "gmres: X must have rank 1"); + + static_assert(std::is_same::value, + "gmres: The output X must be nonconst."); + + static_assert(std::is_same::value, + "gmres: X and B have different device types."); + + static_assert(std::is_same::value, + "gmres: A and B have different device types."); + + using c_size_t = typename KernelHandle::const_size_type; + using c_lno_t = typename KernelHandle::const_nnz_lno_t; + using c_scalar_t = typename KernelHandle::const_nnz_scalar_t; + + using c_exec_t = typename KernelHandle::HandleExecSpace; + using c_temp_t = typename KernelHandle::HandleTempMemorySpace; + using c_persist_t = typename KernelHandle::HandlePersistentMemorySpace; + + if ((X.extent(0) != B.extent(0)) || + (static_cast(A.numCols()) != static_cast(X.extent(0))) || + (static_cast(A.numRows()) != static_cast(B.extent(0)))) { + std::ostringstream os; + os << "KokkosSparse::gmres: Dimensions do not match: " + << ", A: " << A.numRows() << " x " << A.numCols() + << ", x: " << X.extent(0) << ", b: " << B.extent(0); + KokkosKernels::Impl::throw_runtime_exception(os.str()); + } + + using const_handle_type = + typename KokkosKernels::Experimental::KokkosKernelsHandle< + c_size_t, c_lno_t, c_scalar_t, c_exec_t, c_temp_t, c_persist_t>; + + const_handle_type tmp_handle(*handle); + + using AMatrix_Internal = KokkosSparse::CrsMatrix< + typename AMatrix::const_value_type, typename AMatrix::const_ordinal_type, + typename AMatrix::device_type, Kokkos::MemoryTraits, + typename AMatrix::const_size_type>; + + using B_Internal = Kokkos::View< + typename BType::const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + typename BType::device_type, + Kokkos::MemoryTraits >; + + using X_Internal = Kokkos::View< + typename XType::non_const_value_type*, + typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, + typename XType::device_type, + Kokkos::MemoryTraits >; + + using Precond_Internal = Preconditioner; + + AMatrix_Internal A_i = A; + B_Internal b_i = B; + X_Internal x_i = X; + + Precond_Internal* precond_i = reinterpret_cast(precond); + + KokkosSparse::Impl::GMRES::gmres(&tmp_handle, A_i, b_i, x_i, + precond_i); + +} // gmres + +} // namespace Experimental +} // namespace KokkosSparse + +#undef KOKKOSKERNELS_GMRES_SAME_TYPE + +#endif // KOKKOSSPARSE_GMRES_HPP_ diff --git a/sparse/src/KokkosSparse_gmres_handle.hpp b/sparse/src/KokkosSparse_gmres_handle.hpp new file mode 100644 index 0000000000..b1d69dfad2 --- /dev/null +++ b/sparse/src/KokkosSparse_gmres_handle.hpp @@ -0,0 +1,220 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact James Foucar (jgfouca@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include +#include +#include + +#ifndef _GMRESHANDLE_HPP +#define _GMRESHANDLE_HPP + +namespace KokkosSparse { +namespace Experimental { + +/** + * The handle class for GMRES. Used to store some input parameters and + * results. + * + * For more info, see KokkosSparse_gmres.hpp doxygen + */ +template +class GMRESHandle { + public: + using HandleExecSpace = ExecutionSpace; + using HandleTempMemorySpace = TemporaryMemorySpace; + using HandlePersistentMemorySpace = PersistentMemorySpace; + + using execution_space = ExecutionSpace; + using memory_space = HandlePersistentMemorySpace; + using device_t = Kokkos::Device; + + using size_type = typename std::remove_const::type; + using const_size_type = const size_type; + + using nnz_lno_t = typename std::remove_const::type; + using const_nnz_lno_t = const nnz_lno_t; + + using nnz_scalar_t = typename std::remove_const::type; + using const_nnz_scalar_t = const nnz_scalar_t; + + using float_t = typename Kokkos::ArithTraits::mag_type; + + using nnz_row_view_t = typename Kokkos::View; + + using nnz_lno_view_t = typename Kokkos::View; + + using nnz_value_view_t = typename Kokkos::View; + + using nnz_value_view2d_t = + typename Kokkos::View; + + using signed_integral_t = typename std::make_signed< + typename nnz_row_view_t::non_const_value_type>::type; + + using signed_nnz_lno_view_t = + Kokkos::View; + + /** + * The orthogonalization type + */ + enum Ortho { + CGS2, // Two iterations of Classical Gram-Schmidt + MGS + }; // One iteration of Modified Gram-Schmidt + + /** + * The result of the run + */ + enum Flag { + Conv, // Converged + NoConv, // Did not converge + LOA, // Solver had loss of accuracy + NotRun + }; // GMRES was never run + + private: + // Inputs + + size_type m; /// Max subspace size before restarting + float_t tol; /// Relative residual convergence tolerance + size_type max_restart; /// Maximum number of times to restart the solver + Ortho ortho; /// The orthogonalization type + bool verbose; /// Print extra info to stdout + + // Outputs + int num_iters; /// Number of iterations the sovler took + float_t end_rel_res; /// Residual from solver + Flag conv_flag_val; /// Denotes end result of the run + + public: + // Use set methods to control ortho, and verbose + GMRESHandle(const size_type m_ = 50, const float_t tol_ = 1e-8, + const size_type max_restart_ = 50) + : m(m_), + tol(tol_), + max_restart(max_restart_), + ortho(CGS2), + verbose(false), + num_iters(-1), + end_rel_res(-1), + conv_flag_val(NotRun) { + if (m <= 0) { + throw std::invalid_argument( + "gmres: Please choose restart size m greater than zero."); + } + } + + void reset_handle(const size_type m_ = 50, const float_t tol_ = 1e-8, + const size_type max_restart_ = 50) { + set_m(m_); + set_tol(tol_); + set_max_restart(max_restart_); + set_ortho(CGS2); + set_verbose(false); + num_iters = -1; + end_rel_res = -1; + conv_flag_val = NotRun; + } + + KOKKOS_INLINE_FUNCTION + ~GMRESHandle() {} + + KOKKOS_INLINE_FUNCTION + size_type get_m() const { return m; } + + KOKKOS_INLINE_FUNCTION + void set_m(const size_type m_) { this->m = m_; } + + KOKKOS_INLINE_FUNCTION + size_type get_max_restart() const { return max_restart; } + + KOKKOS_INLINE_FUNCTION + void set_max_restart(const size_type max_restart_) { + this->max_restart = max_restart_; + } + + KOKKOS_INLINE_FUNCTION + float_t get_tol() const { return tol; } + + KOKKOS_INLINE_FUNCTION + void set_tol(const float_t tol_) { this->tol = tol_; } + + KOKKOS_INLINE_FUNCTION + Ortho get_ortho() const { return ortho; } + + KOKKOS_INLINE_FUNCTION + void set_ortho(const Ortho ortho_) { this->ortho = ortho_; } + + KOKKOS_INLINE_FUNCTION + bool get_verbose() const { return verbose; } + + KOKKOS_INLINE_FUNCTION + void set_verbose(const bool verbose_) { this->verbose = verbose_; } + + int get_num_iters() const { + assert(get_conv_flag_val() != NotRun); + return num_iters; + } + float_t get_end_rel_res() const { + assert(get_conv_flag_val() != NotRun); + return end_rel_res; + } + Flag get_conv_flag_val() const { return conv_flag_val; } + + void set_stats(int num_iters_, float_t end_rel_res_, Flag conv_flag_val_) { + assert(conv_flag_val_ != NotRun); + num_iters = num_iters_; + end_rel_res = end_rel_res_; + conv_flag_val = conv_flag_val_; + } +}; + +} // namespace Experimental +} // namespace KokkosSparse + +#endif diff --git a/sparse/src/KokkosSparse_par_ilut.hpp b/sparse/src/KokkosSparse_par_ilut.hpp index 8136d3b064..43d80be50b 100644 --- a/sparse/src/KokkosSparse_par_ilut.hpp +++ b/sparse/src/KokkosSparse_par_ilut.hpp @@ -36,7 +36,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER diff --git a/sparse/src/KokkosSparse_par_ilut_handle.hpp b/sparse/src/KokkosSparse_par_ilut_handle.hpp index d8bc6b11f2..714651c09c 100644 --- a/sparse/src/KokkosSparse_par_ilut_handle.hpp +++ b/sparse/src/KokkosSparse_par_ilut_handle.hpp @@ -36,7 +36,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER @@ -49,8 +49,6 @@ #ifndef _PAR_ILUTHANDLE_HPP #define _PAR_ILUTHANDLE_HPP -#define KEEP_DIAG - namespace KokkosSparse { namespace Experimental { @@ -111,26 +109,25 @@ class PAR_ILUTHandle { public: PAR_ILUTHandle(const size_type nrows_, const size_type nnzL_ = 0, - const size_type nnzU_ = 0, const size_type max_iter_ = 1, - const nnz_scalar_t residual_norm_delta_stop_ = 0., - const float_t fill_in_limit_ = 0.75, - bool symbolic_complete_ = false) + const size_type nnzU_ = 0, const size_type max_iter_ = 1) : nrows(nrows_), nnzL(nnzL_), nnzU(nnzU_), max_iter(max_iter_), - residual_norm_delta_stop(residual_norm_delta_stop_), - symbolic_complete(symbolic_complete_), + residual_norm_delta_stop(0.), + symbolic_complete(false), team_size(-1), vector_size(-1), - fill_in_limit(fill_in_limit_) {} + fill_in_limit(0.75) {} void reset_handle(const size_type nrows_, const size_type nnzL_, const size_type nnzU_) { set_nrows(nrows_); set_nnzL(nnzL_); set_nnzU(nnzU_); + set_residual_norm_delta_stop(0.); reset_symbolic_complete(); + set_fill_in_limit(0.75); } KOKKOS_INLINE_FUNCTION diff --git a/sparse/tpls/KokkosSparse_gmres_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_gmres_tpl_spec_avail.hpp new file mode 100644 index 0000000000..e447ce4cb4 --- /dev/null +++ b/sparse/tpls/KokkosSparse_gmres_tpl_spec_avail.hpp @@ -0,0 +1,60 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact James Foucar (jgfouca@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSPARSE_GMRES_TPL_SPEC_AVAIL_HPP_ +#define KOKKOSPARSE_GMRES_TPL_SPEC_AVAIL_HPP_ + +namespace KokkosSparse { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct gmres_tpl_spec_avail { + enum : bool { value = false }; +}; + +} // namespace Impl +} // namespace KokkosSparse + +#endif diff --git a/sparse/tpls/KokkosSparse_gmres_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_gmres_tpl_spec_decl.hpp new file mode 100644 index 0000000000..e0125ec0e6 --- /dev/null +++ b/sparse/tpls/KokkosSparse_gmres_tpl_spec_decl.hpp @@ -0,0 +1,52 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact James Foucar (jgfouca@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSPARSE_GMRES_TPL_SPEC_DECL_HPP_ +#define KOKKOSPARSE_GMRES_TPL_SPEC_DECL_HPP_ + +namespace KokkosSparse { +namespace Impl {} +} // namespace KokkosSparse + +#endif diff --git a/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_avail.hpp index 748c1ae1ae..dfaf491728 100644 --- a/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_avail.hpp @@ -36,7 +36,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER diff --git a/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_decl.hpp index f59c1bdb55..675d89a8a2 100644 --- a/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_decl.hpp @@ -36,7 +36,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER diff --git a/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_avail.hpp index f63df5d638..98d57832f8 100644 --- a/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_avail.hpp @@ -36,7 +36,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER diff --git a/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_decl.hpp index e30dee508a..df3b45f877 100644 --- a/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_decl.hpp @@ -36,7 +36,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER diff --git a/sparse/unit_test/Test_Sparse.hpp b/sparse/unit_test/Test_Sparse.hpp index a9562dff39..4407143f03 100644 --- a/sparse/unit_test/Test_Sparse.hpp +++ b/sparse/unit_test/Test_Sparse.hpp @@ -21,6 +21,7 @@ #include "Test_Sparse_sptrsv.hpp" #include "Test_Sparse_trsv.hpp" #include "Test_Sparse_par_ilut.hpp" +#include "Test_Sparse_gmres.hpp" #include "Test_Sparse_Transpose.hpp" #include "Test_Sparse_TestUtils_RandCsMat.hpp" #include "Test_Sparse_ccs2crs.hpp" diff --git a/sparse/unit_test/Test_Sparse_gmres.hpp b/sparse/unit_test/Test_Sparse_gmres.hpp new file mode 100644 index 0000000000..47b47f7f98 --- /dev/null +++ b/sparse/unit_test/Test_Sparse_gmres.hpp @@ -0,0 +1,204 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact James Foucar (jgfouca@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +#include +#include + +#include "KokkosSparse_CrsMatrix.hpp" +#include "KokkosKernels_IOUtils.hpp" +#include "KokkosBlas1_nrm2.hpp" +#include "KokkosSparse_spmv.hpp" +#include "KokkosSparse_gmres.hpp" +#include "KokkosSparse_MatrixPrec.hpp" + +#include + +using namespace KokkosSparse; +using namespace KokkosSparse::Experimental; +using namespace KokkosKernels; +using namespace KokkosKernels::Experimental; + +namespace Test { + +template +struct TolMeta { + static constexpr T value = 1e-8; +}; + +template <> +struct TolMeta { + static constexpr float value = 1e-5; // Lower tolerance for floats +}; + +template +void run_test_gmres() { + using exe_space = typename device::execution_space; + using mem_space = typename device::memory_space; + using sp_matrix_type = + KokkosSparse::CrsMatrix; + using KernelHandle = KokkosKernels::Experimental::KokkosKernelsHandle< + size_type, lno_t, scalar_t, exe_space, mem_space, mem_space>; + using float_t = typename Kokkos::ArithTraits::mag_type; + + // Create a diagonally dominant sparse matrix to test: + constexpr auto n = 5000; + constexpr auto m = 15; + constexpr auto tol = TolMeta::value; + constexpr auto numRows = n; + constexpr auto numCols = n; + constexpr auto diagDominance = 1; + constexpr bool verbose = false; + + typename sp_matrix_type::non_const_size_type nnz = 10 * numRows; + auto A = KokkosSparse::Impl::kk_generate_diagonally_dominant_sparse_matrix< + sp_matrix_type>(numRows, numCols, nnz, 0, lno_t(0.01 * numRows), + diagDominance); + + // Make kernel handles + KernelHandle kh; + kh.create_gmres_handle(m, tol); + auto gmres_handle = kh.get_gmres_handle(); + using GMRESHandle = + typename std::remove_reference::type; + using ViewVectorType = typename GMRESHandle::nnz_value_view_t; + + // Set initial vectors: + ViewVectorType X("X", n); // Solution and initial guess + ViewVectorType Wj("Wj", n); // For checking residuals at end. + ViewVectorType B(Kokkos::view_alloc(Kokkos::WithoutInitializing, "B"), + n); // right-hand side vec + + gmres_handle->set_verbose(verbose); + + // Test CGS2 + { + // Make rhs ones so that results are repeatable: + Kokkos::deep_copy(B, 1.0); + + gmres(&kh, A, B, X); + + // Double check residuals at end of solve: + float_t nrmB = KokkosBlas::nrm2(B); + KokkosSparse::spmv("N", 1.0, A, X, 0.0, Wj); // wj = Ax + KokkosBlas::axpy(-1.0, Wj, B); // b = b-Ax. + float_t endRes = KokkosBlas::nrm2(B) / nrmB; + + const auto conv_flag = gmres_handle->get_conv_flag_val(); + + EXPECT_LT(endRes, gmres_handle->get_tol()); + EXPECT_EQ(conv_flag, GMRESHandle::Flag::Conv); + } + + // Test MGS + { + gmres_handle->reset_handle(m, tol); + gmres_handle->set_ortho(GMRESHandle::Ortho::MGS); + gmres_handle->set_verbose(verbose); + + // reset X for next gmres call + Kokkos::deep_copy(X, 0.0); + + gmres(&kh, A, B, X); + + // Double check residuals at end of solve: + float_t nrmB = KokkosBlas::nrm2(B); + KokkosSparse::spmv("N", 1.0, A, X, 0.0, Wj); // wj = Ax + KokkosBlas::axpy(-1.0, Wj, B); // b = b-Ax. + float_t endRes = KokkosBlas::nrm2(B) / nrmB; + + const auto conv_flag = gmres_handle->get_conv_flag_val(); + + EXPECT_LT(endRes, gmres_handle->get_tol()); + EXPECT_EQ(conv_flag, GMRESHandle::Flag::Conv); + } + + // Test GSS2 with simple preconditioner + { + gmres_handle->reset_handle(m, tol); + gmres_handle->set_verbose(verbose); + + // Make precond + auto myPrec = new KokkosSparse::Experimental::MatrixPrec(A); + + // reset X for next gmres call + Kokkos::deep_copy(X, 0.0); + + gmres(&kh, A, B, X, myPrec); + + // Double check residuals at end of solve: + float_t nrmB = KokkosBlas::nrm2(B); + KokkosSparse::spmv("N", 1.0, A, X, 0.0, Wj); // wj = Ax + KokkosBlas::axpy(-1.0, Wj, B); // b = b-Ax. + float_t endRes = KokkosBlas::nrm2(B) / nrmB; + + const auto conv_flag = gmres_handle->get_conv_flag_val(); + + EXPECT_LT(endRes, gmres_handle->get_tol()); + EXPECT_EQ(conv_flag, GMRESHandle::Flag::Conv); + + delete myPrec; + } +} + +} // namespace Test + +template +void test_gmres() { + Test::run_test_gmres(); +} + +#define KOKKOSKERNELS_EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ + TEST_F(TestCategory, \ + sparse##_##gmres##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ + test_gmres(); \ + } + +#include + +#undef KOKKOSKERNELS_EXECUTE_TEST diff --git a/sparse/unit_test/Test_Sparse_par_ilut.hpp b/sparse/unit_test/Test_Sparse_par_ilut.hpp index 85d2f8d7c9..809f080c97 100644 --- a/sparse/unit_test/Test_Sparse_par_ilut.hpp +++ b/sparse/unit_test/Test_Sparse_par_ilut.hpp @@ -36,7 +36,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// Questions? Contact James Foucar (jgfouca@sandia.gov) // // ************************************************************************ //@HEADER @@ -61,9 +61,6 @@ using namespace KokkosSparse::Experimental; using namespace KokkosKernels; using namespace KokkosKernels::Experimental; -typedef Kokkos::complex kokkos_complex_double; -typedef Kokkos::complex kokkos_complex_float; - namespace Test { template >& matrix) { template void run_test_par_ilut() { - typedef Kokkos::View RowMapType; - typedef Kokkos::View EntriesType; - typedef Kokkos::View ValuesType; + using RowMapType = Kokkos::View; + using EntriesType = Kokkos::View; + using ValuesType = Kokkos::View; + using KernelHandle = KokkosKernels::Experimental::KokkosKernelsHandle< + size_type, lno_t, scalar_t, typename device::execution_space, + typename device::memory_space, typename device::memory_space>; // Simple test fixture A std::vector> A = {{1., 6., 4., 7.}, @@ -185,11 +185,6 @@ void run_test_par_ilut() { Kokkos::deep_copy(values, hvalues); // Make kernel handle - typedef KokkosKernels::Experimental::KokkosKernelsHandle< - size_type, lno_t, scalar_t, typename device::execution_space, - typename device::memory_space, typename device::memory_space> - KernelHandle; - KernelHandle kh; kh.create_par_ilut_handle(nrows); @@ -324,4 +319,4 @@ void test_par_ilut() { #include #undef KOKKOSKERNELS_EXECUTE_TEST -#define NO_TEST_COMPLEX +#undef NO_TEST_COMPLEX From 4c06b6cbd14114aee9db80de84d32019236e4d7d Mon Sep 17 00:00:00 2001 From: brian-kelley Date: Mon, 12 Dec 2022 10:57:10 -0700 Subject: [PATCH 178/226] Spgemm TPL refactor (#1618) * Moving cusparse spgemm to unification layer Split symbolic, numeric, fused-jacobi into separate TPL avail/decl files. * Finish cusparse spgemm tpl wrapper - Symbolic now backwards compatible with bspgemm_numeric and spgemm_jacobi * Add proper rocsparse spgemm wrappers * More SpGEMM TPL work - Remove mentions of deprecated enum value SPGEMM_MKL and SPGEMM_MKL2PHASE - Add MKL wrapper under unification layer with correct symbolic/numeric separation - Remove SPGEMM_CUSP and SPGEMM_VIENNA enum values * Remove now unused spgemm impl files (CUSP, Vienna, MKL) * perftest: take out deprecated/removed spgemm algos * Enforce sorting of spgemm output * Update rocblas includes is deprecated and throws warnings; now we have to use * Update the rest of the deprecated rocsparse includes is deprecated, using instead * rocsparse spgemm: remove unused typedefs * Make MKL sort the output of spgemm * Change the way fuzzy view comparison is done Assume values are close enough if their absolute value is less than eps. Values close to zero like this might be the result of summing many larger-magnitude terms, so the reference value and actual value might end up being (relatively) very different, even though each algorithm is behaving correctly (ignoring floating-point addition nonassociativity) * spgemm: buffer management fixes for cusparse 11.4+ * Fix cusparse 10 spgemm wrapper * Bump tolerance to make bspgemm test pass w/float * SpGEMM: test symbolic reuse Call symbolic, numeric, then change A/B values and do numeric again. * Remove redundant input check in spgemm * Fix order of m,n,k passed to cusparse 10.x spgemm Also make spgemm test use distinct m,n,k to catch similar bugs * spgemm all-at-once interface, debugging utils Add handle-less (non-reuse) spgemm interface, meaning the user can just compute C = AB in one line. Use this in the wiki example, since this should show off the most straightforward way to use the kernel. Implemented in terms of simplified symbolic/numeric (no separate unification layer yet) Debugging utils: KokkosSparse::Impl::isCrsGraphSorted(rowmap, entries): check that the graph has sorted rows. This test is designed to be efficient enough to run by default before kernels that require sorted input. KokkosSparse::Impl::validateCrsMatrix(m, n, rowmap, entries, values): sanity check the extents and entries of a matrix. Entries should be less than n (numCols), rowmap(m) should be equal to nnz, etc. Use isCrsGraphSorted test on A and B in spgemm_symbolic, unless NDEBUG is defined (as in a release build). This is important since sorted input is a new requirement. * spgemm perf test: fix "--algorithm KKDEBUG" It was causing SPGEMM_KK_LP (a completely differnet, parallel algo) to be used, rather than SPGEMM_DEBUG (the host serial reference implementation). * Sparse utils: zero-initialize, remove unused member --- blas/tpls/KokkosBlas_tpl_spec.hpp | 2 +- blas/unit_test/Test_Blas_rocblas.hpp | 2 +- common/src/KokkosKernels_SimpleUtils.hpp | 35 +- .../wiki/sparse/KokkosSparse_wiki_spgemm.cpp | 26 +- graph/src/KokkosGraph_CoarsenConstruct.hpp | 14 +- perf_test/sparse/KokkosSparse_spgemm.cpp | 22 +- .../impl/KokkosSparse_bspgemm_impl_kkmem.hpp | 3 +- .../KokkosSparse_bspgemm_numeric_spec.hpp | 65 +- sparse/impl/KokkosSparse_spgemm_CUSP_impl.hpp | 249 ------- .../KokkosSparse_spgemm_cuSPARSE_impl.hpp | 501 ------------- sparse/impl/KokkosSparse_spgemm_impl.hpp | 36 + sparse/impl/KokkosSparse_spgemm_impl_def.hpp | 35 +- .../impl/KokkosSparse_spgemm_impl_kkmem.hpp | 3 +- .../KokkosSparse_spgemm_impl_symbolic.hpp | 62 +- ...kosSparse_spgemm_jacobi_sparseacc_impl.hpp | 4 +- .../impl/KokkosSparse_spgemm_jacobi_spec.hpp | 32 +- .../KokkosSparse_spgemm_mkl2phase_impl.hpp | 685 ----------------- sparse/impl/KokkosSparse_spgemm_mkl_impl.hpp | 314 -------- .../impl/KokkosSparse_spgemm_numeric_spec.hpp | 211 +----- .../KokkosSparse_spgemm_rocSPARSE_impl.hpp | 435 ----------- .../KokkosSparse_spgemm_symbolic_spec.hpp | 98 +-- .../KokkosSparse_spgemm_viennaCL_impl.hpp | 234 ------ sparse/src/KokkosKernels_Controls.hpp | 2 +- sparse/src/KokkosSparse_Utils.hpp | 99 +++ sparse/src/KokkosSparse_Utils_rocsparse.hpp | 17 +- sparse/src/KokkosSparse_spgemm.hpp | 19 + sparse/src/KokkosSparse_spgemm_handle.hpp | 250 ++++--- sparse/src/KokkosSparse_spgemm_numeric.hpp | 57 +- sparse/src/KokkosSparse_spgemm_symbolic.hpp | 58 +- .../tpls/KokkosKernels_tpl_handles_decl.hpp | 2 +- ...osSparse_spgemm_jacobi_tpl_spec_avail.hpp} | 19 +- ...kosSparse_spgemm_jacobi_tpl_spec_decl.hpp} | 0 ...osSparse_spgemm_numeric_tpl_spec_avail.hpp | 211 ++++++ ...kosSparse_spgemm_numeric_tpl_spec_decl.hpp | 672 +++++++++++++++++ ...sSparse_spgemm_symbolic_tpl_spec_avail.hpp | 171 +++++ ...osSparse_spgemm_symbolic_tpl_spec_decl.hpp | 686 ++++++++++++++++++ .../tpls/KokkosSparse_spmv_tpl_spec_decl.hpp | 2 +- sparse/unit_test/Test_Sparse_CrsMatrix.hpp | 1 + sparse/unit_test/Test_Sparse_bspgemm.hpp | 48 +- sparse/unit_test/Test_Sparse_rocsparse.hpp | 2 +- sparse/unit_test/Test_Sparse_spgemm.hpp | 224 +++--- .../unit_test/Test_Sparse_spgemm_jacobi.hpp | 9 +- 42 files changed, 2463 insertions(+), 3154 deletions(-) delete mode 100644 sparse/impl/KokkosSparse_spgemm_CUSP_impl.hpp delete mode 100644 sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp delete mode 100644 sparse/impl/KokkosSparse_spgemm_mkl2phase_impl.hpp delete mode 100644 sparse/impl/KokkosSparse_spgemm_mkl_impl.hpp delete mode 100644 sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp delete mode 100644 sparse/impl/KokkosSparse_spgemm_viennaCL_impl.hpp rename sparse/tpls/{KokkosSparse_spgemm_tpl_spec_avail.hpp => KokkosSparse_spgemm_jacobi_tpl_spec_avail.hpp} (76%) rename sparse/tpls/{KokkosSparse_spgemm_tpl_spec_decl.hpp => KokkosSparse_spgemm_jacobi_tpl_spec_decl.hpp} (100%) create mode 100644 sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_avail.hpp create mode 100644 sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_decl.hpp create mode 100644 sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_avail.hpp create mode 100644 sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_decl.hpp diff --git a/blas/tpls/KokkosBlas_tpl_spec.hpp b/blas/tpls/KokkosBlas_tpl_spec.hpp index fbb353c656..ffe02f6529 100644 --- a/blas/tpls/KokkosBlas_tpl_spec.hpp +++ b/blas/tpls/KokkosBlas_tpl_spec.hpp @@ -137,7 +137,7 @@ inline cublasOperation_t trans_mode_kk_to_cublas(const char kkMode[]) { #endif // KOKKOSKERNELS_ENABLE_TPL_CUBLAS #ifdef KOKKOSKERNELS_ENABLE_TPL_ROCBLAS -#include +#include namespace KokkosBlas { namespace Impl { diff --git a/blas/unit_test/Test_Blas_rocblas.hpp b/blas/unit_test/Test_Blas_rocblas.hpp index 61ba06aebc..e30adceffa 100644 --- a/blas/unit_test/Test_Blas_rocblas.hpp +++ b/blas/unit_test/Test_Blas_rocblas.hpp @@ -7,7 +7,7 @@ #include #include #include "KokkosBlas_tpl_spec.hpp" -#include +#include // Just check if we can build against // rocblas and get the library version diff --git a/common/src/KokkosKernels_SimpleUtils.hpp b/common/src/KokkosKernels_SimpleUtils.hpp index 86944e9c4d..08207c199b 100644 --- a/common/src/KokkosKernels_SimpleUtils.hpp +++ b/common/src/KokkosKernels_SimpleUtils.hpp @@ -306,20 +306,26 @@ struct IsRelativelyIdenticalFunctor { : view1(view1_), view2(view2_), eps(eps_) {} KOKKOS_INLINE_FUNCTION - void operator()(const size_t &i, size_t &is_equal) const { + void operator()(const size_t &i, size_t &num_diffs) const { typedef typename view_type2::non_const_value_type val_type; - typedef Kokkos::Details::ArithTraits KAT; + typedef Kokkos::ArithTraits KAT; typedef typename KAT::mag_type mag_type; - typedef Kokkos::Details::ArithTraits KATM; + typedef Kokkos::ArithTraits KATM; - mag_type val_diff = KAT::abs(view1(i) - view2(i)); - if (KAT::abs(view1(i)) > KATM::zero() && - KAT::abs(view2(i)) > KATM::zero()) { - val_diff = val_diff / KAT::abs(view2(i)); + mag_type val_diff = KATM::zero(); + if (KAT::abs(view1(i)) > mag_type(eps) || + KAT::abs(view2(i)) > mag_type(eps)) { + val_diff = KAT::abs(view1(i) - view2(i)) / + (KAT::abs(view1(i)) + KAT::abs(view2(i))); } - if (val_diff > eps) { - is_equal += 1; + if (val_diff > mag_type(eps)) { + printf( + "Values at index %d, %.6f + %.6fi and %.6f + %.6fi, differ too much " + "(eps = %e)\n", + (int)i, KAT::real(view1(i)), KAT::imag(view1(i)), KAT::real(view2(i)), + KAT::imag(view2(i)), eps); + num_diffs++; } } }; @@ -335,19 +341,14 @@ bool kk_is_relatively_identical_view(view_type1 view1, view_type2 view2, size_t num_elements = view1.extent(0); typedef Kokkos::RangePolicy my_exec_space; - size_t issame = 0; + size_t numDifferences = 0; Kokkos::parallel_reduce( "KokkosKernels::Common::IsRelativelyIdenticalView", my_exec_space(0, num_elements), IsRelativelyIdenticalFunctor( view1, view2, eps), - issame); - MyExecSpace().fence(); - if (issame > 0) { - return false; - } else { - return true; - } + numDifferences); + return numDifferences == 0; } template diff --git a/example/wiki/sparse/KokkosSparse_wiki_spgemm.cpp b/example/wiki/sparse/KokkosSparse_wiki_spgemm.cpp index 63600e08ba..831cb8ca7a 100644 --- a/example/wiki/sparse/KokkosSparse_wiki_spgemm.cpp +++ b/example/wiki/sparse/KokkosSparse_wiki_spgemm.cpp @@ -16,8 +16,6 @@ int main() { using device_type = typename Kokkos::Device< Kokkos::DefaultExecutionSpace, typename Kokkos::DefaultExecutionSpace::memory_space>; - using execution_space = typename device_type::execution_space; - using memory_space = typename device_type::memory_space; using matrix_type = typename KokkosSparse::CrsMatrix; @@ -32,7 +30,7 @@ int main() { // In each row the first entry is the number of grid point in // that direction, the second and third entries are used to apply // BCs in that direction. - Kokkos::View mat_structure( + Kokkos::View mat_structure( "Matrix Structure", 2); mat_structure(0, 0) = 10; // Request 10 grid point in 'x' direction mat_structure(0, 1) = 1; // Add BC to the left @@ -45,27 +43,11 @@ int main() { Test::generate_structured_matrix2D("FD", mat_structure); matrix_type B = Test::generate_structured_matrix2D("FE", mat_structure); - matrix_type C; - // Create KokkosKernelHandle - using KernelHandle = KokkosKernels::Experimental::KokkosKernelsHandle< - Offset, Ordinal, Scalar, execution_space, memory_space, memory_space>; - KernelHandle kh; - kh.set_team_work_size(16); - kh.set_dynamic_scheduling(true); + matrix_type C = KokkosSparse::spgemm(A, false, B, false); - // Select an spgemm algorithm, limited by configuration at compile-time and - // set via the handle Some options: {SPGEMM_KK_MEMORY, SPGEMM_KK_SPEED, - // SPGEMM_KK_MEMSPEED, /*SPGEMM_CUSPARSE, */ SPGEMM_MKL} - std::string myalg("SPGEMM_KK_MEMORY"); - KokkosSparse::SPGEMMAlgorithm spgemm_algorithm = - KokkosSparse::StringToSPGEMMAlgorithm(myalg); - kh.create_spgemm_handle(spgemm_algorithm); - - KokkosSparse::spgemm_symbolic(kh, A, false, B, false, C); - KokkosSparse::spgemm_numeric(kh, A, false, B, false, C); - - std::cout << "spgemm was performed correctly!" << std::endl; + std::cout << "Ran spgemm: product C is " << C.numRows() << 'x' + << C.numCols() << " and has " << C.nnz() << " nonzeros.\n"; } Kokkos::finalize(); diff --git a/graph/src/KokkosGraph_CoarsenConstruct.hpp b/graph/src/KokkosGraph_CoarsenConstruct.hpp index 9e9b4049e6..eb4a2ae556 100644 --- a/graph/src/KokkosGraph_CoarsenConstruct.hpp +++ b/graph/src/KokkosGraph_CoarsenConstruct.hpp @@ -285,25 +285,26 @@ class coarse_builder { const matrix_t interp_mtx) { vtx_view_t f_vtx_w = level.vtx_wgts; matrix_t g = level.mtx; + if (!KokkosSparse::Impl::isCrsGraphSorted(g.graph.row_map, g.graph.entries)) + KokkosSparse::sort_crs_matrix(g); ordinal_t n = g.numRows(); ordinal_t nc = interp_mtx.numCols(); matrix_t interp_transpose = KokkosSparse::Impl::transpose_matrix(interp_mtx); + KokkosSparse::sort_crs_matrix(interp_transpose); spgemm_kernel_handle kh; kh.set_team_work_size(64); kh.set_dynamic_scheduling(true); - KokkosSparse::SPGEMMAlgorithm spgemm_algorithm = - KokkosSparse::SPGEMM_KK_MEMORY; - kh.create_spgemm_handle(spgemm_algorithm); vtx_view_t adj_coarse; wgt_view_t wgt_coarse; edge_view_t row_map_coarse; if (handle.b == Spgemm_transpose_first) { + kh.create_spgemm_handle(); edge_view_t row_map_p1("rows_partial", nc + 1); KokkosSparse::Experimental::spgemm_symbolic( &kh, nc, n, n, interp_transpose.graph.row_map, @@ -321,8 +322,10 @@ class coarse_builder { interp_transpose.graph.entries, interp_transpose.values, false, g.graph.row_map, g.graph.entries, g.values, false, row_map_p1, entries_p1, values_p1); + kh.destroy_spgemm_handle(); row_map_coarse = edge_view_t("rows_coarse", nc + 1); + kh.create_spgemm_handle(); KokkosSparse::Experimental::spgemm_symbolic( &kh, nc, n, nc, row_map_p1, entries_p1, false, interp_mtx.graph.row_map, interp_mtx.graph.entries, false, @@ -337,8 +340,10 @@ class coarse_builder { &kh, nc, n, nc, row_map_p1, entries_p1, values_p1, false, interp_mtx.graph.row_map, interp_mtx.graph.entries, interp_mtx.values, false, row_map_coarse, adj_coarse, wgt_coarse); + kh.destroy_spgemm_handle(); } else { edge_view_t row_map_p1("rows_partial", n + 1); + kh.create_spgemm_handle(); KokkosSparse::Experimental::spgemm_symbolic( &kh, n, n, nc, g.graph.row_map, g.graph.entries, false, interp_mtx.graph.row_map, interp_mtx.graph.entries, false, @@ -354,8 +359,10 @@ class coarse_builder { &kh, n, n, nc, g.graph.row_map, g.graph.entries, g.values, false, interp_mtx.graph.row_map, interp_mtx.graph.entries, interp_mtx.values, false, row_map_p1, entries_p1, values_p1); + kh.destroy_spgemm_handle(); row_map_coarse = edge_view_t("rows_coarse", nc + 1); + kh.create_spgemm_handle(); KokkosSparse::Experimental::spgemm_symbolic( &kh, nc, n, nc, interp_transpose.graph.row_map, interp_transpose.graph.entries, false, row_map_p1, entries_p1, false, @@ -371,6 +378,7 @@ class coarse_builder { interp_transpose.graph.entries, interp_transpose.values, false, row_map_p1, entries_p1, values_p1, false, row_map_coarse, adj_coarse, wgt_coarse); + kh.destroy_spgemm_handle(); } // now we must remove self-loop edges diff --git a/perf_test/sparse/KokkosSparse_spgemm.cpp b/perf_test/sparse/KokkosSparse_spgemm.cpp index da705fcdf2..9ec47a068a 100644 --- a/perf_test/sparse/KokkosSparse_spgemm.cpp +++ b/perf_test/sparse/KokkosSparse_spgemm.cpp @@ -60,11 +60,11 @@ void print_options() { "[hipDeviceIndex]' --> if none are specified, Serial is used " "(if enabled)" << std::endl; - std::cerr << "\t[Optional] '--algorithm " - "[DEFAULT=KKDEFAULT=KKSPGEMM|KKMEM|KKDENSE|MKL|CUSPARSE|CUSP|" - "VIENNA|MKL2]' --> to choose algorithm. KKMEM is outdated, use " - "KKSPGEMM instead." - << std::endl; + std::cerr + << "\t[Optional] '--algorithm " + "[DEFAULT=KKDEFAULT=KKSPGEMM|KKMEM|KKDENSE]' --> to choose algorithm. " + "KKMEM is outdated, use KKSPGEMM instead." + << std::endl; std::cerr << "\t[Optional] --bmtx [righ_hand_side.mtx]' for C = AxB" << std::endl; std::cerr << "\t[Optional] OUTPUT MATRICES: '--cmtx [output_matrix.mtx]' --> " @@ -241,18 +241,8 @@ int parse_inputs(KokkosKernels::Experiment::Parameters& params, int argc, params.algorithm = KokkosSparse::SPGEMM_KK_DENSE; } else if (0 == Test::string_compare_no_case(algoStr, "KKLP")) { params.algorithm = KokkosSparse::SPGEMM_KK_LP; - } else if (0 == Test::string_compare_no_case(algoStr, "MKL")) { - params.algorithm = KokkosSparse::SPGEMM_MKL; - } else if (0 == Test::string_compare_no_case(algoStr, "CUSPARSE")) { - params.algorithm = KokkosSparse::SPGEMM_CUSPARSE; - } else if (0 == Test::string_compare_no_case(algoStr, "CUSP")) { - params.algorithm = KokkosSparse::SPGEMM_CUSP; } else if (0 == Test::string_compare_no_case(algoStr, "KKDEBUG")) { - params.algorithm = KokkosSparse::SPGEMM_KK_LP; - } else if (0 == Test::string_compare_no_case(algoStr, "MKL2")) { - params.algorithm = KokkosSparse::SPGEMM_MKL2PHASE; - } else if (0 == Test::string_compare_no_case(algoStr, "VIENNA")) { - params.algorithm = KokkosSparse::SPGEMM_VIENNA; + params.algorithm = KokkosSparse::SPGEMM_DEBUG; } else { diff --git a/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp b/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp index 2e857d2dbe..22c6391d99 100644 --- a/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp +++ b/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp @@ -1206,7 +1206,8 @@ void KokkosBSPGEMMhandle->get_spgemm_handle()->row_flops; size_t original_overall_flops = this->handle->get_spgemm_handle()->original_overall_flops; - nnz_lno_t max_nnz = this->handle->get_spgemm_handle()->get_max_result_nnz(); + nnz_lno_t max_nnz = this->handle->get_spgemm_handle() + ->template get_max_result_nnz(rowmapC_); size_type overall_nnz = this->handle->get_spgemm_handle()->get_c_nnz(); typedef KokkosKernels::Impl::UniformMemoryPool diff --git a/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp b/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp index ec7a28189d..a493d50b9a 100644 --- a/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp +++ b/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp @@ -51,14 +51,10 @@ #include "KokkosKernels_Handle.hpp" // Include the actual functors #if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY -//#include "KokkosSparse_spgemm_symbolic.hpp" -#include "KokkosSparse_spgemm_cuSPARSE_impl.hpp" -#include "KokkosSparse_spgemm_CUSP_impl.hpp" +#include "KokkosSparse_spgemm_symbolic.hpp" #include "KokkosSparse_bspgemm_impl.hpp" #include "KokkosSparse_bspgemm_impl_seq.hpp" -#include "KokkosSparse_spgemm_mkl_impl.hpp" -#include "KokkosSparse_spgemm_mkl2phase_impl.hpp" -#include "KokkosSparse_spgemm_viennaCL_impl.hpp" +#include "KokkosSparse_SortCrs.hpp" #endif namespace KokkosSparse { @@ -219,28 +215,37 @@ struct BSPGEMM_NUMERIC< spgemmHandleType *sh = handle->get_spgemm_handle(); if (!sh->is_symbolic_called()) { throw std::runtime_error( - "Call spgemm symbolic before calling SpGEMM numeric"); + "KokkosSparse::bspgemm_numeric: must first call spgemm_symbolic with " + "the same handle."); + } + if (!sh->are_rowptrs_computed()) { + // Call symbolic, and make sure rowptrs are populated. This will not + // duplicate any work if the user has already called symbolic. Must also + // cast away constness of row_mapC. + using c_size_view_t_nc = typename c_size_view_t_::non_const_type; + using c_size_type = typename c_size_view_t_::non_const_value_type; + c_size_view_t_nc row_mapC_nc(const_cast(row_mapC.data()), + row_mapC.extent(0)); + KokkosSparse::Experimental::spgemm_symbolic( + handle, m, n, k, row_mapA, entriesA, transposeA, row_mapB, entriesB, + transposeB, row_mapC_nc, true); + } + if (!sh->are_rowflops_computed()) { + KokkosSPGEMM + kspgemm(handle, m, n, k, row_mapA, entriesA, valuesA, transposeA, + row_mapB, entriesB, valuesB, transposeB); + kspgemm.compute_row_flops(); } switch (sh->get_algorithm_type()) { - case SPGEMM_CUSPARSE: - throw std::runtime_error( - "cuSPARSE implementation for block SpGEMM is not available"); - case SPGEMM_CUSP: - throw std::runtime_error( - "CUSP implementation for block SpGEMM is not available"); - case SPGEMM_MKL: - case SPGEMM_MKL2PHASE: - throw std::runtime_error( - "MKL implementation available for block SpGEMM is not available"); - case SPGEMM_VIENNA: - throw std::runtime_error( - "Vienna implementation available for block SpGEMM is not " - "available"); - - default: - - { + case SPGEMM_SERIAL: + case SPGEMM_DEBUG: + bspgemm_debug_numeric(handle, m, n, k, blockDim, row_mapA, entriesA, + valuesA, transposeA, row_mapB, entriesB, valuesB, + transposeB, row_mapC, entriesC, valuesC); + break; + default: { KokkosBSPGEMM @@ -248,13 +253,11 @@ struct BSPGEMM_NUMERIC< transposeA, row_mapB, entriesB, valuesB, transposeB); kbspgemm.KokkosBSPGEMM_numeric(row_mapC, entriesC, valuesC); } break; - case SPGEMM_SERIAL: - case SPGEMM_DEBUG: - bspgemm_debug_numeric(handle, m, n, k, blockDim, row_mapA, entriesA, - valuesA, transposeA, row_mapB, entriesB, valuesB, - transposeB, row_mapC, entriesC, valuesC); - break; } + // Current implementation does not produce sorted matrix + // TODO: remove this call when impl sorts + KokkosSparse::sort_bsr_matrix( + blockDim, row_mapC, entriesC, valuesC); } }; diff --git a/sparse/impl/KokkosSparse_spgemm_CUSP_impl.hpp b/sparse/impl/KokkosSparse_spgemm_CUSP_impl.hpp deleted file mode 100644 index ecabc22ecf..0000000000 --- a/sparse/impl/KokkosSparse_spgemm_CUSP_impl.hpp +++ /dev/null @@ -1,249 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef _KOKKOSSPGEMMCUSP_HPP -#define _KOKKOSSPGEMMCUSP_HPP - -#ifdef KERNELS_HAVE_CUSP -#include -#include -#endif - -namespace KokkosSparse { -namespace Impl { - -template -struct CopyArrayToCuspArray { - cusparray c; - kokkosarray *k; - - CopyArrayToCuspArray(cusparray &c_, kokkosarray *k_) : c(c_), k(k_) {} - - KOKKOS_INLINE_FUNCTION - void operator()(const size_t &i) const { c[i] = k[i]; } -}; - -template < - typename KernelHandle, typename ain_row_index_view_type, - typename ain_nonzero_index_view_type, typename ain_nonzero_value_view_type, - typename bin_row_index_view_type, typename bin_nonzero_index_view_type, - typename bin_nonzero_value_view_type, typename cin_row_index_view_type, - typename cin_nonzero_index_view_type, typename cin_nonzero_value_view_type> -void CUSP_apply(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, - typename KernelHandle::nnz_lno_t n, - typename KernelHandle::nnz_lno_t k, - ain_row_index_view_type row_mapA, - ain_nonzero_index_view_type entriesA, - ain_nonzero_value_view_type valuesA, - - bool /* transposeA */, bin_row_index_view_type row_mapB, - bin_nonzero_index_view_type entriesB, - bin_nonzero_value_view_type valuesB, bool /* transposeB */, - cin_row_index_view_type row_mapC, - cin_nonzero_index_view_type &entriesC, - cin_nonzero_value_view_type &valuesC) { -#ifdef KERNELS_HAVE_CUSP - typedef typename KernelHandle::nnz_lno_t idx; - typedef typename KernelHandle::nnz_scalar_t value_type; - - typedef typename ain_row_index_view_type::device_type device1; - typedef typename ain_nonzero_index_view_type::device_type device2; - typedef typename ain_nonzero_value_view_type::device_type device3; - - if (std::is_same::value) { - throw std::runtime_error( - "MEMORY IS NOT ALLOCATED IN GPU DEVICE for CUSP\n"); - // return; - } - if (std::is_same::value) { - throw std::runtime_error( - "MEMORY IS NOT ALLOCATED IN GPU DEVICE for CUSP\n"); - // return; - } - if (std::is_same::value) { - throw std::runtime_error( - "MEMORY IS NOT ALLOCATED IN GPU DEVICE for CUSP\n"); - // return; - } - - // typedef in_row_index_view_type idx_array_type; - - typedef typename Kokkos::RangePolicy - my_exec_space; - - idx nnzA = entriesA.extent(0); - idx nnzB = entriesB.extent(0); - - idx *a_xadj = (idx *)row_mapA.data(); - idx *b_xadj = (idx *)row_mapB.data(); - - idx *a_adj = (idx *)entriesA.data(); - idx *b_adj = (idx *)entriesB.data(); - - value_type *a_ew = valuesA.data(); - value_type *b_ew = valuesB.data(); - - /* - thrust::device_ptr dev_a_xadj(a_xadj); - thrust::device_ptr dev_a_adj(a_adj); - thrust::device_ptr dev_b_xadj(b_xadj); - thrust::device_ptr dev_b_adj(b_adj); - thrust::device_ptr dev_a_ew(a_ew); - thrust::device_ptr dev_b_ew(b_ew); - - */ - typedef typename cusp::array1d_view > IDXArray1dView; - typedef typename cusp::array1d_view > - VALUEArray1dView; - // typedef typename cusp::array1d IDXArray1dView; - // typedef typename cusp::array1d - // VALUEArray1dView; - IDXArray1dView arraya_xadj(thrust::device_pointer_cast(a_xadj), - thrust::device_pointer_cast(a_xadj) + m + 1); - IDXArray1dView arraya_adj(thrust::device_pointer_cast(a_adj), - thrust::device_pointer_cast(a_adj) + nnzA); - IDXArray1dView arrayb_xadj(thrust::device_pointer_cast(b_xadj), - thrust::device_pointer_cast(b_xadj) + n + 1); - IDXArray1dView arrayb_adj(thrust::device_pointer_cast(b_adj), - thrust::device_pointer_cast(b_adj) + nnzB); - VALUEArray1dView arraya_ew(thrust::device_pointer_cast(a_ew), - thrust::device_pointer_cast(a_ew) + nnzA); - VALUEArray1dView arrayb_ew(thrust::device_pointer_cast(b_ew), - thrust::device_pointer_cast(b_ew) + nnzB); - - typedef typename cusp::csr_matrix_view - cuspMatrix_View; - - cuspMatrix_View A(m, n, entriesA.extent(0), arraya_xadj, arraya_adj, - arraya_ew); - cuspMatrix_View B(n, k, entriesB.extent(0), arrayb_xadj, arrayb_adj, - arrayb_ew); - - /* - CopyArrayToCuspArray Aforward(A.row_offsets, row_mapA); - Kokkos::parallel_for (my_exec_space (0, m + 1) , Aforward); - Kokkos::parallel_for (my_exec_space (0, n + 1) , CopyArrayToCuspArray(B.row_offsets, row_mapB)); - - Kokkos::parallel_for (my_exec_space (0, entriesA.extent(0)) , - CopyArrayToCuspArray(A.column_indices, entriesA)); - Kokkos::parallel_for (my_exec_space (0, entriesB.extent(0)) , - CopyArrayToCuspArray(B.column_indices, entriesB)); - - Kokkos::parallel_for (my_exec_space (0, valuesA.extent(0)) , - CopyArrayToCuspArray(A.values, valuesA)); Kokkos::parallel_for - (my_exec_space (0, valuesB.extent(0)) , CopyArrayToCuspArray(B.values, valuesB)); - */ - - typedef typename cusp::csr_matrix - cuspMatrix; - // typedef cuspMatrix_View cuspMatrix; - cuspMatrix C; - - Kokkos::Timer timer1; - cusp::multiply(A, B, C); - KernelHandle::HandleExecSpace().fence(); - std::cout << "Actual CUSP SPMM Time:" << timer1.seconds() << std::endl; - - // std::cout << " C.column_indices.size():" << C.column_indices.size() << - // std::endl; std::cout << " C.values.size():" << C.values.size() << - // std::endl; row_mapC = typename - // cin_row_index_view_type::non_const_type("rowmapC", m + 1); - - handle->set_c_nnz(C.values.size()); - - entriesC = typename cin_nonzero_index_view_type::non_const_type( - Kokkos::view_alloc(Kokkos::WithoutInitializing, "EntriesC"), - C.column_indices.size()); - valuesC = typename cin_nonzero_value_view_type::non_const_type( - Kokkos::view_alloc(Kokkos::WithoutInitializing, "valuesC"), - C.values.size()); - - Kokkos::parallel_for( - my_exec_space(0, m + 1), - CopyArrayToCuspArray( - row_mapC, (idx *)thrust::raw_pointer_cast(C.row_offsets.data()))); - Kokkos::parallel_for( - my_exec_space(0, C.column_indices.size()), - CopyArrayToCuspArray( - entriesC, (idx *)thrust::raw_pointer_cast(C.column_indices.data()))); - Kokkos::parallel_for( - my_exec_space(0, C.values.size()), - CopyArrayToCuspArray( - valuesC, (value_type *)thrust::raw_pointer_cast(C.values.data()))); - -#else - (void)handle; - (void)m; - (void)n; - (void)k; - (void)row_mapA; - (void)row_mapB; - (void)row_mapC; - (void)entriesA; - (void)entriesB; - (void)entriesC; - (void)valuesA; - (void)valuesB; - (void)valuesC; - throw std::runtime_error("CUSP IS NOT DEFINED\n"); - // return; -#endif -} -} // namespace Impl - -} // namespace KokkosSparse -#endif diff --git a/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp deleted file mode 100644 index 30e2fdbd79..0000000000 --- a/sparse/impl/KokkosSparse_spgemm_cuSPARSE_impl.hpp +++ /dev/null @@ -1,501 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef _KOKKOSSPGEMMCUSPARSE_HPP -#define _KOKKOSSPGEMMCUSPARSE_HPP - -#include "KokkosKernels_Controls.hpp" -#include "KokkosSparse_Utils_cusparse.hpp" - -namespace KokkosSparse { - -namespace Impl { - -template < - typename KernelHandle, typename ain_row_index_view_type, - typename ain_nonzero_index_view_type, typename bin_row_index_view_type, - typename bin_nonzero_index_view_type, typename cin_row_index_view_type> -void cuSPARSE_symbolic(KernelHandle *handle, typename KernelHandle::nnz_lno_t m, - typename KernelHandle::nnz_lno_t n, - typename KernelHandle::nnz_lno_t k, - ain_row_index_view_type row_mapA, - ain_nonzero_index_view_type entriesA, - - bool transposeA, bin_row_index_view_type row_mapB, - bin_nonzero_index_view_type entriesB, bool transposeB, - cin_row_index_view_type row_mapC) { -#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE - using device1 = typename ain_row_index_view_type::device_type; - using device2 = typename ain_nonzero_index_view_type::device_type; - using idx = typename KernelHandle::nnz_lno_t; - - // TODO this is not correct, check memory space. - if (std::is_same::value) { - throw std::runtime_error( - "MEMORY IS NOT ALLOCATED IN GPU DEVICE for CUSPARSE\n"); - // return; - } - if (std::is_same::value) { - throw std::runtime_error( - "MEMORY IS NOT ALLOCATED IN GPU DEVICE for CUSPARSE\n"); - // return; - } - - // CUDA_VERSION coming along with CUDAToolkit is easier to find than - // CUSPARSE_VERSION -#if (CUDA_VERSION >= 11040) - // Newest versions of cuSPARSE have the generic SpGEMM interface, with "reuse" - // functions. - if (!std::is_same::type, int>::value || - !std::is_same< - typename std::remove_cv::type, - int>::value) { - throw std::runtime_error( - "cusparseSpGEMMreuse requires local ordinals to be 32-bit integer."); - } - - handle->set_sort_option(1); // tells users the output is sorted - handle->create_cusparse_spgemm_handle(transposeA, transposeB); - typename KernelHandle::cuSparseSpgemmHandleType *h = - handle->get_cusparse_spgemm_handle(); - - // Follow - // https://github.com/NVIDIA/CUDALibrarySamples/tree/master/cuSPARSE/spgemm_reuse - void *buffer1 = NULL; - void *buffer2 = NULL; - size_t bufferSize1 = 0; - size_t bufferSize2 = 0; - - // When nnz is not zero, cusparseCreateCsr insists non-null a value pointer, - // which however is not available in this function. So we fake it with the - // entries instead. Fortunately, it seems cupsarse does not access that in the - // symbolic phase. - KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( - &h->descr_A, m, n, entriesA.extent(0), (void *)row_mapA.data(), - (void *)entriesA.data(), (void *)entriesA.data() /*fake*/, - CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, - h->scalarType)); - - KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( - &h->descr_B, n, k, entriesB.extent(0), (void *)row_mapB.data(), - (void *)entriesB.data(), (void *)entriesB.data() /*fake*/, - CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, - h->scalarType)); - - KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( - &h->descr_C, m, k, 0, NULL, NULL, NULL, CUSPARSE_INDEX_32I, - CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); - - //---------------------------------------------------------------------- - // ask bufferSize1 bytes for external memory - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_workEstimation( - h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, - h->alg, h->spgemmDescr, &bufferSize1, NULL)); - - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&buffer1, bufferSize1)); - // inspect matrices A and B to understand the memory requirement for the next - // step - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_workEstimation( - h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, - h->alg, h->spgemmDescr, &bufferSize1, buffer1)); - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer1)); - - //---------------------------------------------------------------------- - // Compute nnz of C - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_nnz( - h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, - h->alg, h->spgemmDescr, &bufferSize2, NULL, &h->bufferSize3, NULL, - &h->bufferSize4, NULL)); - - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&buffer2, bufferSize2)); - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&h->buffer3, h->bufferSize3)); - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&h->buffer4, h->bufferSize4)); - - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_nnz( - h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, - h->alg, h->spgemmDescr, &bufferSize2, buffer2, &h->bufferSize3, - h->buffer3, &h->bufferSize4, h->buffer4)); - - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer2)); - - int64_t C_nrow, C_ncol, C_nnz; - KOKKOS_CUSPARSE_SAFE_CALL( - cusparseSpMatGetSize(h->descr_C, &C_nrow, &C_ncol, &C_nnz)); - if (C_nnz > std::numeric_limits::max()) { - throw std::runtime_error("nnz of C overflowed over 32-bit int\n"); - } - handle->set_c_nnz(C_nnz); - h->C_populated = false; // sparsity pattern of C is not set yet - (void)row_mapC; - -#elif defined(CUSPARSE_VERSION) && (11000 <= CUSPARSE_VERSION) - using scalar_type = typename KernelHandle::nnz_scalar_t; - // cuSPARSE from CUDA 11.0-11.3 (inclusive) supports the new "generic" SpGEMM - // interface, just not the "reuse" set of functions. This means compute must - // be called in both symbolic and numeric (otherwise, the NNZ of C can't be - // known by symbolic) - if (!std::is_same::type, int>::value || - !std::is_same< - typename std::remove_cv::type, - int>::value) { - throw std::runtime_error( - "cusparseSpGEMM requires local ordinals to be 32-bit integer."); - } - - handle->set_sort_option(1); // tells users the output is sorted - handle->create_cusparse_spgemm_handle(transposeA, transposeB); - typename KernelHandle::cuSparseSpgemmHandleType *h = - handle->get_cusparse_spgemm_handle(); - - // Follow - // https://github.com/NVIDIA/CUDALibrarySamples/blob/master/cuSPARSE/spgemm - - const auto alpha = Kokkos::ArithTraits::one(); - const auto beta = Kokkos::ArithTraits::zero(); - - // In non-reuse interface, forced to give A,B dummy values to - // cusparseSpGEMM_compute. And it actually reads them, so they must be - // allocated and of the correct type. This compute will be called again in - // numeric with the real values. - // - // The dummy values can be uninitialized. cusparseSpGEMM_compute does - // not remove numerical zeros from the sparsity pattern. - void *dummyValues; - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc( - &dummyValues, - sizeof(scalar_type) * std::max(entriesA.extent(0), entriesB.extent(0)))); - - KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( - &h->descr_A, m, n, entriesA.extent(0), (void *)row_mapA.data(), - (void *)entriesA.data(), dummyValues, CUSPARSE_INDEX_32I, - CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); - - KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( - &h->descr_B, n, k, entriesB.extent(0), (void *)row_mapB.data(), - (void *)entriesB.data(), dummyValues, CUSPARSE_INDEX_32I, - CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); - - KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( - &h->descr_C, m, k, 0, NULL, NULL, NULL, CUSPARSE_INDEX_32I, - CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); - - //---------------------------------------------------------------------- - // query workEstimation buffer size, allocate, then call again with buffer. - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_workEstimation( - h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, - h->descr_C, h->scalarType, h->alg, h->spgemmDescr, &h->bufferSize3, - NULL)); - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&h->buffer3, h->bufferSize3)); - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_workEstimation( - h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, - h->descr_C, h->scalarType, h->alg, h->spgemmDescr, &h->bufferSize3, - h->buffer3)); - - //---------------------------------------------------------------------- - // query compute buffer size, allocate, then call again with buffer. - - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( - h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, - h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr, - &h->bufferSize4, NULL)); - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&h->buffer4, h->bufferSize4)); - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( - h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, - h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr, - &h->bufferSize4, h->buffer4)); - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(dummyValues)); - - int64_t C_nrow, C_ncol, C_nnz; - KOKKOS_CUSPARSE_SAFE_CALL( - cusparseSpMatGetSize(h->descr_C, &C_nrow, &C_ncol, &C_nnz)); - if (C_nnz > std::numeric_limits::max()) { - throw std::runtime_error("nnz of C overflowed over 32-bit int\n"); - } - handle->set_c_nnz(C_nnz); - h->C_populated = false; // sparsity pattern of C is not set yet - (void)row_mapC; - -#else - - if (std::is_same::value && - std::is_same::value) { - const idx *a_xadj = (const idx *)row_mapA.data(); - const idx *b_xadj = (const idx *)row_mapB.data(); - idx *c_xadj = (idx *)row_mapC.data(); - - const idx *a_adj = entriesA.data(); - const idx *b_adj = entriesB.data(); - handle->create_cusparse_spgemm_handle(transposeA, transposeB); - typename KernelHandle::cuSparseSpgemmHandleType *h = - handle->get_cusparse_spgemm_handle(); - - int nnzA = entriesA.extent(0); - int nnzB = entriesB.extent(0); - - int baseC, nnzC; - int *nnzTotalDevHostPtr = &nnzC; - - handle->set_sort_option(1); // tells users the output is sorted - cusparseXcsrgemmNnz(h->handle, h->transA, h->transB, (int)m, (int)n, (int)k, - h->a_descr, nnzA, (int *)a_xadj, (int *)a_adj, - h->b_descr, nnzB, (int *)b_xadj, (int *)b_adj, - h->c_descr, (int *)c_xadj, nnzTotalDevHostPtr); - - if (NULL != nnzTotalDevHostPtr) { - nnzC = *nnzTotalDevHostPtr; - } else { - cudaMemcpy(&nnzC, c_xadj + m, sizeof(int), cudaMemcpyDeviceToHost); - cudaMemcpy(&baseC, c_xadj, sizeof(int), cudaMemcpyDeviceToHost); - nnzC -= baseC; - } - handle->set_c_nnz(nnzC); - // entriesC = - // cin_nonzero_index_view_type(Kokkos::view_alloc(Kokkos::WithoutInitializing, - // "entriesC"), nnzC); - } else { - throw std::runtime_error( - "CUSPARSE requires local ordinals to be integer.\n"); - // return; - } -#endif -#else - (void)handle; - (void)m; - (void)n; - (void)k; - (void)row_mapA; - (void)row_mapB; - (void)row_mapC; - (void)entriesA; - (void)entriesB; - (void)transposeA; - (void)transposeB; - throw std::runtime_error("CUSPARSE IS NOT DEFINED\n"); - // return; -#endif -} - -template < - typename KernelHandle, typename ain_row_index_view_type, - typename ain_nonzero_index_view_type, typename ain_nonzero_value_view_type, - typename bin_row_index_view_type, typename bin_nonzero_index_view_type, - typename bin_nonzero_value_view_type, typename cin_row_index_view_type, - typename cin_nonzero_index_view_type, typename cin_nonzero_value_view_type> -void cuSPARSE_apply( - KernelHandle *handle, typename KernelHandle::nnz_lno_t m, - typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, - ain_row_index_view_type row_mapA, ain_nonzero_index_view_type entriesA, - ain_nonzero_value_view_type valuesA, - - bool /* transposeA */, bin_row_index_view_type row_mapB, - bin_nonzero_index_view_type entriesB, bin_nonzero_value_view_type valuesB, - bool /* transposeB */, cin_row_index_view_type row_mapC, - cin_nonzero_index_view_type entriesC, cin_nonzero_value_view_type valuesC) { -#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE - typedef typename KernelHandle::nnz_lno_t idx; - - typedef typename KernelHandle::nnz_scalar_t scalar_type; - - typedef typename ain_row_index_view_type::device_type device1; - typedef typename ain_nonzero_index_view_type::device_type device2; - typedef typename ain_nonzero_value_view_type::device_type device3; - - if (std::is_same::value) { - throw std::runtime_error( - "MEMORY IS NOT ALLOCATED IN GPU DEVICE for CUSPARSE\n"); - // return; - } - if (std::is_same::value) { - throw std::runtime_error( - "MEMORY IS NOT ALLOCATED IN GPU DEVICE for CUSPARSE\n"); - // return; - } - if (std::is_same::value) { - throw std::runtime_error( - "MEMORY IS NOT ALLOCATED IN GPU DEVICE for CUSPARSE\n"); - // return; - } -#if (CUDA_VERSION >= 11040) - typename KernelHandle::cuSparseSpgemmHandleType *h = - handle->get_cusparse_spgemm_handle(); - - KOKKOS_CUSPARSE_SAFE_CALL( - cusparseCsrSetPointers(h->descr_A, (void *)row_mapA.data(), - (void *)entriesA.data(), (void *)valuesA.data())); - - KOKKOS_CUSPARSE_SAFE_CALL( - cusparseCsrSetPointers(h->descr_B, (void *)row_mapB.data(), - (void *)entriesB.data(), (void *)valuesB.data())); - - KOKKOS_CUSPARSE_SAFE_CALL( - cusparseCsrSetPointers(h->descr_C, (void *)row_mapC.data(), - (void *)entriesC.data(), (void *)valuesC.data())); - - if (!h->C_populated) { - cusparseSpGEMMreuse_copy(h->cusparseHandle, h->opA, h->opB, h->descr_A, - h->descr_B, h->descr_C, h->alg, h->spgemmDescr, - &h->bufferSize5, NULL); - cudaMalloc((void **)&h->buffer5, h->bufferSize5); - cusparseSpGEMMreuse_copy(h->cusparseHandle, h->opA, h->opB, h->descr_A, - h->descr_B, h->descr_C, h->alg, h->spgemmDescr, - &h->bufferSize5, h->buffer5); - cudaFree(h->buffer3); - h->buffer3 = NULL; - h->C_populated = true; - } - - // C' = alpha * opA(A) * opB(B) + beta * C - const auto alpha = Kokkos::ArithTraits::one(); - const auto beta = Kokkos::ArithTraits::zero(); - - // alpha, beta are on host, but since we use singleton on the cusparse - // handle, we save/restore the pointer mode to not interference with - // others' use - cusparsePointerMode_t oldPtrMode; - KOKKOS_CUSPARSE_SAFE_CALL( - cusparseGetPointerMode(h->cusparseHandle, &oldPtrMode)); - KOKKOS_CUSPARSE_SAFE_CALL( - cusparseSetPointerMode(h->cusparseHandle, CUSPARSE_POINTER_MODE_HOST)); - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_compute( - h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, - h->descr_C, h->scalarType, h->alg, h->spgemmDescr)); - KOKKOS_CUSPARSE_SAFE_CALL( - cusparseSetPointerMode(h->cusparseHandle, oldPtrMode)); - - (void)m; - (void)n; - (void)k; - -#elif (CUSPARSE_VERSION >= 11000) - using scalar_type = typename KernelHandle::nnz_scalar_t; - const auto alpha = Kokkos::ArithTraits::one(); - const auto beta = Kokkos::ArithTraits::zero(); - typename KernelHandle::cuSparseSpgemmHandleType *h = - handle->get_cusparse_spgemm_handle(); - KOKKOS_CUSPARSE_SAFE_CALL( - cusparseCsrSetPointers(h->descr_A, (void *)row_mapA.data(), - (void *)entriesA.data(), (void *)valuesA.data())); - KOKKOS_CUSPARSE_SAFE_CALL( - cusparseCsrSetPointers(h->descr_B, (void *)row_mapB.data(), - (void *)entriesB.data(), (void *)valuesB.data())); - KOKKOS_CUSPARSE_SAFE_CALL( - cusparseCsrSetPointers(h->descr_C, (void *)row_mapC.data(), - (void *)entriesC.data(), (void *)valuesC.data())); - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( - h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, - h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr, - &h->bufferSize4, h->buffer4)); - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_copy( - h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, - h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr)); - (void)m; - (void)n; - (void)k; - -#else - - if (std::is_same::value) { - int *a_xadj = (int *)row_mapA.data(); - int *b_xadj = (int *)row_mapB.data(); - int *c_xadj = (int *)row_mapC.data(); - - int *a_adj = (int *)entriesA.data(); - int *b_adj = (int *)entriesB.data(); - int *c_adj = (int *)entriesC.data(); - - typename KernelHandle::cuSparseSpgemmHandleType *h = - handle->get_cusparse_spgemm_handle(); - - int nnzA = entriesA.extent(0); - int nnzB = entriesB.extent(0); - - scalar_type *a_ew = (scalar_type *)valuesA.data(); - scalar_type *b_ew = (scalar_type *)valuesB.data(); - scalar_type *c_ew = (scalar_type *)valuesC.data(); - - if (std::is_same::value) { - cusparseScsrgemm(h->handle, h->transA, h->transB, m, n, k, h->a_descr, - nnzA, (float *)a_ew, a_xadj, a_adj, h->b_descr, nnzB, - (float *)b_ew, b_xadj, b_adj, h->c_descr, (float *)c_ew, - c_xadj, c_adj); - } else if (std::is_same::value) { - cusparseDcsrgemm(h->handle, h->transA, h->transB, m, n, k, h->a_descr, - nnzA, (double *)a_ew, a_xadj, a_adj, h->b_descr, nnzB, - (double *)b_ew, b_xadj, b_adj, h->c_descr, - (double *)c_ew, c_xadj, c_adj); - } else { - throw std::runtime_error( - "CUSPARSE requires float or double values. cuComplex and " - "cuDoubleComplex are not implemented yet.\n"); - // return; - } - - } else { - throw std::runtime_error( - "CUSPARSE requires local ordinals to be integer.\n"); - // return; - } -#endif -#else - (void)handle; - (void)m; - (void)n; - (void)k; - (void)row_mapA; - (void)row_mapB; - (void)row_mapC; - (void)entriesA; - (void)entriesB; - (void)entriesC; - (void)valuesA; - (void)valuesB; - (void)valuesC; - throw std::runtime_error("CUSPARSE IS NOT DEFINED\n"); - // return; -#endif -} -} // namespace Impl -} // namespace KokkosSparse - -#endif diff --git a/sparse/impl/KokkosSparse_spgemm_impl.hpp b/sparse/impl/KokkosSparse_spgemm_impl.hpp index 776579ded2..e0b3f7b143 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl.hpp @@ -829,6 +829,42 @@ class KokkosSPGEMM { } return po2_num_chunks; } + + public: + void compute_row_flops() { + auto sh = this->handle->get_spgemm_handle(); + nnz_lno_t maxNumRoughZeros = 0; + size_t overall_flops = 0; + Kokkos::Timer timer1; + auto new_row_mapB_begin = + Kokkos::subview(row_mapB, std::make_pair(nnz_lno_t(0), b_row_cnt)); + auto new_row_mapB_end = + Kokkos::subview(row_mapB, std::make_pair(nnz_lno_t(1), b_row_cnt + 1)); + row_lno_persistent_work_view_t flops_per_row( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "original row flops"), + a_row_cnt); + + // get maximum row flops. + maxNumRoughZeros = this->getMaxRoughRowNNZ( + a_row_cnt, row_mapA, entriesA, new_row_mapB_begin, new_row_mapB_end, + flops_per_row.data()); + + // calculate overal flops. + KokkosKernels::Impl::kk_reduce_view2(a_row_cnt, flops_per_row, + overall_flops); + if (KOKKOSKERNELS_VERBOSE) { + std::cout << "\tOriginal Max Row Flops:" << maxNumRoughZeros << std::endl; + std::cout << "\tOriginal overall_flops Flops:" << overall_flops + << std::endl; + std::cout << "\ttOriginal Max Row Flop Calc Time:" << timer1.seconds() + << std::endl; + } + sh->original_max_row_flops = maxNumRoughZeros; + sh->original_overall_flops = overall_flops; + sh->row_flops = flops_per_row; + sh->set_computed_rowflops(); + } }; } // namespace Impl diff --git a/sparse/impl/KokkosSparse_spgemm_impl_def.hpp b/sparse/impl/KokkosSparse_spgemm_impl_def.hpp index 173a58b568..94b16680a8 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_def.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_def.hpp @@ -92,40 +92,7 @@ void KokkosSPGEMMgetMaxRoughRowNNZ( - a_row_cnt, row_mapA, entriesA, new_row_mapB_begin, new_row_mapB_end, - flops_per_row.data()); - - // calculate overal flops. - KokkosKernels::Impl::kk_reduce_view2( - a_row_cnt, flops_per_row, overall_flops); - if (KOKKOSKERNELS_VERBOSE) { - std::cout << "\tOriginal Max Row Flops:" << maxNumRoughZeros - << std::endl; - std::cout << "\tOriginal overall_flops Flops:" << overall_flops - << std::endl; - std::cout << "\ttOriginal Max Row Flop Calc Time:" << timer1.seconds() - << std::endl; - } - this->handle->get_spgemm_handle()->original_max_row_flops = - maxNumRoughZeros; - this->handle->get_spgemm_handle()->original_overall_flops = overall_flops; - this->handle->get_spgemm_handle()->row_flops = flops_per_row; - } + this->compute_row_flops(); // number of rows and nnzs nnz_lno_t n = this->row_mapB.extent(0) - 1; diff --git a/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp b/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp index 50d3681eed..6683fb0bc4 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp @@ -1286,7 +1286,8 @@ void KokkosSPGEMMhandle->get_spgemm_handle()->row_flops; size_t original_overall_flops = this->handle->get_spgemm_handle()->original_overall_flops; - nnz_lno_t max_nnz = this->handle->get_spgemm_handle()->get_max_result_nnz(); + nnz_lno_t max_nnz = this->handle->get_spgemm_handle() + ->template get_max_result_nnz(rowmapC_); size_type overall_nnz = this->handle->get_spgemm_handle()->get_c_nnz(); typedef KokkosKernels::Impl::UniformMemoryPool diff --git a/sparse/impl/KokkosSparse_spgemm_impl_symbolic.hpp b/sparse/impl/KokkosSparse_spgemm_impl_symbolic.hpp index 9fc1b8fe72..9ee1cb2673 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_symbolic.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_symbolic.hpp @@ -1699,32 +1699,15 @@ void KokkosSPGEMM 0) { - KokkosKernels::Impl::view_reduce_max( - m, rowmapC, c_max_nnz); - MyExecSpace().fence(); - } - this->handle->get_spgemm_handle()->set_max_result_nnz(c_max_nnz); - - if (KOKKOSKERNELS_VERBOSE) { - std::cout << "\tReduce Max Row Size Time:" << timer1_.seconds() - << std::endl; - } - } - + typename c_row_view_t::non_const_value_type c_nnz_size = 0; KokkosKernels::Impl::kk_exclusive_parallel_prefix_sum(m + 1, - rowmapC); - MyExecSpace().fence(); - auto d_c_nnz_size = Kokkos::subview(rowmapC, m); - auto h_c_nnz_size = Kokkos::create_mirror_view(d_c_nnz_size); - Kokkos::deep_copy(h_c_nnz_size, d_c_nnz_size); - typename c_row_view_t::non_const_value_type c_nnz_size = h_c_nnz_size(); + MyExecSpace>( + m + 1, rowmapC, c_nnz_size); this->handle->get_spgemm_handle()->set_c_nnz(c_nnz_size); + nnz_lno_t c_max_nnz = + KokkosSparse::Impl::graph_max_degree(rowmapC); + this->handle->get_spgemm_handle()->set_max_result_nnz(c_max_nnz); } // end: symbolic_c_no_compression template 0) { - KokkosKernels::Impl::view_reduce_max( - m, rowmapC, c_max_nnz); - MyExecSpace().fence(); - } - this->handle->get_spgemm_handle()->set_max_result_nnz(c_max_nnz); - - if (KOKKOSKERNELS_VERBOSE) { - std::cout << "\tReduce Max Row Size Time:" << timer1_.seconds() - << std::endl; - } - } - + typename c_row_view_t::non_const_value_type c_nnz_size = 0; KokkosKernels::Impl::kk_exclusive_parallel_prefix_sum(m + 1, - rowmapC); - MyExecSpace().fence(); - auto d_c_nnz_size = Kokkos::subview(rowmapC, m); - auto h_c_nnz_size = Kokkos::create_mirror_view(d_c_nnz_size); - Kokkos::deep_copy(h_c_nnz_size, d_c_nnz_size); - typename c_row_view_t::non_const_value_type c_nnz_size = h_c_nnz_size(); + MyExecSpace>( + m + 1, rowmapC, c_nnz_size); this->handle->get_spgemm_handle()->set_c_nnz(c_nnz_size); + nnz_lno_t c_max_nnz = + KokkosSparse::Impl::graph_max_degree(rowmapC); + this->handle->get_spgemm_handle()->set_max_result_nnz(c_max_nnz); } // symbolic_c (end) template handle->get_spgemm_handle()->row_flops; size_t original_overall_flops = this->handle->get_spgemm_handle()->original_overall_flops; - nnz_lno_t max_nnz = this->handle->get_spgemm_handle()->get_max_result_nnz(); + nnz_lno_t max_nnz = + this->handle->get_spgemm_handle() + ->template get_max_result_nnz(row_mapC_); size_type overall_nnz = this->handle->get_spgemm_handle()->get_c_nnz(); nnz_lno_t min_hash_size = 1; size_t chunksize = 1; diff --git a/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp b/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp index d95425c352..2a2de2815f 100644 --- a/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp +++ b/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp @@ -51,10 +51,12 @@ #include "KokkosKernels_Handle.hpp" // Include the actual functors #if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +#include "KokkosSparse_spgemm_symbolic.hpp" #include "KokkosSparse_spgemm_impl.hpp" #include "KokkosSparse_spgemm_jacobi_denseacc_impl.hpp" #include "KokkosSparse_spgemm_jacobi_sparseacc_impl.hpp" #include "KokkosSparse_spgemm_jacobi_seq_impl.hpp" +#include "KokkosSparse_SortCrs.hpp" #endif namespace KokkosSparse { @@ -113,7 +115,7 @@ struct spgemm_jacobi_eti_spec_avail { }; // Include the actual specialization declarations -#include +#include #include namespace KokkosSparse { @@ -187,7 +189,27 @@ struct SPGEMM_JACOBIget_spgemm_handle(); if (!sh->is_symbolic_called()) { throw std::runtime_error( - "Call spgemm symbolic before calling SpGEMM jacobi"); + "KokkosSparse::spgemm_jacobi: must first call spgemm_symbolic with " + "the same handle."); + } + if (!sh->are_rowptrs_computed()) { + // Call symbolic, and make sure rowptrs are populated. This will not + // duplicate any work if the user has already called symbolic. Must also + // cast away constness of row_mapC. + using c_size_view_t_nc = typename c_size_view_t_::non_const_type; + using c_size_type = typename c_size_view_t_::non_const_value_type; + c_size_view_t_nc row_mapC_nc(const_cast(row_mapC.data()), + row_mapC.extent(0)); + KokkosSparse::Experimental::spgemm_symbolic( + handle, m, n, k, row_mapA, entriesA, transposeA, row_mapB, entriesB, + transposeB, row_mapC_nc, true); + } + if (!sh->are_rowflops_computed()) { + KokkosSPGEMM + kspgemm(handle, m, n, k, row_mapA, entriesA, valuesA, transposeA, + row_mapB, entriesB, valuesB, transposeB); + kspgemm.compute_row_flops(); } if (sh->get_algorithm_type() == SPGEMM_SERIAL) { @@ -206,6 +228,10 @@ struct SPGEMM_JACOBI( + row_mapC, entriesC, valuesC); } }; @@ -292,7 +318,7 @@ struct SPGEMM_JACOBI >, \ false, true>; -#include +#include #include #endif diff --git a/sparse/impl/KokkosSparse_spgemm_mkl2phase_impl.hpp b/sparse/impl/KokkosSparse_spgemm_mkl2phase_impl.hpp deleted file mode 100644 index e6f0c26497..0000000000 --- a/sparse/impl/KokkosSparse_spgemm_mkl2phase_impl.hpp +++ /dev/null @@ -1,685 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER - -#ifndef _KOKKOSSPGEMMMKL2_HPP -#define _KOKKOSSPGEMMMKL2_HPP - -//#define KOKKOSKERNELS_ENABLE_TPL_MKL - -#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL -#include "mkl.h" -#endif - -#include "KokkosKernels_Utils.hpp" - -namespace KokkosSparse { -namespace Impl { - -template -void mkl2phase_symbolic( - KernelHandle *handle, typename KernelHandle::nnz_lno_t m, - typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, - in_row_index_view_type row_mapA, in_nonzero_index_view_type entriesA, - - bool transposeA, bin_row_index_view_type row_mapB, - bin_nonzero_index_view_type entriesB, - - bool transposeB, cin_row_index_view_type row_mapC, bool verbose = false) { -#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL - - typedef typename KernelHandle::nnz_lno_t idx; - - typedef typename KernelHandle::HandlePersistentMemorySpace - HandlePersistentMemorySpace; - - typedef typename Kokkos::View - int_persistent_work_view_t; - - typedef typename KernelHandle::HandleExecSpace MyExecSpace; - - if (std::is_same::value) { - int_persistent_work_view_t a_xadj_v, b_xadj_v; - - const int max_integer = 2147483647; - if (entriesB.extent(0) > max_integer || entriesA.extent(0) > max_integer) { - throw std::runtime_error( - "MKL requires integer values for size type for SPGEMM. Copying to " - "integer will cause overflow.\n"); - } - - int *a_adj = (int *)entriesA.data(); - int *b_adj = (int *)entriesB.data(); - - int *a_xadj = (int *)row_mapA.data(); - int *b_xadj = (int *)row_mapB.data(); - int *c_xadj = (int *)row_mapC.data(); - - if (handle->mkl_convert_to_1base) { - handle->persistent_a_xadj = int_persistent_work_view_t("tmpa", m + 1); - handle->persistent_b_xadj = int_persistent_work_view_t("tmpb", n + 1); - handle->persistent_c_xadj = int_persistent_work_view_t("tmpc", m + 1); - int_persistent_work_view_t a_plus_one("a_plus_one", entriesA.extent(0)); - int_persistent_work_view_t b_plus_one("b_plus_one", entriesB.extent(0)); - handle->persistent_a_adj = a_plus_one; - handle->persistent_b_adj = b_plus_one; - - KokkosKernels::Impl::kk_a_times_x_plus_b( - m + 1, handle->persistent_a_xadj, row_mapA, 1, 1); - KokkosKernels::Impl::kk_a_times_x_plus_b( - n + 1, handle->persistent_b_xadj, row_mapB, 1, 1); - KokkosKernels::Impl::kk_a_times_x_plus_b( - entriesA.extent(0), a_plus_one, entriesA, 1, 1); - KokkosKernels::Impl::kk_a_times_x_plus_b( - entriesB.extent(0), b_plus_one, entriesB, 1, 1); - - a_adj = (int *)handle->persistent_a_adj.data(); - b_adj = (int *)handle->persistent_b_adj.data(); - a_xadj = handle->persistent_a_xadj.data(); - b_xadj = handle->persistent_b_xadj.data(); - c_xadj = handle->persistent_c_xadj.data(); - } - -#if __INTEL_MKL__ < 2018 - (void)transposeA; - (void)transposeB; // supress unused-parameter warning - char trans = 'N'; - MKL_INT request = 1; - MKL_INT sort = handle->get_mkl_sort_option(); - MKL_INT mklm = m, mkln = n, mklk = k; - MKL_INT info = 0; - - double *mynullptr = NULL; - int *mynulladj = NULL; - const int nzmax = 0; - - /* - KokkosKernels::Impl::print_1Dview(handle->persistent_a_xadj); - KokkosKernels::Impl::print_1Dview(a_plus_one); - KokkosKernels::Impl::print_1Dview(handle->persistent_b_xadj); - KokkosKernels::Impl::print_1Dview(b_plus_one); - */ - Kokkos::Timer timer1; - - mkl_dcsrmultcsr(&trans, &request, &sort, &mklm, &mkln, &mklk, mynullptr, - a_adj, a_xadj, mynullptr, b_adj, b_xadj, mynullptr, - mynulladj, c_xadj, &nzmax, &info); - - if (verbose) { - std::cout << "Sort:" << sort - << " Actual MKL2 Symbolic Time:" << timer1.seconds() - << std::endl; - } - - if (handle->mkl_convert_to_1base) { - KokkosKernels::Impl::kk_a_times_x_plus_b( - m + 1, row_mapC, handle->persistent_c_xadj, 1, -1); - handle->set_c_nnz(row_mapC(m)); - } else { - handle->set_c_nnz(row_mapC(m) - 1); - } -#endif // __INTEL_MKL__ < 2018 - -#if __INTEL_MKL__ == 2018 && __INTEL_MKL_UPDATE__ >= 2 - MKL_INT mklm = m, mkln = n; - double *mynullptr = NULL; - - sparse_matrix_t A; - sparse_matrix_t B; - sparse_matrix_t C; - - // Goal: Set c_xadj (which is the rowptr) from C - - if (handle->mkl_convert_to_1base) { // a*, b* already converted to 1base - // above... - if (SPARSE_STATUS_SUCCESS != - mkl_sparse_d_create_csr(&A, SPARSE_INDEX_BASE_ONE, mklm, mkln, a_xadj, - a_xadj + 1, a_adj, mynullptr)) { - throw std::runtime_error( - "CANNOT CREATE mkl_sparse_s_create_csr A matrix\n"); - } - - if (SPARSE_STATUS_SUCCESS != - mkl_sparse_d_create_csr(&B, SPARSE_INDEX_BASE_ONE, n, k, b_xadj, - b_xadj + 1, b_adj, mynullptr)) { - throw std::runtime_error( - "CANNOT CREATE mkl_sparse_s_create_csr B matrix\n"); - } - } else { - if (SPARSE_STATUS_SUCCESS != - mkl_sparse_d_create_csr(&A, SPARSE_INDEX_BASE_ZERO, mklm, mkln, - a_xadj, a_xadj + 1, a_adj, mynullptr)) { - throw std::runtime_error( - "CANNOT CREATE mkl_sparse_s_create_csr A matrix\n"); - } - - if (SPARSE_STATUS_SUCCESS != - mkl_sparse_d_create_csr(&B, SPARSE_INDEX_BASE_ZERO, n, k, b_xadj, - b_xadj + 1, b_adj, mynullptr)) { - throw std::runtime_error( - "CANNOT CREATE mkl_sparse_s_create_csr B matrix\n"); - } - } - - sparse_operation_t operation; - if (transposeA && transposeB) { - operation = SPARSE_OPERATION_TRANSPOSE; - } else if (!(transposeA || transposeB)) { - operation = SPARSE_OPERATION_NON_TRANSPOSE; - } else { - throw std::runtime_error( - "MKL either transpose both matrices, or none for SPGEMM\n"); - } - - matrix_descr common_mtx_props; - common_mtx_props.type = SPARSE_MATRIX_TYPE_GENERAL; - common_mtx_props.mode = SPARSE_FILL_MODE_FULL; - common_mtx_props.diag = SPARSE_DIAG_NON_UNIT; - - Kokkos::Timer timer1; - // options: SPARSE_STAGE_FULL_MULT vs SPARSE_STAGE_NNZ_COUNT then - // SPARSE_STAGE_FINALIZE_MULT - bool success = SPARSE_STATUS_SUCCESS != - mkl_sparse_sp2m(operation, common_mtx_props, A, operation, - common_mtx_props, B, SPARSE_STAGE_NNZ_COUNT, - &C); // success is "true" if mkl_sparse_spmm - // does not return success - - if (verbose) { - std::cout << "Actual DOUBLE MKL SPMM Time:" << timer1.seconds() - << std::endl; - } - - if (success) { - throw std::runtime_error( - "ERROR at SPGEMM multiplication in mkl_sparse_spmm\n"); - } else { - // Copy sparse_matrix_t C results back to input data structure - sparse_index_base_t c_indexing; - MKL_INT c_rows, c_cols, *rows_end, *columns; // use c_xadj as rows_start - double *values; // should return null - - if (SPARSE_STATUS_SUCCESS != - // mkl_sparse_s_export_csr (C, &c_indexing, &c_rows, &c_cols, - // &rows_start, &rows_end, &columns, &values)) - mkl_sparse_d_export_csr(C, &c_indexing, &c_rows, &c_cols, &c_xadj, - &rows_end, &columns, &values)) { - throw std::runtime_error( - "ERROR at exporting result matrix in mkl_sparse_spmm\n"); - } - - // if (SPARSE_INDEX_BASE_ZERO != c_indexing){ - // throw std::runtime_error ("C is not zero based indexed\n"); - // } - if (handle->mkl_convert_to_1base && - (c_indexing == - SPARSE_INDEX_BASE_ONE)) { // Need to convert back to base0 - KokkosKernels::Impl::kk_a_times_x_plus_b( - m + 1, row_mapC, handle->persistent_c_xadj, 1, -1); - handle->set_c_nnz(row_mapC(m)); - } else { - handle->set_c_nnz(row_mapC(m) - 1); - } - - } // end else !success - - // Cleanup... - if (SPARSE_STATUS_SUCCESS != mkl_sparse_destroy(A)) { - throw std::runtime_error("Error at mkl_sparse_destroy A\n"); - } - if (SPARSE_STATUS_SUCCESS != mkl_sparse_destroy(B)) { - throw std::runtime_error("Error at mkl_sparse_destroy B\n"); - } - if (SPARSE_STATUS_SUCCESS != mkl_sparse_destroy(C)) { - throw std::runtime_error("Error at mkl_sparse_destroy C\n"); - } -#elif __INTEL_MKL__ == 2018 && __INTEL_MKL_UPDATE__ < 2 - throw std::runtime_error( - "Intel MKL version 18 must have update 2 - use intel/18.2.xyz\n"); - (void)k; - (void)transposeA; - (void)transposeB; - (void)verbose; -#else - throw std::runtime_error( - "Intel MKL versions > 18 are not yet tested/supported\n"); - (void)k; - (void)transposeA; - (void)transposeB; - (void)verbose; - (void)a_xadj; - (void)b_xadj; - (void)c_xadj; - (void)a_adj; - (void)b_adj; -#endif - - } else { - throw std::runtime_error("MKL requires local ordinals to be integer.\n"); - (void)k; - (void)transposeA; - (void)transposeB; - (void)verbose; - } -#else // KOKKOSKERNELS_ENABLE_TPL_MKL - (void)handle; - (void)m; - (void)n; - (void)k; - (void)row_mapA; - (void)row_mapB; - (void)row_mapC; - (void)entriesA; - (void)entriesB; - (void)transposeA; - (void)transposeB; - (void)verbose; - throw std::runtime_error("MKL IS NOT DEFINED\n"); -#endif // KOKKOSKERNELS_ENABLE_TPL_MKL -} - -template < - typename KernelHandle, typename in_row_index_view_type, - typename in_nonzero_index_view_type, typename in_nonzero_value_view_type, - typename bin_row_index_view_type, typename bin_nonzero_index_view_type, - typename bin_nonzero_value_view_type, typename cin_row_index_view_type, - typename cin_nonzero_index_view_type, typename cin_nonzero_value_view_type> -void mkl2phase_apply( - KernelHandle *handle, typename KernelHandle::nnz_lno_t m, - typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, - in_row_index_view_type row_mapA, in_nonzero_index_view_type entriesA, - in_nonzero_value_view_type valuesA, - - bool transposeA, bin_row_index_view_type row_mapB, - bin_nonzero_index_view_type entriesB, bin_nonzero_value_view_type valuesB, - bool transposeB, cin_row_index_view_type row_mapC, - cin_nonzero_index_view_type &entriesC, cin_nonzero_value_view_type &valuesC, - bool verbose = false) { -#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL - - using HandlePersistentMemorySpace = - typename KernelHandle::HandlePersistentMemorySpace; - using int_persistent_work_view_t = - typename Kokkos::View; - using idx = typename KernelHandle::nnz_lno_t; - - if (std::is_same::value) { - int *a_xadj = (int *)row_mapA.data(); - int *b_xadj = (int *)row_mapB.data(); - int *c_xadj = (int *)row_mapC.data(); - - int *a_adj = (int *)entriesA.data(); - int *b_adj = (int *)entriesB.data(); - - if (handle->mkl_convert_to_1base) { - int_persistent_work_view_t a_xadj_v, b_xadj_v, c_xadj_v; - a_xadj = (int *)handle->persistent_a_xadj.data(); - b_xadj = (int *)handle->persistent_b_xadj.data(); - c_xadj = (int *)handle->persistent_c_xadj.data(); - int_persistent_work_view_t a_plus_one = handle->persistent_a_adj; - int_persistent_work_view_t b_plus_one = handle->persistent_b_adj; - - a_adj = (int *)a_plus_one.data(); - b_adj = (int *)b_plus_one.data(); - } - -#if __INTEL_MKL__ < 2018 - (void)transposeA; - (void)transposeB; - const value_type *a_ew = valuesA.data(); - const value_type *b_ew = valuesB.data(); - - char trans = 'N'; - MKL_INT request = 2; - MKL_INT sort = handle->get_mkl_sort_option(); - MKL_INT mklm = m, mkln = n, mklk = k; - MKL_INT info = 0, nzmax = 2147483647; - /* - KokkosKernels::Impl::print_1Dview(handle->persistent_a_xadj); - KokkosKernels::Impl::print_1Dview(a_plus_one); - KokkosKernels::Impl::print_1Dview(handle->persistent_b_xadj); - KokkosKernels::Impl::print_1Dview(b_plus_one); - KokkosKernels::Impl::print_1Dview(handle->persistent_c_xadj); - KokkosKernels::Impl::print_1Dview(valuesA); - KokkosKernels::Impl::print_1Dview(valuesB); - - - std::cout << "A" << std::endl; - KokkosKernels::Impl::print_1Dview(row_mapA); - KokkosKernels::Impl::print_1Dview(entriesA); - std::cout << "B" << std::endl; - KokkosKernels::Impl::print_1Dview(row_mapB); - KokkosKernels::Impl::print_1Dview(entriesB); - std::cout << "c:" << "entriesC:" << entriesC.extent(0) << std::endl; - KokkosKernels::Impl::print_1Dview(row_mapC); - */ - Kokkos::Timer timer1; - - if (std::is_same::value) { - mkl_scsrmultcsr(&trans, &request, &sort, &mklm, &mkln, &mklk, - (float *)a_ew, a_adj, a_xadj, (float *)b_ew, b_adj, - b_xadj, (float *)valuesC.data(), entriesC.data(), c_xadj, - &nzmax, &info); - mkl_free_buffers(); - } else if (std::is_same::value) { - mkl_dcsrmultcsr(&trans, &request, &sort, &mklm, &mkln, &mklk, - (double *)a_ew, a_adj, a_xadj, (double *)b_ew, b_adj, - b_xadj, (double *)valuesC.data(), entriesC.data(), c_xadj, - &nzmax, &info); - mkl_free_buffers(); - } else { - throw std::runtime_error( - "MKL requires float or double values. Complex values are not " - "implemented yet.\n"); - } - if (verbose) { - std::cout << "Sort:" << sort - << " Actual MKL2 Numeric Time:" << timer1.seconds() - << std::endl; - } - - if (handle->mkl_convert_to_1base) { - KokkosKernels::Impl::kk_a_times_x_plus_b( - entriesC.extent(0), entriesC, entriesC, 1, -1); - } -#endif // __INTEL_MKL__ < 2018 - -#if __INTEL_MKL__ == 2018 && __INTEL_MKL_UPDATE__ >= 2 - value_type *a_ew = const_cast(valuesA.data()); - value_type *b_ew = const_cast(valuesB.data()); - - char trans = 'N'; - MKL_INT request = 2; - MKL_INT sort = handle->get_mkl_sort_option(); - MKL_INT mklm = m, mkln = n, mklk = k; - MKL_INT info = 0, nzmax = 2147483647; - - sparse_matrix_t A; - sparse_matrix_t B; - sparse_matrix_t C; - - if (handle->mkl_convert_to_1base) { // a*, b* already converted to 1base - // above... - if (std::is_same::value) { - if (SPARSE_STATUS_SUCCESS != - mkl_sparse_d_create_csr(&A, SPARSE_INDEX_BASE_ONE, mklm, mkln, - a_xadj, a_xadj + 1, a_adj, - reinterpret_cast(a_ew))) { - throw std::runtime_error( - "CANNOT CREATE mkl_sparse_s_create_csr A matrix\n"); - } - } else if (std::is_same::value) { - if (SPARSE_STATUS_SUCCESS != - mkl_sparse_s_create_csr(&A, SPARSE_INDEX_BASE_ONE, mklm, mkln, - a_xadj, a_xadj + 1, a_adj, - reinterpret_cast(a_ew))) { - throw std::runtime_error( - "CANNOT CREATE mkl_sparse_s_create_csr A matrix\n"); - } - } - - if (std::is_same::value) { - if (SPARSE_STATUS_SUCCESS != - mkl_sparse_d_create_csr(&B, SPARSE_INDEX_BASE_ONE, n, k, b_xadj, - b_xadj + 1, b_adj, - reinterpret_cast(b_ew))) { - throw std::runtime_error( - "CANNOT CREATE mkl_sparse_s_create_csr B matrix\n"); - } - } else if (std::is_same::value) { - if (SPARSE_STATUS_SUCCESS != - mkl_sparse_s_create_csr(&B, SPARSE_INDEX_BASE_ONE, n, k, b_xadj, - b_xadj + 1, b_adj, - reinterpret_cast(b_ew))) { - throw std::runtime_error( - "CANNOT CREATE mkl_sparse_s_create_csr B matrix\n"); - } - } - } else { - if (std::is_same::value) { - if (SPARSE_STATUS_SUCCESS != - mkl_sparse_d_create_csr(&A, SPARSE_INDEX_BASE_ZERO, mklm, mkln, - a_xadj, a_xadj + 1, a_adj, - reinterpret_cast(a_ew))) { - throw std::runtime_error( - "CANNOT CREATE mkl_sparse_s_create_csr A matrix\n"); - } - } else if (std::is_same::value) { - if (SPARSE_STATUS_SUCCESS != - mkl_sparse_s_create_csr(&A, SPARSE_INDEX_BASE_ZERO, mklm, mkln, - a_xadj, a_xadj + 1, a_adj, - reinterpret_cast(a_ew))) { - throw std::runtime_error( - "CANNOT CREATE mkl_sparse_s_create_csr A matrix\n"); - } - } - - if (std::is_same::value) { - if (SPARSE_STATUS_SUCCESS != - mkl_sparse_d_create_csr(&B, SPARSE_INDEX_BASE_ZERO, n, k, b_xadj, - b_xadj + 1, b_adj, - reinterpret_cast(b_ew))) { - throw std::runtime_error( - "CANNOT CREATE mkl_sparse_s_create_csr B matrix\n"); - } - } else if (std::is_same::value) { - if (SPARSE_STATUS_SUCCESS != - mkl_sparse_s_create_csr(&B, SPARSE_INDEX_BASE_ZERO, n, k, b_xadj, - b_xadj + 1, b_adj, - reinterpret_cast(b_ew))) { - throw std::runtime_error( - "CANNOT CREATE mkl_sparse_s_create_csr B matrix\n"); - } - } - } - - sparse_operation_t operation; - if (transposeA && transposeB) { - operation = SPARSE_OPERATION_TRANSPOSE; - } else if (!(transposeA || transposeB)) { - operation = SPARSE_OPERATION_NON_TRANSPOSE; - } else { - throw std::runtime_error( - "MKL either transpose both matrices, or none for SPGEMM\n"); - } - - matrix_descr common_mtx_props; - common_mtx_props.type = SPARSE_MATRIX_TYPE_GENERAL; - common_mtx_props.mode = SPARSE_FILL_MODE_FULL; - common_mtx_props.diag = SPARSE_DIAG_NON_UNIT; - - Kokkos::Timer timer1; - // options: SPARSE_STAGE_FULL_MULT vs SPARSE_STAGE_NNZ_COUNT then - // SPARSE_STAGE_FINALIZE_MULT - bool success = - SPARSE_STATUS_SUCCESS != - mkl_sparse_sp2m(operation, common_mtx_props, A, operation, - common_mtx_props, B, SPARSE_STAGE_FINALIZE_MULT, - &C); // success is "true" if mkl_sparse_spmm does not - // return success - - if (verbose) { - std::cout << "Actual MKL SPMM Time:" << timer1.seconds() << std::endl; - } - - if (success) { - throw std::runtime_error( - "ERROR at SPGEMM multiplication in mkl_sparse_spmm\n"); - } - - // Copy C components back - sparse_index_base_t c_indexing; - MKL_INT c_rows, c_cols, *rows_start, *rows_end, *columns; - typedef double values_type; - values_type *values; - - if (SPARSE_STATUS_SUCCESS != - // mkl_sparse_s_export_csr (C, - mkl_sparse_d_export_csr(C, &c_indexing, &c_rows, &c_cols, &rows_start, - &rows_end, &columns, &values)) { - throw std::runtime_error( - "ERROR at exporting result matrix in mkl_sparse_spmm\n"); - } - - if (SPARSE_INDEX_BASE_ZERO != c_indexing) { - throw std::runtime_error("C is not zero based indexed\n"); - } - - // KokkosKernels::Impl::copy_vector (m, rows_start, - // row_mapC); idx nnz = row_mapC(m) = rows_end[m - 1]; - idx nnz = rows_end[m - 1]; - using non_const_size_type = - typename cin_row_index_view_type::non_const_value_type; - auto *tmpPtr = const_cast(row_mapC.data()); - tmpPtr[m] = nnz; - - KokkosKernels::Impl::copy_vector< - MKL_INT *, typename cin_nonzero_index_view_type::non_const_type, - MyExecSpace>(nnz, columns, entriesC); - KokkosKernels::Impl::copy_vector< - values_type *, typename cin_nonzero_value_view_type::non_const_type, - MyExecSpace>(nnz, values, valuesC); - - if (handle->mkl_convert_to_1base) { - KokkosKernels::Impl::kk_a_times_x_plus_b( - entriesC.extent(0), entriesC, entriesC, 1, -1); - } - - // Cleanup - if (SPARSE_STATUS_SUCCESS != mkl_sparse_destroy(A)) { - throw std::runtime_error("Error at mkl_sparse_destroy A\n"); - } - if (SPARSE_STATUS_SUCCESS != mkl_sparse_destroy(B)) { - throw std::runtime_error("Error at mkl_sparse_destroy B\n"); - } - if (SPARSE_STATUS_SUCCESS != mkl_sparse_destroy(C)) { - throw std::runtime_error("Error at mkl_sparse_destroy C\n"); - } -#elif __INTEL_MKL__ == 2018 && __INTEL_MKL_UPDATE__ < 2 - throw std::runtime_error( - "Intel MKL version 18 must have update 2 - use intel/18.2.xyz\n"); - (void)m; - (void)n; - (void)k; - (void)entriesC; - (void)valuesA; - (void)valuesB; - (void)valuesC; - (void)transposeA; - (void)transposeB; - (void)verbose; -#else - throw std::runtime_error( - "Intel MKL versions > 18 are not yet tested/supported\n"); - // Supress -Wunused-parameter on intel-18 - (void)m; - (void)n; - (void)k; - (void)entriesC; - (void)valuesA; - (void)valuesB; - (void)valuesC; - (void)transposeA; - (void)transposeB; - (void)verbose; - (void)a_xadj; - (void)b_xadj; - (void)c_xadj; - (void)a_adj; - (void)b_adj; -#endif // __INTEL_MKL__ == 2018 && __INTEL_MKL_UPDATE__ >= 2 - } else { - (void)m; - (void)n; - (void)k; - (void)entriesC; - (void)valuesA; - (void)valuesB; - (void)valuesC; - (void)transposeA; - (void)transposeB; - (void)verbose; - throw std::runtime_error("MKL requires local ordinals to be integer.\n"); - } -#else - (void)handle; - (void)m; - (void)n; - (void)k; - (void)row_mapA; - (void)row_mapB; - (void)row_mapC; - (void)entriesA; - (void)entriesB; - (void)entriesC; - (void)valuesA; - (void)valuesB; - (void)valuesC; - (void)transposeA; - (void)transposeB; - (void)verbose; - throw std::runtime_error("MKL IS NOT DEFINED\n"); -#endif // KOKKOSKERNELS_ENABLE_TPL_MKL -} // end mkl2phase_apply -} // namespace Impl -} // namespace KokkosSparse - -#endif diff --git a/sparse/impl/KokkosSparse_spgemm_mkl_impl.hpp b/sparse/impl/KokkosSparse_spgemm_mkl_impl.hpp deleted file mode 100644 index 9a6ab70f9e..0000000000 --- a/sparse/impl/KokkosSparse_spgemm_mkl_impl.hpp +++ /dev/null @@ -1,314 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef _KOKKOSSPGEMMMKL_HPP -#define _KOKKOSSPGEMMMKL_HPP - -#include "KokkosKernels_config.h" -#include "KokkosSparse_Utils_mkl.hpp" - -#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL -#include "mkl_spblas.h" - -namespace KokkosSparse { -namespace Impl { - -// multiplies two sparse MKL matrices and returns sparse MKL matrix -template -inline static MKLSparseMatrix mkl_spmm( - sparse_operation_t operation, const MKLSparseMatrix &A, - const MKLSparseMatrix &B) { - sparse_matrix_t C; - KOKKOSKERNELS_MKL_SAFE_CALL(mkl_sparse_spmm(operation, A, B, &C)); - return MKLSparseMatrix(C); -} - -template -class MKL_SPGEMM { - public: - typedef typename KernelHandle::nnz_lno_t nnz_lno_t; - typedef typename KernelHandle::size_type size_type; - typedef typename KernelHandle::nnz_scalar_t value_type; - typedef typename KernelHandle::HandleExecSpace MyExecSpace; - typedef typename Kokkos::View int_tmp_view_t; - - public: - static void mkl_symbolic(KernelHandle *handle, nnz_lno_t m, nnz_lno_t n, - nnz_lno_t k, a_rowmap_view_type row_mapA, - a_index_view_type entriesA, bool transposeA, - b_rowmap_view_type row_mapB, - b_index_view_type entriesB, bool transposeB, - c_rowmap_view_type row_mapC, bool verbose = false) { - if (m < 1 || n < 1 || k < 1 || entriesA.extent(0) < 1 || - entriesB.extent(0) < 1) { - // set correct values in non-empty 0-nnz corner case - handle->set_c_nnz(0); - Kokkos::deep_copy(row_mapC, 0); - return; - } - - Kokkos::Timer timer; - using scalar_t = typename KernelHandle::nnz_scalar_t; - - const auto export_rowmap = [&](MKL_INT num_rows, MKL_INT *rows_start, - MKL_INT * /*columns*/, - scalar_t * /*values*/) { - if (handle->mkl_keep_output) { - Kokkos::Timer copy_time; - const nnz_lno_t nnz = rows_start[num_rows]; - handle->set_c_nnz(nnz); - copy(make_host_view(rows_start, num_rows + 1), row_mapC); - if (verbose) - std::cout << "\tMKL rowmap export time:" << copy_time.seconds() - << std::endl; - } - }; - - // use dummy values for A and B inputs - a_values_view_type tmp_valsA( - Kokkos::ViewAllocateWithoutInitializing("tmp_valuesA"), - entriesA.extent(0)); - b_values_view_type tmp_valsB( - Kokkos::ViewAllocateWithoutInitializing("tmp_valuesB"), - entriesB.extent(0)); - - spmm(handle, m, n, k, row_mapA, entriesA, tmp_valsA, transposeA, row_mapB, - entriesB, tmp_valsB, transposeB, verbose, export_rowmap); - - if (verbose) - std::cout << "MKL symbolic time:" << timer.seconds() << std::endl; - } - - static void mkl_numeric( - KernelHandle *handle, nnz_lno_t m, nnz_lno_t n, nnz_lno_t k, - a_rowmap_view_type row_mapA, a_index_view_type entriesA, - a_values_view_type valuesA, bool transposeA, b_rowmap_view_type row_mapB, - b_index_view_type entriesB, b_values_view_type valuesB, bool transposeB, - c_rowmap_view_type /* row_mapC */, c_index_view_type entriesC, - c_values_view_type valuesC, bool verbose = false) { - Kokkos::Timer timer; - - const auto export_values = - [&](MKL_INT num_rows, MKL_INT *rows_start, MKL_INT *columns, - typename KernelHandle::nnz_scalar_t *values) { - if (handle->mkl_keep_output) { - Kokkos::Timer copy_time; - const nnz_lno_t nnz = rows_start[num_rows]; - copy(make_host_view(columns, nnz), entriesC); - copy(make_host_view(values, nnz), valuesC); - if (verbose) - std::cout << "\tMKL values export time:" << copy_time.seconds() - << std::endl; - } - }; - - spmm(handle, m, n, k, row_mapA, entriesA, valuesA, transposeA, row_mapB, - entriesB, valuesB, transposeB, verbose, export_values); - - if (verbose) - std::cout << "MKL numeric time:" << timer.seconds() << std::endl; - } - - private: - template - static void spmm(KernelHandle * /* handle */, nnz_lno_t m, nnz_lno_t n, - nnz_lno_t k, a_rowmap_view_type row_mapA, - a_index_view_type entriesA, a_values_view_type valuesA, - - bool transposeA, b_rowmap_view_type row_mapB, - b_index_view_type entriesB, b_values_view_type valuesB, - bool transposeB, bool verbose, const CB &callback) { - if (!std::is_same::value) { - throw std::runtime_error("MKL requires local ordinals to be integer.\n"); - } - - if (m < 1 || n < 1 || k < 1 || entriesA.extent(0) < 1 || - entriesB.extent(0) < 1) { - return; - } - - const auto create_mirror = [](auto view) { - return Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), view); - }; - - auto h_rowsA = create_mirror(row_mapA); - auto h_rowsB = create_mirror(row_mapB); - const int *a_xadj = reinterpret_cast(h_rowsA.data()); - const int *b_xadj = reinterpret_cast(h_rowsB.data()); - int_tmp_view_t a_xadj_v, b_xadj_v; - - if (!std::is_same::value) { - if (entriesA.extent(0) > INT_MAX || entriesB.extent(0) > INT_MAX) { - throw std::runtime_error( - "MKL requires integer values for size type for SPGEMM. Copying " - "to " - "integer will cause overflow.\n"); - } - static_assert( - std::is_same::value, - "deep_copy requires non-const destination type"); - - Kokkos::Timer copy_time; - a_xadj_v = int_tmp_view_t("tmpa", m + 1); - b_xadj_v = int_tmp_view_t("tmpb", n + 1); - Kokkos::deep_copy(a_xadj_v, h_rowsA); - Kokkos::deep_copy(b_xadj_v, h_rowsB); - a_xadj = (int *)a_xadj_v.data(); - b_xadj = (int *)b_xadj_v.data(); - if (verbose) - std::cout << "\tMKL int-type temp rowmap copy time:" - << copy_time.seconds() << std::endl; - } - - auto h_valsA = create_mirror(valuesA); - auto h_valsB = create_mirror(valuesB); - auto h_entriesA = create_mirror(entriesA); - auto h_entriesB = create_mirror(entriesB); - const int *a_adj = reinterpret_cast(h_entriesA.data()); - const int *b_adj = reinterpret_cast(h_entriesB.data()); - const value_type *a_ew = h_valsA.data(); - const value_type *b_ew = h_valsB.data(); - - // Hack: we discard const with pointer casts here to work around MKL - // requiring mutable input and our symbolic interface not providing it - using Matrix = MKLSparseMatrix; - Matrix A(m, n, (int *)a_xadj, (int *)a_adj, (value_type *)a_ew); - Matrix B(n, k, (int *)b_xadj, (int *)b_adj, (value_type *)b_ew); - - sparse_operation_t operation; - if (transposeA && transposeB) { - operation = SPARSE_OPERATION_TRANSPOSE; - } else if (!(transposeA || transposeB)) { - operation = SPARSE_OPERATION_NON_TRANSPOSE; - } else { - throw std::runtime_error( - "MKL either transpose both matrices, or none for SPGEMM\n"); - } - - Kokkos::Timer timer1; - Matrix C = mkl_spmm(operation, A, B); - if (verbose) { - std::cout << "\tMKL spmm ("; - if (std::is_same::value) - std::cout << "FLOAT"; - else if (std::is_same::value) - std::cout << "DOUBLE"; - else - std::cout << "?"; - std::cout << ") time:" << timer1.seconds() << std::endl; - } - - MKL_INT num_rows, num_cols, *rows_start, *columns; - value_type *values; - C.export_data(num_rows, num_cols, rows_start, columns, values); - callback(m, rows_start, columns, values); - - A.destroy(); - B.destroy(); - C.destroy(); - } - - template - inline static void copy(from_view_type from, dst_view_type to) { - auto h_from = - Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), from); - auto h_to = Kokkos::create_mirror_view(Kokkos::HostSpace(), to); - Kokkos::deep_copy(h_to, h_from); // view copy (for different element types) - Kokkos::deep_copy(to, h_to); - } - - template > - inline static view_type make_host_view(const T *data, size_t num_elems) { - return view_type(data, num_elems); - } -}; - -template -void mkl_symbolic(KernelHandle *handle, nnz_lno_t m, nnz_lno_t n, nnz_lno_t k, - a_rowmap_type row_mapA, a_index_type entriesA, - bool transposeA, b_rowmap_type row_mapB, - b_index_type entriesB, bool transposeB, - c_rowmap_type row_mapC, bool verbose = false) { - using values_type = typename KernelHandle::scalar_temp_work_view_t; - using c_index_type = b_index_type; - using mkl = MKL_SPGEMM; - mkl::mkl_symbolic(handle, m, n, k, row_mapA, entriesA, transposeA, row_mapB, - entriesB, transposeB, row_mapC, verbose); -} - -template -void mkl_numeric(KernelHandle *handle, nnz_lno_t m, nnz_lno_t n, nnz_lno_t k, - a_rowmap_type row_mapA, a_index_type entriesA, - a_values_type valuesA, bool transposeA, b_rowmap_type row_mapB, - b_index_type entriesB, b_values_type valuesB, bool transposeB, - c_rowmap_type row_mapC, c_index_type entriesC, - c_values_type valuesC, bool verbose = false) { - using mkl = - MKL_SPGEMM; - mkl::mkl_numeric(handle, m, n, k, row_mapA, entriesA, valuesA, transposeA, - row_mapB, entriesB, valuesB, transposeB, row_mapC, entriesC, - valuesC, verbose); -} - -} // namespace Impl -} // namespace KokkosSparse - -#endif // KOKKOSKERNELS_ENABLE_TPL_MKL -#endif // _KOKKOSSPGEMMMKL_HPP diff --git a/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp b/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp index 0a09040559..359fbf5fc0 100644 --- a/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp +++ b/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp @@ -51,15 +51,10 @@ #include "KokkosKernels_Handle.hpp" // Include the actual functors #if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY -//#include "KokkosSparse_spgemm_symbolic.hpp" -#include "KokkosSparse_spgemm_cuSPARSE_impl.hpp" -#include "KokkosSparse_spgemm_rocSPARSE_impl.hpp" -#include "KokkosSparse_spgemm_CUSP_impl.hpp" +#include "KokkosSparse_spgemm_symbolic.hpp" #include "KokkosSparse_spgemm_impl.hpp" #include "KokkosSparse_spgemm_impl_seq.hpp" -#include "KokkosSparse_spgemm_mkl_impl.hpp" -#include "KokkosSparse_spgemm_mkl2phase_impl.hpp" -#include "KokkosSparse_spgemm_viennaCL_impl.hpp" +#include "KokkosSparse_SortCrs.hpp" #endif namespace KokkosSparse { @@ -112,45 +107,10 @@ struct spgemm_numeric_eti_spec_avail { Kokkos::Device, \ Kokkos::MemoryTraits > > { \ enum : bool { value = true }; \ - }; \ - \ - template <> \ - struct spgemm_numeric_eti_spec_avail< \ - KokkosKernels::Experimental::KokkosKernelsHandle< \ - const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits > > { \ - enum : bool { value = true }; \ }; // Include the actual specialization declarations -#include +#include #include namespace KokkosSparse { @@ -174,17 +134,14 @@ template ::value> struct SPGEMM_NUMERIC { - static void spgemm_numeric(KernelHandle *handle, - typename KernelHandle::const_nnz_lno_t m, - typename KernelHandle::const_nnz_lno_t n, - typename KernelHandle::const_nnz_lno_t k, - a_size_view_t_ row_mapA, a_lno_view_t entriesA, - a_scalar_view_t valuesA, + static void spgemm_numeric( + KernelHandle *handle, typename KernelHandle::nnz_lno_t m, + typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, + a_size_view_t_ row_mapA, a_lno_view_t entriesA, a_scalar_view_t valuesA, - bool transposeA, b_size_view_t_ row_mapB, - b_lno_view_t entriesB, b_scalar_view_t valuesB, - bool transposeB, c_size_view_t_ row_mapC, - c_lno_view_t &entriesC, c_scalar_view_t &valuesC); + bool transposeA, b_size_view_t_ row_mapB, b_lno_view_t entriesB, + b_scalar_view_t valuesB, bool transposeB, c_size_view_t_ row_mapC, + c_lno_view_t entriesC, c_scalar_view_t valuesC); }; #if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY @@ -203,71 +160,30 @@ struct SPGEMM_NUMERIC< KernelHandle *handle, typename KernelHandle::nnz_lno_t m, typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, a_size_view_t_ row_mapA, a_lno_view_t entriesA, a_scalar_view_t valuesA, - bool transposeA, b_size_view_t_ row_mapB, b_lno_view_t entriesB, b_scalar_view_t valuesB, bool transposeB, c_size_view_t_ row_mapC, - c_lno_view_t &entriesC, c_scalar_view_t &valuesC) { + c_lno_view_t entriesC, c_scalar_view_t valuesC) { typedef typename KernelHandle::SPGEMMHandleType spgemmHandleType; spgemmHandleType *sh = handle->get_spgemm_handle(); if (!sh->is_symbolic_called()) { throw std::runtime_error( "Call spgemm symbolic before calling SpGEMM numeric"); } - + if (m == 0 || n == 0 || k == 0 || !entriesA.extent(0) || + !entriesB.extent(0)) { + sh->set_call_numeric(); + sh->set_computed_entries(); + return; + } switch (sh->get_algorithm_type()) { - case SPGEMM_CUSPARSE: -#if defined(KOKKOSKERNELS_ENABLE_TPL_CUSPARSE) - cuSPARSE_apply( - sh, m, n, k, row_mapA, entriesA, valuesA, transposeA, row_mapB, - entriesB, valuesB, transposeB, row_mapC, entriesC, valuesC); -#else - throw std::runtime_error( - "Requiring SPGEMM_CUSPARSE but TPL_CUSPARSE was not enabled!"); -#endif - break; - case SPGEMM_ROCSPARSE: -#if defined(KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE) - rocsparse_spgemm_numeric( - sh, m, n, k, row_mapA, entriesA, valuesA, transposeA, row_mapB, - entriesB, valuesB, transposeB, row_mapC, entriesC, valuesC); -#else - throw std::runtime_error( - "Requiring SPGEMM_ROCSPARSE but TPL_ROCSPARSE was not enabled!"); -#endif - break; - case SPGEMM_CUSP: - CUSP_apply(sh, m, n, k, row_mapA, entriesA, valuesA, - transposeA, row_mapB, entriesB, valuesB, - transposeB, row_mapC, entriesC, valuesC); - break; - case SPGEMM_MKL: -#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL - mkl_numeric(sh, m, n, k, row_mapA, entriesA, valuesA, transposeA, - row_mapB, entriesB, valuesB, transposeB, row_mapC, entriesC, - valuesC, handle->get_verbose()); - break; -#else - throw std::runtime_error("MKL was not enabled in this build!"); -#endif - case SPGEMM_MKL2PHASE: - mkl2phase_apply(sh, m, n, k, row_mapA, entriesA, valuesA, transposeA, - row_mapB, entriesB, valuesB, transposeB, row_mapC, - entriesC, valuesC, handle->get_verbose()); - break; + case SPGEMM_SERIAL: + case SPGEMM_DEBUG: + spgemm_debug_numeric(handle, m, n, k, row_mapA, entriesA, valuesA, - case SPGEMM_VIENNA: - viennaCL_apply( - sh, m, n, k, row_mapA, entriesA, valuesA, transposeA, row_mapB, - entriesB, valuesB, transposeB, row_mapC, entriesC, valuesC, - handle->get_verbose()); + transposeA, row_mapB, entriesB, valuesB, + transposeB, row_mapC, entriesC, valuesC); break; - - default: - - { + default: { KokkosSPGEMM @@ -275,14 +191,13 @@ struct SPGEMM_NUMERIC< row_mapB, entriesB, valuesB, transposeB); kspgemm.KokkosSPGEMM_numeric(row_mapC, entriesC, valuesC); } break; - case SPGEMM_SERIAL: - case SPGEMM_DEBUG: - spgemm_debug_numeric(handle, m, n, k, row_mapA, entriesA, valuesA, - - transposeA, row_mapB, entriesB, valuesB, - transposeB, row_mapC, entriesC, valuesC); - break; } + // Current implementation does not produce sorted matrix + // TODO: remove this call when impl sorts + KokkosSparse::sort_crs_matrix( + row_mapC, entriesC, valuesC); + sh->set_call_numeric(); + sh->set_computed_entries(); } }; @@ -325,39 +240,6 @@ struct SPGEMM_NUMERIC< Kokkos::View, \ Kokkos::MemoryTraits >, \ - false, true>; \ - \ - extern template struct SPGEMM_NUMERIC< \ - typename KokkosKernels::Experimental::KokkosKernelsHandle< \ - const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ false, true>; #define KOKKOSSPARSE_SPGEMM_NUMERIC_ETI_SPEC_INST( \ @@ -394,42 +276,9 @@ struct SPGEMM_NUMERIC< Kokkos::View, \ Kokkos::MemoryTraits >, \ - false, true>; \ - \ - template struct SPGEMM_NUMERIC< \ - KokkosKernels::Experimental::KokkosKernelsHandle< \ - const OFFSET_TYPE, const ORDINAL_TYPE, const SCALAR_TYPE, \ - EXEC_SPACE_TYPE, MEM_SPACE_TYPE, MEM_SPACE_TYPE>, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ - Kokkos::View, \ - Kokkos::MemoryTraits >, \ false, true>; -#include +#include #include #endif // KOKKOS_BLAS1_MV_IMPL_DOT_HPP_ diff --git a/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp b/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp deleted file mode 100644 index f2b4f0e38f..0000000000 --- a/sparse/impl/KokkosSparse_spgemm_rocSPARSE_impl.hpp +++ /dev/null @@ -1,435 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef _KOKKOSSPGEMMROCSPARSE_HPP -#define _KOKKOSSPGEMMROCSPARSE_HPP - -#include - -#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE - -#include "KokkosKernels_Controls.hpp" -#include "rocsparse.h" - -namespace KokkosSparse { - -namespace Impl { - -//============================================================================= -// Overload rocsparse_Xcsrgemm_buffer_size() over scalar types -inline rocsparse_status rocsparse_Xcsrgemm_buffer_size( - rocsparse_handle handle, rocsparse_operation trans_A, - rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, - rocsparse_int k, const float *alpha, const rocsparse_mat_descr descr_A, - rocsparse_int nnz_A, const rocsparse_int *csr_row_ptr_A, - const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, - rocsparse_int nnz_B, const rocsparse_int *csr_row_ptr_B, - const rocsparse_int *csr_col_ind_B, const float *beta, - const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, - const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, - rocsparse_mat_info info_C, size_t *buffer_size) { - return rocsparse_scsrgemm_buffer_size( - handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, csr_row_ptr_A, - csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, csr_col_ind_B, beta, - descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, info_C, buffer_size); -} - -inline rocsparse_status rocsparse_Xcsrgemm_buffer_size( - rocsparse_handle handle, rocsparse_operation trans_A, - rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, - rocsparse_int k, const double *alpha, const rocsparse_mat_descr descr_A, - rocsparse_int nnz_A, const rocsparse_int *csr_row_ptr_A, - const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, - rocsparse_int nnz_B, const rocsparse_int *csr_row_ptr_B, - const rocsparse_int *csr_col_ind_B, const double *beta, - const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, - const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, - rocsparse_mat_info info_C, size_t *buffer_size) { - return rocsparse_dcsrgemm_buffer_size( - handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, csr_row_ptr_A, - csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, csr_col_ind_B, beta, - descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, info_C, buffer_size); -} - -inline rocsparse_status rocsparse_Xcsrgemm_buffer_size( - rocsparse_handle handle, rocsparse_operation trans_A, - rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, - rocsparse_int k, const Kokkos::complex *alpha, - const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, - const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, - const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, - const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, - const Kokkos::complex *beta, const rocsparse_mat_descr descr_D, - rocsparse_int nnz_D, const rocsparse_int *csr_row_ptr_D, - const rocsparse_int *csr_col_ind_D, rocsparse_mat_info info_C, - size_t *buffer_size) { - return rocsparse_ccsrgemm_buffer_size( - handle, trans_A, trans_B, m, n, k, - reinterpret_cast(alpha), descr_A, nnz_A, - csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, - csr_col_ind_B, reinterpret_cast(beta), - descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, info_C, buffer_size); -} - -inline rocsparse_status rocsparse_Xcsrgemm_buffer_size( - rocsparse_handle handle, rocsparse_operation trans_A, - rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, - rocsparse_int k, const Kokkos::complex *alpha, - const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, - const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, - const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, - const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, - const Kokkos::complex *beta, const rocsparse_mat_descr descr_D, - rocsparse_int nnz_D, const rocsparse_int *csr_row_ptr_D, - const rocsparse_int *csr_col_ind_D, rocsparse_mat_info info_C, - size_t *buffer_size) { - return rocsparse_zcsrgemm_buffer_size( - handle, trans_A, trans_B, m, n, k, - reinterpret_cast(alpha), descr_A, nnz_A, - csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, - csr_col_ind_B, reinterpret_cast(beta), - descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, info_C, buffer_size); -} - -//============================================================================= -// Overload rocsparse_Xcsrgemm_numeric() over scalar types -inline rocsparse_status rocsparse_Xcsrgemm_numeric( - rocsparse_handle handle, rocsparse_operation trans_A, - rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, - rocsparse_int k, const float *alpha, const rocsparse_mat_descr descr_A, - rocsparse_int nnz_A, const float *csr_val_A, - const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, - const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, - const float *csr_val_B, const rocsparse_int *csr_row_ptr_B, - const rocsparse_int *csr_col_ind_B, const float *beta, - const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, - const float *csr_val_D, const rocsparse_int *csr_row_ptr_D, - const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, - rocsparse_int nnz_C, float *csr_val_C, const rocsparse_int *csr_row_ptr_C, - const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, - void *buffer) { - return rocsparse_scsrgemm_numeric( - handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, csr_val_A, - csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_val_B, csr_row_ptr_B, - csr_col_ind_B, beta, descr_D, nnz_D, csr_val_D, csr_row_ptr_D, - csr_col_ind_D, descr_C, nnz_C, csr_val_C, csr_row_ptr_C, csr_col_ind_C, - info_C, buffer); -} - -inline rocsparse_status rocsparse_Xcsrgemm_numeric( - rocsparse_handle handle, rocsparse_operation trans_A, - rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, - rocsparse_int k, const double *alpha, const rocsparse_mat_descr descr_A, - rocsparse_int nnz_A, const double *csr_val_A, - const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, - const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, - const double *csr_val_B, const rocsparse_int *csr_row_ptr_B, - const rocsparse_int *csr_col_ind_B, const double *beta, - const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, - const double *csr_val_D, const rocsparse_int *csr_row_ptr_D, - const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, - rocsparse_int nnz_C, double *csr_val_C, const rocsparse_int *csr_row_ptr_C, - const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, - void *buffer) { - return rocsparse_dcsrgemm_numeric( - handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, csr_val_A, - csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_val_B, csr_row_ptr_B, - csr_col_ind_B, beta, descr_D, nnz_D, csr_val_D, csr_row_ptr_D, - csr_col_ind_D, descr_C, nnz_C, csr_val_C, csr_row_ptr_C, csr_col_ind_C, - info_C, buffer); -} - -inline rocsparse_status rocsparse_Xcsrgemm_numeric( - rocsparse_handle handle, rocsparse_operation trans_A, - rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, - rocsparse_int k, const Kokkos::complex *alpha, - const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, - const Kokkos::complex *csr_val_A, const rocsparse_int *csr_row_ptr_A, - const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, - rocsparse_int nnz_B, const Kokkos::complex *csr_val_B, - const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, - const Kokkos::complex *beta, const rocsparse_mat_descr descr_D, - rocsparse_int nnz_D, const Kokkos::complex *csr_val_D, - const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, - const rocsparse_mat_descr descr_C, rocsparse_int nnz_C, - Kokkos::complex *csr_val_C, const rocsparse_int *csr_row_ptr_C, - const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, - void *buffer) { - return rocsparse_ccsrgemm_numeric( - handle, trans_A, trans_B, m, n, k, - reinterpret_cast(alpha), descr_A, nnz_A, - reinterpret_cast(csr_val_A), - csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, - reinterpret_cast(csr_val_B), - csr_row_ptr_B, csr_col_ind_B, - reinterpret_cast(beta), descr_D, nnz_D, - reinterpret_cast(csr_val_D), - csr_row_ptr_D, csr_col_ind_D, descr_C, nnz_C, - reinterpret_cast(csr_val_C), csr_row_ptr_C, - csr_col_ind_C, info_C, buffer); -} - -inline rocsparse_status rocsparse_Xcsrgemm_numeric( - rocsparse_handle handle, rocsparse_operation trans_A, - rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, - rocsparse_int k, const Kokkos::complex *alpha, - const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, - const Kokkos::complex *csr_val_A, - const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, - const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, - const Kokkos::complex *csr_val_B, - const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, - const Kokkos::complex *beta, const rocsparse_mat_descr descr_D, - rocsparse_int nnz_D, const Kokkos::complex *csr_val_D, - const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, - const rocsparse_mat_descr descr_C, rocsparse_int nnz_C, - Kokkos::complex *csr_val_C, const rocsparse_int *csr_row_ptr_C, - const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, - void *buffer) { - return rocsparse_zcsrgemm_numeric( - handle, trans_A, trans_B, m, n, k, - reinterpret_cast(alpha), descr_A, nnz_A, - reinterpret_cast(csr_val_A), - csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, - reinterpret_cast(csr_val_B), - csr_row_ptr_B, csr_col_ind_B, - reinterpret_cast(beta), descr_D, nnz_D, - reinterpret_cast(csr_val_D), - csr_row_ptr_D, csr_col_ind_D, descr_C, nnz_C, - reinterpret_cast(csr_val_C), csr_row_ptr_C, - csr_col_ind_C, info_C, buffer); -} - -//============================================================================= -template -inline typename std::enable_if< - (not std::is_same::value) or - (not std::is_same::value), - void>::type -rocsparse_spgemm_symbolic_internal(KernelHandle *handle, index_type m, - index_type n, index_type k, size_type nnz_A, - const size_type *rowptrA, - const index_type *colidxA, bool transposeA, - size_type nnz_B, const size_type *rowptrB, - const index_type *colidxB, bool transposeB, - size_type *rowptrC) { - // normal code should use the specializations and not go here - throw std::runtime_error( - "The installed rocsparse does not support the index type and size type"); -} - -template -inline - typename std::enable_if::value and - std::is_same::value, - void>::type - rocsparse_spgemm_symbolic_internal( - KernelHandle *handle, index_type m, index_type n, index_type k, - size_type nnz_A, const size_type *rowptrA, const index_type *colidxA, - bool transposeA, size_type nnz_B, const size_type *rowptrB, - const index_type *colidxB, bool transposeB, size_type *rowptrC) { - handle->create_rocsparse_spgemm_handle(transposeA, transposeB); - typename KernelHandle::rocSparseSpgemmHandleType *h = - handle->get_rocsparse_spgemm_handle(); - - // alpha, beta are on host, but since we use singleton on the rocsparse - // handle, we save/restore the pointer mode to not interference with - // others' use - const auto alpha = Kokkos::ArithTraits::one(); - const auto beta = Kokkos::ArithTraits::zero(); - rocsparse_pointer_mode oldPtrMode; - - KOKKOS_ROCSPARSE_SAFE_CALL_IMPL( - rocsparse_get_pointer_mode(h->rocsparseHandle, &oldPtrMode)); - KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_set_pointer_mode( - h->rocsparseHandle, rocsparse_pointer_mode_host)); - - // C = alpha * OpA(A) * OpB(B) + beta * D - KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_Xcsrgemm_buffer_size( - h->rocsparseHandle, h->opA, h->opB, m, n, k, &alpha, h->descr_A, nnz_A, - rowptrA, colidxA, h->descr_B, nnz_B, rowptrB, colidxB, &beta, h->descr_D, - 0, NULL, NULL, h->info_C, &h->bufferSize)); - - KOKKOS_IMPL_HIP_SAFE_CALL(hipMalloc(&h->buffer, h->bufferSize)); - - rocsparse_int C_nnz = 0; - KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_csrgemm_nnz( - h->rocsparseHandle, h->opA, h->opB, m, n, k, h->descr_A, nnz_A, rowptrA, - colidxA, h->descr_B, nnz_B, rowptrB, colidxB, h->descr_D, 0, NULL, NULL, - h->descr_C, rowptrC, &C_nnz, h->info_C, h->buffer)); - - handle->set_c_nnz(C_nnz); - h->C_populated = false; // sparsity pattern of C is not set yet, so this is a - // fake symbolic - KOKKOS_ROCSPARSE_SAFE_CALL_IMPL( - rocsparse_set_pointer_mode(h->rocsparseHandle, oldPtrMode)); -} - -template < - typename KernelHandle, typename ain_row_index_view_type, - typename ain_nonzero_index_view_type, typename bin_row_index_view_type, - typename bin_nonzero_index_view_type, typename cin_row_index_view_type> -void rocsparse_spgemm_symbolic( - KernelHandle *handle, typename KernelHandle::nnz_lno_t m, - typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, - ain_row_index_view_type rowptrA, ain_nonzero_index_view_type colidxA, - bool transposeA, bin_row_index_view_type rowptrB, - bin_nonzero_index_view_type colidxB, bool transposeB, - cin_row_index_view_type rowptrC) { - using index_type = typename KernelHandle::nnz_lno_t; - using size_type = typename KernelHandle::size_type; - using scalar_type = typename KernelHandle::nnz_scalar_t; - - // In case the KernelHandle uses const types! - using non_const_index_type = typename std::remove_cv::type; - using non_const_size_type = typename std::remove_cv::type; - using non_const_scalar_type = typename std::remove_cv::type; - - handle->set_sort_option(1); // tells users the output matrix is sorted - rocsparse_spgemm_symbolic_internal( - handle, m, n, k, colidxA.extent(0), rowptrA.data(), colidxA.data(), - transposeA, colidxB.extent(0), rowptrB.data(), colidxB.data(), transposeB, - rowptrC.data()); -} - -//============================================================================= -template -inline typename std::enable_if< - (not std::is_same::value) or - (not std::is_same::value), - void>::type -rocsparse_spgemm_numeric_internal( - KernelHandle *handle, index_type m, index_type n, index_type k, - size_type nnz_A, const size_type *rowptrA, const index_type *colidxA, - const scalar_type *valuesA, size_type nnz_B, const size_type *rowptrB, - const index_type *colidxB, const scalar_type *valuesB, size_type nnz_C, - const size_type *rowptrC, index_type *colidxC, scalar_type *valuesC) { - // normal code should use the specializations and not go here - throw std::runtime_error( - "The installed rocsparse does not support the index type and size type"); -} - -template -inline - typename std::enable_if::value and - std::is_same::value, - void>::type - rocsparse_spgemm_numeric_internal( - KernelHandle *handle, index_type m, index_type n, index_type k, - size_type nnz_A, const size_type *rowptrA, const index_type *colidxA, - const scalar_type *valuesA, size_type nnz_B, const size_type *rowptrB, - const index_type *colidxB, const scalar_type *valuesB, size_type nnz_C, - const size_type *rowptrC, index_type *colidxC, scalar_type *valuesC) { - typename KernelHandle::rocSparseSpgemmHandleType *h = - handle->get_rocsparse_spgemm_handle(); - - const auto alpha = Kokkos::ArithTraits::one(); - const auto beta = Kokkos::ArithTraits::zero(); - rocsparse_pointer_mode oldPtrMode; - - KOKKOS_ROCSPARSE_SAFE_CALL_IMPL( - rocsparse_get_pointer_mode(h->rocsparseHandle, &oldPtrMode)); - KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_set_pointer_mode( - h->rocsparseHandle, rocsparse_pointer_mode_host)); - - if (!h->C_populated) { - KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_csrgemm_symbolic( - h->rocsparseHandle, h->opA, h->opB, m, n, k, h->descr_A, nnz_A, rowptrA, - colidxA, h->descr_B, nnz_B, rowptrB, colidxB, h->descr_D, 0, NULL, NULL, - h->descr_C, nnz_C, rowptrC, colidxC, h->info_C, h->buffer)); - h->C_populated = true; - } - - KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_Xcsrgemm_numeric( - h->rocsparseHandle, h->opA, h->opB, m, n, k, &alpha, h->descr_A, nnz_A, - valuesA, rowptrA, colidxA, h->descr_B, nnz_B, valuesB, rowptrB, colidxB, - &beta, h->descr_D, 0, NULL, NULL, NULL, h->descr_C, nnz_C, valuesC, - rowptrC, colidxC, h->info_C, h->buffer)); - KOKKOS_ROCSPARSE_SAFE_CALL_IMPL( - rocsparse_set_pointer_mode(h->rocsparseHandle, oldPtrMode)); -} - -template < - typename KernelHandle, typename ain_row_index_view_type, - typename ain_nonzero_index_view_type, typename ain_nonzero_value_view_type, - typename bin_row_index_view_type, typename bin_nonzero_index_view_type, - typename bin_nonzero_value_view_type, typename cin_row_index_view_type, - typename cin_nonzero_index_view_type, typename cin_nonzero_value_view_type> -void rocsparse_spgemm_numeric( - KernelHandle *handle, typename KernelHandle::nnz_lno_t m, - typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, - ain_row_index_view_type rowptrA, ain_nonzero_index_view_type colidxA, - ain_nonzero_value_view_type valuesA, bool /* transposeA */, - bin_row_index_view_type rowptrB, bin_nonzero_index_view_type colidxB, - bin_nonzero_value_view_type valuesB, bool /* transposeB */, - cin_row_index_view_type rowptrC, cin_nonzero_index_view_type colidxC, - cin_nonzero_value_view_type valuesC) { - using index_type = typename KernelHandle::nnz_lno_t; - using size_type = typename KernelHandle::size_type; - using scalar_type = typename KernelHandle::nnz_scalar_t; - - // In case the KernelHandle uses const types! - using non_const_index_type = typename std::remove_cv::type; - using non_const_size_type = typename std::remove_cv::type; - using non_const_scalar_type = typename std::remove_cv::type; - - rocsparse_spgemm_numeric_internal( - handle, m, n, k, colidxA.extent(0), rowptrA.data(), colidxA.data(), - valuesA.data(), colidxB.extent(0), rowptrB.data(), colidxB.data(), - valuesB.data(), colidxC.extent(0), rowptrC.data(), colidxC.data(), - valuesC.data()); -} - -} // namespace Impl -} // namespace KokkosSparse - -#endif -#endif diff --git a/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp b/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp index a85ac45a7a..76b6bd2365 100644 --- a/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp +++ b/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp @@ -51,14 +51,8 @@ #include "KokkosKernels_Handle.hpp" // Include the actual functors #if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY -#include "KokkosSparse_spgemm_cuSPARSE_impl.hpp" -#include "KokkosSparse_spgemm_rocSPARSE_impl.hpp" -#include "KokkosSparse_spgemm_CUSP_impl.hpp" #include "KokkosSparse_spgemm_impl.hpp" #include "KokkosSparse_spgemm_impl_seq.hpp" -#include "KokkosSparse_spgemm_mkl_impl.hpp" -#include "KokkosSparse_spgemm_mkl2phase_impl.hpp" -#include "KokkosSparse_spgemm_viennaCL_impl.hpp" #endif namespace KokkosSparse { @@ -100,7 +94,7 @@ struct spgemm_symbolic_eti_spec_avail { }; // Include the actual specialization declarations -#include +#include #include namespace KokkosSparse { @@ -120,13 +114,13 @@ template ::value> struct SPGEMM_SYMBOLIC { static void spgemm_symbolic(KernelHandle *handle, - typename KernelHandle::const_nnz_lno_t m, - typename KernelHandle::const_nnz_lno_t n, - typename KernelHandle::const_nnz_lno_t k, + typename KernelHandle::nnz_lno_t m, + typename KernelHandle::nnz_lno_t n, + typename KernelHandle::nnz_lno_t k, a_size_view_t_ row_mapA, a_lno_view_t entriesA, bool transposeA, b_size_view_t_ row_mapB, b_lno_view_t entriesB, bool transposeB, - c_size_view_t_ row_mapC); + c_size_view_t_ row_mapC, bool computeRowptrs); }; #if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY @@ -137,49 +131,32 @@ template { - static void spgemm_symbolic(KernelHandle *handle, - typename KernelHandle::nnz_lno_t m, - typename KernelHandle::nnz_lno_t n, - typename KernelHandle::nnz_lno_t k, - a_size_view_t_ row_mapA, a_lno_view_t entriesA, - bool transposeA, b_size_view_t_ row_mapB, - b_lno_view_t entriesB, bool transposeB, - c_size_view_t_ row_mapC) { + static void spgemm_symbolic( + KernelHandle *handle, typename KernelHandle::nnz_lno_t m, + typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, + a_size_view_t_ row_mapA, a_lno_view_t entriesA, bool transposeA, + b_size_view_t_ row_mapB, b_lno_view_t entriesB, bool transposeB, + c_size_view_t_ row_mapC, bool /* computeRowptrs */) { typedef typename KernelHandle::SPGEMMHandleType spgemmHandleType; spgemmHandleType *sh = handle->get_spgemm_handle(); + if (sh->is_symbolic_called() && sh->are_rowptrs_computed()) return; + if (m == 0 || n == 0 || k == 0 || !entriesA.extent(0) || + !entriesB.extent(0)) { + sh->set_computed_rowptrs(); + sh->set_call_symbolic(); + sh->set_c_nnz(0); + Kokkos::deep_copy(typename spgemmHandleType::HandleExecSpace(), row_mapC, + typename c_size_view_t_::non_const_value_type(0)); + return; + } switch (sh->get_algorithm_type()) { - case SPGEMM_CUSPARSE: -#if defined(KOKKOSKERNELS_ENABLE_TPL_CUSPARSE) - cuSPARSE_symbolic( - sh, m, n, k, row_mapA, entriesA, transposeA, row_mapB, entriesB, - transposeB, row_mapC); -#else - throw std::runtime_error( - "Requiring SPGEMM_CUSPARSE but TPL_CUSPARSE was not enabled!"); -#endif - break; - case SPGEMM_ROCSPARSE: -#if defined(KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE) - rocsparse_spgemm_symbolic( - sh, m, n, k, row_mapA, entriesA, transposeA, row_mapB, entriesB, - transposeB, row_mapC); -#else - throw std::runtime_error( - "Requiring SPGEMM_ROCSPARSE but TPL_ROCSPARSE was not enabled!"); -#endif - break; - case SPGEMM_CUSP: - case SPGEMM_VIENNA: break; + case SPGEMM_SERIAL: + case SPGEMM_DEBUG: + spgemm_debug_symbolic(handle, m, n, k, row_mapA, entriesA, - case SPGEMM_MKL2PHASE: - mkl2phase_symbolic(sh, m, n, k, row_mapA, entriesA, transposeA, - row_mapB, entriesB, transposeB, row_mapC, - handle->get_verbose()); + transposeA, row_mapB, entriesB, transposeB, + row_mapC); break; - default: { KokkosSPGEMMget_verbose()); - break; -#else - throw std::runtime_error("MKL was not enabled in this build!"); -#endif } sh->set_call_symbolic(); + // The KokkosKernels implementation of symbolic always populates rowptrs. + sh->set_computed_rowptrs(); } }; @@ -216,10 +180,8 @@ struct SPGEMM_SYMBOLIC >, \ false, true>; -#include +#include #include #endif // KOKKOS_BLAS1_MV_IMPL_DOT_HPP_ diff --git a/sparse/impl/KokkosSparse_spgemm_viennaCL_impl.hpp b/sparse/impl/KokkosSparse_spgemm_viennaCL_impl.hpp deleted file mode 100644 index 7c2ace3338..0000000000 --- a/sparse/impl/KokkosSparse_spgemm_viennaCL_impl.hpp +++ /dev/null @@ -1,234 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef _KOKKOSSPGEMMVIENNACL_HPP -#define _KOKKOSSPGEMMVIENNACL_HPP - -//#define KERNELS_HAVE_VIENNACL - -#ifdef KERNELS_HAVE_VIENNACL1 -#define VIENNACL_WITH_OPENMP -#include "viennacl/compressed_matrix.hpp" -#include "viennacl/linalg/prod.hpp" -#include "viennacl/linalg/host_based/common.hpp" - -#endif - -#include "KokkosKernels_Utils.hpp" -namespace KokkosSparse { - -namespace Impl { - -template < - typename KernelHandle, typename in_row_index_view_type, - typename in_nonzero_index_view_type, typename in_nonzero_value_view_type, - typename bin_row_index_view_type, typename bin_nonzero_index_view_type, - typename bin_nonzero_value_view_type, typename cin_row_index_view_type, - typename cin_nonzero_index_view_type, typename cin_nonzero_value_view_type> -void viennaCL_apply( - KernelHandle *handle, typename KernelHandle::nnz_lno_t m, - typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, - in_row_index_view_type row_mapA, in_nonzero_index_view_type entriesA, - in_nonzero_value_view_type valuesA, - - bool transposeA, bin_row_index_view_type row_mapB, - bin_nonzero_index_view_type entriesB, bin_nonzero_value_view_type valuesB, - bool transposeB, cin_row_index_view_type row_mapC, - cin_nonzero_index_view_type &entriesC, cin_nonzero_value_view_type &valuesC, - bool verbose = false) { -#ifdef KERNELS_HAVE_VIENNACL1 - - typedef typename KernelHandle::nnz_lno_t idx; - typedef in_row_index_view_type idx_array_type; - - typedef typename KernelHandle::nnz_scalar_t value_type; - - typedef typename in_row_index_view_type::device_type device1; - typedef typename in_nonzero_index_view_type::device_type device2; - typedef typename in_nonzero_value_view_type::device_type device3; - - typedef typename KernelHandle::HandleExecSpace MyExecSpace; - - typedef typename viennacl::compressed_matrix::handle_type it; - typedef typename viennacl::compressed_matrix::value_type vt; - - if ((std::is_same::value && - std::is_same::value) || - (std::is_same::value && - std::is_same::value) || - (std::is_same::value && - std::is_same::value)) { - unsigned int *a_xadj = (unsigned int *)row_mapA.data(); - unsigned int *b_xadj = (unsigned int *)row_mapB.data(); - unsigned int *c_xadj = (unsigned int *)row_mapC.data(); - - unsigned int *a_adj = (unsigned int *)entriesA.data(); - unsigned int *b_adj = (unsigned int *)entriesB.data(); - unsigned int *c_adj = (unsigned int *)entriesC.data(); - - int nnzA = entriesA.extent(0); - int nnzB = entriesB.extent(0); - - value_type *a_ew = valuesA.data(); - value_type *b_ew = valuesB.data(); - value_type *c_ew = valuesC.data(); - - /* - std::cout << "create a" << std::endl; - std::cout << "m:" << m << " n:" << n << std::endl; - std::cout << "a_xadj[0]:" << a_xadj[0] << " a_xadj[m]:" << a_xadj[m] << - std::endl; std::cout << "a_adj[a_xadj[m] - 1]:" << a_adj[a_xadj[m] - 1] << - " a_ew[a_xadj[m] - 1]:" << a_ew[a_xadj[m] - 1] << std::endl; - */ - - Kokkos::Timer timerset; - if (verbose) std::cout << "viennacl matrix create begins here" << std::endl; -#ifdef VIENNACL_WITH_CUDA - viennacl::compressed_matrix A( - a_xadj, a_adj, a_ew, viennacl::CUDA_MEMORY, m, n, nnzA); - viennacl::compressed_matrix B( - b_xadj, b_adj, b_ew, viennacl::CUDA_MEMORY, n, k, nnzB); -#else - viennacl::compressed_matrix A( - a_xadj, a_adj, a_ew, viennacl::MAIN_MEMORY, m, n, nnzA); - viennacl::compressed_matrix B( - b_xadj, b_adj, b_ew, viennacl::MAIN_MEMORY, n, k, nnzB); - -#endif - // viennacl::compressed_matrix A; - // viennacl::compressed_matrix B; - // A.set(a_xadj, a_adj, a_ew, m, n, nnzA); - // B.set(b_xadj, b_adj, b_ew, n, k, nnzB); - if (verbose) - std::cout << "VIENNACL compress matrix create:" << timerset.seconds() - << std::endl; - - Kokkos::Timer timer1; - viennacl::compressed_matrix C = viennacl::linalg::prod(A, B); - MyExecSpace().fence(); - - if (verbose) - std::cout << "Actual VIENNACL SPMM Time:" << timer1.seconds() - << std::endl; - - { - unsigned int c_rows = m, c_cols = k, cnnz = C.nnz(); - -#ifdef VIENNACL_WITH_CUDA - value_type const *values = viennacl::cuda_arg(C.handle()); - unsigned int const *rows_start = - viennacl::cuda_arg(C.handle1()); - unsigned int const *columns = - viennacl::cuda_arg(C.handle2()); -#else - value_type const *values = - viennacl::linalg::host_based::detail::extract_raw_pointer( - C.handle()); - unsigned int const *rows_start = - viennacl::linalg::host_based::detail::extract_raw_pointer< - unsigned int>(C.handle1()); - unsigned int const *columns = - viennacl::linalg::host_based::detail::extract_raw_pointer< - unsigned int>(C.handle2()); - -#endif - - { - Kokkos::Timer copy_time; - // row_mapC = typename - // cin_row_index_view_type::non_const_type(Kokkos::view_alloc(Kokkos::WithoutInitializing, - // "rowmapC"), c_rows + 1); - entriesC = typename cin_nonzero_index_view_type::non_const_type( - Kokkos::view_alloc(Kokkos::WithoutInitializing, "EntriesC"), cnnz); - valuesC = typename cin_nonzero_value_view_type::non_const_type( - Kokkos::view_alloc(Kokkos::WithoutInitializing, "valuesC"), cnnz); - MyExecSpace().fence(); - KokkosKernels::Impl::copy_vector< - unsigned int const *, - typename cin_row_index_view_type::non_const_type, MyExecSpace>( - m + 1, rows_start, row_mapC); - KokkosKernels::Impl::copy_vector< - unsigned int const *, - typename cin_nonzero_index_view_type::non_const_type, MyExecSpace>( - cnnz, columns, entriesC); - KokkosKernels::Impl::copy_vector< - value_type const *, - typename cin_nonzero_value_view_type::non_const_type, MyExecSpace>( - cnnz, values, valuesC); - MyExecSpace().fence(); - - double copy_time_d = copy_time.seconds(); - if (verbose) - std::cout << "VIENNACL COPYTIME:" << copy_time_d << std::endl; - } - } - } else { - throw std::runtime_error( - "VIENNACL requires local ordinals to be integer.\n"); - } -#else - (void)handle; - (void)m; - (void)n; - (void)k; - (void)row_mapA; - (void)row_mapB; - (void)row_mapC; - (void)entriesA; - (void)entriesB; - (void)entriesC; - (void)valuesA; - (void)valuesB; - (void)valuesC; - (void)transposeA; - (void)transposeB; - (void)verbose; - throw std::runtime_error("VIENNACL IS NOT DEFINED\n"); - // return; -#endif -} -} // namespace Impl -} // namespace KokkosSparse - -#endif diff --git a/sparse/src/KokkosKernels_Controls.hpp b/sparse/src/KokkosKernels_Controls.hpp index aabe0069be..ec809da194 100644 --- a/sparse/src/KokkosKernels_Controls.hpp +++ b/sparse/src/KokkosKernels_Controls.hpp @@ -62,7 +62,7 @@ #endif #ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE -#include "rocsparse.h" +#include #endif namespace KokkosKernels { diff --git a/sparse/src/KokkosSparse_Utils.hpp b/sparse/src/KokkosSparse_Utils.hpp index 2616d8fbb7..f01e238d5d 100644 --- a/sparse/src/KokkosSparse_Utils.hpp +++ b/sparse/src/KokkosSparse_Utils.hpp @@ -2075,6 +2075,105 @@ struct MatrixConverter { } }; +template +struct CountEntriesFallingEdges { + using size_type = typename Rowmap::non_const_value_type; + + CountEntriesFallingEdges(const Entries &entries_) : entries(entries_) {} + + KOKKOS_INLINE_FUNCTION void operator()(size_type i, + size_type &numFallingEdges) const { + if (entries(i) > entries(i + 1)) numFallingEdges++; + } + + Entries entries; +}; + +template +struct CountRowBoundaryFallingEdges { + using size_type = typename Rowmap::non_const_value_type; + using ordinal_type = typename Entries::non_const_value_type; + + CountRowBoundaryFallingEdges(const Rowmap &rowmap_, const Entries &entries_) + : rowmap(rowmap_), entries(entries_) {} + + KOKKOS_INLINE_FUNCTION void operator()( + ordinal_type i, size_type &numBoundaryFallingEdges) const { + // Comparing the entries at end of row i, and beginning of row i+1 + size_type rowBegin = rowmap(i); + size_type rowEnd = rowmap(i + 1); + // But skip this row if empty (meaning there is no last entry), because + // there would be double-counting. + if (rowBegin == rowEnd) return; + // rowEnd is also the beginning of the next (nonempty) row. + // But if it points the end of all entries, skip this row because it's the + // last nonempty row. + if (rowEnd == size_type(entries.extent(0))) return; + if (entries(rowEnd - 1) > entries(rowEnd)) numBoundaryFallingEdges++; + } + + Rowmap rowmap; + Entries entries; +}; + +// Efficient test for whether a StaticCrsGraph has sorted rows +//(parallel and not affected by imbalanced rows). +// Unmerged/repeated entries in a row are still considered sorted. +template +bool isCrsGraphSorted(const Rowmap &rowmap, const Entries &entries) { + using size_type = typename Rowmap::non_const_value_type; + using ordinal_type = typename Entries::non_const_value_type; + using exec_space = typename Entries::execution_space; + size_type nnz = entries.extent(0); + // Catch case of zero rows, and zero-length rowmap + if (rowmap.extent(0) == size_t(0)) return true; + // Eliminate cases with zero rows/cols/entries. + // This also eliminates cases where row_map is extent 0. + if (nnz == size_type(0)) return true; + ordinal_type numRows = rowmap.extent(0) - 1; + // A "falling edge" is where entry i is greater than entry i+1. + // A graph is unsorted if and only if there is a falling edge where i, i+1 are + // in the same row. So count the total falling edges, and then subtract the + // falling edges which cross row boundaries. + size_type totalFallingEdges = 0; + Kokkos::parallel_reduce(Kokkos::RangePolicy(0, nnz - 1), + CountEntriesFallingEdges(entries), + totalFallingEdges); + size_type rowBoundaryFallingEdges = 0; + Kokkos::parallel_reduce( + Kokkos::RangePolicy(0, numRows - 1), + CountRowBoundaryFallingEdges(rowmap, entries), + rowBoundaryFallingEdges); + return totalFallingEdges == rowBoundaryFallingEdges; +} + +template +void validateCrsMatrix(int m, int n, const Rowmap &rowmapIn, + const Entries &entriesIn, const Values &valuesIn) { + auto rowmap = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), rowmapIn); + auto entries = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), entriesIn); + auto values = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), valuesIn); + size_t nnz = entries.extent(0); + if (nnz != values.extent(0)) + throw std::runtime_error( + "Matrix entries/values views have different lengths"); + if ((m == 0 && rowmap.extent(0) > size_t(1)) || + (rowmap.extent(0) != size_t(m + 1))) + throw std::runtime_error("Matrix rowmap has wrong length"); + if (m && nnz != rowmap(m)) + throw std::runtime_error("Matrix rowmap final entry doesn't match nnz"); + for (int i = 0; i < m; i++) { + if (rowmap(i) > rowmap(i + 1)) + throw std::runtime_error("Matrix rowmap not ascending"); + } + for (size_t i = 0; i < size_t(nnz); i++) { + if (entries(i) >= n) throw std::runtime_error("Matrix entry out of bounds"); + } +} + } // namespace Impl } // namespace KokkosSparse diff --git a/sparse/src/KokkosSparse_Utils_rocsparse.hpp b/sparse/src/KokkosSparse_Utils_rocsparse.hpp index 4637aab5a4..780cb41189 100644 --- a/sparse/src/KokkosSparse_Utils_rocsparse.hpp +++ b/sparse/src/KokkosSparse_Utils_rocsparse.hpp @@ -46,7 +46,7 @@ #define _KOKKOSKERNELS_SPARSEUTILS_ROCSPARSE_HPP #ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE -#include "rocsparse.h" +#include "rocsparse/rocsparse.h" namespace KokkosSparse { namespace Impl { @@ -177,6 +177,21 @@ inline rocsparse_datatype rocsparse_compute_type>() { return rocsparse_datatype_f64_c; } +template +struct kokkos_to_rocsparse_type { + using type = Scalar; +}; + +template <> +struct kokkos_to_rocsparse_type> { + using type = rocsparse_float_complex; +}; + +template <> +struct kokkos_to_rocsparse_type> { + using type = rocsparse_double_complex; +}; + } // namespace Impl } // namespace KokkosSparse diff --git a/sparse/src/KokkosSparse_spgemm.hpp b/sparse/src/KokkosSparse_spgemm.hpp index 0cee2979a2..0fdf6bc646 100644 --- a/sparse/src/KokkosSparse_spgemm.hpp +++ b/sparse/src/KokkosSparse_spgemm.hpp @@ -150,6 +150,25 @@ void block_spgemm_numeric(KernelHandle& kh, const AMatrix& A, const bool Amode, B.values, Bmode, C.graph.row_map, C.graph.entries, C.values, blockDim); } +template +CMatrix spgemm(const AMatrix& A, const bool Amode, const BMatrix& B, + const bool Bmode) { + using device_t = typename CMatrix::device_type; + using scalar_t = typename CMatrix::value_type; + using ordinal_t = typename CMatrix::ordinal_type; + using size_type = typename CMatrix::size_type; + using KKH = KokkosKernels::Experimental::KokkosKernelsHandle< + size_type, ordinal_t, scalar_t, typename device_t::execution_space, + typename device_t::memory_space, typename device_t::memory_space>; + KKH kh; + kh.create_spgemm_handle(); + CMatrix C; + spgemm_symbolic(kh, A, Amode, B, Bmode, C); + spgemm_numeric(kh, A, Amode, B, Bmode, C); + kh.destroy_spgemm_handle(); + return C; +} + } // namespace KokkosSparse #endif diff --git a/sparse/src/KokkosSparse_spgemm_handle.hpp b/sparse/src/KokkosSparse_spgemm_handle.hpp index 9f89083957..8d9ebc9ed7 100644 --- a/sparse/src/KokkosSparse_spgemm_handle.hpp +++ b/sparse/src/KokkosSparse_spgemm_handle.hpp @@ -46,6 +46,7 @@ #include #include +#include #include #include #include @@ -59,6 +60,10 @@ #include "KokkosSparse_Utils_cusparse.hpp" #endif +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL +#include "KokkosSparse_Utils_mkl.hpp" +#endif + namespace KokkosSparse { // TODO:SPGEMM_KK_MEMORY2 option is for testing in openmp. @@ -69,12 +74,14 @@ enum SPGEMMAlgorithm { SPGEMM_KK_DENSE, SPGEMM_KK_MEMORY, SPGEMM_KK_LP, // KKVARIANTS - SPGEMM_CUSPARSE, - SPGEMM_CUSP, - SPGEMM_MKL, - SPGEMM_MKL2PHASE, - SPGEMM_VIENNA, // TPLS - SPGEMM_ROCSPARSE, + SPGEMM_CUSPARSE [[deprecated("cuSPARSE is now used automatically in all " + "supported SpGEMM calls, if enabled.")]], + SPGEMM_MKL [[deprecated("MKL is now used automatically in all supported " + "SpGEMM calls, if enabled.")]], + SPGEMM_MKL2PHASE [[deprecated("MKL is now used automatically in all " + "supported SpGEMM calls, if enabled.")]], + SPGEMM_ROCSPARSE [[deprecated("rocSPARSE is now used automatically in all " + "supported SpGEMM calls, if enabled.")]], // TRIANGLE COUNTING SPECIALIZED SPGEMM_KK_TRIANGLE_AI, // SPGEMM_KK_TRIANGLE_DEFAULT, SPGEMM_KK_TRIANGLE_MEM, @@ -158,7 +165,6 @@ class SPGEMMHandle { rocsparse_mat_info info_C; size_t bufferSize; void *buffer; - bool C_populated; rocSparseSpgemmHandleType(bool transposeA, bool transposeB) { opA = @@ -166,9 +172,8 @@ class SPGEMMHandle { opB = transposeB ? rocsparse_operation_transpose : rocsparse_operation_none; - bufferSize = 0; - buffer = NULL; - C_populated = false; + bufferSize = 0; + buffer = nullptr; KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_create_mat_descr(&descr_A)); KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_create_mat_descr(&descr_B)); KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_create_mat_descr(&descr_C)); @@ -205,8 +210,6 @@ class SPGEMMHandle { size_t bufferSize3, bufferSize4, bufferSize5; void *buffer3, *buffer4, *buffer5; - bool C_populated; - cuSparseSpgemmHandleType(bool transposeA, bool transposeB) { opA = transposeA ? CUSPARSE_OPERATION_TRANSPOSE : CUSPARSE_OPERATION_NON_TRANSPOSE; @@ -216,95 +219,75 @@ class SPGEMMHandle { alg = CUSPARSE_SPGEMM_DEFAULT; bufferSize3 = bufferSize4 = bufferSize5 = 0; - buffer3 = buffer4 = buffer5 = NULL; - C_populated = false; + buffer3 = buffer4 = buffer5 = nullptr; cusparseHandle = kkControls.getCusparseHandle(); KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_createDescr(&spgemmDescr)); } ~cuSparseSpgemmHandleType() { - cusparseDestroySpMat(descr_A); - cusparseDestroySpMat(descr_B); - cusparseDestroySpMat(descr_C); - cusparseSpGEMM_destroyDescr(spgemmDescr); - cudaFree(buffer3); - cudaFree(buffer4); - cudaFree(buffer5); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroySpMat(descr_A)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroySpMat(descr_B)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroySpMat(descr_C)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_destroyDescr(spgemmDescr)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer3)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer4)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer5)); } }; #else struct cuSparseSpgemmHandleType { - cusparseHandle_t handle; - cusparseOperation_t transA; - cusparseOperation_t transB; - cusparseMatDescr_t a_descr; - cusparseMatDescr_t b_descr; - cusparseMatDescr_t c_descr; - cuSparseSpgemmHandleType(bool transposeA, bool transposeB) { - cusparseStatus_t status; - status = cusparseCreate(&handle); - if (status != CUSPARSE_STATUS_SUCCESS) { - throw std::runtime_error("cusparseCreate ERROR\n"); - // return; - } - cusparseSetPointerMode(handle, CUSPARSE_POINTER_MODE_HOST); - - if (transposeA) { - transA = CUSPARSE_OPERATION_TRANSPOSE; - } else { - transA = CUSPARSE_OPERATION_NON_TRANSPOSE; - } - if (transposeB) { - transB = CUSPARSE_OPERATION_TRANSPOSE; - } else { - transB = CUSPARSE_OPERATION_NON_TRANSPOSE; - } - - status = cusparseCreateMatDescr(&a_descr); - if (status != CUSPARSE_STATUS_SUCCESS) { - throw std::runtime_error("cusparseCreateMatDescr a_descr ERROR\n"); - // return; - } - cusparseSetMatType(a_descr, CUSPARSE_MATRIX_TYPE_GENERAL); - cusparseSetMatIndexBase(a_descr, CUSPARSE_INDEX_BASE_ZERO); - - status = cusparseCreateMatDescr(&b_descr); - if (status != CUSPARSE_STATUS_SUCCESS) { - throw std::runtime_error("cusparseCreateMatDescr b_descr ERROR\n"); - // return; - } - cusparseSetMatType(b_descr, CUSPARSE_MATRIX_TYPE_GENERAL); - cusparseSetMatIndexBase(b_descr, CUSPARSE_INDEX_BASE_ZERO); - - status = cusparseCreateMatDescr(&c_descr); - if (status != CUSPARSE_STATUS_SUCCESS) { - throw std::runtime_error("cusparseCreateMatDescr c_descr ERROR\n"); - // return; - } - cusparseSetMatType(c_descr, CUSPARSE_MATRIX_TYPE_GENERAL); - cusparseSetMatIndexBase(c_descr, CUSPARSE_INDEX_BASE_ZERO); + cusparseHandle_t cusparseHandle; + // Descriptor for any general matrix with index base 0 + cusparseMatDescr_t generalDescr; + + cuSparseSpgemmHandleType(bool /* transposeA */, bool /* transposeB */) { + KokkosKernels::Experimental::Controls kkControls; + // Get singleton cusparse handle from default controls + cusparseHandle = kkControls.getCusparseHandle(); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateMatDescr(&generalDescr)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetMatType(generalDescr, CUSPARSE_MATRIX_TYPE_GENERAL)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetMatIndexBase(generalDescr, CUSPARSE_INDEX_BASE_ZERO)); } ~cuSparseSpgemmHandleType() { - cusparseDestroyMatDescr(a_descr); - cusparseDestroyMatDescr(b_descr); - cusparseDestroyMatDescr(c_descr); - cusparseDestroy(handle); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroyMatDescr(generalDescr)); } }; #endif #endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL + struct mklSpgemmHandleType { + // Allow mkl_sparse_sp2m (in SPARSE_STAGE_NNZ_COUNT mode) to construct C. + // Then this assumes ownership of it and will destroy it later. + mklSpgemmHandleType(const sparse_matrix_t &C_) : C(C_) {} + + ~mklSpgemmHandleType() { + KOKKOSKERNELS_MKL_SAFE_CALL(mkl_sparse_destroy(C)); + } + + sparse_matrix_t C; + }; +#endif + private: SPGEMMAlgorithm algorithm_type; SPGEMMAccumulator accumulator_type; size_type result_nnz_size; bool called_symbolic; + bool computed_rowptrs; + bool computed_rowflops; + bool computed_entries; bool called_numeric; int suggested_vector_size; int suggested_team_size; - nnz_lno_t max_nnz_inresult; + nnz_lno_t max_nnz_inresult; // C max nonzeros per row. + bool computed_max_nnz_inresult; nnz_lno_t max_nnz_compressed_result; size_type compressed_b_size; @@ -330,7 +313,6 @@ class SPGEMMHandle { bool create_lower_triangular; int sort_lower_triangular; // 0 - do not sort // 1 - sort // 2 - Algorithm // decides (default) - int sort_option; nnz_lno_persistent_work_view_t lower_triangular_permutation; row_lno_persistent_work_view_t lower_triangular_matrix_rowmap; @@ -402,6 +384,13 @@ class SPGEMMHandle { public: #endif +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL + private: + mklSpgemmHandleType *mkl_spgemm_handle; + + public: +#endif + void set_c_column_indices(nnz_lno_temp_work_view_t c_col_indices_) { this->c_column_indices = c_col_indices_; } @@ -464,17 +453,11 @@ class SPGEMMHandle { compressed_c_rowmap_ = compressed_c_rowmap; } - // TODO: store transpose here. - void get_c_transpose_symbolic() {} - void set_sort_lower_triangular(int option) { this->sort_lower_triangular = option; } int get_sort_lower_triangular() { return this->sort_lower_triangular; } - void set_sort_option(int option) { this->sort_option = option; } - int get_sort_option() { return this->sort_option; } - void set_create_lower_triangular(bool option) { this->create_lower_triangular = option; } @@ -529,10 +512,14 @@ class SPGEMMHandle { accumulator_type(SPGEMM_ACC_DEFAULT), result_nnz_size(0), called_symbolic(false), + computed_rowptrs(false), + computed_rowflops(false), + computed_entries(false), called_numeric(false), suggested_vector_size(0), suggested_team_size(0), max_nnz_inresult(0), + computed_max_nnz_inresult(false), c_column_indices(), tranpose_a_xadj(), tranpose_b_xadj(), @@ -553,7 +540,6 @@ class SPGEMMHandle { create_lower_triangular(false), sort_lower_triangular(2), - sort_option(-1), lower_triangular_permutation(), lower_triangular_matrix_rowmap(), lower_triangular_matrix_entries(), @@ -581,11 +567,15 @@ class SPGEMMHandle { is_compression_single_step(false) #ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE , - rocsparse_spgemm_handle(NULL) + rocsparse_spgemm_handle(nullptr) #endif #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE , - cusparse_spgemm_handle(NULL) + cusparse_spgemm_handle(nullptr) +#endif +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL + , + mkl_spgemm_handle(nullptr) #endif { if (gs == SPGEMM_DEFAULT) { @@ -599,6 +589,9 @@ class SPGEMMHandle { #endif #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE this->destroy_cusparse_spgemm_handle(); +#endif +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL + this->destroy_mkl_spgemm_handle(); #endif }; @@ -614,9 +607,9 @@ class SPGEMMHandle { } void destroy_rocsparse_spgemm_handle() { - if (this->rocsparse_spgemm_handle != NULL) { + if (this->rocsparse_spgemm_handle != nullptr) { delete this->rocsparse_spgemm_handle; - this->rocsparse_spgemm_handle = NULL; + this->rocsparse_spgemm_handle = nullptr; } } @@ -628,9 +621,9 @@ class SPGEMMHandle { this->cusparse_spgemm_handle = new cuSparseSpgemmHandleType(transA, transB); } void destroy_cusparse_spgemm_handle() { - if (this->cusparse_spgemm_handle != NULL) { + if (this->cusparse_spgemm_handle != nullptr) { delete this->cusparse_spgemm_handle; - this->cusparse_spgemm_handle = NULL; + this->cusparse_spgemm_handle = nullptr; } } @@ -639,6 +632,23 @@ class SPGEMMHandle { } #endif +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL + void create_mkl_spgemm_handle(sparse_matrix_t C) { + this->destroy_mkl_spgemm_handle(); + this->mkl_spgemm_handle = new mklSpgemmHandleType(C); + } + void destroy_mkl_spgemm_handle() { + if (this->mkl_spgemm_handle != nullptr) { + delete this->mkl_spgemm_handle; + this->mkl_spgemm_handle = nullptr; + } + } + + mklSpgemmHandleType *get_mkl_spgemm_handle() { + return this->mkl_spgemm_handle; + } +#endif + void choose_default_algorithm() { #if defined(KOKKOS_ENABLE_SERIAL) if (std::is_same::value) { @@ -672,29 +682,20 @@ class SPGEMMHandle { #if defined(KOKKOS_ENABLE_CUDA) if (std::is_same::value) { -#if defined(KOKKOSKERNELS_ENABLE_TPL_CUSPARSE) - this->algorithm_type = SPGEMM_CUSPARSE; -#ifdef VERBOSE - std::cout << "Cuda Execution Space, Default Algorithm: SPGEMM_CUSPARSE" - << std::endl; -#endif -#else this->algorithm_type = SPGEMM_KK; #ifdef VERBOSE - std::cout << "Cuda Execution Space, without cuSPARSE, Default Algorithm: " - "SPGEMM_KK" + std::cout << "Cuda Execution Space, Default Algorithm: SPGEMM_KK" << std::endl; -#endif #endif } #endif #if defined(KOKKOS_ENABLE_HIP) if (std::is_same::value) { -#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE - this->algorithm_type = SPGEMM_ROCSPARSE; -#else this->algorithm_type = SPGEMM_KK; +#ifdef VERBOSE + std::cout << "HIP Execution Space, Default Algorithm: SPGEMM_KK" + << std::endl; #endif } #endif @@ -727,9 +728,21 @@ class SPGEMMHandle { SPGEMMAlgorithm get_algorithm_type() const { return this->algorithm_type; } bool is_symbolic_called() { return this->called_symbolic; } + bool are_rowptrs_computed() { return this->computed_rowptrs; } + bool are_rowflops_computed() { return this->computed_rowflops; } + bool are_entries_computed() { return this->computed_entries; } bool is_numeric_called() { return this->called_numeric; } - nnz_lno_t get_max_result_nnz() const { return this->max_nnz_inresult; } + template + nnz_lno_t get_max_result_nnz(const c_row_view_t &row_mapC) { + if (!this->computed_max_nnz_inresult) { + this->max_nnz_inresult = + KokkosSparse::Impl::graph_max_degree(row_mapC); + this->computed_max_nnz_inresult = true; + } + return this->max_nnz_inresult; + } nnz_lno_t get_max_compresed_result_nnz() const { return this->max_nnz_compressed_result; @@ -740,10 +753,14 @@ class SPGEMMHandle { this->algorithm_type = sgs_algo; } void set_call_symbolic(bool call = true) { this->called_symbolic = call; } + void set_computed_rowptrs() { this->computed_rowptrs = true; } + void set_computed_rowflops() { this->computed_rowflops = true; } + void set_computed_entries() { this->computed_entries = true; } void set_call_numeric(bool call = true) { this->called_numeric = call; } - void set_max_result_nnz(nnz_lno_t num_result_nnz_) { - this->max_nnz_inresult = num_result_nnz_; + void set_max_result_nnz(nnz_lno_t nz) { + this->max_nnz_inresult = nz; + this->computed_max_nnz_inresult = true; } void set_max_compresed_result_nnz(nnz_lno_t num_result_nnz_) { @@ -804,21 +821,26 @@ inline SPGEMMAlgorithm StringToSPGEMMAlgorithm(std::string &name) { return SPGEMM_KK_LP; else if (name == "SPGEMM_KK_MEMSPEED") return SPGEMM_KK; - else if (name == "SPGEMM_DEBUG") return SPGEMM_SERIAL; else if (name == "SPGEMM_SERIAL") return SPGEMM_SERIAL; else if (name == "SPGEMM_CUSPARSE") - return SPGEMM_CUSPARSE; - else if (name == "SPGEMM_ROCSPARSE") - return SPGEMM_ROCSPARSE; - else if (name == "SPGEMM_CUSP") - return SPGEMM_CUSP; + throw std::runtime_error( + "Enum value SPGEMM_CUSPARSE is deprecated. cuSPARSE is automatically " + "used in all supported SpGEMM calls."); else if (name == "SPGEMM_MKL") - return SPGEMM_MKL; - else if (name == "SPGEMM_VIENNA") - return SPGEMM_VIENNA; + throw std::runtime_error( + "Enum value SPGEMM_MKL is deprecated. MKL is automatically used in all " + "supported SpGEMM calls."); + else if (name == "SPGEMM_MKL2PHASE") + throw std::runtime_error( + "Enum value SPGEMM_MKL2PHASE is deprecated. MKL is automatically used " + "in all supported SpGEMM calls."); + else if (name == "SPGEMM_ROCSPARSE") + throw std::runtime_error( + "Enum value SPGEMM_ROCSPARSE is deprecated. rocSPARSE is automatically " + "used in all supported SpGEMM calls."); else throw std::runtime_error("Invalid SPGEMMAlgorithm name"); } diff --git a/sparse/src/KokkosSparse_spgemm_numeric.hpp b/sparse/src/KokkosSparse_spgemm_numeric.hpp index 313922dc62..edb4b006ed 100644 --- a/sparse/src/KokkosSparse_spgemm_numeric.hpp +++ b/sparse/src/KokkosSparse_spgemm_numeric.hpp @@ -148,10 +148,6 @@ void spgemm_numeric(KernelHandle *handle, "If you need this case please let kokkos-kernels developers know.\n"); } - if (m < 1 || n < 1 || k < 1 || entriesA.extent(0) < 1 || - entriesB.extent(0) < 1) - return; - typedef typename KernelHandle::const_size_type c_size_t; typedef typename KernelHandle::const_nnz_lno_t c_lno_t; typedef typename KernelHandle::const_nnz_scalar_t c_scalar_t; @@ -217,7 +213,7 @@ void spgemm_numeric(KernelHandle *handle, // static assert clno_row_view_t_ can be const type (row map is fixed after // symbolic phase). - typedef Kokkos::View::array_layout, UniformDevice_t, // typename @@ -247,7 +243,7 @@ void spgemm_numeric(KernelHandle *handle, Internal_blno_row_view_t_ const_b_r(row_mapB.data(), row_mapB.extent(0)); Internal_blno_nnz_view_t_ const_b_l(entriesB.data(), entriesB.extent(0)); Internal_bscalar_nnz_view_t_ const_b_s(valuesB.data(), valuesB.extent(0)); - Internal_clno_row_view_t_ nonconst_c_r(row_mapC.data(), row_mapC.extent(0)); + Internal_clno_row_view_t_ const_c_r(row_mapC.data(), row_mapC.extent(0)); Internal_clno_nnz_view_t_ nonconst_c_l(entriesC.data(), entriesC.extent(0)); Internal_cscalar_nnz_view_t_ nonconst_c_s(valuesC.data(), valuesC.extent(0)); @@ -262,27 +258,48 @@ void spgemm_numeric(KernelHandle *handle, const_a_l, const_a_s, transposeA, const_b_r, const_b_l, const_b_s, - transposeB, nonconst_c_r, + transposeB, const_c_r, nonconst_c_l, nonconst_c_s); return; } - KokkosSparse::Impl::SPGEMM_NUMERIC< - const_handle_type, // KernelHandle, - Internal_alno_row_view_t_, Internal_alno_nnz_view_t_, - Internal_ascalar_nnz_view_t_, Internal_blno_row_view_t_, - Internal_blno_nnz_view_t_, Internal_bscalar_nnz_view_t_, - Internal_clno_row_view_t_, Internal_clno_nnz_view_t_, - Internal_cscalar_nnz_view_t_>::spgemm_numeric(&tmp_handle, // handle, - m, n, k, const_a_r, - const_a_l, const_a_s, - transposeA, const_b_r, - const_b_l, const_b_s, - transposeB, nonconst_c_r, - nonconst_c_l, nonconst_c_s); + auto algo = tmp_handle.get_spgemm_handle()->get_algorithm_type(); + + if (algo == SPGEMM_DEBUG || algo == SPGEMM_SERIAL) { + // Never call a TPL if serial/debug is requested (this is needed for + // testing) + KokkosSparse::Impl::SPGEMM_NUMERIC< + const_handle_type, // KernelHandle, + Internal_alno_row_view_t_, Internal_alno_nnz_view_t_, + Internal_ascalar_nnz_view_t_, Internal_blno_row_view_t_, + Internal_blno_nnz_view_t_, Internal_bscalar_nnz_view_t_, + Internal_clno_row_view_t_, Internal_clno_nnz_view_t_, + Internal_cscalar_nnz_view_t_, + false>::spgemm_numeric(&tmp_handle, // handle, + m, n, k, const_a_r, const_a_l, const_a_s, + transposeA, const_b_r, const_b_l, const_b_s, + transposeB, const_c_r, nonconst_c_l, + nonconst_c_s); + } else { + KokkosSparse::Impl::SPGEMM_NUMERIC< + const_handle_type, // KernelHandle, + Internal_alno_row_view_t_, Internal_alno_nnz_view_t_, + Internal_ascalar_nnz_view_t_, Internal_blno_row_view_t_, + Internal_blno_nnz_view_t_, Internal_bscalar_nnz_view_t_, + Internal_clno_row_view_t_, Internal_clno_nnz_view_t_, + Internal_cscalar_nnz_view_t_>::spgemm_numeric(&tmp_handle, // handle, + m, n, k, const_a_r, + const_a_l, const_a_s, + transposeA, const_b_r, + const_b_l, const_b_s, + transposeB, const_c_r, + nonconst_c_l, + nonconst_c_s); + } } } // namespace Experimental } // namespace KokkosSparse + #endif diff --git a/sparse/src/KokkosSparse_spgemm_symbolic.hpp b/sparse/src/KokkosSparse_spgemm_symbolic.hpp index 4c30016b50..a46c4161f1 100644 --- a/sparse/src/KokkosSparse_spgemm_symbolic.hpp +++ b/sparse/src/KokkosSparse_spgemm_symbolic.hpp @@ -45,8 +45,8 @@ #define _KOKKOS_SPGEMM_SYMBOLIC_HPP #include "KokkosKernels_helpers.hpp" - #include "KokkosSparse_spgemm_symbolic_spec.hpp" +#include "KokkosSparse_Utils.hpp" namespace KokkosSparse { @@ -62,7 +62,7 @@ void spgemm_symbolic(KernelHandle *handle, alno_row_view_t_ row_mapA, alno_nnz_view_t_ entriesA, bool transposeA, blno_row_view_t_ row_mapB, blno_nnz_view_t_ entriesB, bool transposeB, - clno_row_view_t_ row_mapC) { + clno_row_view_t_ row_mapC, bool computeRowptrs = false) { static_assert( std::is_same::value, @@ -163,18 +163,48 @@ void spgemm_symbolic(KernelHandle *handle, Internal_alno_nnz_view_t_ const_a_l(entriesA.data(), entriesA.extent(0)); Internal_blno_row_view_t_ const_b_r(row_mapB.data(), row_mapB.extent(0)); Internal_blno_nnz_view_t_ const_b_l(entriesB.data(), entriesB.extent(0)); - Internal_clno_row_view_t_ const_c_r(row_mapC.data(), row_mapC.extent(0)); - - using namespace KokkosSparse::Impl; - SPGEMM_SYMBOLIC< - const_handle_type, // KernelHandle, - Internal_alno_row_view_t_, Internal_alno_nnz_view_t_, - Internal_blno_row_view_t_, Internal_blno_nnz_view_t_, - Internal_clno_row_view_t_>::spgemm_symbolic(&tmp_handle, // handle, - m, n, k, const_a_r, const_a_l, - transposeA, const_b_r, - const_b_l, transposeB, - const_c_r); + Internal_clno_row_view_t_ c_r(row_mapC.data(), row_mapC.extent(0)); + + // Verify that graphs A and B are sorted. + // This test is designed to be as efficient as possible, but still skip + // it in a release build. +#ifndef NDEBUG + if (!KokkosSparse::Impl::isCrsGraphSorted(const_a_r, const_a_l)) + throw std::runtime_error( + "KokkosSparse::spgemm_symbolic: entries of A are not sorted within " + "rows. May use KokkosSparse::sort_crs_matrix to sort it."); + if (!KokkosSparse::Impl::isCrsGraphSorted(const_b_r, const_b_l)) + throw std::runtime_error( + "KokkosSparse::spgemm_symbolic: entries of B are not sorted within " + "rows. May use KokkosSparse::sort_crs_matrix to sort it."); +#endif + + auto algo = tmp_handle.get_spgemm_handle()->get_algorithm_type(); + + if (algo == SPGEMM_DEBUG || algo == SPGEMM_SERIAL) { + // Never call a TPL if serial/debug is requested (this is needed for + // testing) + KokkosSparse::Impl::SPGEMM_SYMBOLIC< + const_handle_type, // KernelHandle, + Internal_alno_row_view_t_, Internal_alno_nnz_view_t_, + Internal_blno_row_view_t_, Internal_blno_nnz_view_t_, + Internal_clno_row_view_t_, + false>::spgemm_symbolic(&tmp_handle, // handle, + m, n, k, const_a_r, const_a_l, transposeA, + const_b_r, const_b_l, transposeB, c_r, + computeRowptrs); + } else { + KokkosSparse::Impl::SPGEMM_SYMBOLIC< + const_handle_type, // KernelHandle, + Internal_alno_row_view_t_, Internal_alno_nnz_view_t_, + Internal_blno_row_view_t_, Internal_blno_nnz_view_t_, + Internal_clno_row_view_t_>::spgemm_symbolic(&tmp_handle, // handle, + m, n, k, const_a_r, + const_a_l, transposeA, + const_b_r, const_b_l, + transposeB, c_r, + computeRowptrs); + } } } // namespace Experimental diff --git a/sparse/tpls/KokkosKernels_tpl_handles_decl.hpp b/sparse/tpls/KokkosKernels_tpl_handles_decl.hpp index aef089fd06..eae0f941d3 100644 --- a/sparse/tpls/KokkosKernels_tpl_handles_decl.hpp +++ b/sparse/tpls/KokkosKernels_tpl_handles_decl.hpp @@ -66,7 +66,7 @@ struct CusparseSingleton { #endif #ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE -#include +#include namespace KokkosKernels { namespace Impl { diff --git a/sparse/tpls/KokkosSparse_spgemm_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spgemm_jacobi_tpl_spec_avail.hpp similarity index 76% rename from sparse/tpls/KokkosSparse_spgemm_tpl_spec_avail.hpp rename to sparse/tpls/KokkosSparse_spgemm_jacobi_tpl_spec_avail.hpp index 2067ad2b38..c451d91cb4 100644 --- a/sparse/tpls/KokkosSparse_spgemm_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_spgemm_jacobi_tpl_spec_avail.hpp @@ -42,26 +42,11 @@ //@HEADER */ -#ifndef KOKKOSPARSE_SPGEMM_TPL_SPEC_AVAIL_HPP_ -#define KOKKOSPARSE_SPGEMM_TPL_SPEC_AVAIL_HPP_ +#ifndef KOKKOSPARSE_SPGEMM_JACOBI_TPL_SPEC_AVAIL_HPP_ +#define KOKKOSPARSE_SPGEMM_JACOBI_TPL_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { -// Specialization struct which defines whether a specialization exists -template -struct spgemm_symbolic_tpl_spec_avail { - enum : bool { value = false }; -}; - -// Specialization struct which defines whether a specialization exists -template -struct spgemm_numeric_tpl_spec_avail { - enum : bool { value = false }; -}; // Specialization struct which defines whether a specialization exists template +struct spgemm_numeric_tpl_spec_avail { + enum : bool { value = false }; +}; + +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE +// NOTE: all versions of cuSPARSE 10.x and 11.x support exactly the same matrix +// types, so there is no ifdef'ing on versions needed in avail. Offset and +// Ordinal must both be 32-bit. Even though the "generic" API lets you specify +// offsets and ordinals independently as either 16, 32 or 64-bit, SpGEMM will +// just fail at runtime if you don't use 32 for both. + +#define SPGEMM_NUMERIC_AVAIL_CUSPARSE(SCALAR, MEMSPACE) \ + template <> \ + struct spgemm_numeric_tpl_spec_avail< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, Kokkos::Cuda, MEMSPACE, \ + MEMSPACE>, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits > > { \ + enum : bool { value = true }; \ + }; + +#define SPGEMM_NUMERIC_AVAIL_CUSPARSE_S(SCALAR) \ + SPGEMM_NUMERIC_AVAIL_CUSPARSE(SCALAR, Kokkos::CudaSpace) \ + SPGEMM_NUMERIC_AVAIL_CUSPARSE(SCALAR, Kokkos::CudaUVMSpace) + +SPGEMM_NUMERIC_AVAIL_CUSPARSE_S(float) +SPGEMM_NUMERIC_AVAIL_CUSPARSE_S(double) +SPGEMM_NUMERIC_AVAIL_CUSPARSE_S(Kokkos::complex) +SPGEMM_NUMERIC_AVAIL_CUSPARSE_S(Kokkos::complex) + +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE +#define SPGEMM_NUMERIC_AVAIL_ROCSPARSE(SCALAR) \ + template <> \ + struct spgemm_numeric_tpl_spec_avail< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, Kokkos::HIP, Kokkos::HIPSpace, \ + Kokkos::HIPSpace>, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits > > { \ + enum : bool { value = true }; \ + }; + +SPGEMM_NUMERIC_AVAIL_ROCSPARSE(float) +SPGEMM_NUMERIC_AVAIL_ROCSPARSE(double) +SPGEMM_NUMERIC_AVAIL_ROCSPARSE(Kokkos::complex) +SPGEMM_NUMERIC_AVAIL_ROCSPARSE(Kokkos::complex) +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL +#define SPGEMM_NUMERIC_AVAIL_MKL(SCALAR, EXEC) \ + template <> \ + struct spgemm_numeric_tpl_spec_avail< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, EXEC, Kokkos::HostSpace, \ + Kokkos::HostSpace>, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits > > { \ + enum : bool { value = true }; \ + }; + +#define SPGEMM_NUMERIC_AVAIL_MKL_E(EXEC) \ + SPGEMM_NUMERIC_AVAIL_MKL(float, EXEC) \ + SPGEMM_NUMERIC_AVAIL_MKL(double, EXEC) \ + SPGEMM_NUMERIC_AVAIL_MKL(Kokkos::complex, EXEC) \ + SPGEMM_NUMERIC_AVAIL_MKL(Kokkos::complex, EXEC) + +#ifdef KOKKOS_ENABLE_SERIAL +SPGEMM_NUMERIC_AVAIL_MKL_E(Kokkos::Serial) +#endif +#ifdef KOKKOS_ENABLE_OPENMP +SPGEMM_NUMERIC_AVAIL_MKL_E(Kokkos::OpenMP) +#endif +#endif + +} // namespace Impl +} // namespace KokkosSparse + +#endif diff --git a/sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_decl.hpp new file mode 100644 index 0000000000..5a0cdb3f24 --- /dev/null +++ b/sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_decl.hpp @@ -0,0 +1,672 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSPARSE_SPGEMM_NUMERIC_TPL_SPEC_DECL_HPP_ +#define KOKKOSPARSE_SPGEMM_NUMERIC_TPL_SPEC_DECL_HPP_ + +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE +#include "cusparse.h" +#include "KokkosSparse_Utils_cusparse.hpp" +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE +#include "rocsparse/rocsparse.h" +#include "KokkosSparse_Utils_rocsparse.hpp" +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL +#include "KokkosSparse_Utils_mkl.hpp" +#include "mkl_spblas.h" +#endif + +namespace KokkosSparse { +namespace Impl { + +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE +#if (CUDA_VERSION >= 11040) + +// 11.4+ supports generic API with reuse (full symbolic/numeric separation) +template +void spgemm_numeric_cusparse( + KernelHandle *handle, lno_t m, lno_t n, lno_t k, + const ConstRowMapType &row_mapA, const ConstEntriesType &entriesA, + const ConstValuesType &valuesA, const ConstRowMapType &row_mapB, + const ConstEntriesType &entriesB, const ConstValuesType &valuesB, + const ConstRowMapType &row_mapC, const EntriesType &entriesC, + const ValuesType &valuesC) { + using scalar_type = typename KernelHandle::nnz_scalar_t; + using size_type = typename KernelHandle::size_type; + auto h = handle->get_cusparse_spgemm_handle(); + + if (handle->get_c_nnz() == size_type(0)) { + // Handle empty C case. entriesC and valuesC have extent 0 so nothing needs + // to be done for them, but we must populate row_mapC to zeros if not + // already done. + if (!handle->are_rowptrs_computed()) { + Kokkos::View> + row_mapC_nonconst(const_cast(row_mapC.data()), + row_mapC.extent(0)); + Kokkos::deep_copy(typename KernelHandle::HandleExecSpace(), + row_mapC_nonconst, size_type(0)); + handle->set_computed_rowptrs(); + } + handle->set_computed_entries(); + handle->set_call_numeric(); + return; + } + + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_A, (void *)row_mapA.data(), + (void *)entriesA.data(), (void *)valuesA.data())); + + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_B, (void *)row_mapB.data(), + (void *)entriesB.data(), (void *)valuesB.data())); + + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_C, (void *)row_mapC.data(), + (void *)entriesC.data(), (void *)valuesC.data())); + + if (!handle->are_entries_computed()) { + if (!h->buffer5) { + // If symbolic was previously called with computeRowptrs=true, then + // buffer5 will have already been allocated to the correct size. Otherwise + // size and allocate it here. + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_copy( + h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, + h->alg, h->spgemmDescr, &h->bufferSize5, nullptr)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaMalloc((void **)&h->buffer5, h->bufferSize5)); + } + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_copy( + h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, + h->alg, h->spgemmDescr, &h->bufferSize5, h->buffer5)); + handle->set_computed_rowptrs(); + handle->set_computed_entries(); + } + + // C' = alpha * opA(A) * opB(B) + beta * C + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); + + // alpha, beta are on host, but since we use singleton on the cusparse + // handle, we save/restore the pointer mode to not interference with + // others' use + cusparsePointerMode_t oldPtrMode; + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseGetPointerMode(h->cusparseHandle, &oldPtrMode)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetPointerMode(h->cusparseHandle, CUSPARSE_POINTER_MODE_HOST)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_compute( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, h->alg, h->spgemmDescr)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSetPointerMode(h->cusparseHandle, oldPtrMode)); + handle->set_call_numeric(); +} + +#elif (CUDA_VERSION >= 11000) +// 11.0-11.3 supports only the generic API, but not reuse. +template +void spgemm_numeric_cusparse( + KernelHandle *handle, lno_t m, lno_t n, lno_t k, + const ConstRowMapType &row_mapA, const ConstEntriesType &entriesA, + const ConstValuesType &valuesA, const ConstRowMapType &row_mapB, + const ConstEntriesType &entriesB, const ConstValuesType &valuesB, + const ConstRowMapType &row_mapC, const EntriesType &entriesC, + const ValuesType &valuesC) { + using scalar_type = typename KernelHandle::nnz_scalar_t; + auto h = handle->get_cusparse_spgemm_handle(); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_A, (void *)row_mapA.data(), + (void *)entriesA.data(), (void *)valuesA.data())); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_B, (void *)row_mapB.data(), + (void *)entriesB.data(), (void *)valuesB.data())); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_C, (void *)row_mapC.data(), + (void *)entriesC.data(), (void *)valuesC.data())); + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr, + &h->bufferSize4, h->buffer4)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_copy( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr)); + handle->set_computed_entries(); + handle->set_call_numeric(); +} + +#else + +// Generic (using overloads) wrapper for cusparseXcsrgemm (where X is S, D, C, +// or Z). Accepts Kokkos types (e.g. Kokkos::complex) for Scalar and +// handles casting to cuSparse types internally. + +#define CUSPARSE_XCSRGEMM_SPEC(KokkosType, CusparseType, Abbreviation) \ + inline cusparseStatus_t cusparseXcsrgemm( \ + cusparseHandle_t handle, cusparseOperation_t transA, \ + cusparseOperation_t transB, int m, int n, int k, \ + const cusparseMatDescr_t descrA, const int nnzA, \ + const KokkosType *csrSortedValA, const int *csrSortedRowPtrA, \ + const int *csrSortedColIndA, const cusparseMatDescr_t descrB, \ + const int nnzB, const KokkosType *csrSortedValB, \ + const int *csrSortedRowPtrB, const int *csrSortedColIndB, \ + const cusparseMatDescr_t descrC, KokkosType *csrSortedValC, \ + const int *csrSortedRowPtrC, int *csrSortedColIndC) { \ + return cusparse##Abbreviation##csrgemm( \ + handle, transA, transB, m, n, k, descrA, nnzA, \ + reinterpret_cast(csrSortedValA), \ + csrSortedRowPtrA, csrSortedColIndA, descrB, nnzB, \ + reinterpret_cast(csrSortedValB), \ + csrSortedRowPtrB, csrSortedColIndB, descrC, \ + reinterpret_cast(csrSortedValC), csrSortedRowPtrC, \ + csrSortedColIndC); \ + } + +CUSPARSE_XCSRGEMM_SPEC(float, float, S) +CUSPARSE_XCSRGEMM_SPEC(double, double, D) +CUSPARSE_XCSRGEMM_SPEC(Kokkos::complex, cuComplex, C) +CUSPARSE_XCSRGEMM_SPEC(Kokkos::complex, cuDoubleComplex, Z) + +#undef CUSPARSE_XCSRGEMM_SPEC + +// 10.x supports the pre-generic interface. +template +void spgemm_numeric_cusparse( + KernelHandle *handle, lno_t m, lno_t n, lno_t k, + const ConstRowMapType &row_mapA, const ConstEntriesType &entriesA, + const ConstValuesType &valuesA, const ConstRowMapType &row_mapB, + const ConstEntriesType &entriesB, const ConstValuesType &valuesB, + const ConstRowMapType &row_mapC, const EntriesType &entriesC, + const ValuesType &valuesC) { + auto h = handle->get_cusparse_spgemm_handle(); + + int nnzA = entriesA.extent(0); + int nnzB = entriesB.extent(0); + + // Only call numeric if C actually has entries + if (handle->get_c_nnz()) { + KOKKOS_CUSPARSE_SAFE_CALL(cusparseXcsrgemm( + h->cusparseHandle, CUSPARSE_OPERATION_NON_TRANSPOSE, + CUSPARSE_OPERATION_NON_TRANSPOSE, m, k, n, h->generalDescr, nnzA, + valuesA.data(), row_mapA.data(), entriesA.data(), h->generalDescr, nnzB, + valuesB.data(), row_mapB.data(), entriesB.data(), h->generalDescr, + valuesC.data(), row_mapC.data(), entriesC.data())); + } + handle->set_computed_entries(); + handle->set_call_numeric(); +} + +#endif + +#define SPGEMM_NUMERIC_DECL_CUSPARSE(SCALAR, MEMSPACE, TPL_AVAIL) \ + template <> \ + struct SPGEMM_NUMERIC, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, TPL_AVAIL> { \ + using KernelHandle = KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, Kokkos::Cuda, MEMSPACE, MEMSPACE>; \ + using c_int_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using int_view_t = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using c_scalar_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using scalar_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void spgemm_numeric(KernelHandle *handle, \ + typename KernelHandle::nnz_lno_t m, \ + typename KernelHandle::nnz_lno_t n, \ + typename KernelHandle::nnz_lno_t k, \ + c_int_view_t row_mapA, c_int_view_t entriesA, \ + c_scalar_view_t valuesA, bool, \ + c_int_view_t row_mapB, c_int_view_t entriesB, \ + c_scalar_view_t valuesB, bool, \ + c_int_view_t row_mapC, int_view_t entriesC, \ + scalar_view_t valuesC) { \ + std::string label = "KokkosSparse::spgemm_numeric[TPL_CUSPARSE," + \ + Kokkos::ArithTraits::name() + "]"; \ + Kokkos::Profiling::pushRegion(label); \ + spgemm_numeric_cusparse(handle->get_spgemm_handle(), m, n, k, row_mapA, \ + entriesA, valuesA, row_mapB, entriesB, valuesB, \ + row_mapC, entriesC, valuesC); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define SPGEMM_NUMERIC_DECL_CUSPARSE_S(SCALAR, TPL_AVAIL) \ + SPGEMM_NUMERIC_DECL_CUSPARSE(SCALAR, Kokkos::CudaSpace, TPL_AVAIL) \ + SPGEMM_NUMERIC_DECL_CUSPARSE(SCALAR, Kokkos::CudaUVMSpace, TPL_AVAIL) + +SPGEMM_NUMERIC_DECL_CUSPARSE_S(float, true) +SPGEMM_NUMERIC_DECL_CUSPARSE_S(double, true) +SPGEMM_NUMERIC_DECL_CUSPARSE_S(Kokkos::complex, true) +SPGEMM_NUMERIC_DECL_CUSPARSE_S(Kokkos::complex, true) + +SPGEMM_NUMERIC_DECL_CUSPARSE_S(float, false) +SPGEMM_NUMERIC_DECL_CUSPARSE_S(double, false) +SPGEMM_NUMERIC_DECL_CUSPARSE_S(Kokkos::complex, false) +SPGEMM_NUMERIC_DECL_CUSPARSE_S(Kokkos::complex, false) +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE +//============================================================================= +// Overload rocsparse_Xcsrgemm_numeric() over scalar types +#define ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(scalar_type, TOKEN) \ + inline rocsparse_status rocsparse_Xcsrgemm_numeric( \ + rocsparse_handle handle, rocsparse_operation trans_A, \ + rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, \ + rocsparse_int k, const scalar_type *alpha, \ + const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, \ + const scalar_type *csr_val_A, const rocsparse_int *csr_row_ptr_A, \ + const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, \ + rocsparse_int nnz_B, const scalar_type *csr_val_B, \ + const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, \ + const scalar_type *beta, const rocsparse_mat_descr descr_D, \ + rocsparse_int nnz_D, const scalar_type *csr_val_D, \ + const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, \ + const rocsparse_mat_descr descr_C, rocsparse_int nnz_C, \ + scalar_type *csr_val_C, const rocsparse_int *csr_row_ptr_C, \ + const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, \ + void *buffer) { \ + return rocsparse_##TOKEN##csrgemm_numeric( \ + handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, csr_val_A, \ + csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_val_B, \ + csr_row_ptr_B, csr_col_ind_B, beta, descr_D, nnz_D, csr_val_D, \ + csr_row_ptr_D, csr_col_ind_D, descr_C, nnz_C, csr_val_C, \ + csr_row_ptr_C, csr_col_ind_C, info_C, buffer); \ + } + +ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(float, s) +ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(double, d) +ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(rocsparse_float_complex, c) +ROCSPARSE_XCSRGEMM_NUMERIC_SPEC(rocsparse_double_complex, z) + +template < + typename KernelHandle, typename ain_row_index_view_type, + typename ain_nonzero_index_view_type, typename ain_nonzero_value_view_type, + typename bin_row_index_view_type, typename bin_nonzero_index_view_type, + typename bin_nonzero_value_view_type, typename cin_row_index_view_type, + typename cin_nonzero_index_view_type, typename cin_nonzero_value_view_type> +void spgemm_numeric_rocsparse( + KernelHandle *handle, typename KernelHandle::nnz_lno_t m, + typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, + ain_row_index_view_type rowptrA, ain_nonzero_index_view_type colidxA, + ain_nonzero_value_view_type valuesA, bin_row_index_view_type rowptrB, + bin_nonzero_index_view_type colidxB, bin_nonzero_value_view_type valuesB, + cin_row_index_view_type rowptrC, cin_nonzero_index_view_type colidxC, + cin_nonzero_value_view_type valuesC) { + using scalar_type = typename KernelHandle::nnz_scalar_t; + using rocsparse_scalar_type = + typename kokkos_to_rocsparse_type::type; + + typename KernelHandle::rocSparseSpgemmHandleType *h = + handle->get_rocsparse_spgemm_handle(); + + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); + rocsparse_pointer_mode oldPtrMode; + + auto nnz_A = colidxA.extent(0); + auto nnz_B = colidxB.extent(0); + auto nnz_C = colidxC.extent(0); + + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL( + rocsparse_get_pointer_mode(h->rocsparseHandle, &oldPtrMode)); + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_set_pointer_mode( + h->rocsparseHandle, rocsparse_pointer_mode_host)); + + if (!handle->are_entries_computed()) { + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_csrgemm_symbolic( + h->rocsparseHandle, h->opA, h->opB, m, k, n, h->descr_A, nnz_A, + rowptrA.data(), colidxA.data(), h->descr_B, nnz_B, rowptrB.data(), + colidxB.data(), h->descr_D, 0, nullptr, nullptr, h->descr_C, nnz_C, + rowptrC.data(), colidxC.data(), h->info_C, h->buffer)); + handle->set_computed_entries(); + } + + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_Xcsrgemm_numeric( + h->rocsparseHandle, h->opA, h->opB, m, k, n, + reinterpret_cast(&alpha), h->descr_A, + nnz_A, reinterpret_cast(valuesA.data()), + rowptrA.data(), colidxA.data(), h->descr_B, nnz_B, + reinterpret_cast(valuesB.data()), + rowptrB.data(), colidxB.data(), + reinterpret_cast(&beta), h->descr_D, 0, + nullptr, nullptr, nullptr, h->descr_C, nnz_C, + reinterpret_cast(valuesC.data()), rowptrC.data(), + colidxC.data(), h->info_C, h->buffer)); + // Restore old pointer mode + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL( + rocsparse_set_pointer_mode(h->rocsparseHandle, oldPtrMode)); + handle->set_call_numeric(); +} + +#define SPGEMM_NUMERIC_DECL_ROCSPARSE(SCALAR, TPL_AVAIL) \ + template <> \ + struct SPGEMM_NUMERIC< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, Kokkos::HIP, Kokkos::HIPSpace, \ + Kokkos::HIPSpace>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, TPL_AVAIL> { \ + using KernelHandle = KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, Kokkos::HIP, Kokkos::HIPSpace, \ + Kokkos::HIPSpace>; \ + using c_int_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using int_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using c_scalar_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using scalar_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void spgemm_numeric(KernelHandle *handle, \ + typename KernelHandle::nnz_lno_t m, \ + typename KernelHandle::nnz_lno_t n, \ + typename KernelHandle::nnz_lno_t k, \ + c_int_view_t row_mapA, c_int_view_t entriesA, \ + c_scalar_view_t valuesA, bool, \ + c_int_view_t row_mapB, c_int_view_t entriesB, \ + c_scalar_view_t valuesB, bool, \ + c_int_view_t row_mapC, int_view_t entriesC, \ + scalar_view_t valuesC) { \ + std::string label = "KokkosSparse::spgemm_numeric[TPL_ROCSPARSE," + \ + Kokkos::ArithTraits::name() + "]"; \ + Kokkos::Profiling::pushRegion(label); \ + spgemm_numeric_rocsparse(handle->get_spgemm_handle(), m, n, k, row_mapA, \ + entriesA, valuesA, row_mapB, entriesB, valuesB, \ + row_mapC, entriesC, valuesC); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +SPGEMM_NUMERIC_DECL_ROCSPARSE(float, true) +SPGEMM_NUMERIC_DECL_ROCSPARSE(double, true) +SPGEMM_NUMERIC_DECL_ROCSPARSE(Kokkos::complex, true) +SPGEMM_NUMERIC_DECL_ROCSPARSE(Kokkos::complex, true) + +SPGEMM_NUMERIC_DECL_ROCSPARSE(float, false) +SPGEMM_NUMERIC_DECL_ROCSPARSE(double, false) +SPGEMM_NUMERIC_DECL_ROCSPARSE(Kokkos::complex, false) +SPGEMM_NUMERIC_DECL_ROCSPARSE(Kokkos::complex, false) +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL +template < + typename KernelHandle, typename ain_row_index_view_type, + typename ain_nonzero_index_view_type, typename ain_nonzero_value_view_type, + typename bin_row_index_view_type, typename bin_nonzero_index_view_type, + typename bin_nonzero_value_view_type, typename cin_row_index_view_type, + typename cin_nonzero_index_view_type, typename cin_nonzero_value_view_type> +void spgemm_numeric_mkl( + KernelHandle *handle, typename KernelHandle::nnz_lno_t m, + typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, + ain_row_index_view_type rowptrA, ain_nonzero_index_view_type colidxA, + ain_nonzero_value_view_type valuesA, bin_row_index_view_type rowptrB, + bin_nonzero_index_view_type colidxB, bin_nonzero_value_view_type valuesB, + cin_row_index_view_type rowptrC, cin_nonzero_index_view_type colidxC, + cin_nonzero_value_view_type valuesC) { + using ExecSpace = typename KernelHandle::HandleExecSpace; + using index_type = typename KernelHandle::nnz_lno_t; + using size_type = typename KernelHandle::size_type; + using scalar_type = typename KernelHandle::nnz_scalar_t; + using MKLMatrix = MKLSparseMatrix; + size_type c_nnz = handle->get_c_nnz(); + if (c_nnz == size_type(0)) { + handle->set_computed_entries(); + handle->set_call_numeric(); + return; + } + MKLMatrix A(m, n, const_cast(rowptrA.data()), + const_cast(colidxA.data()), + const_cast(valuesA.data())); + MKLMatrix B(n, k, const_cast(rowptrB.data()), + const_cast(colidxB.data()), + const_cast(valuesB.data())); + auto mklSpgemmHandle = handle->get_mkl_spgemm_handle(); + bool computedEntries = false; + matrix_descr generalDescr; + generalDescr.type = SPARSE_MATRIX_TYPE_GENERAL; + generalDescr.mode = SPARSE_FILL_MODE_FULL; + generalDescr.diag = SPARSE_DIAG_NON_UNIT; + KOKKOSKERNELS_MKL_SAFE_CALL( + mkl_sparse_sp2m(SPARSE_OPERATION_NON_TRANSPOSE, generalDescr, A, + SPARSE_OPERATION_NON_TRANSPOSE, generalDescr, B, + SPARSE_STAGE_FINALIZE_MULT_NO_VAL, &mklSpgemmHandle->C)); + KOKKOSKERNELS_MKL_SAFE_CALL( + mkl_sparse_sp2m(SPARSE_OPERATION_NON_TRANSPOSE, generalDescr, A, + SPARSE_OPERATION_NON_TRANSPOSE, generalDescr, B, + SPARSE_STAGE_FINALIZE_MULT, &mklSpgemmHandle->C)); + KOKKOSKERNELS_MKL_SAFE_CALL(mkl_sparse_order(mklSpgemmHandle->C)); + MKLMatrix wrappedC(mklSpgemmHandle->C); + MKL_INT nrows = 0, ncols = 0; + MKL_INT *rowptrRaw = nullptr; + MKL_INT *colidxRaw = nullptr; + scalar_type *valuesRaw = nullptr; + wrappedC.export_data(nrows, ncols, rowptrRaw, colidxRaw, valuesRaw); + Kokkos::View> + colidxRawView(colidxRaw, c_nnz); + Kokkos::View> + valuesRawView(valuesRaw, c_nnz); + Kokkos::deep_copy(ExecSpace(), colidxC, colidxRawView); + Kokkos::deep_copy(ExecSpace(), valuesC, valuesRawView); + handle->set_call_numeric(); + handle->set_computed_entries(); +} + +#define SPGEMM_NUMERIC_DECL_MKL(SCALAR, EXEC, TPL_AVAIL) \ + template <> \ + struct SPGEMM_NUMERIC, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, TPL_AVAIL> { \ + using KernelHandle = KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, EXEC, Kokkos::HostSpace, \ + Kokkos::HostSpace>; \ + using c_int_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using int_view_t = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using c_scalar_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using scalar_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void spgemm_numeric(KernelHandle *handle, \ + typename KernelHandle::nnz_lno_t m, \ + typename KernelHandle::nnz_lno_t n, \ + typename KernelHandle::nnz_lno_t k, \ + c_int_view_t row_mapA, c_int_view_t entriesA, \ + c_scalar_view_t valuesA, bool, \ + c_int_view_t row_mapB, c_int_view_t entriesB, \ + c_scalar_view_t valuesB, bool, \ + c_int_view_t row_mapC, int_view_t entriesC, \ + scalar_view_t valuesC) { \ + std::string label = "KokkosSparse::spgemm_numeric[TPL_MKL," + \ + Kokkos::ArithTraits::name() + "]"; \ + Kokkos::Profiling::pushRegion(label); \ + spgemm_numeric_mkl(handle->get_spgemm_handle(), m, n, k, row_mapA, \ + entriesA, valuesA, row_mapB, entriesB, valuesB, \ + row_mapC, entriesC, valuesC); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define SPGEMM_NUMERIC_DECL_MKL_SE(SCALAR, EXEC) \ + SPGEMM_NUMERIC_DECL_MKL(SCALAR, EXEC, true) \ + SPGEMM_NUMERIC_DECL_MKL(SCALAR, EXEC, false) + +#define SPGEMM_NUMERIC_DECL_MKL_E(EXEC) \ + SPGEMM_NUMERIC_DECL_MKL_SE(float, EXEC) \ + SPGEMM_NUMERIC_DECL_MKL_SE(double, EXEC) \ + SPGEMM_NUMERIC_DECL_MKL_SE(Kokkos::complex, EXEC) \ + SPGEMM_NUMERIC_DECL_MKL_SE(Kokkos::complex, EXEC) + +#ifdef KOKKOS_ENABLE_SERIAL +SPGEMM_NUMERIC_DECL_MKL_E(Kokkos::Serial) +#endif +#ifdef KOKKOS_ENABLE_OPENMP +SPGEMM_NUMERIC_DECL_MKL_E(Kokkos::OpenMP) +#endif +#endif + +} // namespace Impl +} // namespace KokkosSparse + +#endif diff --git a/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_avail.hpp new file mode 100644 index 0000000000..b526619c18 --- /dev/null +++ b/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_avail.hpp @@ -0,0 +1,171 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSPARSE_SPGEMM_SYMBOLIC_TPL_SPEC_AVAIL_HPP_ +#define KOKKOSPARSE_SPGEMM_SYMBOLIC_TPL_SPEC_AVAIL_HPP_ + +namespace KokkosSparse { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct spgemm_symbolic_tpl_spec_avail { + enum : bool { value = false }; +}; + +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE +// NOTE: all versions of cuSPARSE 10.x and 11.x support exactly the same matrix +// types, so there is no ifdef'ing on versions needed in avail. Offset and +// Ordinal must both be 32-bit. Even though the "generic" API lets you specify +// offsets and ordinals independently as either 16, 32 or 64-bit, SpGEMM will +// just fail at runtime if you don't use 32 for both. + +#define SPGEMM_SYMBOLIC_AVAIL_CUSPARSE(SCALAR, MEMSPACE) \ + template <> \ + struct spgemm_symbolic_tpl_spec_avail< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, Kokkos::Cuda, MEMSPACE, \ + MEMSPACE>, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits > > { \ + enum : bool { value = true }; \ + }; + +#define SPGEMM_SYMBOLIC_AVAIL_CUSPARSE_S(SCALAR) \ + SPGEMM_SYMBOLIC_AVAIL_CUSPARSE(SCALAR, Kokkos::CudaSpace) \ + SPGEMM_SYMBOLIC_AVAIL_CUSPARSE(SCALAR, Kokkos::CudaUVMSpace) + +SPGEMM_SYMBOLIC_AVAIL_CUSPARSE_S(float) +SPGEMM_SYMBOLIC_AVAIL_CUSPARSE_S(double) +SPGEMM_SYMBOLIC_AVAIL_CUSPARSE_S(Kokkos::complex) +SPGEMM_SYMBOLIC_AVAIL_CUSPARSE_S(Kokkos::complex) +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE +#define SPGEMM_SYMBOLIC_AVAIL_ROCSPARSE(SCALAR) \ + template <> \ + struct spgemm_symbolic_tpl_spec_avail< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, Kokkos::HIP, Kokkos::HIPSpace, \ + Kokkos::HIPSpace>, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits > > { \ + enum : bool { value = true }; \ + }; + +SPGEMM_SYMBOLIC_AVAIL_ROCSPARSE(float) +SPGEMM_SYMBOLIC_AVAIL_ROCSPARSE(double) +SPGEMM_SYMBOLIC_AVAIL_ROCSPARSE(Kokkos::complex) +SPGEMM_SYMBOLIC_AVAIL_ROCSPARSE(Kokkos::complex) +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL +#define SPGEMM_SYMBOLIC_AVAIL_MKL(SCALAR, EXEC) \ + template <> \ + struct spgemm_symbolic_tpl_spec_avail< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, EXEC, Kokkos::HostSpace, \ + Kokkos::HostSpace>, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits > > { \ + enum : bool { value = true }; \ + }; + +#define SPGEMM_SYMBOLIC_AVAIL_MKL_E(EXEC) \ + SPGEMM_SYMBOLIC_AVAIL_MKL(float, EXEC) \ + SPGEMM_SYMBOLIC_AVAIL_MKL(double, EXEC) \ + SPGEMM_SYMBOLIC_AVAIL_MKL(Kokkos::complex, EXEC) \ + SPGEMM_SYMBOLIC_AVAIL_MKL(Kokkos::complex, EXEC) + +#ifdef KOKKOS_ENABLE_SERIAL +SPGEMM_SYMBOLIC_AVAIL_MKL_E(Kokkos::Serial) +#endif +#ifdef KOKKOS_ENABLE_OPENMP +SPGEMM_SYMBOLIC_AVAIL_MKL_E(Kokkos::OpenMP) +#endif +#endif + +} // namespace Impl +} // namespace KokkosSparse + +#endif diff --git a/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_decl.hpp new file mode 100644 index 0000000000..7db9ce5fc3 --- /dev/null +++ b/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_decl.hpp @@ -0,0 +1,686 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOSPARSE_SPGEMM_SYMBOLIC_TPL_SPEC_DECL_HPP_ +#define KOKKOSPARSE_SPGEMM_SYMBOLIC_TPL_SPEC_DECL_HPP_ + +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE +#include "cusparse.h" +#include "KokkosSparse_Utils_cusparse.hpp" +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE +#include "rocsparse/rocsparse.h" +#include "KokkosSparse_Utils_rocsparse.hpp" +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL +#include "KokkosSparse_Utils_mkl.hpp" +#include "mkl_spblas.h" +#endif + +namespace KokkosSparse { +namespace Impl { + +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE +// NOTE: all versions of cuSPARSE 10.x and 11.x support exactly the same matrix +// types, so there is no ifdef'ing on versions needed in avail. Offset and +// Ordinal must both be 32-bit. Even though the "generic" API lets you specify +// offsets and ordinals independently as either 16, 32 or 64-bit integers, +// cusparse will just fail at runtime if you don't use 32 for both. + +#if (CUDA_VERSION >= 11040) +// 11.4+ supports generic API with reuse (full symbolic/numeric separation) +// However, its "symbolic" (cusparseSpGEMMreuse_nnz) does not populate C's +// rowptrs. +template +void spgemm_symbolic_cusparse(KernelHandle *handle, lno_t m, lno_t n, lno_t k, + const ConstRowMapType &row_mapA, + const ConstEntriesType &entriesA, + const ConstRowMapType &row_mapB, + const ConstEntriesType &entriesB, + const RowMapType &row_mapC, bool computeRowptrs) { + // Split symbolic into two sub-phases: handle/buffer setup and nnz(C), and + // then rowptrs (if requested). That way, calling symbolic once with + // computeRowptrs=false, and then again with computeRowptrs=true will not + // duplicate any work. + if (!handle->is_symbolic_called()) { + handle->create_cusparse_spgemm_handle(false, false); + auto h = handle->get_cusparse_spgemm_handle(); + + // Follow + // https://github.com/NVIDIA/CUDALibrarySamples/tree/master/cuSPARSE/spgemm_reuse + void *buffer1 = nullptr; + void *buffer2 = nullptr; + size_t bufferSize1 = 0; + size_t bufferSize2 = 0; + + // When nnz is not zero, cusparseCreateCsr insists non-null a value pointer, + // which however is not available in this function. So we fake it with the + // entries instead. Fortunately, it seems cupsarse does not access that in + // the symbolic phase. + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &h->descr_A, m, n, entriesA.extent(0), (void *)row_mapA.data(), + (void *)entriesA.data(), (void *)entriesA.data() /*fake*/, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, + h->scalarType)); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &h->descr_B, n, k, entriesB.extent(0), (void *)row_mapB.data(), + (void *)entriesB.data(), (void *)entriesB.data() /*fake*/, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, + h->scalarType)); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &h->descr_C, m, k, 0, nullptr, nullptr, nullptr, CUSPARSE_INDEX_32I, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); + + //---------------------------------------------------------------------- + // ask bufferSize1 bytes for external memory + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_workEstimation( + h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, + h->alg, h->spgemmDescr, &bufferSize1, nullptr)); + + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&buffer1, bufferSize1)); + // inspect matrices A and B to understand the memory requirement for the + // next step + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_workEstimation( + h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, + h->alg, h->spgemmDescr, &bufferSize1, buffer1)); + + //---------------------------------------------------------------------- + // Compute nnz of C + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_nnz( + h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, + h->alg, h->spgemmDescr, &bufferSize2, nullptr, &h->bufferSize3, nullptr, + &h->bufferSize4, nullptr)); + + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&buffer2, bufferSize2)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaMalloc((void **)&h->buffer3, h->bufferSize3)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaMalloc((void **)&h->buffer4, h->bufferSize4)); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_nnz( + h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, + h->alg, h->spgemmDescr, &bufferSize2, buffer2, &h->bufferSize3, + h->buffer3, &h->bufferSize4, h->buffer4)); + + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer2)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer1)); + + int64_t C_nrow, C_ncol, C_nnz; + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSpMatGetSize(h->descr_C, &C_nrow, &C_ncol, &C_nnz)); + if (C_nnz > std::numeric_limits::max()) { + throw std::runtime_error("nnz of C overflowed over 32-bit int\n"); + } + handle->set_c_nnz(C_nnz); + handle->set_call_symbolic(); + } + if (computeRowptrs && !handle->are_rowptrs_computed()) { + using Scalar = typename KernelHandle::nnz_scalar_t; + using Ordinal = typename KernelHandle::nnz_lno_t; + using Offset = typename KernelHandle::size_type; + Ordinal *dummyEntries; + Scalar *dummyValues; + auto C_nnz = handle->get_c_nnz(); + auto h = handle->get_cusparse_spgemm_handle(); + // We just want rowptrs, but since C's entries/values are not yet allocated, + // we must use dummy versions and then discard them. + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaMalloc((void **)&dummyEntries, C_nnz * sizeof(Ordinal))); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaMalloc((void **)&dummyValues, C_nnz * sizeof(Scalar))); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCsrSetPointers( + h->descr_C, row_mapC.data(), dummyEntries, dummyValues)); + //-------------------------------------------------------------------------- + + cusparseSpGEMMreuse_copy(h->cusparseHandle, h->opA, h->opB, h->descr_A, + h->descr_B, h->descr_C, h->alg, h->spgemmDescr, + &h->bufferSize5, nullptr); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaMalloc((void **)&h->buffer5, h->bufferSize5)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMMreuse_copy( + h->cusparseHandle, h->opA, h->opB, h->descr_A, h->descr_B, h->descr_C, + h->alg, h->spgemmDescr, &h->bufferSize5, h->buffer5)); + if (!handle->get_c_nnz()) { + // cuSPARSE does not populate C rowptrs if C has no entries + Kokkos::deep_copy(typename KernelHandle::HandleExecSpace(), row_mapC, + Offset(0)); + } + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(dummyValues)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(dummyEntries)); + handle->set_computed_rowptrs(); + } +} + +#elif (CUDA_VERSION >= 11000) +// 11.0-11.3 supports only the generic API, but not reuse. +template +void spgemm_symbolic_cusparse(KernelHandle *handle, lno_t m, lno_t n, lno_t k, + const ConstRowMapType &row_mapA, + const ConstEntriesType &entriesA, + const ConstRowMapType &row_mapB, + const ConstEntriesType &entriesB, + const RowMapType &row_mapC, + bool /* computeRowptrs */) { + using scalar_type = typename KernelHandle::nnz_scalar_t; + using Offset = typename KernelHandle::size_type; + if (handle->is_symbolic_called() && handle->are_rowptrs_computed()) return; + handle->create_cusparse_spgemm_handle(false, false); + auto h = handle->get_cusparse_spgemm_handle(); + + // Follow + // https://github.com/NVIDIA/CUDALibrarySamples/blob/master/cuSPARSE/spgemm + + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); + + // In non-reuse interface, forced to give A,B dummy values to + // cusparseSpGEMM_compute. And it actually reads them, so they must be + // allocated and of the correct type. This compute will be called again in + // numeric with the real values. + // + // The dummy values can be uninitialized. cusparseSpGEMM_compute does + // not remove numerical zeros from the sparsity pattern. + void *dummyValues; + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc( + &dummyValues, + sizeof(scalar_type) * std::max(entriesA.extent(0), entriesB.extent(0)))); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &h->descr_A, m, n, entriesA.extent(0), (void *)row_mapA.data(), + (void *)entriesA.data(), dummyValues, CUSPARSE_INDEX_32I, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &h->descr_B, n, k, entriesB.extent(0), (void *)row_mapB.data(), + (void *)entriesB.data(), dummyValues, CUSPARSE_INDEX_32I, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); + + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCreateCsr(&h->descr_C, m, k, 0, row_mapC.data(), nullptr, nullptr, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, + CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); + + //---------------------------------------------------------------------- + // query workEstimation buffer size, allocate, then call again with buffer. + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_workEstimation( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, h->alg, h->spgemmDescr, &h->bufferSize3, + nullptr)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&h->buffer3, h->bufferSize3)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_workEstimation( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, h->alg, h->spgemmDescr, &h->bufferSize3, + h->buffer3)); + cudaFree(h->buffer3); + h->buffer3 = nullptr; + + //---------------------------------------------------------------------- + // query compute buffer size, allocate, then call again with buffer. + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr, + &h->bufferSize4, nullptr)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&h->buffer4, h->bufferSize4)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, + h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr, + &h->bufferSize4, h->buffer4)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(dummyValues)); + + int64_t C_nrow, C_ncol, C_nnz; + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSpMatGetSize(h->descr_C, &C_nrow, &C_ncol, &C_nnz)); + if (C_nnz > std::numeric_limits::max()) { + throw std::runtime_error("nnz of C overflowed over 32-bit int\n"); + } + handle->set_c_nnz(C_nnz); + handle->set_call_symbolic(); + handle->set_computed_rowptrs(); +} + +#else +// 10.x supports the pre-generic interface (cusparseXcsrgemmNnz). It always +// populates C rowptrs. +template +void spgemm_symbolic_cusparse(KernelHandle *handle, lno_t m, lno_t n, lno_t k, + const ConstRowMapType &row_mapA, + const ConstEntriesType &entriesA, + const ConstRowMapType &row_mapB, + const ConstEntriesType &entriesB, + const RowMapType &row_mapC, + bool /* computeRowptrs */) { + // using scalar_type = typename KernelHandle::nnz_scalar_t; + using size_type = typename KernelHandle::size_type; + if (handle->are_rowptrs_computed()) return; + handle->create_cusparse_spgemm_handle(false, false); + auto h = handle->get_cusparse_spgemm_handle(); + int nnzA = entriesA.extent(0); + int nnzB = entriesB.extent(0); + + int baseC, nnzC; + int *nnzTotalDevHostPtr = &nnzC; + + // In empty (zero entries) matrix case, cusparse does not populate rowptrs to + // zeros + if (m == 0 || n == 0 || k == 0 || entriesA.extent(0) == size_type(0) || + entriesB.extent(0) == size_type(0)) { + Kokkos::deep_copy(typename KernelHandle::HandleExecSpace(), row_mapC, + size_type(0)); + nnzC = 0; + } else { + KOKKOS_CUSPARSE_SAFE_CALL(cusparseXcsrgemmNnz( + h->cusparseHandle, CUSPARSE_OPERATION_NON_TRANSPOSE, + CUSPARSE_OPERATION_NON_TRANSPOSE, m, k, n, h->generalDescr, nnzA, + row_mapA.data(), entriesA.data(), h->generalDescr, nnzB, + row_mapB.data(), entriesB.data(), h->generalDescr, row_mapC.data(), + nnzTotalDevHostPtr)); + if (nullptr != nnzTotalDevHostPtr) { + nnzC = *nnzTotalDevHostPtr; + } else { + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMemcpy( + &nnzC, row_mapC.data() + m, sizeof(int), cudaMemcpyDeviceToHost)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMemcpy( + &baseC, row_mapC.data(), sizeof(int), cudaMemcpyDeviceToHost)); + nnzC -= baseC; + } + } + handle->set_c_nnz(nnzC); + handle->set_call_symbolic(); + handle->set_computed_rowptrs(); +} + +#endif + +#define SPGEMM_SYMBOLIC_DECL_CUSPARSE(SCALAR, MEMSPACE, TPL_AVAIL) \ + template <> \ + struct SPGEMM_SYMBOLIC< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, Kokkos::Cuda, MEMSPACE, \ + MEMSPACE>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, TPL_AVAIL> { \ + using KernelHandle = KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, Kokkos::Cuda, MEMSPACE, MEMSPACE>; \ + using c_int_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using int_view_t = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void spgemm_symbolic(KernelHandle *handle, \ + typename KernelHandle::nnz_lno_t m, \ + typename KernelHandle::nnz_lno_t n, \ + typename KernelHandle::nnz_lno_t k, \ + c_int_view_t row_mapA, c_int_view_t entriesA, \ + bool, c_int_view_t row_mapB, \ + c_int_view_t entriesB, bool, \ + int_view_t row_mapC, bool computeRowptrs) { \ + std::string label = "KokkosSparse::spgemm[TPL_CUSPARSE," + \ + Kokkos::ArithTraits::name() + "]"; \ + Kokkos::Profiling::pushRegion(label); \ + spgemm_symbolic_cusparse(handle->get_spgemm_handle(), m, n, k, row_mapA, \ + entriesA, row_mapB, entriesB, row_mapC, \ + computeRowptrs); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define SPGEMM_SYMBOLIC_DECL_CUSPARSE_S(SCALAR, TPL_AVAIL) \ + SPGEMM_SYMBOLIC_DECL_CUSPARSE(SCALAR, Kokkos::CudaSpace, TPL_AVAIL) \ + SPGEMM_SYMBOLIC_DECL_CUSPARSE(SCALAR, Kokkos::CudaUVMSpace, TPL_AVAIL) + +SPGEMM_SYMBOLIC_DECL_CUSPARSE_S(float, true) +SPGEMM_SYMBOLIC_DECL_CUSPARSE_S(double, true) +SPGEMM_SYMBOLIC_DECL_CUSPARSE_S(Kokkos::complex, true) +SPGEMM_SYMBOLIC_DECL_CUSPARSE_S(Kokkos::complex, true) + +SPGEMM_SYMBOLIC_DECL_CUSPARSE_S(float, false) +SPGEMM_SYMBOLIC_DECL_CUSPARSE_S(double, false) +SPGEMM_SYMBOLIC_DECL_CUSPARSE_S(Kokkos::complex, false) +SPGEMM_SYMBOLIC_DECL_CUSPARSE_S(Kokkos::complex, false) + +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE +//============================================================================= +// Overload rocsparse_Xcsrgemm_buffer_size() over scalar types +#define ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(scalar_type, TOKEN) \ + inline rocsparse_status rocsparse_Xcsrgemm_buffer_size( \ + rocsparse_handle handle, rocsparse_operation trans_A, \ + rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, \ + rocsparse_int k, const scalar_type *alpha, \ + const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, \ + const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, \ + const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, \ + const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, \ + const scalar_type *beta, const rocsparse_mat_descr descr_D, \ + rocsparse_int nnz_D, const rocsparse_int *csr_row_ptr_D, \ + const rocsparse_int *csr_col_ind_D, rocsparse_mat_info info_C, \ + size_t *buffer_size) { \ + return rocsparse_##TOKEN##csrgemm_buffer_size( \ + handle, trans_A, trans_B, m, n, k, alpha, descr_A, nnz_A, \ + csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, \ + csr_col_ind_B, beta, descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, \ + info_C, buffer_size); \ + } + +ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(float, s) +ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(double, d) +ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(rocsparse_float_complex, c) +ROCSPARSE_XCSRGEMM_BUFFER_SIZE_SPEC(rocsparse_double_complex, z) + +template < + typename KernelHandle, typename ain_row_index_view_type, + typename ain_nonzero_index_view_type, typename bin_row_index_view_type, + typename bin_nonzero_index_view_type, typename cin_row_index_view_type> +void spgemm_symbolic_rocsparse( + KernelHandle *handle, typename KernelHandle::nnz_lno_t m, + typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, + ain_row_index_view_type rowptrA, ain_nonzero_index_view_type colidxA, + bin_row_index_view_type rowptrB, bin_nonzero_index_view_type colidxB, + cin_row_index_view_type rowptrC) { + using index_type = typename KernelHandle::nnz_lno_t; + using scalar_type = typename KernelHandle::nnz_scalar_t; + using rocsparse_scalar_type = + typename kokkos_to_rocsparse_type::type; + + auto nnz_A = colidxA.extent(0); + auto nnz_B = colidxB.extent(0); + + if (handle->is_symbolic_called()) { + return; + } + handle->create_rocsparse_spgemm_handle(false, false); + typename KernelHandle::rocSparseSpgemmHandleType *h = + handle->get_rocsparse_spgemm_handle(); + + // alpha, beta are on host, but since we use singleton on the rocsparse + // handle, we save/restore the pointer mode to not interference with + // others' use + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); + rocsparse_pointer_mode oldPtrMode; + + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL( + rocsparse_get_pointer_mode(h->rocsparseHandle, &oldPtrMode)); + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_set_pointer_mode( + h->rocsparseHandle, rocsparse_pointer_mode_host)); + + // C = alpha * OpA(A) * OpB(B) + beta * D + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_Xcsrgemm_buffer_size( + h->rocsparseHandle, h->opA, h->opB, m, k, n, + reinterpret_cast(&alpha), h->descr_A, + nnz_A, rowptrA.data(), colidxA.data(), h->descr_B, nnz_B, rowptrB.data(), + colidxB.data(), reinterpret_cast(&beta), + h->descr_D, 0, nullptr, nullptr, h->info_C, &h->bufferSize)); + + KOKKOS_IMPL_HIP_SAFE_CALL(hipMalloc(&h->buffer, h->bufferSize)); + + rocsparse_int nnz_C = 0; + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL(rocsparse_csrgemm_nnz( + h->rocsparseHandle, h->opA, h->opB, m, k, n, h->descr_A, nnz_A, + rowptrA.data(), colidxA.data(), h->descr_B, nnz_B, rowptrB.data(), + colidxB.data(), h->descr_D, 0, nullptr, nullptr, h->descr_C, + rowptrC.data(), &nnz_C, h->info_C, h->buffer)); + // If C has zero rows, its rowptrs are not populated + if (m == 0) { + KOKKOS_IMPL_HIP_SAFE_CALL( + hipMemset(rowptrC.data(), 0, rowptrC.extent(0) * sizeof(index_type))); + } + // Restore previous pointer mode + KOKKOS_ROCSPARSE_SAFE_CALL_IMPL( + rocsparse_set_pointer_mode(h->rocsparseHandle, oldPtrMode)); + + handle->set_c_nnz(nnz_C); + handle->set_call_symbolic(); + handle->set_computed_rowptrs(); +} + +#define SPGEMM_SYMBOLIC_DECL_ROCSPARSE(SCALAR, TPL_AVAIL) \ + template <> \ + struct SPGEMM_SYMBOLIC< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, Kokkos::HIP, Kokkos::HIPSpace, \ + Kokkos::HIPSpace>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, TPL_AVAIL> { \ + using KernelHandle = KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, Kokkos::HIP, Kokkos::HIPSpace, \ + Kokkos::HIPSpace>; \ + using c_int_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using int_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void spgemm_symbolic(KernelHandle *handle, \ + typename KernelHandle::nnz_lno_t m, \ + typename KernelHandle::nnz_lno_t n, \ + typename KernelHandle::nnz_lno_t k, \ + c_int_view_t row_mapA, c_int_view_t entriesA, \ + bool, c_int_view_t row_mapB, \ + c_int_view_t entriesB, bool, \ + int_view_t row_mapC, bool) { \ + std::string label = "KokkosSparse::spgemm[TPL_ROCSPARSE," + \ + Kokkos::ArithTraits::name() + "]"; \ + Kokkos::Profiling::pushRegion(label); \ + spgemm_symbolic_rocsparse(handle->get_spgemm_handle(), m, n, k, \ + row_mapA, entriesA, row_mapB, entriesB, \ + row_mapC); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +SPGEMM_SYMBOLIC_DECL_ROCSPARSE(float, false) +SPGEMM_SYMBOLIC_DECL_ROCSPARSE(double, false) +SPGEMM_SYMBOLIC_DECL_ROCSPARSE(Kokkos::complex, false) +SPGEMM_SYMBOLIC_DECL_ROCSPARSE(Kokkos::complex, false) + +SPGEMM_SYMBOLIC_DECL_ROCSPARSE(float, true) +SPGEMM_SYMBOLIC_DECL_ROCSPARSE(double, true) +SPGEMM_SYMBOLIC_DECL_ROCSPARSE(Kokkos::complex, true) +SPGEMM_SYMBOLIC_DECL_ROCSPARSE(Kokkos::complex, true) +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL +template < + typename KernelHandle, typename ain_row_index_view_type, + typename ain_nonzero_index_view_type, typename bin_row_index_view_type, + typename bin_nonzero_index_view_type, typename cin_row_index_view_type> +void spgemm_symbolic_mkl( + KernelHandle *handle, typename KernelHandle::nnz_lno_t m, + typename KernelHandle::nnz_lno_t n, typename KernelHandle::nnz_lno_t k, + ain_row_index_view_type rowptrA, ain_nonzero_index_view_type colidxA, + bin_row_index_view_type rowptrB, bin_nonzero_index_view_type colidxB, + cin_row_index_view_type rowptrC) { + using ExecSpace = typename KernelHandle::HandleExecSpace; + using index_type = typename KernelHandle::nnz_lno_t; + using size_type = typename KernelHandle::size_type; + using scalar_type = typename KernelHandle::nnz_scalar_t; + using MKLMatrix = MKLSparseMatrix; + if (m == 0 || n == 0 || k == 0 || colidxA.extent(0) == size_type(0) || + colidxB.extent(0) == size_type(0)) { + Kokkos::deep_copy(ExecSpace(), rowptrC, size_type(0)); + handle->set_call_symbolic(); + handle->set_computed_rowptrs(); + handle->set_c_nnz(0); + return; + } + MKLMatrix A(m, n, (int *)rowptrA.data(), (int *)colidxA.data(), nullptr); + MKLMatrix B(n, k, (int *)rowptrB.data(), (int *)colidxB.data(), nullptr); + sparse_matrix_t C; + matrix_descr generalDescr; + generalDescr.type = SPARSE_MATRIX_TYPE_GENERAL; + generalDescr.mode = SPARSE_FILL_MODE_FULL; + generalDescr.diag = SPARSE_DIAG_NON_UNIT; + KOKKOSKERNELS_MKL_SAFE_CALL( + mkl_sparse_sp2m(SPARSE_OPERATION_NON_TRANSPOSE, generalDescr, A, + SPARSE_OPERATION_NON_TRANSPOSE, generalDescr, B, + SPARSE_STAGE_NNZ_COUNT, &C)); + MKLMatrix wrappedC(C); + MKL_INT nrows = 0, ncols = 0; + MKL_INT *rowptrRaw = nullptr; + MKL_INT *colidxRaw = nullptr; + scalar_type *valuesRaw = nullptr; + wrappedC.export_data(nrows, ncols, rowptrRaw, colidxRaw, valuesRaw); + Kokkos::View> + rowptrRawView(rowptrRaw, nrows + 1); + Kokkos::deep_copy(ExecSpace(), rowptrC, rowptrRawView); + handle->create_mkl_spgemm_handle(C); + handle->set_call_symbolic(); + handle->set_computed_rowptrs(); + handle->set_c_nnz(rowptrC(m)); +} + +#define SPGEMM_SYMBOLIC_DECL_MKL(SCALAR, EXEC, TPL_AVAIL) \ + template <> \ + struct SPGEMM_SYMBOLIC< \ + KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, EXEC, Kokkos::HostSpace, \ + Kokkos::HostSpace>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + Kokkos::View, \ + Kokkos::MemoryTraits>, \ + true, TPL_AVAIL> { \ + using KernelHandle = KokkosKernels::Experimental::KokkosKernelsHandle< \ + const int, const int, const SCALAR, EXEC, Kokkos::HostSpace, \ + Kokkos::HostSpace>; \ + using c_int_view_t = \ + Kokkos::View, \ + Kokkos::MemoryTraits>; \ + using int_view_t = Kokkos::View, \ + Kokkos::MemoryTraits>; \ + static void spgemm_symbolic(KernelHandle *handle, \ + typename KernelHandle::nnz_lno_t m, \ + typename KernelHandle::nnz_lno_t n, \ + typename KernelHandle::nnz_lno_t k, \ + c_int_view_t row_mapA, c_int_view_t entriesA, \ + bool, c_int_view_t row_mapB, \ + c_int_view_t entriesB, bool, \ + int_view_t row_mapC, bool) { \ + std::string label = "KokkosSparse::spgemm_symbolic[TPL_MKL," + \ + Kokkos::ArithTraits::name() + "]"; \ + Kokkos::Profiling::pushRegion(label); \ + spgemm_symbolic_mkl(handle->get_spgemm_handle(), m, n, k, row_mapA, \ + entriesA, row_mapB, entriesB, row_mapC); \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define SPGEMM_SYMBOLIC_DECL_MKL_SE(SCALAR, EXEC) \ + SPGEMM_SYMBOLIC_DECL_MKL(SCALAR, EXEC, true) \ + SPGEMM_SYMBOLIC_DECL_MKL(SCALAR, EXEC, false) + +#define SPGEMM_SYMBOLIC_DECL_MKL_E(EXEC) \ + SPGEMM_SYMBOLIC_DECL_MKL_SE(float, EXEC) \ + SPGEMM_SYMBOLIC_DECL_MKL_SE(double, EXEC) \ + SPGEMM_SYMBOLIC_DECL_MKL_SE(Kokkos::complex, EXEC) \ + SPGEMM_SYMBOLIC_DECL_MKL_SE(Kokkos::complex, EXEC) + +#ifdef KOKKOS_ENABLE_SERIAL +SPGEMM_SYMBOLIC_DECL_MKL_E(Kokkos::Serial) +#endif +#ifdef KOKKOS_ENABLE_OPENMP +SPGEMM_SYMBOLIC_DECL_MKL_E(Kokkos::OpenMP) +#endif +#endif + +} // namespace Impl +} // namespace KokkosSparse + +#endif diff --git a/sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp index b4c73a12ff..bf65961131 100644 --- a/sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp @@ -370,7 +370,7 @@ KOKKOSSPARSE_SPMV_CUSPARSE(Kokkos::complex, int64_t, size_t, // rocSPARSE #if defined(KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE) -#include +#include #include "KokkosSparse_Utils_rocsparse.hpp" namespace KokkosSparse { diff --git a/sparse/unit_test/Test_Sparse_CrsMatrix.hpp b/sparse/unit_test/Test_Sparse_CrsMatrix.hpp index 27152d76a6..8a85e43670 100644 --- a/sparse/unit_test/Test_Sparse_CrsMatrix.hpp +++ b/sparse/unit_test/Test_Sparse_CrsMatrix.hpp @@ -47,6 +47,7 @@ #include #include #include "KokkosSparse_CrsMatrix.hpp" +#include "Kokkos_ArithTraits.hpp" // #ifndef kokkos_complex_double // #define kokkos_complex_double Kokkos::complex diff --git a/sparse/unit_test/Test_Sparse_bspgemm.hpp b/sparse/unit_test/Test_Sparse_bspgemm.hpp index 1b9ec84651..7ac382ad01 100644 --- a/sparse/unit_test/Test_Sparse_bspgemm.hpp +++ b/sparse/unit_test/Test_Sparse_bspgemm.hpp @@ -121,7 +121,7 @@ bool is_same_block_matrix(bsrMat_t output_mat_actual, return false; } - KokkosSparse::sort_bsr_matrix(output_mat_actual); + // Do not sort the actual product matrix - test that it's already sorted KokkosSparse::sort_bsr_matrix(output_mat_reference); bool is_identical = true; @@ -153,7 +153,7 @@ bool is_same_block_matrix(bsrMat_t output_mat_actual, typedef typename Kokkos::Details::ArithTraits< typename scalar_view_t::non_const_value_type>::mag_type eps_type; - eps_type eps = std::is_same::value ? 3.7e-3 : 1e-7; + eps_type eps = std::is_same::value ? 3e-2 : 5e-7; is_identical = KokkosKernels::Impl::kk_is_relatively_identical_view< scalar_view_t, scalar_view_t, eps_type, typename device::execution_space>( @@ -202,17 +202,16 @@ void test_bspgemm(lno_t blkDim, lno_t m, lno_t k, lno_t n, size_type nnz, bsrMat_t B = KokkosSparse::Impl::kk_generate_sparse_matrix( blkDim, k, n, nnz, row_size_variance, bandwidth); - const bool is_empy_case = m < 1 || n < 1 || k < 1 || nnz < 1; + KokkosSparse::sort_bsr_matrix(A); + KokkosSparse::sort_bsr_matrix(B); bsrMat_t output_mat2; run_block_spgemm(A, B, output_mat2, SPGEMM_DEBUG, use_dynamic_scheduling, shared_memory_size); std::vector algorithms = { - SPGEMM_KK, - SPGEMM_KK_MEMORY /* alias SPGEMM_KK_MEMSPEED */, - SPGEMM_KK_SPEED /* alias SPGEMM_KK_DENSE */, - SPGEMM_MKL /* verify failure in case of missing build */, + SPGEMM_KK, SPGEMM_KK_MEMORY /* alias SPGEMM_KK_MEMSPEED */, + SPGEMM_KK_SPEED /* alias SPGEMM_KK_DENSE */ }; if (!KokkosKernels::Impl::kk_is_gpu_exec_space< @@ -223,41 +222,10 @@ void test_bspgemm(lno_t blkDim, lno_t m, lno_t k, lno_t n, size_type nnz, } for (auto spgemm_algorithm : algorithms) { - const uint64_t max_integer = Kokkos::ArithTraits::max(); - std::string algo = "UNKNOWN"; - bool is_expected_to_fail = false; + std::string algo = "UNKNOWN"; + bool is_expected_to_fail = false; switch (spgemm_algorithm) { - case SPGEMM_CUSPARSE: - // TODO: add these test failure cases for cusparse too. - algo = "SPGEMM_CUSPARSE"; -#ifndef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE - is_expected_to_fail = true; -#endif - break; - - case SPGEMM_MKL: - algo = "SPGEMM_MKL"; - is_expected_to_fail = !is_empy_case; // TODO: add block MKL impl -#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL - if (!KokkosSparse::Impl::mkl_is_supported_value_type::value) { - is_expected_to_fail = true; - } -#else - is_expected_to_fail = true; // fail: MKL not enabled in build -#endif - // MKL requires local ordinals to be int. - // Note: empty-array special case will NOT fail on this. - if (!std::is_same::value && !is_empy_case) { - is_expected_to_fail = true; - } - // if size_type is larger than int, mkl casts it to int. - // it will fail if casting cause overflow. - if (A.values.extent(0) > max_integer) { - is_expected_to_fail = true; - } - break; - case SPGEMM_KK: algo = "SPGEMM_KK"; break; case SPGEMM_KK_LP: algo = "SPGEMM_KK_LP"; break; case SPGEMM_KK_MEMSPEED: algo = "SPGEMM_KK_MEMSPEED"; break; diff --git a/sparse/unit_test/Test_Sparse_rocsparse.hpp b/sparse/unit_test/Test_Sparse_rocsparse.hpp index fe1bf8e9b2..0c4d2303ef 100644 --- a/sparse/unit_test/Test_Sparse_rocsparse.hpp +++ b/sparse/unit_test/Test_Sparse_rocsparse.hpp @@ -6,7 +6,7 @@ #include #include -#include +#include #include "KokkosSparse_Utils_rocsparse.hpp" void test_rocsparse_version() { diff --git a/sparse/unit_test/Test_Sparse_spgemm.hpp b/sparse/unit_test/Test_Sparse_spgemm.hpp index 2f425b07d2..1e60b35b81 100644 --- a/sparse/unit_test/Test_Sparse_spgemm.hpp +++ b/sparse/unit_test/Test_Sparse_spgemm.hpp @@ -66,10 +66,6 @@ // const char *input_filename = "Si2.mtx"; // const char *input_filename = "wathen_30_30.mtx"; // const size_t expected_num_cols = 9906; -using namespace KokkosSparse; -using namespace KokkosSparse::Experimental; -using namespace KokkosKernels; -using namespace KokkosKernels::Experimental; // #ifndef kokkos_complex_double // #define kokkos_complex_double Kokkos::complex @@ -81,9 +77,21 @@ typedef Kokkos::complex kokkos_complex_float; namespace Test { +// Randomize matrix values again from the same uniform distribution as +// kk_generate_sparse_matrix uses. +template +void randomize_matrix_values(const Values &v) { + using ScalarType = typename Values::value_type; + ScalarType randStart, randEnd; + KokkosKernels::Impl::getRandomBounds(50.0, randStart, randEnd); + Kokkos::Random_XorShift64_Pool pool(13718); + Kokkos::fill_random(v, pool, randStart, randEnd); +} + template int run_spgemm(crsMat_t A, crsMat_t B, - KokkosSparse::SPGEMMAlgorithm spgemm_algorithm, crsMat_t &C) { + KokkosSparse::SPGEMMAlgorithm spgemm_algorithm, crsMat_t &C, + bool testReuse) { typedef typename crsMat_t::size_type size_type; typedef typename crsMat_t::ordinal_type lno_t; typedef typename crsMat_t::value_type scalar_t; @@ -98,18 +106,41 @@ int run_spgemm(crsMat_t A, crsMat_t B, kh.set_dynamic_scheduling(true); kh.create_spgemm_handle(spgemm_algorithm); + { + auto sh = kh.get_spgemm_handle(); + + EXPECT_FALSE(sh->is_symbolic_called()); + EXPECT_FALSE(sh->is_numeric_called()); + EXPECT_FALSE(sh->are_rowptrs_computed()); + EXPECT_FALSE(sh->are_entries_computed()); + + KokkosSparse::spgemm_symbolic(kh, A, false, B, false, C); - KokkosSparse::spgemm_symbolic(kh, A, false, B, false, C); - KokkosSparse::spgemm_numeric(kh, A, false, B, false, C); + EXPECT_TRUE(sh->is_symbolic_called()); + + KokkosSparse::spgemm_numeric(kh, A, false, B, false, C); + + EXPECT_TRUE(sh->are_entries_computed()); + EXPECT_TRUE(sh->is_numeric_called()); + + if (testReuse) { + // Give A and B completely new random values, and re-run just numeric + randomize_matrix_values(A.values); + randomize_matrix_values(B.values); + KokkosSparse::spgemm_numeric(kh, A, false, B, false, C); + EXPECT_TRUE(sh->are_entries_computed()); + EXPECT_TRUE(sh->is_numeric_called()); + } + } kh.destroy_spgemm_handle(); return 0; } template -int run_spgemm_old_interface(crsMat_t input_mat, crsMat_t input_mat2, +int run_spgemm_old_interface(crsMat_t A, crsMat_t B, KokkosSparse::SPGEMMAlgorithm spgemm_algorithm, - crsMat_t &result) { + crsMat_t &result, bool testReuse) { typedef typename crsMat_t::StaticCrsGraphType graph_t; typedef typename graph_t::row_map_type::non_const_type lno_view_t; typedef typename graph_t::entries_type::non_const_type lno_nnz_view_t; @@ -130,42 +161,62 @@ int run_spgemm_old_interface(crsMat_t input_mat, crsMat_t input_mat2, // kh.set_verbose(true); kh.create_spgemm_handle(spgemm_algorithm); + { + auto sh = kh.get_spgemm_handle(); + + const size_t num_rows_A = A.numRows(); + const size_t num_rows_B = B.numRows(); + const size_t num_cols_B = B.numCols(); + + lno_view_t row_mapC("non_const_lnow_row", num_rows_A + 1); + lno_nnz_view_t entriesC; + scalar_view_t valuesC; + + EXPECT_FALSE(sh->is_symbolic_called()); + EXPECT_FALSE(sh->is_numeric_called()); + EXPECT_FALSE(sh->are_rowptrs_computed()); + EXPECT_FALSE(sh->are_entries_computed()); + + KokkosSparse::Experimental::spgemm_symbolic( + &kh, num_rows_A, num_rows_B, num_cols_B, A.graph.row_map, + A.graph.entries, false, B.graph.row_map, B.graph.entries, false, + row_mapC); + + EXPECT_TRUE(sh->is_symbolic_called()); + + size_t c_nnz_size = kh.get_spgemm_handle()->get_c_nnz(); + entriesC = lno_nnz_view_t( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "entriesC"), + c_nnz_size); + valuesC = scalar_view_t( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "valuesC"), c_nnz_size); + KokkosSparse::Experimental::spgemm_numeric( + &kh, num_rows_A, num_rows_B, num_cols_B, A.graph.row_map, + A.graph.entries, A.values, false, B.graph.row_map, B.graph.entries, + B.values, false, row_mapC, entriesC, valuesC); + + EXPECT_TRUE(sh->are_entries_computed()); + EXPECT_TRUE(sh->is_numeric_called()); + + if (testReuse) { + // Give A and B completely new random values, and re-run just numeric + randomize_matrix_values(A.values); + randomize_matrix_values(B.values); + KokkosSparse::Experimental::spgemm_numeric( + &kh, num_rows_A, num_rows_B, num_cols_B, A.graph.row_map, + A.graph.entries, A.values, false, B.graph.row_map, B.graph.entries, + B.values, false, row_mapC, entriesC, valuesC); + EXPECT_TRUE(sh->are_entries_computed()); + EXPECT_TRUE(sh->is_numeric_called()); + } - const size_t num_rows_1 = input_mat.numRows(); - const size_t num_rows_2 = input_mat2.numRows(); - const size_t num_cols_2 = input_mat2.numCols(); - - const size_t num_cols_1 = input_mat.numCols(); - bool equal = num_rows_2 == num_cols_1; - if (!equal) return 1; - - lno_view_t row_mapC("non_const_lnow_row", num_rows_1 + 1); - lno_nnz_view_t entriesC; - scalar_view_t valuesC; - - spgemm_symbolic(&kh, num_rows_1, num_rows_2, num_cols_2, - input_mat.graph.row_map, input_mat.graph.entries, false, - input_mat2.graph.row_map, input_mat2.graph.entries, false, - row_mapC); - - size_t c_nnz_size = kh.get_spgemm_handle()->get_c_nnz(); - entriesC = lno_nnz_view_t( - Kokkos::view_alloc(Kokkos::WithoutInitializing, "entriesC"), c_nnz_size); - valuesC = scalar_view_t( - Kokkos::view_alloc(Kokkos::WithoutInitializing, "valuesC"), c_nnz_size); - spgemm_numeric(&kh, num_rows_1, num_rows_2, num_cols_2, - input_mat.graph.row_map, input_mat.graph.entries, - input_mat.values, false, - - input_mat2.graph.row_map, input_mat2.graph.entries, - input_mat2.values, false, row_mapC, entriesC, valuesC); - - graph_t static_graph(entriesC, row_mapC); - result = crsMat_t("CrsMatrix", num_cols_2, valuesC, static_graph); + graph_t static_graph(entriesC, row_mapC); + result = crsMat_t("CrsMatrix", num_cols_B, valuesC, static_graph); + } kh.destroy_spgemm_handle(); - return 0; } + template bool is_same_matrix(crsMat_t output_mat_actual, crsMat_t output_mat_reference) { typedef typename crsMat_t::StaticCrsGraphType graph_t; @@ -197,7 +248,7 @@ bool is_same_matrix(crsMat_t output_mat_actual, crsMat_t output_mat_reference) { return false; } - KokkosSparse::sort_crs_matrix(output_mat_actual); + // Do not sort the actual product matrix - test that it's already sorted KokkosSparse::sort_crs_matrix(output_mat_reference); bool is_identical = true; @@ -209,9 +260,10 @@ bool is_same_matrix(crsMat_t output_mat_actual, crsMat_t output_mat_reference) { if (!is_identical) { std::cout << "rowmaps are different." << std::endl; std::cout << "Actual rowmap:\n"; - KokkosKernels::Impl::kk_print_1Dview(output_mat_actual.graph.row_map); + KokkosKernels::Impl::kk_print_1Dview(output_mat_actual.graph.row_map, true); std::cout << "Correct rowmap (SPGEMM_DEBUG):\n"; - KokkosKernels::Impl::kk_print_1Dview(output_mat_reference.graph.row_map); + KokkosKernels::Impl::kk_print_1Dview(output_mat_reference.graph.row_map, + true); return false; } @@ -251,7 +303,8 @@ bool is_same_matrix(crsMat_t output_mat_actual, crsMat_t output_mat_reference) { template void test_spgemm(lno_t m, lno_t k, lno_t n, size_type nnz, lno_t bandwidth, - lno_t row_size_variance, bool oldInterface = false) { + lno_t row_size_variance, bool oldInterface = false, + bool testReuse = false) { #if defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) { std::cerr @@ -278,56 +331,26 @@ void test_spgemm(lno_t m, lno_t k, lno_t n, size_type nnz, lno_t bandwidth, crsMat_t B = KokkosSparse::Impl::kk_generate_sparse_matrix( k, n, nnz, row_size_variance, bandwidth); - const bool is_empy_case = m < 1 || n < 1 || k < 1 || nnz < 1; + KokkosSparse::sort_crs_matrix(A); + KokkosSparse::sort_crs_matrix(B); crsMat_t output_mat2; - if (oldInterface) - run_spgemm_old_interface(A, B, SPGEMM_DEBUG, output_mat2); - else - run_spgemm(A, B, SPGEMM_DEBUG, output_mat2); + // If this test won't reuse symbolic, we can compute the reference matrix once + // here + if (!testReuse) { + run_spgemm(A, B, SPGEMM_DEBUG, output_mat2, false); + } std::vector algorithms = { SPGEMM_KK, SPGEMM_KK_LP, SPGEMM_KK_MEMORY /* alias SPGEMM_KK_MEMSPEED */, SPGEMM_KK_SPEED /* alias SPGEMM_KK_DENSE */ }; -#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL - algorithms.push_back(SPGEMM_MKL); -#endif - for (auto spgemm_algorithm : algorithms) { - const uint64_t max_integer = Kokkos::ArithTraits::max(); - std::string algo = "UNKNOWN"; - bool is_expected_to_fail = false; + std::string algo = "UNKNOWN"; + bool is_expected_to_fail = false; switch (spgemm_algorithm) { - case SPGEMM_CUSPARSE: - // TODO: add these test failure cases for cusparse too. - algo = "SPGEMM_CUSPARSE"; -#if !defined(KERNELS_HAVE_CUSPARSE) && \ - !defined(KOKKOSKERNELS_ENABLE_TPL_CUSPARSE) - is_expected_to_fail = true; -#endif - break; - - case SPGEMM_MKL: algo = "SPGEMM_MKL"; -#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL - if (!KokkosSparse::Impl::mkl_is_supported_value_type::value) { - is_expected_to_fail = true; - } -#endif - // MKL requires local ordinals to be int. - // Note: empty-array special case will NOT fail on this. - if (!std::is_same::value && !is_empy_case) { - is_expected_to_fail = true; - } - // if size_type is larger than int, mkl casts it to int. - // it will fail if casting cause overflow. - if (A.values.extent(0) > max_integer) { - is_expected_to_fail = true; - } - break; - case SPGEMM_KK: algo = "SPGEMM_KK"; break; case SPGEMM_KK_LP: algo = "SPGEMM_KK_LP"; break; case SPGEMM_KK_MEMSPEED: algo = "SPGEMM_KK_MEMSPEED"; break; @@ -344,9 +367,10 @@ void test_spgemm(lno_t m, lno_t k, lno_t n, size_type nnz, lno_t bandwidth, try { if (oldInterface) res = run_spgemm_old_interface(A, B, spgemm_algorithm, - output_mat); + output_mat, testReuse); else - res = run_spgemm(A, B, spgemm_algorithm, output_mat); + res = run_spgemm(A, B, spgemm_algorithm, output_mat, + testReuse); } catch (const char *message) { EXPECT_TRUE(is_expected_to_fail) << algo << ": " << message; failed = true; @@ -359,6 +383,12 @@ void test_spgemm(lno_t m, lno_t k, lno_t n, size_type nnz, lno_t bandwidth, } EXPECT_EQ(is_expected_to_fail, failed); + // If this is testing reuse, the values of A and B changed so + // the reference matrix must be recomputed + if (testReuse) { + run_spgemm(A, B, SPGEMM_DEBUG, output_mat2, false); + } + // double spgemm_time = timer1.seconds(); timer1.reset(); @@ -426,13 +456,15 @@ void test_issue402() { scalar_view_t, lno_view_t, typename device::execution_space>( numRows, numRows, Arowmap, Aentries, Avalues, Browmap, Bentries, Bvalues); crsMat_t B("B=A^T", numRows, numRows, nnz, Bvalues, Browmap, Bentries); + KokkosSparse::sort_crs_matrix(A); + KokkosSparse::sort_crs_matrix(B); crsMat_t Cgold; - run_spgemm(A, B, SPGEMM_DEBUG, Cgold); + run_spgemm(A, B, SPGEMM_DEBUG, Cgold, false); crsMat_t C; bool success = true; std::string errMsg; try { - int res = run_spgemm(A, B, SPGEMM_KK_MEMORY, C); + int res = run_spgemm(A, B, SPGEMM_KK_MEMORY, C, false); if (res) throw "run_spgemm returned error code"; } catch (const char *message) { errMsg = message; @@ -444,20 +476,24 @@ void test_issue402() { errMsg = e.what(); success = false; } - EXPECT_TRUE(success) << "KKMEM still has issue 402 bug! Error message:\n" + EXPECT_TRUE(success) << "SpGEMM still has issue 402 bug! Error message:\n" << errMsg << '\n'; bool correctResult = is_same_matrix(C, Cgold); EXPECT_TRUE(correctResult) - << "KKMEM still has issue 402 bug; C=AA' is incorrect!\n"; + << "SpGEMM still has issue 402 bug; C=AA' is incorrect!\n"; } #define KOKKOSKERNELS_EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ TEST_F(TestCategory, \ sparse##_##spgemm##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ - test_spgemm(10000, 10000, 10000, \ - 10000 * 20, 500, 10, false); \ - test_spgemm(10000, 10000, 10000, \ - 10000 * 20, 500, 10, true); \ + test_spgemm(10000, 8000, 6000, 8000 * 20, \ + 500, 10, false); \ + test_spgemm(10000, 8000, 6000, 8000 * 20, \ + 500, 10, true); \ + test_spgemm(1000, 500, 1600, 1000 * 20, \ + 500, 10, false, true); \ + test_spgemm(1000, 500, 1600, 1000 * 20, \ + 500, 10, true, true); \ test_spgemm(0, 0, 0, 0, 10, 10, false); \ test_spgemm(0, 0, 0, 0, 10, 10, true); \ test_spgemm(0, 12, 5, 0, 10, 0, false); \ diff --git a/sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp b/sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp index 12cfd983f1..9f2fddeaa2 100644 --- a/sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp +++ b/sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp @@ -154,8 +154,6 @@ bool is_same_mat(crsMat_t output_mat1, crsMat_t output_mat2) { size_t nentries2 = output_mat2.graph.entries.extent(0); size_t nvals2 = output_mat2.values.extent(0); - KokkosSparse::sort_crs_matrix(output_mat1); - if (nrows1 != nrows2) { std::cout << "nrows1:" << nrows1 << " nrows2:" << nrows2 << std::endl; return false; @@ -170,8 +168,6 @@ bool is_same_mat(crsMat_t output_mat1, crsMat_t output_mat2) { return false; } - KokkosSparse::sort_crs_matrix(output_mat2); - bool is_identical = true; is_identical = KokkosKernels::Impl::kk_is_identical_view< typename graph_t::row_map_type, typename graph_t::row_map_type, @@ -237,6 +233,8 @@ void test_spgemm_jacobi(lno_t numRows, size_type nnz, lno_t bandwidth, KokkosSparse::Impl::kk_generate_diagonally_dominant_sparse_matrix< crsMat_t>(numRows, numCols, nnz, row_size_variance, bandwidth); + KokkosSparse::sort_crs_matrix(input_mat); + crsMat_t output_mat2; scalar_t omega = 3.0; @@ -263,6 +261,9 @@ void test_spgemm_jacobi(lno_t numRows, size_type nnz, lno_t bandwidth, run_spgemm_jacobi(input_mat, input_mat, omega, dinv, spgemm_algorithm, output_mat); + // Sort the reference output_mat2, but not output_mat. It should already be + // soted. + KokkosSparse::sort_crs_matrix(output_mat2); bool is_identical = is_same_mat(output_mat, output_mat2); EXPECT_TRUE(is_identical); } From 752db160e35a038d1b2ac0f4c0848728d42875ec Mon Sep 17 00:00:00 2001 From: meriadeg perrinel Date: Mon, 12 Dec 2022 20:50:05 +0100 Subject: [PATCH 179/226] #5 Added google benchmark to kokkos kernel and to the CI --- .github/workflows/osx.yml | 3 +- .jenkins/nightly.groovy | 2 + CMakeLists.txt | 1 + perf_test/BenchmarkMain.cpp | 61 ++++++++++++++++++++ perf_test/Benchmark_Context.hpp | 99 +++++++++++++++++++++++++++++++++ perf_test/CMakeLists.txt | 90 ++++++++++++++++++++++++++++++ 6 files changed, 255 insertions(+), 1 deletion(-) create mode 100644 perf_test/BenchmarkMain.cpp create mode 100644 perf_test/Benchmark_Context.hpp diff --git a/.github/workflows/osx.yml b/.github/workflows/osx.yml index 07c0cb8d1e..46a7132cee 100644 --- a/.github/workflows/osx.yml +++ b/.github/workflows/osx.yml @@ -90,6 +90,7 @@ jobs: -DCMAKE_CXX_FLAGS="-Wall -Wshadow -pedantic -Werror -Wsign-compare -Wtype-limits -Wignored-qualifiers -Wempty-body -Wuninitialized" \ -DCMAKE_INSTALL_PREFIX=$PWD/../install \ -DKokkosKernels_ENABLE_TESTS=ON \ + -DKokkosKernels_ENABLE_BENCHMARKS=ON \ -DKokkosKernels_ENABLE_EXAMPLES:BOOL=ON \ -DKokkosKernels_INST_COMPLEX_DOUBLE=ON \ -DKokkosKernels_INST_DOUBLE=ON \ @@ -109,4 +110,4 @@ jobs: - name: test working-directory: kokkos-kernels/build - run: ctest -j2 --output-on-failure --timeout 3600 \ No newline at end of file + run: ctest -j2 --output-on-failure --timeout 3600 diff --git a/.jenkins/nightly.groovy b/.jenkins/nightly.groovy index 6092e75fba..9d86d32c09 100644 --- a/.jenkins/nightly.groovy +++ b/.jenkins/nightly.groovy @@ -37,6 +37,7 @@ pipeline { -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_COMPILER=clang++ \ -DKokkosKernels_ENABLE_TESTS=ON \ + -DKokkosKernels_ENABLE_BENCHMARKS=ON \ -DKokkosKernels_ENABLE_EXAMPLES=ON \ -DKokkosKernels_INST_DOUBLE=ON \ -DKokkosKernels_INST_ORDINAL_INT=ON \ @@ -75,6 +76,7 @@ pipeline { -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_CXX_EXTENSIONS=OFF \ -DKokkosKernels_ENABLE_TESTS=ON \ + -DKokkosKernels_ENABLE_BENCHMARKS=ON \ -DKokkosKernels_ENABLE_EXAMPLES=ON \ -DKokkosKernels_INST_DOUBLE=ON \ -DKokkosKernels_INST_ORDINAL_INT=ON \ diff --git a/CMakeLists.txt b/CMakeLists.txt index af92c9690c..dba1e1f64f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,6 +96,7 @@ SET(KokkosKernels_INSTALL_TESTING OFF CACHE INTERNAL IF (KokkosKernels_INSTALL_TESTING) # Force testing on if we are doing intall testing SET(KOKKOSKERNELS_ENABLE_TESTS ON) + SET(KOKKOSKERNELS_ENABLE_BENCHMARKS ON) SET(KOKKOSKERNELS_ENABLE_EXAMPLES ON) # Don't build, load installed kernels FIND_PACKAGE(KokkosKernels REQUIRED) diff --git a/perf_test/BenchmarkMain.cpp b/perf_test/BenchmarkMain.cpp new file mode 100644 index 0000000000..21f0b9d488 --- /dev/null +++ b/perf_test/BenchmarkMain.cpp @@ -0,0 +1,61 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +#include +#include + +int main(int argc, char** argv) { + Kokkos::initialize(argc, argv); + benchmark::Initialize(&argc, argv); + benchmark::SetDefaultTimeUnit(benchmark::kSecond); + KokkosBenchmark::add_benchmark_context(true); + + benchmark::RunSpecifiedBenchmarks(); + + benchmark::Shutdown(); + Kokkos::finalize(); + return 0; +} diff --git a/perf_test/Benchmark_Context.hpp b/perf_test/Benchmark_Context.hpp new file mode 100644 index 0000000000..e50e393550 --- /dev/null +++ b/perf_test/Benchmark_Context.hpp @@ -0,0 +1,99 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_CORE_PERFTEST_BENCHMARK_CONTEXT_HPP +#define KOKKOS_CORE_PERFTEST_BENCHMARK_CONTEXT_HPP + +#include + +#include + +#include + +namespace KokkosBenchmark { + +/// \brief Remove unwanted spaces and colon signs from input string. In case of +/// invalid input it will return an empty string. +std::string remove_unwanted_characters(std::string str) { + auto from = str.find_first_not_of(" :"); + auto to = str.find_last_not_of(" :"); + + if (from == std::string::npos || to == std::string::npos) { + return ""; + } + + // return extracted part of string without unwanted spaces and colon signs + return str.substr(from, to + 1); +} + +/// \brief Extract all key:value pairs from kokkos configuration and add it to +/// the benchmark context +void add_kokkos_configuration(bool verbose) { + std::ostringstream msg; + Kokkos::print_configuration(msg, verbose); + + // Iterate over lines returned from kokkos and extract key:value pairs + std::stringstream ss{msg.str()}; + for (std::string line; std::getline(ss, line, '\n');) { + auto found = line.find_first_of(':'); + if (found != std::string::npos) { + auto val = remove_unwanted_characters(line.substr(found + 1)); + // Ignore line without value, for example a category name + if (!val.empty()) { + benchmark::AddCustomContext( + remove_unwanted_characters(line.substr(0, found)), val); + } + } + } +} + +/// \brief Gather all context information and add it to benchmark context data +void add_benchmark_context(bool verbose = false) { + // Add Kokkos configuration to benchmark context data + add_kokkos_configuration(verbose); +} + +} // namespace KokkosBenchmark + +#endif diff --git a/perf_test/CMakeLists.txt b/perf_test/CMakeLists.txt index b73fc47adf..e8d2a4d0e9 100644 --- a/perf_test/CMakeLists.txt +++ b/perf_test/CMakeLists.txt @@ -50,5 +50,95 @@ if (KokkosKernels_ENABLE_PERFTESTS) ADD_COMPONENT_SUBDIRECTORY(blas) ADD_SUBDIRECTORY(performance) #ADD_SUBDIRECTORY(common) + + IF (KOKKOS_HAS_TRILINOS) + message(FATAL_ERROR "Benchmarks are not supported when building as part of Trilinos") + ENDIF() + + find_package(benchmark QUIET) + IF(benchmark_FOUND) + MESSAGE(STATUS "Using google benchmark found in ${benchmark_DIR}") + ELSE() + message(STATUS "No installed google benchmark found, fetching from GitHub") + include(FetchContent) + SET(BENCHMARK_ENABLE_TESTING OFF) + + list(APPEND CMAKE_MESSAGE_INDENT " ") + FetchContent_Declare( + googlebenchmark + URL https://github.com/google/benchmark/archive/refs/tags/v1.6.2.tar.gz + URL_HASH MD5=14d14849e075af116143a161bc3b927b + ) + FetchContent_MakeAvailable(googlebenchmark) + list(POP_BACK CMAKE_MESSAGE_INDENT) + + include_directories(${benchmark_SOURCE_DIR}/include) + + # Suppress clang-tidy diagnostics on code that we do not have control over + IF(CMAKE_CXX_CLANG_TIDY) + SET_TARGET_PROPERTIES(benchmark PROPERTIES CXX_CLANG_TIDY "") + ENDIF() + + target_compile_options(benchmark PRIVATE -w) + target_compile_options(benchmark_main PRIVATE -w) + ENDIF() + + + FUNCTION(KOKKOSKERNELS_ADD_BENCHMARK NAME) + CMAKE_PARSE_ARGUMENTS( + BENCHMARK + "" + "" + "SOURCES" + ${ARGN} + ) + IF(DEFINED BENCHMARK_UNPARSED_ARGUMENTS) + MESSAGE( + WARNING + "Unexpected arguments when adding a benchmark: " + ${BENCHMARK_UNPARSED_ARGUMENTS} + ) + ENDIF() + + SET(BENCHMARK_NAME ${PACKAGE_NAME}_${NAME}) + + ADD_EXECUTABLE( + ${BENCHMARK_NAME} + ${BENCHMARK_SOURCES} + ) + TARGET_LINK_LIBRARIES( + ${BENCHMARK_NAME} + PRIVATE benchmark::benchmark Kokkos::kokkoskernels + ) + FOREACH(SOURCE_FILE ${BENCHMARK_SOURCES}) + SET_SOURCE_FILES_PROPERTIES( + ${SOURCE_FILE} + PROPERTIES LANGUAGE CXX + ) + ENDFOREACH() + + STRING(TIMESTAMP BENCHMARK_TIME "%Y-%m-%d_T%H-%M-%S" UTC) + SET( + BENCHMARK_ARGS + --benchmark_counters_tabular=true + --benchmark_out=${BENCHMARK_NAME}_${BENCHMARK_TIME}.json + ) + + ADD_TEST( + NAME ${BENCHMARK_NAME} + COMMAND ${BENCHMARK_NAME} ${BENCHMARK_ARGS} + ) + ENDFUNCTION() + + SET( + BENCHMARK_SOURCES + BenchmarkMain.cpp + ) + + KOKKOSKERNELS_ADD_BENCHMARK( + PerformanceTest_Benchmark + SOURCES ${BENCHMARK_SOURCES} + ) + endif() From d953f8f75e029f5929d4c02c3c3c8319a413cea3 Mon Sep 17 00:00:00 2001 From: meriadeg perrinel Date: Tue, 13 Dec 2022 20:12:47 +0100 Subject: [PATCH 180/226] #5 fixed PR comments --- .github/workflows/osx.yml | 1 - .jenkins/nightly.groovy | 2 -- CMakeLists.txt | 1 - perf_test/BenchmarkMain.cpp | 4 ++-- perf_test/Benchmark_Context.hpp | 10 +++++----- perf_test/CMakeLists.txt | 4 +++- 6 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.github/workflows/osx.yml b/.github/workflows/osx.yml index 46a7132cee..f8b014587b 100644 --- a/.github/workflows/osx.yml +++ b/.github/workflows/osx.yml @@ -90,7 +90,6 @@ jobs: -DCMAKE_CXX_FLAGS="-Wall -Wshadow -pedantic -Werror -Wsign-compare -Wtype-limits -Wignored-qualifiers -Wempty-body -Wuninitialized" \ -DCMAKE_INSTALL_PREFIX=$PWD/../install \ -DKokkosKernels_ENABLE_TESTS=ON \ - -DKokkosKernels_ENABLE_BENCHMARKS=ON \ -DKokkosKernels_ENABLE_EXAMPLES:BOOL=ON \ -DKokkosKernels_INST_COMPLEX_DOUBLE=ON \ -DKokkosKernels_INST_DOUBLE=ON \ diff --git a/.jenkins/nightly.groovy b/.jenkins/nightly.groovy index 9d86d32c09..d842a7348c 100644 --- a/.jenkins/nightly.groovy +++ b/.jenkins/nightly.groovy @@ -37,7 +37,6 @@ pipeline { -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_COMPILER=clang++ \ -DKokkosKernels_ENABLE_TESTS=ON \ - -DKokkosKernels_ENABLE_BENCHMARKS=ON \ -DKokkosKernels_ENABLE_EXAMPLES=ON \ -DKokkosKernels_INST_DOUBLE=ON \ -DKokkosKernels_INST_ORDINAL_INT=ON \ @@ -77,7 +76,6 @@ pipeline { -DCMAKE_CXX_EXTENSIONS=OFF \ -DKokkosKernels_ENABLE_TESTS=ON \ -DKokkosKernels_ENABLE_BENCHMARKS=ON \ - -DKokkosKernels_ENABLE_EXAMPLES=ON \ -DKokkosKernels_INST_DOUBLE=ON \ -DKokkosKernels_INST_ORDINAL_INT=ON \ -DKokkosKernels_INST_OFFSET_INT=ON \ diff --git a/CMakeLists.txt b/CMakeLists.txt index dba1e1f64f..af92c9690c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,7 +96,6 @@ SET(KokkosKernels_INSTALL_TESTING OFF CACHE INTERNAL IF (KokkosKernels_INSTALL_TESTING) # Force testing on if we are doing intall testing SET(KOKKOSKERNELS_ENABLE_TESTS ON) - SET(KOKKOSKERNELS_ENABLE_BENCHMARKS ON) SET(KOKKOSKERNELS_ENABLE_EXAMPLES ON) # Don't build, load installed kernels FIND_PACKAGE(KokkosKernels REQUIRED) diff --git a/perf_test/BenchmarkMain.cpp b/perf_test/BenchmarkMain.cpp index 21f0b9d488..d4376dcd48 100644 --- a/perf_test/BenchmarkMain.cpp +++ b/perf_test/BenchmarkMain.cpp @@ -36,7 +36,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) // // ************************************************************************ //@HEADER @@ -51,7 +51,7 @@ int main(int argc, char** argv) { Kokkos::initialize(argc, argv); benchmark::Initialize(&argc, argv); benchmark::SetDefaultTimeUnit(benchmark::kSecond); - KokkosBenchmark::add_benchmark_context(true); + KokkosKernelsBenchmark::add_benchmark_context(true); benchmark::RunSpecifiedBenchmarks(); diff --git a/perf_test/Benchmark_Context.hpp b/perf_test/Benchmark_Context.hpp index e50e393550..8e356841de 100644 --- a/perf_test/Benchmark_Context.hpp +++ b/perf_test/Benchmark_Context.hpp @@ -36,14 +36,14 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) // // ************************************************************************ //@HEADER */ -#ifndef KOKKOS_CORE_PERFTEST_BENCHMARK_CONTEXT_HPP -#define KOKKOS_CORE_PERFTEST_BENCHMARK_CONTEXT_HPP +#ifndef KOKKOSKERNELS_PERFTEST_BENCHMARK_CONTEXT_HPP +#define KOKKOSKENERLS_PERFTEST_BENCHMARK_CONTEXT_HPP #include @@ -51,7 +51,7 @@ #include -namespace KokkosBenchmark { +namespace KokkosKernelsBenchmark { /// \brief Remove unwanted spaces and colon signs from input string. In case of /// invalid input it will return an empty string. @@ -94,6 +94,6 @@ void add_benchmark_context(bool verbose = false) { add_kokkos_configuration(verbose); } -} // namespace KokkosBenchmark +} // namespace KokkosKernelsBenchmark #endif diff --git a/perf_test/CMakeLists.txt b/perf_test/CMakeLists.txt index e8d2a4d0e9..136fbb5b26 100644 --- a/perf_test/CMakeLists.txt +++ b/perf_test/CMakeLists.txt @@ -51,7 +51,7 @@ if (KokkosKernels_ENABLE_PERFTESTS) ADD_SUBDIRECTORY(performance) #ADD_SUBDIRECTORY(common) - IF (KOKKOS_HAS_TRILINOS) + IF (KOKKOSKERNELS_HAS_TRILINOS) message(FATAL_ERROR "Benchmarks are not supported when building as part of Trilinos") ENDIF() @@ -64,6 +64,8 @@ if (KokkosKernels_ENABLE_PERFTESTS) SET(BENCHMARK_ENABLE_TESTING OFF) list(APPEND CMAKE_MESSAGE_INDENT " ") + #Note: recent bug (google/benchmark#1441) is preventing us from using + # the latest benchmark release. FetchContent_Declare( googlebenchmark URL https://github.com/google/benchmark/archive/refs/tags/v1.6.2.tar.gz From 924e32b76a070c82a4a106d73a350be9cc524db3 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Fri, 16 Dec 2022 13:52:16 -0700 Subject: [PATCH 181/226] spmv cusparse tpl: update for cuda/12 Compatibility update for cuda/12 renaming of CUSPARSE_MM_ALG_DEFAULT to CUSPARSE_SPMM_ALG_DEFAULT Thanks to @romintomasetti and @maartenarnst for reporting --- sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp index ace756d22d..ace1c27799 100644 --- a/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp @@ -179,7 +179,11 @@ void spmv_mv_cusparse(const KokkosKernels::Experimental::Controls &controls, cusparseOperation_t opB = xIsLL ? CUSPARSE_OPERATION_NON_TRANSPOSE : CUSPARSE_OPERATION_TRANSPOSE; +#if CUDA_VERSION < 12000 const cusparseSpMMAlg_t alg = CUSPARSE_MM_ALG_DEFAULT; +#else + const cusparseSpMMAlg_t alg = CUSPARSE_SPMM_ALG_DEFAULT; +#endif // the precision of the SpMV const cudaDataType computeType = From 0af88488a4e0adbabc9d71824d6b659b2a04564e Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Fri, 16 Dec 2022 14:39:30 -0700 Subject: [PATCH 182/226] Test_Cuda: rename class to avoid conflicts within cuda/12 Rename class cuda to Cuda to avoid conflicts and errors in cuda/12 of form: /ascldap/users/projects/x86-64/cuda/12.0/include/cuda/std/cstddef(26): error: "cuda" has already been declared in the current scope 1 error detected in the compilation of "/ascldap/users/ndellin/kokkos-kernels/common/unit_test/backends/Test_Cuda_Common.cpp". --- test_common/Test_Cuda.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_common/Test_Cuda.hpp b/test_common/Test_Cuda.hpp index 6fe4cb7fcf..fcddf15732 100644 --- a/test_common/Test_Cuda.hpp +++ b/test_common/Test_Cuda.hpp @@ -9,14 +9,14 @@ #define KOKKOSKERNELS_ETI_ONLY #endif -class cuda : public ::testing::Test { +class Cuda : public ::testing::Test { protected: static void SetUpTestCase() {} static void TearDownTestCase() {} }; -#define TestCategory cuda +#define TestCategory Cuda #define TestExecSpace Kokkos::Cuda #endif // TEST_CUDA_HPP From 57e161de47855f1bc085de8740b85250ce25892f Mon Sep 17 00:00:00 2001 From: Brian Kelley Date: Fri, 16 Dec 2022 20:11:07 -0700 Subject: [PATCH 183/226] Fix #1631 Revert one line from #1620 which changed CrsMatrix::values_type (a 1D view) to be default_layout instead of LayoutRight. This seemed totally reasonable (the graph's rowptrs/entries already used default_layout), but the change makes spmv give wrong answers with Sacado PCE or MPVector as the scalar type. --- sparse/src/KokkosSparse_CrsMatrix.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sparse/src/KokkosSparse_CrsMatrix.hpp b/sparse/src/KokkosSparse_CrsMatrix.hpp index 7a6459d88e..dda08faba9 100644 --- a/sparse/src/KokkosSparse_CrsMatrix.hpp +++ b/sparse/src/KokkosSparse_CrsMatrix.hpp @@ -426,7 +426,8 @@ class CrsMatrix { //! Nonconst version of the type of row offsets in the sparse matrix. typedef typename row_map_type::non_const_value_type non_const_size_type; //! Kokkos Array type of the entries (values) in the sparse matrix. - typedef Kokkos::View + typedef Kokkos::View values_type; //! Const version of the type of the entries in the sparse matrix. typedef typename values_type::const_value_type const_value_type; From bb8a3e662b943b9c9f84dbf5f12706985c6d30dc Mon Sep 17 00:00:00 2001 From: meriadeg perrinel Date: Mon, 19 Dec 2022 15:08:42 +0100 Subject: [PATCH 184/226] #5 added KokkosKernels_ENABLE_BENCHMARK option --- perf_test/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/perf_test/CMakeLists.txt b/perf_test/CMakeLists.txt index 136fbb5b26..b91ac1e247 100644 --- a/perf_test/CMakeLists.txt +++ b/perf_test/CMakeLists.txt @@ -51,11 +51,16 @@ if (KokkosKernels_ENABLE_PERFTESTS) ADD_SUBDIRECTORY(performance) #ADD_SUBDIRECTORY(common) +endif() + +IF(KokkosKernels_ENABLE_BENCHMARK) + IF (KOKKOSKERNELS_HAS_TRILINOS) message(FATAL_ERROR "Benchmarks are not supported when building as part of Trilinos") ENDIF() find_package(benchmark QUIET) + IF(benchmark_FOUND) MESSAGE(STATUS "Using google benchmark found in ${benchmark_DIR}") ELSE() @@ -143,4 +148,3 @@ if (KokkosKernels_ENABLE_PERFTESTS) ) endif() - From b49d7c2a694e6aa22b25728f91f5f755ee8ba60c Mon Sep 17 00:00:00 2001 From: "Roscoe A. Bartlett" Date: Tue, 20 Dec 2022 18:23:18 -0700 Subject: [PATCH 185/226] KokkosKernels: Use KOKKOSKERNELS_INCLUDE_DIRECTORIES() (TriBITSPub/TriBITS#429) This replaces the usage of raw include_directories() with the wrapper KOKKOSKERNELS_INCLUDE_DIRECTORIES(). The deprecated TriBITS macro include_directories() now issues a CMake Deprecation warning. The fix is to use tribits_include_directories() in a TriBITS build instead. This is the same patch made in Trilinos PR trilinos/Trilinos#11380. --- perf_test/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perf_test/CMakeLists.txt b/perf_test/CMakeLists.txt index b73fc47adf..4b544950fe 100644 --- a/perf_test/CMakeLists.txt +++ b/perf_test/CMakeLists.txt @@ -26,7 +26,7 @@ if (KokkosKernels_ENABLE_PERFTESTS) #Gtest minimally requires C++ 11 TARGET_COMPILE_FEATURES(kokkoskernelsperf_gtest PUBLIC cxx_std_11) - include_directories(sparse) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(sparse) if(Kokkos_ENABLE_TESTS_AND_PERFSUITE) #Add RPS implementations of KK perf tests here From f672fc67c1bf73edcbff26745fb362b9b86ec780 Mon Sep 17 00:00:00 2001 From: meriadeg perrinel Date: Wed, 21 Dec 2022 09:56:59 +0100 Subject: [PATCH 186/226] #5 added miissing include in case KokkosKernels_ENABLE_PERFTESTS is OFF --- perf_test/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/perf_test/CMakeLists.txt b/perf_test/CMakeLists.txt index b91ac1e247..2fb164fb7e 100644 --- a/perf_test/CMakeLists.txt +++ b/perf_test/CMakeLists.txt @@ -90,6 +90,7 @@ IF(KokkosKernels_ENABLE_BENCHMARK) target_compile_options(benchmark_main PRIVATE -w) ENDIF() + KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) FUNCTION(KOKKOSKERNELS_ADD_BENCHMARK NAME) CMAKE_PARSE_ARGUMENTS( From 8cf69b35f64c443d723c005c56824828f50e1c6a Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 21 Dec 2022 10:02:40 -0700 Subject: [PATCH 187/226] SWAP: fixing obvious mistake in TPL layer : ( --- blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp index dce52012e5..a68cd9debd 100644 --- a/blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp @@ -163,8 +163,8 @@ namespace Impl { using YVector = Kokkos::View*, LAYOUT, \ Kokkos::Device, \ Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& /*space*/, XVector const& X, \ - YVector const& Y) { \ + static void swap(EXECSPACE const& /*space*/, XVector const& X, \ + YVector const& Y) { \ Kokkos::Profiling::pushRegion( \ "KokkosBlas::swap[TPL_BLAS,complex]"); \ HostBlas>::swap( \ @@ -325,8 +325,8 @@ namespace Impl { using YVector = Kokkos::View, LAYOUT, \ Kokkos::Device, \ Kokkos::MemoryTraits>; \ - static void rot(EXECSPACE const& space, XVector const& X, \ - YVector const& Y) { \ + static void swap(EXECSPACE const& space, XVector const& X, \ + YVector const& Y) { \ Kokkos::Profiling::pushRegion( \ "KokkosBlas::swap[TPL_CUBLAS,complex]"); \ swap_print_specialization(); \ From 2eb279ea7563e1ec607ac9095fd70ee698a6e1c8 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Wed, 21 Dec 2022 10:38:09 -0700 Subject: [PATCH 188/226] ROTMG: loosen unit-test tolerance for Host TPLs It seems that we are having the same issue with OpenBLAS and MKL so I am changing the logic just a bit to have a slightly higher tolerance when using host blas in our unit-test. --- blas/unit_test/Test_Blas1_rotmg.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/blas/unit_test/Test_Blas1_rotmg.hpp b/blas/unit_test/Test_Blas1_rotmg.hpp index 143c7eb5d6..55f6a58216 100644 --- a/blas/unit_test/Test_Blas1_rotmg.hpp +++ b/blas/unit_test/Test_Blas1_rotmg.hpp @@ -13,7 +13,8 @@ void test_rotmg_impl(View0& d1, View0& d2, View0& x1, View0& y1, PView& param, const scalar_type eps = Kokkos::ArithTraits::eps(); const scalar_type tol = -#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL +#if defined(KOKKOSKERNELS_ENABLE_TPL_BLAS) || \ + defined(KOKKOSKERNELS_ENABLE_TPL_MKL) 100 * eps; // Guessing MKL implements sin/cos differently so need larger tol #else From 45722c5b192d7c789e404cb84455e1fa65a34bf7 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Tue, 3 Jan 2023 13:38:12 -0700 Subject: [PATCH 189/226] CHANGELOG: fix github links for 3.7.01 --- CHANGELOG.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad61d16222..fc04a9b6f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,17 +5,17 @@ ### Bug Fixes: -- Change template type for StaticCrsGraph in BsrMatrix [\#1531](https://github.com/kokkos/kokkos/pull/1531) -- Remove listing of undefined TPL deps [\#1568](https://github.com/kokkos/kokkos/pull/1568) -- Fix using SpGEMM with nonstandard scalar type, with MKL enabled [\#1591](https://github.com/kokkos/kokkos/pull/1591) -- Move destroying dense vector descriptors out of cuSparse sptrsv handle [\#1590](https://github.com/kokkos/kokkos/pull/1590) -- Fix `cuda_data_type_from` to return `CUDA_C_64F` for `Kokkos::complex` [\#1604](https://github.com/kokkos/kokkos/pull/1604) -- Disable compile-time check in cuda_data_type_from on supported scalar types for cuSPARSE [\#1605](https://github.com/kokkos/kokkos/pull/1605) -- Reduce register pressure in batched dense algorithms [\#1588](https://github.com/kokkos/kokkos/pull/1588) +- Change template type for StaticCrsGraph in BsrMatrix [\#1531](https://github.com/kokkos/kokkos-kernels/pull/1531) +- Remove listing of undefined TPL deps [\#1568](https://github.com/kokkos/kokkos-kernels/pull/1568) +- Fix using SpGEMM with nonstandard scalar type, with MKL enabled [\#1591](https://github.com/kokkos/kokkos-kernels/pull/1591) +- Move destroying dense vector descriptors out of cuSparse sptrsv handle [\#1590](https://github.com/kokkos/kokkos-kernels/pull/1590) +- Fix `cuda_data_type_from` to return `CUDA_C_64F` for `Kokkos::complex` [\#1604](https://github.com/kokkos/kokkos-kernels/pull/1604) +- Disable compile-time check in cuda_data_type_from on supported scalar types for cuSPARSE [\#1605](https://github.com/kokkos/kokkos-kernels/pull/1605) +- Reduce register pressure in batched dense algorithms [\#1588](https://github.com/kokkos/kokkos-kernels/pull/1588) ### Implemented enhancements: -- Use new cusparseSpSV TPL for SPTRSV when cuSPARSE is enabled with CUDA >= 11.3 [\#1574](https://github.com/kokkos/kokkos/pull/1574) +- Use new cusparseSpSV TPL for SPTRSV when cuSPARSE is enabled with CUDA >= 11.3 [\#1574](https://github.com/kokkos/kokkos-kernels/pull/1574) ## [3.7.00](https://github.com/kokkos/kokkos-kernels/tree/3.7.00) (2022-08-18) [Full Changelog](https://github.com/kokkos/kokkos-kernels/compare/3.6.01...3.7.00) From f29fa91400e756be7188bf2f5c5cb4783c6be5e4 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Tue, 10 Jan 2023 15:57:38 -0700 Subject: [PATCH 190/226] Rename component options to avoid overloaded usage in Trilinos Also force override the cache variables where appropriate to ensure agreement of non-default settings and CMakeCache.txt --- CMakeLists.txt | 24 ++++++++-------- batched/CMakeLists.txt | 2 +- batched/dense/unit_test/CMakeLists.txt | 2 +- batched/sparse/unit_test/CMakeLists.txt | 2 +- blas/CMakeLists.txt | 2 +- cmake/kokkoskernels_components.cmake | 38 ++++++++++++------------- 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index af92c9690c..7ce714e1ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -224,10 +224,10 @@ ELSE() MESSAGE("") MESSAGE("Kokkos Kernels components") MESSAGE(" COMMON: ON") - MESSAGE(" BATCHED: ${KokkosKernels_ENABLE_BATCHED}") - MESSAGE(" BLAS: ${KokkosKernels_ENABLE_BLAS}") - MESSAGE(" GRAPH: ${KokkosKernels_ENABLE_GRAPH}") - MESSAGE(" SPARSE: ${KokkosKernels_ENABLE_SPARSE}") + MESSAGE(" BATCHED: ${KokkosKernels_ENABLE_COMPONENT_BATCHED}") + MESSAGE(" BLAS: ${KokkosKernels_ENABLE_COMPONENT_BLAS}") + MESSAGE(" GRAPH: ${KokkosKernels_ENABLE_COMPONENT_GRAPH}") + MESSAGE(" SPARSE: ${KokkosKernels_ENABLE_COMPONENT_SPARSE}") MESSAGE("") MESSAGE("Kokkos Kernels TPLs") IF(KOKKOSKERNELS_TPL_LIST) @@ -263,16 +263,16 @@ ELSE() # if nothing requested, build everything # to recover original behavior. INCLUDE(common/CMakeLists.txt) - IF (KokkosKernels_ENABLE_BATCHED) + IF (KokkosKernels_ENABLE_COMPONENT_BATCHED) INCLUDE(batched/CMakeLists.txt) ENDIF() - IF (KokkosKernels_ENABLE_BLAS) + IF (KokkosKernels_ENABLE_COMPONENT_BLAS) INCLUDE(blas/CMakeLists.txt) ENDIF() - IF (KokkosKernels_ENABLE_GRAPH) + IF (KokkosKernels_ENABLE_COMPONENT_GRAPH) INCLUDE(graph/CMakeLists.txt) ENDIF() - IF (KokkosKernels_ENABLE_SPARSE) + IF (KokkosKernels_ENABLE_COMPONENT_SPARSE) INCLUDE(sparse/CMakeLists.txt) ENDIF() @@ -369,17 +369,17 @@ ELSE() TARGET_COMPILE_FEATURES(kokkoskernels_gtest PUBLIC cxx_std_11) ENDIF() KOKKOSKERNELS_ADD_TEST_DIRECTORIES(common/unit_test) - IF (KokkosKernels_ENABLE_BATCHED) + IF (KokkosKernels_ENABLE_COMPONENT_BATCHED) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/dense/unit_test) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(batched/sparse/unit_test) ENDIF() - IF (KokkosKernels_ENABLE_BLAS) + IF (KokkosKernels_ENABLE_COMPONENT_BLAS) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(blas/unit_test) ENDIF() - IF (KokkosKernels_ENABLE_GRAPH) + IF (KokkosKernels_ENABLE_COMPONENT_GRAPH) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(graph/unit_test) ENDIF() - IF (KokkosKernels_ENABLE_SPARSE) + IF (KokkosKernels_ENABLE_COMPONENT_SPARSE) KOKKOSKERNELS_ADD_TEST_DIRECTORIES(sparse/unit_test) ENDIF() IF (KokkosKernels_ENABLE_ALL_COMPONENTS) diff --git a/batched/CMakeLists.txt b/batched/CMakeLists.txt index 669e1ca808..2816620e87 100644 --- a/batched/CMakeLists.txt +++ b/batched/CMakeLists.txt @@ -9,7 +9,7 @@ LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/src) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/impl) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/unit_test) -IF (NOT KokkosKernels_ENABLE_BLAS) +IF (NOT KokkosKernels_ENABLE_COMPONENT_BLAS) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/impl) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/tpls) APPEND_GLOB(HEADERS ${PACKAGE_SOURCE_DIR}/blas/impl/KokkosBlas_util.hpp) diff --git a/batched/dense/unit_test/CMakeLists.txt b/batched/dense/unit_test/CMakeLists.txt index 8acf282367..f970e81e66 100644 --- a/batched/dense/unit_test/CMakeLists.txt +++ b/batched/dense/unit_test/CMakeLists.txt @@ -18,7 +18,7 @@ KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_C KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched/dense/impl) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/impl) -IF (NOT KokkosKernels_ENABLE_BLAS) +IF (NOT KokkosKernels_ENABLE_COMPONENT_BLAS) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/blas/src) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/blas/src) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/blas/impl) diff --git a/batched/sparse/unit_test/CMakeLists.txt b/batched/sparse/unit_test/CMakeLists.txt index 1f8aae67ed..63c34906b3 100644 --- a/batched/sparse/unit_test/CMakeLists.txt +++ b/batched/sparse/unit_test/CMakeLists.txt @@ -18,7 +18,7 @@ KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_C KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/batched/dense/impl) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/batched/sparse/impl) -IF (NOT KokkosKernels_ENABLE_BLAS) +IF (NOT KokkosKernels_ENABLE_COMPONENT_BLAS) MESSAGE("batched enabled and blas not enabled, we need to include some include directories manually!") KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/src/blas) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${PACKAGE_SOURCE_DIR}/src/blas) diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt index ed426ed131..e8a90c38cf 100644 --- a/blas/CMakeLists.txt +++ b/blas/CMakeLists.txt @@ -4,7 +4,7 @@ LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/eti) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/blas/eti) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/blas/tpls) -IF (NOT KokkosKernels_ENABLE_BATCHED) +IF (NOT KokkosKernels_ENABLE_COMPONENT_BATCHED) MESSAGE("blas enabled and batched not enabled, we need to include some headers manually!") LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched) LIST(APPEND KK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/batched/dense/src) diff --git a/cmake/kokkoskernels_components.cmake b/cmake/kokkoskernels_components.cmake index 14c586e54f..f33a62b6ff 100644 --- a/cmake/kokkoskernels_components.cmake +++ b/cmake/kokkoskernels_components.cmake @@ -13,7 +13,7 @@ KOKKOSKERNELS_ADD_OPTION( # is always enabled so nothing more needs # to be enabled for this component. KOKKOSKERNELS_ADD_OPTION( - "ENABLE_BATCHED" + "ENABLE_COMPONENT_BATCHED" OFF BOOL "Whether to build the batched component. Default: OFF" @@ -23,7 +23,7 @@ KOKKOSKERNELS_ADD_OPTION( # is always enabled so nothing more needs # to be enabled for this component. KOKKOSKERNELS_ADD_OPTION( - "ENABLE_BLAS" + "ENABLE_COMPONENT_BLAS" OFF BOOL "Whether to build the blas component. Default: OFF" @@ -31,7 +31,7 @@ KOKKOSKERNELS_ADD_OPTION( # SPARSE depends on everything else at the moment. KOKKOSKERNELS_ADD_OPTION( - "ENABLE_SPARSE" + "ENABLE_COMPONENT_SPARSE" OFF BOOL "Whether to build the sparse component. Default: OFF" @@ -39,7 +39,7 @@ KOKKOSKERNELS_ADD_OPTION( # GRAPH depends on everything else at the moment. KOKKOSKERNELS_ADD_OPTION( - "ENABLE_GRAPH" + "ENABLE_COMPONENT_GRAPH" OFF BOOL "Whether to build the graph component. Default: OFF" @@ -49,27 +49,27 @@ KOKKOSKERNELS_ADD_OPTION( # the assumption is that a full build is not # desired and ENABLE_ALL_COMPONENETS is turned # off. -IF (KokkosKernels_ENABLE_BATCHED OR KokkosKernels_ENABLE_BLAS - OR KokkosKernels_ENABLE_GRAPH OR KokkosKernels_ENABLE_SPARSE) - SET(KokkosKernels_ENABLE_ALL_COMPONENTS OFF) +IF (KokkosKernels_ENABLE_COMPONENT_BATCHED OR KokkosKernels_ENABLE_COMPONENT_BLAS + OR KokkosKernels_ENABLE_COMPONENT_GRAPH OR KokkosKernels_ENABLE_COMPONENT_SPARSE) + SET(KokkosKernels_ENABLE_ALL_COMPONENTS OFF CACHE BOOL "" FORCE) ENDIF() # Graph depends on everything else because it depends # on Sparse at the moment, breaking that dependency will # allow for Graph to build pretty much as a standalone # component. -IF (KokkosKernels_ENABLE_GRAPH) - SET(KokkosKernels_ENABLE_BATCHED ON) - SET(KokkosKernels_ENABLE_BLAS ON) - SET(KokkosKernels_ENABLE_SPARSE ON) +IF (KokkosKernels_ENABLE_COMPONENT_GRAPH) + SET(KokkosKernels_ENABLE_COMPONENT_BATCHED ON CACHE BOOL "" FORCE) + SET(KokkosKernels_ENABLE_COMPONENT_BLAS ON CACHE BOOL "" FORCE) + SET(KokkosKernels_ENABLE_COMPONENT_SPARSE ON CACHE BOOL "" FORCE) ENDIF() # Sparse depends on everything else so no real benefit # here unfortunately... -IF (KokkosKernels_ENABLE_SPARSE) - SET(KokkosKernels_ENABLE_BATCHED ON) - SET(KokkosKernels_ENABLE_BLAS ON) - SET(KokkosKernels_ENABLE_GRAPH ON) +IF (KokkosKernels_ENABLE_COMPONENT_SPARSE) + SET(KokkosKernels_ENABLE_COMPONENT_BATCHED ON CACHE BOOL "" FORCE) + SET(KokkosKernels_ENABLE_COMPONENT_BLAS ON CACHE BOOL "" FORCE) + SET(KokkosKernels_ENABLE_COMPONENT_GRAPH ON CACHE BOOL "" FORCE) ENDIF() # At this point, if ENABLE_ALL_COMPONENTS is @@ -77,8 +77,8 @@ ENDIF() # components as they are required for this # build. IF (KokkosKernels_ENABLE_ALL_COMPONENTS) - SET(KokkosKernels_ENABLE_BATCHED ON) - SET(KokkosKernels_ENABLE_BLAS ON) - SET(KokkosKernels_ENABLE_SPARSE ON) - SET(KokkosKernels_ENABLE_GRAPH ON) + SET(KokkosKernels_ENABLE_COMPONENT_BATCHED ON CACHE BOOL "" FORCE) + SET(KokkosKernels_ENABLE_COMPONENT_BLAS ON CACHE BOOL "" FORCE) + SET(KokkosKernels_ENABLE_COMPONENT_SPARSE ON CACHE BOOL "" FORCE) + SET(KokkosKernels_ENABLE_COMPONENT_GRAPH ON CACHE BOOL "" FORCE) ENDIF() From 9cee08707489087db8855b531ec20dc1056418ea Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Thu, 12 Jan 2023 21:15:55 -0700 Subject: [PATCH 191/226] FindTPLMKL.cmake: fix naming of mkl arg to FIND_PACKAGE_HANDLE_STANDARD_ARGS The first argument to FIND_PACKAGE_HANDLE_STANDARD_ARGS should be TPLMKL Resolve cmake warning of the form: The package name passed to `find_package_handle_standard_args` (MKL) does not match the name of the calling package (TPLMKL). This can lead to problems in calling code that expects `find_package` result variables (e.g., `_FOUND`) to follow a certain pattern. --- cmake/Modules/FindTPLMKL.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Modules/FindTPLMKL.cmake b/cmake/Modules/FindTPLMKL.cmake index 56f4f34c9e..3d5f297f52 100644 --- a/cmake/Modules/FindTPLMKL.cmake +++ b/cmake/Modules/FindTPLMKL.cmake @@ -6,7 +6,7 @@ IF (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") COMPILE_DEFINITIONS -mkl) KOKKOSKERNELS_CREATE_IMPORTED_TPL(MKL INTERFACE COMPILE_OPTIONS -mkl LINK_OPTIONS -mkl) INCLUDE(FindPackageHandleStandardArgs) - FIND_PACKAGE_HANDLE_STANDARD_ARGS(MKL DEFAULT_MSG KOKKOSKERNELS_HAS_MKL_ARG) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(TPLMKL DEFAULT_MSG KOKKOSKERNELS_HAS_MKL_ARG) ELSEIF(WIN32) SET(BLA_VENDOR Intel10_64lp) FIND_PACKAGE(BLAS REQUIRED) From 89858368970cbaa2a7dc3dbfba26c345ba6fbf80 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Thu, 12 Jan 2023 21:25:42 -0700 Subject: [PATCH 192/226] cm_test_all_sandia: various updates update default cxx standard to 17 update sems-archive-env to sems-env on sogpu, sems machines add new compilers, drop unsupported compilers on various machines delete unused machine kokkos-dev --- scripts/cm_test_all_sandia | 244 ++++++++----------------------------- 1 file changed, 53 insertions(+), 191 deletions(-) diff --git a/scripts/cm_test_all_sandia b/scripts/cm_test_all_sandia index d03d6cdcbc..117da595a7 100755 --- a/scripts/cm_test_all_sandia +++ b/scripts/cm_test_all_sandia @@ -231,7 +231,7 @@ CXX_FLAGS_EXTRA="" LD_FLAGS_EXTRA="" KOKKOS_OPTIONS="" -CXX_STANDARD="14" +CXX_STANDARD="17" GCC_VARIANTS="+blas+lapack +openmp+serial" CLANG_VARIANTS="+blas+lapack +openmp+serial" @@ -443,19 +443,12 @@ fi # if [ "$MACHINE" = "sems" ]; then - MODULE_ENVIRONMENT="source /projects/sems/modulefiles/utils/sems-archive-modules-init.sh" + module purge + MODULE_ENVIRONMENT="sh /projects/sems/modulefiles/utils/sems-v2-modules-init.sh" eval "$MODULE_ENVIRONMENT" - # On unnamed sems machines, assume more restricted rhel7 environment - # On rhel7 sems machines gcc/7.3.0, clang/4.0.1, and intel/16.0.3 are missing - # Remove kokkkos-env module use - - module load sems-archive-cmake/3.17.1 - BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-/" - OLDINTEL_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/6.4.0,sems-archive-/" - INTEL_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.2.0,sems-archive-/" - CLANG_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/9.2.0,sems-archive-/" - CUDA9_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.2.0,sems-archive-/" + module load sems-cmake sems-git + BASE_MODULE_LIST="sems-cmake,sems-/" SKIP_HWLOC=True # No sems hwloc module @@ -463,52 +456,25 @@ if [ "$MACHINE" = "sems" ]; then ARCH_FLAG="" fi - if [ "$SPOT_CHECK" = "True" ]; then - # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/5.3.0 $BASE_MODULE_LIST "OpenMP" g++ $GCC_WARNING_FLAGS" - "gcc/7.2.0 $BASE_MODULE_LIST "Serial" g++ $GCC_WARNING_FLAGS" - "intel/17.0.1 $OLDINTEL_BASE_MODULE_LIST "OpenMP" icpc $INTEL_WARNING_FLAGS" - "cuda/9.2 $CUDA9_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - ) - elif [ "$SPOT_CHECK_TPLS" = "True" ]; then - # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/5.3.0 $BASE_MODULE_LIST "OpenMP" g++ $GCC_WARNING_FLAGS" - "gcc/7.2.0 $BASE_MODULE_LIST "Serial" g++ $GCC_WARNING_FLAGS" - "intel/17.0.1 $OLDINTEL_BASE_MODULE_LIST "OpenMP" icpc $INTEL_WARNING_FLAGS" - "cuda/9.2 $CUDA9_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - ) - else - # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/5.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/6.1.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/7.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/8.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/9.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "clang/5.0.1 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "clang/7.0.1 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "clang/9.0.0 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "clang/10.0.0 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "intel/17.0.1 $OLDINTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "intel/18.0.5 $OLDINTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "intel/19.0.5 $INTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "cuda/9.2 $CUDA9_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - ) - fi - SPACK_CUDA_ARCH="+maxwell50" #use an old one - SPACK_CUDA_HOST_COMPILER="%gcc@7.2.0" + # Format: (compiler module-list build-list exe-name warning-flag) + COMPILERS=("gcc/8.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/10.1.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "clang/11.0.1 $BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "clang/14.0.2 $BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "intel/19.0.5 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "intel/19.1.2 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "intel/2021.3 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + ) elif [ "$MACHINE" = "sogpu" ]; then - #source /projects/sems/modulefiles/utils/sems-v2-modules-init.sh #TODO: use this script after moving away from sems-archive modules - source /projects/sems/modulefiles/utils/sems-archive-modules-init.sh + module purge + MODULE_ENVIRONMENT="sh /projects/sems/modulefiles/utils/sems-v2-modules-init.sh" + eval "$MODULE_ENVIRONMENT" - module load sems-archive-cmake/3.17.1 sems-archive-git - BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-/" - OLDINTEL_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/6.4.0,sems-archive-/" - INTEL_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.2.0,sems-archive-/" - CLANG_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/9.2.0,sems-archive-/" - CUDA_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.2.0,sems-archive-/" - CUDA11_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/8.3.0,sems-archive-/" - #CUDA11_MODULE_LIST="sems-cmake/3.23.1,sems-gcc/8.3.0,sems-/" # TODO: use this variable after moving away from sems-archive modules + module load sems-cmake sems-git + BASE_MODULE_LIST="sems-cmake,sems-/" + + CUDA_MODULE_LIST="sems-cmake,sems-gcc/7.2.0,sems-/" + CUDA11_MODULE_LIST="sems-cmake,sems-gcc/8.3.0,sems-/" CUDA11_MODULE_TPL_LIST="$CUDA11_MODULE_LIST,sems-openblas/0.3.10" SKIP_HWLOC=True # No sems hwloc module @@ -519,37 +485,30 @@ elif [ "$MACHINE" = "sogpu" ]; then if [ "$SPOT_CHECK" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("cuda/11.1 $CUDA11_MODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + COMPILERS=("cuda/11.1.0 $CUDA11_MODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" ) elif [ "$SPOT_CHECK_TPLS" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("cuda/11.1 $CUDA11_MODULE_TPL_LIST "Cuda_Serial" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + COMPILERS=("cuda/11.1.0 $CUDA11_MODULE_TPL_LIST "Cuda_Serial" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" ) else # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/5.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/6.1.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/6.4.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/7.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/8.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/9.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "clang/5.0.1 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "clang/7.0.1 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "clang/9.0.0 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "clang/10.0.0 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "intel/17.0.1 $OLDINTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "intel/18.0.5 $OLDINTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "intel/19.0.5 $INTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "cuda/10.1 $CUDA_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/11.1 $CUDA11_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + COMPILERS=("gcc/8.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/10.1.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "clang/11.0.1 $BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "clang/14.0.2 $BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "intel/19.0.5 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "intel/19.1.2 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "intel/2021.3 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "cuda/11.1.0 $CUDA11_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + "cuda/11.4.2 $CUDA11_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" ) fi elif [ "$MACHINE" = "sorh7" ]; then module load sems-cmake/3.23.1 sems-git BASE_MODULE_LIST="sems-cmake/3.23.1,sems-/" - INTEL_BASE_MODULE_LIST="sems-cmake/3.23.1,sems-gcc/7.3.0,sems-/" + INTEL_BASE_MODULE_LIST="sems-cmake/3.23.1,sems-gcc/8.3.0,sems-/" CLANG_BASE_MODULE_LIST="sems-cmake/3.23.1,sems-gcc/10.1.0,sems-/" SKIP_HWLOC=True # No sems hwloc module @@ -568,79 +527,12 @@ elif [ "$MACHINE" = "sorh7" ]; then ) else # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/5.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/6.1.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/6.4.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/7.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/8.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/9.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "clang/5.0.1 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "clang/7.0.1 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "clang/9.0.0 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "clang/10.0.0 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "intel/19.0.5 $INTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + COMPILERS=("gcc/8.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "clang/10.0.1 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" + "intel/19.0.5 $INTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" ) fi -elif [ "$MACHINE" = "kokkos-dev" ]; then - MODULE_ENVIRONMENT="source /projects/sems/modulefiles/utils/sems-archive-modules-init.sh" - eval "$MODULE_ENVIRONMENT" - - module load sems-archive-cmake/3.17.1 - BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-/" - OLDINTEL_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/6.4.0,sems-archive-/" - INTEL_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.2.0,sems-archive-/" - CLANG_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/9.2.0,sems-archive-/" - CUDA9_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/6.1.0,sems-archive-/" - CUDA10_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.3.0,sems-archive-/" - CUDA11_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/9.2.0,sems-archive-/" - CLANG7_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.2.0,sems-archive-cuda/9.2,sems-archive-/" - SKIP_HWLOC=True - - if [ -z "$ARCH_FLAG" ]; then - ARCH_FLAG="--arch=Kepler35" - fi - - if [ "$SPOT_CHECK" = "True" ]; then - # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/5.3.0 $BASE_MODULE_LIST "OpenMP" g++ $GCC_WARNING_FLAGS" - "gcc/7.3.0 $BASE_MODULE_LIST "Serial" g++ $GCC_WARNING_FLAGS" - "intel/17.0.1 $OLDINTEL_BASE_MODULE_LIST "OpenMP" icpc $INTEL_WARNING_FLAGS" - "clang/5.0.1 $CLANG_BASE_MODULE_LIST "Threads_Serial" clang++ $CLANG_WARNING_FLAGS" - "clang/7.0.1 $CLANG7_MODULE_LIST "Cuda_OpenMP" clang++ $CLANG_WARNING_FLAGS" - "cuda/9.2 $CUDA9_MODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - ) - elif [ "$SPOT_CHECK_TPLS" = "True" ]; then - # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/5.3.0 $BASE_MODULE_LIST "OpenMP" g++ $GCC_WARNING_FLAGS" - "gcc/7.3.0 $BASE_MODULE_LIST "Serial" g++ $GCC_WARNING_FLAGS" - "intel/17.0.1 $OLDINTEL_BASE_MODULE_LIST "OpenMP" icpc $INTEL_WARNING_FLAGS" - "clang/5.0.1 $CLANG_BASE_MODULE_LIST "Threads_Serial" clang++ $CLANG_WARNING_FLAGS" - "clang/7.0.1 $CLANG7_MODULE_LIST "Cuda_OpenMP" clang++ $CLANG_WARNING_FLAGS" - "cuda/9.2 $CUDA9_MODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - ) - else - # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/5.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/6.1.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/7.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/8.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/9.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "intel/17.0.1 $OLDINTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "intel/18.0.5 $OLDINTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "intel/19.0.5 $INTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "clang/5.0.1 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "clang/7.0.1 $CLANG7_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "clang/9.0.0 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "clang/10.0.0 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "cuda/9.2 $CUDA9_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/10.1 $CUDA10_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/11.1 $CUDA11_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - ) - fi - SPACK_CUDA_ARCH="+kepler35" - SPACK_CUDA_HOST_COMPILER="%gcc@7.3.0" elif [ "$MACHINE" = "inouye" ]; then MODULE_ENVIRONMENT="module purge" eval "$MODULE_ENVIRONMENT" @@ -759,9 +651,7 @@ elif [ "$MACHINE" = "voltrino" ]; then BASE_MODULE_LIST="PrgEnv-intel,craype-mic-knl,cmake/3.16.2,slurm/20.11.4a,/,gcc/9.3.0" # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("intel/17.0.4 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "intel/18.0.5 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "intel/19.0.4 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + COMPILERS=("intel/19.0.4 $BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" ) if [ -z "$ARCH_FLAG" ]; then @@ -776,9 +666,9 @@ elif [ "$MACHINE" = "mayer" ]; then ARMCLANG_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Wsign-compare,-Wtype-limits,-Wuninitialized" # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gnu7/7.2.0 $BASE_MODULE_LIST $ARM_GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gnu9/9.3.0 $BASE_MODULE_LIST $ARM_GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "arm/20.1 $BASE_MODULE_LIST $ARM_GCC_BUILD_LIST armclang++ $ARMCLANG_WARNING_FLAGS") + COMPILERS=("gnu9/9.3.0 $BASE_MODULE_LIST $ARM_GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "arm/20.1 $BASE_MODULE_LIST $ARM_GCC_BUILD_LIST armclang++ $ARMCLANG_WARNING_FLAGS" + ) if [ -z "$ARCH_FLAG" ]; then ARCH_FLAG="--arch=ARMV8_THUNDERX2" @@ -792,15 +682,12 @@ elif [ "$MACHINE" = "caraway" ]; then # output description and success based only on build succes; build time output (no run-time) BASE_MODULE_LIST="cmake/3.19.3,/" - # Cuda11 usage available on the V100 queue - CUDA11_MODULE_LIST="cmake/3.22.2,/,gcc/8.2.0" HIPCLANG_BUILD_LIST="Hip_Serial" HIPCLANG_WARNING_FLAGS="" # Format: (compiler module-list build-list exe-name warning-flag) COMPILERS=("rocm/5.2.0 $BASE_MODULE_LIST $HIPCLANG_BUILD_LIST hipcc $HIPCLANG_WARNING_FLAGS" - "cuda/11.4 $CUDA11_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "gcc/8.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" "gcc/9.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" "gcc/10.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" @@ -878,82 +765,57 @@ elif [ "$MACHINE" = "kokkos-dev-2" ]; then SKIP_HWLOC=True BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-/" - OLDINTEL_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/6.4.0,sems-archive-/" - INTEL_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.2.0,sems-archive-/" + INTEL_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/8.3.0,sems-archive-/" CLANG_BASE_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/9.2.0,sems-archive-/" GCC91_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,/" - NVCC_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.3.0,/" - NVCC_SEMSMODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.3.0,sems-archive-/" + NVCC_SEMSMODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/8.3.0,sems-archive-/" NVCC11_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/9.2.0,/" - - CLANG8_MODULE_LIST="sems-archive-env,sems-archive-cmake/3.17.1,sems-archive-gcc/7.2.0,/,cuda/10.0" + LOCAL_MODULE_LIST="cmake/3.21.1,/" BUILD_LIST_CUDA_NVCC="Cuda_Serial,Cuda_Threads" - BUILD_LIST_CUDA_CLANG="Cuda_Serial,Cuda_OpenMP" BUILD_LIST_CLANG="Serial,Threads,OpenMP" CLANG8_CUDA_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized,-Wno-pass-failed" if [ "$SPOT_CHECK" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/7.3.0 $BASE_MODULE_LIST "OpenMP,Threads" g++ $GCC_WARNING_FLAGS" - "gcc/8.3.0 $BASE_MODULE_LIST "Serial" g++ $GCC_WARNING_FLAGS" + COMPILERS=("gcc/8.3.0 $BASE_MODULE_LIST "Serial" g++ $GCC_WARNING_FLAGS" "gcc/9.1 $GCC91_MODULE_LIST "OpenMP,Serial" g++ $GCC_WARNING_FLAGS" - "intel/17.0.1 $OLDINTEL_BASE_MODULE_LIST "Serial" icpc $INTEL_WARNING_FLAGS" - "intel/18.0.5 $OLDINTEL_BASE_MODULE_LIST "OpenMP" icpc $INTEL_WARNING_FLAGS" "intel/19.0.5 $INTEL_BASE_MODULE_LIST "Threads" icpc $INTEL_WARNING_FLAGS" - "clang/8.0 $CLANG8_MODULE_LIST "Cuda_OpenMP,Threads_Serial" clang++ $CLANG8_CUDA_WARNING_FLAGS" "clang/9.0.0 $CLANG_BASE_MODULE_LIST "Serial,Threads" clang++ $CLANG_WARNING_FLAGS" - "cuda/10.1 $NVCC_SEMSMODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/9.2 $NVCC_SEMSMODULE_LIST "Cuda_Serial" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/11.0 $NVCC11_MODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" ) elif [ "$SPOT_CHECK_TPLS" = "True" ]; then # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("gcc/7.3.0 $BASE_MODULE_LIST "OpenMP,Threads" g++ $GCC_WARNING_FLAGS" - "gcc/8.3.0 $BASE_MODULE_LIST "Serial" g++ $GCC_WARNING_FLAGS" + COMPILERS=("gcc/8.3.0 $BASE_MODULE_LIST "Serial" g++ $GCC_WARNING_FLAGS" "gcc/9.1 $GCC91_MODULE_LIST "OpenMP,Serial" g++ $GCC_WARNING_FLAGS" - "intel/17.0.1 $OLDINTEL_BASE_MODULE_LIST "Serial" icpc $INTEL_WARNING_FLAGS" - "intel/18.0.5 $OLDINTEL_BASE_MODULE_LIST "OpenMP" icpc $INTEL_WARNING_FLAGS" "intel/19.0.5 $INTEL_BASE_MODULE_LIST "Threads" icpc $INTEL_WARNING_FLAGS" - "clang/8.0 $CLANG8_MODULE_LIST "Cuda_OpenMP,Threads_Serial" clang++ $CLANG8_CUDA_WARNING_FLAGS" "clang/9.0.0 $CLANG_BASE_MODULE_LIST "Serial,Threads" clang++ $CLANG_WARNING_FLAGS" - "cuda/10.1 $NVCC_SEMSMODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/11.0 $NVCC11_MODULE_LIST "Cuda_OpenMP" $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" ) else # Format: (compiler module-list build-list exe-name warning-flag) - COMPILERS=("cuda/10.0 $NVCC_MODULE_LIST $BUILD_LIST_CUDA_NVCC $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/10.1 $NVCC_SEMSMODULE_LIST $BUILD_LIST_CUDA_NVCC $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/11.0 $NVCC11_MODULE_LIST $BUILD_LIST_CUDA_NVCC $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + COMPILERS=("cuda/11.0 $NVCC11_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/11.1 $NVCC_SEMSMODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "cuda/11.2 $NVCC11_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "cuda/9.2 $NVCC_SEMSMODULE_LIST $BUILD_LIST_CUDA_NVCC $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" - "clang/8.0 $CLANG8_MODULE_LIST $BUILD_LIST_CUDA_CLANG clang++ $CLANG8_CUDA_WARNING_FLAGS" - "clang/8.0 $CLANG8_MODULE_LIST $BUILD_LIST_CLANG clang++ $CLANG_WARNING_FLAGS" - "gcc/5.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/6.1.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/7.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "gcc/7.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "cuda/11.7 $NVCC11_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" + "cuda/12.0 $NVCC11_MODULE_LIST $CUDA_BUILD_LIST $KOKKOS_PATH/bin/nvcc_wrapper $CUDA_WARNING_FLAGS" "gcc/8.3.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" "gcc/9.1 $GCC91_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" "gcc/9.2.0 $BASE_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" - "intel/17.0.1 $OLDINTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "intel/18.0.5 $OLDINTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" + "gcc/10.3 $LOCAL_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" + "gcc/11.1 $LOCAL_MODULE_LIST $GCC_BUILD_LIST g++ $GCC_WARNING_FLAGS" "intel/19.0.5 $INTEL_BASE_MODULE_LIST $INTEL_BUILD_LIST icpc $INTEL_WARNING_FLAGS" - "clang/5.0.1 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" - "clang/7.0.1 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" "clang/9.0.0 $CLANG_BASE_MODULE_LIST $CLANG_BUILD_LIST clang++ $CLANG_WARNING_FLAGS" "clang/10.0.0 $CLANG_BASE_MODULE_LIST $BUILD_LIST_CLANG clang++ $CLANG_WARNING_FLAGS" + "clang/13.0.0 $LOCAL_MODULE_LIST $BUILD_LIST_CLANG clang++ $CLANG_WARNING_FLAGS" ) fi if [ -z "$ARCH_FLAG" ]; then - ARCH_FLAG="--arch=SNB,Volta70" + ARCH_FLAG="--arch=Volta70" fi - SPACK_HOST_ARCH="+snb" SPACK_CUDA_ARCH="+volta70" - SPACK_CUDA_HOST_COMPILER="%gcc@7.2.0" else echo "Unhandled machine $MACHINE" >&2 exit 1 From 613fd5b8def0b3f1e7a0a7c11fe4fbc31a411316 Mon Sep 17 00:00:00 2001 From: Damien L-G Date: Fri, 13 Jan 2023 08:42:23 -0500 Subject: [PATCH 193/226] CMake: update package COMPATIBILITY mode in anticipation of release 4.0 Without that change, projects doing `find_package(KokkosKernels 3.X)` with the 3.X version argument would not be able to build against KokkosKernels release 4.0 --- cmake/kokkoskernels_tribits.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/kokkoskernels_tribits.cmake b/cmake/kokkoskernels_tribits.cmake index 981ace6bbe..2d70f656ad 100644 --- a/cmake/kokkoskernels_tribits.cmake +++ b/cmake/kokkoskernels_tribits.cmake @@ -23,7 +23,7 @@ MACRO(KOKKOSKERNELS_PACKAGE_POSTPROCESS) INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/KokkosKernels) write_basic_package_version_file("${KokkosKernels_BINARY_DIR}/KokkosKernelsConfigVersion.cmake" VERSION "${KokkosKernels_VERSION_MAJOR}.${KokkosKernels_VERSION_MINOR}.${KokkosKernels_VERSION_PATCH}" - COMPATIBILITY SameMajorVersion) + COMPATIBILITY AnyNewerVersion) INSTALL(FILES "${KokkosKernels_BINARY_DIR}/KokkosKernelsConfig.cmake" From 46546d948d2c57e55be037dd9c0180105d07ba63 Mon Sep 17 00:00:00 2001 From: meriadeg perrinel Date: Thu, 19 Jan 2023 11:01:05 +0100 Subject: [PATCH 194/226] #5 fixed error from previous commit --- .jenkins/nightly.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.jenkins/nightly.groovy b/.jenkins/nightly.groovy index d842a7348c..6092e75fba 100644 --- a/.jenkins/nightly.groovy +++ b/.jenkins/nightly.groovy @@ -75,7 +75,7 @@ pipeline { -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_CXX_EXTENSIONS=OFF \ -DKokkosKernels_ENABLE_TESTS=ON \ - -DKokkosKernels_ENABLE_BENCHMARKS=ON \ + -DKokkosKernels_ENABLE_EXAMPLES=ON \ -DKokkosKernels_INST_DOUBLE=ON \ -DKokkosKernels_INST_ORDINAL_INT=ON \ -DKokkosKernels_INST_OFFSET_INT=ON \ From 3478473a227196f9747c60286e130a2ac04bf778 Mon Sep 17 00:00:00 2001 From: brian-kelley Date: Fri, 27 Jan 2023 09:48:47 -0700 Subject: [PATCH 195/226] Fix cusparse 11.0-11.3 spgemm symbolic wrapper (#1628) Add specific testing for spgemm symbolic, making sure that C's rowptrs are computed correctly (when computeRowptrs=true). --- ...osSparse_spgemm_symbolic_tpl_spec_decl.hpp | 182 +++++++++++------- sparse/unit_test/Test_Sparse_spgemm.hpp | 68 +++++++ 2 files changed, 176 insertions(+), 74 deletions(-) diff --git a/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_decl.hpp index 7db9ce5fc3..53d543b0d3 100644 --- a/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_decl.hpp @@ -206,84 +206,118 @@ void spgemm_symbolic_cusparse(KernelHandle *handle, lno_t m, lno_t n, lno_t k, const ConstEntriesType &entriesA, const ConstRowMapType &row_mapB, const ConstEntriesType &entriesB, - const RowMapType &row_mapC, - bool /* computeRowptrs */) { - using scalar_type = typename KernelHandle::nnz_scalar_t; - using Offset = typename KernelHandle::size_type; - if (handle->is_symbolic_called() && handle->are_rowptrs_computed()) return; - handle->create_cusparse_spgemm_handle(false, false); - auto h = handle->get_cusparse_spgemm_handle(); + const RowMapType &row_mapC, bool computeRowptrs) { + using scalar_type = typename KernelHandle::nnz_scalar_t; + using ordinal_type = typename KernelHandle::nnz_lno_t; + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); + void *dummyValues_AB = nullptr; + bool firstSymbolicCall = false; + if (!handle->is_symbolic_called()) { + handle->create_cusparse_spgemm_handle(false, false); + auto h = handle->get_cusparse_spgemm_handle(); - // Follow - // https://github.com/NVIDIA/CUDALibrarySamples/blob/master/cuSPARSE/spgemm + // Follow + // https://github.com/NVIDIA/CUDALibrarySamples/blob/master/cuSPARSE/spgemm + + // In non-reuse interface, forced to give A,B dummy values to + // cusparseSpGEMM_compute. And it actually reads them, so they must be + // allocated and of the correct type. This compute will be called again in + // numeric with the real values. + // + // The dummy values can be uninitialized. cusparseSpGEMM_compute does + // not remove numerical zeros from the sparsity pattern. + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc( + &dummyValues_AB, sizeof(scalar_type) * + std::max(entriesA.extent(0), entriesB.extent(0)))); - const auto alpha = Kokkos::ArithTraits::one(); - const auto beta = Kokkos::ArithTraits::zero(); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &h->descr_A, m, n, entriesA.extent(0), (void *)row_mapA.data(), + (void *)entriesA.data(), dummyValues_AB, CUSPARSE_INDEX_32I, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &h->descr_B, n, k, entriesB.extent(0), (void *)row_mapB.data(), + (void *)entriesB.data(), dummyValues_AB, CUSPARSE_INDEX_32I, + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); + + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCreateCsr(&h->descr_C, m, k, 0, row_mapC.data(), nullptr, + nullptr, CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, + CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); + + //---------------------------------------------------------------------- + // query workEstimation buffer size, allocate, then call again with buffer. + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_workEstimation( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, + &beta, h->descr_C, h->scalarType, h->alg, h->spgemmDescr, + &h->bufferSize3, nullptr)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaMalloc((void **)&h->buffer3, h->bufferSize3)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_workEstimation( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, + &beta, h->descr_C, h->scalarType, h->alg, h->spgemmDescr, + &h->bufferSize3, h->buffer3)); + + //---------------------------------------------------------------------- + // query compute buffer size, allocate, then call again with buffer. - // In non-reuse interface, forced to give A,B dummy values to - // cusparseSpGEMM_compute. And it actually reads them, so they must be - // allocated and of the correct type. This compute will be called again in - // numeric with the real values. - // - // The dummy values can be uninitialized. cusparseSpGEMM_compute does - // not remove numerical zeros from the sparsity pattern. - void *dummyValues; - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc( - &dummyValues, - sizeof(scalar_type) * std::max(entriesA.extent(0), entriesB.extent(0)))); - - KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( - &h->descr_A, m, n, entriesA.extent(0), (void *)row_mapA.data(), - (void *)entriesA.data(), dummyValues, CUSPARSE_INDEX_32I, - CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); - - KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( - &h->descr_B, n, k, entriesB.extent(0), (void *)row_mapB.data(), - (void *)entriesB.data(), dummyValues, CUSPARSE_INDEX_32I, - CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); - - KOKKOS_CUSPARSE_SAFE_CALL( - cusparseCreateCsr(&h->descr_C, m, k, 0, row_mapC.data(), nullptr, nullptr, - CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, - CUSPARSE_INDEX_BASE_ZERO, h->scalarType)); - - //---------------------------------------------------------------------- - // query workEstimation buffer size, allocate, then call again with buffer. - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_workEstimation( - h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, - h->descr_C, h->scalarType, h->alg, h->spgemmDescr, &h->bufferSize3, - nullptr)); - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&h->buffer3, h->bufferSize3)); - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_workEstimation( - h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, - h->descr_C, h->scalarType, h->alg, h->spgemmDescr, &h->bufferSize3, - h->buffer3)); - cudaFree(h->buffer3); - h->buffer3 = nullptr; - - //---------------------------------------------------------------------- - // query compute buffer size, allocate, then call again with buffer. - - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( - h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, - h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr, - &h->bufferSize4, nullptr)); - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&h->buffer4, h->bufferSize4)); - KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( - h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, &beta, - h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, h->spgemmDescr, - &h->bufferSize4, h->buffer4)); - KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(dummyValues)); - - int64_t C_nrow, C_ncol, C_nnz; - KOKKOS_CUSPARSE_SAFE_CALL( - cusparseSpMatGetSize(h->descr_C, &C_nrow, &C_ncol, &C_nnz)); - if (C_nnz > std::numeric_limits::max()) { - throw std::runtime_error("nnz of C overflowed over 32-bit int\n"); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, + &beta, h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, + h->spgemmDescr, &h->bufferSize4, nullptr)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaMalloc((void **)&h->buffer4, h->bufferSize4)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, + &beta, h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, + h->spgemmDescr, &h->bufferSize4, h->buffer4)); + int64_t C_nrow, C_ncol, C_nnz; + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSpMatGetSize(h->descr_C, &C_nrow, &C_ncol, &C_nnz)); + if (C_nnz > std::numeric_limits::max()) { + throw std::runtime_error("nnz of C overflowed over 32-bit int\n"); + } + handle->set_c_nnz(C_nnz); + handle->set_call_symbolic(); + firstSymbolicCall = true; } - handle->set_c_nnz(C_nnz); - handle->set_call_symbolic(); - handle->set_computed_rowptrs(); + + if (computeRowptrs && !handle->are_rowptrs_computed()) { + auto h = handle->get_cusparse_spgemm_handle(); + auto C_nnz = handle->get_c_nnz(); + if (!firstSymbolicCall) { + // This is not the first call to symbolic, so dummyValues_AB was not + // allocated above. But, descr_A and descr_B will have been saved in the + // handle, so we can reuse those. + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc( + &dummyValues_AB, sizeof(scalar_type) * std::max(entriesA.extent(0), + entriesB.extent(0)))); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_A, (void *)row_mapA.data(), + (void *)entriesA.data(), dummyValues_AB)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(h->descr_B, (void *)row_mapB.data(), + (void *)entriesB.data(), dummyValues_AB)); + } + void *dummyEntries_C, *dummyValues_C; + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaMalloc(&dummyEntries_C, sizeof(ordinal_type) * C_nnz)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaMalloc(&dummyValues_C, sizeof(scalar_type) * C_nnz)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCsrSetPointers( + h->descr_C, (void *)row_mapC.data(), dummyEntries_C, dummyValues_C)); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_copy( + h->cusparseHandle, h->opA, h->opB, &alpha, h->descr_A, h->descr_B, + &beta, h->descr_C, h->scalarType, CUSPARSE_SPGEMM_DEFAULT, + h->spgemmDescr)); + + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(dummyValues_C)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(dummyEntries_C)); + handle->set_computed_rowptrs(); + } + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(dummyValues_AB)); } #else diff --git a/sparse/unit_test/Test_Sparse_spgemm.hpp b/sparse/unit_test/Test_Sparse_spgemm.hpp index 1e60b35b81..51fdfb7def 100644 --- a/sparse/unit_test/Test_Sparse_spgemm.hpp +++ b/sparse/unit_test/Test_Sparse_spgemm.hpp @@ -405,6 +405,70 @@ void test_spgemm(lno_t m, lno_t k, lno_t n, size_type nnz, lno_t bandwidth, // device::execution_space::finalize(); } +template +void test_spgemm_symbolic(bool callSymbolicFirst, bool testEmpty) { + using crsMat_t = CrsMatrix; + using graph_t = typename crsMat_t::StaticCrsGraphType; + using values_t = typename crsMat_t::values_type; + using entries_t = typename graph_t::entries_type; + using rowmap_t = typename graph_t::row_map_type::non_const_type; + using const_rowmap_t = typename graph_t::row_map_type; + using KernelHandle = KokkosKernels::Experimental::KokkosKernelsHandle< + size_type, lno_t, scalar_t, typename device::execution_space, + typename device::memory_space, typename device::memory_space>; + // A is m*n, B is n*k, C is m*k + int m = 100; + int n = 300; + int k = 200; + crsMat_t A, B; + // Target 1000 total nonzeros in both A and B. + if (testEmpty) { + // Create A,B with the same dimensions, but zero entries + values_t emptyValues; + entries_t emptyEntries; + // Initialize these to 0 + rowmap_t A_rowmap("A rowmap", m + 1); + rowmap_t B_rowmap("B rowmap", n + 1); + A = crsMat_t("A", m, n, 0, emptyValues, A_rowmap, emptyEntries); + B = crsMat_t("B", n, k, 0, emptyValues, B_rowmap, emptyEntries); + } else { + size_type nnz = 1000; + A = KokkosSparse::Impl::kk_generate_sparse_matrix(m, n, nnz, 10, + 50); + nnz = 1000; + B = KokkosSparse::Impl::kk_generate_sparse_matrix(n, k, nnz, 10, + 50); + KokkosSparse::sort_crs_matrix(A); + KokkosSparse::sort_crs_matrix(B); + } + // Call reference impl to get complete product + crsMat_t C_reference; + Test::run_spgemm(A, B, SPGEMM_DEBUG, C_reference, false); + // Now call just symbolic, and specifically request that rowptrs be populated + // Make sure this never depends on C_rowmap being initialized + rowmap_t C_rowmap(Kokkos::view_alloc(Kokkos::WithoutInitializing, "rowmapC"), + m + 1); + Kokkos::deep_copy(C_rowmap, size_type(123)); + KernelHandle kh; + kh.create_spgemm_handle(); + if (callSymbolicFirst) { + KokkosSparse::Experimental::spgemm_symbolic( + &kh, m, n, k, A.graph.row_map, A.graph.entries, false, B.graph.row_map, + B.graph.entries, false, C_rowmap); + } + KokkosSparse::Experimental::spgemm_symbolic( + &kh, m, n, k, A.graph.row_map, A.graph.entries, false, B.graph.row_map, + B.graph.entries, false, C_rowmap, true); + kh.destroy_spgemm_handle(); + bool isCorrect = KokkosKernels::Impl::kk_is_identical_view< + const_rowmap_t, const_rowmap_t, size_type, + typename device::execution_space>(C_rowmap, C_reference.graph.row_map, 0); + EXPECT_TRUE(isCorrect) + << " spgemm_symbolic produced incorrect rowptrs - callSymbolicFirst = " + << callSymbolicFirst << ", empty A/B = " << testEmpty; +} + template void test_issue402() { @@ -502,6 +566,10 @@ void test_issue402() { test_spgemm(10, 10, 0, 0, 10, 10, true); \ test_spgemm(10, 10, 10, 0, 0, 0, false); \ test_spgemm(10, 10, 10, 0, 0, 0, true); \ + test_spgemm_symbolic(true, true); \ + test_spgemm_symbolic(false, true); \ + test_spgemm_symbolic(true, false); \ + test_spgemm_symbolic(false, false); \ test_issue402(); \ } From 8da0962b7f47d8c65667458e020c050bc3e4ced6 Mon Sep 17 00:00:00 2001 From: Christian Trott Date: Tue, 29 Nov 2022 12:10:23 -0700 Subject: [PATCH 196/226] Initial license update for 4.0 --- LICENSE | 282 ++++++++++++++++++++++++++++++++------- LICENSE_FILE_HEADER | 15 +++ scripts/update-copyright | 36 ++++- 3 files changed, 282 insertions(+), 51 deletions(-) create mode 100644 LICENSE_FILE_HEADER diff --git a/LICENSE b/LICENSE index bdcc69653d..a1a74a4e4a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,46 +1,238 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// KokkosKernels is licensed under 3-clause BSD terms of use: -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ + ************************************************************************ + + Kokkos v. 4.0 + Copyright (2022) National Technology & Engineering + Solutions of Sandia, LLC (NTESS). + + Under the terms of Contract DE-NA0003525 with NTESS, + the U.S. Government retains certain rights in this software. + + ============================================================================== + Kokkos is under the Apache License v2.0 with LLVM Exceptions: + ============================================================================== + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS Apache 2.0 + + ---- LLVM Exceptions to the Apache 2.0 License ---- + + As an exception, if, as a result of your compiling your source code, portions + of this Software are embedded into an Object form of such source code, you + may redistribute such embedded portions in such Object form without complying + with the conditions of Sections 4(a), 4(b) and 4(d) of the License. + + In addition, if you combine or link compiled forms of this Software with + software that is licensed under the GPLv2 ("Combined Software") and if a + court of competent jurisdiction determines that the patent provision (Section + 3), the indemnity provision (Section 9) or other Section of the License + conflicts with the conditions of the GPLv2, you may retroactively and + prospectively choose to deem waived or otherwise exclude such Section(s) of + the License, but only in their entirety and only with respect to the Combined + Software. + + ============================================================================== + Software from third parties included in Kokkos: + ============================================================================== + + Kokkos contains third party software which is under different license + terms. All such code will be identified clearly using at least one of two + mechanisms: + 1) It will be in a separate directory tree with its own `LICENSE.txt` or + `LICENSE` file at the top containing the specific license and restrictions + which apply to that software, or + 2) It will contain specific license and restriction terms at the top of every + file. + + + THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Questions? Contact: + Siva Rajamanickam (srajama@sandia.gov) + Luc Berger-Vergiat (lberge@sandia.gov) + + ************************************************************************ diff --git a/LICENSE_FILE_HEADER b/LICENSE_FILE_HEADER new file mode 100644 index 0000000000..03eb04f8bd --- /dev/null +++ b/LICENSE_FILE_HEADER @@ -0,0 +1,15 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER diff --git a/scripts/update-copyright b/scripts/update-copyright index a5c16981fd..6f515d47b7 100755 --- a/scripts/update-copyright +++ b/scripts/update-copyright @@ -1,8 +1,32 @@ -#!/bin/bash - -files=`find . -name '*.cpp' -o -name '*.pc.in' -o -name '*.hpp' -o -name 'LICENSE' -o -name 'Copyright.txt' -o -name '*.cc'` +files=`find . -path './tpls' -prune -o -name '*.cpp' -o -name '*.pc.in' -o -name '*.h' -o -name '*.hpp' -o -name '*.cc'` +echo "" &> diff_files +echo "" &> clean_files +echo "" &> updated_files +tmp=`cat scripts/new_header | wc -l` +NNEW=$(($tmp)) +tmp=`cat scripts/old_header | wc -l` +NOLD=$(($tmp)) +NOLD1=$(($NOLD+1)) for file in $files; do -awk '{if($2=="Copyright" && $3=="2017" && $4=="Sandia" && $5=="Corporation") {print "// Copyright (2020) National Technology & Engineering"; print "// Solutions of Sandia, LLC (NTESS).";} else {print $0}}' $file | sed 's/DE-AC04-94AL85000 with Sandia Corporation/DE-NA0003525 with NTESS/g' | sed 's|KokkosKernels 0.9: Linear Algebra and Graph Kernels| Kokkos v. 3.0|g' &> tmp -sed -i 's|SANDIA CORPORATION|NTESS|g' tmp -cp tmp $file + head -n +$NOLD $file &> header + diff header scripts/old_header &> old_header_diff + count=`cat old_header_diff | wc -l` + #echo $file " " COUNT " " $count >> diff_headers + if [ "$count" -eq "0" ]; then + echo $file >> clean_files + cat old_header_diff >> clean_files + { head -n +$NNEW scripts/new_header; tail -n +$NOLD1 $file; } > tmp + cp tmp $file + else + head -n +$NNEW $file &> header + diff header scripts/new_header &> new_header_diff + count=`cat new_header_diff | wc -l` + if [ "$count" -eq "0" ]; then + echo $file >> updated_files + else + echo $file >> diff_files + #cat header_diff >> diff_files + tr -d '\n' < diff_files | sed 's|\.\/| |g' &> modify_files + fi + fi done From 6b1513351e2bc11a785d28ff33dcc162ccf34b68 Mon Sep 17 00:00:00 2001 From: Christian Trott Date: Tue, 29 Nov 2022 12:10:49 -0700 Subject: [PATCH 197/226] Fix most source file headers after rebase on develop --- .../dense/impl/KokkosBatched_Axpy_Impl.hpp | 36 +++-------------- .../impl/KokkosBatched_Gemm_Armpl_Impl.hpp | 36 +++-------------- .../impl/KokkosBatched_Gemm_DblBuf_Impl.hpp | 36 +++-------------- .../impl/KokkosBatched_Gemm_Serial_Impl.hpp | 36 +++-------------- .../dense/impl/KokkosBatched_Gesv_Impl.hpp | 36 +++-------------- .../KokkosBatched_HadamardProduct_Impl.hpp | 36 +++-------------- .../impl/KokkosBatched_Trmm_Serial_Impl.hpp | 38 +++--------------- .../KokkosBatched_Trmm_Serial_Internal.hpp | 38 +++--------------- .../impl/KokkosBatched_Trtri_Serial_Impl.hpp | 38 +++--------------- .../KokkosBatched_Trtri_Serial_Internal.hpp | 38 +++--------------- .../dense/impl/KokkosBatched_Xpay_Impl.hpp | 36 +++-------------- batched/dense/src/KokkosBatched_Axpy.hpp | 36 +++-------------- batched/dense/src/KokkosBatched_Dot.hpp | 36 +++-------------- batched/dense/src/KokkosBatched_Gemm_Decl.hpp | 36 +++-------------- .../dense/src/KokkosBatched_Gemm_Handle.hpp | 36 +++-------------- batched/dense/src/KokkosBatched_Gesv.hpp | 36 +++-------------- .../src/KokkosBatched_HadamardProduct.hpp | 36 +++-------------- .../dense/src/KokkosBatched_Kernel_Handle.hpp | 36 +++-------------- batched/dense/src/KokkosBatched_Trmm_Decl.hpp | 38 +++--------------- .../dense/src/KokkosBatched_Trtri_Decl.hpp | 38 +++--------------- batched/dense/src/KokkosBatched_Xpay.hpp | 36 +++-------------- .../impl/KokkosBatched_CG_TeamVector_Impl.hpp | 36 +++-------------- .../impl/KokkosBatched_CG_Team_Impl.hpp | 36 +++-------------- .../impl/KokkosBatched_GMRES_Serial_Impl.hpp | 36 +++-------------- .../KokkosBatched_GMRES_TeamVector_Impl.hpp | 36 +++-------------- .../impl/KokkosBatched_GMRES_Team_Impl.hpp | 36 +++-------------- .../impl/KokkosBatched_Spmv_Serial_Impl.hpp | 36 +++-------------- .../KokkosBatched_Spmv_TeamVector_Impl.hpp | 36 +++-------------- .../impl/KokkosBatched_Spmv_Team_Impl.hpp | 36 +++-------------- batched/sparse/src/KokkosBatched_CG.hpp | 36 +++-------------- .../sparse/src/KokkosBatched_CrsMatrix.hpp | 36 +++-------------- batched/sparse/src/KokkosBatched_GMRES.hpp | 36 +++-------------- batched/sparse/src/KokkosBatched_Identity.hpp | 36 +++-------------- .../sparse/src/KokkosBatched_JacobiPrec.hpp | 36 +++-------------- .../src/KokkosBatched_Krylov_Handle.hpp | 38 +++--------------- .../src/KokkosBatched_Krylov_Solvers.hpp | 38 +++--------------- batched/sparse/src/KokkosBatched_Spmv.hpp | 36 +++-------------- blas/impl/KokkosBlas1_abs_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_abs_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_axpby_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_axpby_mv_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_axpby_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_dot_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_dot_mv_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_dot_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_iamax_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_iamax_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_mult_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_mult_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_nrm1_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_nrm1_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_nrm2_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_nrm2_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_nrm2w_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_nrm2w_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_nrminf_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_nrminf_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_reciprocal_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_reciprocal_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_rot_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_rot_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_rotg_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_rotg_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_rotm_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_rotm_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_rotmg_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_rotmg_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_scal_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_scal_mv_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_scal_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_serial_scal_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_set_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_sum_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_sum_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_team_abs_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_team_axpby_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_team_dot_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_team_mult_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_team_nrm2_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_team_scal_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_team_scal_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_team_update_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas1_update_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas1_update_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas2_gemv_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas2_gemv_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas2_serial_gemv_impl.hpp | 38 +++--------------- ...osBlas2_serial_gemv_inner_multiple_dot.hpp | 38 +++--------------- .../impl/KokkosBlas2_serial_gemv_internal.hpp | 38 +++--------------- blas/impl/KokkosBlas2_team_gemv_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas2_team_gemv_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas3_gemm_dotbased_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas3_gemm_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas3_gemm_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas3_trmm_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas3_trmm_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas3_trsm_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas3_trsm_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas_Newton_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas_gesv_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas_gesv_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas_serial_axpy.hpp | 38 +++--------------- blas/impl/KokkosBlas_serial_nrm2.hpp | 38 +++--------------- blas/impl/KokkosBlas_trtri_impl.hpp | 38 +++--------------- blas/impl/KokkosBlas_trtri_spec.hpp | 38 +++--------------- blas/impl/KokkosBlas_util.hpp | 38 +++--------------- blas/src/KokkosBlas.hpp | 38 +++--------------- blas/src/KokkosBlas1_abs.hpp | 38 +++--------------- blas/src/KokkosBlas1_axpby.hpp | 38 +++--------------- blas/src/KokkosBlas1_dot.hpp | 38 +++--------------- blas/src/KokkosBlas1_fill.hpp | 38 +++--------------- blas/src/KokkosBlas1_iamax.hpp | 38 +++--------------- blas/src/KokkosBlas1_mult.hpp | 38 +++--------------- blas/src/KokkosBlas1_nrm1.hpp | 38 +++--------------- blas/src/KokkosBlas1_nrm2.hpp | 38 +++--------------- blas/src/KokkosBlas1_nrm2_squared.hpp | 38 +++--------------- blas/src/KokkosBlas1_nrm2w.hpp | 38 +++--------------- blas/src/KokkosBlas1_nrm2w_squared.hpp | 38 +++--------------- blas/src/KokkosBlas1_nrminf.hpp | 38 +++--------------- blas/src/KokkosBlas1_reciprocal.hpp | 38 +++--------------- blas/src/KokkosBlas1_rot.hpp | 38 +++--------------- blas/src/KokkosBlas1_rotg.hpp | 38 +++--------------- blas/src/KokkosBlas1_rotm.hpp | 38 +++--------------- blas/src/KokkosBlas1_rotmg.hpp | 38 +++--------------- blas/src/KokkosBlas1_scal.hpp | 38 +++--------------- blas/src/KokkosBlas1_set.hpp | 38 +++--------------- blas/src/KokkosBlas1_sum.hpp | 38 +++--------------- blas/src/KokkosBlas1_team_abs.hpp | 38 +++--------------- blas/src/KokkosBlas1_team_axpby.hpp | 38 +++--------------- blas/src/KokkosBlas1_team_dot.hpp | 38 +++--------------- blas/src/KokkosBlas1_team_mult.hpp | 38 +++--------------- blas/src/KokkosBlas1_team_nrm2.hpp | 38 +++--------------- blas/src/KokkosBlas1_team_scal.hpp | 38 +++--------------- blas/src/KokkosBlas1_team_update.hpp | 38 +++--------------- blas/src/KokkosBlas1_update.hpp | 38 +++--------------- blas/src/KokkosBlas2_gemv.hpp | 38 +++--------------- blas/src/KokkosBlas2_serial_gemv.hpp | 38 +++--------------- blas/src/KokkosBlas2_team_gemv.hpp | 38 +++--------------- blas/src/KokkosBlas3_gemm.hpp | 38 +++--------------- blas/src/KokkosBlas3_trmm.hpp | 38 +++--------------- blas/src/KokkosBlas3_trsm.hpp | 38 +++--------------- blas/src/KokkosBlas_gesv.hpp | 38 +++--------------- blas/src/KokkosBlas_trtri.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_abs_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_abs_tpl_spec_decl.hpp | 38 +++--------------- .../tpls/KokkosBlas1_axpby_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_axpby_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_dot_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_dot_tpl_spec_decl.hpp | 38 +++--------------- .../tpls/KokkosBlas1_iamax_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_iamax_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_mult_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_mult_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_nrm1_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_nrm1_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_nrm2_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_nrm2_tpl_spec_decl.hpp | 38 +++--------------- .../tpls/KokkosBlas1_nrm2w_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_nrm2w_tpl_spec_decl.hpp | 38 +++--------------- .../KokkosBlas1_nrminf_tpl_spec_avail.hpp | 38 +++--------------- .../tpls/KokkosBlas1_nrminf_tpl_spec_decl.hpp | 38 +++--------------- .../KokkosBlas1_reciprocal_tpl_spec_avail.hpp | 38 +++--------------- .../KokkosBlas1_reciprocal_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_rotm_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp | 38 +++--------------- .../tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_scal_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_scal_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_sum_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas1_sum_tpl_spec_decl.hpp | 38 +++--------------- .../KokkosBlas1_update_tpl_spec_avail.hpp | 38 +++--------------- .../tpls/KokkosBlas1_update_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas2_gemv_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp | 38 +++--------------- .../KokkosBlas2_serial_gemv_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas3_trmm_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas3_trmm_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas3_trsm_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas3_trsm_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas_Host_tpl.hpp | 38 +++--------------- blas/tpls/KokkosBlas_gesv_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas_gesv_tpl_spec_decl.hpp | 38 +++--------------- blas/tpls/KokkosBlas_tpl_spec.hpp | 38 +++--------------- blas/tpls/KokkosBlas_trtri_tpl_spec_avail.hpp | 38 +++--------------- blas/tpls/KokkosBlas_trtri_tpl_spec_decl.hpp | 38 +++--------------- blas/unit_test/Test_Blas1_serial_setscal.hpp | 38 +++--------------- blas/unit_test/Test_Blas1_team_setscal.hpp | 38 +++--------------- blas/unit_test/Test_Blas_serial_axpy.hpp | 38 +++--------------- blas/unit_test/Test_Blas_serial_nrm2.hpp | 38 +++--------------- common/src/KokkosKernels_BitUtils.hpp | 38 +++--------------- .../KokkosKernels_BlockHashmapAccumulator.hpp | 38 +++--------------- common/src/KokkosKernels_BlockUtils.hpp | 38 +++--------------- common/src/KokkosKernels_Error.hpp | 38 +++--------------- common/src/KokkosKernels_ExecSpaceUtils.hpp | 38 +++--------------- common/src/KokkosKernels_Half.hpp | 38 +++--------------- .../src/KokkosKernels_HashmapAccumulator.hpp | 38 +++--------------- common/src/KokkosKernels_IOUtils.hpp | 38 +++--------------- common/src/KokkosKernels_Macros.hpp | 36 +++-------------- common/src/KokkosKernels_PrintUtils.hpp | 38 +++--------------- common/src/KokkosKernels_SimpleUtils.hpp | 38 +++--------------- common/src/KokkosKernels_Sorting.hpp | 38 +++--------------- ...Kernels_Uniform_Initialized_MemoryPool.hpp | 38 +++--------------- common/src/KokkosKernels_Utils.hpp | 38 +++--------------- common/src/KokkosKernels_VectorUtils.hpp | 38 +++--------------- common/src/KokkosKernels_default_types.hpp | 38 +++--------------- common/src/KokkosKernels_helpers.hpp | 38 +++--------------- common/src/KokkosLinAlg_config.h | 36 +++-------------- common/src/Kokkos_ArithTraits.hpp | 38 +++--------------- common/src/Kokkos_InnerProductSpaceTraits.hpp | 38 +++--------------- common/unit_test/Test_Common_ArithTraits.hpp | 38 +++--------------- common/unit_test/Test_Common_Error.hpp | 38 +++--------------- common/unit_test/Test_Common_IOUtils.hpp | 38 +++--------------- common/unit_test/Test_Common_Sorting.hpp | 38 +++--------------- common/unit_test/Test_Common_float128.hpp | 38 +++--------------- .../unit_test/Test_Common_set_bit_count.hpp | 38 +++--------------- example/batched_solve/examples_helper.hpp | 36 +++-------------- example/batched_solve/static_pivoting.cpp | 36 +++-------------- example/batched_solve/team_GMRES.cpp | 36 +++-------------- example/fenl/BoxElemFixture.hpp | 38 +++--------------- example/fenl/BoxElemPart.cpp | 38 +++--------------- example/fenl/BoxElemPart.hpp | 38 +++--------------- example/fenl/CGSolve.hpp | 38 +++--------------- example/fenl/HexElement.hpp | 38 +++--------------- example/fenl/TestFixture.cpp | 38 +++--------------- example/fenl/TestFixture.hpp | 38 +++--------------- example/fenl/VectorImport.hpp | 38 +++--------------- example/fenl/WrapMPI.hpp | 38 +++--------------- example/fenl/fenl.cpp | 38 +++--------------- example/fenl/fenl.hpp | 38 +++--------------- example/fenl/fenl_functors.hpp | 38 +++--------------- example/fenl/fenl_impl.hpp | 38 +++--------------- example/fenl/main.cpp | 38 +++--------------- example/gmres/ex_real_A.cpp | 38 +++--------------- example/gmres/test_prec.cpp | 38 +++--------------- ...kosKernels_Example_Distance2GraphColor.cpp | 38 +++--------------- example/graph/PartitioningExample.cpp | 39 +++--------------- example/half/xpy.cpp | 36 +++-------------- ...kkosKernels_Example_HashmapAccumulator.cpp | 40 +++---------------- .../sparse/KokkosSparse_wiki_bsrmatrix.cpp | 38 +++--------------- graph/impl/KokkosGraph_BFS_impl.hpp | 38 +++--------------- .../impl/KokkosGraph_Distance1Color_impl.hpp | 38 +++--------------- .../impl/KokkosGraph_Distance2Color_impl.hpp | 38 +++--------------- graph/impl/KokkosGraph_Distance2MIS_impl.hpp | 38 +++--------------- .../KokkosGraph_ExplicitCoarsening_impl.hpp | 38 +++--------------- graph/impl/KokkosGraph_color_d1_spec.hpp | 38 +++--------------- graph/src/KokkosGraph_CoarsenConstruct.hpp | 38 +++--------------- graph/src/KokkosGraph_Distance1Color.hpp | 38 +++--------------- .../src/KokkosGraph_Distance1ColorHandle.hpp | 38 +++--------------- graph/src/KokkosGraph_Distance2Color.hpp | 38 +++--------------- .../src/KokkosGraph_Distance2ColorHandle.hpp | 38 +++--------------- graph/src/KokkosGraph_ExplicitCoarsening.hpp | 38 +++--------------- graph/src/KokkosGraph_GraphColorHandle.hpp | 38 +++--------------- graph/src/KokkosGraph_MIS2.hpp | 38 +++--------------- graph/src/KokkosGraph_RCM.hpp | 38 +++--------------- graph/src/KokkosGraph_Triangle.hpp | 38 +++--------------- graph/src/KokkosGraph_graph_color.hpp | 38 +++--------------- graph/unit_test/Test_Graph_coarsen.hpp | 38 +++--------------- graph/unit_test/Test_Graph_graph_color.hpp | 38 +++--------------- .../Test_Graph_graph_color_deterministic.hpp | 38 +++--------------- .../Test_Graph_graph_color_distance2.hpp | 38 +++--------------- graph/unit_test/Test_Graph_mis2.hpp | 38 +++--------------- graph/unit_test/Test_Graph_rcm.hpp | 38 +++--------------- .../CG/Functor_TestBatchedTeamVectorCG_1.hpp | 36 +++-------------- .../CG/Functor_TestBatchedTeamVectorCG_2.hpp | 36 +++-------------- .../CG/Functor_TestBatchedTeamVectorCG_3.hpp | 36 +++-------------- .../sparse/CG/KokkosBatched_Test_CG.cpp | 36 +++-------------- .../Functor_TestBatchedTeamVectorGMRES_1.hpp | 36 +++-------------- .../Functor_TestBatchedTeamVectorGMRES_2.hpp | 36 +++-------------- .../Functor_TestBatchedTeamVectorGMRES_3.hpp | 36 +++-------------- .../sparse/GMRES/KokkosBatched_Test_GMRES.cpp | 36 +++-------------- .../KokkosBatched_Test_Sparse_Helper.hpp | 36 +++-------------- .../sparse/SPMV/KokkosBatched_SPMV_View.hpp | 36 +++-------------- .../sparse/SPMV/KokkosBatched_Test_SPMV.cpp | 36 +++-------------- .../KokkosBatched_Test_cusolverDn.cpp | 36 +++-------------- .../KokkosBatched_Test_cusolverSp.cpp | 36 +++-------------- perf_test/blas/KokkosBlas_blas1.cpp | 38 +++--------------- perf_test/blas/KokkosBlas_blas1_MV.cpp | 38 +++--------------- perf_test/blas/blas1/KokkosBlas_common.hpp | 38 +++--------------- .../blas1/KokkosBlas_dot_mv_perf_test.cpp | 38 +++--------------- .../blas/blas1/KokkosBlas_dot_perf_test.cpp | 38 +++--------------- .../KokkosBlas_dot_tracked_perf_test.cpp | 38 +++--------------- perf_test/blas/blas1/KokkosBlas_perf_test.cpp | 38 +++--------------- .../blas1/KokkosBlas_team_dot_perf_test.cpp | 38 +++--------------- .../KokkosBlas_team_dot_tracked_perf_test.cpp | 38 +++--------------- .../blas/blas2/KokkosBlas2_gemv_perf_test.cpp | 38 +++--------------- .../KokkosBlas2_gemv_tracked_perf_test.cpp | 38 +++--------------- perf_test/blas/blas3/KokkosBlas3_common.hpp | 38 +++--------------- .../blas/blas3/KokkosBlas3_gemm_perf_test.hpp | 38 +++--------------- .../KokkosBlas3_gemm_standalone_perf_test.cpp | 38 +++--------------- .../KokkosBlas3_gemm_tracked_perf_test.cpp | 38 +++--------------- .../KokkosBlas3_gemm_tracked_perf_test.hpp | 38 +++--------------- .../blas/blas3/KokkosBlas3_perf_test.cpp | 38 +++--------------- .../blas/blas3/KokkosBlas3_trmm_perf_test.hpp | 38 +++--------------- .../blas/blas3/KokkosBlas_trtri_perf_test.hpp | 38 +++--------------- perf_test/graph/KokkosGraph_color.cpp | 38 +++--------------- perf_test/graph/KokkosGraph_color_d2.cpp | 38 +++--------------- perf_test/graph/KokkosGraph_mis_d2.cpp | 38 +++--------------- .../graph/KokkosGraph_multimem_triangle.hpp | 38 +++--------------- perf_test/graph/KokkosGraph_run_triangle.hpp | 38 +++--------------- perf_test/graph/KokkosGraph_triangle.cpp | 38 +++--------------- perf_test/performance/performance_example.cpp | 38 +++--------------- .../performance/performance_validate.cpp | 38 +++--------------- perf_test/sparse/KokkosSparse_block_pcg.cpp | 38 +++--------------- perf_test/sparse/KokkosSparse_gs.cpp | 38 +++--------------- perf_test/sparse/KokkosSparse_kk_spmv.cpp | 38 +++--------------- .../sparse/KokkosSparse_multimem_spgemm.hpp | 38 +++--------------- perf_test/sparse/KokkosSparse_pcg.cpp | 38 +++--------------- perf_test/sparse/KokkosSparse_pcg.hpp | 38 +++--------------- perf_test/sparse/KokkosSparse_run_spgemm.hpp | 38 +++--------------- .../sparse/KokkosSparse_run_spgemm_jacobi.hpp | 38 +++--------------- perf_test/sparse/KokkosSparse_spadd.cpp | 38 +++--------------- perf_test/sparse/KokkosSparse_spgemm.cpp | 38 +++--------------- .../sparse/KokkosSparse_spgemm_jacobi.cpp | 38 +++--------------- perf_test/sparse/KokkosSparse_spiluk.cpp | 38 +++--------------- perf_test/sparse/KokkosSparse_spmv.cpp | 38 +++--------------- perf_test/sparse/KokkosSparse_spmv_bsr.cpp | 38 +++--------------- perf_test/sparse/KokkosSparse_spmv_merge.cpp | 38 +++--------------- perf_test/sparse/KokkosSparse_spmv_struct.cpp | 38 +++--------------- .../KokkosSparse_spmv_struct_tuning.cpp | 38 +++--------------- perf_test/sparse/KokkosSparse_spmv_test.cpp | 38 +++--------------- perf_test/sparse/KokkosSparse_sptrsv.cpp | 38 +++--------------- perf_test/sparse/KokkosSparse_sptrsv_aux.hpp | 38 +++--------------- .../sparse/KokkosSparse_sptrsv_cholmod.cpp | 39 +++--------------- .../sparse/KokkosSparse_sptrsv_superlu.cpp | 38 +++--------------- .../sparse/KokkosSparse_sptrsv_supernode.cpp | 38 +++--------------- perf_test/sparse/spmv/ArmPL_SPMV.hpp | 38 +++--------------- perf_test/sparse/spmv/CuSparse_SPMV.hpp | 38 +++--------------- perf_test/sparse/spmv/KokkosKernels_SPMV.hpp | 38 +++--------------- .../sparse/spmv/KokkosKernels_spmv_data.hpp | 38 +++--------------- perf_test/sparse/spmv/Kokkos_SPMV.hpp | 38 +++--------------- .../sparse/spmv/Kokkos_SPMV_Inspector.hpp | 38 +++--------------- perf_test/sparse/spmv/MKL_SPMV.hpp | 38 +++--------------- perf_test/sparse/spmv/OpenMPDynamic_SPMV.hpp | 38 +++--------------- .../sparse/spmv/OpenMPSmartStatic_SPMV.cpp | 38 +++--------------- .../sparse/spmv/OpenMPSmartStatic_SPMV.hpp | 38 +++--------------- perf_test/sparse/spmv/OpenMPStatic_SPMV.hpp | 38 +++--------------- perf_test/sparse/spmv/matrix_market.hpp | 38 +++--------------- perf_test/test_crsmatrix.cpp | 38 +++--------------- perf_test/test_mv.cpp | 38 +++--------------- sparse/impl/KokkosSparse_bspgemm_impl.hpp | 38 +++--------------- sparse/impl/KokkosSparse_bspgemm_impl_def.hpp | 38 +++--------------- .../impl/KokkosSparse_bspgemm_impl_kkmem.hpp | 38 +++--------------- sparse/impl/KokkosSparse_bspgemm_impl_seq.hpp | 38 +++--------------- .../impl/KokkosSparse_bspgemm_impl_speed.hpp | 38 +++--------------- .../KokkosSparse_bspgemm_numeric_spec.hpp | 38 +++--------------- ...KokkosSparse_cluster_gauss_seidel_impl.hpp | 38 +++--------------- .../impl/KokkosSparse_gauss_seidel_impl.hpp | 38 +++--------------- .../impl/KokkosSparse_gauss_seidel_spec.hpp | 38 +++--------------- ...kkosSparse_getDiagCopyWithOffsets_impl.hpp | 38 +++--------------- sparse/impl/KokkosSparse_mdf_impl.hpp | 38 +++--------------- .../KokkosSparse_par_ilut_numeric_impl.hpp | 38 +++--------------- .../KokkosSparse_par_ilut_numeric_spec.hpp | 38 +++--------------- .../KokkosSparse_par_ilut_symbolic_impl.hpp | 38 +++--------------- .../KokkosSparse_par_ilut_symbolic_spec.hpp | 38 +++--------------- .../impl/KokkosSparse_partitioning_impl.hpp | 38 +++--------------- .../impl/KokkosSparse_sor_sequential_impl.hpp | 38 +++--------------- .../impl/KokkosSparse_spadd_numeric_impl.hpp | 38 +++--------------- .../impl/KokkosSparse_spadd_numeric_spec.hpp | 38 +++--------------- .../impl/KokkosSparse_spadd_symbolic_impl.hpp | 38 +++--------------- .../impl/KokkosSparse_spadd_symbolic_spec.hpp | 38 +++--------------- sparse/impl/KokkosSparse_spgemm_imp_outer.hpp | 38 +++--------------- sparse/impl/KokkosSparse_spgemm_impl.hpp | 38 +++--------------- .../impl/KokkosSparse_spgemm_impl_color.hpp | 38 +++--------------- .../KokkosSparse_spgemm_impl_compression.hpp | 38 +++--------------- sparse/impl/KokkosSparse_spgemm_impl_def.hpp | 38 +++--------------- .../impl/KokkosSparse_spgemm_impl_kkmem.hpp | 38 +++--------------- .../KokkosSparse_spgemm_impl_memaccess.hpp | 38 +++--------------- sparse/impl/KokkosSparse_spgemm_impl_seq.hpp | 38 +++--------------- .../impl/KokkosSparse_spgemm_impl_speed.hpp | 38 +++--------------- .../KokkosSparse_spgemm_impl_symbolic.hpp | 38 +++--------------- .../KokkosSparse_spgemm_impl_triangle.hpp | 38 +++--------------- ...se_spgemm_impl_triangle_no_compression.hpp | 38 +++--------------- ...kkosSparse_spgemm_jacobi_denseacc_impl.hpp | 38 +++--------------- .../KokkosSparse_spgemm_jacobi_seq_impl.hpp | 38 +++--------------- ...kosSparse_spgemm_jacobi_sparseacc_impl.hpp | 38 +++--------------- .../impl/KokkosSparse_spgemm_jacobi_spec.hpp | 38 +++--------------- .../impl/KokkosSparse_spgemm_numeric_spec.hpp | 38 +++--------------- .../KokkosSparse_spgemm_symbolic_spec.hpp | 38 +++--------------- .../impl/KokkosSparse_spiluk_numeric_impl.hpp | 38 +++--------------- .../impl/KokkosSparse_spiluk_numeric_spec.hpp | 38 +++--------------- .../KokkosSparse_spiluk_symbolic_impl.hpp | 38 +++--------------- .../KokkosSparse_spiluk_symbolic_spec.hpp | 38 +++--------------- .../impl/KokkosSparse_spmv_bsrmatrix_impl.hpp | 38 +++--------------- .../impl/KokkosSparse_spmv_bsrmatrix_spec.hpp | 38 +++--------------- sparse/impl/KokkosSparse_spmv_impl.hpp | 38 +++--------------- sparse/impl/KokkosSparse_spmv_impl_omp.hpp | 38 +++--------------- sparse/impl/KokkosSparse_spmv_spec.hpp | 38 +++--------------- sparse/impl/KokkosSparse_spmv_struct_impl.hpp | 38 +++--------------- sparse/impl/KokkosSparse_spmv_struct_spec.hpp | 38 +++--------------- .../KokkosSparse_sptrsv_cuSPARSE_impl.hpp | 38 +++--------------- .../impl/KokkosSparse_sptrsv_solve_impl.hpp | 38 +++--------------- .../impl/KokkosSparse_sptrsv_solve_spec.hpp | 38 +++--------------- .../KokkosSparse_sptrsv_symbolic_impl.hpp | 38 +++--------------- .../KokkosSparse_sptrsv_symbolic_spec.hpp | 38 +++--------------- sparse/impl/KokkosSparse_trsv_impl.hpp | 38 +++--------------- sparse/impl/KokkosSparse_trsv_spec.hpp | 38 +++--------------- ...okkosSparse_twostage_gauss_seidel_impl.hpp | 38 +++--------------- sparse/src/KokkosKernels_Controls.hpp | 38 +++--------------- sparse/src/KokkosKernels_Handle.hpp | 38 +++--------------- sparse/src/KokkosSparse.hpp | 38 +++--------------- sparse/src/KokkosSparse_BsrMatrix.hpp | 38 +++--------------- sparse/src/KokkosSparse_CcsMatrix.hpp | 38 +++--------------- sparse/src/KokkosSparse_CrsMatrix.hpp | 38 +++--------------- sparse/src/KokkosSparse_IOUtils.hpp | 38 +++--------------- sparse/src/KokkosSparse_MatrixPrec.hpp | 38 +++--------------- sparse/src/KokkosSparse_OrdinalTraits.hpp | 38 +++--------------- sparse/src/KokkosSparse_Preconditioner.hpp | 38 +++--------------- sparse/src/KokkosSparse_SortCrs.hpp | 38 +++--------------- sparse/src/KokkosSparse_Utils.hpp | 38 +++--------------- sparse/src/KokkosSparse_Utils_cusparse.hpp | 38 +++--------------- sparse/src/KokkosSparse_Utils_mkl.hpp | 38 +++--------------- sparse/src/KokkosSparse_Utils_rocsparse.hpp | 38 +++--------------- sparse/src/KokkosSparse_ccs2crs.hpp | 38 +++--------------- sparse/src/KokkosSparse_crs2ccs.hpp | 38 +++--------------- sparse/src/KokkosSparse_findRelOffset.hpp | 38 +++--------------- sparse/src/KokkosSparse_gauss_seidel.hpp | 38 +++--------------- .../src/KokkosSparse_gauss_seidel_handle.hpp | 38 +++--------------- sparse/src/KokkosSparse_getDiagCopy.hpp | 38 +++--------------- sparse/src/KokkosSparse_mdf.hpp | 38 +++--------------- sparse/src/KokkosSparse_mdf_handle.hpp | 38 +++--------------- sparse/src/KokkosSparse_par_ilut.hpp | 38 +++--------------- sparse/src/KokkosSparse_par_ilut_handle.hpp | 38 +++--------------- sparse/src/KokkosSparse_spadd.hpp | 38 +++--------------- sparse/src/KokkosSparse_spadd_handle.hpp | 38 +++--------------- sparse/src/KokkosSparse_spgemm.hpp | 38 +++--------------- sparse/src/KokkosSparse_spgemm_handle.hpp | 38 +++--------------- sparse/src/KokkosSparse_spgemm_jacobi.hpp | 38 +++--------------- sparse/src/KokkosSparse_spgemm_numeric.hpp | 38 +++--------------- sparse/src/KokkosSparse_spgemm_symbolic.hpp | 38 +++--------------- sparse/src/KokkosSparse_spiluk.hpp | 38 +++--------------- sparse/src/KokkosSparse_spiluk_handle.hpp | 38 +++--------------- sparse/src/KokkosSparse_spmv.hpp | 38 +++--------------- sparse/src/KokkosSparse_sptrsv.hpp | 38 +++--------------- sparse/src/KokkosSparse_sptrsv_cholmod.hpp | 38 +++--------------- sparse/src/KokkosSparse_sptrsv_handle.hpp | 38 +++--------------- sparse/src/KokkosSparse_sptrsv_superlu.hpp | 38 +++--------------- sparse/src/KokkosSparse_sptrsv_supernode.hpp | 38 +++--------------- sparse/src/KokkosSparse_trsv.hpp | 38 +++--------------- sparse/tpls/KokkosKernels_tpl_handles.cpp | 38 +++--------------- .../tpls/KokkosKernels_tpl_handles_decl.hpp | 38 +++--------------- sparse/tpls/KokkosKernels_tpl_handles_def.hpp | 38 +++--------------- ...kkosSparse_gauss_seidel_tpl_spec_avail.hpp | 38 +++--------------- ...okkosSparse_gauss_seidel_tpl_spec_decl.hpp | 38 +++--------------- ...Sparse_par_ilut_numeric_tpl_spec_avail.hpp | 38 +++--------------- ...sSparse_par_ilut_numeric_tpl_spec_decl.hpp | 38 +++--------------- ...parse_par_ilut_symbolic_tpl_spec_avail.hpp | 38 +++--------------- ...Sparse_par_ilut_symbolic_tpl_spec_decl.hpp | 38 +++--------------- .../KokkosSparse_spadd_tpl_spec_avail.hpp | 38 +++--------------- .../tpls/KokkosSparse_spadd_tpl_spec_decl.hpp | 38 +++--------------- ...kosSparse_spgemm_jacobi_tpl_spec_avail.hpp | 38 +++--------------- ...kkosSparse_spgemm_jacobi_tpl_spec_decl.hpp | 38 +++--------------- ...osSparse_spiluk_numeric_tpl_spec_avail.hpp | 38 +++--------------- ...kosSparse_spiluk_numeric_tpl_spec_decl.hpp | 38 +++--------------- ...sSparse_spiluk_symbolic_tpl_spec_avail.hpp | 38 +++--------------- ...osSparse_spiluk_symbolic_tpl_spec_decl.hpp | 38 +++--------------- ...osSparse_spmv_bsrmatrix_tpl_spec_avail.hpp | 38 +++--------------- ...kosSparse_spmv_bsrmatrix_tpl_spec_decl.hpp | 38 +++--------------- .../KokkosSparse_spmv_mv_tpl_spec_avail.hpp | 38 +++--------------- .../KokkosSparse_spmv_mv_tpl_spec_decl.hpp | 38 +++--------------- ...okkosSparse_spmv_struct_tpl_spec_avail.hpp | 38 +++--------------- ...KokkosSparse_spmv_struct_tpl_spec_decl.hpp | 38 +++--------------- .../tpls/KokkosSparse_spmv_tpl_spec_avail.hpp | 38 +++--------------- .../tpls/KokkosSparse_spmv_tpl_spec_decl.hpp | 38 +++--------------- ...kkosSparse_sptrsv_solve_tpl_spec_avail.hpp | 38 +++--------------- ...okkosSparse_sptrsv_solve_tpl_spec_decl.hpp | 38 +++--------------- ...sSparse_sptrsv_symbolic_tpl_spec_avail.hpp | 38 +++--------------- ...osSparse_sptrsv_symbolic_tpl_spec_decl.hpp | 38 +++--------------- .../tpls/KokkosSparse_trsv_tpl_spec_avail.hpp | 38 +++--------------- .../tpls/KokkosSparse_trsv_tpl_spec_decl.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_BsrMatrix.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_Controls.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_CrsMatrix.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_SortCrs.hpp | 38 +++--------------- .../Test_Sparse_TestUtils_RandCsMat.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_Transpose.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_Utils.hpp | 38 +++--------------- .../Test_Sparse_block_gauss_seidel.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_bspgemm.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_ccs2crs.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_crs2ccs.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_csc2csr.hpp | 38 +++--------------- .../unit_test/Test_Sparse_findRelOffset.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_gauss_seidel.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_mdf.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_par_ilut.hpp | 38 +++--------------- .../unit_test/Test_Sparse_replaceSumInto.hpp | 38 +++--------------- .../Test_Sparse_replaceSumIntoLonger.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_spgemm.hpp | 38 +++--------------- .../unit_test/Test_Sparse_spgemm_jacobi.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_spiluk.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_spmv_bsr.hpp | 38 +++--------------- sparse/unit_test/Test_Sparse_sptrsv.hpp | 38 +++--------------- test_common/KokkosKernels_MatrixConverter.cpp | 38 +++--------------- test_common/KokkosKernels_MyCRSMatrix.hpp | 38 +++--------------- test_common/KokkosKernels_TestParameters.hpp | 38 +++--------------- test_common/KokkosKernels_TestUtils.hpp | 38 +++--------------- .../KokkosKernels_Test_Structured_Matrix.hpp | 38 +++--------------- ...KokkosKernels_WriteBinaryFromBinSrcDst.cpp | 38 +++--------------- test_common/Kokkos_Performance.hpp | 36 +++-------------- .../Test_Common_Test_All_Type_Combos.hpp | 38 +++--------------- 507 files changed, 2537 insertions(+), 16635 deletions(-) diff --git a/batched/dense/impl/KokkosBatched_Axpy_Impl.hpp b/batched/dense/impl/KokkosBatched_Axpy_Impl.hpp index 1d45931bc4..ab77c30e83 100644 --- a/batched/dense/impl/KokkosBatched_Axpy_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Axpy_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_AXPY_IMPL_HPP__ #define __KOKKOSBATCHED_AXPY_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Gemm_Armpl_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemm_Armpl_Impl.hpp index 63de04a50f..16355654c1 100644 --- a/batched/dense/impl/KokkosBatched_Gemm_Armpl_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Gemm_Armpl_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_GEMM_ARMPL_IMPL_HPP__ #define __KOKKOSBATCHED_GEMM_ARMPL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Gemm_DblBuf_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemm_DblBuf_Impl.hpp index d6331e215d..301b962fcb 100644 --- a/batched/dense/impl/KokkosBatched_Gemm_DblBuf_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Gemm_DblBuf_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_GEMM_DBLBUF_IMPL_HPP__ #define __KOKKOSBATCHED_GEMM_DBLBUF_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Gemm_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemm_Serial_Impl.hpp index 3331e847b2..97d3d70e9d 100644 --- a/batched/dense/impl/KokkosBatched_Gemm_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Gemm_Serial_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_GEMM_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_GEMM_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Gesv_Impl.hpp b/batched/dense/impl/KokkosBatched_Gesv_Impl.hpp index a9e10a1ebd..c98aa08788 100644 --- a/batched/dense/impl/KokkosBatched_Gesv_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Gesv_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_GESV_IMPL_HPP__ #define __KOKKOSBATCHED_GESV_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_HadamardProduct_Impl.hpp b/batched/dense/impl/KokkosBatched_HadamardProduct_Impl.hpp index 7d86368c3d..7dcdc78811 100644 --- a/batched/dense/impl/KokkosBatched_HadamardProduct_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_HadamardProduct_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_HADAMARDPRODUCT_IMPL_HPP__ #define __KOKKOSBATCHED_HADAMARDPRODUCT_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trmm_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Trmm_Serial_Impl.hpp index fd99e8413f..044af0814c 100644 --- a/batched/dense/impl/KokkosBatched_Trmm_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Trmm_Serial_Impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef __KOKKOSBATCHED_TRMM_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_TRMM_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trmm_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Trmm_Serial_Internal.hpp index ac53992064..e08089593a 100644 --- a/batched/dense/impl/KokkosBatched_Trmm_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Trmm_Serial_Internal.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef __KOKKOSBATCHED_TRMM_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_TRMM_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trtri_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Trtri_Serial_Impl.hpp index 703f46ed25..66c8f91ac9 100644 --- a/batched/dense/impl/KokkosBatched_Trtri_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Trtri_Serial_Impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef __KOKKOSBATCHED_TRTRI_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_TRTRI_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trtri_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Trtri_Serial_Internal.hpp index 8c8af6cbd5..2941b03ccf 100644 --- a/batched/dense/impl/KokkosBatched_Trtri_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Trtri_Serial_Internal.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef __KOKKOSBATCHED_TRTRI_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_TRTRI_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Xpay_Impl.hpp b/batched/dense/impl/KokkosBatched_Xpay_Impl.hpp index df18e16573..ba144cc778 100644 --- a/batched/dense/impl/KokkosBatched_Xpay_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Xpay_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_XPAY_IMPL_HPP__ #define __KOKKOSBATCHED_XPAY_IMPL_HPP__ diff --git a/batched/dense/src/KokkosBatched_Axpy.hpp b/batched/dense/src/KokkosBatched_Axpy.hpp index d9c33bf889..b76772f3b2 100644 --- a/batched/dense/src/KokkosBatched_Axpy.hpp +++ b/batched/dense/src/KokkosBatched_Axpy.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_AXPY_HPP__ #define __KOKKOSBATCHED_AXPY_HPP__ diff --git a/batched/dense/src/KokkosBatched_Dot.hpp b/batched/dense/src/KokkosBatched_Dot.hpp index 43d8c5ee5b..c04914e220 100644 --- a/batched/dense/src/KokkosBatched_Dot.hpp +++ b/batched/dense/src/KokkosBatched_Dot.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_DOT_HPP__ #define __KOKKOSBATCHED_DOT_HPP__ diff --git a/batched/dense/src/KokkosBatched_Gemm_Decl.hpp b/batched/dense/src/KokkosBatched_Gemm_Decl.hpp index a9bc848789..d182197192 100644 --- a/batched/dense/src/KokkosBatched_Gemm_Decl.hpp +++ b/batched/dense/src/KokkosBatched_Gemm_Decl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_GEMM_DECL_HPP__ #define __KOKKOSBATCHED_GEMM_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_Gemm_Handle.hpp b/batched/dense/src/KokkosBatched_Gemm_Handle.hpp index 402f10a91f..6ab94b92d7 100644 --- a/batched/dense/src/KokkosBatched_Gemm_Handle.hpp +++ b/batched/dense/src/KokkosBatched_Gemm_Handle.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER // diff --git a/batched/dense/src/KokkosBatched_Gesv.hpp b/batched/dense/src/KokkosBatched_Gesv.hpp index cda2225c43..3abedfd0aa 100644 --- a/batched/dense/src/KokkosBatched_Gesv.hpp +++ b/batched/dense/src/KokkosBatched_Gesv.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_GESV_HPP__ #define __KOKKOSBATCHED_GESV_HPP__ diff --git a/batched/dense/src/KokkosBatched_HadamardProduct.hpp b/batched/dense/src/KokkosBatched_HadamardProduct.hpp index 04ffc07074..fadd4b5774 100644 --- a/batched/dense/src/KokkosBatched_HadamardProduct.hpp +++ b/batched/dense/src/KokkosBatched_HadamardProduct.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_HADAMARDPRODUCT_HPP__ #define __KOKKOSBATCHED_HADAMARDPRODUCT_HPP__ diff --git a/batched/dense/src/KokkosBatched_Kernel_Handle.hpp b/batched/dense/src/KokkosBatched_Kernel_Handle.hpp index ec8d2ee23f..faa6b4f48c 100644 --- a/batched/dense/src/KokkosBatched_Kernel_Handle.hpp +++ b/batched/dense/src/KokkosBatched_Kernel_Handle.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER // diff --git a/batched/dense/src/KokkosBatched_Trmm_Decl.hpp b/batched/dense/src/KokkosBatched_Trmm_Decl.hpp index f00eaadd67..81d1f8d073 100644 --- a/batched/dense/src/KokkosBatched_Trmm_Decl.hpp +++ b/batched/dense/src/KokkosBatched_Trmm_Decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef __KOKKOSBATCHED_TRMM_DECL_HPP__ #define __KOKKOSBATCHED_TRMM_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_Trtri_Decl.hpp b/batched/dense/src/KokkosBatched_Trtri_Decl.hpp index d5beb82773..8c8e6121a3 100644 --- a/batched/dense/src/KokkosBatched_Trtri_Decl.hpp +++ b/batched/dense/src/KokkosBatched_Trtri_Decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef __KOKKOSBATCHED_TRTRI_DECL_HPP__ #define __KOKKOSBATCHED_TRTRI_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_Xpay.hpp b/batched/dense/src/KokkosBatched_Xpay.hpp index 26cb96835e..1e9a08623b 100644 --- a/batched/dense/src/KokkosBatched_Xpay.hpp +++ b/batched/dense/src/KokkosBatched_Xpay.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_XPAY_HPP__ #define __KOKKOSBATCHED_XPAY_HPP__ diff --git a/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp index d7d84ea253..030e452249 100644 --- a/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_CG_TeamVector_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_CG_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_CG_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp b/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp index adb5b19121..aa528322ad 100644 --- a/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_CG_Team_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_CG_TEAM_IMPL_HPP__ #define __KOKKOSBATCHED_CG_TEAM_IMPL_HPP__ diff --git a/batched/sparse/impl/KokkosBatched_GMRES_Serial_Impl.hpp b/batched/sparse/impl/KokkosBatched_GMRES_Serial_Impl.hpp index f8435754f6..071b2d6634 100644 --- a/batched/sparse/impl/KokkosBatched_GMRES_Serial_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_GMRES_Serial_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_GMRES_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_GMRES_SERIAL_IMPL_HPP__ diff --git a/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp index c858d36c6f..e76d8c4239 100644 --- a/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_GMRES_TeamVector_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_GMRES_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_GMRES_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp b/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp index 933ef97adf..15cb7bdca9 100644 --- a/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_GMRES_Team_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_GMRES_TEAM_IMPL_HPP__ #define __KOKKOSBATCHED_GMRES_TEAM_IMPL_HPP__ diff --git a/batched/sparse/impl/KokkosBatched_Spmv_Serial_Impl.hpp b/batched/sparse/impl/KokkosBatched_Spmv_Serial_Impl.hpp index ed9ae13c6c..d5a19cb56b 100644 --- a/batched/sparse/impl/KokkosBatched_Spmv_Serial_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_Spmv_Serial_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_SPMV_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_SPMV_SERIAL_IMPL_HPP__ diff --git a/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp b/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp index b6f614a252..6f04427924 100644 --- a/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_Spmv_TeamVector_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_SPMV_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_SPMV_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/sparse/impl/KokkosBatched_Spmv_Team_Impl.hpp b/batched/sparse/impl/KokkosBatched_Spmv_Team_Impl.hpp index 981c59f871..bf2f0a82e7 100644 --- a/batched/sparse/impl/KokkosBatched_Spmv_Team_Impl.hpp +++ b/batched/sparse/impl/KokkosBatched_Spmv_Team_Impl.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_SPMV_TEAM_IMPL_HPP__ #define __KOKKOSBATCHED_SPMV_TEAM_IMPL_HPP__ diff --git a/batched/sparse/src/KokkosBatched_CG.hpp b/batched/sparse/src/KokkosBatched_CG.hpp index 7fa1f7e04b..baa6dca42e 100644 --- a/batched/sparse/src/KokkosBatched_CG.hpp +++ b/batched/sparse/src/KokkosBatched_CG.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_CG_HPP__ #define __KOKKOSBATCHED_CG_HPP__ diff --git a/batched/sparse/src/KokkosBatched_CrsMatrix.hpp b/batched/sparse/src/KokkosBatched_CrsMatrix.hpp index a3400db839..4ceddeea44 100644 --- a/batched/sparse/src/KokkosBatched_CrsMatrix.hpp +++ b/batched/sparse/src/KokkosBatched_CrsMatrix.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_CRSMATRIX_HPP__ #define __KOKKOSBATCHED_CRSMATRIX_HPP__ diff --git a/batched/sparse/src/KokkosBatched_GMRES.hpp b/batched/sparse/src/KokkosBatched_GMRES.hpp index 51efc24aed..0d27bcd6fb 100644 --- a/batched/sparse/src/KokkosBatched_GMRES.hpp +++ b/batched/sparse/src/KokkosBatched_GMRES.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_GMRES_HPP__ #define __KOKKOSBATCHED_GMRES_HPP__ diff --git a/batched/sparse/src/KokkosBatched_Identity.hpp b/batched/sparse/src/KokkosBatched_Identity.hpp index 6613bdd1ec..4e8e7c4308 100644 --- a/batched/sparse/src/KokkosBatched_Identity.hpp +++ b/batched/sparse/src/KokkosBatched_Identity.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_IDENTITY_HPP__ #define __KOKKOSBATCHED_IDENTITY_HPP__ diff --git a/batched/sparse/src/KokkosBatched_JacobiPrec.hpp b/batched/sparse/src/KokkosBatched_JacobiPrec.hpp index e4bfbefd0f..1185ec94d4 100644 --- a/batched/sparse/src/KokkosBatched_JacobiPrec.hpp +++ b/batched/sparse/src/KokkosBatched_JacobiPrec.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_JACOBIPREC_HPP__ #define __KOKKOSBATCHED_JACOBIPREC_HPP__ diff --git a/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp b/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp index 4fe3edaf3e..aff0219175 100644 --- a/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp +++ b/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef __KOKKOSBATCHED_KRYLOV_HANDLE_HPP__ #define __KOKKOSBATCHED_KRYLOV_HANDLE_HPP__ diff --git a/batched/sparse/src/KokkosBatched_Krylov_Solvers.hpp b/batched/sparse/src/KokkosBatched_Krylov_Solvers.hpp index 240bd56c74..262167ee64 100644 --- a/batched/sparse/src/KokkosBatched_Krylov_Solvers.hpp +++ b/batched/sparse/src/KokkosBatched_Krylov_Solvers.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef __KOKKOSBATCHED_KRYLOV_SOLVERS_HPP__ #define __KOKKOSBATCHED_KRYLOV_SOLVERS_HPP__ diff --git a/batched/sparse/src/KokkosBatched_Spmv.hpp b/batched/sparse/src/KokkosBatched_Spmv.hpp index 06aa92062c..9debd0bc27 100644 --- a/batched/sparse/src/KokkosBatched_Spmv.hpp +++ b/batched/sparse/src/KokkosBatched_Spmv.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef __KOKKOSBATCHED_SPMV_HPP__ #define __KOKKOSBATCHED_SPMV_HPP__ diff --git a/blas/impl/KokkosBlas1_abs_impl.hpp b/blas/impl/KokkosBlas1_abs_impl.hpp index 06fb23301b..a1b86cffb7 100644 --- a/blas/impl/KokkosBlas1_abs_impl.hpp +++ b/blas/impl/KokkosBlas1_abs_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_BLAS1_IMPL_ABS_HPP_ #define KOKKOS_BLAS1_IMPL_ABS_HPP_ diff --git a/blas/impl/KokkosBlas1_abs_spec.hpp b/blas/impl/KokkosBlas1_abs_spec.hpp index eb7d083253..525d1e9ee8 100644 --- a/blas/impl/KokkosBlas1_abs_spec.hpp +++ b/blas/impl/KokkosBlas1_abs_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_BLAS1_IMPL_ABS_SPEC_HPP_ #define KOKKOS_BLAS1_IMPL_ABS_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_axpby_impl.hpp b/blas/impl/KokkosBlas1_axpby_impl.hpp index ed66569d7f..e159ea798e 100644 --- a/blas/impl/KokkosBlas1_axpby_impl.hpp +++ b/blas/impl/KokkosBlas1_axpby_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_AXPBY_IMPL_HPP_ #define KOKKOSBLAS1_AXPBY_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_axpby_mv_impl.hpp b/blas/impl/KokkosBlas1_axpby_mv_impl.hpp index a7ea69bdd2..5853106823 100644 --- a/blas/impl/KokkosBlas1_axpby_mv_impl.hpp +++ b/blas/impl/KokkosBlas1_axpby_mv_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_AXPBY_MV_IMPL_HPP_ #define KOKKOSBLAS1_AXPBY_MV_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_axpby_spec.hpp b/blas/impl/KokkosBlas1_axpby_spec.hpp index 0269d2376c..e9c1fb645a 100644 --- a/blas/impl/KokkosBlas1_axpby_spec.hpp +++ b/blas/impl/KokkosBlas1_axpby_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_BLAS1_AXPBY_SPEC_HPP_ #define KOKKOS_BLAS1_AXPBY_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_dot_impl.hpp b/blas/impl/KokkosBlas1_dot_impl.hpp index 5430e0177b..cfcd0020ef 100644 --- a/blas/impl/KokkosBlas1_dot_impl.hpp +++ b/blas/impl/KokkosBlas1_dot_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_IMPL_DOT_IMPL_HPP_ #define KOKKOSBLAS1_IMPL_DOT_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_dot_mv_impl.hpp b/blas/impl/KokkosBlas1_dot_mv_impl.hpp index dfbae10a99..9dda766b03 100644 --- a/blas/impl/KokkosBlas1_dot_mv_impl.hpp +++ b/blas/impl/KokkosBlas1_dot_mv_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_IMPL_DOT_MV_IMPL_HPP_ #define KOKKOSBLAS1_IMPL_DOT_MV_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_dot_spec.hpp b/blas/impl/KokkosBlas1_dot_spec.hpp index 33c7603057..430f357a36 100644 --- a/blas/impl/KokkosBlas1_dot_spec.hpp +++ b/blas/impl/KokkosBlas1_dot_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_BLAS1_IMPL_DOT_SPEC_HPP_ #define KOKKOS_BLAS1_IMPL_DOT_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_iamax_impl.hpp b/blas/impl/KokkosBlas1_iamax_impl.hpp index 8b27b3e5a3..855a503422 100644 --- a/blas/impl/KokkosBlas1_iamax_impl.hpp +++ b/blas/impl/KokkosBlas1_iamax_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_IAMAX_IMPL_HPP_ #define KOKKOSBLAS1_IAMAX_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_iamax_spec.hpp b/blas/impl/KokkosBlas1_iamax_spec.hpp index 37461389a1..57d0056e92 100644 --- a/blas/impl/KokkosBlas1_iamax_spec.hpp +++ b/blas/impl/KokkosBlas1_iamax_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_IAMAX_SPEC_HPP_ #define KOKKOSBLAS1_IAMAX_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_mult_impl.hpp b/blas/impl/KokkosBlas1_mult_impl.hpp index 9b99a2b1b9..988b5cf534 100644 --- a/blas/impl/KokkosBlas1_mult_impl.hpp +++ b/blas/impl/KokkosBlas1_mult_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_MULT_IMPL_HPP_ #define KOKKOSBLAS1_MULT_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_mult_spec.hpp b/blas/impl/KokkosBlas1_mult_spec.hpp index 5e227e3480..1c0a88e8dc 100644 --- a/blas/impl/KokkosBlas1_mult_spec.hpp +++ b/blas/impl/KokkosBlas1_mult_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_MULT_SPEC_HPP_ #define KOKKOSBLAS1_MULT_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_nrm1_impl.hpp b/blas/impl/KokkosBlas1_nrm1_impl.hpp index 2002ef2c39..433ce580df 100644 --- a/blas/impl/KokkosBlas1_nrm1_impl.hpp +++ b/blas/impl/KokkosBlas1_nrm1_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM1_IMPL_HPP_ #define KOKKOSBLAS1_NRM1_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_nrm1_spec.hpp b/blas/impl/KokkosBlas1_nrm1_spec.hpp index 478395d7a9..dbaface96e 100644 --- a/blas/impl/KokkosBlas1_nrm1_spec.hpp +++ b/blas/impl/KokkosBlas1_nrm1_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM1_SPEC_HPP_ #define KOKKOSBLAS1_NRM1_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_nrm2_impl.hpp b/blas/impl/KokkosBlas1_nrm2_impl.hpp index e56a884655..32f4660f18 100644 --- a/blas/impl/KokkosBlas1_nrm2_impl.hpp +++ b/blas/impl/KokkosBlas1_nrm2_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM2_IMPL_HPP_ #define KOKKOSBLAS1_NRM2_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_nrm2_spec.hpp b/blas/impl/KokkosBlas1_nrm2_spec.hpp index 71afb2ede3..a8fd6eee5d 100644 --- a/blas/impl/KokkosBlas1_nrm2_spec.hpp +++ b/blas/impl/KokkosBlas1_nrm2_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM2_SPEC_HPP_ #define KOKKOSBLAS1_NRM2_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_nrm2w_impl.hpp b/blas/impl/KokkosBlas1_nrm2w_impl.hpp index e2c858f0b3..69667bf838 100644 --- a/blas/impl/KokkosBlas1_nrm2w_impl.hpp +++ b/blas/impl/KokkosBlas1_nrm2w_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM2W_IMPL_HPP_ #define KOKKOSBLAS1_NRM2W_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_nrm2w_spec.hpp b/blas/impl/KokkosBlas1_nrm2w_spec.hpp index 28162bce5f..b25199c1f5 100644 --- a/blas/impl/KokkosBlas1_nrm2w_spec.hpp +++ b/blas/impl/KokkosBlas1_nrm2w_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM2W_SPEC_HPP_ #define KOKKOSBLAS1_NRM2W_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_nrminf_impl.hpp b/blas/impl/KokkosBlas1_nrminf_impl.hpp index 8950daf848..c42aff8ba2 100644 --- a/blas/impl/KokkosBlas1_nrminf_impl.hpp +++ b/blas/impl/KokkosBlas1_nrminf_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRMINF_IMPL_HPP_ #define KOKKOSBLAS1_NRMINF_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_nrminf_spec.hpp b/blas/impl/KokkosBlas1_nrminf_spec.hpp index 91a7e3278f..69bc0eeb47 100644 --- a/blas/impl/KokkosBlas1_nrminf_spec.hpp +++ b/blas/impl/KokkosBlas1_nrminf_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRMINF_SPEC_HPP_ #define KOKKOSBLAS1_NRMINF_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_reciprocal_impl.hpp b/blas/impl/KokkosBlas1_reciprocal_impl.hpp index 74cf69dee7..1db1b9100d 100644 --- a/blas/impl/KokkosBlas1_reciprocal_impl.hpp +++ b/blas/impl/KokkosBlas1_reciprocal_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_BLAS1_IMPL_RECIPROCAL_HPP_ #define KOKKOS_BLAS1_IMPL_RECIPROCAL_HPP_ diff --git a/blas/impl/KokkosBlas1_reciprocal_spec.hpp b/blas/impl/KokkosBlas1_reciprocal_spec.hpp index 3050be8aa3..1a40aa3542 100644 --- a/blas/impl/KokkosBlas1_reciprocal_spec.hpp +++ b/blas/impl/KokkosBlas1_reciprocal_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_BLAS1_IMPL_RECIPROCAL_SPEC_HPP_ #define KOKKOS_BLAS1_IMPL_RECIPROCAL_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_rot_impl.hpp b/blas/impl/KokkosBlas1_rot_impl.hpp index b787f1077f..93d3b3d9b9 100644 --- a/blas/impl/KokkosBlas1_rot_impl.hpp +++ b/blas/impl/KokkosBlas1_rot_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROT_IMPL_HPP_ #define KOKKOSBLAS1_ROT_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_rot_spec.hpp b/blas/impl/KokkosBlas1_rot_spec.hpp index f20ea29df6..6547884d46 100644 --- a/blas/impl/KokkosBlas1_rot_spec.hpp +++ b/blas/impl/KokkosBlas1_rot_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROT_SPEC_HPP_ #define KOKKOSBLAS1_ROT_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_rotg_impl.hpp b/blas/impl/KokkosBlas1_rotg_impl.hpp index 34f5a2fac6..ff7830e147 100644 --- a/blas/impl/KokkosBlas1_rotg_impl.hpp +++ b/blas/impl/KokkosBlas1_rotg_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTG_IMPL_HPP_ #define KOKKOSBLAS1_ROTG_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_rotg_spec.hpp b/blas/impl/KokkosBlas1_rotg_spec.hpp index fb2c5bac91..9b911a28f6 100644 --- a/blas/impl/KokkosBlas1_rotg_spec.hpp +++ b/blas/impl/KokkosBlas1_rotg_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTG_SPEC_HPP_ #define KOKKOSBLAS1_ROTG_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_rotm_impl.hpp b/blas/impl/KokkosBlas1_rotm_impl.hpp index cffc716839..91a2c7a1d8 100644 --- a/blas/impl/KokkosBlas1_rotm_impl.hpp +++ b/blas/impl/KokkosBlas1_rotm_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTM_IMPL_HPP_ #define KOKKOSBLAS1_ROTM_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_rotm_spec.hpp b/blas/impl/KokkosBlas1_rotm_spec.hpp index a43086c659..9cc9ae3e61 100644 --- a/blas/impl/KokkosBlas1_rotm_spec.hpp +++ b/blas/impl/KokkosBlas1_rotm_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTM_SPEC_HPP_ #define KOKKOSBLAS1_ROTM_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_rotmg_impl.hpp b/blas/impl/KokkosBlas1_rotmg_impl.hpp index 8791002d4f..b35fd62ece 100644 --- a/blas/impl/KokkosBlas1_rotmg_impl.hpp +++ b/blas/impl/KokkosBlas1_rotmg_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTMG_IMPL_HPP_ #define KOKKOSBLAS1_ROTMG_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_rotmg_spec.hpp b/blas/impl/KokkosBlas1_rotmg_spec.hpp index b6b84697aa..b3aeaa1da3 100644 --- a/blas/impl/KokkosBlas1_rotmg_spec.hpp +++ b/blas/impl/KokkosBlas1_rotmg_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTMG_SPEC_HPP_ #define KOKKOSBLAS1_ROTMG_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_scal_impl.hpp b/blas/impl/KokkosBlas1_scal_impl.hpp index 9324b971f0..21974f1f7e 100644 --- a/blas/impl/KokkosBlas1_scal_impl.hpp +++ b/blas/impl/KokkosBlas1_scal_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_SCAL_IMPL_HPP_ #define KOKKOSBLAS1_SCAL_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_scal_mv_impl.hpp b/blas/impl/KokkosBlas1_scal_mv_impl.hpp index efe31471ae..f43101bd10 100644 --- a/blas/impl/KokkosBlas1_scal_mv_impl.hpp +++ b/blas/impl/KokkosBlas1_scal_mv_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_SCAL_MV_IMPL_HPP_ #define KOKKOSBLAS1_SCAL_MV_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_scal_spec.hpp b/blas/impl/KokkosBlas1_scal_spec.hpp index 1ec18c7469..82bf4709b7 100644 --- a/blas/impl/KokkosBlas1_scal_spec.hpp +++ b/blas/impl/KokkosBlas1_scal_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_BLAS1_IMPL_SCAL_SPEC_HPP_ #define KOKKOS_BLAS1_IMPL_SCAL_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_serial_scal_impl.hpp b/blas/impl/KokkosBlas1_serial_scal_impl.hpp index bb411ef4a5..4de4f18cc2 100644 --- a/blas/impl/KokkosBlas1_serial_scal_impl.hpp +++ b/blas/impl/KokkosBlas1_serial_scal_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_SERIAL_SCAL_IMPL_HPP_ #define KOKKOSBLAS1_SERIAL_SCAL_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_set_impl.hpp b/blas/impl/KokkosBlas1_set_impl.hpp index a3870a2e15..38604dc4b2 100644 --- a/blas/impl/KokkosBlas1_set_impl.hpp +++ b/blas/impl/KokkosBlas1_set_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef __KOKKOSBLAS_SET_IMPL_HPP__ #define __KOKKOSBLAS_SET_IMPL_HPP__ diff --git a/blas/impl/KokkosBlas1_sum_impl.hpp b/blas/impl/KokkosBlas1_sum_impl.hpp index b87f2e1092..08dc4e36e4 100644 --- a/blas/impl/KokkosBlas1_sum_impl.hpp +++ b/blas/impl/KokkosBlas1_sum_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_SUM_IMPL_HPP_ #define KOKKOSBLAS1_SUM_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_sum_spec.hpp b/blas/impl/KokkosBlas1_sum_spec.hpp index 09c34299c7..db1771de8f 100644 --- a/blas/impl/KokkosBlas1_sum_spec.hpp +++ b/blas/impl/KokkosBlas1_sum_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_SUM_SPEC_HPP_ #define KOKKOSBLAS1_SUM_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_team_abs_spec.hpp b/blas/impl/KokkosBlas1_team_abs_spec.hpp index 4f72339db3..82418fe7d1 100644 --- a/blas/impl/KokkosBlas1_team_abs_spec.hpp +++ b/blas/impl/KokkosBlas1_team_abs_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_ABS_SPEC_HPP_ #define KOKKOSBLAS1_TEAM_ABS_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_team_axpby_spec.hpp b/blas/impl/KokkosBlas1_team_axpby_spec.hpp index c270b608da..356be339c3 100644 --- a/blas/impl/KokkosBlas1_team_axpby_spec.hpp +++ b/blas/impl/KokkosBlas1_team_axpby_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_AXPBY_SPEC_HPP_ #define KOKKOSBLAS1_TEAM_AXPBY_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_team_dot_spec.hpp b/blas/impl/KokkosBlas1_team_dot_spec.hpp index 1ceed25102..c141694926 100644 --- a/blas/impl/KokkosBlas1_team_dot_spec.hpp +++ b/blas/impl/KokkosBlas1_team_dot_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_DOT_SPEC_HPP_ #define KOKKOSBLAS1_TEAM_DOT_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_team_mult_spec.hpp b/blas/impl/KokkosBlas1_team_mult_spec.hpp index 5b4eaa6ee7..381802eeb0 100644 --- a/blas/impl/KokkosBlas1_team_mult_spec.hpp +++ b/blas/impl/KokkosBlas1_team_mult_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_MULT_SPEC_HPP_ #define KOKKOSBLAS1_TEAM_MULT_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_team_nrm2_spec.hpp b/blas/impl/KokkosBlas1_team_nrm2_spec.hpp index bdc3f11801..4ed19ef5df 100644 --- a/blas/impl/KokkosBlas1_team_nrm2_spec.hpp +++ b/blas/impl/KokkosBlas1_team_nrm2_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_NRM2_SPEC_HPP_ #define KOKKOSBLAS1_TEAM_NRM2_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_team_scal_impl.hpp b/blas/impl/KokkosBlas1_team_scal_impl.hpp index 6f4fdf40b0..dc3aa4d42e 100644 --- a/blas/impl/KokkosBlas1_team_scal_impl.hpp +++ b/blas/impl/KokkosBlas1_team_scal_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_SCAL_IMPL_HPP_ #define KOKKOSBLAS1_TEAM_SCAL_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_team_scal_spec.hpp b/blas/impl/KokkosBlas1_team_scal_spec.hpp index 27c2f595b4..ac6d36306a 100644 --- a/blas/impl/KokkosBlas1_team_scal_spec.hpp +++ b/blas/impl/KokkosBlas1_team_scal_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_SCAL_SPEC_HPP_ #define KOKKOSBLAS1_TEAM_SCAL_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_team_update_spec.hpp b/blas/impl/KokkosBlas1_team_update_spec.hpp index b2bc67ab7d..94a9221f4e 100644 --- a/blas/impl/KokkosBlas1_team_update_spec.hpp +++ b/blas/impl/KokkosBlas1_team_update_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_UPDATE_SPEC_HPP_ #define KOKKOSBLAS1_TEAM_UPDATE_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas1_update_impl.hpp b/blas/impl/KokkosBlas1_update_impl.hpp index 37e76306a0..5866764faf 100644 --- a/blas/impl/KokkosBlas1_update_impl.hpp +++ b/blas/impl/KokkosBlas1_update_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_UPDATE_IMPL_HPP_ #define KOKKOSBLAS1_UPDATE_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_update_spec.hpp b/blas/impl/KokkosBlas1_update_spec.hpp index 306f35f3c7..78a6d9aa09 100644 --- a/blas/impl/KokkosBlas1_update_spec.hpp +++ b/blas/impl/KokkosBlas1_update_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_UPDATE_SPEC_HPP_ #define KOKKOSBLAS1_UPDATE_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas2_gemv_impl.hpp b/blas/impl/KokkosBlas2_gemv_impl.hpp index a6c8111684..7d7403c14b 100644 --- a/blas/impl/KokkosBlas2_gemv_impl.hpp +++ b/blas/impl/KokkosBlas2_gemv_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_BLAS2_MV_IMPL_GEMV_HPP_ #define KOKKOS_BLAS2_MV_IMPL_GEMV_HPP_ diff --git a/blas/impl/KokkosBlas2_gemv_spec.hpp b/blas/impl/KokkosBlas2_gemv_spec.hpp index bb043ac2de..a4582b9d72 100644 --- a/blas/impl/KokkosBlas2_gemv_spec.hpp +++ b/blas/impl/KokkosBlas2_gemv_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS2_GEMV_SPEC_HPP_ #define KOKKOSBLAS2_GEMV_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas2_serial_gemv_impl.hpp b/blas/impl/KokkosBlas2_serial_gemv_impl.hpp index 0d7f52702b..1fec8769cb 100644 --- a/blas/impl/KokkosBlas2_serial_gemv_impl.hpp +++ b/blas/impl/KokkosBlas2_serial_gemv_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef __KOKKOSBLAS_GEMV_SERIAL_IMPL_HPP__ #define __KOKKOSBLAS_GEMV_SERIAL_IMPL_HPP__ diff --git a/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp b/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp index 0e9d015dc8..31975dfa9e 100644 --- a/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp +++ b/blas/impl/KokkosBlas2_serial_gemv_inner_multiple_dot.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef __KOKKOSBLAS_INNER_MULTIPLE_DOT_PRODUCT_SERIAL_IMPL_HPP__ #define __KOKKOSBLAS_INNER_MULTIPLE_DOT_PRODUCT_SERIAL_IMPL_HPP__ diff --git a/blas/impl/KokkosBlas2_serial_gemv_internal.hpp b/blas/impl/KokkosBlas2_serial_gemv_internal.hpp index 998603920c..2d78102c7a 100644 --- a/blas/impl/KokkosBlas2_serial_gemv_internal.hpp +++ b/blas/impl/KokkosBlas2_serial_gemv_internal.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef __KOKKOSBLAS_GEMV_SERIAL_INTERNAL_HPP__ #define __KOKKOSBLAS_GEMV_SERIAL_INTERNAL_HPP__ diff --git a/blas/impl/KokkosBlas2_team_gemv_impl.hpp b/blas/impl/KokkosBlas2_team_gemv_impl.hpp index a4cf662cc9..5e43cae7d4 100644 --- a/blas/impl/KokkosBlas2_team_gemv_impl.hpp +++ b/blas/impl/KokkosBlas2_team_gemv_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS2_TEAM_GEMV_IMPL_HPP_ #define KOKKOSBLAS2_TEAM_GEMV_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas2_team_gemv_spec.hpp b/blas/impl/KokkosBlas2_team_gemv_spec.hpp index 92aac23f26..355c1ca6cf 100644 --- a/blas/impl/KokkosBlas2_team_gemv_spec.hpp +++ b/blas/impl/KokkosBlas2_team_gemv_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS2_TEAM_GEMV_SPEC_HPP_ #define KOKKOSBLAS2_TEAM_GEMV_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas3_gemm_dotbased_impl.hpp b/blas/impl/KokkosBlas3_gemm_dotbased_impl.hpp index 52c0c47470..462ac0c744 100644 --- a/blas/impl/KokkosBlas3_gemm_dotbased_impl.hpp +++ b/blas/impl/KokkosBlas3_gemm_dotbased_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_BLAS3_GEMM_DOTBASED_IMPL_HPP_ #define KOKKOS_BLAS3_GEMM_DOTBASED_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas3_gemm_impl.hpp b/blas/impl/KokkosBlas3_gemm_impl.hpp index 2057c8d8ad..f1f89b9908 100644 --- a/blas/impl/KokkosBlas3_gemm_impl.hpp +++ b/blas/impl/KokkosBlas3_gemm_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_BLAS3_GEMM_IMPL_HPP_ #define KOKKOS_BLAS3_GEMM_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas3_gemm_spec.hpp b/blas/impl/KokkosBlas3_gemm_spec.hpp index dd336bd375..5f443ab371 100644 --- a/blas/impl/KokkosBlas3_gemm_spec.hpp +++ b/blas/impl/KokkosBlas3_gemm_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_GEMM_SPEC_HPP_ #define KOKKOSBLAS3_GEMM_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas3_trmm_impl.hpp b/blas/impl/KokkosBlas3_trmm_impl.hpp index 2ba3363264..a183675889 100644 --- a/blas/impl/KokkosBlas3_trmm_impl.hpp +++ b/blas/impl/KokkosBlas3_trmm_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_TRMM_IMPL_HPP_ #define KOKKOSBLAS3_TRMM_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas3_trmm_spec.hpp b/blas/impl/KokkosBlas3_trmm_spec.hpp index 41a6d0d852..50d74b659f 100644 --- a/blas/impl/KokkosBlas3_trmm_spec.hpp +++ b/blas/impl/KokkosBlas3_trmm_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_TRMM_SPEC_HPP_ #define KOKKOSBLAS3_TRMM_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas3_trsm_impl.hpp b/blas/impl/KokkosBlas3_trsm_impl.hpp index d85b850138..9700b62e67 100644 --- a/blas/impl/KokkosBlas3_trsm_impl.hpp +++ b/blas/impl/KokkosBlas3_trsm_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_TRSM_IMPL_HPP_ #define KOKKOSBLAS3_TRSM_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas3_trsm_spec.hpp b/blas/impl/KokkosBlas3_trsm_spec.hpp index 3c8284f0fb..d05dad2275 100644 --- a/blas/impl/KokkosBlas3_trsm_spec.hpp +++ b/blas/impl/KokkosBlas3_trsm_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_TRSM_SPEC_HPP_ #define KOKKOSBLAS3_TRSM_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas_Newton_impl.hpp b/blas/impl/KokkosBlas_Newton_impl.hpp index a8a8973d41..db4b8a3a43 100644 --- a/blas/impl/KokkosBlas_Newton_impl.hpp +++ b/blas/impl/KokkosBlas_Newton_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Luc Berger-Vergiat (lberge@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef __KOKKOSBATCHED_ODE_NEWTON_HPP__ #define __KOKKOSBATCHED_ODE_NEWTON_HPP__ diff --git a/blas/impl/KokkosBlas_gesv_impl.hpp b/blas/impl/KokkosBlas_gesv_impl.hpp index 5a47370dbf..e51e48309f 100644 --- a/blas/impl/KokkosBlas_gesv_impl.hpp +++ b/blas/impl/KokkosBlas_gesv_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_IMPL_GESV_HPP_ #define KOKKOSBLAS_IMPL_GESV_HPP_ diff --git a/blas/impl/KokkosBlas_gesv_spec.hpp b/blas/impl/KokkosBlas_gesv_spec.hpp index 7c9e939313..8b554f7130 100644 --- a/blas/impl/KokkosBlas_gesv_spec.hpp +++ b/blas/impl/KokkosBlas_gesv_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_IMPL_GESV_SPEC_HPP_ #define KOKKOSBLAS_IMPL_GESV_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas_serial_axpy.hpp b/blas/impl/KokkosBlas_serial_axpy.hpp index f9cc918650..344632b8eb 100644 --- a/blas/impl/KokkosBlas_serial_axpy.hpp +++ b/blas/impl/KokkosBlas_serial_axpy.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Luc Berger-Vergiat (lberge@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_SERIAL_AXPY_IMPL_HPP_ #define KOKKOSBLAS_SERIAL_AXPY_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas_serial_nrm2.hpp b/blas/impl/KokkosBlas_serial_nrm2.hpp index 9397dc5020..1b40ea32a8 100644 --- a/blas/impl/KokkosBlas_serial_nrm2.hpp +++ b/blas/impl/KokkosBlas_serial_nrm2.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_SERIAL_NRM2_HPP_ #define KOKKOSBLAS_SERIAL_NRM2_HPP_ diff --git a/blas/impl/KokkosBlas_trtri_impl.hpp b/blas/impl/KokkosBlas_trtri_impl.hpp index 5aa82e6480..4501763ea8 100644 --- a/blas/impl/KokkosBlas_trtri_impl.hpp +++ b/blas/impl/KokkosBlas_trtri_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_TRTRI_IMPL_HPP_ #define KOKKOSBLAS_TRTRI_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas_trtri_spec.hpp b/blas/impl/KokkosBlas_trtri_spec.hpp index 0bbeb294dc..7b3e6b1fc3 100644 --- a/blas/impl/KokkosBlas_trtri_spec.hpp +++ b/blas/impl/KokkosBlas_trtri_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_TRTRI_SPEC_HPP_ #define KOKKOSBLAS_TRTRI_SPEC_HPP_ diff --git a/blas/impl/KokkosBlas_util.hpp b/blas/impl/KokkosBlas_util.hpp index dcee8283d6..0a96d05488 100644 --- a/blas/impl/KokkosBlas_util.hpp +++ b/blas/impl/KokkosBlas_util.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Brian Kelley (bmkelle@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_BLAS_UTIL_HPP #define KOKKOS_BLAS_UTIL_HPP diff --git a/blas/src/KokkosBlas.hpp b/blas/src/KokkosBlas.hpp index ed677dd69b..484171d64d 100644 --- a/blas/src/KokkosBlas.hpp +++ b/blas/src/KokkosBlas.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_HPP_ #define KOKKOSBLAS_HPP_ diff --git a/blas/src/KokkosBlas1_abs.hpp b/blas/src/KokkosBlas1_abs.hpp index 81b5b5bfff..969a0a3c40 100644 --- a/blas/src/KokkosBlas1_abs.hpp +++ b/blas/src/KokkosBlas1_abs.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ABS_HPP_ #define KOKKOSBLAS1_ABS_HPP_ diff --git a/blas/src/KokkosBlas1_axpby.hpp b/blas/src/KokkosBlas1_axpby.hpp index e8b79df565..e2ec1dde0c 100644 --- a/blas/src/KokkosBlas1_axpby.hpp +++ b/blas/src/KokkosBlas1_axpby.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_AXPBY_HPP_ #define KOKKOSBLAS1_AXPBY_HPP_ diff --git a/blas/src/KokkosBlas1_dot.hpp b/blas/src/KokkosBlas1_dot.hpp index bd1de1d35a..6d87a70a08 100644 --- a/blas/src/KokkosBlas1_dot.hpp +++ b/blas/src/KokkosBlas1_dot.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_DOT_HPP_ #define KOKKOSBLAS1_DOT_HPP_ diff --git a/blas/src/KokkosBlas1_fill.hpp b/blas/src/KokkosBlas1_fill.hpp index 9f8b681073..37aebb3c5d 100644 --- a/blas/src/KokkosBlas1_fill.hpp +++ b/blas/src/KokkosBlas1_fill.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_FILL_HPP_ #define KOKKOSBLAS1_FILL_HPP_ diff --git a/blas/src/KokkosBlas1_iamax.hpp b/blas/src/KokkosBlas1_iamax.hpp index 70363fc340..22411a70bb 100644 --- a/blas/src/KokkosBlas1_iamax.hpp +++ b/blas/src/KokkosBlas1_iamax.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_IAMAX_HPP_ #define KOKKOSBLAS1_IAMAX_HPP_ diff --git a/blas/src/KokkosBlas1_mult.hpp b/blas/src/KokkosBlas1_mult.hpp index f99bc067a9..39ccbbeebd 100644 --- a/blas/src/KokkosBlas1_mult.hpp +++ b/blas/src/KokkosBlas1_mult.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_MULT_HPP_ #define KOKKOSBLAS1_MULT_HPP_ diff --git a/blas/src/KokkosBlas1_nrm1.hpp b/blas/src/KokkosBlas1_nrm1.hpp index fb453a7024..9481cd9472 100644 --- a/blas/src/KokkosBlas1_nrm1.hpp +++ b/blas/src/KokkosBlas1_nrm1.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM1_HPP_ #define KOKKOSBLAS1_NRM1_HPP_ diff --git a/blas/src/KokkosBlas1_nrm2.hpp b/blas/src/KokkosBlas1_nrm2.hpp index bbe231e795..d3e2f03138 100644 --- a/blas/src/KokkosBlas1_nrm2.hpp +++ b/blas/src/KokkosBlas1_nrm2.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM2_HPP_ #define KOKKOSBLAS1_NRM2_HPP_ diff --git a/blas/src/KokkosBlas1_nrm2_squared.hpp b/blas/src/KokkosBlas1_nrm2_squared.hpp index e4054e944a..8f053fad47 100644 --- a/blas/src/KokkosBlas1_nrm2_squared.hpp +++ b/blas/src/KokkosBlas1_nrm2_squared.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM2_SQUARED_HPP_ #define KOKKOSBLAS1_NRM2_SQUARED_HPP_ diff --git a/blas/src/KokkosBlas1_nrm2w.hpp b/blas/src/KokkosBlas1_nrm2w.hpp index 43d32e7812..5a7a07001c 100644 --- a/blas/src/KokkosBlas1_nrm2w.hpp +++ b/blas/src/KokkosBlas1_nrm2w.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM2W_HPP_ #define KOKKOSBLAS1_NRM2W_HPP_ diff --git a/blas/src/KokkosBlas1_nrm2w_squared.hpp b/blas/src/KokkosBlas1_nrm2w_squared.hpp index 6aec955de2..eb0e95ba79 100644 --- a/blas/src/KokkosBlas1_nrm2w_squared.hpp +++ b/blas/src/KokkosBlas1_nrm2w_squared.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM2W_SQUARED_HPP_ #define KOKKOSBLAS1_NRM2W_SQUARED_HPP_ diff --git a/blas/src/KokkosBlas1_nrminf.hpp b/blas/src/KokkosBlas1_nrminf.hpp index 915c085376..bd4bf080a9 100644 --- a/blas/src/KokkosBlas1_nrminf.hpp +++ b/blas/src/KokkosBlas1_nrminf.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRMINF_HPP_ #define KOKKOSBLAS1_NRMINF_HPP_ diff --git a/blas/src/KokkosBlas1_reciprocal.hpp b/blas/src/KokkosBlas1_reciprocal.hpp index 1d185d73da..7e171cb6df 100644 --- a/blas/src/KokkosBlas1_reciprocal.hpp +++ b/blas/src/KokkosBlas1_reciprocal.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_RECIPROCAL_HPP_ #define KOKKOSBLAS1_RECIPROCAL_HPP_ diff --git a/blas/src/KokkosBlas1_rot.hpp b/blas/src/KokkosBlas1_rot.hpp index 2fee409c78..d848617b6e 100644 --- a/blas/src/KokkosBlas1_rot.hpp +++ b/blas/src/KokkosBlas1_rot.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROT_HPP_ #define KOKKOSBLAS1_ROT_HPP_ diff --git a/blas/src/KokkosBlas1_rotg.hpp b/blas/src/KokkosBlas1_rotg.hpp index 4d70a8a8be..6b26ce57ec 100644 --- a/blas/src/KokkosBlas1_rotg.hpp +++ b/blas/src/KokkosBlas1_rotg.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTG_HPP_ #define KOKKOSBLAS1_ROTG_HPP_ diff --git a/blas/src/KokkosBlas1_rotm.hpp b/blas/src/KokkosBlas1_rotm.hpp index 38e0a78039..4b6a45210a 100644 --- a/blas/src/KokkosBlas1_rotm.hpp +++ b/blas/src/KokkosBlas1_rotm.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTM_HPP_ #define KOKKOSBLAS1_ROTM_HPP_ diff --git a/blas/src/KokkosBlas1_rotmg.hpp b/blas/src/KokkosBlas1_rotmg.hpp index 43efa8d3b2..9d1f87cca1 100644 --- a/blas/src/KokkosBlas1_rotmg.hpp +++ b/blas/src/KokkosBlas1_rotmg.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTMG_HPP_ #define KOKKOSBLAS1_ROTMG_HPP_ diff --git a/blas/src/KokkosBlas1_scal.hpp b/blas/src/KokkosBlas1_scal.hpp index d533efe535..8b61936460 100644 --- a/blas/src/KokkosBlas1_scal.hpp +++ b/blas/src/KokkosBlas1_scal.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_SCAL_HPP_ #define KOKKOSBLAS1_SCAL_HPP_ diff --git a/blas/src/KokkosBlas1_set.hpp b/blas/src/KokkosBlas1_set.hpp index 61c03ec17a..ea31ff6282 100644 --- a/blas/src/KokkosBlas1_set.hpp +++ b/blas/src/KokkosBlas1_set.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_SET_HPP_ #define KOKKOSBLAS1_SET_HPP_ diff --git a/blas/src/KokkosBlas1_sum.hpp b/blas/src/KokkosBlas1_sum.hpp index 546b34440a..0214feaf15 100644 --- a/blas/src/KokkosBlas1_sum.hpp +++ b/blas/src/KokkosBlas1_sum.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_SUM_HPP_ #define KOKKOSBLAS1_SUM_HPP_ diff --git a/blas/src/KokkosBlas1_team_abs.hpp b/blas/src/KokkosBlas1_team_abs.hpp index eb37fe05f6..55dcc668db 100644 --- a/blas/src/KokkosBlas1_team_abs.hpp +++ b/blas/src/KokkosBlas1_team_abs.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_ABS_HPP_ #define KOKKOSBLAS1_TEAM_ABS_HPP_ diff --git a/blas/src/KokkosBlas1_team_axpby.hpp b/blas/src/KokkosBlas1_team_axpby.hpp index b636a7fbdf..165683df01 100644 --- a/blas/src/KokkosBlas1_team_axpby.hpp +++ b/blas/src/KokkosBlas1_team_axpby.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_AXPBY_HPP_ #define KOKKOSBLAS1_TEAM_AXPBY_HPP_ diff --git a/blas/src/KokkosBlas1_team_dot.hpp b/blas/src/KokkosBlas1_team_dot.hpp index 443335840f..25c5c05cfc 100644 --- a/blas/src/KokkosBlas1_team_dot.hpp +++ b/blas/src/KokkosBlas1_team_dot.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_DOT_HPP_ #define KOKKOSBLAS1_TEAM_DOT_HPP_ diff --git a/blas/src/KokkosBlas1_team_mult.hpp b/blas/src/KokkosBlas1_team_mult.hpp index 03c04bb8da..2737f835c0 100644 --- a/blas/src/KokkosBlas1_team_mult.hpp +++ b/blas/src/KokkosBlas1_team_mult.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_MULT_HPP_ #define KOKKOSBLAS1_TEAM_MULT_HPP_ diff --git a/blas/src/KokkosBlas1_team_nrm2.hpp b/blas/src/KokkosBlas1_team_nrm2.hpp index d089a3babd..ee58cd3331 100644 --- a/blas/src/KokkosBlas1_team_nrm2.hpp +++ b/blas/src/KokkosBlas1_team_nrm2.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_NRM2_HPP_ #define KOKKOSBLAS1_TEAM_NRM2_HPP_ diff --git a/blas/src/KokkosBlas1_team_scal.hpp b/blas/src/KokkosBlas1_team_scal.hpp index 5fbe9688d1..b148e165f1 100644 --- a/blas/src/KokkosBlas1_team_scal.hpp +++ b/blas/src/KokkosBlas1_team_scal.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_SCAL_HPP_ #define KOKKOSBLAS1_TEAM_SCAL_HPP_ diff --git a/blas/src/KokkosBlas1_team_update.hpp b/blas/src/KokkosBlas1_team_update.hpp index 10dfac719f..069932b1e5 100644 --- a/blas/src/KokkosBlas1_team_update.hpp +++ b/blas/src/KokkosBlas1_team_update.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_TEAM_UPDATE_HPP_ #define KOKKOSBLAS1_TEAM_UPDATE_HPP_ diff --git a/blas/src/KokkosBlas1_update.hpp b/blas/src/KokkosBlas1_update.hpp index cb934fd17b..741dc508fb 100644 --- a/blas/src/KokkosBlas1_update.hpp +++ b/blas/src/KokkosBlas1_update.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_UPDATE_HPP_ #define KOKKOSBLAS1_UPDATE_HPP_ diff --git a/blas/src/KokkosBlas2_gemv.hpp b/blas/src/KokkosBlas2_gemv.hpp index fe8418cc40..9dfddff362 100644 --- a/blas/src/KokkosBlas2_gemv.hpp +++ b/blas/src/KokkosBlas2_gemv.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS2_GEMV_HPP_ #define KOKKOSBLAS2_GEMV_HPP_ diff --git a/blas/src/KokkosBlas2_serial_gemv.hpp b/blas/src/KokkosBlas2_serial_gemv.hpp index cb568095b2..12dbf61c3a 100644 --- a/blas/src/KokkosBlas2_serial_gemv.hpp +++ b/blas/src/KokkosBlas2_serial_gemv.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS2_SERIAL_GEMV_HPP_ #define KOKKOSBLAS2_SERIAL_GEMV_HPP_ diff --git a/blas/src/KokkosBlas2_team_gemv.hpp b/blas/src/KokkosBlas2_team_gemv.hpp index ddc216b8af..09a1ae2330 100644 --- a/blas/src/KokkosBlas2_team_gemv.hpp +++ b/blas/src/KokkosBlas2_team_gemv.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS2_TEAM_GEMV_HPP_ #define KOKKOSBLAS2_TEAM_GEMV_HPP_ diff --git a/blas/src/KokkosBlas3_gemm.hpp b/blas/src/KokkosBlas3_gemm.hpp index 3d36ad86c9..586302cb01 100644 --- a/blas/src/KokkosBlas3_gemm.hpp +++ b/blas/src/KokkosBlas3_gemm.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_GEMV_HPP_ #define KOKKOSBLAS3_GEMV_HPP_ diff --git a/blas/src/KokkosBlas3_trmm.hpp b/blas/src/KokkosBlas3_trmm.hpp index b760f5d41e..7e2cbd5b88 100644 --- a/blas/src/KokkosBlas3_trmm.hpp +++ b/blas/src/KokkosBlas3_trmm.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_TRMM_HPP_ #define KOKKOSBLAS3_TRMM_HPP_ diff --git a/blas/src/KokkosBlas3_trsm.hpp b/blas/src/KokkosBlas3_trsm.hpp index 1e73d92049..8de879b1f3 100644 --- a/blas/src/KokkosBlas3_trsm.hpp +++ b/blas/src/KokkosBlas3_trsm.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_TRSM_HPP_ #define KOKKOSBLAS3_TRSM_HPP_ diff --git a/blas/src/KokkosBlas_gesv.hpp b/blas/src/KokkosBlas_gesv.hpp index e96b965546..89b9d36c96 100644 --- a/blas/src/KokkosBlas_gesv.hpp +++ b/blas/src/KokkosBlas_gesv.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file KokkosBlas_gesv.hpp /// \brief Local dense linear solve diff --git a/blas/src/KokkosBlas_trtri.hpp b/blas/src/KokkosBlas_trtri.hpp index afcc05d5ae..22556bc35a 100644 --- a/blas/src/KokkosBlas_trtri.hpp +++ b/blas/src/KokkosBlas_trtri.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_TRTRI_HPP_ #define KOKKOSBLAS_TRTRI_HPP_ diff --git a/blas/tpls/KokkosBlas1_abs_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_abs_tpl_spec_avail.hpp index aefd0c8d2e..9f66f8ee61 100644 --- a/blas/tpls/KokkosBlas1_abs_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_abs_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ABS_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_ABS_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_abs_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_abs_tpl_spec_decl.hpp index 6004a223c4..7e6919a112 100644 --- a/blas/tpls/KokkosBlas1_abs_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_abs_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ABS_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_ABS_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_axpby_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_axpby_tpl_spec_avail.hpp index b367254e91..7ae8ef87b3 100644 --- a/blas/tpls/KokkosBlas1_axpby_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_axpby_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_AXPBY_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_AXPBY_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_axpby_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_axpby_tpl_spec_decl.hpp index e80494d358..74fa4265d8 100644 --- a/blas/tpls/KokkosBlas1_axpby_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_axpby_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_AXPBY_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_AXPBY_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_dot_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_dot_tpl_spec_avail.hpp index f4249c68ed..97f4be71da 100644 --- a/blas/tpls/KokkosBlas1_dot_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_dot_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_DOT_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_DOT_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_dot_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_dot_tpl_spec_decl.hpp index 693b5273be..e7054b1113 100644 --- a/blas/tpls/KokkosBlas1_dot_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_dot_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_DOT_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_DOT_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_iamax_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_iamax_tpl_spec_avail.hpp index b2ad91a807..37b61a2361 100644 --- a/blas/tpls/KokkosBlas1_iamax_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_iamax_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_IAMAX_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_IAMAX_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_iamax_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_iamax_tpl_spec_decl.hpp index 9a6adf5b79..958bc4d218 100644 --- a/blas/tpls/KokkosBlas1_iamax_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_iamax_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_IAMAX_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_IAMAX_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_mult_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_mult_tpl_spec_avail.hpp index 84286021d5..5b0b5662ba 100644 --- a/blas/tpls/KokkosBlas1_mult_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_mult_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_MULT_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_MULT_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_mult_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_mult_tpl_spec_decl.hpp index 6501ddab42..20ffd8a35b 100644 --- a/blas/tpls/KokkosBlas1_mult_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_mult_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_MULT_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_MULT_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_nrm1_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_nrm1_tpl_spec_avail.hpp index 1ca215c0e5..a2ce0d4390 100644 --- a/blas/tpls/KokkosBlas1_nrm1_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_nrm1_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM1_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_NRM1_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_nrm1_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_nrm1_tpl_spec_decl.hpp index 8a8a309548..559615d105 100644 --- a/blas/tpls/KokkosBlas1_nrm1_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_nrm1_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM1_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_NRM1_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_nrm2_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_nrm2_tpl_spec_avail.hpp index 68e55927ac..8b5476fd40 100644 --- a/blas/tpls/KokkosBlas1_nrm2_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_nrm2_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM2_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_NRM2_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_nrm2_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_nrm2_tpl_spec_decl.hpp index 954c039b8d..11a8894ca6 100644 --- a/blas/tpls/KokkosBlas1_nrm2_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_nrm2_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM2_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_NRM2_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_nrm2w_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_nrm2w_tpl_spec_avail.hpp index 6dde279624..7613190645 100644 --- a/blas/tpls/KokkosBlas1_nrm2w_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_nrm2w_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM2W_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_NRM2W_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_nrm2w_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_nrm2w_tpl_spec_decl.hpp index 919392902b..0008bc11cb 100644 --- a/blas/tpls/KokkosBlas1_nrm2w_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_nrm2w_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRM2W_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_NRM2W_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_nrminf_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_nrminf_tpl_spec_avail.hpp index 31286c5baf..2fd3da50ee 100644 --- a/blas/tpls/KokkosBlas1_nrminf_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_nrminf_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRMINF_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_NRMINF_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_nrminf_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_nrminf_tpl_spec_decl.hpp index cdf2aa1b1b..aad5bbd7d4 100644 --- a/blas/tpls/KokkosBlas1_nrminf_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_nrminf_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_NRMINF_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_NRMINF_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_reciprocal_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_reciprocal_tpl_spec_avail.hpp index 84de98fdb0..5879131808 100644 --- a/blas/tpls/KokkosBlas1_reciprocal_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_reciprocal_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_RECIPROCAL_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_RECIPROCAL_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_reciprocal_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_reciprocal_tpl_spec_decl.hpp index 83665a886b..90cf554a93 100644 --- a/blas/tpls/KokkosBlas1_reciprocal_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_reciprocal_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_RECIPROCAL_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_RECIPROCAL_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp index 49e612214a..59f1715e54 100644 --- a/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rot_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_ROT_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp index 709a96cfa2..8c83f9a096 100644 --- a/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rot_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROT_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_ROT_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp index a17a5cdb05..ea94ff04dc 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_ROTG_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp index ef2f0b5488..ee6a6c8c04 100644 --- a/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotg_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTG_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_ROTG_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_rotm_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotm_tpl_spec_avail.hpp index 668b31e435..2a1ee21cc6 100644 --- a/blas/tpls/KokkosBlas1_rotm_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rotm_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_ROTM_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp index 7cc983f42e..ce8826e1ee 100644 --- a/blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotm_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_ROTM_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp index e9b26800cd..d4db1143f9 100644 --- a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_ROTMG_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp index 30619f3970..e911294df4 100644 --- a/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_rotmg_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_ROTMG_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_scal_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_scal_tpl_spec_avail.hpp index 7e01fc1b65..d340c6bc02 100644 --- a/blas/tpls/KokkosBlas1_scal_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_scal_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_SCAL_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_SCAL_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_scal_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_scal_tpl_spec_decl.hpp index 1b3b484a23..8b3d8e6d95 100644 --- a/blas/tpls/KokkosBlas1_scal_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_scal_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_SCAL_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_SCAL_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_sum_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_sum_tpl_spec_avail.hpp index 0c05c28540..12470c28ed 100644 --- a/blas/tpls/KokkosBlas1_sum_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_sum_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_SUM_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_SUM_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_sum_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_sum_tpl_spec_decl.hpp index 6004a223c4..7e6919a112 100644 --- a/blas/tpls/KokkosBlas1_sum_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_sum_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_ABS_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_ABS_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas1_update_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_update_tpl_spec_avail.hpp index 13c5ff156c..76eb7cb37a 100644 --- a/blas/tpls/KokkosBlas1_update_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_update_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_UPDATE_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_UPDATE_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas1_update_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_update_tpl_spec_decl.hpp index 8cafa5c1e5..ddde1d7c9e 100644 --- a/blas/tpls/KokkosBlas1_update_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_update_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS1_UPDATE_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS1_UPDATE_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas2_gemv_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas2_gemv_tpl_spec_avail.hpp index 2c22e23334..f203be944f 100644 --- a/blas/tpls/KokkosBlas2_gemv_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas2_gemv_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS2_GEMV_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS2_GEMV_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp index 2d67c95c3e..95e589bbf0 100644 --- a/blas/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS2_GEMV_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS2_GEMV_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp index 77aa5a6713..f689ba079c 100644 --- a/blas/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas2_serial_gemv_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS2_SERIAL_GEMV_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS2_SERIAL_GEMV_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp index a569867586..25d8818817 100644 --- a/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_GEMV_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS3_GEMV_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp index 56ef551412..5508b892e7 100644 --- a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_GEMM_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS3_GEMM_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas3_trmm_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas3_trmm_tpl_spec_avail.hpp index 0f3ecf84ed..e44f3a9db7 100644 --- a/blas/tpls/KokkosBlas3_trmm_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas3_trmm_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_TRMM_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS3_TRMM_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas3_trmm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas3_trmm_tpl_spec_decl.hpp index 2988ecb040..44771da56f 100644 --- a/blas/tpls/KokkosBlas3_trmm_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas3_trmm_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_TRMM_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS3_TRMM_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas3_trsm_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas3_trsm_tpl_spec_avail.hpp index 71d31a4e66..2af72d4950 100644 --- a/blas/tpls/KokkosBlas3_trsm_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas3_trsm_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_TRSM_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS3_TRSM_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas3_trsm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas3_trsm_tpl_spec_decl.hpp index 78fb3d1b82..0d2f38ed6e 100644 --- a/blas/tpls/KokkosBlas3_trsm_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas3_trsm_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_TRSM_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS3_TRSM_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas_Host_tpl.hpp b/blas/tpls/KokkosBlas_Host_tpl.hpp index 2c616c9d95..da89b5aa5d 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.hpp +++ b/blas/tpls/KokkosBlas_Host_tpl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_HOST_TPL_HPP_ #define KOKKOSBLAS_HOST_TPL_HPP_ diff --git a/blas/tpls/KokkosBlas_gesv_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas_gesv_tpl_spec_avail.hpp index 4544a396bd..f909b4a295 100644 --- a/blas/tpls/KokkosBlas_gesv_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas_gesv_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_GESV_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS_GESV_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas_gesv_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas_gesv_tpl_spec_decl.hpp index c8b69bad49..7d8f0a8a2b 100644 --- a/blas/tpls/KokkosBlas_gesv_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas_gesv_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_GESV_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS_GESV_TPL_SPEC_DECL_HPP_ diff --git a/blas/tpls/KokkosBlas_tpl_spec.hpp b/blas/tpls/KokkosBlas_tpl_spec.hpp index ffe02f6529..a1eee4b69c 100644 --- a/blas/tpls/KokkosBlas_tpl_spec.hpp +++ b/blas/tpls/KokkosBlas_tpl_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_TPL_SPEC_HPP_ #define KOKKOSBLAS_TPL_SPEC_HPP_ diff --git a/blas/tpls/KokkosBlas_trtri_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas_trtri_tpl_spec_avail.hpp index c025a1a11e..de9fc08c99 100644 --- a/blas/tpls/KokkosBlas_trtri_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas_trtri_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_TRTRI_TPL_SPEC_AVAIL_HPP_ #define KOKKOSBLAS_TRTRI_TPL_SPEC_AVAIL_HPP_ diff --git a/blas/tpls/KokkosBlas_trtri_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas_trtri_tpl_spec_decl.hpp index af6c186039..46ec894547 100644 --- a/blas/tpls/KokkosBlas_trtri_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas_trtri_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_TRTRI_TPL_SPEC_DECL_HPP_ #define KOKKOSBLAS_TRTRI_TPL_SPEC_DECL_HPP_ diff --git a/blas/unit_test/Test_Blas1_serial_setscal.hpp b/blas/unit_test/Test_Blas1_serial_setscal.hpp index 2e2a207c47..bb33aa451a 100644 --- a/blas/unit_test/Test_Blas1_serial_setscal.hpp +++ b/blas/unit_test/Test_Blas1_serial_setscal.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \author Kyungjoo Kim (kyukim@sandia.gov) diff --git a/blas/unit_test/Test_Blas1_team_setscal.hpp b/blas/unit_test/Test_Blas1_team_setscal.hpp index 394c7b6c2d..fd30cc5bfb 100644 --- a/blas/unit_test/Test_Blas1_team_setscal.hpp +++ b/blas/unit_test/Test_Blas1_team_setscal.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \author Kyungjoo Kim (kyukim@sandia.gov) diff --git a/blas/unit_test/Test_Blas_serial_axpy.hpp b/blas/unit_test/Test_Blas_serial_axpy.hpp index 83892640a7..48b417c96d 100644 --- a/blas/unit_test/Test_Blas_serial_axpy.hpp +++ b/blas/unit_test/Test_Blas_serial_axpy.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Luc Berger-Vergiat (lberge@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef TEST_BLAS_SERIAL_AXPY_HPP_ #define TEST_BLAS_SERIAL_AXPY_HPP_ diff --git a/blas/unit_test/Test_Blas_serial_nrm2.hpp b/blas/unit_test/Test_Blas_serial_nrm2.hpp index 1a2721e782..a4af218ff3 100644 --- a/blas/unit_test/Test_Blas_serial_nrm2.hpp +++ b/blas/unit_test/Test_Blas_serial_nrm2.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Luc Berger-Vergiat (lberge@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef TEST_BLAS_SERIAL_NRM2_HPP_ #define TEST_BLAS_SERIAL_NRM2_HPP_ diff --git a/common/src/KokkosKernels_BitUtils.hpp b/common/src/KokkosKernels_BitUtils.hpp index 049acd8b27..5be56c388c 100644 --- a/common/src/KokkosKernels_BitUtils.hpp +++ b/common/src/KokkosKernels_BitUtils.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER - */ #ifndef _KOKKOSKERNELS_BITUTILS_HPP #define _KOKKOSKERNELS_BITUTILS_HPP diff --git a/common/src/KokkosKernels_BlockHashmapAccumulator.hpp b/common/src/KokkosKernels_BlockHashmapAccumulator.hpp index 576060cf75..f275bd007a 100644 --- a/common/src/KokkosKernels_BlockHashmapAccumulator.hpp +++ b/common/src/KokkosKernels_BlockHashmapAccumulator.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSKERNELS_BLOCKHASHMAPACCUMULATOR_HPP #define _KOKKOSKERNELS_BLOCKHASHMAPACCUMULATOR_HPP #include diff --git a/common/src/KokkosKernels_BlockUtils.hpp b/common/src/KokkosKernels_BlockUtils.hpp index 0c001ce115..006a38a6e4 100644 --- a/common/src/KokkosKernels_BlockUtils.hpp +++ b/common/src/KokkosKernels_BlockUtils.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSKERNELS_BLOCKUTILS_HPP #define _KOKKOSKERNELS_BLOCKUTILS_HPP diff --git a/common/src/KokkosKernels_Error.hpp b/common/src/KokkosKernels_Error.hpp index 11bd7f6953..e4e4981973 100644 --- a/common/src/KokkosKernels_Error.hpp +++ b/common/src/KokkosKernels_Error.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSKERNELS_ERROR_HPP #define KOKKOSKERNELS_ERROR_HPP diff --git a/common/src/KokkosKernels_ExecSpaceUtils.hpp b/common/src/KokkosKernels_ExecSpaceUtils.hpp index 09943d695f..a0f6e39f4d 100644 --- a/common/src/KokkosKernels_ExecSpaceUtils.hpp +++ b/common/src/KokkosKernels_ExecSpaceUtils.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSKERNELSUTILSEXECSPACEUTILS_HPP #define _KOKKOSKERNELSUTILSEXECSPACEUTILS_HPP diff --git a/common/src/KokkosKernels_Half.hpp b/common/src/KokkosKernels_Half.hpp index cf778c12d9..eddd2f1e4c 100644 --- a/common/src/KokkosKernels_Half.hpp +++ b/common/src/KokkosKernels_Half.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSKERNELS_HALF_HPP #define KOKKOSKERNELS_HALF_HPP diff --git a/common/src/KokkosKernels_HashmapAccumulator.hpp b/common/src/KokkosKernels_HashmapAccumulator.hpp index c988e2f4f7..3a12d399f2 100644 --- a/common/src/KokkosKernels_HashmapAccumulator.hpp +++ b/common/src/KokkosKernels_HashmapAccumulator.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSKERNELS_HASHMAPACCUMULATOR_HPP #define _KOKKOSKERNELS_HASHMAPACCUMULATOR_HPP #include diff --git a/common/src/KokkosKernels_IOUtils.hpp b/common/src/KokkosKernels_IOUtils.hpp index 08e6f3cdc7..fd3e44db09 100644 --- a/common/src/KokkosKernels_IOUtils.hpp +++ b/common/src/KokkosKernels_IOUtils.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include #include diff --git a/common/src/KokkosKernels_Macros.hpp b/common/src/KokkosKernels_Macros.hpp index 6e84e79d41..d7f7af5a79 100644 --- a/common/src/KokkosKernels_Macros.hpp +++ b/common/src/KokkosKernels_Macros.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER // File contains common macro definitions which are both generated by cmake in diff --git a/common/src/KokkosKernels_PrintUtils.hpp b/common/src/KokkosKernels_PrintUtils.hpp index d368c1a227..eff4f1f43f 100644 --- a/common/src/KokkosKernels_PrintUtils.hpp +++ b/common/src/KokkosKernels_PrintUtils.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSKERNELS_PRINTUTILS_HPP #define _KOKKOSKERNELS_PRINTUTILS_HPP diff --git a/common/src/KokkosKernels_SimpleUtils.hpp b/common/src/KokkosKernels_SimpleUtils.hpp index 08207c199b..63d1ff720e 100644 --- a/common/src/KokkosKernels_SimpleUtils.hpp +++ b/common/src/KokkosKernels_SimpleUtils.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSKERNELS_SIMPLEUTILS_HPP #define _KOKKOSKERNELS_SIMPLEUTILS_HPP #include "Kokkos_Core.hpp" diff --git a/common/src/KokkosKernels_Sorting.hpp b/common/src/KokkosKernels_Sorting.hpp index 8b897047d9..20ce6deaa2 100644 --- a/common/src/KokkosKernels_Sorting.hpp +++ b/common/src/KokkosKernels_Sorting.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSKERNELS_SORTING_HPP #define _KOKKOSKERNELS_SORTING_HPP diff --git a/common/src/KokkosKernels_Uniform_Initialized_MemoryPool.hpp b/common/src/KokkosKernels_Uniform_Initialized_MemoryPool.hpp index 1008a39ea3..e40b81a762 100644 --- a/common/src/KokkosKernels_Uniform_Initialized_MemoryPool.hpp +++ b/common/src/KokkosKernels_Uniform_Initialized_MemoryPool.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSKERNELS_MEMPOOL_HPP #define _KOKKOSKERNELS_MEMPOOL_HPP diff --git a/common/src/KokkosKernels_Utils.hpp b/common/src/KokkosKernels_Utils.hpp index 4db72c40fa..29bf2757d5 100644 --- a/common/src/KokkosKernels_Utils.hpp +++ b/common/src/KokkosKernels_Utils.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "Kokkos_Core.hpp" #include "Kokkos_ArithTraits.hpp" #include "Kokkos_UnorderedMap.hpp" diff --git a/common/src/KokkosKernels_VectorUtils.hpp b/common/src/KokkosKernels_VectorUtils.hpp index 67b91bd145..f0c09a7e9f 100644 --- a/common/src/KokkosKernels_VectorUtils.hpp +++ b/common/src/KokkosKernels_VectorUtils.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "Kokkos_Core.hpp" #ifndef _KOKKOSKERNELS_VECTORUTILS_HPP diff --git a/common/src/KokkosKernels_default_types.hpp b/common/src/KokkosKernels_default_types.hpp index d70a6b27ac..9210264b61 100644 --- a/common/src/KokkosKernels_default_types.hpp +++ b/common/src/KokkosKernels_default_types.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSKERNELS_DEFAULT_TYPES_H #define KOKKOSKERNELS_DEFAULT_TYPES_H diff --git a/common/src/KokkosKernels_helpers.hpp b/common/src/KokkosKernels_helpers.hpp index e3e918956e..a7a1882700 100644 --- a/common/src/KokkosKernels_helpers.hpp +++ b/common/src/KokkosKernels_helpers.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSKERNELS_HELPERS_HPP_ #define KOKKOSKERNELS_HELPERS_HPP_ diff --git a/common/src/KokkosLinAlg_config.h b/common/src/KokkosLinAlg_config.h index 4ceb632f7c..fccfe799ca 100644 --- a/common/src/KokkosLinAlg_config.h +++ b/common/src/KokkosLinAlg_config.h @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER // For backwards compatibility diff --git a/common/src/Kokkos_ArithTraits.hpp b/common/src/Kokkos_ArithTraits.hpp index 108e845694..98ac27f1c9 100644 --- a/common/src/Kokkos_ArithTraits.hpp +++ b/common/src/Kokkos_ArithTraits.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_ARITHTRAITS_HPP #define KOKKOS_ARITHTRAITS_HPP diff --git a/common/src/Kokkos_InnerProductSpaceTraits.hpp b/common/src/Kokkos_InnerProductSpaceTraits.hpp index b43d34c5f3..072125115c 100644 --- a/common/src/Kokkos_InnerProductSpaceTraits.hpp +++ b/common/src/Kokkos_InnerProductSpaceTraits.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_INNERPRODUCTSPACETRAITS_HPP #define KOKKOS_INNERPRODUCTSPACETRAITS_HPP diff --git a/common/unit_test/Test_Common_ArithTraits.hpp b/common/unit_test/Test_Common_ArithTraits.hpp index 19b0ce9d15..29d0498055 100644 --- a/common/unit_test/Test_Common_ArithTraits.hpp +++ b/common/unit_test/Test_Common_ArithTraits.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file ArithTraitsTest.hpp /// \brief Templated test for Kokkos::Details::ArithTraits diff --git a/common/unit_test/Test_Common_Error.hpp b/common/unit_test/Test_Common_Error.hpp index 1b30e8375f..375f75b5ff 100644 --- a/common/unit_test/Test_Common_Error.hpp +++ b/common/unit_test/Test_Common_Error.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef TEST_COMMON_ERROR_HPP #define TEST_COMMON_ERROR_HPP diff --git a/common/unit_test/Test_Common_IOUtils.hpp b/common/unit_test/Test_Common_IOUtils.hpp index d315847efe..c4e031adf4 100644 --- a/common/unit_test/Test_Common_IOUtils.hpp +++ b/common/unit_test/Test_Common_IOUtils.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file Test_Common_IOUtils.hpp /// \brief Tests for IO and print routines diff --git a/common/unit_test/Test_Common_Sorting.hpp b/common/unit_test/Test_Common_Sorting.hpp index 1142ec7bce..51ecf228a8 100644 --- a/common/unit_test/Test_Common_Sorting.hpp +++ b/common/unit_test/Test_Common_Sorting.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file Test_Common_Sorting.hpp /// \brief Tests for radixSort and bitonicSort in KokkoKernels_Sorting.hpp diff --git a/common/unit_test/Test_Common_float128.hpp b/common/unit_test/Test_Common_float128.hpp index 1ef2913a82..846a5ef879 100644 --- a/common/unit_test/Test_Common_float128.hpp +++ b/common/unit_test/Test_Common_float128.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file float128.cpp /// \brief Test for \c __float128 with Kokkos. diff --git a/common/unit_test/Test_Common_set_bit_count.hpp b/common/unit_test/Test_Common_set_bit_count.hpp index 937a2fdf1b..dd65ced821 100644 --- a/common/unit_test/Test_Common_set_bit_count.hpp +++ b/common/unit_test/Test_Common_set_bit_count.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/example/batched_solve/examples_helper.hpp b/example/batched_solve/examples_helper.hpp index 41b936a35c..3010f66ba8 100644 --- a/example/batched_solve/examples_helper.hpp +++ b/example/batched_solve/examples_helper.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER /// \brief create_saddle_point_matrices: diff --git a/example/batched_solve/static_pivoting.cpp b/example/batched_solve/static_pivoting.cpp index 69ab25b62f..e8a25778fc 100644 --- a/example/batched_solve/static_pivoting.cpp +++ b/example/batched_solve/static_pivoting.cpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #include diff --git a/example/batched_solve/team_GMRES.cpp b/example/batched_solve/team_GMRES.cpp index 404e573491..057902b6f2 100644 --- a/example/batched_solve/team_GMRES.cpp +++ b/example/batched_solve/team_GMRES.cpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #include diff --git a/example/fenl/BoxElemFixture.hpp b/example/fenl/BoxElemFixture.hpp index d7513ed1f2..ca8da8fc24 100644 --- a/example/fenl/BoxElemFixture.hpp +++ b/example/fenl/BoxElemFixture.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_EXAMPLE_BOXELEMFIXTURE_HPP #define KOKKOS_EXAMPLE_BOXELEMFIXTURE_HPP diff --git a/example/fenl/BoxElemPart.cpp b/example/fenl/BoxElemPart.cpp index 29ad1c2396..efafb911c9 100644 --- a/example/fenl/BoxElemPart.cpp +++ b/example/fenl/BoxElemPart.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/example/fenl/BoxElemPart.hpp b/example/fenl/BoxElemPart.hpp index 24a819d20e..dbf2fd7ceb 100644 --- a/example/fenl/BoxElemPart.hpp +++ b/example/fenl/BoxElemPart.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_BOXELEMPART_HPP #define KOKKOS_BOXELEMPART_HPP diff --git a/example/fenl/CGSolve.hpp b/example/fenl/CGSolve.hpp index 79c8badfeb..bdbc0555c6 100644 --- a/example/fenl/CGSolve.hpp +++ b/example/fenl/CGSolve.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_EXAMPLE_CG_SOLVE #define KOKKOS_EXAMPLE_CG_SOLVE diff --git a/example/fenl/HexElement.hpp b/example/fenl/HexElement.hpp index 4c02780ce9..9dbe72430f 100644 --- a/example/fenl/HexElement.hpp +++ b/example/fenl/HexElement.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_HEXELEMENT_HPP #define KOKKOS_HEXELEMENT_HPP diff --git a/example/fenl/TestFixture.cpp b/example/fenl/TestFixture.cpp index c316c0b464..63f9cac89d 100644 --- a/example/fenl/TestFixture.cpp +++ b/example/fenl/TestFixture.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/example/fenl/TestFixture.hpp b/example/fenl/TestFixture.hpp index 54b841c4b6..1418500fbb 100644 --- a/example/fenl/TestFixture.hpp +++ b/example/fenl/TestFixture.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_EXAMPLE_TESTFIXTURE_HPP #define KOKKOS_EXAMPLE_TESTFIXTURE_HPP diff --git a/example/fenl/VectorImport.hpp b/example/fenl/VectorImport.hpp index 22a1936103..b701065deb 100644 --- a/example/fenl/VectorImport.hpp +++ b/example/fenl/VectorImport.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_VECTORIMPORT_HPP #define KOKKOS_VECTORIMPORT_HPP diff --git a/example/fenl/WrapMPI.hpp b/example/fenl/WrapMPI.hpp index 17ee284e22..3dc27b5dc7 100644 --- a/example/fenl/WrapMPI.hpp +++ b/example/fenl/WrapMPI.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_EXAMPLE_WRAP_MPI #define KOKKOS_EXAMPLE_WRAP_MPI diff --git a/example/fenl/fenl.cpp b/example/fenl/fenl.cpp index 3e17a45376..976c1e7766 100644 --- a/example/fenl/fenl.cpp +++ b/example/fenl/fenl.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/example/fenl/fenl.hpp b/example/fenl/fenl.hpp index 6309425129..448c19c179 100644 --- a/example/fenl/fenl.hpp +++ b/example/fenl/fenl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_EXAMPLE_FENL_HPP #define KOKKOS_EXAMPLE_FENL_HPP diff --git a/example/fenl/fenl_functors.hpp b/example/fenl/fenl_functors.hpp index 0a489fa1c0..b058636f34 100644 --- a/example/fenl/fenl_functors.hpp +++ b/example/fenl/fenl_functors.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_EXAMPLE_FENLFUNCTORS_HPP #define KOKKOS_EXAMPLE_FENLFUNCTORS_HPP diff --git a/example/fenl/fenl_impl.hpp b/example/fenl/fenl_impl.hpp index fb17b9cbf0..ea032f1ed1 100644 --- a/example/fenl/fenl_impl.hpp +++ b/example/fenl/fenl_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_EXAMPLE_FENL_IMPL_HPP #define KOKKOS_EXAMPLE_FENL_IMPL_HPP diff --git a/example/fenl/main.cpp b/example/fenl/main.cpp index ba99f0341e..74779d66fd 100644 --- a/example/fenl/main.cpp +++ b/example/fenl/main.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/example/gmres/ex_real_A.cpp b/example/gmres/ex_real_A.cpp index f9cb1f8340..14c4eaeb15 100644 --- a/example/gmres/ex_real_A.cpp +++ b/example/gmres/ex_real_A.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Jennifer Loe (jloe@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include "KokkosSparse_IOUtils.hpp" diff --git a/example/gmres/test_prec.cpp b/example/gmres/test_prec.cpp index 6b0ec9af70..f4aca0d6f6 100644 --- a/example/gmres/test_prec.cpp +++ b/example/gmres/test_prec.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Jennifer Loe (jloe@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/example/graph/KokkosKernels_Example_Distance2GraphColor.cpp b/example/graph/KokkosKernels_Example_Distance2GraphColor.cpp index 2e855566d5..9a5537ee5b 100644 --- a/example/graph/KokkosKernels_Example_Distance2GraphColor.cpp +++ b/example/graph/KokkosKernels_Example_Distance2GraphColor.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ // Standard Library Headers #include diff --git a/example/graph/PartitioningExample.cpp b/example/graph/PartitioningExample.cpp index 50e9487184..a31a445229 100644 --- a/example/graph/PartitioningExample.cpp +++ b/example/graph/PartitioningExample.cpp @@ -1,47 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions Contact: William McLendon (wcmclen@sandia.gov) or -// Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/example/half/xpy.cpp b/example/half/xpy.cpp index bc6bf7481d..16231d64fe 100644 --- a/example/half/xpy.cpp +++ b/example/half/xpy.cpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #include "Kokkos_Core.hpp" diff --git a/example/hashmap_accumulator/KokkosKernels_Example_HashmapAccumulator.cpp b/example/hashmap_accumulator/KokkosKernels_Example_HashmapAccumulator.cpp index be3adcf6c2..065c103cef 100644 --- a/example/hashmap_accumulator/KokkosKernels_Example_HashmapAccumulator.cpp +++ b/example/hashmap_accumulator/KokkosKernels_Example_HashmapAccumulator.cpp @@ -1,47 +1,19 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions Contact: William McLendon (wcmclen@sandia.gov) or -// Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ + #include #include diff --git a/example/wiki/sparse/KokkosSparse_wiki_bsrmatrix.cpp b/example/wiki/sparse/KokkosSparse_wiki_bsrmatrix.cpp index c6025be3a8..624c8fb2e1 100644 --- a/example/wiki/sparse/KokkosSparse_wiki_bsrmatrix.cpp +++ b/example/wiki/sparse/KokkosSparse_wiki_bsrmatrix.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Luc Berger-Vergiat (lberge@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include diff --git a/graph/impl/KokkosGraph_BFS_impl.hpp b/graph/impl/KokkosGraph_BFS_impl.hpp index 8a66650af5..e73c1cb489 100644 --- a/graph/impl/KokkosGraph_BFS_impl.hpp +++ b/graph/impl/KokkosGraph_BFS_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Brian Kelley (bmkelle@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSGRAPH_BFS_IMPL_HPP #define _KOKKOSGRAPH_BFS_IMPL_HPP diff --git a/graph/impl/KokkosGraph_Distance1Color_impl.hpp b/graph/impl/KokkosGraph_Distance1Color_impl.hpp index b767a095af..6bd1c022ae 100644 --- a/graph/impl/KokkosGraph_Distance1Color_impl.hpp +++ b/graph/impl/KokkosGraph_Distance1Color_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/graph/impl/KokkosGraph_Distance2Color_impl.hpp b/graph/impl/KokkosGraph_Distance2Color_impl.hpp index 2c2f83f957..2ab04667e0 100644 --- a/graph/impl/KokkosGraph_Distance2Color_impl.hpp +++ b/graph/impl/KokkosGraph_Distance2Color_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Brian Kelley (bmkelle@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSGRAPH_DISTANCE2COLOR_IMPL_HPP #define _KOKKOSGRAPH_DISTANCE2COLOR_IMPL_HPP diff --git a/graph/impl/KokkosGraph_Distance2MIS_impl.hpp b/graph/impl/KokkosGraph_Distance2MIS_impl.hpp index 39ff6529de..aa8180fae7 100644 --- a/graph/impl/KokkosGraph_Distance2MIS_impl.hpp +++ b/graph/impl/KokkosGraph_Distance2MIS_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Brian Kelley (bmkelle@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSGRAPH_DISTANCE2_MIS_IMPL_HPP #define _KOKKOSGRAPH_DISTANCE2_MIS_IMPL_HPP diff --git a/graph/impl/KokkosGraph_ExplicitCoarsening_impl.hpp b/graph/impl/KokkosGraph_ExplicitCoarsening_impl.hpp index dece3aa742..464880c932 100644 --- a/graph/impl/KokkosGraph_ExplicitCoarsening_impl.hpp +++ b/graph/impl/KokkosGraph_ExplicitCoarsening_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSGRAPH_EXPLICIT_COARSEN_IMPL_HPP #define KOKKOSGRAPH_EXPLICIT_COARSEN_IMPL_HPP diff --git a/graph/impl/KokkosGraph_color_d1_spec.hpp b/graph/impl/KokkosGraph_color_d1_spec.hpp index 67cd09a099..af5e2f0751 100644 --- a/graph/impl/KokkosGraph_color_d1_spec.hpp +++ b/graph/impl/KokkosGraph_color_d1_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_COLOR_D1_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_COLOR_D1_SPEC_HPP_ diff --git a/graph/src/KokkosGraph_CoarsenConstruct.hpp b/graph/src/KokkosGraph_CoarsenConstruct.hpp index eb4a2ae556..28de59979e 100644 --- a/graph/src/KokkosGraph_CoarsenConstruct.hpp +++ b/graph/src/KokkosGraph_CoarsenConstruct.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Mike Gilbert (msg5334@psu.edu) -// -// ************************************************************************ //@HEADER -*/ #pragma once // exclude from Cuda builds without lambdas enabled diff --git a/graph/src/KokkosGraph_Distance1Color.hpp b/graph/src/KokkosGraph_Distance1Color.hpp index aca6414c83..784b687957 100644 --- a/graph/src/KokkosGraph_Distance1Color.hpp +++ b/graph/src/KokkosGraph_Distance1Color.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSGRAPH_DISTANCE1_COLOR_HPP #define _KOKKOSGRAPH_DISTANCE1_COLOR_HPP diff --git a/graph/src/KokkosGraph_Distance1ColorHandle.hpp b/graph/src/KokkosGraph_Distance1ColorHandle.hpp index 0f5d60591f..1b2f981945 100644 --- a/graph/src/KokkosGraph_Distance1ColorHandle.hpp +++ b/graph/src/KokkosGraph_Distance1ColorHandle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/graph/src/KokkosGraph_Distance2Color.hpp b/graph/src/KokkosGraph_Distance2Color.hpp index 22be362a0c..c40ec72ece 100644 --- a/graph/src/KokkosGraph_Distance2Color.hpp +++ b/graph/src/KokkosGraph_Distance2Color.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Brian Kelley (bmkelle@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOS_GRAPH_COLORDISTANCE2_HPP #define _KOKKOS_GRAPH_COLORDISTANCE2_HPP diff --git a/graph/src/KokkosGraph_Distance2ColorHandle.hpp b/graph/src/KokkosGraph_Distance2ColorHandle.hpp index 766ae6c36a..c6508e0ba8 100644 --- a/graph/src/KokkosGraph_Distance2ColorHandle.hpp +++ b/graph/src/KokkosGraph_Distance2ColorHandle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Brian Kelley (bmkelle@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/graph/src/KokkosGraph_ExplicitCoarsening.hpp b/graph/src/KokkosGraph_ExplicitCoarsening.hpp index 322004c0b6..3c655026f5 100644 --- a/graph/src/KokkosGraph_ExplicitCoarsening.hpp +++ b/graph/src/KokkosGraph_ExplicitCoarsening.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSGRAPH_EXPLICIT_COARSEN_HPP #define KOKKOSGRAPH_EXPLICIT_COARSEN_HPP diff --git a/graph/src/KokkosGraph_GraphColorHandle.hpp b/graph/src/KokkosGraph_GraphColorHandle.hpp index a99feaf5db..ba7b6a92fe 100644 --- a/graph/src/KokkosGraph_GraphColorHandle.hpp +++ b/graph/src/KokkosGraph_GraphColorHandle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /** * This maintains backwards-compatibility with older code that included diff --git a/graph/src/KokkosGraph_MIS2.hpp b/graph/src/KokkosGraph_MIS2.hpp index 329566792c..fb38d05456 100644 --- a/graph/src/KokkosGraph_MIS2.hpp +++ b/graph/src/KokkosGraph_MIS2.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Brian Kelley (bmkelle@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSGRAPH_DISTANCE2_MIS_HPP #define _KOKKOSGRAPH_DISTANCE2_MIS_HPP diff --git a/graph/src/KokkosGraph_RCM.hpp b/graph/src/KokkosGraph_RCM.hpp index 84ee974234..4f82f1dafd 100644 --- a/graph/src/KokkosGraph_RCM.hpp +++ b/graph/src/KokkosGraph_RCM.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Brian Kelley (bmkelle@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSGRAPH_RCM_HPP #define _KOKKOSGRAPH_RCM_HPP diff --git a/graph/src/KokkosGraph_Triangle.hpp b/graph/src/KokkosGraph_Triangle.hpp index 3432ad0711..5c7360a88a 100644 --- a/graph/src/KokkosGraph_Triangle.hpp +++ b/graph/src/KokkosGraph_Triangle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOS_TRIANGLE_HPP #define _KOKKOS_TRIANGLE_HPP #include "KokkosSparse_spgemm_impl.hpp" diff --git a/graph/src/KokkosGraph_graph_color.hpp b/graph/src/KokkosGraph_graph_color.hpp index a99feaf5db..ba7b6a92fe 100644 --- a/graph/src/KokkosGraph_graph_color.hpp +++ b/graph/src/KokkosGraph_graph_color.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /** * This maintains backwards-compatibility with older code that included diff --git a/graph/unit_test/Test_Graph_coarsen.hpp b/graph/unit_test/Test_Graph_coarsen.hpp index ae23c1a741..6f0eda42f3 100644 --- a/graph/unit_test/Test_Graph_coarsen.hpp +++ b/graph/unit_test/Test_Graph_coarsen.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Mike Gilbert (msg5334@psu.edu) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/graph/unit_test/Test_Graph_graph_color.hpp b/graph/unit_test/Test_Graph_graph_color.hpp index 4d35874657..19ee9f600b 100644 --- a/graph/unit_test/Test_Graph_graph_color.hpp +++ b/graph/unit_test/Test_Graph_graph_color.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/graph/unit_test/Test_Graph_graph_color_deterministic.hpp b/graph/unit_test/Test_Graph_graph_color_deterministic.hpp index e2e4a3d227..3b3cadd71b 100644 --- a/graph/unit_test/Test_Graph_graph_color_deterministic.hpp +++ b/graph/unit_test/Test_Graph_graph_color_deterministic.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/graph/unit_test/Test_Graph_graph_color_distance2.hpp b/graph/unit_test/Test_Graph_graph_color_distance2.hpp index c78e8c2f5f..d022a0d2d6 100644 --- a/graph/unit_test/Test_Graph_graph_color_distance2.hpp +++ b/graph/unit_test/Test_Graph_graph_color_distance2.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Brian Kelley (bmkelle@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/graph/unit_test/Test_Graph_mis2.hpp b/graph/unit_test/Test_Graph_mis2.hpp index c1b5e179fe..faaea3b155 100644 --- a/graph/unit_test/Test_Graph_mis2.hpp +++ b/graph/unit_test/Test_Graph_mis2.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Brian Kelley (bmkelle@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/graph/unit_test/Test_Graph_rcm.hpp b/graph/unit_test/Test_Graph_rcm.hpp index 2d2356a92e..861634071e 100644 --- a/graph/unit_test/Test_Graph_rcm.hpp +++ b/graph/unit_test/Test_Graph_rcm.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_1.hpp b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_1.hpp index 186228a31e..e289f8fa52 100644 --- a/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_1.hpp +++ b/perf_test/batched/sparse/CG/Functor_TestBatchedTeamVectorCG_1.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER template diff --git a/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_1.hpp b/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_1.hpp index a88903e9d0..0640ac8151 100644 --- a/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_1.hpp +++ b/perf_test/batched/sparse/GMRES/Functor_TestBatchedTeamVectorGMRES_1.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER template diff --git a/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp b/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp index ca096117a9..663ea400be 100644 --- a/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp +++ b/perf_test/batched/sparse/KokkosBatched_Test_Sparse_Helper.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER template diff --git a/perf_test/batched/sparse/SPMV/KokkosBatched_SPMV_View.hpp b/perf_test/batched/sparse/SPMV/KokkosBatched_SPMV_View.hpp index fb693cb206..35efd40a16 100644 --- a/perf_test/batched/sparse/SPMV/KokkosBatched_SPMV_View.hpp +++ b/perf_test/batched/sparse/SPMV/KokkosBatched_SPMV_View.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER template diff --git a/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverDn.cpp b/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverDn.cpp index 05d45a19fd..546cc84cab 100644 --- a/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverDn.cpp +++ b/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverDn.cpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #include diff --git a/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverSp.cpp b/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverSp.cpp index 2c9efe41de..d1a21b3053 100644 --- a/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverSp.cpp +++ b/perf_test/batched/sparse/cusolver/KokkosBatched_Test_cusolverSp.cpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.4 -// Copyright (2021) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #include diff --git a/perf_test/blas/KokkosBlas_blas1.cpp b/perf_test/blas/KokkosBlas_blas1.cpp index 764f800f39..52d2cd4b42 100644 --- a/perf_test/blas/KokkosBlas_blas1.cpp +++ b/perf_test/blas/KokkosBlas_blas1.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include #include diff --git a/perf_test/blas/KokkosBlas_blas1_MV.cpp b/perf_test/blas/KokkosBlas_blas1_MV.cpp index 6f2d3bf8ef..13e4059c27 100644 --- a/perf_test/blas/KokkosBlas_blas1_MV.cpp +++ b/perf_test/blas/KokkosBlas_blas1_MV.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include #include diff --git a/perf_test/blas/blas1/KokkosBlas_common.hpp b/perf_test/blas/blas1/KokkosBlas_common.hpp index 54e79647bf..a903cd2c59 100644 --- a/perf_test/blas/blas1/KokkosBlas_common.hpp +++ b/perf_test/blas/blas1/KokkosBlas_common.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_COMMON_H_ #define KOKKOSBLAS_COMMON_H_ #include "KokkosKernels_default_types.hpp" diff --git a/perf_test/blas/blas1/KokkosBlas_dot_mv_perf_test.cpp b/perf_test/blas/blas1/KokkosBlas_dot_mv_perf_test.cpp index a9d3ef3a05..499a701c13 100644 --- a/perf_test/blas/blas1/KokkosBlas_dot_mv_perf_test.cpp +++ b/perf_test/blas/blas1/KokkosBlas_dot_mv_perf_test.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/blas/blas1/KokkosBlas_dot_perf_test.cpp b/perf_test/blas/blas1/KokkosBlas_dot_perf_test.cpp index 00af807374..89680d20f9 100644 --- a/perf_test/blas/blas1/KokkosBlas_dot_perf_test.cpp +++ b/perf_test/blas/blas1/KokkosBlas_dot_perf_test.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/blas/blas1/KokkosBlas_dot_tracked_perf_test.cpp b/perf_test/blas/blas1/KokkosBlas_dot_tracked_perf_test.cpp index 8f502bdeca..73651937e8 100644 --- a/perf_test/blas/blas1/KokkosBlas_dot_tracked_perf_test.cpp +++ b/perf_test/blas/blas1/KokkosBlas_dot_tracked_perf_test.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/blas/blas1/KokkosBlas_perf_test.cpp b/perf_test/blas/blas1/KokkosBlas_perf_test.cpp index eff73fde3d..3b0f3fa63e 100644 --- a/perf_test/blas/blas1/KokkosBlas_perf_test.cpp +++ b/perf_test/blas/blas1/KokkosBlas_perf_test.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosBlas_common.hpp" #include "blas/blas3/KokkosBlas_trtri_perf_test.hpp" diff --git a/perf_test/blas/blas1/KokkosBlas_team_dot_perf_test.cpp b/perf_test/blas/blas1/KokkosBlas_team_dot_perf_test.cpp index eeb49d6502..2c9c0b0192 100644 --- a/perf_test/blas/blas1/KokkosBlas_team_dot_perf_test.cpp +++ b/perf_test/blas/blas1/KokkosBlas_team_dot_perf_test.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/blas/blas1/KokkosBlas_team_dot_tracked_perf_test.cpp b/perf_test/blas/blas1/KokkosBlas_team_dot_tracked_perf_test.cpp index 90f81f5da4..cf04446011 100644 --- a/perf_test/blas/blas1/KokkosBlas_team_dot_tracked_perf_test.cpp +++ b/perf_test/blas/blas1/KokkosBlas_team_dot_tracked_perf_test.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/blas/blas2/KokkosBlas2_gemv_perf_test.cpp b/perf_test/blas/blas2/KokkosBlas2_gemv_perf_test.cpp index 98e974229b..564db4af2e 100644 --- a/perf_test/blas/blas2/KokkosBlas2_gemv_perf_test.cpp +++ b/perf_test/blas/blas2/KokkosBlas2_gemv_perf_test.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosBlas2_gemv.hpp" #include diff --git a/perf_test/blas/blas2/KokkosBlas2_gemv_tracked_perf_test.cpp b/perf_test/blas/blas2/KokkosBlas2_gemv_tracked_perf_test.cpp index 730fec2dff..fd53023cd4 100644 --- a/perf_test/blas/blas2/KokkosBlas2_gemv_tracked_perf_test.cpp +++ b/perf_test/blas/blas2/KokkosBlas2_gemv_tracked_perf_test.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/blas/blas3/KokkosBlas3_common.hpp b/perf_test/blas/blas3/KokkosBlas3_common.hpp index 6d85fbd0da..9e3ee74215 100644 --- a/perf_test/blas/blas3/KokkosBlas3_common.hpp +++ b/perf_test/blas/blas3/KokkosBlas3_common.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_COMMON_H_ #define KOKKOSBLAS3_COMMON_H_ #include "KokkosKernels_default_types.hpp" diff --git a/perf_test/blas/blas3/KokkosBlas3_gemm_perf_test.hpp b/perf_test/blas/blas3/KokkosBlas3_gemm_perf_test.hpp index d1855573e4..e1137aaeea 100644 --- a/perf_test/blas/blas3/KokkosBlas3_gemm_perf_test.hpp +++ b/perf_test/blas/blas3/KokkosBlas3_gemm_perf_test.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_GEMM_PERF_TEST_H_ #define KOKKOSBLAS3_GEMM_PERF_TEST_H_ diff --git a/perf_test/blas/blas3/KokkosBlas3_gemm_standalone_perf_test.cpp b/perf_test/blas/blas3/KokkosBlas3_gemm_standalone_perf_test.cpp index 6497db8de3..b2b0a171ae 100644 --- a/perf_test/blas/blas3/KokkosBlas3_gemm_standalone_perf_test.cpp +++ b/perf_test/blas/blas3/KokkosBlas3_gemm_standalone_perf_test.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosBlas3_gemm.hpp" #include diff --git a/perf_test/blas/blas3/KokkosBlas3_gemm_tracked_perf_test.cpp b/perf_test/blas/blas3/KokkosBlas3_gemm_tracked_perf_test.cpp index e1bf74ecaa..87aab67baf 100644 --- a/perf_test/blas/blas3/KokkosBlas3_gemm_tracked_perf_test.cpp +++ b/perf_test/blas/blas3/KokkosBlas3_gemm_tracked_perf_test.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/blas/blas3/KokkosBlas3_gemm_tracked_perf_test.hpp b/perf_test/blas/blas3/KokkosBlas3_gemm_tracked_perf_test.hpp index f9b4e8eaff..30d367149c 100644 --- a/perf_test/blas/blas3/KokkosBlas3_gemm_tracked_perf_test.hpp +++ b/perf_test/blas/blas3/KokkosBlas3_gemm_tracked_perf_test.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ // This file is for the "tracked test" version of // a Kokkos Kernels performance test. diff --git a/perf_test/blas/blas3/KokkosBlas3_perf_test.cpp b/perf_test/blas/blas3/KokkosBlas3_perf_test.cpp index 905e123daa..a60517ef02 100644 --- a/perf_test/blas/blas3/KokkosBlas3_perf_test.cpp +++ b/perf_test/blas/blas3/KokkosBlas3_perf_test.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosBlas3_common.hpp" #include "KokkosBlas3_trmm_perf_test.hpp" #include "KokkosBlas3_gemm_perf_test.hpp" diff --git a/perf_test/blas/blas3/KokkosBlas3_trmm_perf_test.hpp b/perf_test/blas/blas3/KokkosBlas3_trmm_perf_test.hpp index 096088773f..7f7e8e25ad 100644 --- a/perf_test/blas/blas3/KokkosBlas3_trmm_perf_test.hpp +++ b/perf_test/blas/blas3/KokkosBlas3_trmm_perf_test.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS3_TRMM_PERF_TEST_H_ #define KOKKOSBLAS3_TRMM_PERF_TEST_H_ diff --git a/perf_test/blas/blas3/KokkosBlas_trtri_perf_test.hpp b/perf_test/blas/blas3/KokkosBlas_trtri_perf_test.hpp index f7bd1ef4f6..7a81a191bb 100644 --- a/perf_test/blas/blas3/KokkosBlas_trtri_perf_test.hpp +++ b/perf_test/blas/blas3/KokkosBlas_trtri_perf_test.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSBLAS_TRTRI_PERF_TEST_H_ #define KOKKOSBLAS_TRTRI_PERF_TEST_H_ diff --git a/perf_test/graph/KokkosGraph_color.cpp b/perf_test/graph/KokkosGraph_color.cpp index b9e00d0fa6..cc969e52a1 100644 --- a/perf_test/graph/KokkosGraph_color.cpp +++ b/perf_test/graph/KokkosGraph_color.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/graph/KokkosGraph_color_d2.cpp b/perf_test/graph/KokkosGraph_color_d2.cpp index ea143ee609..f05040c083 100644 --- a/perf_test/graph/KokkosGraph_color_d2.cpp +++ b/perf_test/graph/KokkosGraph_color_d2.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/graph/KokkosGraph_mis_d2.cpp b/perf_test/graph/KokkosGraph_mis_d2.cpp index df5e28b315..a97cbb4d81 100644 --- a/perf_test/graph/KokkosGraph_mis_d2.cpp +++ b/perf_test/graph/KokkosGraph_mis_d2.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Brian Kelley (bmkelle@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/graph/KokkosGraph_multimem_triangle.hpp b/perf_test/graph/KokkosGraph_multimem_triangle.hpp index 1c26b5fcea..f7875fed0e 100644 --- a/perf_test/graph/KokkosGraph_multimem_triangle.hpp +++ b/perf_test/graph/KokkosGraph_multimem_triangle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosGraph_run_triangle.hpp" #include "KokkosSparse_CrsMatrix.hpp" diff --git a/perf_test/graph/KokkosGraph_run_triangle.hpp b/perf_test/graph/KokkosGraph_run_triangle.hpp index 0a189cd3e1..30d1ec77f6 100644 --- a/perf_test/graph/KokkosGraph_run_triangle.hpp +++ b/perf_test/graph/KokkosGraph_run_triangle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosGraph_Triangle.hpp" #include "KokkosKernels_TestParameters.hpp" diff --git a/perf_test/graph/KokkosGraph_triangle.cpp b/perf_test/graph/KokkosGraph_triangle.cpp index be0b57492a..153382f111 100644 --- a/perf_test/graph/KokkosGraph_triangle.cpp +++ b/perf_test/graph/KokkosGraph_triangle.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include "KokkosGraph_multimem_triangle.hpp" diff --git a/perf_test/performance/performance_example.cpp b/perf_test/performance/performance_example.cpp index 554469d340..e3a5da4316 100644 --- a/perf_test/performance/performance_example.cpp +++ b/perf_test/performance/performance_example.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /* Notes on performance_demo test diff --git a/perf_test/performance/performance_validate.cpp b/perf_test/performance/performance_validate.cpp index 9c4470e003..34328218f7 100644 --- a/perf_test/performance/performance_validate.cpp +++ b/perf_test/performance/performance_validate.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /* Notes on performance_validate test diff --git a/perf_test/sparse/KokkosSparse_block_pcg.cpp b/perf_test/sparse/KokkosSparse_block_pcg.cpp index 34da8f45be..bc268fe49f 100644 --- a/perf_test/sparse/KokkosSparse_block_pcg.cpp +++ b/perf_test/sparse/KokkosSparse_block_pcg.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/sparse/KokkosSparse_gs.cpp b/perf_test/sparse/KokkosSparse_gs.cpp index 2136cbb640..c11c6bdc02 100644 --- a/perf_test/sparse/KokkosSparse_gs.cpp +++ b/perf_test/sparse/KokkosSparse_gs.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/sparse/KokkosSparse_kk_spmv.cpp b/perf_test/sparse/KokkosSparse_kk_spmv.cpp index 40887d67ec..285cf026b4 100644 --- a/perf_test/sparse/KokkosSparse_kk_spmv.cpp +++ b/perf_test/sparse/KokkosSparse_kk_spmv.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include diff --git a/perf_test/sparse/KokkosSparse_multimem_spgemm.hpp b/perf_test/sparse/KokkosSparse_multimem_spgemm.hpp index d7ae6da430..269baf3fdc 100644 --- a/perf_test/sparse/KokkosSparse_multimem_spgemm.hpp +++ b/perf_test/sparse/KokkosSparse_multimem_spgemm.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosSparse_CrsMatrix.hpp" #include "KokkosSparse_run_spgemm.hpp" diff --git a/perf_test/sparse/KokkosSparse_pcg.cpp b/perf_test/sparse/KokkosSparse_pcg.cpp index 51c2cbb01b..475bfe5f85 100644 --- a/perf_test/sparse/KokkosSparse_pcg.cpp +++ b/perf_test/sparse/KokkosSparse_pcg.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include "KokkosSparse_pcg.hpp" diff --git a/perf_test/sparse/KokkosSparse_pcg.hpp b/perf_test/sparse/KokkosSparse_pcg.hpp index 481b5b0d00..90533725c3 100644 --- a/perf_test/sparse/KokkosSparse_pcg.hpp +++ b/perf_test/sparse/KokkosSparse_pcg.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_EXAMPLE_CG_SOLVE #define KOKKOS_EXAMPLE_CG_SOLVE diff --git a/perf_test/sparse/KokkosSparse_run_spgemm.hpp b/perf_test/sparse/KokkosSparse_run_spgemm.hpp index 5ece07e403..67d61d1f75 100644 --- a/perf_test/sparse/KokkosSparse_run_spgemm.hpp +++ b/perf_test/sparse/KokkosSparse_run_spgemm.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosSparse_spgemm.hpp" #include "KokkosKernels_TestParameters.hpp" diff --git a/perf_test/sparse/KokkosSparse_run_spgemm_jacobi.hpp b/perf_test/sparse/KokkosSparse_run_spgemm_jacobi.hpp index 8efd849f58..a2004e007b 100644 --- a/perf_test/sparse/KokkosSparse_run_spgemm_jacobi.hpp +++ b/perf_test/sparse/KokkosSparse_run_spgemm_jacobi.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Seher Acer (sacer@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosSparse_CrsMatrix.hpp" #include "KokkosKernels_TestParameters.hpp" diff --git a/perf_test/sparse/KokkosSparse_spadd.cpp b/perf_test/sparse/KokkosSparse_spadd.cpp index 09b26fbc76..13a7c26d2e 100644 --- a/perf_test/sparse/KokkosSparse_spadd.cpp +++ b/perf_test/sparse/KokkosSparse_spadd.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include "KokkosKernels_config.h" diff --git a/perf_test/sparse/KokkosSparse_spgemm.cpp b/perf_test/sparse/KokkosSparse_spgemm.cpp index 9ec47a068a..d46e9f6f11 100644 --- a/perf_test/sparse/KokkosSparse_spgemm.cpp +++ b/perf_test/sparse/KokkosSparse_spgemm.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include "KokkosKernels_config.h" #include "KokkosKernels_default_types.hpp" diff --git a/perf_test/sparse/KokkosSparse_spgemm_jacobi.cpp b/perf_test/sparse/KokkosSparse_spgemm_jacobi.cpp index aa3969e6c8..bcb71e951a 100644 --- a/perf_test/sparse/KokkosSparse_spgemm_jacobi.cpp +++ b/perf_test/sparse/KokkosSparse_spgemm_jacobi.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Seher Acer (sacer@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include "KokkosKernels_config.h" #include "KokkosKernels_default_types.hpp" diff --git a/perf_test/sparse/KokkosSparse_spiluk.cpp b/perf_test/sparse/KokkosSparse_spiluk.cpp index b86ecc352f..331ae9ec82 100644 --- a/perf_test/sparse/KokkosSparse_spiluk.cpp +++ b/perf_test/sparse/KokkosSparse_spiluk.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include diff --git a/perf_test/sparse/KokkosSparse_spmv.cpp b/perf_test/sparse/KokkosSparse_spmv.cpp index 9eec6181a7..9eb7db68e9 100644 --- a/perf_test/sparse/KokkosSparse_spmv.cpp +++ b/perf_test/sparse/KokkosSparse_spmv.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include diff --git a/perf_test/sparse/KokkosSparse_spmv_bsr.cpp b/perf_test/sparse/KokkosSparse_spmv_bsr.cpp index e10c6748a7..d3b038f0e4 100644 --- a/perf_test/sparse/KokkosSparse_spmv_bsr.cpp +++ b/perf_test/sparse/KokkosSparse_spmv_bsr.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Luc Berger-Vergiat (lberge@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include diff --git a/perf_test/sparse/KokkosSparse_spmv_merge.cpp b/perf_test/sparse/KokkosSparse_spmv_merge.cpp index abf05c6a8a..3110223e3c 100644 --- a/perf_test/sparse/KokkosSparse_spmv_merge.cpp +++ b/perf_test/sparse/KokkosSparse_spmv_merge.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include diff --git a/perf_test/sparse/KokkosSparse_spmv_struct.cpp b/perf_test/sparse/KokkosSparse_spmv_struct.cpp index 3035356f30..b712faefeb 100644 --- a/perf_test/sparse/KokkosSparse_spmv_struct.cpp +++ b/perf_test/sparse/KokkosSparse_spmv_struct.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include diff --git a/perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp b/perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp index d689b9afba..1290b5814b 100644 --- a/perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp +++ b/perf_test/sparse/KokkosSparse_spmv_struct_tuning.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include diff --git a/perf_test/sparse/KokkosSparse_spmv_test.cpp b/perf_test/sparse/KokkosSparse_spmv_test.cpp index 098c7e923b..a930f83695 100644 --- a/perf_test/sparse/KokkosSparse_spmv_test.cpp +++ b/perf_test/sparse/KokkosSparse_spmv_test.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include diff --git a/perf_test/sparse/KokkosSparse_sptrsv.cpp b/perf_test/sparse/KokkosSparse_sptrsv.cpp index a27ed3f6d2..35e8b0e16e 100644 --- a/perf_test/sparse/KokkosSparse_sptrsv.cpp +++ b/perf_test/sparse/KokkosSparse_sptrsv.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include diff --git a/perf_test/sparse/KokkosSparse_sptrsv_aux.hpp b/perf_test/sparse/KokkosSparse_sptrsv_aux.hpp index b0c8a62ad9..c4deec656f 100644 --- a/perf_test/sparse/KokkosSparse_sptrsv_aux.hpp +++ b/perf_test/sparse/KokkosSparse_sptrsv_aux.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE #include diff --git a/perf_test/sparse/KokkosSparse_sptrsv_cholmod.cpp b/perf_test/sparse/KokkosSparse_sptrsv_cholmod.cpp index 117d23c445..87afbba79a 100644 --- a/perf_test/sparse/KokkosSparse_sptrsv_cholmod.cpp +++ b/perf_test/sparse/KokkosSparse_sptrsv_cholmod.cpp @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "Kokkos_Random.hpp" #include "KokkosSparse_CrsMatrix.hpp" diff --git a/perf_test/sparse/KokkosSparse_sptrsv_superlu.cpp b/perf_test/sparse/KokkosSparse_sptrsv_superlu.cpp index 589fed54e6..cc9d698554 100644 --- a/perf_test/sparse/KokkosSparse_sptrsv_superlu.cpp +++ b/perf_test/sparse/KokkosSparse_sptrsv_superlu.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "Kokkos_Random.hpp" #include "KokkosSparse_CrsMatrix.hpp" diff --git a/perf_test/sparse/KokkosSparse_sptrsv_supernode.cpp b/perf_test/sparse/KokkosSparse_sptrsv_supernode.cpp index b77f0b1d07..7ddd6957a9 100644 --- a/perf_test/sparse/KokkosSparse_sptrsv_supernode.cpp +++ b/perf_test/sparse/KokkosSparse_sptrsv_supernode.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "Kokkos_Random.hpp" #include "KokkosSparse_Utils.hpp" diff --git a/perf_test/sparse/spmv/ArmPL_SPMV.hpp b/perf_test/sparse/spmv/ArmPL_SPMV.hpp index 4656fec235..f8b24ac7d8 100644 --- a/perf_test/sparse/spmv/ArmPL_SPMV.hpp +++ b/perf_test/sparse/spmv/ArmPL_SPMV.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Luc Berger-Vergiat (lberge@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef ARMPL_SPMV_HPP_ #define ARMPL_SPMV_HPP_ diff --git a/perf_test/sparse/spmv/CuSparse_SPMV.hpp b/perf_test/sparse/spmv/CuSparse_SPMV.hpp index 878719c9b1..e16ca842bc 100644 --- a/perf_test/sparse/spmv/CuSparse_SPMV.hpp +++ b/perf_test/sparse/spmv/CuSparse_SPMV.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef CUSPARSE_SPMV_HPP_ #define CUSPARSE_SPMV_HPP_ diff --git a/perf_test/sparse/spmv/KokkosKernels_SPMV.hpp b/perf_test/sparse/spmv/KokkosKernels_SPMV.hpp index a54ef17743..71d13bc60a 100644 --- a/perf_test/sparse/spmv/KokkosKernels_SPMV.hpp +++ b/perf_test/sparse/spmv/KokkosKernels_SPMV.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSKERNELS_SPMV_HPP_ #define KOKKOSKERNELS_SPMV_HPP_ diff --git a/perf_test/sparse/spmv/KokkosKernels_spmv_data.hpp b/perf_test/sparse/spmv/KokkosKernels_spmv_data.hpp index 38a9751e6f..927ea77173 100644 --- a/perf_test/sparse/spmv/KokkosKernels_spmv_data.hpp +++ b/perf_test/sparse/spmv/KokkosKernels_spmv_data.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Luc Berger-Vergiat (lberge@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSKERNELS_SPMV_DATA_HPP_ #define KOKKOSKERNELS_SPMV_DATA_HPP_ diff --git a/perf_test/sparse/spmv/Kokkos_SPMV.hpp b/perf_test/sparse/spmv/Kokkos_SPMV.hpp index 8eefd363c9..a79e49b764 100644 --- a/perf_test/sparse/spmv/Kokkos_SPMV.hpp +++ b/perf_test/sparse/spmv/Kokkos_SPMV.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_SPMV_HPP_ #define KOKKOS_SPMV_HPP_ diff --git a/perf_test/sparse/spmv/Kokkos_SPMV_Inspector.hpp b/perf_test/sparse/spmv/Kokkos_SPMV_Inspector.hpp index 8ff2e0c7e5..14ab6f8ebe 100644 --- a/perf_test/sparse/spmv/Kokkos_SPMV_Inspector.hpp +++ b/perf_test/sparse/spmv/Kokkos_SPMV_Inspector.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_SPMV_INSPECTOR_HPP_ #define KOKKOS_SPMV_INSPECTOR_HPP_ diff --git a/perf_test/sparse/spmv/MKL_SPMV.hpp b/perf_test/sparse/spmv/MKL_SPMV.hpp index a1780a29b7..cf79f12bd9 100644 --- a/perf_test/sparse/spmv/MKL_SPMV.hpp +++ b/perf_test/sparse/spmv/MKL_SPMV.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef MKL_SPMV_HPP_ #define MKL_SPMV_HPP_ diff --git a/perf_test/sparse/spmv/OpenMPDynamic_SPMV.hpp b/perf_test/sparse/spmv/OpenMPDynamic_SPMV.hpp index 652cdf2e63..873a42032c 100644 --- a/perf_test/sparse/spmv/OpenMPDynamic_SPMV.hpp +++ b/perf_test/sparse/spmv/OpenMPDynamic_SPMV.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef OPENMP_DYNAMIC_SPMV_HPP_ #define OPENMP_DYNAMIC_SPMV_HPP_ diff --git a/perf_test/sparse/spmv/OpenMPSmartStatic_SPMV.cpp b/perf_test/sparse/spmv/OpenMPSmartStatic_SPMV.cpp index feffd55be5..711981ba2d 100644 --- a/perf_test/sparse/spmv/OpenMPSmartStatic_SPMV.cpp +++ b/perf_test/sparse/spmv/OpenMPSmartStatic_SPMV.cpp @@ -1,45 +1,17 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ int* __restrict__ threadStarts; diff --git a/perf_test/sparse/spmv/OpenMPSmartStatic_SPMV.hpp b/perf_test/sparse/spmv/OpenMPSmartStatic_SPMV.hpp index 9d126be2c1..42ab400f09 100644 --- a/perf_test/sparse/spmv/OpenMPSmartStatic_SPMV.hpp +++ b/perf_test/sparse/spmv/OpenMPSmartStatic_SPMV.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef OPENMP_SMART_STATIC_SPMV_HPP_ #define OPENMP_SMART_STATIC_SPMV_HPP_ diff --git a/perf_test/sparse/spmv/OpenMPStatic_SPMV.hpp b/perf_test/sparse/spmv/OpenMPStatic_SPMV.hpp index b6dd6eeb3e..e977c7e7a7 100644 --- a/perf_test/sparse/spmv/OpenMPStatic_SPMV.hpp +++ b/perf_test/sparse/spmv/OpenMPStatic_SPMV.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef OPENMP_STATIC_SPMV_HPP_ #define OPENMP_STATIC_SPMV_HPP_ diff --git a/perf_test/sparse/spmv/matrix_market.hpp b/perf_test/sparse/spmv/matrix_market.hpp index 9d675e5f47..6273e3b7b9 100644 --- a/perf_test/sparse/spmv/matrix_market.hpp +++ b/perf_test/sparse/spmv/matrix_market.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef MATRIX_MARKET_HPP_ #define MATRIX_MARKET_HPP_ diff --git a/perf_test/test_crsmatrix.cpp b/perf_test/test_crsmatrix.cpp index dc9dc8588d..18f4eff9fe 100644 --- a/perf_test/test_crsmatrix.cpp +++ b/perf_test/test_crsmatrix.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/perf_test/test_mv.cpp b/perf_test/test_mv.cpp index 298909fb34..199db0f47a 100644 --- a/perf_test/test_mv.cpp +++ b/perf_test/test_mv.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/sparse/impl/KokkosSparse_bspgemm_impl.hpp b/sparse/impl/KokkosSparse_bspgemm_impl.hpp index 7b003229ab..0c97af0b89 100644 --- a/sparse/impl/KokkosSparse_bspgemm_impl.hpp +++ b/sparse/impl/KokkosSparse_bspgemm_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSBSPGEMMIMPL_HPP #define _KOKKOSBSPGEMMIMPL_HPP diff --git a/sparse/impl/KokkosSparse_bspgemm_impl_def.hpp b/sparse/impl/KokkosSparse_bspgemm_impl_def.hpp index 36729f39ca..e51b275e7e 100644 --- a/sparse/impl/KokkosSparse_bspgemm_impl_def.hpp +++ b/sparse/impl/KokkosSparse_bspgemm_impl_def.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ namespace KokkosSparse { diff --git a/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp b/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp index 22c6391d99..6eb9044733 100644 --- a/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp +++ b/sparse/impl/KokkosSparse_bspgemm_impl_kkmem.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define HASHSCALAR 107 diff --git a/sparse/impl/KokkosSparse_bspgemm_impl_seq.hpp b/sparse/impl/KokkosSparse_bspgemm_impl_seq.hpp index 312ba22f8a..3acd179abd 100644 --- a/sparse/impl/KokkosSparse_bspgemm_impl_seq.hpp +++ b/sparse/impl/KokkosSparse_bspgemm_impl_seq.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_BSPGEMM_DEBUG_HPP_ #define KOKKOSSPARSE_BSPGEMM_DEBUG_HPP_ #include "KokkosKernels_helpers.hpp" diff --git a/sparse/impl/KokkosSparse_bspgemm_impl_speed.hpp b/sparse/impl/KokkosSparse_bspgemm_impl_speed.hpp index 372e5d10dd..bc1b378558 100644 --- a/sparse/impl/KokkosSparse_bspgemm_impl_speed.hpp +++ b/sparse/impl/KokkosSparse_bspgemm_impl_speed.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosKernels_Utils.hpp" diff --git a/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp b/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp index a493d50b9a..79ca6c778d 100644 --- a/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp +++ b/sparse/impl/KokkosSparse_bspgemm_numeric_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_BSPGEMM_NUMERIC_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_BSPGEMM_NUMERIC_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp b/sparse/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp index 3938b67ec6..ec6cb6f02d 100644 --- a/sparse/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp +++ b/sparse/impl/KokkosSparse_cluster_gauss_seidel_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSCGSIMP_HPP #define _KOKKOSCGSIMP_HPP diff --git a/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp b/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp index c67757a65f..75f827a84d 100644 --- a/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp +++ b/sparse/impl/KokkosSparse_gauss_seidel_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSGSIMP_HPP #define _KOKKOSGSIMP_HPP diff --git a/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp b/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp index 6d50bc9fff..2f6bb4d9b4 100644 --- a/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp +++ b/sparse/impl/KokkosSparse_gauss_seidel_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_GAUSS_SEIDEL_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_GAUSS_SEIDEL_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_getDiagCopyWithOffsets_impl.hpp b/sparse/impl/KokkosSparse_getDiagCopyWithOffsets_impl.hpp index f3c6c6bb67..b1ec07e768 100644 --- a/sparse/impl/KokkosSparse_getDiagCopyWithOffsets_impl.hpp +++ b/sparse/impl/KokkosSparse_getDiagCopyWithOffsets_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_SPARSE_IMPL_GETDIAGCOPYWITHOFFSETS_HPP_ #define KOKKOS_SPARSE_IMPL_GETDIAGCOPYWITHOFFSETS_HPP_ diff --git a/sparse/impl/KokkosSparse_mdf_impl.hpp b/sparse/impl/KokkosSparse_mdf_impl.hpp index 3a43766b96..feee2d765b 100644 --- a/sparse/impl/KokkosSparse_mdf_impl.hpp +++ b/sparse/impl/KokkosSparse_mdf_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_MDF_IMPL_HPP_ #define KOKKOSSPARSE_MDF_IMPL_HPP_ diff --git a/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp b/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp index d381b9e254..46c1ad13d8 100644 --- a/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp +++ b/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_PAR_ILUT_NUMERIC_HPP_ #define KOKKOSSPARSE_IMPL_PAR_ILUT_NUMERIC_HPP_ diff --git a/sparse/impl/KokkosSparse_par_ilut_numeric_spec.hpp b/sparse/impl/KokkosSparse_par_ilut_numeric_spec.hpp index 0fa811df3e..72130a07ad 100644 --- a/sparse/impl/KokkosSparse_par_ilut_numeric_spec.hpp +++ b/sparse/impl/KokkosSparse_par_ilut_numeric_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_PAR_ILUT_NUMERIC_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_PAR_ILUT_NUMERIC_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_par_ilut_symbolic_impl.hpp b/sparse/impl/KokkosSparse_par_ilut_symbolic_impl.hpp index e7b306b5f1..573f550832 100644 --- a/sparse/impl/KokkosSparse_par_ilut_symbolic_impl.hpp +++ b/sparse/impl/KokkosSparse_par_ilut_symbolic_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_PAR_ILUT_SYMBOLIC_HPP_ #define KOKKOSSPARSE_IMPL_PAR_ILUT_SYMBOLIC_HPP_ diff --git a/sparse/impl/KokkosSparse_par_ilut_symbolic_spec.hpp b/sparse/impl/KokkosSparse_par_ilut_symbolic_spec.hpp index f8d521db8f..a27a685a00 100644 --- a/sparse/impl/KokkosSparse_par_ilut_symbolic_spec.hpp +++ b/sparse/impl/KokkosSparse_par_ilut_symbolic_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_PAR_ILUT_SYMBOLIC_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_PAR_ILUT_SYMBOLIC_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_partitioning_impl.hpp b/sparse/impl/KokkosSparse_partitioning_impl.hpp index 033179e721..231c83ba12 100644 --- a/sparse/impl/KokkosSparse_partitioning_impl.hpp +++ b/sparse/impl/KokkosSparse_partitioning_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosKernels_Utils.hpp" #include diff --git a/sparse/impl/KokkosSparse_sor_sequential_impl.hpp b/sparse/impl/KokkosSparse_sor_sequential_impl.hpp index 69aa11186b..11cad03145 100644 --- a/sparse/impl/KokkosSparse_sor_sequential_impl.hpp +++ b/sparse/impl/KokkosSparse_sor_sequential_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SOR_HPP #define KOKKOSSPARSE_IMPL_SOR_HPP diff --git a/sparse/impl/KokkosSparse_spadd_numeric_impl.hpp b/sparse/impl/KokkosSparse_spadd_numeric_impl.hpp index b3008ff716..8e70cd3c3b 100644 --- a/sparse/impl/KokkosSparse_spadd_numeric_impl.hpp +++ b/sparse/impl/KokkosSparse_spadd_numeric_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Brian Kelley (bmkelle@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOS_SPADD_NUMERIC_IMPL_HPP #define _KOKKOS_SPADD_NUMERIC_IMPL_HPP diff --git a/sparse/impl/KokkosSparse_spadd_numeric_spec.hpp b/sparse/impl/KokkosSparse_spadd_numeric_spec.hpp index 7cc93e2715..04fc372100 100644 --- a/sparse/impl/KokkosSparse_spadd_numeric_spec.hpp +++ b/sparse/impl/KokkosSparse_spadd_numeric_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPADD_NUMERIC_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_SPADD_NUMERIC_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_spadd_symbolic_impl.hpp b/sparse/impl/KokkosSparse_spadd_symbolic_impl.hpp index c4ae435f55..62e074ff07 100644 --- a/sparse/impl/KokkosSparse_spadd_symbolic_impl.hpp +++ b/sparse/impl/KokkosSparse_spadd_symbolic_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Brian Kelley (bmkelle@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOS_SPADD_SYMBOLIC_IMPL_HPP #define _KOKKOS_SPADD_SYMBOLIC_IMPL_HPP diff --git a/sparse/impl/KokkosSparse_spadd_symbolic_spec.hpp b/sparse/impl/KokkosSparse_spadd_symbolic_spec.hpp index 7a48999e6a..13f70abfd0 100644 --- a/sparse/impl/KokkosSparse_spadd_symbolic_spec.hpp +++ b/sparse/impl/KokkosSparse_spadd_symbolic_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPADD_SYMBOLIC_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_SPADD_SYMBOLIC_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_spgemm_imp_outer.hpp b/sparse/impl/KokkosSparse_spgemm_imp_outer.hpp index 8a390cc9a4..c19f93168e 100644 --- a/sparse/impl/KokkosSparse_spgemm_imp_outer.hpp +++ b/sparse/impl/KokkosSparse_spgemm_imp_outer.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER - */ #if defined(KOKKOS_ENABLE_OPENMP) #ifdef KOKKOSKERNELS_HAVE_OUTER diff --git a/sparse/impl/KokkosSparse_spgemm_impl.hpp b/sparse/impl/KokkosSparse_spgemm_impl.hpp index e0b3f7b143..2e0a0660ea 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSSPGEMMIMPL_HPP #define _KOKKOSSPGEMMIMPL_HPP diff --git a/sparse/impl/KokkosSparse_spgemm_impl_color.hpp b/sparse/impl/KokkosSparse_spgemm_impl_color.hpp index f7c1e5430a..fe6b79d812 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_color.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_color.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosGraph_Distance2Color.hpp" diff --git a/sparse/impl/KokkosSparse_spgemm_impl_compression.hpp b/sparse/impl/KokkosSparse_spgemm_impl_compression.hpp index 3babad44d2..1e61a66c84 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_compression.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_compression.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ namespace KokkosSparse { namespace Impl { diff --git a/sparse/impl/KokkosSparse_spgemm_impl_def.hpp b/sparse/impl/KokkosSparse_spgemm_impl_def.hpp index 94b16680a8..a420a81c90 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_def.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_def.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ namespace KokkosSparse { diff --git a/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp b/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp index 6683fb0bc4..0a3113e5e4 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_kkmem.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define HASHSCALAR 107 diff --git a/sparse/impl/KokkosSparse_spgemm_impl_memaccess.hpp b/sparse/impl/KokkosSparse_spgemm_impl_memaccess.hpp index 29a9b5b870..51d151e4fb 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_memaccess.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_memaccess.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ namespace KokkosSparse { namespace Impl { diff --git a/sparse/impl/KokkosSparse_spgemm_impl_seq.hpp b/sparse/impl/KokkosSparse_spgemm_impl_seq.hpp index 32492482fe..b37328aa70 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_seq.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_seq.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_SPGEMM_DEBUG_HPP_ #define KOKKOSSPARSE_SPGEMM_DEBUG_HPP_ #include "KokkosKernels_helpers.hpp" diff --git a/sparse/impl/KokkosSparse_spgemm_impl_speed.hpp b/sparse/impl/KokkosSparse_spgemm_impl_speed.hpp index 847d765cb4..942e1be7bf 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_speed.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_speed.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosKernels_Utils.hpp" diff --git a/sparse/impl/KokkosSparse_spgemm_impl_symbolic.hpp b/sparse/impl/KokkosSparse_spgemm_impl_symbolic.hpp index 9ee1cb2673..225525002c 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_symbolic.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_symbolic.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosKernels_BitUtils.hpp" #include namespace KokkosSparse { diff --git a/sparse/impl/KokkosSparse_spgemm_impl_triangle.hpp b/sparse/impl/KokkosSparse_spgemm_impl_triangle.hpp index beb80cab8a..ef03e0b786 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_triangle.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_triangle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosKernels_BitUtils.hpp" diff --git a/sparse/impl/KokkosSparse_spgemm_impl_triangle_no_compression.hpp b/sparse/impl/KokkosSparse_spgemm_impl_triangle_no_compression.hpp index 7e36932b25..14dc2b3a00 100644 --- a/sparse/impl/KokkosSparse_spgemm_impl_triangle_no_compression.hpp +++ b/sparse/impl/KokkosSparse_spgemm_impl_triangle_no_compression.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosKernels_BitUtils.hpp" diff --git a/sparse/impl/KokkosSparse_spgemm_jacobi_denseacc_impl.hpp b/sparse/impl/KokkosSparse_spgemm_jacobi_denseacc_impl.hpp index a954efd905..a4cb6c5320 100644 --- a/sparse/impl/KokkosSparse_spgemm_jacobi_denseacc_impl.hpp +++ b/sparse/impl/KokkosSparse_spgemm_jacobi_denseacc_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Seher Acer (sacer@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosKernels_Utils.hpp" diff --git a/sparse/impl/KokkosSparse_spgemm_jacobi_seq_impl.hpp b/sparse/impl/KokkosSparse_spgemm_jacobi_seq_impl.hpp index 19943e5a0b..db2979ea02 100644 --- a/sparse/impl/KokkosSparse_spgemm_jacobi_seq_impl.hpp +++ b/sparse/impl/KokkosSparse_spgemm_jacobi_seq_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Seher Acer (sacer@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_SPGEMM_JACOBI_DEBUG_HPP_ #define KOKKOSSPARSE_SPGEMM_JACOBI_DEBUG_HPP_ #include "KokkosKernels_helpers.hpp" diff --git a/sparse/impl/KokkosSparse_spgemm_jacobi_sparseacc_impl.hpp b/sparse/impl/KokkosSparse_spgemm_jacobi_sparseacc_impl.hpp index fb0ccd2353..f638b76b9b 100644 --- a/sparse/impl/KokkosSparse_spgemm_jacobi_sparseacc_impl.hpp +++ b/sparse/impl/KokkosSparse_spgemm_jacobi_sparseacc_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Seher Acer (sacer@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define HASHSCALAR 107 diff --git a/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp b/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp index 2a2de2815f..5be268a4ef 100644 --- a/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp +++ b/sparse/impl/KokkosSparse_spgemm_jacobi_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Seher Acer (sacer@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPGEMM_JACOBI_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_SPGEMM_JACOBI_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp b/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp index 359fbf5fc0..21faea977c 100644 --- a/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp +++ b/sparse/impl/KokkosSparse_spgemm_numeric_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPGEMM_NUMERIC_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_SPGEMM_NUMERIC_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp b/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp index 76b6bd2365..671017133a 100644 --- a/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp +++ b/sparse/impl/KokkosSparse_spgemm_symbolic_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPGEMM_SYMBOLIC_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_SPGEMM_SYMBOLIC_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_spiluk_numeric_impl.hpp b/sparse/impl/KokkosSparse_spiluk_numeric_impl.hpp index 4af8606dfb..aebfa76bb5 100644 --- a/sparse/impl/KokkosSparse_spiluk_numeric_impl.hpp +++ b/sparse/impl/KokkosSparse_spiluk_numeric_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPILUK_NUMERIC_HPP_ #define KOKKOSSPARSE_IMPL_SPILUK_NUMERIC_HPP_ diff --git a/sparse/impl/KokkosSparse_spiluk_numeric_spec.hpp b/sparse/impl/KokkosSparse_spiluk_numeric_spec.hpp index 8f5847fd6a..ec711a3b17 100644 --- a/sparse/impl/KokkosSparse_spiluk_numeric_spec.hpp +++ b/sparse/impl/KokkosSparse_spiluk_numeric_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPILUK_NUMERIC_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_SPILUK_NUMERIC_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp b/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp index 99d0ab1fe8..5926aa872e 100644 --- a/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp +++ b/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPILUK_SYMBOLIC_HPP_ #define KOKKOSSPARSE_IMPL_SPILUK_SYMBOLIC_HPP_ diff --git a/sparse/impl/KokkosSparse_spiluk_symbolic_spec.hpp b/sparse/impl/KokkosSparse_spiluk_symbolic_spec.hpp index 658d288a48..86f018886c 100644 --- a/sparse/impl/KokkosSparse_spiluk_symbolic_spec.hpp +++ b/sparse/impl/KokkosSparse_spiluk_symbolic_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPILUK_SYMBOLIC_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_SPILUK_SYMBOLIC_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp b/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp index a0bf8c96ec..1cd4241eae 100644 --- a/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp +++ b/sparse/impl/KokkosSparse_spmv_bsrmatrix_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPMV_BSRMATRIX_IMPL_HPP_ #define KOKKOSSPARSE_IMPL_SPMV_BSRMATRIX_IMPL_HPP_ diff --git a/sparse/impl/KokkosSparse_spmv_bsrmatrix_spec.hpp b/sparse/impl/KokkosSparse_spmv_bsrmatrix_spec.hpp index 52bbb2f839..13b88b3271 100644 --- a/sparse/impl/KokkosSparse_spmv_bsrmatrix_spec.hpp +++ b/sparse/impl/KokkosSparse_spmv_bsrmatrix_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPMV_BSRMATRIX_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_SPMV_BSRMATRIX_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_spmv_impl.hpp b/sparse/impl/KokkosSparse_spmv_impl.hpp index 322ac4da22..d3e495c426 100644 --- a/sparse/impl/KokkosSparse_spmv_impl.hpp +++ b/sparse/impl/KokkosSparse_spmv_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPMV_DEF_HPP_ #define KOKKOSSPARSE_IMPL_SPMV_DEF_HPP_ diff --git a/sparse/impl/KokkosSparse_spmv_impl_omp.hpp b/sparse/impl/KokkosSparse_spmv_impl_omp.hpp index 93af1b82dd..127286b3b4 100644 --- a/sparse/impl/KokkosSparse_spmv_impl_omp.hpp +++ b/sparse/impl/KokkosSparse_spmv_impl_omp.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ namespace KokkosSparse { namespace Impl { diff --git a/sparse/impl/KokkosSparse_spmv_spec.hpp b/sparse/impl/KokkosSparse_spmv_spec.hpp index fda6839c8f..d196265b23 100644 --- a/sparse/impl/KokkosSparse_spmv_spec.hpp +++ b/sparse/impl/KokkosSparse_spmv_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPMV_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_SPMV_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_spmv_struct_impl.hpp b/sparse/impl/KokkosSparse_spmv_struct_impl.hpp index 6949a86866..2831cb8861 100644 --- a/sparse/impl/KokkosSparse_spmv_struct_impl.hpp +++ b/sparse/impl/KokkosSparse_spmv_struct_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPMV_STRUCT_DEF_HPP_ #define KOKKOSSPARSE_IMPL_SPMV_STRUCT_DEF_HPP_ diff --git a/sparse/impl/KokkosSparse_spmv_struct_spec.hpp b/sparse/impl/KokkosSparse_spmv_struct_spec.hpp index 28892ef8b7..fde9bf4dcf 100644 --- a/sparse/impl/KokkosSparse_spmv_struct_spec.hpp +++ b/sparse/impl/KokkosSparse_spmv_struct_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPMV_STRUCT_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_SPMV_STRUCT_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp index a45d98eea9..7090c4f948 100644 --- a/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp +++ b/sparse/impl/KokkosSparse_sptrsv_cuSPARSE_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSSPTRSVCUSPARSE_HPP #define _KOKKOSSPTRSVCUSPARSE_HPP diff --git a/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp index 0e3ed0235a..4cff646325 100644 --- a/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp +++ b/sparse/impl/KokkosSparse_sptrsv_solve_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPTRSV_SOLVE_HPP_ #define KOKKOSSPARSE_IMPL_SPTRSV_SOLVE_HPP_ diff --git a/sparse/impl/KokkosSparse_sptrsv_solve_spec.hpp b/sparse/impl/KokkosSparse_sptrsv_solve_spec.hpp index bf7b8afea9..fce10e3acd 100644 --- a/sparse/impl/KokkosSparse_sptrsv_solve_spec.hpp +++ b/sparse/impl/KokkosSparse_sptrsv_solve_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPTRSV_SOLVE_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_SPTRSV_SOLVE_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_sptrsv_symbolic_impl.hpp b/sparse/impl/KokkosSparse_sptrsv_symbolic_impl.hpp index 3a6f988835..eed6d3129a 100644 --- a/sparse/impl/KokkosSparse_sptrsv_symbolic_impl.hpp +++ b/sparse/impl/KokkosSparse_sptrsv_symbolic_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPTRSV_SYMBOLIC_HPP_ #define KOKKOSSPARSE_IMPL_SPTRSV_SYMBOLIC_HPP_ diff --git a/sparse/impl/KokkosSparse_sptrsv_symbolic_spec.hpp b/sparse/impl/KokkosSparse_sptrsv_symbolic_spec.hpp index 41a750da8e..f13c25dec6 100644 --- a/sparse/impl/KokkosSparse_sptrsv_symbolic_spec.hpp +++ b/sparse/impl/KokkosSparse_sptrsv_symbolic_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_SPTRSV_SYMBOLIC_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_SPTRSV_SYMBOLIC_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_trsv_impl.hpp b/sparse/impl/KokkosSparse_trsv_impl.hpp index bff037c228..2e2a706745 100644 --- a/sparse/impl/KokkosSparse_trsv_impl.hpp +++ b/sparse/impl/KokkosSparse_trsv_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_TRSM_HPP_ #define KOKKOSSPARSE_IMPL_TRSM_HPP_ diff --git a/sparse/impl/KokkosSparse_trsv_spec.hpp b/sparse/impl/KokkosSparse_trsv_spec.hpp index 6fe478c875..ff4a6d90cd 100644 --- a/sparse/impl/KokkosSparse_trsv_spec.hpp +++ b/sparse/impl/KokkosSparse_trsv_spec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_IMPL_TRSV_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_TRSV_SPEC_HPP_ diff --git a/sparse/impl/KokkosSparse_twostage_gauss_seidel_impl.hpp b/sparse/impl/KokkosSparse_twostage_gauss_seidel_impl.hpp index d779ff3e96..a64d7f76a0 100644 --- a/sparse/impl/KokkosSparse_twostage_gauss_seidel_impl.hpp +++ b/sparse/impl/KokkosSparse_twostage_gauss_seidel_impl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOS_TWOSTAGE_GS_IMP_HPP #define _KOKKOS_TWOSTAGE_GS_IMP_HPP diff --git a/sparse/src/KokkosKernels_Controls.hpp b/sparse/src/KokkosKernels_Controls.hpp index ec809da194..c600dad89a 100644 --- a/sparse/src/KokkosKernels_Controls.hpp +++ b/sparse/src/KokkosKernels_Controls.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSKERNEL_CONTROLS_HPP #define _KOKKOSKERNEL_CONTROLS_HPP diff --git a/sparse/src/KokkosKernels_Handle.hpp b/sparse/src/KokkosKernels_Handle.hpp index efd8ac3faf..12f3614a07 100644 --- a/sparse/src/KokkosKernels_Handle.hpp +++ b/sparse/src/KokkosKernels_Handle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include "KokkosGraph_Distance1ColorHandle.hpp" #include "KokkosGraph_Distance2ColorHandle.hpp" diff --git a/sparse/src/KokkosSparse.hpp b/sparse/src/KokkosSparse.hpp index 9be6aa9bc0..3f922a5a45 100644 --- a/sparse/src/KokkosSparse.hpp +++ b/sparse/src/KokkosSparse.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file KokkosSparse.hpp /// \brief Public interface to local computational kernels on sparse /// matrices. diff --git a/sparse/src/KokkosSparse_BsrMatrix.hpp b/sparse/src/KokkosSparse_BsrMatrix.hpp index 12f4dff651..f27143039c 100644 --- a/sparse/src/KokkosSparse_BsrMatrix.hpp +++ b/sparse/src/KokkosSparse_BsrMatrix.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Luc Berger-Vergiat (lberge@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file Kokkos_Sparse_BsrMatrix.hpp /// \brief Local sparse matrix interface diff --git a/sparse/src/KokkosSparse_CcsMatrix.hpp b/sparse/src/KokkosSparse_CcsMatrix.hpp index c2ae9c806e..5159f68d87 100644 --- a/sparse/src/KokkosSparse_CcsMatrix.hpp +++ b/sparse/src/KokkosSparse_CcsMatrix.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file KokkosSparse_CcsMatrix.hpp /// \brief Local sparse matrix interface diff --git a/sparse/src/KokkosSparse_CrsMatrix.hpp b/sparse/src/KokkosSparse_CrsMatrix.hpp index dda08faba9..e13f332ff1 100644 --- a/sparse/src/KokkosSparse_CrsMatrix.hpp +++ b/sparse/src/KokkosSparse_CrsMatrix.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file KokkosSparse_CrsMatrix.hpp /// \brief Local sparse matrix interface diff --git a/sparse/src/KokkosSparse_IOUtils.hpp b/sparse/src/KokkosSparse_IOUtils.hpp index fa6d08f960..d957cf4949 100644 --- a/sparse/src/KokkosSparse_IOUtils.hpp +++ b/sparse/src/KokkosSparse_IOUtils.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSSPARSE_IOUTILS_HPP #define _KOKKOSSPARSE_IOUTILS_HPP diff --git a/sparse/src/KokkosSparse_MatrixPrec.hpp b/sparse/src/KokkosSparse_MatrixPrec.hpp index 1686cc0563..952036b7c7 100644 --- a/sparse/src/KokkosSparse_MatrixPrec.hpp +++ b/sparse/src/KokkosSparse_MatrixPrec.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Jennifer Loe (jloe@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// @file KokkosKernels_MatrixPrec.hpp #ifndef KK_MATRIX_PREC_HPP diff --git a/sparse/src/KokkosSparse_OrdinalTraits.hpp b/sparse/src/KokkosSparse_OrdinalTraits.hpp index 21d44cf57c..8bf64a014f 100644 --- a/sparse/src/KokkosSparse_OrdinalTraits.hpp +++ b/sparse/src/KokkosSparse_OrdinalTraits.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_SPARSE_ORDINALTRAITS_HPP_ #define KOKKOS_SPARSE_ORDINALTRAITS_HPP_ diff --git a/sparse/src/KokkosSparse_Preconditioner.hpp b/sparse/src/KokkosSparse_Preconditioner.hpp index 999924c9c0..1c32d5eeaa 100644 --- a/sparse/src/KokkosSparse_Preconditioner.hpp +++ b/sparse/src/KokkosSparse_Preconditioner.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Jennifer Loe (jloe@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// @file KokkosKernels_Preconditioner.hpp // #ifndef KK_PREC_HPP diff --git a/sparse/src/KokkosSparse_SortCrs.hpp b/sparse/src/KokkosSparse_SortCrs.hpp index 68de6b5f7c..d04ddb5a30 100644 --- a/sparse/src/KokkosSparse_SortCrs.hpp +++ b/sparse/src/KokkosSparse_SortCrs.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSSPARSE_SORTCRS_HPP #define _KOKKOSSPARSE_SORTCRS_HPP diff --git a/sparse/src/KokkosSparse_Utils.hpp b/sparse/src/KokkosSparse_Utils.hpp index f01e238d5d..a0b37be622 100644 --- a/sparse/src/KokkosSparse_Utils.hpp +++ b/sparse/src/KokkosSparse_Utils.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSKERNELS_SPARSEUTILS_HPP #define _KOKKOSKERNELS_SPARSEUTILS_HPP #include diff --git a/sparse/src/KokkosSparse_Utils_cusparse.hpp b/sparse/src/KokkosSparse_Utils_cusparse.hpp index fee413d0ce..65f6ac9689 100644 --- a/sparse/src/KokkosSparse_Utils_cusparse.hpp +++ b/sparse/src/KokkosSparse_Utils_cusparse.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSKERNELS_SPARSEUTILS_CUSPARSE_HPP #define _KOKKOSKERNELS_SPARSEUTILS_CUSPARSE_HPP diff --git a/sparse/src/KokkosSparse_Utils_mkl.hpp b/sparse/src/KokkosSparse_Utils_mkl.hpp index 3b1e28fd84..0afa75de0a 100644 --- a/sparse/src/KokkosSparse_Utils_mkl.hpp +++ b/sparse/src/KokkosSparse_Utils_mkl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSKERNELS_SPARSEUTILS_MKL_HPP #define _KOKKOSKERNELS_SPARSEUTILS_MKL_HPP diff --git a/sparse/src/KokkosSparse_Utils_rocsparse.hpp b/sparse/src/KokkosSparse_Utils_rocsparse.hpp index 780cb41189..dd479610ca 100644 --- a/sparse/src/KokkosSparse_Utils_rocsparse.hpp +++ b/sparse/src/KokkosSparse_Utils_rocsparse.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOSKERNELS_SPARSEUTILS_ROCSPARSE_HPP #define _KOKKOSKERNELS_SPARSEUTILS_ROCSPARSE_HPP diff --git a/sparse/src/KokkosSparse_ccs2crs.hpp b/sparse/src/KokkosSparse_ccs2crs.hpp index ae42592b1e..50fec77411 100644 --- a/sparse/src/KokkosSparse_ccs2crs.hpp +++ b/sparse/src/KokkosSparse_ccs2crs.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosKernels_Utils.hpp" #include "KokkosSparse_CcsMatrix.hpp" diff --git a/sparse/src/KokkosSparse_crs2ccs.hpp b/sparse/src/KokkosSparse_crs2ccs.hpp index 3fd165ae47..9def73b5db 100644 --- a/sparse/src/KokkosSparse_crs2ccs.hpp +++ b/sparse/src/KokkosSparse_crs2ccs.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosKernels_Utils.hpp" #include "KokkosSparse_CcsMatrix.hpp" diff --git a/sparse/src/KokkosSparse_findRelOffset.hpp b/sparse/src/KokkosSparse_findRelOffset.hpp index 3eb1100821..3f806b411e 100644 --- a/sparse/src/KokkosSparse_findRelOffset.hpp +++ b/sparse/src/KokkosSparse_findRelOffset.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOS_SPARSE_FINDRELOFFSET_HPP #define KOKKOS_SPARSE_FINDRELOFFSET_HPP diff --git a/sparse/src/KokkosSparse_gauss_seidel.hpp b/sparse/src/KokkosSparse_gauss_seidel.hpp index 38e028a9a7..89654243cc 100644 --- a/sparse/src/KokkosSparse_gauss_seidel.hpp +++ b/sparse/src/KokkosSparse_gauss_seidel.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOS_GAUSSSEIDEL_HPP #define _KOKKOS_GAUSSSEIDEL_HPP diff --git a/sparse/src/KokkosSparse_gauss_seidel_handle.hpp b/sparse/src/KokkosSparse_gauss_seidel_handle.hpp index 179aaa323c..412985df72 100644 --- a/sparse/src/KokkosSparse_gauss_seidel_handle.hpp +++ b/sparse/src/KokkosSparse_gauss_seidel_handle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/sparse/src/KokkosSparse_getDiagCopy.hpp b/sparse/src/KokkosSparse_getDiagCopy.hpp index c1d45b13ec..c652b75ccd 100644 --- a/sparse/src/KokkosSparse_getDiagCopy.hpp +++ b/sparse/src/KokkosSparse_getDiagCopy.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file Kokkos_Sparse_getDiagCopy.hpp /// \brief Get a copy of the diagonal entries of a KokkosSparse::CrsMatrix. diff --git a/sparse/src/KokkosSparse_mdf.hpp b/sparse/src/KokkosSparse_mdf.hpp index eba36d4372..33229b6cdb 100644 --- a/sparse/src/KokkosSparse_mdf.hpp +++ b/sparse/src/KokkosSparse_mdf.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file KokkosSparse_spiluk.hpp /// \brief Parallel Minimum Discarded Fill method diff --git a/sparse/src/KokkosSparse_mdf_handle.hpp b/sparse/src/KokkosSparse_mdf_handle.hpp index 236c321e55..eb44657337 100644 --- a/sparse/src/KokkosSparse_mdf_handle.hpp +++ b/sparse/src/KokkosSparse_mdf_handle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file KokkosSparse_spiluk.hpp /// \brief Parallel Minimum Discarded Fill method diff --git a/sparse/src/KokkosSparse_par_ilut.hpp b/sparse/src/KokkosSparse_par_ilut.hpp index 43d80be50b..ca46976366 100644 --- a/sparse/src/KokkosSparse_par_ilut.hpp +++ b/sparse/src/KokkosSparse_par_ilut.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file KokkosSparse_par_ilut.hpp /// \brief Parallel threshold incomplete LU factorization ILU(t) diff --git a/sparse/src/KokkosSparse_par_ilut_handle.hpp b/sparse/src/KokkosSparse_par_ilut_handle.hpp index 714651c09c..04f546cdd6 100644 --- a/sparse/src/KokkosSparse_par_ilut_handle.hpp +++ b/sparse/src/KokkosSparse_par_ilut_handle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/sparse/src/KokkosSparse_spadd.hpp b/sparse/src/KokkosSparse_spadd.hpp index 50c862f27c..74efed66bc 100644 --- a/sparse/src/KokkosSparse_spadd.hpp +++ b/sparse/src/KokkosSparse_spadd.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOS_SPADD_HPP #define _KOKKOS_SPADD_HPP diff --git a/sparse/src/KokkosSparse_spadd_handle.hpp b/sparse/src/KokkosSparse_spadd_handle.hpp index 917b1038a6..6d726e3da6 100644 --- a/sparse/src/KokkosSparse_spadd_handle.hpp +++ b/sparse/src/KokkosSparse_spadd_handle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/sparse/src/KokkosSparse_spgemm.hpp b/sparse/src/KokkosSparse_spgemm.hpp index 0fdf6bc646..0cac811a4c 100644 --- a/sparse/src/KokkosSparse_spgemm.hpp +++ b/sparse/src/KokkosSparse_spgemm.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOS_SPGEMM_HPP #define _KOKKOS_SPGEMM_HPP diff --git a/sparse/src/KokkosSparse_spgemm_handle.hpp b/sparse/src/KokkosSparse_spgemm_handle.hpp index 8d9ebc9ed7..fdcceb2d93 100644 --- a/sparse/src/KokkosSparse_spgemm_handle.hpp +++ b/sparse/src/KokkosSparse_spgemm_handle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _SPGEMMHANDLE_HPP #define _SPGEMMHANDLE_HPP diff --git a/sparse/src/KokkosSparse_spgemm_jacobi.hpp b/sparse/src/KokkosSparse_spgemm_jacobi.hpp index 35f6fb7920..a33254dc24 100644 --- a/sparse/src/KokkosSparse_spgemm_jacobi.hpp +++ b/sparse/src/KokkosSparse_spgemm_jacobi.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Seher Acer (sacer@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOS_SPGEMM_JACOBI_HPP #define _KOKKOS_SPGEMM_JACOBI_HPP diff --git a/sparse/src/KokkosSparse_spgemm_numeric.hpp b/sparse/src/KokkosSparse_spgemm_numeric.hpp index edb4b006ed..043a01b9f1 100644 --- a/sparse/src/KokkosSparse_spgemm_numeric.hpp +++ b/sparse/src/KokkosSparse_spgemm_numeric.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOS_SPGEMM_NUMERIC_HPP #define _KOKKOS_SPGEMM_NUMERIC_HPP diff --git a/sparse/src/KokkosSparse_spgemm_symbolic.hpp b/sparse/src/KokkosSparse_spgemm_symbolic.hpp index a46c4161f1..ff37199699 100644 --- a/sparse/src/KokkosSparse_spgemm_symbolic.hpp +++ b/sparse/src/KokkosSparse_spgemm_symbolic.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef _KOKKOS_SPGEMM_SYMBOLIC_HPP #define _KOKKOS_SPGEMM_SYMBOLIC_HPP diff --git a/sparse/src/KokkosSparse_spiluk.hpp b/sparse/src/KokkosSparse_spiluk.hpp index f1ed7b3e0f..ac2afc066f 100644 --- a/sparse/src/KokkosSparse_spiluk.hpp +++ b/sparse/src/KokkosSparse_spiluk.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file KokkosSparse_spiluk.hpp /// \brief Parallel incomplete LU factorization ILU(k) diff --git a/sparse/src/KokkosSparse_spiluk_handle.hpp b/sparse/src/KokkosSparse_spiluk_handle.hpp index 54cc124474..78c072e72a 100644 --- a/sparse/src/KokkosSparse_spiluk_handle.hpp +++ b/sparse/src/KokkosSparse_spiluk_handle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/sparse/src/KokkosSparse_spmv.hpp b/sparse/src/KokkosSparse_spmv.hpp index a95ae4fe90..0c097b4a43 100644 --- a/sparse/src/KokkosSparse_spmv.hpp +++ b/sparse/src/KokkosSparse_spmv.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file /// \brief Interfaces for the Kokkos sparse-matrix-vector multiply diff --git a/sparse/src/KokkosSparse_sptrsv.hpp b/sparse/src/KokkosSparse_sptrsv.hpp index 861491c9a6..04cb0f5285 100644 --- a/sparse/src/KokkosSparse_sptrsv.hpp +++ b/sparse/src/KokkosSparse_sptrsv.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file KokkosSparse_sptrsv.hpp /// \brief Parallel sparse triangular solve diff --git a/sparse/src/KokkosSparse_sptrsv_cholmod.hpp b/sparse/src/KokkosSparse_sptrsv_cholmod.hpp index 6d354047cf..3d11c858d0 100644 --- a/sparse/src/KokkosSparse_sptrsv_cholmod.hpp +++ b/sparse/src/KokkosSparse_sptrsv_cholmod.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file KokkosSparse_sptrsv.hpp /// \brief Parallel sparse triangular solve diff --git a/sparse/src/KokkosSparse_sptrsv_handle.hpp b/sparse/src/KokkosSparse_sptrsv_handle.hpp index a5aacca361..049ab14b1e 100644 --- a/sparse/src/KokkosSparse_sptrsv_handle.hpp +++ b/sparse/src/KokkosSparse_sptrsv_handle.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/sparse/src/KokkosSparse_sptrsv_superlu.hpp b/sparse/src/KokkosSparse_sptrsv_superlu.hpp index c7c611e104..1ebae78f77 100644 --- a/sparse/src/KokkosSparse_sptrsv_superlu.hpp +++ b/sparse/src/KokkosSparse_sptrsv_superlu.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file KokkosSparse_sptrsv.hpp /// \brief Parallel sparse triangular solve diff --git a/sparse/src/KokkosSparse_sptrsv_supernode.hpp b/sparse/src/KokkosSparse_sptrsv_supernode.hpp index 481bd2cc0a..845efabc57 100644 --- a/sparse/src/KokkosSparse_sptrsv_supernode.hpp +++ b/sparse/src/KokkosSparse_sptrsv_supernode.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file KokkosSparse_sptrsv.hpp /// \brief Parallel sparse triangular solve diff --git a/sparse/src/KokkosSparse_trsv.hpp b/sparse/src/KokkosSparse_trsv.hpp index eda3501ad0..ce970ac370 100644 --- a/sparse/src/KokkosSparse_trsv.hpp +++ b/sparse/src/KokkosSparse_trsv.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file Kokkos_Sparse_trsv.hpp /// \brief Local sparse triangular solve diff --git a/sparse/tpls/KokkosKernels_tpl_handles.cpp b/sparse/tpls/KokkosKernels_tpl_handles.cpp index a856c1cdf3..ad7a8dc307 100644 --- a/sparse/tpls/KokkosKernels_tpl_handles.cpp +++ b/sparse/tpls/KokkosKernels_tpl_handles.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include "KokkosKernels_config.h" #include "KokkosKernels_tpl_handles_def.hpp" diff --git a/sparse/tpls/KokkosKernels_tpl_handles_decl.hpp b/sparse/tpls/KokkosKernels_tpl_handles_decl.hpp index eae0f941d3..a1cd3c97f5 100644 --- a/sparse/tpls/KokkosKernels_tpl_handles_decl.hpp +++ b/sparse/tpls/KokkosKernels_tpl_handles_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSKERNELS_TPL_HANDLES_DECL_HPP_ #define KOKKOSKERNELS_TPL_HANDLES_DECL_HPP_ diff --git a/sparse/tpls/KokkosKernels_tpl_handles_def.hpp b/sparse/tpls/KokkosKernels_tpl_handles_def.hpp index a5187986e5..6c60483cae 100644 --- a/sparse/tpls/KokkosKernels_tpl_handles_def.hpp +++ b/sparse/tpls/KokkosKernels_tpl_handles_def.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSKERNELS_TPL_HANDLES_DEF_HPP_ #define KOKKOSKERNELS_TPL_HANDLES_DEF_HPP_ diff --git a/sparse/tpls/KokkosSparse_gauss_seidel_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_gauss_seidel_tpl_spec_avail.hpp index 1da5b2136b..cad991639b 100644 --- a/sparse/tpls/KokkosSparse_gauss_seidel_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_gauss_seidel_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_GAUSS_SEIDEL_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_GAUSS_SEIDEL_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_gauss_seidel_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_gauss_seidel_tpl_spec_decl.hpp index 4f8e822121..8a6333642b 100644 --- a/sparse/tpls/KokkosSparse_gauss_seidel_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_gauss_seidel_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_GAUSS_SEIDEL_TPL_SPEC_DECL_HPP_ #define KOKKOSPARSE_GAUSS_SEIDEL_TPL_SPEC_DECL_HPP_ diff --git a/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_avail.hpp index dfaf491728..bdcc36c040 100644 --- a/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_PAR_ILUT_NUMERIC_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_PAR_ILUT_NUMERIC_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_decl.hpp index 675d89a8a2..cb47d9ca3b 100644 --- a/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_par_ilut_numeric_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_PAR_ILUT_NUMERIC_TPL_SPEC_DECL_HPP_ #define KOKKOSPARSE_PAR_ILUT_NUMERIC_TPL_SPEC_DECL_HPP_ diff --git a/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_avail.hpp index 98d57832f8..08eb851ef3 100644 --- a/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_PAR_ILUT_SYMBOLIC_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_PAR_ILUT_SYMBOLIC_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_decl.hpp index df3b45f877..12d09cf0f8 100644 --- a/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_par_ilut_symbolic_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_PAR_ILUT_SYMBOLIC_TPL_SPEC_DECL_HPP_ #define KOKKOSPARSE_PAR_ILUT_SYMBOLIC_TPL_SPEC_DECL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spadd_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spadd_tpl_spec_avail.hpp index 9a65bc3656..b654c4331c 100644 --- a/sparse/tpls/KokkosSparse_spadd_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_spadd_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPADD_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_SPADD_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spadd_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spadd_tpl_spec_decl.hpp index d9f6a19911..8f5ad83ed7 100644 --- a/sparse/tpls/KokkosSparse_spadd_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spadd_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPADD_TPL_SPEC_DECL_HPP_ #define KOKKOSPARSE_SPADD_TPL_SPEC_DECL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spgemm_jacobi_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spgemm_jacobi_tpl_spec_avail.hpp index c451d91cb4..c045f21318 100644 --- a/sparse/tpls/KokkosSparse_spgemm_jacobi_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_spgemm_jacobi_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPGEMM_JACOBI_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_SPGEMM_JACOBI_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spgemm_jacobi_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spgemm_jacobi_tpl_spec_decl.hpp index cb171ad0a4..674c48ab21 100644 --- a/sparse/tpls/KokkosSparse_spgemm_jacobi_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spgemm_jacobi_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPGEMM_TPL_SPEC_DECL_HPP_ #define KOKKOSPARSE_SPGEMM_TPL_SPEC_DECL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spiluk_numeric_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spiluk_numeric_tpl_spec_avail.hpp index 3535edf4ae..cf2a653e2a 100644 --- a/sparse/tpls/KokkosSparse_spiluk_numeric_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_spiluk_numeric_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPILUK_NUMERIC_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_SPILUK_NUMERIC_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spiluk_numeric_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spiluk_numeric_tpl_spec_decl.hpp index dfd07e8600..8442469a7a 100644 --- a/sparse/tpls/KokkosSparse_spiluk_numeric_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spiluk_numeric_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPILUK_NUMERIC_TPL_SPEC_DECL_HPP_ #define KOKKOSPARSE_SPILUK_NUMERIC_TPL_SPEC_DECL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_avail.hpp index ccf1b19786..4730ec2ffd 100644 --- a/sparse/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPILUK_SYMBOLIC_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_SPILUK_SYMBOLIC_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_decl.hpp index 4acaf4922e..870740defc 100644 --- a/sparse/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spiluk_symbolic_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPILUK_SYMBOLIC_TPL_SPEC_DECL_HPP_ #define KOKKOSPARSE_SPILUK_SYMBOLIC_TPL_SPEC_DECL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_avail.hpp index 57170d6eb6..97a9790385 100644 --- a/sparse/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPMV_BSRMATRIX_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_SPMV_BSRMATRIX_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_decl.hpp index 93457f9837..0e0fe463a5 100644 --- a/sparse/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spmv_bsrmatrix_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_SPMV_BSRMATRIX_TPL_SPEC_DECL_HPP #define KOKKOSSPARSE_SPMV_BSRMATRIX_TPL_SPEC_DECL_HPP diff --git a/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_avail.hpp index ef23f6ec9a..529abc82b7 100644 --- a/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPMV_MV_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_SPMV_MV_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp index ace1c27799..28a80ec266 100644 --- a/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spmv_mv_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPMV_MV_TPL_SPEC_DECL_HPP_ #define KOKKOSPARSE_SPMV_MV_TPL_SPEC_DECL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spmv_struct_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spmv_struct_tpl_spec_avail.hpp index 5d443c992d..707e653803 100644 --- a/sparse/tpls/KokkosSparse_spmv_struct_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_spmv_struct_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPMV_STRUCT_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_SPMV_STRUCT_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spmv_struct_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spmv_struct_tpl_spec_decl.hpp index 33bfca9f7c..0a3028cf20 100644 --- a/sparse/tpls/KokkosSparse_spmv_struct_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spmv_struct_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPMV_STRUCT_TPL_SPEC_DECL_HPP_ #define KOKKOSPARSE_SPMV_STRUCT_TPL_SPEC_DECL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spmv_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spmv_tpl_spec_avail.hpp index a91996361b..4a92741cc5 100644 --- a/sparse/tpls/KokkosSparse_spmv_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_spmv_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPMV_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_SPMV_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp index bf65961131..3c68195f97 100644 --- a/sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPMV_TPL_SPEC_DECL_HPP_ #define KOKKOSPARSE_SPMV_TPL_SPEC_DECL_HPP_ diff --git a/sparse/tpls/KokkosSparse_sptrsv_solve_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_sptrsv_solve_tpl_spec_avail.hpp index 000f9d7995..c12e8bb335 100644 --- a/sparse/tpls/KokkosSparse_sptrsv_solve_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_sptrsv_solve_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPTRSV_SOLVE_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_SPTRSV_SOLVE_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_sptrsv_solve_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_sptrsv_solve_tpl_spec_decl.hpp index f0e0293162..d626bc54e9 100644 --- a/sparse/tpls/KokkosSparse_sptrsv_solve_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_sptrsv_solve_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPTRSV_SOLVE_TPL_SPEC_DECL_HPP_ #define KOKKOSPARSE_SPTRSV_SOLVE_TPL_SPEC_DECL_HPP_ diff --git a/sparse/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_avail.hpp index 3f005f39e0..c38de6dc31 100644 --- a/sparse/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPTRSV_SYMBOLIC_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_SPTRSV_SYMBOLIC_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_decl.hpp index faa5806a1a..096704ad7b 100644 --- a/sparse/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_sptrsv_symbolic_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_SPTRSV_SYMBOLIC_TPL_SPEC_DECL_HPP_ #define KOKKOSPARSE_SPTRSV_SYMBOLIC_TPL_SPEC_DECL_HPP_ diff --git a/sparse/tpls/KokkosSparse_trsv_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_trsv_tpl_spec_avail.hpp index 3cc88645c6..a4d0416b0c 100644 --- a/sparse/tpls/KokkosSparse_trsv_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_trsv_tpl_spec_avail.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_TRSV_TPL_SPEC_AVAIL_HPP_ #define KOKKOSPARSE_TRSV_TPL_SPEC_AVAIL_HPP_ diff --git a/sparse/tpls/KokkosSparse_trsv_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_trsv_tpl_spec_decl.hpp index fd1be19265..7fa4865104 100644 --- a/sparse/tpls/KokkosSparse_trsv_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_trsv_tpl_spec_decl.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSPARSE_TRSV_TPL_SPEC_DECL_HPP_ #define KOKKOSPARSE_TRSV_TPL_SPEC_DECL_HPP_ diff --git a/sparse/unit_test/Test_Sparse_BsrMatrix.hpp b/sparse/unit_test/Test_Sparse_BsrMatrix.hpp index 501ebc2ead..9ec660a64b 100644 --- a/sparse/unit_test/Test_Sparse_BsrMatrix.hpp +++ b/sparse/unit_test/Test_Sparse_BsrMatrix.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ //#include "KokkosKernels_ETIHelperMacros.h" #include diff --git a/sparse/unit_test/Test_Sparse_Controls.hpp b/sparse/unit_test/Test_Sparse_Controls.hpp index fec24b573a..7da8e19e97 100644 --- a/sparse/unit_test/Test_Sparse_Controls.hpp +++ b/sparse/unit_test/Test_Sparse_Controls.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef TEST_SPARSE_CONTROLS_HPP #define TEST_SPARSE_CONTROLS_HPP diff --git a/sparse/unit_test/Test_Sparse_CrsMatrix.hpp b/sparse/unit_test/Test_Sparse_CrsMatrix.hpp index 8a85e43670..e792a99500 100644 --- a/sparse/unit_test/Test_Sparse_CrsMatrix.hpp +++ b/sparse/unit_test/Test_Sparse_CrsMatrix.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ //#include "KokkosKernels_ETIHelperMacros.h" #include diff --git a/sparse/unit_test/Test_Sparse_SortCrs.hpp b/sparse/unit_test/Test_Sparse_SortCrs.hpp index a4d30b40a1..935b994045 100644 --- a/sparse/unit_test/Test_Sparse_SortCrs.hpp +++ b/sparse/unit_test/Test_Sparse_SortCrs.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file Test_Sparse_SortCrs.hpp /// \brief Tests for sort_crs_matrix and sort_crs_graph in diff --git a/sparse/unit_test/Test_Sparse_TestUtils_RandCsMat.hpp b/sparse/unit_test/Test_Sparse_TestUtils_RandCsMat.hpp index 07fe611cba..856b888c1a 100644 --- a/sparse/unit_test/Test_Sparse_TestUtils_RandCsMat.hpp +++ b/sparse/unit_test/Test_Sparse_TestUtils_RandCsMat.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosKernels_TestUtils.hpp" diff --git a/sparse/unit_test/Test_Sparse_Transpose.hpp b/sparse/unit_test/Test_Sparse_Transpose.hpp index 77868a7251..0b9ba1a611 100644 --- a/sparse/unit_test/Test_Sparse_Transpose.hpp +++ b/sparse/unit_test/Test_Sparse_Transpose.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file Test_Common_Transpose.hpp diff --git a/sparse/unit_test/Test_Sparse_Utils.hpp b/sparse/unit_test/Test_Sparse_Utils.hpp index 7c96dfe74e..1bfd33fc0d 100644 --- a/sparse/unit_test/Test_Sparse_Utils.hpp +++ b/sparse/unit_test/Test_Sparse_Utils.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef TEST_SPARSE_UTILS_HPP #define TEST_SPARSE_UTILS_HPP diff --git a/sparse/unit_test/Test_Sparse_block_gauss_seidel.hpp b/sparse/unit_test/Test_Sparse_block_gauss_seidel.hpp index 38c806ddf9..4c445f439f 100644 --- a/sparse/unit_test/Test_Sparse_block_gauss_seidel.hpp +++ b/sparse/unit_test/Test_Sparse_block_gauss_seidel.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include diff --git a/sparse/unit_test/Test_Sparse_bspgemm.hpp b/sparse/unit_test/Test_Sparse_bspgemm.hpp index 7ac382ad01..b760e7e69c 100644 --- a/sparse/unit_test/Test_Sparse_bspgemm.hpp +++ b/sparse/unit_test/Test_Sparse_bspgemm.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/sparse/unit_test/Test_Sparse_ccs2crs.hpp b/sparse/unit_test/Test_Sparse_ccs2crs.hpp index e094d3011e..902bf41b4f 100644 --- a/sparse/unit_test/Test_Sparse_ccs2crs.hpp +++ b/sparse/unit_test/Test_Sparse_ccs2crs.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosSparse_ccs2crs.hpp" #include "KokkosSparse_crs2ccs.hpp" diff --git a/sparse/unit_test/Test_Sparse_crs2ccs.hpp b/sparse/unit_test/Test_Sparse_crs2ccs.hpp index 0553d1101f..c52ea6dfbe 100644 --- a/sparse/unit_test/Test_Sparse_crs2ccs.hpp +++ b/sparse/unit_test/Test_Sparse_crs2ccs.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosSparse_crs2ccs.hpp" #include "KokkosSparse_ccs2crs.hpp" diff --git a/sparse/unit_test/Test_Sparse_csc2csr.hpp b/sparse/unit_test/Test_Sparse_csc2csr.hpp index fc8e3186f7..61857a3e4f 100644 --- a/sparse/unit_test/Test_Sparse_csc2csr.hpp +++ b/sparse/unit_test/Test_Sparse_csc2csr.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosSparse_csc2csr.hpp" #include "KokkosKernels_TestUtils.hpp" diff --git a/sparse/unit_test/Test_Sparse_findRelOffset.hpp b/sparse/unit_test/Test_Sparse_findRelOffset.hpp index 04baa1163f..9c7224b756 100644 --- a/sparse/unit_test/Test_Sparse_findRelOffset.hpp +++ b/sparse/unit_test/Test_Sparse_findRelOffset.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ // Note: Luc Berger-Vergiat 04/14/21 // This test requires the use of UVM diff --git a/sparse/unit_test/Test_Sparse_gauss_seidel.hpp b/sparse/unit_test/Test_Sparse_gauss_seidel.hpp index 323598b606..7960a1a9bc 100644 --- a/sparse/unit_test/Test_Sparse_gauss_seidel.hpp +++ b/sparse/unit_test/Test_Sparse_gauss_seidel.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include diff --git a/sparse/unit_test/Test_Sparse_mdf.hpp b/sparse/unit_test/Test_Sparse_mdf.hpp index 6f9f550f27..3fcd827292 100644 --- a/sparse/unit_test/Test_Sparse_mdf.hpp +++ b/sparse/unit_test/Test_Sparse_mdf.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/sparse/unit_test/Test_Sparse_par_ilut.hpp b/sparse/unit_test/Test_Sparse_par_ilut.hpp index 809f080c97..0f73b80f3f 100644 --- a/sparse/unit_test/Test_Sparse_par_ilut.hpp +++ b/sparse/unit_test/Test_Sparse_par_ilut.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/sparse/unit_test/Test_Sparse_replaceSumInto.hpp b/sparse/unit_test/Test_Sparse_replaceSumInto.hpp index 4036e7ddbd..af61aeb320 100644 --- a/sparse/unit_test/Test_Sparse_replaceSumInto.hpp +++ b/sparse/unit_test/Test_Sparse_replaceSumInto.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ //#include "Teuchos_UnitTestHarness.hpp" #include "Kokkos_ArithTraits.hpp" diff --git a/sparse/unit_test/Test_Sparse_replaceSumIntoLonger.hpp b/sparse/unit_test/Test_Sparse_replaceSumIntoLonger.hpp index e5e1266e1d..76bbfe37a9 100644 --- a/sparse/unit_test/Test_Sparse_replaceSumIntoLonger.hpp +++ b/sparse/unit_test/Test_Sparse_replaceSumIntoLonger.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ //#include "Teuchos_UnitTestHarness.hpp" #include "Kokkos_ArithTraits.hpp" diff --git a/sparse/unit_test/Test_Sparse_spgemm.hpp b/sparse/unit_test/Test_Sparse_spgemm.hpp index 51fdfb7def..b6480f4f16 100644 --- a/sparse/unit_test/Test_Sparse_spgemm.hpp +++ b/sparse/unit_test/Test_Sparse_spgemm.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp b/sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp index 9f2fddeaa2..cfdf13a709 100644 --- a/sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp +++ b/sparse/unit_test/Test_Sparse_spgemm_jacobi.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Seher Acer (sacer@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/sparse/unit_test/Test_Sparse_spiluk.hpp b/sparse/unit_test/Test_Sparse_spiluk.hpp index 863bdf0808..12065781f1 100644 --- a/sparse/unit_test/Test_Sparse_spiluk.hpp +++ b/sparse/unit_test/Test_Sparse_spiluk.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/sparse/unit_test/Test_Sparse_spmv_bsr.hpp b/sparse/unit_test/Test_Sparse_spmv_bsr.hpp index 7cfc56bc2f..b9e5334abf 100644 --- a/sparse/unit_test/Test_Sparse_spmv_bsr.hpp +++ b/sparse/unit_test/Test_Sparse_spmv_bsr.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/sparse/unit_test/Test_Sparse_sptrsv.hpp b/sparse/unit_test/Test_Sparse_sptrsv.hpp index c470747202..8b3e64ecae 100644 --- a/sparse/unit_test/Test_Sparse_sptrsv.hpp +++ b/sparse/unit_test/Test_Sparse_sptrsv.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include diff --git a/test_common/KokkosKernels_MatrixConverter.cpp b/test_common/KokkosKernels_MatrixConverter.cpp index 1b9c05e457..ece082143c 100644 --- a/test_common/KokkosKernels_MatrixConverter.cpp +++ b/test_common/KokkosKernels_MatrixConverter.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include #include "KokkosKernels_IOUtils.hpp" diff --git a/test_common/KokkosKernels_MyCRSMatrix.hpp b/test_common/KokkosKernels_MyCRSMatrix.hpp index b0d73058dd..a4dc12de84 100644 --- a/test_common/KokkosKernels_MyCRSMatrix.hpp +++ b/test_common/KokkosKernels_MyCRSMatrix.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include "KokkosKernels_Utils.hpp" namespace MyKokkosSparse{ diff --git a/test_common/KokkosKernels_TestParameters.hpp b/test_common/KokkosKernels_TestParameters.hpp index 1723827eaf..2c82a3fb21 100644 --- a/test_common/KokkosKernels_TestParameters.hpp +++ b/test_common/KokkosKernels_TestParameters.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KK_TESTPARAMS_H #define KK_TESTPARAMS_H diff --git a/test_common/KokkosKernels_TestUtils.hpp b/test_common/KokkosKernels_TestUtils.hpp index 350e3a21bf..761c919aac 100644 --- a/test_common/KokkosKernels_TestUtils.hpp +++ b/test_common/KokkosKernels_TestUtils.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSKERNELS_TEST_UTILS_HPP #define KOKKOSKERNELS_TEST_UTILS_HPP diff --git a/test_common/KokkosKernels_Test_Structured_Matrix.hpp b/test_common/KokkosKernels_Test_Structured_Matrix.hpp index 107917060a..65579896d0 100644 --- a/test_common/KokkosKernels_Test_Structured_Matrix.hpp +++ b/test_common/KokkosKernels_Test_Structured_Matrix.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSKERNELS_TEST_STRUCTURE_MATRIX_HPP #define KOKKOSKERNELS_TEST_STRUCTURE_MATRIX_HPP diff --git a/test_common/KokkosKernels_WriteBinaryFromBinSrcDst.cpp b/test_common/KokkosKernels_WriteBinaryFromBinSrcDst.cpp index 4a33a4b985..1c9ddca09a 100644 --- a/test_common/KokkosKernels_WriteBinaryFromBinSrcDst.cpp +++ b/test_common/KokkosKernels_WriteBinaryFromBinSrcDst.cpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #include #include #include "KokkosKernels_IOUtils.hpp" diff --git a/test_common/Kokkos_Performance.hpp b/test_common/Kokkos_Performance.hpp index f2d0ac6a30..8fec2d5804 100644 --- a/test_common/Kokkos_Performance.hpp +++ b/test_common/Kokkos_Performance.hpp @@ -1,43 +1,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER #ifndef KOKKOS_PERFORMANCE_HPP diff --git a/test_common/Test_Common_Test_All_Type_Combos.hpp b/test_common/Test_Common_Test_All_Type_Combos.hpp index afacb09ee9..c51601fdf4 100644 --- a/test_common/Test_Common_Test_All_Type_Combos.hpp +++ b/test_common/Test_Common_Test_All_Type_Combos.hpp @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ /// \file Test_Common_Test_All_Type_Combos.hpp From 2803840f349639eaa104069f47f8a806f03be20f Mon Sep 17 00:00:00 2001 From: Christian Trott Date: Tue, 29 Nov 2022 12:18:43 -0700 Subject: [PATCH 198/226] Add missing license header --- batched/KokkosBatched_Util.cpp | 15 ++++++++ batched/KokkosBatched_Util.hpp | 15 ++++++++ .../impl/KokkosBatched_AddRadial_Impl.hpp | 15 ++++++++ .../impl/KokkosBatched_AddRadial_Internal.hpp | 15 ++++++++ ...kosBatched_ApplyGivens_Serial_Internal.hpp | 15 ++++++++ ...osBatched_ApplyHouseholder_Serial_Impl.hpp | 15 ++++++++ ...tched_ApplyHouseholder_Serial_Internal.hpp | 15 ++++++++ ...tched_ApplyHouseholder_TeamVector_Impl.hpp | 15 ++++++++ ...d_ApplyHouseholder_TeamVector_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_ApplyPivot_Impl.hpp | 15 ++++++++ .../KokkosBatched_ApplyPivot_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_ApplyQ_Serial_Impl.hpp | 15 ++++++++ .../KokkosBatched_ApplyQ_Serial_Internal.hpp | 15 ++++++++ .../KokkosBatched_ApplyQ_TeamVector_Impl.hpp | 15 ++++++++ ...kkosBatched_ApplyQ_TeamVector_Internal.hpp | 15 ++++++++ .../dense/impl/KokkosBatched_Copy_Impl.hpp | 15 ++++++++ .../impl/KokkosBatched_Copy_Internal.hpp | 15 ++++++++ .../dense/impl/KokkosBatched_Dot_Internal.hpp | 15 ++++++++ ...Batched_Eigendecomposition_Serial_Impl.hpp | 15 ++++++++ ...hed_Eigendecomposition_Serial_Internal.hpp | 15 ++++++++ ...hed_Eigendecomposition_TeamVector_Impl.hpp | 15 ++++++++ ...Eigendecomposition_TeamVector_Internal.hpp | 15 ++++++++ ...kkosBatched_Eigenvalue_Serial_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_FindAmax_Internal.hpp | 15 ++++++++ .../KokkosBatched_Francis_Serial_Internal.hpp | 15 ++++++++ .../KokkosBatched_Gemm_Serial_Internal.hpp | 15 ++++++++ .../KokkosBatched_Gemm_TeamVector_Impl.hpp | 15 ++++++++ ...KokkosBatched_Gemm_TeamVector_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_Gemm_Team_Impl.hpp | 15 ++++++++ .../impl/KokkosBatched_Gemm_Team_Internal.hpp | 15 ++++++++ .../KokkosBatched_Gemv_TeamVector_Impl.hpp | 15 ++++++++ ...KokkosBatched_Gemv_TeamVector_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_Gemv_Team_Impl.hpp | 15 ++++++++ .../impl/KokkosBatched_Gemv_Team_Internal.hpp | 15 ++++++++ .../KokkosBatched_Givens_Serial_Internal.hpp | 15 ++++++++ ...atched_HessenbergFormQ_Serial_Internal.hpp | 15 ++++++++ ...HessenbergQR_WithShift_Serial_Internal.hpp | 15 ++++++++ ...kkosBatched_Hessenberg_Serial_Internal.hpp | 15 ++++++++ .../KokkosBatched_Householder_Serial_Impl.hpp | 15 ++++++++ ...kosBatched_Householder_Serial_Internal.hpp | 15 ++++++++ ...kosBatched_Householder_TeamVector_Impl.hpp | 15 ++++++++ ...atched_Householder_TeamVector_Internal.hpp | 15 ++++++++ ...okkosBatched_InnerGemmFixA_Serial_Impl.hpp | 15 ++++++++ ...okkosBatched_InnerGemmFixB_Serial_Impl.hpp | 15 ++++++++ ...okkosBatched_InnerGemmFixC_Serial_Impl.hpp | 15 ++++++++ .../KokkosBatched_InnerGemmFixC_Team_Impl.hpp | 15 ++++++++ .../KokkosBatched_InnerLU_Serial_Impl.hpp | 15 ++++++++ .../KokkosBatched_InnerTrsm_Serial_Impl.hpp | 15 ++++++++ .../KokkosBatched_InverseLU_Serial_Impl.hpp | 15 ++++++++ .../impl/KokkosBatched_LU_Serial_Impl.hpp | 15 ++++++++ .../impl/KokkosBatched_LU_Serial_Internal.hpp | 15 ++++++++ .../dense/impl/KokkosBatched_LU_Team_Impl.hpp | 15 ++++++++ .../impl/KokkosBatched_LU_Team_Internal.hpp | 15 ++++++++ ...ftEigenvectorFromSchur_Serial_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_Normalize_Internal.hpp | 15 ++++++++ ...KokkosBatched_QR_FormQ_Serial_Internal.hpp | 15 ++++++++ ...osBatched_QR_FormQ_TeamVector_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_QR_Serial_Impl.hpp | 15 ++++++++ .../impl/KokkosBatched_QR_Serial_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_QR_TeamVector_Impl.hpp | 15 ++++++++ .../KokkosBatched_QR_TeamVector_Internal.hpp | 15 ++++++++ ..._QR_WithColumnPivoting_TeamVector_Impl.hpp | 15 ++++++++ ...WithColumnPivoting_TeamVector_Internal.hpp | 15 ++++++++ ...htEigenvectorFromSchur_Serial_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_SVD_Serial_Impl.hpp | 15 ++++++++ .../KokkosBatched_SVD_Serial_Internal.hpp | 15 ++++++++ ...KokkosBatched_Schur2x2_Serial_Internal.hpp | 15 ++++++++ .../KokkosBatched_Schur_Serial_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_SetIdentity_Impl.hpp | 15 ++++++++ .../KokkosBatched_SetIdentity_Internal.hpp | 15 ++++++++ .../KokkosBatched_SetTriangular_Internal.hpp | 15 ++++++++ ...kosBatched_ShiftedTrsv_Serial_Internal.hpp | 15 ++++++++ ...KokkosBatched_SolveUTV_TeamVector_Impl.hpp | 15 ++++++++ ...osBatched_SolveUTV_TeamVector_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_Trsm_Serial_Impl.hpp | 15 ++++++++ .../KokkosBatched_Trsm_Serial_Internal.hpp | 15 ++++++++ .../KokkosBatched_Trsm_TeamVector_Impl.hpp | 15 ++++++++ ...KokkosBatched_Trsm_TeamVector_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_Trsm_Team_Impl.hpp | 15 ++++++++ .../impl/KokkosBatched_Trsm_Team_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_Trsv_Serial_Impl.hpp | 15 ++++++++ .../KokkosBatched_Trsv_Serial_Internal.hpp | 15 ++++++++ .../KokkosBatched_Trsv_TeamVector_Impl.hpp | 15 ++++++++ ...KokkosBatched_Trsv_TeamVector_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_Trsv_Team_Impl.hpp | 15 ++++++++ .../impl/KokkosBatched_Trsv_Team_Internal.hpp | 15 ++++++++ .../KokkosBatched_UTV_TeamVector_Impl.hpp | 15 ++++++++ .../KokkosBatched_UTV_TeamVector_Internal.hpp | 15 ++++++++ .../KokkosBatched_UpdateGivens_Internal.hpp | 15 ++++++++ .../impl/KokkosBatched_Vector_SIMD_Arith.hpp | 15 ++++++++ .../KokkosBatched_Vector_SIMD_Logical.hpp | 15 ++++++++ .../impl/KokkosBatched_Vector_SIMD_Math.hpp | 15 ++++++++ .../impl/KokkosBatched_Vector_SIMD_Misc.hpp | 15 ++++++++ .../KokkosBatched_Vector_SIMD_Relation.hpp | 15 ++++++++ .../impl/KokkosBatched_Vector_SIMD_View.hpp | 15 ++++++++ ...Batched_WilkinsonShift_Serial_Internal.hpp | 15 ++++++++ .../src/KokkosBatched_AddRadial_Decl.hpp | 15 ++++++++ .../KokkosBatched_ApplyHouseholder_Decl.hpp | 15 ++++++++ .../src/KokkosBatched_ApplyPivot_Decl.hpp | 15 ++++++++ .../dense/src/KokkosBatched_ApplyQ_Decl.hpp | 15 ++++++++ batched/dense/src/KokkosBatched_Copy_Decl.hpp | 15 ++++++++ .../KokkosBatched_Eigendecomposition_Decl.hpp | 15 ++++++++ batched/dense/src/KokkosBatched_Gemv_Decl.hpp | 15 ++++++++ .../src/KokkosBatched_Householder_Decl.hpp | 15 ++++++++ .../src/KokkosBatched_InnerGemmFixA_Decl.hpp | 15 ++++++++ .../src/KokkosBatched_InnerGemmFixB_Decl.hpp | 15 ++++++++ .../src/KokkosBatched_InnerGemmFixC_Decl.hpp | 15 ++++++++ .../dense/src/KokkosBatched_InnerLU_Decl.hpp | 15 ++++++++ .../src/KokkosBatched_InnerTrsm_Decl.hpp | 15 ++++++++ .../src/KokkosBatched_InverseLU_Decl.hpp | 15 ++++++++ batched/dense/src/KokkosBatched_LU_Decl.hpp | 15 ++++++++ batched/dense/src/KokkosBatched_QR_Decl.hpp | 15 ++++++++ ...kkosBatched_QR_WithColumnPivoting_Decl.hpp | 15 ++++++++ batched/dense/src/KokkosBatched_SVD_Decl.hpp | 15 ++++++++ .../dense/src/KokkosBatched_Scale_Decl.hpp | 15 ++++++++ .../src/KokkosBatched_SetIdentity_Decl.hpp | 15 ++++++++ batched/dense/src/KokkosBatched_Set_Decl.hpp | 15 ++++++++ .../dense/src/KokkosBatched_SolveLU_Decl.hpp | 15 ++++++++ .../dense/src/KokkosBatched_SolveUTV_Decl.hpp | 15 ++++++++ batched/dense/src/KokkosBatched_Trsm_Decl.hpp | 15 ++++++++ batched/dense/src/KokkosBatched_Trsv_Decl.hpp | 15 ++++++++ batched/dense/src/KokkosBatched_UTV_Decl.hpp | 15 ++++++++ batched/dense/src/KokkosBatched_Vector.hpp | 15 ++++++++ .../dense/src/KokkosBatched_Vector_SIMD.hpp | 15 ++++++++ .../unit_test/Test_Batched_BatchedGemm.hpp | 15 ++++++++ .../Test_Batched_BatchedGemm_Complex.hpp | 15 ++++++++ .../Test_Batched_BatchedGemm_Real.hpp | 15 ++++++++ .../dense/unit_test/Test_Batched_Dense.hpp | 15 ++++++++ .../unit_test/Test_Batched_DenseUtils.hpp | 15 ++++++++ .../unit_test/Test_Batched_SerialAxpy.hpp | 15 ++++++++ .../Test_Batched_SerialAxpy_Complex.hpp | 15 ++++++++ .../Test_Batched_SerialAxpy_Real.hpp | 15 ++++++++ .../Test_Batched_SerialEigendecomposition.hpp | 15 ++++++++ ..._Batched_SerialEigendecomposition_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_SerialGemm.hpp | 15 ++++++++ .../Test_Batched_SerialGemm_Complex.hpp | 15 ++++++++ .../Test_Batched_SerialGemm_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_SerialGesv.hpp | 15 ++++++++ .../Test_Batched_SerialGesv_Real.hpp | 15 ++++++++ .../Test_Batched_SerialInverseLU.hpp | 15 ++++++++ .../Test_Batched_SerialInverseLU_Complex.hpp | 15 ++++++++ .../Test_Batched_SerialInverseLU_Real.hpp | 15 ++++++++ .../dense/unit_test/Test_Batched_SerialLU.hpp | 15 ++++++++ .../Test_Batched_SerialLU_Complex.hpp | 15 ++++++++ .../unit_test/Test_Batched_SerialLU_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_SerialSVD.hpp | 15 ++++++++ .../unit_test/Test_Batched_SerialSolveLU.hpp | 15 ++++++++ .../Test_Batched_SerialSolveLU_Complex.hpp | 15 ++++++++ .../Test_Batched_SerialSolveLU_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_SerialTrmm.hpp | 15 ++++++++ .../Test_Batched_SerialTrmm_Complex.hpp | 15 ++++++++ .../Test_Batched_SerialTrmm_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_SerialTrsm.hpp | 15 ++++++++ .../Test_Batched_SerialTrsm_Complex.hpp | 15 ++++++++ .../Test_Batched_SerialTrsm_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_SerialTrsv.hpp | 15 ++++++++ .../Test_Batched_SerialTrsv_Complex.hpp | 15 ++++++++ .../Test_Batched_SerialTrsv_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_SerialTrtri.hpp | 15 ++++++++ .../Test_Batched_SerialTrtri_Complex.hpp | 15 ++++++++ .../Test_Batched_SerialTrtri_Real.hpp | 15 ++++++++ .../dense/unit_test/Test_Batched_TeamAxpy.hpp | 15 ++++++++ .../Test_Batched_TeamAxpy_Complex.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamAxpy_Real.hpp | 15 ++++++++ .../dense/unit_test/Test_Batched_TeamGemm.hpp | 15 ++++++++ .../Test_Batched_TeamGemm_Complex.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamGemm_Real.hpp | 15 ++++++++ .../dense/unit_test/Test_Batched_TeamGesv.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamGesv_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamInverseLU.hpp | 15 ++++++++ .../Test_Batched_TeamInverseLU_Complex.hpp | 15 ++++++++ .../Test_Batched_TeamInverseLU_Real.hpp | 15 ++++++++ .../dense/unit_test/Test_Batched_TeamLU.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamLU_Complex.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamLU_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamSolveLU.hpp | 15 ++++++++ .../Test_Batched_TeamSolveLU_Complex.hpp | 15 ++++++++ .../Test_Batched_TeamSolveLU_Real.hpp | 15 ++++++++ .../dense/unit_test/Test_Batched_TeamTrsm.hpp | 15 ++++++++ .../Test_Batched_TeamTrsm_Complex.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamTrsm_Real.hpp | 15 ++++++++ .../dense/unit_test/Test_Batched_TeamTrsv.hpp | 15 ++++++++ .../Test_Batched_TeamTrsv_Complex.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamTrsv_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamVectorAxpy.hpp | 15 ++++++++ .../Test_Batched_TeamVectorAxpy_Complex.hpp | 15 ++++++++ .../Test_Batched_TeamVectorAxpy_Real.hpp | 15 ++++++++ ...t_Batched_TeamVectorEigendecomposition.hpp | 15 ++++++++ ...ched_TeamVectorEigendecomposition_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamVectorGemm.hpp | 15 ++++++++ .../Test_Batched_TeamVectorGemm_Complex.hpp | 15 ++++++++ .../Test_Batched_TeamVectorGemm_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamVectorGesv.hpp | 15 ++++++++ .../Test_Batched_TeamVectorGesv_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamVectorQR.hpp | 15 ++++++++ .../Test_Batched_TeamVectorQR_Real.hpp | 15 ++++++++ ...atched_TeamVectorQR_WithColumnPivoting.hpp | 15 ++++++++ ...d_TeamVectorQR_WithColumnPivoting_Real.hpp | 15 ++++++++ .../Test_Batched_TeamVectorSolveUTV.hpp | 15 ++++++++ .../Test_Batched_TeamVectorSolveUTV2.hpp | 15 ++++++++ .../Test_Batched_TeamVectorSolveUTV2_Real.hpp | 15 ++++++++ .../Test_Batched_TeamVectorSolveUTV_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamVectorUTV.hpp | 15 ++++++++ .../Test_Batched_TeamVectorUTV_Real.hpp | 15 ++++++++ .../Test_Batched_VectorArithmatic.hpp | 15 ++++++++ .../unit_test/Test_Batched_VectorLogical.hpp | 15 ++++++++ .../unit_test/Test_Batched_VectorMath.hpp | 15 ++++++++ .../unit_test/Test_Batched_VectorMisc.hpp | 15 ++++++++ .../unit_test/Test_Batched_VectorRelation.hpp | 15 ++++++++ .../unit_test/Test_Batched_VectorView.hpp | 15 ++++++++ .../backends/Test_Cuda_Batched_Dense.cpp | 15 ++++++++ .../backends/Test_HIP_Batched_Dense.cpp | 15 ++++++++ .../Test_OpenMPTarget_Batched_Dense.cpp | 15 ++++++++ .../backends/Test_OpenMP_Batched_Dense.cpp | 15 ++++++++ .../backends/Test_SYCL_Batched_Dense.cpp | 15 ++++++++ .../backends/Test_Serial_Batched_Dense.cpp | 15 ++++++++ .../backends/Test_Threads_Batched_Dense.cpp | 15 ++++++++ .../unit_test/Test_Batched_SerialGMRES.hpp | 15 ++++++++ .../Test_Batched_SerialGMRES_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_SerialSpmv.hpp | 15 ++++++++ .../Test_Batched_SerialSpmv_Real.hpp | 15 ++++++++ .../sparse/unit_test/Test_Batched_Sparse.hpp | 15 ++++++++ .../unit_test/Test_Batched_SparseUtils.hpp | 15 ++++++++ .../sparse/unit_test/Test_Batched_TeamCG.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamCG_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamGMRES.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamGMRES_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamSpmv.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamSpmv_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamVectorCG.hpp | 15 ++++++++ .../Test_Batched_TeamVectorCG_Real.hpp | 15 ++++++++ .../Test_Batched_TeamVectorGMRES.hpp | 15 ++++++++ .../Test_Batched_TeamVectorGMRES_Real.hpp | 15 ++++++++ .../unit_test/Test_Batched_TeamVectorSpmv.hpp | 15 ++++++++ .../Test_Batched_TeamVectorSpmv_Real.hpp | 15 ++++++++ .../backends/Test_Cuda_Batched_Sparse.cpp | 15 ++++++++ .../backends/Test_HIP_Batched_Sparse.cpp | 15 ++++++++ .../Test_OpenMPTarget_Batched_Sparse.cpp | 15 ++++++++ .../backends/Test_OpenMP_Batched_Sparse.cpp | 15 ++++++++ .../backends/Test_SYCL_Batched_Sparse.cpp | 15 ++++++++ .../backends/Test_Serial_Batched_Sparse.cpp | 15 ++++++++ .../backends/Test_Threads_Batched_Sparse.cpp | 15 ++++++++ blas/tpls/KokkosBlas_Cuda_tpl.cpp | 15 ++++++++ blas/tpls/KokkosBlas_Cuda_tpl.hpp | 15 ++++++++ blas/tpls/KokkosBlas_Host_tpl.cpp | 15 ++++++++ blas/tpls/KokkosBlas_Rocm_tpl.cpp | 15 ++++++++ blas/tpls/KokkosBlas_Rocm_tpl.hpp | 15 ++++++++ blas/unit_test/Test_Blas.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_abs.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_asum.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_axpby.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_axpy.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_dot.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_iamax.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_mult.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_nrm1.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_nrm2.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_nrm2_squared.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_nrm2w.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_nrm2w_squared.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_nrminf.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_reciprocal.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_rot.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_rotg.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_rotm.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_rotmg.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_scal.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_sum.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_team_abs.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_team_axpby.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_team_axpy.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_team_dot.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_team_mult.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_team_nrm2.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_team_scal.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_team_update.hpp | 15 ++++++++ blas/unit_test/Test_Blas1_update.hpp | 15 ++++++++ blas/unit_test/Test_Blas2_gemv.hpp | 15 ++++++++ blas/unit_test/Test_Blas2_gemv_util.hpp | 15 ++++++++ blas/unit_test/Test_Blas2_serial_gemv.hpp | 15 ++++++++ blas/unit_test/Test_Blas2_team_gemv.hpp | 15 ++++++++ blas/unit_test/Test_Blas2_teamvector_gemv.hpp | 15 ++++++++ blas/unit_test/Test_Blas3_gemm.hpp | 15 ++++++++ blas/unit_test/Test_Blas3_trmm.hpp | 15 ++++++++ blas/unit_test/Test_Blas3_trsm.hpp | 15 ++++++++ blas/unit_test/Test_Blas_Newton.hpp | 15 ++++++++ blas/unit_test/Test_Blas_gesv.hpp | 15 ++++++++ blas/unit_test/Test_Blas_rocblas.hpp | 15 ++++++++ blas/unit_test/Test_Blas_trtri.hpp | 15 ++++++++ blas/unit_test/backends/Test_Cuda_Blas.cpp | 15 ++++++++ blas/unit_test/backends/Test_HIP_Blas.cpp | 15 ++++++++ .../backends/Test_OpenMPTarget_Blas.cpp | 15 ++++++++ blas/unit_test/backends/Test_OpenMP_Blas.cpp | 15 ++++++++ blas/unit_test/backends/Test_SYCL_Blas.cpp | 15 ++++++++ blas/unit_test/backends/Test_Serial_Blas.cpp | 15 ++++++++ blas/unit_test/backends/Test_Threads_Blas.cpp | 15 ++++++++ cmake/compile_tests/armpl.cpp | 15 ++++++++ cmake/compile_tests/magma.cpp | 15 ++++++++ cmake/compile_tests/mkl.cpp | 15 ++++++++ common/src/dummy.cpp | 15 ++++++++ common/unit_test/Test_Common.hpp | 15 ++++++++ .../unit_test/backends/Test_Cuda_Common.cpp | 15 ++++++++ common/unit_test/backends/Test_HIP_Common.cpp | 15 ++++++++ .../backends/Test_OpenMPTarget_Common.cpp | 15 ++++++++ .../unit_test/backends/Test_OpenMP_Common.cpp | 15 ++++++++ .../unit_test/backends/Test_SYCL_Common.cpp | 15 ++++++++ .../unit_test/backends/Test_Serial_Common.cpp | 15 ++++++++ .../backends/Test_Threads_Common.cpp | 15 ++++++++ example/cmake/in-tree/my_program/test.cc | 15 ++++++++ example/cmake/install/my_program/test.cc | 15 ++++++++ example/fenl/KokkosKernels_ETIMacros.hpp | 15 ++++++++ example/wiki/blas/abs/abs.cpp | 15 ++++++++ .../graph/KokkosGraph_wiki_9pt_stencil.hpp | 15 ++++++++ .../graph/KokkosGraph_wiki_coarsening.cpp | 15 ++++++++ .../wiki/graph/KokkosGraph_wiki_coloring.cpp | 15 ++++++++ example/wiki/graph/KokkosGraph_wiki_mis2.cpp | 15 ++++++++ example/wiki/graph/KokkosGraph_wiki_rcm.cpp | 15 ++++++++ .../sparse/KokkosSparse_wiki_crsmatrix.cpp | 15 ++++++++ .../sparse/KokkosSparse_wiki_gauss_seidel.cpp | 15 ++++++++ .../wiki/sparse/KokkosSparse_wiki_spadd.cpp | 15 ++++++++ .../wiki/sparse/KokkosSparse_wiki_spgemm.cpp | 15 ++++++++ .../wiki/sparse/KokkosSparse_wiki_spmv.cpp | 15 ++++++++ graph/src/KokkosGraph_CoarsenHeuristics.hpp | 15 ++++++++ graph/unit_test/Test_Graph.hpp | 15 ++++++++ graph/unit_test/backends/Test_Cuda_Graph.cpp | 15 ++++++++ graph/unit_test/backends/Test_HIP_Graph.cpp | 15 ++++++++ .../backends/Test_OpenMPTarget_Graph.cpp | 15 ++++++++ .../unit_test/backends/Test_OpenMP_Graph.cpp | 15 ++++++++ graph/unit_test/backends/Test_SYCL_Graph.cpp | 15 ++++++++ .../unit_test/backends/Test_Serial_Graph.cpp | 15 ++++++++ .../unit_test/backends/Test_Threads_Graph.cpp | 15 ++++++++ perf_test/KokkosKernelsTrackedTesting.cpp | 15 ++++++++ perf_test/PerfTestUtilities.cpp | 15 ++++++++ perf_test/PerfTestUtilities.hpp | 15 ++++++++ ...okkosBatched_Test_BlockJacobi_Tutorial.cpp | 15 ++++++++ .../KokkosBatched_Test_BlockTridiagDirect.cpp | 15 ++++++++ .../KokkosBatched_Test_BlockTridiagJacobi.cpp | 15 ++++++++ .../KokkosBatched_Test_Gemm_Cuda.cpp | 15 ++++++++ .../KokkosBatched_Test_Gemm_Host.hpp | 15 ++++++++ .../KokkosBatched_Test_Gemm_Host_Complex.cpp | 15 ++++++++ .../KokkosBatched_Test_Gemm_Host_Real.cpp | 15 ++++++++ .../KokkosBatched_Test_Gemv_Host.hpp | 15 ++++++++ .../KokkosBatched_Test_Gemv_Host_Real.cpp | 15 ++++++++ .../do-not-use/KokkosBatched_Test_LU_Cuda.cpp | 15 ++++++++ .../do-not-use/KokkosBatched_Test_LU_Host.hpp | 15 ++++++++ .../KokkosBatched_Test_LU_Host_Real.cpp | 15 ++++++++ .../KokkosBatched_Test_Trsm_Cuda.cpp | 15 ++++++++ .../KokkosBatched_Test_Trsm_Host.hpp | 15 ++++++++ .../KokkosBatched_Test_Trsm_Host_Real.cpp | 15 ++++++++ .../blas/blas1/KokkosBlas_dot_perf_test.hpp | 15 ++++++++ .../blas1/KokkosBlas_team_dot_perf_test.hpp | 15 ++++++++ perf_test/blas/blas1/tracked_testing.hpp | 15 ++++++++ .../blas/blas2/KokkosBlas2_gemv_perf_test.hpp | 15 ++++++++ perf_test/blas/blas2/tracked_testing.hpp | 15 ++++++++ perf_test/blas/blas3/tracked_testing.hpp | 15 ++++++++ perf_test/sparse/KokkosSparse_spmv_test.hpp | 15 ++++++++ perf_test/sparse/tracked_testing.hpp | 15 ++++++++ scripts/update-copyright | 38 +++++++++++-------- sparse/unit_test/Test_Sparse.hpp | 15 ++++++++ .../unit_test/Test_Sparse_Utils_cusparse.hpp | 15 ++++++++ sparse/unit_test/Test_Sparse_rocsparse.hpp | 15 ++++++++ sparse/unit_test/Test_Sparse_spadd.hpp | 15 ++++++++ sparse/unit_test/Test_Sparse_spmv.hpp | 15 ++++++++ sparse/unit_test/Test_Sparse_trsv.hpp | 15 ++++++++ .../unit_test/backends/Test_Cuda_Sparse.cpp | 15 ++++++++ sparse/unit_test/backends/Test_HIP_Sparse.cpp | 15 ++++++++ .../backends/Test_OpenMPTarget_Sparse.cpp | 15 ++++++++ .../unit_test/backends/Test_OpenMP_Sparse.cpp | 15 ++++++++ .../unit_test/backends/Test_SYCL_Sparse.cpp | 15 ++++++++ .../unit_test/backends/Test_Serial_Sparse.cpp | 15 ++++++++ .../backends/Test_Threads_Sparse.cpp | 15 ++++++++ sparse/unit_test/matrixIssue402.hpp | 15 ++++++++ test_common/Test_Cuda.hpp | 15 ++++++++ test_common/Test_HIP.hpp | 15 ++++++++ test_common/Test_Main.cpp | 15 ++++++++ test_common/Test_OpenMP.hpp | 15 ++++++++ test_common/Test_OpenMPTarget.hpp | 15 ++++++++ test_common/Test_SYCL.hpp | 15 ++++++++ test_common/Test_Serial.hpp | 15 ++++++++ test_common/Test_Threads.hpp | 15 ++++++++ 380 files changed, 5707 insertions(+), 16 deletions(-) diff --git a/batched/KokkosBatched_Util.cpp b/batched/KokkosBatched_Util.cpp index 744ff25634..391f624b87 100644 --- a/batched/KokkosBatched_Util.cpp +++ b/batched/KokkosBatched_Util.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include "KokkosBatched_Util.hpp" /// \author Kyungjoo Kim (kyukim@sandia.gov) diff --git a/batched/KokkosBatched_Util.hpp b/batched/KokkosBatched_Util.hpp index 3e97c97d72..db369e551d 100644 --- a/batched/KokkosBatched_Util.hpp +++ b/batched/KokkosBatched_Util.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_UTIL_HPP__ #define __KOKKOSBATCHED_UTIL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_AddRadial_Impl.hpp b/batched/dense/impl/KokkosBatched_AddRadial_Impl.hpp index d2c6024a6e..252c78d5c5 100644 --- a/batched/dense/impl/KokkosBatched_AddRadial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_AddRadial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_ADD_RADIAL_IMPL_HPP__ #define __KOKKOSBATCHED_ADD_RADIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_AddRadial_Internal.hpp b/batched/dense/impl/KokkosBatched_AddRadial_Internal.hpp index a3ed5696e1..cd90657e30 100644 --- a/batched/dense/impl/KokkosBatched_AddRadial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_AddRadial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_ADD_RADIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_ADD_RADIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_ApplyGivens_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_ApplyGivens_Serial_Internal.hpp index 2d54265446..cf8a946e99 100644 --- a/batched/dense/impl/KokkosBatched_ApplyGivens_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_ApplyGivens_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_GIVENS_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_APPLY_GIVENS_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Impl.hpp index 04aa2d9b57..be720bef2e 100644 --- a/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_HOUSEHOLDER_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_APPLY_HOUSEHOLDER_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Internal.hpp index 5f051000dd..da8e989b47 100644 --- a/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_ApplyHouseholder_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_HOUSEHOLDER_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_APPLY_HOUSEHOLDER_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Impl.hpp index 02990004fd..d1dcc58d18 100644 --- a/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_HOUSEHOLDER_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_APPLY_HOUSEHOLDER_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Internal.hpp index bfbb04ecba..4d513fcf3d 100644 --- a/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_ApplyHouseholder_TeamVector_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_HOUSEHOLDER_TEAMVECTOR_INTERNAL_HPP__ #define __KOKKOSBATCHED_APPLY_HOUSEHOLDER_TEAMVECTOR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_ApplyPivot_Impl.hpp b/batched/dense/impl/KokkosBatched_ApplyPivot_Impl.hpp index 1f355efc5a..afc518f43c 100644 --- a/batched/dense/impl/KokkosBatched_ApplyPivot_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_ApplyPivot_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_PIVOT_IMPL_HPP__ #define __KOKKOSBATCHED_APPLY_PIVOT_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_ApplyPivot_Internal.hpp b/batched/dense/impl/KokkosBatched_ApplyPivot_Internal.hpp index bf9d47c1ee..59548c3d26 100644 --- a/batched/dense/impl/KokkosBatched_ApplyPivot_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_ApplyPivot_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_PIVOT_INTERNAL_HPP__ #define __KOKKOSBATCHED_APPLY_PIVOT_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Impl.hpp index 755aa1cbba..2a7519f2dc 100644 --- a/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_Q_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_APPLY_Q_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Internal.hpp index 31b9f19231..e8d6905964 100644 --- a/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_ApplyQ_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_Q_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_APPLY_Q_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Impl.hpp index f0204f6e7e..7f3a695d75 100644 --- a/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_Q_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_APPLY_Q_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Internal.hpp index f290a18054..233daa8978 100644 --- a/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_ApplyQ_TeamVector_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_Q_TEAMVECTOR_INTERNAL_HPP__ #define __KOKKOSBATCHED_APPLY_Q_TEAMVECTOR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Copy_Impl.hpp b/batched/dense/impl/KokkosBatched_Copy_Impl.hpp index f54e7d7f44..110735ca13 100644 --- a/batched/dense/impl/KokkosBatched_Copy_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Copy_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_COPY_IMPL_HPP__ #define __KOKKOSBATCHED_COPY_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Copy_Internal.hpp b/batched/dense/impl/KokkosBatched_Copy_Internal.hpp index 24a8b95609..ca59e4f79c 100644 --- a/batched/dense/impl/KokkosBatched_Copy_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Copy_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_COPY_INTERNAL_HPP__ #define __KOKKOSBATCHED_COPY_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Dot_Internal.hpp b/batched/dense/impl/KokkosBatched_Dot_Internal.hpp index e737434138..92d7e7c07f 100644 --- a/batched/dense/impl/KokkosBatched_Dot_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Dot_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_DOT_INTERNAL_HPP__ #define __KOKKOSBATCHED_DOT_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Impl.hpp index 60ca253183..49a7184e39 100644 --- a/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_EIGENDECOMPOSITION_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_EIGENDECOMPOSITION_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Internal.hpp index c56fd6ba87..c1bc0439c5 100644 --- a/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Eigendecomposition_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_EIGENDECOMPOSITION_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_EIGENDECOMPOSITION_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Impl.hpp index c43dcbb4fa..a05ee11965 100644 --- a/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_EIGENDECOMPOSITION_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_EIGENDECOMPOSITION_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Internal.hpp index ca46c3e9e7..50324338ee 100644 --- a/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Eigendecomposition_TeamVector_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_EIGENDECOMPOSITION_TEAMVECTOR_INTERNAL_HPP__ #define __KOKKOSBATCHED_EIGENDECOMPOSITION_TEAMVECTOR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Eigenvalue_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Eigenvalue_Serial_Internal.hpp index 8ec4cddb7d..ed2e442342 100644 --- a/batched/dense/impl/KokkosBatched_Eigenvalue_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Eigenvalue_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_EIGENVALUE_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_EIGENVALUE_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_FindAmax_Internal.hpp b/batched/dense/impl/KokkosBatched_FindAmax_Internal.hpp index 32980219bf..ffe911d688 100644 --- a/batched/dense/impl/KokkosBatched_FindAmax_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_FindAmax_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_FIND_AMAX_INTERNAL_HPP__ #define __KOKKOSBATCHED_FIND_AMAX_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Francis_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Francis_Serial_Internal.hpp index 9b8652bdd3..ba4bc0ed9c 100644 --- a/batched/dense/impl/KokkosBatched_Francis_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Francis_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_FRANCIS_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_FRANCIS_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Gemm_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Gemm_Serial_Internal.hpp index 1548d602e2..43197f1da3 100644 --- a/batched/dense/impl/KokkosBatched_Gemm_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Gemm_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_GEMM_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_GEMM_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Impl.hpp index b8df40099a..aedfb9f662 100644 --- a/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_GEMM_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_GEMM_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Internal.hpp index a516f765a1..7e40ec4415 100644 --- a/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Gemm_TeamVector_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_GEMM_TEAMVECTOR_INTERNAL_HPP__ #define __KOKKOSBATCHED_GEMM_TEAMVECTOR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Gemm_Team_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemm_Team_Impl.hpp index 62526fc96e..647ffbdb26 100644 --- a/batched/dense/impl/KokkosBatched_Gemm_Team_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Gemm_Team_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_GEMM_TEAM_IMPL_HPP__ #define __KOKKOSBATCHED_GEMM_TEAM_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Gemm_Team_Internal.hpp b/batched/dense/impl/KokkosBatched_Gemm_Team_Internal.hpp index 4f147a98fc..988a4e5da2 100644 --- a/batched/dense/impl/KokkosBatched_Gemm_Team_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Gemm_Team_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_GEMM_TEAM_INTERNAL_HPP__ #define __KOKKOSBATCHED_GEMM_TEAM_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp index 73e146ab01..12b2d88250 100644 --- a/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_GEMV_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_GEMV_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp index f3b71196f1..0ffc60ec90 100644 --- a/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Gemv_TeamVector_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_GEMV_TEAMVECTOR_INTERNAL_HPP__ #define __KOKKOSBATCHED_GEMV_TEAMVECTOR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp b/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp index 274cfab523..18cd78fd31 100644 --- a/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Gemv_Team_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_GEMV_TEAM_IMPL_HPP__ #define __KOKKOSBATCHED_GEMV_TEAM_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp b/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp index e9bc0c58dd..77629c678f 100644 --- a/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Gemv_Team_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_GEMV_TEAM_INTERNAL_HPP__ #define __KOKKOSBATCHED_GEMV_TEAM_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Givens_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Givens_Serial_Internal.hpp index 105d6196cb..f20e754010 100644 --- a/batched/dense/impl/KokkosBatched_Givens_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Givens_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_GIVENS_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_GIVENS_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_HessenbergFormQ_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_HessenbergFormQ_Serial_Internal.hpp index 4c0f39097f..023257c8ed 100644 --- a/batched/dense/impl/KokkosBatched_HessenbergFormQ_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_HessenbergFormQ_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_HESSENBERG_FORM_Q_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_HESSENBERG_FORM_Q_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_HessenbergQR_WithShift_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_HessenbergQR_WithShift_Serial_Internal.hpp index c6336f6acc..eba6cdfc59 100644 --- a/batched/dense/impl/KokkosBatched_HessenbergQR_WithShift_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_HessenbergQR_WithShift_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_HESSENBERG_QR_WITH_SHIFT_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_HESSENBERG_QR_WITH_SHIFT_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Hessenberg_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Hessenberg_Serial_Internal.hpp index aa4129d419..f12115e4de 100644 --- a/batched/dense/impl/KokkosBatched_Hessenberg_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Hessenberg_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_HESSENBERG_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_HESSENBERG_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Householder_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Householder_Serial_Impl.hpp index a42d5bbb59..4a3e26685b 100644 --- a/batched/dense/impl/KokkosBatched_Householder_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Householder_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_HOUSEHOLDER_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_HOUSEHOLDER_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Householder_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Householder_Serial_Internal.hpp index 565807b3c1..bf2bd7d954 100644 --- a/batched/dense/impl/KokkosBatched_Householder_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Householder_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_HOUSEHOLDER_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_HOUSEHOLDER_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Householder_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_Householder_TeamVector_Impl.hpp index ac6436888b..955e1a72b8 100644 --- a/batched/dense/impl/KokkosBatched_Householder_TeamVector_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Householder_TeamVector_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_HOUSEHOLDER_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_HOUSEHOLDER_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Householder_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_Householder_TeamVector_Internal.hpp index 28c678e13c..40cc0714e3 100644 --- a/batched/dense/impl/KokkosBatched_Householder_TeamVector_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Householder_TeamVector_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_HOUSEHOLDER_TEAMVECTOR_INTERNAL_HPP__ #define __KOKKOSBATCHED_HOUSEHOLDER_TEAMVECTOR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_InnerGemmFixA_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_InnerGemmFixA_Serial_Impl.hpp index 17ea32aa74..d59f9e0c0b 100644 --- a/batched/dense/impl/KokkosBatched_InnerGemmFixA_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_InnerGemmFixA_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_INNER_GEMM_FIX_A_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_INNER_GEMM_FIX_A_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_InnerGemmFixB_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_InnerGemmFixB_Serial_Impl.hpp index b948b115f8..a725bf5b45 100644 --- a/batched/dense/impl/KokkosBatched_InnerGemmFixB_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_InnerGemmFixB_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_INNER_GEMM_FIX_B_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_INNER_GEMM_FIX_B_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_InnerGemmFixC_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_InnerGemmFixC_Serial_Impl.hpp index 247f232dce..8bdf4fee4f 100644 --- a/batched/dense/impl/KokkosBatched_InnerGemmFixC_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_InnerGemmFixC_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_INNER_GEMM_FIX_C_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_INNER_GEMM_FIX_C_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_InnerGemmFixC_Team_Impl.hpp b/batched/dense/impl/KokkosBatched_InnerGemmFixC_Team_Impl.hpp index f39dc60a70..116545f653 100644 --- a/batched/dense/impl/KokkosBatched_InnerGemmFixC_Team_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_InnerGemmFixC_Team_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_INNER_GEMM_FIX_C_TEAM_IMPL_HPP__ #define __KOKKOSBATCHED_INNER_GEMM_FIX_C_TEAM_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_InnerLU_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_InnerLU_Serial_Impl.hpp index d50e6bdd7c..3089d068bb 100644 --- a/batched/dense/impl/KokkosBatched_InnerLU_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_InnerLU_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_INNER_LU_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_INNER_LU_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_InnerTrsm_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_InnerTrsm_Serial_Impl.hpp index 401b13df1c..539980a705 100644 --- a/batched/dense/impl/KokkosBatched_InnerTrsm_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_InnerTrsm_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_INNER_TRSM_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_INNER_TRSM_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_InverseLU_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_InverseLU_Serial_Impl.hpp index 3ed623984f..070a620531 100644 --- a/batched/dense/impl/KokkosBatched_InverseLU_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_InverseLU_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_INVERSELU_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_INVERSELU_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_LU_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_LU_Serial_Impl.hpp index 89173aed30..2fa372aa7c 100644 --- a/batched/dense/impl/KokkosBatched_LU_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_LU_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_LU_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_LU_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_LU_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_LU_Serial_Internal.hpp index 5523f20653..4b9c215aba 100644 --- a/batched/dense/impl/KokkosBatched_LU_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_LU_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_LU_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_LU_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_LU_Team_Impl.hpp b/batched/dense/impl/KokkosBatched_LU_Team_Impl.hpp index 5a410ccde6..3f28c063b8 100644 --- a/batched/dense/impl/KokkosBatched_LU_Team_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_LU_Team_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_LU_TEAM_IMPL_HPP__ #define __KOKKOSBATCHED_LU_TEAM_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_LU_Team_Internal.hpp b/batched/dense/impl/KokkosBatched_LU_Team_Internal.hpp index 77b327e625..a5a033b451 100644 --- a/batched/dense/impl/KokkosBatched_LU_Team_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_LU_Team_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_LU_TEAM_INTERNAL_HPP__ #define __KOKKOSBATCHED_LU_TEAM_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_LeftEigenvectorFromSchur_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_LeftEigenvectorFromSchur_Serial_Internal.hpp index 10e55e1302..9a4ce3378d 100644 --- a/batched/dense/impl/KokkosBatched_LeftEigenvectorFromSchur_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_LeftEigenvectorFromSchur_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_LEFT_EIGENVECTOR_FROM_SCHUR_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_LEFT_EIGENVECTOR_FROM_SCHUR_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Normalize_Internal.hpp b/batched/dense/impl/KokkosBatched_Normalize_Internal.hpp index 28eb159580..e2a7016422 100644 --- a/batched/dense/impl/KokkosBatched_Normalize_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Normalize_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_NORMALIZE_INTERNAL_HPP__ #define __KOKKOSBATCHED_NORMALIZE_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_QR_FormQ_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_QR_FormQ_Serial_Internal.hpp index 23171c063e..ac97a3f772 100644 --- a/batched/dense/impl/KokkosBatched_QR_FormQ_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_QR_FormQ_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_QR_FORM_Q_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_QR_FORM_Q_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_QR_FormQ_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_QR_FormQ_TeamVector_Internal.hpp index 13a4ef4636..66b63f23f6 100644 --- a/batched/dense/impl/KokkosBatched_QR_FormQ_TeamVector_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_QR_FormQ_TeamVector_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_QR_FORM_Q_TEAMVECTOR_INTERNAL_HPP__ #define __KOKKOSBATCHED_QR_FORM_Q_TEAMVECTOR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_QR_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_QR_Serial_Impl.hpp index 41f60c5aae..5eac699f56 100644 --- a/batched/dense/impl/KokkosBatched_QR_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_QR_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_QR_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_QR_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_QR_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_QR_Serial_Internal.hpp index 8137f6afbe..729604f6c3 100644 --- a/batched/dense/impl/KokkosBatched_QR_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_QR_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_QR_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_QR_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_QR_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_QR_TeamVector_Impl.hpp index db78add3c5..78d6e226a8 100644 --- a/batched/dense/impl/KokkosBatched_QR_TeamVector_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_QR_TeamVector_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_QR_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_QR_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_QR_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_QR_TeamVector_Internal.hpp index fa16f194d7..312feba997 100644 --- a/batched/dense/impl/KokkosBatched_QR_TeamVector_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_QR_TeamVector_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_QR_TEAMVECTOR_INTERNAL_HPP__ #define __KOKKOSBATCHED_QR_TEAMVECTOR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Impl.hpp index a08ab80491..4f293f12cf 100644 --- a/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_QR_WITH_COLUMNPIVOTING_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_QR_WITH_COLUMNPIVOTING_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Internal.hpp index c598a30931..26efb70c77 100644 --- a/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_QR_WithColumnPivoting_TeamVector_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_QR_WITH_COLUMNPIVOTING_TEAMVECTOR_INTERNAL_HPP__ #define __KOKKOSBATCHED_QR_WITH_COLUMNPIVOTING_TEAMVECTOR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_RightEigenvectorFromSchur_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_RightEigenvectorFromSchur_Serial_Internal.hpp index d2f7fe0784..2eeb3ccbed 100644 --- a/batched/dense/impl/KokkosBatched_RightEigenvectorFromSchur_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_RightEigenvectorFromSchur_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_RIGHT_EIGENVECTOR_FROM_SCHUR_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_RIGHT_EIGENVECTOR_FROM_SCHUR_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_SVD_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_SVD_Serial_Impl.hpp index 25ad92ffad..5a2cc638c4 100644 --- a/batched/dense/impl/KokkosBatched_SVD_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_SVD_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SVD_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_SVD_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_SVD_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_SVD_Serial_Internal.hpp index 446ba50c03..c9fd0417f6 100644 --- a/batched/dense/impl/KokkosBatched_SVD_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_SVD_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SVD_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_SVD_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Schur2x2_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Schur2x2_Serial_Internal.hpp index 3c5ccf0942..9e305186df 100644 --- a/batched/dense/impl/KokkosBatched_Schur2x2_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Schur2x2_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SCHUR2X2_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_SCHUR2X2_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Schur_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Schur_Serial_Internal.hpp index 9a0bacd835..2ff19975fc 100644 --- a/batched/dense/impl/KokkosBatched_Schur_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Schur_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SCHUR_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_SCHUR_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_SetIdentity_Impl.hpp b/batched/dense/impl/KokkosBatched_SetIdentity_Impl.hpp index 37db69b968..e826c4cbb7 100644 --- a/batched/dense/impl/KokkosBatched_SetIdentity_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_SetIdentity_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SET_IDENTITY_IMPL_HPP__ #define __KOKKOSBATCHED_SET_IDENTITY_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_SetIdentity_Internal.hpp b/batched/dense/impl/KokkosBatched_SetIdentity_Internal.hpp index c9ec973500..7a89767526 100644 --- a/batched/dense/impl/KokkosBatched_SetIdentity_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_SetIdentity_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SET_IDENTITY_INTERNAL_HPP__ #define __KOKKOSBATCHED_SET_IDENTITY_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_SetTriangular_Internal.hpp b/batched/dense/impl/KokkosBatched_SetTriangular_Internal.hpp index cb8de1102e..844c3f72c5 100644 --- a/batched/dense/impl/KokkosBatched_SetTriangular_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_SetTriangular_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SET_TRIANGULAR_INTERNAL_HPP__ #define __KOKKOSBATCHED_SET_TRIANGULAR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_ShiftedTrsv_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_ShiftedTrsv_Serial_Internal.hpp index 03838dfae5..2e356f818e 100644 --- a/batched/dense/impl/KokkosBatched_ShiftedTrsv_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_ShiftedTrsv_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SHIFTED_TRSV_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_SHIFTED_TRSV_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Impl.hpp index aad14f645e..4f6f81216d 100644 --- a/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SOLVE_UTV_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_SOLVE_UTV_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Internal.hpp index 88d0bfe561..71050504aa 100644 --- a/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_SolveUTV_TeamVector_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SOLVE_UTV_TEAMVECTOR_INTERNAL_HPP__ #define __KOKKOSBATCHED_SOLVE_UTV_TEAMVECTOR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trsm_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Trsm_Serial_Impl.hpp index 765b30d3e7..268df195ce 100644 --- a/batched/dense/impl/KokkosBatched_Trsm_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Trsm_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSM_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_TRSM_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trsm_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Trsm_Serial_Internal.hpp index b29b54931f..a44943e5d6 100644 --- a/batched/dense/impl/KokkosBatched_Trsm_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Trsm_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSM_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_TRSM_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Impl.hpp index 92ce1493e9..dbaba7fc6c 100644 --- a/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSM_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_TRSM_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Internal.hpp index 08819e8c18..3ee13f0b80 100644 --- a/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Trsm_TeamVector_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSM_TEAMVECTOR_INTERNAL_HPP__ #define __KOKKOSBATCHED_TRSM_TEAMVECTOR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trsm_Team_Impl.hpp b/batched/dense/impl/KokkosBatched_Trsm_Team_Impl.hpp index 13684cee80..41fe47a35e 100644 --- a/batched/dense/impl/KokkosBatched_Trsm_Team_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Trsm_Team_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSM_TEAM_IMPL_HPP__ #define __KOKKOSBATCHED_TRSM_TEAM_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trsm_Team_Internal.hpp b/batched/dense/impl/KokkosBatched_Trsm_Team_Internal.hpp index f9e2bed8f8..a880186ae9 100644 --- a/batched/dense/impl/KokkosBatched_Trsm_Team_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Trsm_Team_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSM_TEAM_INTERNAL_HPP__ #define __KOKKOSBATCHED_TRSM_TEAM_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trsv_Serial_Impl.hpp b/batched/dense/impl/KokkosBatched_Trsv_Serial_Impl.hpp index 6e26b0fec1..0fc375a7b2 100644 --- a/batched/dense/impl/KokkosBatched_Trsv_Serial_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Trsv_Serial_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSV_SERIAL_IMPL_HPP__ #define __KOKKOSBATCHED_TRSV_SERIAL_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trsv_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_Trsv_Serial_Internal.hpp index 69570da623..3ae206cc09 100644 --- a/batched/dense/impl/KokkosBatched_Trsv_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Trsv_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSV_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_TRSV_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Impl.hpp index 4d4d114840..8e14b5ef37 100644 --- a/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSV_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_TRSV_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Internal.hpp index b0da8f1f2d..40bca5a64a 100644 --- a/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Trsv_TeamVector_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSV_TEAMVECTOR_INTERNAL_HPP__ #define __KOKKOSBATCHED_TRSV_TEAMVECTOR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trsv_Team_Impl.hpp b/batched/dense/impl/KokkosBatched_Trsv_Team_Impl.hpp index 3fb6be6703..7f370c1f01 100644 --- a/batched/dense/impl/KokkosBatched_Trsv_Team_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_Trsv_Team_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSV_TEAM_IMPL_HPP__ #define __KOKKOSBATCHED_TRSV_TEAM_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Trsv_Team_Internal.hpp b/batched/dense/impl/KokkosBatched_Trsv_Team_Internal.hpp index 5583b58537..600a0c6e81 100644 --- a/batched/dense/impl/KokkosBatched_Trsv_Team_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_Trsv_Team_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSV_TEAM_INTERNAL_HPP__ #define __KOKKOSBATCHED_TRSV_TEAM_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_UTV_TeamVector_Impl.hpp b/batched/dense/impl/KokkosBatched_UTV_TeamVector_Impl.hpp index 2f1c075ecd..b57a145ccb 100644 --- a/batched/dense/impl/KokkosBatched_UTV_TeamVector_Impl.hpp +++ b/batched/dense/impl/KokkosBatched_UTV_TeamVector_Impl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_UTV_TEAMVECTOR_IMPL_HPP__ #define __KOKKOSBATCHED_UTV_TEAMVECTOR_IMPL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_UTV_TeamVector_Internal.hpp b/batched/dense/impl/KokkosBatched_UTV_TeamVector_Internal.hpp index c8a84a974f..1066467414 100644 --- a/batched/dense/impl/KokkosBatched_UTV_TeamVector_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_UTV_TeamVector_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_UTV_TEAMVECTOR_INTERNAL_HPP__ #define __KOKKOSBATCHED_UTV_TEAMVECTOR_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_UpdateGivens_Internal.hpp b/batched/dense/impl/KokkosBatched_UpdateGivens_Internal.hpp index 15cae3936f..54e2791dbb 100644 --- a/batched/dense/impl/KokkosBatched_UpdateGivens_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_UpdateGivens_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_UPDATE_GIVENS_INTERNAL_HPP__ #define __KOKKOSBATCHED_UPDATE_GIVENS_INTERNAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Vector_SIMD_Arith.hpp b/batched/dense/impl/KokkosBatched_Vector_SIMD_Arith.hpp index 90bf2e4dc6..94f662a0a8 100644 --- a/batched/dense/impl/KokkosBatched_Vector_SIMD_Arith.hpp +++ b/batched/dense/impl/KokkosBatched_Vector_SIMD_Arith.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_VECTOR_SIMD_ARITH_HPP__ #define __KOKKOSBATCHED_VECTOR_SIMD_ARITH_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Vector_SIMD_Logical.hpp b/batched/dense/impl/KokkosBatched_Vector_SIMD_Logical.hpp index 23f20490db..c8c07e97c4 100644 --- a/batched/dense/impl/KokkosBatched_Vector_SIMD_Logical.hpp +++ b/batched/dense/impl/KokkosBatched_Vector_SIMD_Logical.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_VECTOR_SIMD_LOGICAL_HPP__ #define __KOKKOSBATCHED_VECTOR_SIMD_LOGICAL_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Vector_SIMD_Math.hpp b/batched/dense/impl/KokkosBatched_Vector_SIMD_Math.hpp index fca23e0a06..19f4fcb54f 100644 --- a/batched/dense/impl/KokkosBatched_Vector_SIMD_Math.hpp +++ b/batched/dense/impl/KokkosBatched_Vector_SIMD_Math.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_VECTOR_SIMD_MATH_HPP__ #define __KOKKOSBATCHED_VECTOR_SIMD_MATH_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Vector_SIMD_Misc.hpp b/batched/dense/impl/KokkosBatched_Vector_SIMD_Misc.hpp index a07d8ab1cc..a95a752779 100644 --- a/batched/dense/impl/KokkosBatched_Vector_SIMD_Misc.hpp +++ b/batched/dense/impl/KokkosBatched_Vector_SIMD_Misc.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_VECTOR_SIMD_MISC_HPP__ #define __KOKKOSBATCHED_VECTOR_SIMD_MISC_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Vector_SIMD_Relation.hpp b/batched/dense/impl/KokkosBatched_Vector_SIMD_Relation.hpp index 4283d77d9c..d49c6f35f9 100644 --- a/batched/dense/impl/KokkosBatched_Vector_SIMD_Relation.hpp +++ b/batched/dense/impl/KokkosBatched_Vector_SIMD_Relation.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_VECTOR_SIMD_RELATION_HPP__ #define __KOKKOSBATCHED_VECTOR_SIMD_RELATION_HPP__ diff --git a/batched/dense/impl/KokkosBatched_Vector_SIMD_View.hpp b/batched/dense/impl/KokkosBatched_Vector_SIMD_View.hpp index 90a8528c4f..fb0c9b1f48 100644 --- a/batched/dense/impl/KokkosBatched_Vector_SIMD_View.hpp +++ b/batched/dense/impl/KokkosBatched_Vector_SIMD_View.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_VECTOR_SIMD_VIEW_HPP__ #define __KOKKOSBATCHED_VECTOR_SIMD_VIEW_HPP__ diff --git a/batched/dense/impl/KokkosBatched_WilkinsonShift_Serial_Internal.hpp b/batched/dense/impl/KokkosBatched_WilkinsonShift_Serial_Internal.hpp index 3b231d1412..6b90b6a962 100644 --- a/batched/dense/impl/KokkosBatched_WilkinsonShift_Serial_Internal.hpp +++ b/batched/dense/impl/KokkosBatched_WilkinsonShift_Serial_Internal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_WILKINSON_SHIFT_SERIAL_INTERNAL_HPP__ #define __KOKKOSBATCHED_WILKINSON_SHIFT_SERIAL_INTERNAL_HPP__ diff --git a/batched/dense/src/KokkosBatched_AddRadial_Decl.hpp b/batched/dense/src/KokkosBatched_AddRadial_Decl.hpp index f6004deebc..6b75a11dc7 100644 --- a/batched/dense/src/KokkosBatched_AddRadial_Decl.hpp +++ b/batched/dense/src/KokkosBatched_AddRadial_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_ADD_RADIAL_DECL_HPP__ #define __KOKKOSBATCHED_ADD_RADIAL_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_ApplyHouseholder_Decl.hpp b/batched/dense/src/KokkosBatched_ApplyHouseholder_Decl.hpp index 6a4659a01b..3fe51f3138 100644 --- a/batched/dense/src/KokkosBatched_ApplyHouseholder_Decl.hpp +++ b/batched/dense/src/KokkosBatched_ApplyHouseholder_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_HOUSEHOLDER_DECL_HPP__ #define __KOKKOSBATCHED_APPLY_HOUSEHOLDER_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_ApplyPivot_Decl.hpp b/batched/dense/src/KokkosBatched_ApplyPivot_Decl.hpp index d37cfbb8d8..fb9bef60ae 100644 --- a/batched/dense/src/KokkosBatched_ApplyPivot_Decl.hpp +++ b/batched/dense/src/KokkosBatched_ApplyPivot_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_PIVOT_DECL_HPP__ #define __KOKKOSBATCHED_APPLY_PIVOT_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_ApplyQ_Decl.hpp b/batched/dense/src/KokkosBatched_ApplyQ_Decl.hpp index 11258e7cb9..177c338a98 100644 --- a/batched/dense/src/KokkosBatched_ApplyQ_Decl.hpp +++ b/batched/dense/src/KokkosBatched_ApplyQ_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_APPLY_Q_DECL_HPP__ #define __KOKKOSBATCHED_APPLY_Q_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_Copy_Decl.hpp b/batched/dense/src/KokkosBatched_Copy_Decl.hpp index af240c7d8b..07e6ea42da 100644 --- a/batched/dense/src/KokkosBatched_Copy_Decl.hpp +++ b/batched/dense/src/KokkosBatched_Copy_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_COPY_DECL_HPP__ #define __KOKKOSBATCHED_COPY_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_Eigendecomposition_Decl.hpp b/batched/dense/src/KokkosBatched_Eigendecomposition_Decl.hpp index 3a57844f5b..4ba24d519b 100644 --- a/batched/dense/src/KokkosBatched_Eigendecomposition_Decl.hpp +++ b/batched/dense/src/KokkosBatched_Eigendecomposition_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_EIGENDECOMPOSITION_DECL_HPP__ #define __KOKKOSBATCHED_EIGENDECOMPOSITION_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_Gemv_Decl.hpp b/batched/dense/src/KokkosBatched_Gemv_Decl.hpp index 303414f187..825efa9dc5 100644 --- a/batched/dense/src/KokkosBatched_Gemv_Decl.hpp +++ b/batched/dense/src/KokkosBatched_Gemv_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_GEMV_DECL_HPP__ #define __KOKKOSBATCHED_GEMV_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_Householder_Decl.hpp b/batched/dense/src/KokkosBatched_Householder_Decl.hpp index e3a146f1d8..6d749bd73a 100644 --- a/batched/dense/src/KokkosBatched_Householder_Decl.hpp +++ b/batched/dense/src/KokkosBatched_Householder_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_HOUSEHOLDER_DECL_HPP__ #define __KOKKOSBATCHED_HOUSEHOLDER_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_InnerGemmFixA_Decl.hpp b/batched/dense/src/KokkosBatched_InnerGemmFixA_Decl.hpp index de44fc10cc..90f2cdb643 100644 --- a/batched/dense/src/KokkosBatched_InnerGemmFixA_Decl.hpp +++ b/batched/dense/src/KokkosBatched_InnerGemmFixA_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_INNER_GEMM_FIX_A_DECL_HPP__ #define __KOKKOSBATCHED_INNER_GEMM_FIX_A_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_InnerGemmFixB_Decl.hpp b/batched/dense/src/KokkosBatched_InnerGemmFixB_Decl.hpp index a1e4a2caf4..67d968a356 100644 --- a/batched/dense/src/KokkosBatched_InnerGemmFixB_Decl.hpp +++ b/batched/dense/src/KokkosBatched_InnerGemmFixB_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_INNER_GEMM_FIX_B_DECL_HPP__ #define __KOKKOSBATCHED_INNER_GEMM_FIX_B_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_InnerGemmFixC_Decl.hpp b/batched/dense/src/KokkosBatched_InnerGemmFixC_Decl.hpp index a694609731..64d00845ee 100644 --- a/batched/dense/src/KokkosBatched_InnerGemmFixC_Decl.hpp +++ b/batched/dense/src/KokkosBatched_InnerGemmFixC_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_INNER_GEMM_FIX_C_DECL_HPP__ #define __KOKKOSBATCHED_INNER_GEMM_FIX_C_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_InnerLU_Decl.hpp b/batched/dense/src/KokkosBatched_InnerLU_Decl.hpp index 484377ffdc..d0d50a146c 100644 --- a/batched/dense/src/KokkosBatched_InnerLU_Decl.hpp +++ b/batched/dense/src/KokkosBatched_InnerLU_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_INNER_LU_DECL_HPP__ #define __KOKKOSBATCHED_INNER_LU_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_InnerTrsm_Decl.hpp b/batched/dense/src/KokkosBatched_InnerTrsm_Decl.hpp index a78df609b7..22395c9201 100644 --- a/batched/dense/src/KokkosBatched_InnerTrsm_Decl.hpp +++ b/batched/dense/src/KokkosBatched_InnerTrsm_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_INNER_TRSM_DECL_HPP__ #define __KOKKOSBATCHED_INNER_TRSM_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_InverseLU_Decl.hpp b/batched/dense/src/KokkosBatched_InverseLU_Decl.hpp index 93dbf44bdf..e28a0151ed 100644 --- a/batched/dense/src/KokkosBatched_InverseLU_Decl.hpp +++ b/batched/dense/src/KokkosBatched_InverseLU_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_INVERSELU_DECL_HPP__ #define __KOKKOSBATCHED_INVERSELU_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_LU_Decl.hpp b/batched/dense/src/KokkosBatched_LU_Decl.hpp index 9fa2e2b6e3..fcba6e20f8 100644 --- a/batched/dense/src/KokkosBatched_LU_Decl.hpp +++ b/batched/dense/src/KokkosBatched_LU_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_LU_DECL_HPP__ #define __KOKKOSBATCHED_LU_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_QR_Decl.hpp b/batched/dense/src/KokkosBatched_QR_Decl.hpp index 2888aefa8c..993e9345fb 100644 --- a/batched/dense/src/KokkosBatched_QR_Decl.hpp +++ b/batched/dense/src/KokkosBatched_QR_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_QR_DECL_HPP__ #define __KOKKOSBATCHED_QR_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_QR_WithColumnPivoting_Decl.hpp b/batched/dense/src/KokkosBatched_QR_WithColumnPivoting_Decl.hpp index 38ea0e4ba0..134a97ed73 100644 --- a/batched/dense/src/KokkosBatched_QR_WithColumnPivoting_Decl.hpp +++ b/batched/dense/src/KokkosBatched_QR_WithColumnPivoting_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_QR_WITH_COLUMNPIVOTING_DECL_HPP__ #define __KOKKOSBATCHED_QR_WITH_COLUMNPIVOTING_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_SVD_Decl.hpp b/batched/dense/src/KokkosBatched_SVD_Decl.hpp index 2e154385c2..c5dc5805d9 100644 --- a/batched/dense/src/KokkosBatched_SVD_Decl.hpp +++ b/batched/dense/src/KokkosBatched_SVD_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SVD_DECL_HPP__ #define __KOKKOSBATCHED_SVD_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_Scale_Decl.hpp b/batched/dense/src/KokkosBatched_Scale_Decl.hpp index f0675892fc..dbb9a43ffb 100644 --- a/batched/dense/src/KokkosBatched_Scale_Decl.hpp +++ b/batched/dense/src/KokkosBatched_Scale_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SCALE_DECL_HPP__ #define __KOKKOSBATCHED_SCALE_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_SetIdentity_Decl.hpp b/batched/dense/src/KokkosBatched_SetIdentity_Decl.hpp index 3f646475bd..b78d3e7b05 100644 --- a/batched/dense/src/KokkosBatched_SetIdentity_Decl.hpp +++ b/batched/dense/src/KokkosBatched_SetIdentity_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SET_IDENTITY_DECL_HPP__ #define __KOKKOSBATCHED_SET_IDENTITY_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_Set_Decl.hpp b/batched/dense/src/KokkosBatched_Set_Decl.hpp index fd67cdc99b..ebddb72a4a 100644 --- a/batched/dense/src/KokkosBatched_Set_Decl.hpp +++ b/batched/dense/src/KokkosBatched_Set_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SET_DECL_HPP__ #define __KOKKOSBATCHED_SET_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_SolveLU_Decl.hpp b/batched/dense/src/KokkosBatched_SolveLU_Decl.hpp index 5ba0b679e8..8e731e2666 100644 --- a/batched/dense/src/KokkosBatched_SolveLU_Decl.hpp +++ b/batched/dense/src/KokkosBatched_SolveLU_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SOLVELU_DECL_HPP__ #define __KOKKOSBATCHED_SOLVELU_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_SolveUTV_Decl.hpp b/batched/dense/src/KokkosBatched_SolveUTV_Decl.hpp index 069a1f3c48..e55836de6c 100644 --- a/batched/dense/src/KokkosBatched_SolveUTV_Decl.hpp +++ b/batched/dense/src/KokkosBatched_SolveUTV_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_SOLVE_UTV_DECL_HPP__ #define __KOKKOSBATCHED_SOLVE_UTV_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_Trsm_Decl.hpp b/batched/dense/src/KokkosBatched_Trsm_Decl.hpp index 1239ba1de8..e0aee4659f 100644 --- a/batched/dense/src/KokkosBatched_Trsm_Decl.hpp +++ b/batched/dense/src/KokkosBatched_Trsm_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSM_DECL_HPP__ #define __KOKKOSBATCHED_TRSM_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_Trsv_Decl.hpp b/batched/dense/src/KokkosBatched_Trsv_Decl.hpp index 3e5a35b058..ed9f5cca26 100644 --- a/batched/dense/src/KokkosBatched_Trsv_Decl.hpp +++ b/batched/dense/src/KokkosBatched_Trsv_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_TRSV_DECL_HPP__ #define __KOKKOSBATCHED_TRSV_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_UTV_Decl.hpp b/batched/dense/src/KokkosBatched_UTV_Decl.hpp index 60cc51faed..792236a14f 100644 --- a/batched/dense/src/KokkosBatched_UTV_Decl.hpp +++ b/batched/dense/src/KokkosBatched_UTV_Decl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_UTV_DECL_HPP__ #define __KOKKOSBATCHED_UTV_DECL_HPP__ diff --git a/batched/dense/src/KokkosBatched_Vector.hpp b/batched/dense/src/KokkosBatched_Vector.hpp index 5562953ca9..30b8677d17 100644 --- a/batched/dense/src/KokkosBatched_Vector.hpp +++ b/batched/dense/src/KokkosBatched_Vector.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_VECTOR_HPP__ #define __KOKKOSBATCHED_VECTOR_HPP__ diff --git a/batched/dense/src/KokkosBatched_Vector_SIMD.hpp b/batched/dense/src/KokkosBatched_Vector_SIMD.hpp index 2b1951fca3..e938198467 100644 --- a/batched/dense/src/KokkosBatched_Vector_SIMD.hpp +++ b/batched/dense/src/KokkosBatched_Vector_SIMD.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef __KOKKOSBATCHED_VECTOR_SIMD_HPP__ #define __KOKKOSBATCHED_VECTOR_SIMD_HPP__ diff --git a/batched/dense/unit_test/Test_Batched_BatchedGemm.hpp b/batched/dense/unit_test/Test_Batched_BatchedGemm.hpp index 2d38dd8076..746be07eb7 100644 --- a/batched/dense/unit_test/Test_Batched_BatchedGemm.hpp +++ b/batched/dense/unit_test/Test_Batched_BatchedGemm.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include "gtest/gtest.h" #include "Kokkos_Core.hpp" #include "Kokkos_Random.hpp" diff --git a/batched/dense/unit_test/Test_Batched_BatchedGemm_Complex.hpp b/batched/dense/unit_test/Test_Batched_BatchedGemm_Complex.hpp index ddbb8dbc80..73ff26a8a7 100644 --- a/batched/dense/unit_test/Test_Batched_BatchedGemm_Complex.hpp +++ b/batched/dense/unit_test/Test_Batched_BatchedGemm_Complex.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #if defined(KOKKOSKERNELS_INST_COMPLEX_FLOAT) /********************* BatchLayout::Left *********************/ TEST_F(TestCategory, batched_scalar_batched_gemm_nt_nt_scomplex_scomplex_left) { diff --git a/batched/dense/unit_test/Test_Batched_BatchedGemm_Real.hpp b/batched/dense/unit_test/Test_Batched_BatchedGemm_Real.hpp index f816839258..3bc48c1aaf 100644 --- a/batched/dense/unit_test/Test_Batched_BatchedGemm_Real.hpp +++ b/batched/dense/unit_test/Test_Batched_BatchedGemm_Real.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #if defined(KOKKOS_BHALF_T_IS_FLOAT) /********************* BatchLayout::Left *********************/ TEST_F(TestCategory, batched_scalar_batched_gemm_nt_nt_bhalf_bhalf_left) { diff --git a/batched/dense/unit_test/Test_Batched_Dense.hpp b/batched/dense/unit_test/Test_Batched_Dense.hpp index 2cb6c07be4..cf9b3c23f4 100644 --- a/batched/dense/unit_test/Test_Batched_Dense.hpp +++ b/batched/dense/unit_test/Test_Batched_Dense.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_BATCHED_DENSE_HPP #define TEST_BATCHED_DENSE_HPP diff --git a/batched/dense/unit_test/Test_Batched_DenseUtils.hpp b/batched/dense/unit_test/Test_Batched_DenseUtils.hpp index d355159a9a..6a96bd193a 100644 --- a/batched/dense/unit_test/Test_Batched_DenseUtils.hpp +++ b/batched/dense/unit_test/Test_Batched_DenseUtils.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_BATCHED_DENSE_HELPER_HPP #define TEST_BATCHED_DENSE_HELPER_HPP diff --git a/batched/dense/unit_test/Test_Batched_SerialAxpy.hpp b/batched/dense/unit_test/Test_Batched_SerialAxpy.hpp index 0fa1c99935..ebefbbabd2 100644 --- a/batched/dense/unit_test/Test_Batched_SerialAxpy.hpp +++ b/batched/dense/unit_test/Test_Batched_SerialAxpy.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kim Liegeois (knliege@sandia.gov) #include "gtest/gtest.h" diff --git a/batched/dense/unit_test/Test_Batched_SerialAxpy_Complex.hpp b/batched/dense/unit_test/Test_Batched_SerialAxpy_Complex.hpp index 9603080699..de677b1045 100644 --- a/batched/dense/unit_test/Test_Batched_SerialAxpy_Complex.hpp +++ b/batched/dense/unit_test/Test_Batched_SerialAxpy_Complex.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) TEST_F(TestCategory, batched_scalar_serial_axpy_nt_dcomplex_dcomplex) { diff --git a/batched/dense/unit_test/Test_Batched_SerialAxpy_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialAxpy_Real.hpp index 6694b2bcbe..078e4bfa8f 100644 --- a/batched/dense/unit_test/Test_Batched_SerialAxpy_Real.hpp +++ b/batched/dense/unit_test/Test_Batched_SerialAxpy_Real.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #if defined(KOKKOSKERNELS_INST_FLOAT) TEST_F(TestCategory, batched_scalar_serial_axpy_nt_float_float) { diff --git a/batched/dense/unit_test/Test_Batched_SerialEigendecomposition.hpp b/batched/dense/unit_test/Test_Batched_SerialEigendecomposition.hpp index 1572f4cb8b..5e90d5ae45 100644 --- a/batched/dense/unit_test/Test_Batched_SerialEigendecomposition.hpp +++ b/batched/dense/unit_test/Test_Batched_SerialEigendecomposition.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) /* diff --git a/batched/dense/unit_test/Test_Batched_SerialEigendecomposition_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialEigendecomposition_Real.hpp index b9b9239c01..2e82468f8b 100644 --- a/batched/dense/unit_test/Test_Batched_SerialEigendecomposition_Real.hpp +++ b/batched/dense/unit_test/Test_Batched_SerialEigendecomposition_Real.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /* #if defined(KOKKOSKERNELS_INST_FLOAT) TEST_F( TestCategory, batched_scalar_serial_eigendecomposition_float ) { diff --git a/batched/dense/unit_test/Test_Batched_SerialGemm.hpp b/batched/dense/unit_test/Test_Batched_SerialGemm.hpp index a7ec3db6a9..c8f745b006 100644 --- a/batched/dense/unit_test/Test_Batched_SerialGemm.hpp +++ b/batched/dense/unit_test/Test_Batched_SerialGemm.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) #include "gtest/gtest.h" diff --git a/batched/dense/unit_test/Test_Batched_SerialGemm_Complex.hpp b/batched/dense/unit_test/Test_Batched_SerialGemm_Complex.hpp index 225b043f71..01988c9e51 100644 --- a/batched/dense/unit_test/Test_Batched_SerialGemm_Complex.hpp +++ b/batched/dense/unit_test/Test_Batched_SerialGemm_Complex.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) /// dcomplex, dcomplex diff --git a/batched/dense/unit_test/Test_Batched_SerialGemm_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialGemm_Real.hpp index c10e6c0b78..c32556c229 100644 --- a/batched/dense/unit_test/Test_Batched_SerialGemm_Real.hpp +++ b/batched/dense/unit_test/Test_Batched_SerialGemm_Real.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #if defined(KOKKOS_BHALF_T_IS_FLOAT) TEST_F(TestCategory, batched_scalar_serial_gemm_nt_nt_bhalf_bhalf) { typedef ::Test::Gemm::ParamTag diff --git a/batched/dense/unit_test/Test_Batched_SerialGesv.hpp b/batched/dense/unit_test/Test_Batched_SerialGesv.hpp index 7f9723a4b9..f487515a7c 100644 --- a/batched/dense/unit_test/Test_Batched_SerialGesv.hpp +++ b/batched/dense/unit_test/Test_Batched_SerialGesv.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kim Liegeois (knliege@sandia.gov) #include "gtest/gtest.h" diff --git a/batched/dense/unit_test/Test_Batched_SerialGesv_Real.hpp b/batched/dense/unit_test/Test_Batched_SerialGesv_Real.hpp index 84a630efa3..2b2493506e 100644 --- a/batched/dense/unit_test/Test_Batched_SerialGesv_Real.hpp +++ b/batched/dense/unit_test/Test_Batched_SerialGesv_Real.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #if defined(KOKKOSKERNELS_INST_FLOAT) TEST_F(TestCategory, batched_scalar_serial_gesv_static_pivoting_float) { test_batched_gesv diff --git a/batched/dense/unit_test/Test_Batched_TeamGesv.hpp b/batched/dense/unit_test/Test_Batched_TeamGesv.hpp index a7acfdcf9b..2ecdb60bcf 100644 --- a/batched/dense/unit_test/Test_Batched_TeamGesv.hpp +++ b/batched/dense/unit_test/Test_Batched_TeamGesv.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kim Liegeois (knliege@sandia.gov) #include "gtest/gtest.h" diff --git a/batched/dense/unit_test/Test_Batched_TeamGesv_Real.hpp b/batched/dense/unit_test/Test_Batched_TeamGesv_Real.hpp index 8dca15a4a2..10d1be9c38 100644 --- a/batched/dense/unit_test/Test_Batched_TeamGesv_Real.hpp +++ b/batched/dense/unit_test/Test_Batched_TeamGesv_Real.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #if defined(KOKKOSKERNELS_INST_FLOAT) TEST_F(TestCategory, batched_scalar_team_gesv_static_pivoting_float) { test_batched_team_gesv #include #include diff --git a/blas/tpls/KokkosBlas_Cuda_tpl.hpp b/blas/tpls/KokkosBlas_Cuda_tpl.hpp index 9e0bff4c55..cf51341471 100644 --- a/blas/tpls/KokkosBlas_Cuda_tpl.hpp +++ b/blas/tpls/KokkosBlas_Cuda_tpl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef KOKKOSBLAS_CUDA_TPL_HPP_ #define KOKKOSBLAS_CUDA_TPL_HPP_ diff --git a/blas/tpls/KokkosBlas_Host_tpl.cpp b/blas/tpls/KokkosBlas_Host_tpl.cpp index b847de087e..24276f4a77 100644 --- a/blas/tpls/KokkosBlas_Host_tpl.cpp +++ b/blas/tpls/KokkosBlas_Host_tpl.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \file KokkosBlas_Host_tpl.cpp /// \brief BLAS wrapper for host tpls /// \author Kyungjoo Kim (kyukim@sandia.gov) diff --git a/blas/tpls/KokkosBlas_Rocm_tpl.cpp b/blas/tpls/KokkosBlas_Rocm_tpl.cpp index cff2373a32..3cbe93184e 100644 --- a/blas/tpls/KokkosBlas_Rocm_tpl.cpp +++ b/blas/tpls/KokkosBlas_Rocm_tpl.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/tpls/KokkosBlas_Rocm_tpl.hpp b/blas/tpls/KokkosBlas_Rocm_tpl.hpp index f5ba380d11..6f89d349c9 100644 --- a/blas/tpls/KokkosBlas_Rocm_tpl.hpp +++ b/blas/tpls/KokkosBlas_Rocm_tpl.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef KOKKOSBLAS_ROCM_TPL_HPP_ #define KOKKOSBLAS_ROCM_TPL_HPP_ diff --git a/blas/unit_test/Test_Blas.hpp b/blas/unit_test/Test_Blas.hpp index db65c05f26..cfa2e41c3e 100644 --- a/blas/unit_test/Test_Blas.hpp +++ b/blas/unit_test/Test_Blas.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_BLAS_HPP #define TEST_BLAS_HPP diff --git a/blas/unit_test/Test_Blas1_abs.hpp b/blas/unit_test/Test_Blas1_abs.hpp index eba209b26f..ff91087613 100644 --- a/blas/unit_test/Test_Blas1_abs.hpp +++ b/blas/unit_test/Test_Blas1_abs.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_asum.hpp b/blas/unit_test/Test_Blas1_asum.hpp index 56d9042379..624bfc9d09 100644 --- a/blas/unit_test/Test_Blas1_asum.hpp +++ b/blas/unit_test/Test_Blas1_asum.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_axpby.hpp b/blas/unit_test/Test_Blas1_axpby.hpp index 8007f88196..5ba19c7ce5 100644 --- a/blas/unit_test/Test_Blas1_axpby.hpp +++ b/blas/unit_test/Test_Blas1_axpby.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_axpy.hpp b/blas/unit_test/Test_Blas1_axpy.hpp index d8fe28dec3..35293652b5 100644 --- a/blas/unit_test/Test_Blas1_axpy.hpp +++ b/blas/unit_test/Test_Blas1_axpy.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_dot.hpp b/blas/unit_test/Test_Blas1_dot.hpp index 83dfd6048c..044a9765d2 100644 --- a/blas/unit_test/Test_Blas1_dot.hpp +++ b/blas/unit_test/Test_Blas1_dot.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_iamax.hpp b/blas/unit_test/Test_Blas1_iamax.hpp index 82f1fc1c76..1619512ceb 100644 --- a/blas/unit_test/Test_Blas1_iamax.hpp +++ b/blas/unit_test/Test_Blas1_iamax.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_mult.hpp b/blas/unit_test/Test_Blas1_mult.hpp index f92c60b570..c922cb295f 100644 --- a/blas/unit_test/Test_Blas1_mult.hpp +++ b/blas/unit_test/Test_Blas1_mult.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_nrm1.hpp b/blas/unit_test/Test_Blas1_nrm1.hpp index 1c476cbf43..7b56dc94b3 100644 --- a/blas/unit_test/Test_Blas1_nrm1.hpp +++ b/blas/unit_test/Test_Blas1_nrm1.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_nrm2.hpp b/blas/unit_test/Test_Blas1_nrm2.hpp index c568b12564..5cbc89488e 100644 --- a/blas/unit_test/Test_Blas1_nrm2.hpp +++ b/blas/unit_test/Test_Blas1_nrm2.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_nrm2_squared.hpp b/blas/unit_test/Test_Blas1_nrm2_squared.hpp index 98c2cf7e8f..ebebd57b9a 100644 --- a/blas/unit_test/Test_Blas1_nrm2_squared.hpp +++ b/blas/unit_test/Test_Blas1_nrm2_squared.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_nrm2w.hpp b/blas/unit_test/Test_Blas1_nrm2w.hpp index cda59c83e4..b87c5ac48d 100644 --- a/blas/unit_test/Test_Blas1_nrm2w.hpp +++ b/blas/unit_test/Test_Blas1_nrm2w.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_nrm2w_squared.hpp b/blas/unit_test/Test_Blas1_nrm2w_squared.hpp index 14f1c90766..3f76c84f30 100644 --- a/blas/unit_test/Test_Blas1_nrm2w_squared.hpp +++ b/blas/unit_test/Test_Blas1_nrm2w_squared.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_nrminf.hpp b/blas/unit_test/Test_Blas1_nrminf.hpp index 8d9aa2d1b2..b827dfa26e 100644 --- a/blas/unit_test/Test_Blas1_nrminf.hpp +++ b/blas/unit_test/Test_Blas1_nrminf.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_reciprocal.hpp b/blas/unit_test/Test_Blas1_reciprocal.hpp index 9f5991ea16..fdec530ee6 100644 --- a/blas/unit_test/Test_Blas1_reciprocal.hpp +++ b/blas/unit_test/Test_Blas1_reciprocal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_rot.hpp b/blas/unit_test/Test_Blas1_rot.hpp index b5510afe7f..7fe079d1aa 100644 --- a/blas/unit_test/Test_Blas1_rot.hpp +++ b/blas/unit_test/Test_Blas1_rot.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include template diff --git a/blas/unit_test/Test_Blas1_rotg.hpp b/blas/unit_test/Test_Blas1_rotg.hpp index 601f63219d..338eaa1b56 100644 --- a/blas/unit_test/Test_Blas1_rotg.hpp +++ b/blas/unit_test/Test_Blas1_rotg.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include namespace Test { diff --git a/blas/unit_test/Test_Blas1_rotm.hpp b/blas/unit_test/Test_Blas1_rotm.hpp index 94c1b01503..c9a09fd915 100644 --- a/blas/unit_test/Test_Blas1_rotm.hpp +++ b/blas/unit_test/Test_Blas1_rotm.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include namespace Test { diff --git a/blas/unit_test/Test_Blas1_rotmg.hpp b/blas/unit_test/Test_Blas1_rotmg.hpp index 55f6a58216..f628505d97 100644 --- a/blas/unit_test/Test_Blas1_rotmg.hpp +++ b/blas/unit_test/Test_Blas1_rotmg.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include namespace Test { diff --git a/blas/unit_test/Test_Blas1_scal.hpp b/blas/unit_test/Test_Blas1_scal.hpp index 904747a051..5fac67417f 100644 --- a/blas/unit_test/Test_Blas1_scal.hpp +++ b/blas/unit_test/Test_Blas1_scal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_sum.hpp b/blas/unit_test/Test_Blas1_sum.hpp index 5ad2ef038b..d2ccd4bf3d 100644 --- a/blas/unit_test/Test_Blas1_sum.hpp +++ b/blas/unit_test/Test_Blas1_sum.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas1_team_abs.hpp b/blas/unit_test/Test_Blas1_team_abs.hpp index 4bfc7a6a4d..318f04c58e 100644 --- a/blas/unit_test/Test_Blas1_team_abs.hpp +++ b/blas/unit_test/Test_Blas1_team_abs.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 04/14/21 // This tests uses KOKKOS_LAMBDA so we need // to make sure that these are enabled in diff --git a/blas/unit_test/Test_Blas1_team_axpby.hpp b/blas/unit_test/Test_Blas1_team_axpby.hpp index 0c67e4515a..e776085a66 100644 --- a/blas/unit_test/Test_Blas1_team_axpby.hpp +++ b/blas/unit_test/Test_Blas1_team_axpby.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 04/14/21 // This tests uses KOKKOS_LAMBDA so we need // to make sure that these are enabled in diff --git a/blas/unit_test/Test_Blas1_team_axpy.hpp b/blas/unit_test/Test_Blas1_team_axpy.hpp index 5bd3f59436..d861da45eb 100644 --- a/blas/unit_test/Test_Blas1_team_axpy.hpp +++ b/blas/unit_test/Test_Blas1_team_axpy.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 04/14/21 // This tests uses KOKKOS_LAMBDA so we need // to make sure that these are enabled in diff --git a/blas/unit_test/Test_Blas1_team_dot.hpp b/blas/unit_test/Test_Blas1_team_dot.hpp index 472bc8ce77..2de9ad8a7a 100644 --- a/blas/unit_test/Test_Blas1_team_dot.hpp +++ b/blas/unit_test/Test_Blas1_team_dot.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 04/14/21 // This tests uses KOKKOS_LAMBDA so we need // to make sure that these are enabled in diff --git a/blas/unit_test/Test_Blas1_team_mult.hpp b/blas/unit_test/Test_Blas1_team_mult.hpp index 90f5f89e54..da8c836130 100644 --- a/blas/unit_test/Test_Blas1_team_mult.hpp +++ b/blas/unit_test/Test_Blas1_team_mult.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 04/14/21 // This tests uses KOKKOS_LAMBDA so we need // to make sure that these are enabled in diff --git a/blas/unit_test/Test_Blas1_team_nrm2.hpp b/blas/unit_test/Test_Blas1_team_nrm2.hpp index 5c356c2d4e..8ac35e5cbc 100644 --- a/blas/unit_test/Test_Blas1_team_nrm2.hpp +++ b/blas/unit_test/Test_Blas1_team_nrm2.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 04/14/21 // This tests uses KOKKOS_LAMBDA so we need // to make sure that these are enabled in diff --git a/blas/unit_test/Test_Blas1_team_scal.hpp b/blas/unit_test/Test_Blas1_team_scal.hpp index 2a03e268b8..a33d5cd930 100644 --- a/blas/unit_test/Test_Blas1_team_scal.hpp +++ b/blas/unit_test/Test_Blas1_team_scal.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 04/14/21 // This tests uses KOKKOS_LAMBDA so we need // to make sure that these are enabled in diff --git a/blas/unit_test/Test_Blas1_team_update.hpp b/blas/unit_test/Test_Blas1_team_update.hpp index b724c1edb3..efb743bc0a 100644 --- a/blas/unit_test/Test_Blas1_team_update.hpp +++ b/blas/unit_test/Test_Blas1_team_update.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 04/14/21 // This tests uses KOKKOS_LAMBDA so we need // to make sure that these are enabled in diff --git a/blas/unit_test/Test_Blas1_update.hpp b/blas/unit_test/Test_Blas1_update.hpp index b4d0f1f2e5..5a0d27cf42 100644 --- a/blas/unit_test/Test_Blas1_update.hpp +++ b/blas/unit_test/Test_Blas1_update.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas2_gemv.hpp b/blas/unit_test/Test_Blas2_gemv.hpp index 34c5a10b43..4e8c53e7e6 100644 --- a/blas/unit_test/Test_Blas2_gemv.hpp +++ b/blas/unit_test/Test_Blas2_gemv.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas2_gemv_util.hpp b/blas/unit_test/Test_Blas2_gemv_util.hpp index 635f02c558..ba0392b2e1 100644 --- a/blas/unit_test/Test_Blas2_gemv_util.hpp +++ b/blas/unit_test/Test_Blas2_gemv_util.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_BLAS2_GEMV_UTIL_HPP #define TEST_BLAS2_GEMV_UTIL_HPP diff --git a/blas/unit_test/Test_Blas2_serial_gemv.hpp b/blas/unit_test/Test_Blas2_serial_gemv.hpp index fd73707c9a..5c1aaf5a67 100644 --- a/blas/unit_test/Test_Blas2_serial_gemv.hpp +++ b/blas/unit_test/Test_Blas2_serial_gemv.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include // for ETI test guards // Note: include serial gemv before util so it knows if CompactMKL is available diff --git a/blas/unit_test/Test_Blas2_team_gemv.hpp b/blas/unit_test/Test_Blas2_team_gemv.hpp index 722aca1938..808532a98e 100644 --- a/blas/unit_test/Test_Blas2_team_gemv.hpp +++ b/blas/unit_test/Test_Blas2_team_gemv.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 04/14/21 // This tests uses KOKKOS_LAMBDA so we need // to make sure that these are enabled in diff --git a/blas/unit_test/Test_Blas2_teamvector_gemv.hpp b/blas/unit_test/Test_Blas2_teamvector_gemv.hpp index 5814541bb2..655a5e2f12 100644 --- a/blas/unit_test/Test_Blas2_teamvector_gemv.hpp +++ b/blas/unit_test/Test_Blas2_teamvector_gemv.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 04/14/21 // This tests uses KOKKOS_LAMBDA so we need // to make sure that these are enabled in diff --git a/blas/unit_test/Test_Blas3_gemm.hpp b/blas/unit_test/Test_Blas3_gemm.hpp index 28697b2a32..c3345ae0d4 100644 --- a/blas/unit_test/Test_Blas3_gemm.hpp +++ b/blas/unit_test/Test_Blas3_gemm.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas3_trmm.hpp b/blas/unit_test/Test_Blas3_trmm.hpp index 9b6f3da1fc..bf44debaf4 100644 --- a/blas/unit_test/Test_Blas3_trmm.hpp +++ b/blas/unit_test/Test_Blas3_trmm.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas3_trsm.hpp b/blas/unit_test/Test_Blas3_trsm.hpp index a8fd3427c1..5857f7a533 100644 --- a/blas/unit_test/Test_Blas3_trsm.hpp +++ b/blas/unit_test/Test_Blas3_trsm.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/Test_Blas_Newton.hpp b/blas/unit_test/Test_Blas_Newton.hpp index 600ba3e0b6..001a6b2395 100644 --- a/blas/unit_test/Test_Blas_Newton.hpp +++ b/blas/unit_test/Test_Blas_Newton.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include diff --git a/blas/unit_test/Test_Blas_gesv.hpp b/blas/unit_test/Test_Blas_gesv.hpp index 3da1e1cb52..207a06db07 100644 --- a/blas/unit_test/Test_Blas_gesv.hpp +++ b/blas/unit_test/Test_Blas_gesv.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 04/15/21 // This test should only be included // in the CUDA backend if TPL MAGMA diff --git a/blas/unit_test/Test_Blas_rocblas.hpp b/blas/unit_test/Test_Blas_rocblas.hpp index e30adceffa..ed68b7a8b6 100644 --- a/blas/unit_test/Test_Blas_rocblas.hpp +++ b/blas/unit_test/Test_Blas_rocblas.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 10/25/21 // Only include this test if compiling // the cuda sparse tests and cuSPARSE diff --git a/blas/unit_test/Test_Blas_trtri.hpp b/blas/unit_test/Test_Blas_trtri.hpp index 1502a56d88..d333b963b4 100644 --- a/blas/unit_test/Test_Blas_trtri.hpp +++ b/blas/unit_test/Test_Blas_trtri.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/blas/unit_test/backends/Test_Cuda_Blas.cpp b/blas/unit_test/backends/Test_Cuda_Blas.cpp index aad770253d..b283a48402 100644 --- a/blas/unit_test/backends/Test_Cuda_Blas.cpp +++ b/blas/unit_test/backends/Test_Cuda_Blas.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_CUDA_BLAS_CPP #define TEST_CUDA_BLAS_CPP diff --git a/blas/unit_test/backends/Test_HIP_Blas.cpp b/blas/unit_test/backends/Test_HIP_Blas.cpp index 55c80296da..8ff3733d97 100644 --- a/blas/unit_test/backends/Test_HIP_Blas.cpp +++ b/blas/unit_test/backends/Test_HIP_Blas.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_HIP_BLAS_CPP #define TEST_HIP_BLAS_CPP diff --git a/blas/unit_test/backends/Test_OpenMPTarget_Blas.cpp b/blas/unit_test/backends/Test_OpenMPTarget_Blas.cpp index d2856cc48e..0020efe6ef 100644 --- a/blas/unit_test/backends/Test_OpenMPTarget_Blas.cpp +++ b/blas/unit_test/backends/Test_OpenMPTarget_Blas.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_OPENMPTARGET_BLAS_CPP #define TEST_OPENMPTARGET_BLAS_CPP diff --git a/blas/unit_test/backends/Test_OpenMP_Blas.cpp b/blas/unit_test/backends/Test_OpenMP_Blas.cpp index 6c573d0574..e151312516 100644 --- a/blas/unit_test/backends/Test_OpenMP_Blas.cpp +++ b/blas/unit_test/backends/Test_OpenMP_Blas.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_OPENMP_BLAS_CPP #define TEST_OPENMP_BLAS_CPP diff --git a/blas/unit_test/backends/Test_SYCL_Blas.cpp b/blas/unit_test/backends/Test_SYCL_Blas.cpp index 089dd2c00d..a1f0f9f72a 100644 --- a/blas/unit_test/backends/Test_SYCL_Blas.cpp +++ b/blas/unit_test/backends/Test_SYCL_Blas.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_SYCL_BLAS_CPP #define TEST_SYCL_BLAS_CPP diff --git a/blas/unit_test/backends/Test_Serial_Blas.cpp b/blas/unit_test/backends/Test_Serial_Blas.cpp index 80be2ca16d..5365d1f8c4 100644 --- a/blas/unit_test/backends/Test_Serial_Blas.cpp +++ b/blas/unit_test/backends/Test_Serial_Blas.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_SERIAL_BLAS_CPP #define TEST_SERIAL_BLAS_CPP diff --git a/blas/unit_test/backends/Test_Threads_Blas.cpp b/blas/unit_test/backends/Test_Threads_Blas.cpp index 59ac046fa6..4c65197191 100644 --- a/blas/unit_test/backends/Test_Threads_Blas.cpp +++ b/blas/unit_test/backends/Test_Threads_Blas.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_THREADS_BLAS_CPP #define TEST_THREADS_BLAS_CPP diff --git a/cmake/compile_tests/armpl.cpp b/cmake/compile_tests/armpl.cpp index 9bb1c48392..ad3721ed6f 100644 --- a/cmake/compile_tests/armpl.cpp +++ b/cmake/compile_tests/armpl.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include int main(void) { diff --git a/cmake/compile_tests/magma.cpp b/cmake/compile_tests/magma.cpp index 588c4608c4..ad88826bea 100644 --- a/cmake/compile_tests/magma.cpp +++ b/cmake/compile_tests/magma.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/cmake/compile_tests/mkl.cpp b/cmake/compile_tests/mkl.cpp index 1b8b3356cc..12b694659f 100644 --- a/cmake/compile_tests/mkl.cpp +++ b/cmake/compile_tests/mkl.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include int main(void) { diff --git a/common/src/dummy.cpp b/common/src/dummy.cpp index e69de29bb2..03eb04f8bd 100644 --- a/common/src/dummy.cpp +++ b/common/src/dummy.cpp @@ -0,0 +1,15 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER diff --git a/common/unit_test/Test_Common.hpp b/common/unit_test/Test_Common.hpp index 9cb8082a7f..9cf686f513 100644 --- a/common/unit_test/Test_Common.hpp +++ b/common/unit_test/Test_Common.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_COMMON_HPP #define TEST_COMMON_HPP diff --git a/common/unit_test/backends/Test_Cuda_Common.cpp b/common/unit_test/backends/Test_Cuda_Common.cpp index 39638b4bc5..95aafda85a 100644 --- a/common/unit_test/backends/Test_Cuda_Common.cpp +++ b/common/unit_test/backends/Test_Cuda_Common.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_CUDA_COMMON_CPP #define TEST_CUDA_COMMON_CPP diff --git a/common/unit_test/backends/Test_HIP_Common.cpp b/common/unit_test/backends/Test_HIP_Common.cpp index 55925c86cf..84b8155adc 100644 --- a/common/unit_test/backends/Test_HIP_Common.cpp +++ b/common/unit_test/backends/Test_HIP_Common.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_HIP_COMMON_CPP #define TEST_HIP_COMMON_CPP diff --git a/common/unit_test/backends/Test_OpenMPTarget_Common.cpp b/common/unit_test/backends/Test_OpenMPTarget_Common.cpp index 27e06ae2e5..2c40183b1e 100644 --- a/common/unit_test/backends/Test_OpenMPTarget_Common.cpp +++ b/common/unit_test/backends/Test_OpenMPTarget_Common.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_OPENMPTARGET_COMMON_CPP #define TEST_OPENMPTARGET_COMMON_CPP diff --git a/common/unit_test/backends/Test_OpenMP_Common.cpp b/common/unit_test/backends/Test_OpenMP_Common.cpp index eb24b2e622..adfe6ed08a 100644 --- a/common/unit_test/backends/Test_OpenMP_Common.cpp +++ b/common/unit_test/backends/Test_OpenMP_Common.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_OPENMP_COMMON_CPP #define TEST_OPENMP_COMMON_CPP diff --git a/common/unit_test/backends/Test_SYCL_Common.cpp b/common/unit_test/backends/Test_SYCL_Common.cpp index ec199cc29f..d8af854957 100644 --- a/common/unit_test/backends/Test_SYCL_Common.cpp +++ b/common/unit_test/backends/Test_SYCL_Common.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_SYCL_COMMON_CPP #define TEST_SYCL_COMMON_CPP diff --git a/common/unit_test/backends/Test_Serial_Common.cpp b/common/unit_test/backends/Test_Serial_Common.cpp index 90320dca36..adab362142 100644 --- a/common/unit_test/backends/Test_Serial_Common.cpp +++ b/common/unit_test/backends/Test_Serial_Common.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_SERIAL_COMMON_CPP #define TEST_SERIAL_COMMON_CPP diff --git a/common/unit_test/backends/Test_Threads_Common.cpp b/common/unit_test/backends/Test_Threads_Common.cpp index 2df10ae2fe..175117560e 100644 --- a/common/unit_test/backends/Test_Threads_Common.cpp +++ b/common/unit_test/backends/Test_Threads_Common.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_THREADS_COMMON_CPP #define TEST_THREADS_COMMON_CPP diff --git a/example/cmake/in-tree/my_program/test.cc b/example/cmake/in-tree/my_program/test.cc index ac9e8a9892..17f37dc7ec 100644 --- a/example/cmake/in-tree/my_program/test.cc +++ b/example/cmake/in-tree/my_program/test.cc @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include int main(int argc, char** argv) { diff --git a/example/cmake/install/my_program/test.cc b/example/cmake/install/my_program/test.cc index ac9e8a9892..17f37dc7ec 100644 --- a/example/cmake/install/my_program/test.cc +++ b/example/cmake/install/my_program/test.cc @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include int main(int argc, char** argv) { diff --git a/example/fenl/KokkosKernels_ETIMacros.hpp b/example/fenl/KokkosKernels_ETIMacros.hpp index 8902f09b68..b459ff67eb 100644 --- a/example/fenl/KokkosKernels_ETIMacros.hpp +++ b/example/fenl/KokkosKernels_ETIMacros.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifdef MAKE_BUILD #ifdef KOKKOS_ENABLE_CUDA #define KOKKOSKERNELS_ETI_MANGLING_TYPEDEFS() \ diff --git a/example/wiki/blas/abs/abs.cpp b/example/wiki/blas/abs/abs.cpp index 8bbe5186c7..d7b3fe200b 100644 --- a/example/wiki/blas/abs/abs.cpp +++ b/example/wiki/blas/abs/abs.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include diff --git a/example/wiki/graph/KokkosGraph_wiki_9pt_stencil.hpp b/example/wiki/graph/KokkosGraph_wiki_9pt_stencil.hpp index 93e5660c07..cadc2a2f76 100644 --- a/example/wiki/graph/KokkosGraph_wiki_9pt_stencil.hpp +++ b/example/wiki/graph/KokkosGraph_wiki_9pt_stencil.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef WIKI_9PT_STENCIL_H #define WIKI_9PT_STENCIL_H diff --git a/example/wiki/graph/KokkosGraph_wiki_coarsening.cpp b/example/wiki/graph/KokkosGraph_wiki_coarsening.cpp index 9fa6adb484..027ee0a057 100644 --- a/example/wiki/graph/KokkosGraph_wiki_coarsening.cpp +++ b/example/wiki/graph/KokkosGraph_wiki_coarsening.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include "KokkosGraph_wiki_9pt_stencil.hpp" #include "KokkosGraph_MIS2.hpp" diff --git a/example/wiki/graph/KokkosGraph_wiki_coloring.cpp b/example/wiki/graph/KokkosGraph_wiki_coloring.cpp index 80a2d2af15..efda8927ba 100644 --- a/example/wiki/graph/KokkosGraph_wiki_coloring.cpp +++ b/example/wiki/graph/KokkosGraph_wiki_coloring.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include "KokkosGraph_wiki_9pt_stencil.hpp" #include "KokkosGraph_Distance1Color.hpp" #include "KokkosGraph_Distance2Color.hpp" diff --git a/example/wiki/graph/KokkosGraph_wiki_mis2.cpp b/example/wiki/graph/KokkosGraph_wiki_mis2.cpp index 2b56af9c96..773930682f 100644 --- a/example/wiki/graph/KokkosGraph_wiki_mis2.cpp +++ b/example/wiki/graph/KokkosGraph_wiki_mis2.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include "KokkosGraph_wiki_9pt_stencil.hpp" #include "KokkosGraph_MIS2.hpp" diff --git a/example/wiki/graph/KokkosGraph_wiki_rcm.cpp b/example/wiki/graph/KokkosGraph_wiki_rcm.cpp index 813318351b..4f411470ad 100644 --- a/example/wiki/graph/KokkosGraph_wiki_rcm.cpp +++ b/example/wiki/graph/KokkosGraph_wiki_rcm.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include "KokkosGraph_wiki_9pt_stencil.hpp" #include "KokkosGraph_RCM.hpp" diff --git a/example/wiki/sparse/KokkosSparse_wiki_crsmatrix.cpp b/example/wiki/sparse/KokkosSparse_wiki_crsmatrix.cpp index 195035e2c7..c8d6c805c1 100644 --- a/example/wiki/sparse/KokkosSparse_wiki_crsmatrix.cpp +++ b/example/wiki/sparse/KokkosSparse_wiki_crsmatrix.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include "Kokkos_Core.hpp" diff --git a/example/wiki/sparse/KokkosSparse_wiki_gauss_seidel.cpp b/example/wiki/sparse/KokkosSparse_wiki_gauss_seidel.cpp index ce171c46bd..3dd8bfd5e5 100644 --- a/example/wiki/sparse/KokkosSparse_wiki_gauss_seidel.cpp +++ b/example/wiki/sparse/KokkosSparse_wiki_gauss_seidel.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include "Kokkos_Core.hpp" #include "KokkosKernels_default_types.hpp" #include "KokkosKernels_Handle.hpp" diff --git a/example/wiki/sparse/KokkosSparse_wiki_spadd.cpp b/example/wiki/sparse/KokkosSparse_wiki_spadd.cpp index 0d4144882f..0e0260de4a 100644 --- a/example/wiki/sparse/KokkosSparse_wiki_spadd.cpp +++ b/example/wiki/sparse/KokkosSparse_wiki_spadd.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include "Kokkos_Core.hpp" #include "KokkosKernels_default_types.hpp" diff --git a/example/wiki/sparse/KokkosSparse_wiki_spgemm.cpp b/example/wiki/sparse/KokkosSparse_wiki_spgemm.cpp index 831cb8ca7a..56a628ffd5 100644 --- a/example/wiki/sparse/KokkosSparse_wiki_spgemm.cpp +++ b/example/wiki/sparse/KokkosSparse_wiki_spgemm.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include "Kokkos_Core.hpp" #include "KokkosKernels_default_types.hpp" diff --git a/example/wiki/sparse/KokkosSparse_wiki_spmv.cpp b/example/wiki/sparse/KokkosSparse_wiki_spmv.cpp index dbf3afaef2..173e25e562 100644 --- a/example/wiki/sparse/KokkosSparse_wiki_spmv.cpp +++ b/example/wiki/sparse/KokkosSparse_wiki_spmv.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include "Kokkos_Core.hpp" #include "KokkosKernels_default_types.hpp" diff --git a/graph/src/KokkosGraph_CoarsenHeuristics.hpp b/graph/src/KokkosGraph_CoarsenHeuristics.hpp index 0b61fc2fa5..1694905167 100644 --- a/graph/src/KokkosGraph_CoarsenHeuristics.hpp +++ b/graph/src/KokkosGraph_CoarsenHeuristics.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #pragma once // exclude from Cuda builds without lambdas enabled #if !defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) diff --git a/graph/unit_test/Test_Graph.hpp b/graph/unit_test/Test_Graph.hpp index ad916cc92a..bb6e4e88af 100644 --- a/graph/unit_test/Test_Graph.hpp +++ b/graph/unit_test/Test_Graph.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_GRAPH_HPP #define TEST_GRAPH_HPP diff --git a/graph/unit_test/backends/Test_Cuda_Graph.cpp b/graph/unit_test/backends/Test_Cuda_Graph.cpp index 61101c66cd..6eba47d69a 100644 --- a/graph/unit_test/backends/Test_Cuda_Graph.cpp +++ b/graph/unit_test/backends/Test_Cuda_Graph.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_CUDA_GRAPH_CPP #define TEST_CUDA_GRAPH_CPP diff --git a/graph/unit_test/backends/Test_HIP_Graph.cpp b/graph/unit_test/backends/Test_HIP_Graph.cpp index 7aa8fdcb99..3942b80bf4 100644 --- a/graph/unit_test/backends/Test_HIP_Graph.cpp +++ b/graph/unit_test/backends/Test_HIP_Graph.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_HIP_GRAPH_CPP #define TEST_HIP_GRAPH_CPP diff --git a/graph/unit_test/backends/Test_OpenMPTarget_Graph.cpp b/graph/unit_test/backends/Test_OpenMPTarget_Graph.cpp index ee1f823020..6ccdd782e3 100644 --- a/graph/unit_test/backends/Test_OpenMPTarget_Graph.cpp +++ b/graph/unit_test/backends/Test_OpenMPTarget_Graph.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_OPENMPTARGET_GRAPH_CPP #define TEST_OPENMPTARGET_GRAPH_CPP diff --git a/graph/unit_test/backends/Test_OpenMP_Graph.cpp b/graph/unit_test/backends/Test_OpenMP_Graph.cpp index 53ebb6d7a5..c21903abe6 100644 --- a/graph/unit_test/backends/Test_OpenMP_Graph.cpp +++ b/graph/unit_test/backends/Test_OpenMP_Graph.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_OPENMP_GRAPH_CPP #define TEST_OPENMP_GRAPH_CPP diff --git a/graph/unit_test/backends/Test_SYCL_Graph.cpp b/graph/unit_test/backends/Test_SYCL_Graph.cpp index 5e5c20baff..76b055a889 100644 --- a/graph/unit_test/backends/Test_SYCL_Graph.cpp +++ b/graph/unit_test/backends/Test_SYCL_Graph.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_SYCL_GRAPH_CPP #define TEST_SYCL_GRAPH_CPP diff --git a/graph/unit_test/backends/Test_Serial_Graph.cpp b/graph/unit_test/backends/Test_Serial_Graph.cpp index 3aa9f2bcb9..0c2bdb0c29 100644 --- a/graph/unit_test/backends/Test_Serial_Graph.cpp +++ b/graph/unit_test/backends/Test_Serial_Graph.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_SERIAL_GRAPH_CPP #define TEST_SERIAL_GRAPH_CPP diff --git a/graph/unit_test/backends/Test_Threads_Graph.cpp b/graph/unit_test/backends/Test_Threads_Graph.cpp index 15fecb4575..bd1958f099 100644 --- a/graph/unit_test/backends/Test_Threads_Graph.cpp +++ b/graph/unit_test/backends/Test_Threads_Graph.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_THREADS_GRAPH_CPP #define TEST_THREADS_GRAPH_CPP diff --git a/perf_test/KokkosKernelsTrackedTesting.cpp b/perf_test/KokkosKernelsTrackedTesting.cpp index 10fb834270..a3e85e8cfd 100644 --- a/perf_test/KokkosKernelsTrackedTesting.cpp +++ b/perf_test/KokkosKernelsTrackedTesting.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // // Created by Poliakoff, David Zoeller on 4/26/21. // diff --git a/perf_test/PerfTestUtilities.cpp b/perf_test/PerfTestUtilities.cpp index 09be654a6c..c403d0213d 100644 --- a/perf_test/PerfTestUtilities.cpp +++ b/perf_test/PerfTestUtilities.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // // Created by Poliakoff, David Zoeller on 4/27/21. // diff --git a/perf_test/PerfTestUtilities.hpp b/perf_test/PerfTestUtilities.hpp index 743df53502..4de10312b6 100644 --- a/perf_test/PerfTestUtilities.hpp +++ b/perf_test/PerfTestUtilities.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // // Created by Poliakoff, David Zoeller on 4/27/21. // diff --git a/perf_test/batched/dense/KokkosBatched_Test_BlockJacobi_Tutorial.cpp b/perf_test/batched/dense/KokkosBatched_Test_BlockJacobi_Tutorial.cpp index 94f58fba83..53a6f8f173 100644 --- a/perf_test/batched/dense/KokkosBatched_Test_BlockJacobi_Tutorial.cpp +++ b/perf_test/batched/dense/KokkosBatched_Test_BlockJacobi_Tutorial.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// Kokkos headers #include "Kokkos_Core.hpp" #include "Kokkos_Timer.hpp" diff --git a/perf_test/batched/dense/KokkosBatched_Test_BlockTridiagDirect.cpp b/perf_test/batched/dense/KokkosBatched_Test_BlockTridiagDirect.cpp index ffa6efec5e..5d6bf72450 100644 --- a/perf_test/batched/dense/KokkosBatched_Test_BlockTridiagDirect.cpp +++ b/perf_test/batched/dense/KokkosBatched_Test_BlockTridiagDirect.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// Kokkos headers #include "Kokkos_Core.hpp" #include "Kokkos_Timer.hpp" diff --git a/perf_test/batched/dense/KokkosBatched_Test_BlockTridiagJacobi.cpp b/perf_test/batched/dense/KokkosBatched_Test_BlockTridiagJacobi.cpp index 8513cad752..950674e39e 100644 --- a/perf_test/batched/dense/KokkosBatched_Test_BlockTridiagJacobi.cpp +++ b/perf_test/batched/dense/KokkosBatched_Test_BlockTridiagJacobi.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// Kokkos headers #include "Kokkos_Core.hpp" #include "Kokkos_Timer.hpp" diff --git a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Cuda.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Cuda.cpp index 5bc5e9d1b7..5f9c167b72 100644 --- a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Cuda.cpp +++ b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Cuda.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) #include "Kokkos_Core.hpp" diff --git a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host.hpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host.hpp index de67d9c804..225e10f63b 100644 --- a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host.hpp +++ b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) #include diff --git a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host_Complex.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host_Complex.cpp index 484c519b1c..630ab08d83 100644 --- a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host_Complex.cpp +++ b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host_Complex.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) #define KokkosBatched_Test_Gemm_Host_Complex 1 diff --git a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host_Real.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host_Real.cpp index b062942341..d05e880f53 100644 --- a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host_Real.cpp +++ b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemm_Host_Real.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) #define KokkosBatched_Test_Gemm_Host_Real 1 diff --git a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemv_Host.hpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemv_Host.hpp index 9480b810ba..9ae401f03f 100644 --- a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemv_Host.hpp +++ b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemv_Host.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) //#define __KOKKOSBATCHED_INTEL_MKL__ diff --git a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemv_Host_Real.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemv_Host_Real.cpp index 75f4bca4c0..68f549b68b 100644 --- a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemv_Host_Real.cpp +++ b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Gemv_Host_Real.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) #define KokkosBatched_Test_Gemv_Host_Real 1 diff --git a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Cuda.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Cuda.cpp index 6cf9ec5725..9909afd943 100644 --- a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Cuda.cpp +++ b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Cuda.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) #include "Kokkos_Core.hpp" diff --git a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Host.hpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Host.hpp index 68daa24eb1..d17f9b9003 100644 --- a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Host.hpp +++ b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Host.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) //#define __KOKKOSBATCHED_INTEL_MKL__ diff --git a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Host_Real.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Host_Real.cpp index 6c0736501d..924f509191 100644 --- a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Host_Real.cpp +++ b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_LU_Host_Real.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) #define KokkosBatched_Test_LU_Host_Real 1 diff --git a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Cuda.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Cuda.cpp index 6000bc7c9d..f99ee9dc80 100644 --- a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Cuda.cpp +++ b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Cuda.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) #include "Kokkos_Core.hpp" diff --git a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Host.hpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Host.hpp index 0770055cb0..52b2395b8d 100644 --- a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Host.hpp +++ b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Host.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) #include diff --git a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Host_Real.cpp b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Host_Real.cpp index 3d45195bb1..69a9522771 100644 --- a/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Host_Real.cpp +++ b/perf_test/batched/dense/do-not-use/KokkosBatched_Test_Trsm_Host_Real.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER /// \author Kyungjoo Kim (kyukim@sandia.gov) #define KokkosBatched_Test_Trsm_Host_Real 1 diff --git a/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp b/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp index 18dfb5a76d..e443910964 100644 --- a/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp +++ b/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Created by David Poliakoff and Amy Powell on 6/15/2021 diff --git a/perf_test/blas/blas1/KokkosBlas_team_dot_perf_test.hpp b/perf_test/blas/blas1/KokkosBlas_team_dot_perf_test.hpp index 163b0bf18a..f46591a4b1 100644 --- a/perf_test/blas/blas1/KokkosBlas_team_dot_perf_test.hpp +++ b/perf_test/blas/blas1/KokkosBlas_team_dot_perf_test.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef KOKKOSKERNELS_KOKKOSBLAS_TEAM_DOT_TEST_RPS_HPP diff --git a/perf_test/blas/blas1/tracked_testing.hpp b/perf_test/blas/blas1/tracked_testing.hpp index b08356b478..24be7d049d 100644 --- a/perf_test/blas/blas1/tracked_testing.hpp +++ b/perf_test/blas/blas1/tracked_testing.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // // Created by Poliakoff, David Zoeller on 4/26/21. // diff --git a/perf_test/blas/blas2/KokkosBlas2_gemv_perf_test.hpp b/perf_test/blas/blas2/KokkosBlas2_gemv_perf_test.hpp index 88eacdf182..a028ae005a 100644 --- a/perf_test/blas/blas2/KokkosBlas2_gemv_perf_test.hpp +++ b/perf_test/blas/blas2/KokkosBlas2_gemv_perf_test.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Created by David Poliakoff and Amy Powell on 6/15/2021 diff --git a/perf_test/blas/blas2/tracked_testing.hpp b/perf_test/blas/blas2/tracked_testing.hpp index 6bb0e74cb3..d33898fd74 100644 --- a/perf_test/blas/blas2/tracked_testing.hpp +++ b/perf_test/blas/blas2/tracked_testing.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // // Created by Poliakoff, David Zoeller on 4/26/21. // diff --git a/perf_test/blas/blas3/tracked_testing.hpp b/perf_test/blas/blas3/tracked_testing.hpp index a899fa91f1..e142677782 100644 --- a/perf_test/blas/blas3/tracked_testing.hpp +++ b/perf_test/blas/blas3/tracked_testing.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // // Created by Poliakoff, David Zoeller on 4/26/21. // diff --git a/perf_test/sparse/KokkosSparse_spmv_test.hpp b/perf_test/sparse/KokkosSparse_spmv_test.hpp index 31acb797d3..48506a9ef1 100644 --- a/perf_test/sparse/KokkosSparse_spmv_test.hpp +++ b/perf_test/sparse/KokkosSparse_spmv_test.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // // Created by Poliakoff, David Zoeller on 4/26/21. // diff --git a/perf_test/sparse/tracked_testing.hpp b/perf_test/sparse/tracked_testing.hpp index 7eea71e8a7..0334398d75 100644 --- a/perf_test/sparse/tracked_testing.hpp +++ b/perf_test/sparse/tracked_testing.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // // Created by Poliakoff, David Zoeller on 4/26/21. // diff --git a/scripts/update-copyright b/scripts/update-copyright index 6f515d47b7..4ac07bc0a5 100755 --- a/scripts/update-copyright +++ b/scripts/update-copyright @@ -8,25 +8,31 @@ tmp=`cat scripts/old_header | wc -l` NOLD=$(($tmp)) NOLD1=$(($NOLD+1)) for file in $files; do - head -n +$NOLD $file &> header - diff header scripts/old_header &> old_header_diff - count=`cat old_header_diff | wc -l` - #echo $file " " COUNT " " $count >> diff_headers - if [ "$count" -eq "0" ]; then - echo $file >> clean_files - cat old_header_diff >> clean_files - { head -n +$NNEW scripts/new_header; tail -n +$NOLD1 $file; } > tmp + tmp=`cat $file | grep "//@HEADER" | wc -l` + if [ "$tmp" -eq "0" ]; then + { head -n +$NNEW scripts/new_header; cat $file; } > tmp cp tmp $file else - head -n +$NNEW $file &> header - diff header scripts/new_header &> new_header_diff - count=`cat new_header_diff | wc -l` - if [ "$count" -eq "0" ]; then - echo $file >> updated_files + head -n +$NOLD $file &> header + diff header scripts/old_header &> old_header_diff + count=`cat old_header_diff | wc -l` + #echo $file " " COUNT " " $count >> diff_headers + if [ "$count" -eq "0" ]; then + echo $file >> clean_files + cat old_header_diff >> clean_files + { head -n +$NNEW scripts/new_header; tail -n +$NOLD1 $file; } > tmp + cp tmp $file else - echo $file >> diff_files - #cat header_diff >> diff_files - tr -d '\n' < diff_files | sed 's|\.\/| |g' &> modify_files + head -n +$NNEW $file &> header + diff header scripts/new_header &> new_header_diff + count=`cat new_header_diff | wc -l` + if [ "$count" -eq "0" ]; then + echo $file >> updated_files + else + echo $file >> diff_files + #cat header_diff >> diff_files + tr -d '\n' < diff_files | sed 's|\.\/| |g' &> modify_files + fi fi fi done diff --git a/sparse/unit_test/Test_Sparse.hpp b/sparse/unit_test/Test_Sparse.hpp index 4407143f03..d5fb879c64 100644 --- a/sparse/unit_test/Test_Sparse.hpp +++ b/sparse/unit_test/Test_Sparse.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_SPARSE_HPP #define TEST_SPARSE_HPP diff --git a/sparse/unit_test/Test_Sparse_Utils_cusparse.hpp b/sparse/unit_test/Test_Sparse_Utils_cusparse.hpp index 0ad16c54d0..ae802b24c4 100644 --- a/sparse/unit_test/Test_Sparse_Utils_cusparse.hpp +++ b/sparse/unit_test/Test_Sparse_Utils_cusparse.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 04/14/21 // Only include this test if compiling // the cuda sparse tests and cuSPARSE diff --git a/sparse/unit_test/Test_Sparse_rocsparse.hpp b/sparse/unit_test/Test_Sparse_rocsparse.hpp index 0c4d2303ef..f4c9e4e741 100644 --- a/sparse/unit_test/Test_Sparse_rocsparse.hpp +++ b/sparse/unit_test/Test_Sparse_rocsparse.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER // Note: Luc Berger-Vergiat 10/25/21 // Only include this test if compiling // the cuda sparse tests and cuSPARSE diff --git a/sparse/unit_test/Test_Sparse_spadd.hpp b/sparse/unit_test/Test_Sparse_spadd.hpp index 84d30a7dde..05ff97bb3a 100644 --- a/sparse/unit_test/Test_Sparse_spadd.hpp +++ b/sparse/unit_test/Test_Sparse_spadd.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/sparse/unit_test/Test_Sparse_spmv.hpp b/sparse/unit_test/Test_Sparse_spmv.hpp index 3f561badbf..8c4dc6a3c5 100644 --- a/sparse/unit_test/Test_Sparse_spmv.hpp +++ b/sparse/unit_test/Test_Sparse_spmv.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/sparse/unit_test/Test_Sparse_trsv.hpp b/sparse/unit_test/Test_Sparse_trsv.hpp index 9a23f48883..e6bc13d6a0 100644 --- a/sparse/unit_test/Test_Sparse_trsv.hpp +++ b/sparse/unit_test/Test_Sparse_trsv.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #if !defined(TEST_HIP_SPARSE_CPP) && !defined(TEST_SYCL_SPARSE_CPP) && \ !defined(TEST_OPENMPTARGET_BATCHED_DENSE_CPP) && \ (!defined(TEST_CUDA_SPARSE_CPP) || \ diff --git a/sparse/unit_test/backends/Test_Cuda_Sparse.cpp b/sparse/unit_test/backends/Test_Cuda_Sparse.cpp index 80f3b792e3..cef4a5e114 100644 --- a/sparse/unit_test/backends/Test_Cuda_Sparse.cpp +++ b/sparse/unit_test/backends/Test_Cuda_Sparse.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_CUDA_SPARSE_CPP #define TEST_CUDA_SPARSE_CPP diff --git a/sparse/unit_test/backends/Test_HIP_Sparse.cpp b/sparse/unit_test/backends/Test_HIP_Sparse.cpp index 3736ed5d0c..99a10b7ac0 100644 --- a/sparse/unit_test/backends/Test_HIP_Sparse.cpp +++ b/sparse/unit_test/backends/Test_HIP_Sparse.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_HIP_SPARSE_CPP #define TEST_HIP_SPARSE_CPP diff --git a/sparse/unit_test/backends/Test_OpenMPTarget_Sparse.cpp b/sparse/unit_test/backends/Test_OpenMPTarget_Sparse.cpp index 145c4e5a92..04d52bc1e1 100644 --- a/sparse/unit_test/backends/Test_OpenMPTarget_Sparse.cpp +++ b/sparse/unit_test/backends/Test_OpenMPTarget_Sparse.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_OPENMPTARGET_SPARSE_CPP #define TEST_OPENMPTARGET_SPARSE_CPP diff --git a/sparse/unit_test/backends/Test_OpenMP_Sparse.cpp b/sparse/unit_test/backends/Test_OpenMP_Sparse.cpp index e8bed873e0..e0af2a49cf 100644 --- a/sparse/unit_test/backends/Test_OpenMP_Sparse.cpp +++ b/sparse/unit_test/backends/Test_OpenMP_Sparse.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_OPENMP_SPARSE_CPP #define TEST_OPENMP_SPARSE_CPP diff --git a/sparse/unit_test/backends/Test_SYCL_Sparse.cpp b/sparse/unit_test/backends/Test_SYCL_Sparse.cpp index 9c1cff668a..b017f55b77 100644 --- a/sparse/unit_test/backends/Test_SYCL_Sparse.cpp +++ b/sparse/unit_test/backends/Test_SYCL_Sparse.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_SYCL_SPARSE_CPP #define TEST_SYCL_SPARSE_CPP diff --git a/sparse/unit_test/backends/Test_Serial_Sparse.cpp b/sparse/unit_test/backends/Test_Serial_Sparse.cpp index bd818d3930..d142349838 100644 --- a/sparse/unit_test/backends/Test_Serial_Sparse.cpp +++ b/sparse/unit_test/backends/Test_Serial_Sparse.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_SERIAL_SPARSE_CPP #define TEST_SERIAL_SPARSE_CPP diff --git a/sparse/unit_test/backends/Test_Threads_Sparse.cpp b/sparse/unit_test/backends/Test_Threads_Sparse.cpp index f50929465f..d4176e78a0 100644 --- a/sparse/unit_test/backends/Test_Threads_Sparse.cpp +++ b/sparse/unit_test/backends/Test_Threads_Sparse.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_THREADS_SPARSE_CPP #define TEST_THREADS_SPARSE_CPP diff --git a/sparse/unit_test/matrixIssue402.hpp b/sparse/unit_test/matrixIssue402.hpp index 27e63e4283..124e59108c 100644 --- a/sparse/unit_test/matrixIssue402.hpp +++ b/sparse/unit_test/matrixIssue402.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef MATRIX_ISSUE_402 #define MATRIX_ISSUE_402 namespace MatrixIssue402 { diff --git a/test_common/Test_Cuda.hpp b/test_common/Test_Cuda.hpp index fcddf15732..0bfe35718b 100644 --- a/test_common/Test_Cuda.hpp +++ b/test_common/Test_Cuda.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_CUDA_HPP #define TEST_CUDA_HPP diff --git a/test_common/Test_HIP.hpp b/test_common/Test_HIP.hpp index 2bdc040adb..7e61bfc9c3 100644 --- a/test_common/Test_HIP.hpp +++ b/test_common/Test_HIP.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_HIP_HPP #define TEST_HIP_HPP diff --git a/test_common/Test_Main.cpp b/test_common/Test_Main.cpp index f48ac7e43a..d38fa50f34 100644 --- a/test_common/Test_Main.cpp +++ b/test_common/Test_Main.cpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include diff --git a/test_common/Test_OpenMP.hpp b/test_common/Test_OpenMP.hpp index f9c46457d8..8b4f90730e 100644 --- a/test_common/Test_OpenMP.hpp +++ b/test_common/Test_OpenMP.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_OPENMP_HPP #define TEST_OPENMP_HPP diff --git a/test_common/Test_OpenMPTarget.hpp b/test_common/Test_OpenMPTarget.hpp index ff2b6842aa..2056d8be01 100644 --- a/test_common/Test_OpenMPTarget.hpp +++ b/test_common/Test_OpenMPTarget.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_OPENMPTARGET_HPP #define TEST_OPENMPTARGET_HPP diff --git a/test_common/Test_SYCL.hpp b/test_common/Test_SYCL.hpp index 2c58a0e5ba..c7022f35d1 100644 --- a/test_common/Test_SYCL.hpp +++ b/test_common/Test_SYCL.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #include #include #include diff --git a/test_common/Test_Serial.hpp b/test_common/Test_Serial.hpp index 009297b5cd..fe2917937b 100644 --- a/test_common/Test_Serial.hpp +++ b/test_common/Test_Serial.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_SERIAL_HPP #define TEST_SERIAL_HPP diff --git a/test_common/Test_Threads.hpp b/test_common/Test_Threads.hpp index 826d47b6ad..1e2919b68f 100644 --- a/test_common/Test_Threads.hpp +++ b/test_common/Test_Threads.hpp @@ -1,3 +1,18 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER #ifndef TEST_THREADS_HPP #define TEST_THREADS_HPP From c0813786280f14d178a2cc920a0a2a8ca801af76 Mon Sep 17 00:00:00 2001 From: Christian Trott Date: Tue, 29 Nov 2022 12:42:26 -0700 Subject: [PATCH 199/226] Also catch noheader and *.in files with copyright update --- scripts/update-copyright | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/update-copyright b/scripts/update-copyright index 4ac07bc0a5..7c5a71a2a2 100755 --- a/scripts/update-copyright +++ b/scripts/update-copyright @@ -1,7 +1,8 @@ -files=`find . -path './tpls' -prune -o -name '*.cpp' -o -name '*.pc.in' -o -name '*.h' -o -name '*.hpp' -o -name '*.cc'` +files=`find . -path './tpls' -prune -o -name '*.cpp.in' -o -name '*.hpp.in' -o -name '*.cpp' -o -name '*.pc.in' -o -name '*.h' -o -name '*.hpp' -o -name '*.cc'` echo "" &> diff_files echo "" &> clean_files echo "" &> updated_files +echo "" &> noheader_files tmp=`cat scripts/new_header | wc -l` NNEW=$(($tmp)) tmp=`cat scripts/old_header | wc -l` @@ -12,6 +13,7 @@ for file in $files; do if [ "$tmp" -eq "0" ]; then { head -n +$NNEW scripts/new_header; cat $file; } > tmp cp tmp $file + echo $file >> noheader_files else head -n +$NOLD $file &> header diff header scripts/old_header &> old_header_diff From c72699504e7cec0d5538c06c25c5e3f2703b26d2 Mon Sep 17 00:00:00 2001 From: Christian Trott Date: Tue, 29 Nov 2022 12:42:51 -0700 Subject: [PATCH 200/226] Update more copyrights --- .../abs/KokkosBlas1_abs_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_abs_mv_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_axpby_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_axpby_mv_eti_spec_inst.cpp.in | 38 ++------------- .../dot/KokkosBlas1_dot_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_dot_mv_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas3_gemm_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas2_gemv_eti_spec_inst.cpp.in | 38 ++------------- .../gesv/KokkosBlas_gesv_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_iamax_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_iamax_mv_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_mult_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_mult_mv_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_nrm1_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_nrm1_mv_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_nrm2_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_nrm2_mv_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_nrm2w_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_nrm2w_mv_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_nrminf_eti_spec_inst.cpp.in | 38 ++------------- ...KokkosBlas1_nrminf_mv_eti_spec_inst.cpp.in | 38 ++------------- ...okkosBlas1_reciprocal_eti_spec_inst.cpp.in | 38 ++------------- ...osBlas1_reciprocal_mv_eti_spec_inst.cpp.in | 38 ++------------- .../rot/KokkosBlas1_rot_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_rotg_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_rotm_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_rotmg_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_scal_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_scal_mv_eti_spec_inst.cpp.in | 38 ++------------- .../sum/KokkosBlas1_sum_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_sum_mv_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas3_trmm_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas3_trsm_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas_trtri_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_update_eti_spec_inst.cpp.in | 38 ++------------- ...KokkosBlas1_update_mv_eti_spec_inst.cpp.in | 38 ++------------- .../KokkosBlas1_abs_eti_spec_avail.hpp.in | 45 ++++------------- .../KokkosBlas1_abs_eti_spec_decl.hpp.in | 45 ++++------------- .../KokkosBlas1_abs_mv_eti_spec_avail.hpp.in | 45 ++++------------- .../KokkosBlas1_abs_mv_eti_spec_decl.hpp.in | 45 ++++------------- .../KokkosBlas1_axpby_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_axpby_eti_spec_decl.hpp.in | 47 ++++-------------- ...KokkosBlas1_axpby_mv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_axpby_mv_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_dot_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_dot_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_dot_mv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_dot_mv_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_iamax_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_iamax_eti_spec_decl.hpp.in | 47 ++++-------------- ...KokkosBlas1_iamax_mv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_iamax_mv_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_mult_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_mult_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_mult_mv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_mult_mv_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_nrm1_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_nrm1_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_nrm1_mv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_nrm1_mv_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_nrm2_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_nrm2_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_nrm2_mv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_nrm2_mv_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_nrm2w_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_nrm2w_eti_spec_decl.hpp.in | 47 ++++-------------- ...KokkosBlas1_nrm2w_mv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_nrm2w_mv_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_nrminf_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_nrminf_eti_spec_decl.hpp.in | 47 ++++-------------- ...okkosBlas1_nrminf_mv_eti_spec_avail.hpp.in | 47 ++++-------------- ...KokkosBlas1_nrminf_mv_eti_spec_decl.hpp.in | 47 ++++-------------- ...kkosBlas1_reciprocal_eti_spec_avail.hpp.in | 47 ++++-------------- ...okkosBlas1_reciprocal_eti_spec_decl.hpp.in | 47 ++++-------------- ...sBlas1_reciprocal_mv_eti_spec_avail.hpp.in | 47 ++++-------------- ...osBlas1_reciprocal_mv_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_rot_eti_spec_avail.hpp.in | 43 ++++------------- .../KokkosBlas1_rot_eti_spec_decl.hpp.in | 43 ++++------------- .../KokkosBlas1_rotg_eti_spec_avail.hpp.in | 42 ++++------------ .../KokkosBlas1_rotg_eti_spec_decl.hpp.in | 43 ++++------------- .../KokkosBlas1_rotm_eti_spec_avail.hpp.in | 42 ++++------------ .../KokkosBlas1_rotm_eti_spec_decl.hpp.in | 43 ++++------------- .../KokkosBlas1_rotmg_eti_spec_avail.hpp.in | 43 ++++------------- .../KokkosBlas1_rotmg_eti_spec_decl.hpp.in | 42 ++++------------ .../KokkosBlas1_scal_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_scal_eti_spec_decl.hpp.in | 48 +++++-------------- .../KokkosBlas1_scal_mv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_scal_mv_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_sum_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_sum_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_sum_mv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_sum_mv_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas1_update_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas1_update_eti_spec_decl.hpp.in | 47 ++++-------------- ...okkosBlas1_update_mv_eti_spec_avail.hpp.in | 47 ++++-------------- ...KokkosBlas1_update_mv_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas2_gemv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas2_gemv_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas3_gemm_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas3_gemm_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas3_trmm_eti_spec_avail.hpp.in | 42 +++------------- .../KokkosBlas3_trmm_eti_spec_decl.hpp.in | 42 +++------------- .../KokkosBlas3_trsm_eti_spec_avail.hpp.in | 45 ++++------------- .../KokkosBlas3_trsm_eti_spec_decl.hpp.in | 45 ++++------------- .../KokkosBlas_gesv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosBlas_gesv_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosBlas_trtri_eti_spec_avail.hpp.in | 42 +++------------- .../KokkosBlas_trtri_eti_spec_decl.hpp.in | 42 +++------------- .../KokkosGraph_color_d1_eti_spec_inst.cpp.in | 41 +++------------- ...KokkosGraph_color_d1_eti_spec_avail.hpp.in | 45 ++++------------- .../KokkosGraph_color_d1_eti_spec_decl.hpp.in | 45 ++++------------- ...parse_bspgemm_numeric_eti_spec_inst.cpp.in | 41 +++------------- ...se_gauss_seidel_apply_eti_spec_inst.cpp.in | 41 +++------------- ..._gauss_seidel_numeric_eti_spec_inst.cpp.in | 41 +++------------- ...gauss_seidel_symbolic_eti_spec_inst.cpp.in | 41 +++------------- ...arse_par_ilut_numeric_eti_spec_inst.cpp.in | 41 +++------------- ...rse_par_ilut_symbolic_eti_spec_inst.cpp.in | 41 +++------------- ...sSparse_spadd_numeric_eti_spec_inst.cpp.in | 41 +++------------- ...Sparse_spadd_symbolic_eti_spec_inst.cpp.in | 41 +++------------- ...sSparse_spgemm_jacobi_eti_spec_inst.cpp.in | 37 ++------------ ...Sparse_spgemm_numeric_eti_spec_inst.cpp.in | 41 +++------------- ...parse_spgemm_symbolic_eti_spec_inst.cpp.in | 41 +++------------- ...Sparse_spiluk_numeric_eti_spec_inst.cpp.in | 41 +++------------- ...parse_spiluk_symbolic_eti_spec_inst.cpp.in | 41 +++------------- ...Sparse_spmv_bsrmatrix_eti_spec_inst.cpp.in | 41 +++------------- .../KokkosSparse_spmv_eti_spec_inst.cpp.in | 41 +++------------- ...rse_spmv_mv_bsrmatrix_eti_spec_inst.cpp.in | 41 +++------------- .../KokkosSparse_spmv_mv_eti_spec_inst.cpp.in | 41 +++------------- ...Sparse_spmv_mv_struct_eti_spec_inst.cpp.in | 41 +++------------- ...kosSparse_spmv_struct_eti_spec_inst.cpp.in | 41 +++------------- ...osSparse_sptrsv_solve_eti_spec_inst.cpp.in | 41 +++------------- ...parse_sptrsv_symbolic_eti_spec_inst.cpp.in | 41 +++------------- .../KokkosSparse_trsv_eti_spec_inst.cpp.in | 41 +++------------- ...arse_bspgemm_numeric_eti_spec_avail.hpp.in | 47 ++++-------------- ...parse_bspgemm_numeric_eti_spec_decl.hpp.in | 47 ++++-------------- ...e_gauss_seidel_apply_eti_spec_avail.hpp.in | 47 ++++-------------- ...se_gauss_seidel_apply_eti_spec_decl.hpp.in | 47 ++++-------------- ...gauss_seidel_numeric_eti_spec_avail.hpp.in | 47 ++++-------------- ..._gauss_seidel_numeric_eti_spec_decl.hpp.in | 47 ++++-------------- ...auss_seidel_symbolic_eti_spec_avail.hpp.in | 47 ++++-------------- ...gauss_seidel_symbolic_eti_spec_decl.hpp.in | 47 ++++-------------- ...rse_par_ilut_numeric_eti_spec_avail.hpp.in | 45 ++++------------- ...arse_par_ilut_numeric_eti_spec_decl.hpp.in | 45 ++++------------- ...se_par_ilut_symbolic_eti_spec_avail.hpp.in | 45 ++++------------- ...rse_par_ilut_symbolic_eti_spec_decl.hpp.in | 45 ++++------------- ...Sparse_spadd_numeric_eti_spec_avail.hpp.in | 45 ++++------------- ...sSparse_spadd_numeric_eti_spec_decl.hpp.in | 45 ++++------------- ...parse_spadd_symbolic_eti_spec_avail.hpp.in | 45 ++++------------- ...Sparse_spadd_symbolic_eti_spec_decl.hpp.in | 45 ++++------------- ...Sparse_spgemm_jacobi_eti_spec_avail.hpp.in | 39 +++------------ ...sSparse_spgemm_jacobi_eti_spec_decl.hpp.in | 40 +++------------- ...parse_spgemm_numeric_eti_spec_avail.hpp.in | 47 ++++-------------- ...Sparse_spgemm_numeric_eti_spec_decl.hpp.in | 47 ++++-------------- ...arse_spgemm_symbolic_eti_spec_avail.hpp.in | 47 ++++-------------- ...parse_spgemm_symbolic_eti_spec_decl.hpp.in | 47 ++++-------------- ...parse_spiluk_numeric_eti_spec_avail.hpp.in | 45 ++++------------- ...Sparse_spiluk_numeric_eti_spec_decl.hpp.in | 45 ++++------------- ...arse_spiluk_symbolic_eti_spec_avail.hpp.in | 45 ++++------------- ...parse_spiluk_symbolic_eti_spec_decl.hpp.in | 45 ++++------------- ...parse_spmv_bsrmatrix_eti_spec_avail.hpp.in | 45 ++++------------- ...Sparse_spmv_bsrmatrix_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosSparse_spmv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosSparse_spmv_eti_spec_decl.hpp.in | 47 ++++-------------- ...se_spmv_mv_bsrmatrix_eti_spec_avail.hpp.in | 41 +++------------- ...rse_spmv_mv_bsrmatrix_eti_spec_decl.hpp.in | 41 +++------------- ...KokkosSparse_spmv_mv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosSparse_spmv_mv_eti_spec_decl.hpp.in | 47 ++++-------------- ...parse_spmv_mv_struct_eti_spec_avail.hpp.in | 47 ++++-------------- ...Sparse_spmv_mv_struct_eti_spec_decl.hpp.in | 47 ++++-------------- ...osSparse_spmv_struct_eti_spec_avail.hpp.in | 47 ++++-------------- ...kosSparse_spmv_struct_eti_spec_decl.hpp.in | 47 ++++-------------- ...sSparse_sptrsv_solve_eti_spec_avail.hpp.in | 47 ++++-------------- ...osSparse_sptrsv_solve_eti_spec_decl.hpp.in | 47 ++++-------------- ...arse_sptrsv_symbolic_eti_spec_avail.hpp.in | 47 ++++-------------- ...parse_sptrsv_symbolic_eti_spec_decl.hpp.in | 47 ++++-------------- .../KokkosSparse_trsv_eti_spec_avail.hpp.in | 47 ++++-------------- .../KokkosSparse_trsv_eti_spec_decl.hpp.in | 47 ++++-------------- 177 files changed, 1457 insertions(+), 6273 deletions(-) diff --git a/blas/eti/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst.cpp.in index 648e487d84..9a982a8e64 100644 --- a/blas/eti/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/abs/KokkosBlas1_abs_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/abs/KokkosBlas1_abs_mv_eti_spec_inst.cpp.in index ecb647a680..410f8483c7 100644 --- a/blas/eti/generated_specializations_cpp/abs/KokkosBlas1_abs_mv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/abs/KokkosBlas1_abs_mv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/axpby/KokkosBlas1_axpby_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/axpby/KokkosBlas1_axpby_eti_spec_inst.cpp.in index ade239edc8..f5760ebf46 100644 --- a/blas/eti/generated_specializations_cpp/axpby/KokkosBlas1_axpby_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/axpby/KokkosBlas1_axpby_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/axpby/KokkosBlas1_axpby_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/axpby/KokkosBlas1_axpby_mv_eti_spec_inst.cpp.in index 37022b2314..a92860a6c7 100644 --- a/blas/eti/generated_specializations_cpp/axpby/KokkosBlas1_axpby_mv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/axpby/KokkosBlas1_axpby_mv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/dot/KokkosBlas1_dot_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/dot/KokkosBlas1_dot_eti_spec_inst.cpp.in index 37680de173..df53cddd9b 100644 --- a/blas/eti/generated_specializations_cpp/dot/KokkosBlas1_dot_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/dot/KokkosBlas1_dot_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/dot/KokkosBlas1_dot_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/dot/KokkosBlas1_dot_mv_eti_spec_inst.cpp.in index 50f28a496d..83020df8b7 100644 --- a/blas/eti/generated_specializations_cpp/dot/KokkosBlas1_dot_mv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/dot/KokkosBlas1_dot_mv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/gemm/KokkosBlas3_gemm_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/gemm/KokkosBlas3_gemm_eti_spec_inst.cpp.in index bfed324416..7eedad09f8 100644 --- a/blas/eti/generated_specializations_cpp/gemm/KokkosBlas3_gemm_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/gemm/KokkosBlas3_gemm_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/gemv/KokkosBlas2_gemv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/gemv/KokkosBlas2_gemv_eti_spec_inst.cpp.in index dc8ab150b1..8c8de8423e 100644 --- a/blas/eti/generated_specializations_cpp/gemv/KokkosBlas2_gemv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/gemv/KokkosBlas2_gemv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/gesv/KokkosBlas_gesv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/gesv/KokkosBlas_gesv_eti_spec_inst.cpp.in index 3fb49912e9..32473be3ad 100644 --- a/blas/eti/generated_specializations_cpp/gesv/KokkosBlas_gesv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/gesv/KokkosBlas_gesv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/iamax/KokkosBlas1_iamax_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/iamax/KokkosBlas1_iamax_eti_spec_inst.cpp.in index 4a1ff8f03f..b9acaa1a02 100644 --- a/blas/eti/generated_specializations_cpp/iamax/KokkosBlas1_iamax_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/iamax/KokkosBlas1_iamax_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/iamax/KokkosBlas1_iamax_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/iamax/KokkosBlas1_iamax_mv_eti_spec_inst.cpp.in index 11324306dc..24ce729390 100644 --- a/blas/eti/generated_specializations_cpp/iamax/KokkosBlas1_iamax_mv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/iamax/KokkosBlas1_iamax_mv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/mult/KokkosBlas1_mult_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/mult/KokkosBlas1_mult_eti_spec_inst.cpp.in index 36cf0d5586..e58bc47468 100644 --- a/blas/eti/generated_specializations_cpp/mult/KokkosBlas1_mult_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/mult/KokkosBlas1_mult_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/mult/KokkosBlas1_mult_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/mult/KokkosBlas1_mult_mv_eti_spec_inst.cpp.in index 3d8c0a869f..14ac882d40 100644 --- a/blas/eti/generated_specializations_cpp/mult/KokkosBlas1_mult_mv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/mult/KokkosBlas1_mult_mv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_eti_spec_inst.cpp.in index 8cf2b2656c..8a3b438257 100644 --- a/blas/eti/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_mv_eti_spec_inst.cpp.in index 2b6a84668b..f58dbae885 100644 --- a/blas/eti/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_mv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/nrm1/KokkosBlas1_nrm1_mv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_eti_spec_inst.cpp.in index fb59a3579b..fbbd16aa95 100644 --- a/blas/eti/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_mv_eti_spec_inst.cpp.in index da5bc0273d..8337ae5b2d 100644 --- a/blas/eti/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_mv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/nrm2/KokkosBlas1_nrm2_mv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_eti_spec_inst.cpp.in index f445c4d6bd..ae812414f4 100644 --- a/blas/eti/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_mv_eti_spec_inst.cpp.in index 107420ccbc..9bf99a815a 100644 --- a/blas/eti/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_mv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/nrm2w/KokkosBlas1_nrm2w_mv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_eti_spec_inst.cpp.in index 41fd791fe5..f09287134b 100644 --- a/blas/eti/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_mv_eti_spec_inst.cpp.in index c69915bf49..d0417104df 100644 --- a/blas/eti/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_mv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/nrminf/KokkosBlas1_nrminf_mv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_eti_spec_inst.cpp.in index 9caacc22af..9c3e88670d 100644 --- a/blas/eti/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_mv_eti_spec_inst.cpp.in index 097e6824c3..0b48c7939a 100644 --- a/blas/eti/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_mv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/reciprocal/KokkosBlas1_reciprocal_mv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/rot/KokkosBlas1_rot_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/rot/KokkosBlas1_rot_eti_spec_inst.cpp.in index 7bfb830e3a..aec8d28cca 100644 --- a/blas/eti/generated_specializations_cpp/rot/KokkosBlas1_rot_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/rot/KokkosBlas1_rot_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/rotg/KokkosBlas1_rotg_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/rotg/KokkosBlas1_rotg_eti_spec_inst.cpp.in index 2a6a441a70..81118c1805 100644 --- a/blas/eti/generated_specializations_cpp/rotg/KokkosBlas1_rotg_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/rotg/KokkosBlas1_rotg_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/rotm/KokkosBlas1_rotm_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/rotm/KokkosBlas1_rotm_eti_spec_inst.cpp.in index cc8ca57e80..6abe873c56 100644 --- a/blas/eti/generated_specializations_cpp/rotm/KokkosBlas1_rotm_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/rotm/KokkosBlas1_rotm_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/rotmg/KokkosBlas1_rotmg_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/rotmg/KokkosBlas1_rotmg_eti_spec_inst.cpp.in index 3acae58abd..3800bb42ce 100644 --- a/blas/eti/generated_specializations_cpp/rotmg/KokkosBlas1_rotmg_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/rotmg/KokkosBlas1_rotmg_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/scal/KokkosBlas1_scal_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/scal/KokkosBlas1_scal_eti_spec_inst.cpp.in index 5155fe37b2..c7b8866e07 100644 --- a/blas/eti/generated_specializations_cpp/scal/KokkosBlas1_scal_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/scal/KokkosBlas1_scal_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/scal/KokkosBlas1_scal_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/scal/KokkosBlas1_scal_mv_eti_spec_inst.cpp.in index c54355ef74..f1e3cca44a 100644 --- a/blas/eti/generated_specializations_cpp/scal/KokkosBlas1_scal_mv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/scal/KokkosBlas1_scal_mv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/sum/KokkosBlas1_sum_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/sum/KokkosBlas1_sum_eti_spec_inst.cpp.in index f3390307d7..ca522e32ec 100644 --- a/blas/eti/generated_specializations_cpp/sum/KokkosBlas1_sum_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/sum/KokkosBlas1_sum_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/sum/KokkosBlas1_sum_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/sum/KokkosBlas1_sum_mv_eti_spec_inst.cpp.in index fe2881d210..67c7dd9864 100644 --- a/blas/eti/generated_specializations_cpp/sum/KokkosBlas1_sum_mv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/sum/KokkosBlas1_sum_mv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/trmm/KokkosBlas3_trmm_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/trmm/KokkosBlas3_trmm_eti_spec_inst.cpp.in index b6976565c1..5df8e84618 100644 --- a/blas/eti/generated_specializations_cpp/trmm/KokkosBlas3_trmm_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/trmm/KokkosBlas3_trmm_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/trsm/KokkosBlas3_trsm_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/trsm/KokkosBlas3_trsm_eti_spec_inst.cpp.in index 5a8a2eba77..4b3ccdfb16 100644 --- a/blas/eti/generated_specializations_cpp/trsm/KokkosBlas3_trsm_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/trsm/KokkosBlas3_trsm_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/trtri/KokkosBlas_trtri_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/trtri/KokkosBlas_trtri_eti_spec_inst.cpp.in index f5a20fd85d..64755f7a54 100644 --- a/blas/eti/generated_specializations_cpp/trtri/KokkosBlas_trtri_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/trtri/KokkosBlas_trtri_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/update/KokkosBlas1_update_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/update/KokkosBlas1_update_eti_spec_inst.cpp.in index f89d850bf5..8d9d75984c 100644 --- a/blas/eti/generated_specializations_cpp/update/KokkosBlas1_update_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/update/KokkosBlas1_update_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_cpp/update/KokkosBlas1_update_mv_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/update/KokkosBlas1_update_mv_eti_spec_inst.cpp.in index a73a65c866..a8b82cf030 100644 --- a/blas/eti/generated_specializations_cpp/update/KokkosBlas1_update_mv_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/update/KokkosBlas1_update_mv_eti_spec_inst.cpp.in @@ -1,46 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_avail.hpp.in index 076d141e61..f37c299be8 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_avail.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSBLAS1_ABS_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_ABS_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_ABS_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_ABS_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_decl.hpp.in index d8c00e9acf..2780dee8ff 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSBLAS1_ABS_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_ABS_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_ABS_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_ABS_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_avail.hpp.in index 31d77445d4..b2ca4da22a 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_avail.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSBLAS1_ABS_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_ABS_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_ABS_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_ABS_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_decl.hpp.in index 2af9678c94..c7af4806be 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_abs_mv_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSBLAS1_ABS_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_ABS_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_ABS_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_ABS_MV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_avail.hpp.in index 544652f42d..66fae7ebd3 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_AXPBY_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_AXPBY_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_AXPBY_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_AXPBY_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_AXPBY_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_decl.hpp.in index ceac1bff2c..3f8cfa92d5 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_AXPBY_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_AXPBY_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_AXPBY_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_AXPBY_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_AXPBY_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_avail.hpp.in index 1fb086f8c6..6a46224605 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_AXPBY_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_AXPBY_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_AXPBY_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_AXPBY_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_AXPBY_MV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_decl.hpp.in index adff9eccdc..44b6708c99 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_axpby_mv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_AXPBY_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_AXPBY_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_AXPBY_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_AXPBY_MV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_AXPBY_MV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_avail.hpp.in index 2c2356461e..525031c93f 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_DOT_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_DOT_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_DOT_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_DOT_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_DOT_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_decl.hpp.in index b50a141a23..42982920fd 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_DOT_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_DOT_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_DOT_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_DOT_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_DOT_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_avail.hpp.in index cff7bec7b8..9145ec9461 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_DOT_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_DOT_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_DOT_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_DOT_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_DOT_MV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_decl.hpp.in index c351352247..da7f48f325 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_dot_mv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_DOT_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_DOT_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_DOT_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_DOT_MV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_DOT_MV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_avail.hpp.in index afcbe2dcf1..152b4f72e9 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_IAMAX_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_IAMAX_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_IAMAX_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_IAMAX_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_IAMAX_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_decl.hpp.in index 4234284219..17b61a8857 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_IAMAX_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_IAMAX_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_IAMAX_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_IAMAX_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_IAMAX_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_avail.hpp.in index bbe6f0b48a..df4994dc38 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_IAMAX_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_IAMAX_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_IAMAX_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_IAMAX_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_IAMAX_MV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_decl.hpp.in index 7eda1d9959..35d654012e 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_iamax_mv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_IAMAX_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_IAMAX_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_IAMAX_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_IAMAX_MV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_IAMAX_MV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_avail.hpp.in index 27b64ac59a..0fa727b8ba 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_MULT_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_MULT_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_MULT_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_MULT_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_MULT_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_decl.hpp.in index 26a9b305d3..406feeaf5d 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_MULT_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_MULT_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_MULT_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_MULT_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_MULT_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_avail.hpp.in index a962df7c53..56f7771956 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_MULT_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_MULT_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_MULT_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_MULT_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_MULT_MV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_decl.hpp.in index 7e6c066f1d..a59f2af39d 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_mult_mv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_MULT_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_MULT_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_MULT_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_MULT_MV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_MULT_MV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_avail.hpp.in index 141b5a0e2f..78db28a95c 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRM1_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_NRM1_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRM1_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_NRM1_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRM1_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_decl.hpp.in index 7c57d48484..1c9a088122 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRM1_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_NRM1_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRM1_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_NRM1_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRM1_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_avail.hpp.in index 8e3726da03..05715995c7 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRM1_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_NRM1_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRM1_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_NRM1_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRM1_MV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_decl.hpp.in index 2c14e657c4..d2a322a0ad 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm1_mv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRM1_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_NRM1_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRM1_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_NRM1_MV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRM1_MV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_avail.hpp.in index 234cd37dba..5398eb1c34 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRM2_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_NRM2_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRM2_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_NRM2_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRM2_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_decl.hpp.in index 2b66ec9ccb..dfe891afc9 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRM2_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_NRM2_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRM2_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_NRM2_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRM2_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_avail.hpp.in index c7b34043d0..b0446fc62e 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRM2_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_NRM2_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRM2_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_NRM2_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRM2_MV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_decl.hpp.in index 9a0f5d565b..2e0f745682 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2_mv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRM2_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_NRM2_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRM2_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_NRM2_MV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRM2_MV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_avail.hpp.in index 5c1e1cb1ba..20d35a5f78 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRM2W_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_NRM2W_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRM2W_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_NRM2W_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRM2W_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_decl.hpp.in index 27fa7551ec..bd7d1b11b8 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRM2W_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_NRM2W_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRM2W_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_NRM2W_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRM2W_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_avail.hpp.in index af65e1307d..0002b6d5d8 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRM2W_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_NRM2W_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRM2W_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_NRM2W_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRM2W_MV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_decl.hpp.in index cc9b18b884..0a0aadc87a 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrm2w_mv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRM2W_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_NRM2W_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRM2W_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_NRM2W_MV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRM2W_MV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_avail.hpp.in index 058edd4b67..5b934b07e2 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRMINF_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_NRMINF_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRMINF_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_NRMINF_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRMINF_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_decl.hpp.in index 0bad716ca5..3f1e874724 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRMINF_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_NRMINF_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRMINF_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_NRMINF_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRMINF_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_avail.hpp.in index 82cc174a5d..d44a18eae2 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRMINF_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_NRMINF_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRMINF_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_NRMINF_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRMINF_MV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_decl.hpp.in index 49284dad2b..17559306bf 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_nrminf_mv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_NRMINF_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_NRMINF_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_NRMINF_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_NRMINF_MV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_NRMINF_MV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_avail.hpp.in index 85077ba5be..c01e01722e 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_RECIPROCAL_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_RECIPROCAL_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_RECIPROCAL_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_RECIPROCAL_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_RECIPROCAL_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_decl.hpp.in index b412f548f7..7ac4b74ea4 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_RECIPROCAL_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_RECIPROCAL_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_RECIPROCAL_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_RECIPROCAL_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_RECIPROCAL_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_avail.hpp.in index af12976884..5c4c075829 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_RECIPROCAL_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_RECIPROCAL_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_RECIPROCAL_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_RECIPROCAL_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_RECIPROCAL_MV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_decl.hpp.in index 7d28fbe1e7..f40958465f 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_reciprocal_mv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_RECIPROCAL_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_RECIPROCAL_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_RECIPROCAL_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_RECIPROCAL_MV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_RECIPROCAL_MV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_avail.hpp.in index 715c6673da..ef553b8d4b 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_avail.hpp.in @@ -1,48 +1,21 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ + #ifndef KOKKOSBLAS1_ROT_ETI_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_ROT_ETI_SPEC_AVAIL_HPP_ - namespace KokkosBlas { namespace Impl { @BLAS1_ROT_ETI_AVAIL_BLOCK@ diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_decl.hpp.in index e610161851..5e6b197460 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rot_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ + #ifndef KOKKOSBLAS1_ROT_ETI_SPEC_DECL_HPP_ #define KOKKOSBLAS1_ROT_ETI_SPEC_DECL_HPP_ - namespace KokkosBlas { namespace Impl { @BLAS1_ROT_ETI_DECL_BLOCK@ diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_avail.hpp.in index 6a451d6afe..a7d765fb52 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_avail.hpp.in @@ -1,45 +1,19 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ + #ifndef KOKKOSBLAS1_ROTG_ETI_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_ROTG_ETI_SPEC_AVAIL_HPP_ diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_decl.hpp.in index cb59ead97e..e410696d54 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotg_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ + #ifndef KOKKOSBLAS1_ROTG_ETI_SPEC_DECL_HPP_ #define KOKKOSBLAS1_ROTG_ETI_SPEC_DECL_HPP_ - namespace KokkosBlas { namespace Impl { @BLAS1_ROTG_ETI_DECL_BLOCK@ diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_avail.hpp.in index ac39ed93f2..9f4608bc66 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_avail.hpp.in @@ -1,45 +1,19 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ + #ifndef KOKKOSBLAS1_ROTM_ETI_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_ROTM_ETI_SPEC_AVAIL_HPP_ diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_decl.hpp.in index ec5395bd2d..bd88a1e4c6 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotm_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ + #ifndef KOKKOSBLAS1_ROTM_ETI_SPEC_DECL_HPP_ #define KOKKOSBLAS1_ROTM_ETI_SPEC_DECL_HPP_ - namespace KokkosBlas { namespace Impl { @BLAS1_ROTM_ETI_DECL_BLOCK@ diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_avail.hpp.in index b889295fdb..2094b73040 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_avail.hpp.in @@ -1,48 +1,21 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ + #ifndef KOKKOSBLAS1_ROTMG_ETI_SPEC_AVAIL_HPP_ #define KOKKOSBLAS1_ROTMG_ETI_SPEC_AVAIL_HPP_ - namespace KokkosBlas { namespace Impl { @BLAS1_ROTMG_ETI_AVAIL_BLOCK@ diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_decl.hpp.in index 4a99d3c1d8..b69e9b6b4b 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_rotmg_eti_spec_decl.hpp.in @@ -1,45 +1,19 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ + #ifndef KOKKOSBLAS1_ROTMG_ETI_SPEC_DECL_HPP_ #define KOKKOSBLAS1_ROTMG_ETI_SPEC_DECL_HPP_ diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_avail.hpp.in index 7b900ec796..491f5ec264 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_SCAL_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_SCAL_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_SCAL_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_SCAL_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_SCAL_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_decl.hpp.in index 4fc223b9a5..a2da20787d 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_eti_spec_decl.hpp.in @@ -1,51 +1,25 @@ -#ifndef KOKKOSBLAS1_SCAL_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_SCAL_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ + +#ifndef KOKKOSBLAS1_SCAL_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_SCAL_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_SCAL_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_avail.hpp.in index 5b08d92e21..f9a4c06cf6 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_SCAL_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_SCAL_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_SCAL_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_SCAL_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_SCAL_MV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_decl.hpp.in index 1a29370341..953f8e6954 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_scal_mv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_SCAL_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_SCAL_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_SCAL_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_SCAL_MV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_SCAL_MV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_avail.hpp.in index 112b34a5b2..7a24f008ad 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_SUM_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_SUM_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_SUM_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_SUM_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_SUM_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_decl.hpp.in index 020e816774..bdac3456e8 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_SUM_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_SUM_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_SUM_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_SUM_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_SUM_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_avail.hpp.in index 93e93ab97c..4e7231bd94 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_SUM_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_SUM_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_SUM_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_SUM_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_SUM_MV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_decl.hpp.in index ec86c6a49a..5182f61985 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_sum_mv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_SUM_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_SUM_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_SUM_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_SUM_MV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_SUM_MV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_update_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_update_eti_spec_avail.hpp.in index 3e2519e15f..41390dad8e 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_update_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_update_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_UPDATE_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_UPDATE_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_UPDATE_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_UPDATE_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_UPDATE_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_update_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_update_eti_spec_decl.hpp.in index 88a1116c0e..cff04c9fbe 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_update_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_update_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_UPDATE_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_UPDATE_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_UPDATE_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_UPDATE_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_UPDATE_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_avail.hpp.in index c38ac052a6..a641b06912 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_UPDATE_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS1_UPDATE_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_UPDATE_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS1_UPDATE_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_UPDATE_MV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_decl.hpp.in index 87c1dfcf21..deec84712b 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_update_mv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS1_UPDATE_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS1_UPDATE_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS1_UPDATE_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS1_UPDATE_MV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS1_UPDATE_MV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_avail.hpp.in index 53fbd6a49d..1a7cd9acce 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS2_GEMV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS2_GEMV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS2_GEMV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS2_GEMV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS2_GEMV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_decl.hpp.in index 763656788e..9d69383b3d 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas2_gemv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS2_GEMV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS2_GEMV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS2_GEMV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS2_GEMV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS2_GEMV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_avail.hpp.in index ad7a6eb619..320bab1231 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS3_GEMM_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS3_GEMM_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS3_GEMM_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS3_GEMM_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS3_GEMM_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_decl.hpp.in index 2a3f55bee0..22ea9a1ed1 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas3_gemm_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS3_GEMM_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS3_GEMM_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS3_GEMM_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS3_GEMM_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS3_GEMM_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_avail.hpp.in index 1b4a7f720c..d90ba5f299 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_avail.hpp.in @@ -1,49 +1,21 @@ -#ifndef KOKKOSBLAS3_TRMM_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS3_TRMM_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS3_TRMM_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS3_TRMM_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_decl.hpp.in index cb76daa82b..e802ccf4fc 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas3_trmm_eti_spec_decl.hpp.in @@ -1,49 +1,21 @@ -#ifndef KOKKOSBLAS3_TRMM_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS3_TRMM_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS3_TRMM_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS3_TRMM_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_avail.hpp.in index 70227afb92..520339e771 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_avail.hpp.in @@ -1,47 +1,20 @@ -#ifndef KOKKOSBLAS3_TRSM_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS3_TRSM_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS3_TRSM_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS3_TRSM_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_decl.hpp.in index a038418ab7..11ca605f4f 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas3_trsm_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSBLAS3_TRSM_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS3_TRSM_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS3_TRSM_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS3_TRSM_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_avail.hpp.in index 3f3fe7db7c..ae262c912e 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS_GESV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS_GESV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS_GESV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS_GESV_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS_GESV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_decl.hpp.in index ebc6f553f1..2ae20b772c 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas_gesv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSBLAS_GESV_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS_GESV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS_GESV_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS_GESV_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { @BLAS_GESV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_avail.hpp.in index 988f69389b..3f669efa06 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_avail.hpp.in @@ -1,49 +1,21 @@ -#ifndef KOKKOSBLAS_TRTRI_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSBLAS_TRTRI_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS_TRTRI_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSBLAS_TRTRI_ETI_SPEC_AVAIL_HPP_ namespace KokkosBlas { namespace Impl { diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_decl.hpp.in index 6469c42257..1bd8c9da19 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas_trtri_eti_spec_decl.hpp.in @@ -1,49 +1,21 @@ -#ifndef KOKKOSBLAS_TRTRI_ETI_SPEC_DECL_HPP_ -#define KOKKOSBLAS_TRTRI_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSBLAS_TRTRI_ETI_SPEC_DECL_HPP_ +#define KOKKOSBLAS_TRTRI_ETI_SPEC_DECL_HPP_ namespace KokkosBlas { namespace Impl { diff --git a/graph/eti/generated_specializations_cpp/color_d1/KokkosGraph_color_d1_eti_spec_inst.cpp.in b/graph/eti/generated_specializations_cpp/color_d1/KokkosGraph_color_d1_eti_spec_inst.cpp.in index c4e4c8efe6..5b5af68932 100644 --- a/graph/eti/generated_specializations_cpp/color_d1/KokkosGraph_color_d1_eti_spec_inst.cpp.in +++ b/graph/eti/generated_specializations_cpp/color_d1/KokkosGraph_color_d1_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/graph/eti/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_avail.hpp.in b/graph/eti/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_avail.hpp.in index daff73b371..7a2404f981 100644 --- a/graph/eti/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_avail.hpp.in +++ b/graph/eti/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_avail.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSGRAPH_COLOR_D1_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSGRAPH_COLOR_D1_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSGRAPH_COLOR_D1_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSGRAPH_COLOR_D1_ETI_SPEC_AVAIL_HPP_ namespace KokkosGraph { namespace Impl { @GRAPH_COLOR_D1_ETI_AVAIL_BLOCK@ diff --git a/graph/eti/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_decl.hpp.in b/graph/eti/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_decl.hpp.in index 8e8ca17113..23e1699557 100644 --- a/graph/eti/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_decl.hpp.in +++ b/graph/eti/generated_specializations_hpp/KokkosGraph_color_d1_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSGRAPH_COLOR_D1_ETI_SPEC_DECL_HPP_ -#define KOKKOSGRAPH_COLOR_D1_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSGRAPH_COLOR_D1_ETI_SPEC_DECL_HPP_ +#define KOKKOSGRAPH_COLOR_D1_ETI_SPEC_DECL_HPP_ namespace KokkosGraph { namespace Impl { @GRAPH_COLOR_D1_ETI_DECL_BLOCK@ diff --git a/sparse/eti/generated_specializations_cpp/bspgemm_numeric/KokkosSparse_bspgemm_numeric_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/bspgemm_numeric/KokkosSparse_bspgemm_numeric_eti_spec_inst.cpp.in index eb5d74232e..e6ac52d9ff 100644 --- a/sparse/eti/generated_specializations_cpp/bspgemm_numeric/KokkosSparse_bspgemm_numeric_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/bspgemm_numeric/KokkosSparse_bspgemm_numeric_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/gauss_seidel_apply/KokkosSparse_gauss_seidel_apply_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/gauss_seidel_apply/KokkosSparse_gauss_seidel_apply_eti_spec_inst.cpp.in index 3868df928d..72da9bde0a 100644 --- a/sparse/eti/generated_specializations_cpp/gauss_seidel_apply/KokkosSparse_gauss_seidel_apply_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/gauss_seidel_apply/KokkosSparse_gauss_seidel_apply_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/gauss_seidel_numeric/KokkosSparse_gauss_seidel_numeric_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/gauss_seidel_numeric/KokkosSparse_gauss_seidel_numeric_eti_spec_inst.cpp.in index e4d0387052..246672c228 100644 --- a/sparse/eti/generated_specializations_cpp/gauss_seidel_numeric/KokkosSparse_gauss_seidel_numeric_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/gauss_seidel_numeric/KokkosSparse_gauss_seidel_numeric_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/gauss_seidel_symbolic/KokkosSparse_gauss_seidel_symbolic_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/gauss_seidel_symbolic/KokkosSparse_gauss_seidel_symbolic_eti_spec_inst.cpp.in index d478bf564b..2639fe80f3 100644 --- a/sparse/eti/generated_specializations_cpp/gauss_seidel_symbolic/KokkosSparse_gauss_seidel_symbolic_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/gauss_seidel_symbolic/KokkosSparse_gauss_seidel_symbolic_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/par_ilut_numeric/KokkosSparse_par_ilut_numeric_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/par_ilut_numeric/KokkosSparse_par_ilut_numeric_eti_spec_inst.cpp.in index 48f188f6f5..73bf5c805c 100644 --- a/sparse/eti/generated_specializations_cpp/par_ilut_numeric/KokkosSparse_par_ilut_numeric_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/par_ilut_numeric/KokkosSparse_par_ilut_numeric_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 3.0: Linear Algebra and Graph Kernels -// Copyright 2020 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/par_ilut_symbolic/KokkosSparse_par_ilut_symbolic_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/par_ilut_symbolic/KokkosSparse_par_ilut_symbolic_eti_spec_inst.cpp.in index 1f605a9fe9..b74d9b2863 100644 --- a/sparse/eti/generated_specializations_cpp/par_ilut_symbolic/KokkosSparse_par_ilut_symbolic_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/par_ilut_symbolic/KokkosSparse_par_ilut_symbolic_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 3.0: Linear Algebra and Graph Kernels -// Copyright 2020 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/spadd_numeric/KokkosSparse_spadd_numeric_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spadd_numeric/KokkosSparse_spadd_numeric_eti_spec_inst.cpp.in index 1ffa61b1d5..636b3e5808 100644 --- a/sparse/eti/generated_specializations_cpp/spadd_numeric/KokkosSparse_spadd_numeric_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/spadd_numeric/KokkosSparse_spadd_numeric_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/spadd_symbolic/KokkosSparse_spadd_symbolic_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spadd_symbolic/KokkosSparse_spadd_symbolic_eti_spec_inst.cpp.in index aa08a1c6c7..31c85a95d9 100644 --- a/sparse/eti/generated_specializations_cpp/spadd_symbolic/KokkosSparse_spadd_symbolic_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/spadd_symbolic/KokkosSparse_spadd_symbolic_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/spgemm_jacobi/KokkosSparse_spgemm_jacobi_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spgemm_jacobi/KokkosSparse_spgemm_jacobi_eti_spec_inst.cpp.in index 9761b9f1f4..9f76981754 100644 --- a/sparse/eti/generated_specializations_cpp/spgemm_jacobi/KokkosSparse_spgemm_jacobi_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/spgemm_jacobi/KokkosSparse_spgemm_jacobi_eti_spec_inst.cpp.in @@ -1,46 +1,19 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Seher Acer (sacer@sandia.gov) -// -// ************************************************************************ //@HEADER - #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true #include "KokkosKernels_config.h" diff --git a/sparse/eti/generated_specializations_cpp/spgemm_numeric/KokkosSparse_spgemm_numeric_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spgemm_numeric/KokkosSparse_spgemm_numeric_eti_spec_inst.cpp.in index 69f8fce032..a38337d2ff 100644 --- a/sparse/eti/generated_specializations_cpp/spgemm_numeric/KokkosSparse_spgemm_numeric_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/spgemm_numeric/KokkosSparse_spgemm_numeric_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/spgemm_symbolic/KokkosSparse_spgemm_symbolic_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spgemm_symbolic/KokkosSparse_spgemm_symbolic_eti_spec_inst.cpp.in index e9dcf8f6de..389c7ba79c 100644 --- a/sparse/eti/generated_specializations_cpp/spgemm_symbolic/KokkosSparse_spgemm_symbolic_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/spgemm_symbolic/KokkosSparse_spgemm_symbolic_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/spiluk_numeric/KokkosSparse_spiluk_numeric_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spiluk_numeric/KokkosSparse_spiluk_numeric_eti_spec_inst.cpp.in index 2db50f1acb..939f440293 100644 --- a/sparse/eti/generated_specializations_cpp/spiluk_numeric/KokkosSparse_spiluk_numeric_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/spiluk_numeric/KokkosSparse_spiluk_numeric_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/spiluk_symbolic/KokkosSparse_spiluk_symbolic_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spiluk_symbolic/KokkosSparse_spiluk_symbolic_eti_spec_inst.cpp.in index 278e2d7fc1..7feb19fc75 100644 --- a/sparse/eti/generated_specializations_cpp/spiluk_symbolic/KokkosSparse_spiluk_symbolic_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/spiluk_symbolic/KokkosSparse_spiluk_symbolic_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_bsrmatrix_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_bsrmatrix_eti_spec_inst.cpp.in index eafb5c0b1e..9895083764 100644 --- a/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_bsrmatrix_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_bsrmatrix_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true #include "KokkosKernels_config.h" diff --git a/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_eti_spec_inst.cpp.in index f7bd547c7d..27d7c760a7 100644 --- a/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_inst.cpp.in index 5f2c437627..d089eca0e3 100644 --- a/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true #include "KokkosKernels_config.h" diff --git a/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_eti_spec_inst.cpp.in index 151a6f9300..6900c55984 100644 --- a/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_struct_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_struct_eti_spec_inst.cpp.in index b30e064efe..8b1ac0f40d 100644 --- a/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_struct_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_mv_struct_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_struct_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_struct_eti_spec_inst.cpp.in index 1dee031c5c..385184e11d 100644 --- a/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_struct_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/spmv/KokkosSparse_spmv_struct_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/sptrsv_solve/KokkosSparse_sptrsv_solve_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/sptrsv_solve/KokkosSparse_sptrsv_solve_eti_spec_inst.cpp.in index c98cca2e4a..892e5f6077 100644 --- a/sparse/eti/generated_specializations_cpp/sptrsv_solve/KokkosSparse_sptrsv_solve_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/sptrsv_solve/KokkosSparse_sptrsv_solve_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/sptrsv_symbolic/KokkosSparse_sptrsv_symbolic_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/sptrsv_symbolic/KokkosSparse_sptrsv_symbolic_eti_spec_inst.cpp.in index 3944b5adec..7f8dc19a66 100644 --- a/sparse/eti/generated_specializations_cpp/sptrsv_symbolic/KokkosSparse_sptrsv_symbolic_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/sptrsv_symbolic/KokkosSparse_sptrsv_symbolic_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_cpp/trsv/KokkosSparse_trsv_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/trsv/KokkosSparse_trsv_eti_spec_inst.cpp.in index e6ed364461..7d64d531c3 100644 --- a/sparse/eti/generated_specializations_cpp/trsv/KokkosSparse_trsv_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/trsv/KokkosSparse_trsv_eti_spec_inst.cpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_avail.hpp.in index 7159192433..d33d60e0cc 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_BSPGEMM_NUMERIC_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_BSPGEMM_NUMERIC_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_BSPGEMM_NUMERIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_BSPGEMM_NUMERIC_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_BSPGEMM_NUMERIC_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_decl.hpp.in index 5d63c640d6..2fdcd740e2 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_bspgemm_numeric_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_BSPGEMM_NUMERIC_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_BSPGEMM_NUMERIC_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_BSPGEMM_NUMERIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_BSPGEMM_NUMERIC_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_BSPGEMM_NUMERIC_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_avail.hpp.in index 7526fbcfaa..e5469fcbcf 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_GAUSS_SEIDEL_APPLY_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_GAUSS_SEIDEL_APPLY_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_GAUSS_SEIDEL_APPLY_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_GAUSS_SEIDEL_APPLY_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_GAUSS_SEIDEL_APPLY_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_decl.hpp.in index 8d4a4496b9..9be44095f0 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_apply_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_GAUSS_SEIDEL_APPLY_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_GAUSS_SEIDEL_APPLY_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_GAUSS_SEIDEL_APPLY_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_GAUSS_SEIDEL_APPLY_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_GAUSS_SEIDEL_APPLY_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_avail.hpp.in index 6b352c2af4..9470bbf977 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_GAUSS_SEIDEL_NUMERIC_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_GAUSS_SEIDEL_NUMERIC_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_GAUSS_SEIDEL_NUMERIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_GAUSS_SEIDEL_NUMERIC_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_GAUSS_SEIDEL_NUMERIC_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_decl.hpp.in index 387ebe1d8e..1e3befcc89 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_numeric_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_GAUSS_SEIDEL_NUMERIC_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_GAUSS_SEIDEL_NUMERIC_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_GAUSS_SEIDEL_NUMERIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_GAUSS_SEIDEL_NUMERIC_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_GAUSS_SEIDEL_NUMERIC_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_avail.hpp.in index 31f4fde901..65616a7c4c 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_GAUSS_SEIDEL_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_GAUSS_SEIDEL_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_GAUSS_SEIDEL_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_GAUSS_SEIDEL_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_GAUSS_SEIDEL_SYMBOLIC_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_decl.hpp.in index 5f0a73391e..493740dfb2 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_gauss_seidel_symbolic_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_GAUSS_SEIDEL_SYMBOLIC_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_GAUSS_SEIDEL_SYMBOLIC_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_GAUSS_SEIDEL_SYMBOLIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_GAUSS_SEIDEL_SYMBOLIC_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_GAUSS_SEIDEL_SYMBOLIC_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_avail.hpp.in index bc4a15f42a..836e7719db 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_avail.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 3.0: Linear Algebra and Graph Kernels -// Copyright 2020 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_decl.hpp.in index e35a104a07..943b721880 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_numeric_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 3.0: Linear Algebra and Graph Kernels -// Copyright 2020 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_PAR_ILUT_NUMERIC_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_avail.hpp.in index feb54d3255..85a34e467f 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_avail.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 3.0: Linear Algebra and Graph Kernels -// Copyright 2020 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_decl.hpp.in index ba0aad9884..c30fe10f82 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_par_ilut_symbolic_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 3.0: Linear Algebra and Graph Kernels -// Copyright 2020 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_PAR_ILUT_SYMBOLIC_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_avail.hpp.in index b47c423974..105ec58109 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_avail.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_SPADD_NUMERIC_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPADD_NUMERIC_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPADD_NUMERIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPADD_NUMERIC_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPADD_NUMERIC_ETI_AVAIL_BLOCK@ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_decl.hpp.in index fd971bc314..43b1da79d1 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_numeric_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_SPADD_NUMERIC_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPADD_NUMERIC_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPADD_NUMERIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPADD_NUMERIC_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPADD_NUMERIC_ETI_DECL_BLOCK@ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_avail.hpp.in index b38552c34a..e240917f2a 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_avail.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_SPADD_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPADD_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPADD_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPADD_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPADD_SYMBOLIC_ETI_AVAIL_BLOCK@ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_decl.hpp.in index ea001cb72b..131960272e 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spadd_symbolic_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_SPADD_SYMBOLIC_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPADD_SYMBOLIC_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPADD_SYMBOLIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPADD_SYMBOLIC_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPADD_SYMBOLIC_ETI_DECL_BLOCK@ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_avail.hpp.in index 5e64ea9495..d2ccee4e9f 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_avail.hpp.in @@ -1,46 +1,19 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Seher Acer (sacer@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ + #ifndef KOKKOSSPARSE_SPGEMM_JACOBI_ETI_SPEC_AVAIL_HPP_ #define KOKKOSSPARSE_SPGEMM_JACOBI_ETI_SPEC_AVAIL_HPP_ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_decl.hpp.in index cb6a6e1a17..313f1a88d0 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_jacobi_eti_spec_decl.hpp.in @@ -1,49 +1,21 @@ -/* //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Seher Acer (sacer@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ + #ifndef KOKKOSSPARSE_SPGEMM_JACOBI_ETI_SPEC_DECL_HPP_ #define KOKKOSSPARSE_SPGEMM_JACOBI_ETI_SPEC_DECL_HPP_ - namespace KokkosSparse { namespace Impl { @SPARSE_SPGEMM_JACOBI_ETI_DECL_BLOCK@ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_avail.hpp.in index c1edd15270..68299368a8 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPGEMM_NUMERIC_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPGEMM_NUMERIC_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPGEMM_NUMERIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPGEMM_NUMERIC_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPGEMM_NUMERIC_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_decl.hpp.in index 6b31499d52..af422e6fe5 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_numeric_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPGEMM_NUMERIC_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPGEMM_NUMERIC_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPGEMM_NUMERIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPGEMM_NUMERIC_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPGEMM_NUMERIC_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_avail.hpp.in index 5e229da6e5..cbd337d939 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPGEMM_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPGEMM_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPGEMM_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPGEMM_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPGEMM_SYMBOLIC_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_decl.hpp.in index 318baede03..2f3870e948 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_symbolic_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPGEMM_SYMBOLIC_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPGEMM_SYMBOLIC_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPGEMM_SYMBOLIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPGEMM_SYMBOLIC_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPGEMM_SYMBOLIC_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_avail.hpp.in index aae64aac59..51fa5de8be 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_avail.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_SPILUK_NUMERIC_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPILUK_NUMERIC_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPILUK_NUMERIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPILUK_NUMERIC_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_decl.hpp.in index 1ffb41a1b2..fe5cc1bfa7 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_numeric_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_SPILUK_NUMERIC_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPILUK_NUMERIC_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPILUK_NUMERIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPILUK_NUMERIC_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_avail.hpp.in index 210e7d8d65..66516863d9 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_avail.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_SPILUK_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPILUK_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPILUK_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPILUK_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_decl.hpp.in index b5b8bd33a8..bfffae9dc0 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spiluk_symbolic_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_SPILUK_SYMBOLIC_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPILUK_SYMBOLIC_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPILUK_SYMBOLIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPILUK_SYMBOLIC_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_avail.hpp.in index be5a45d793..f98e60ae0d 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_avail.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_SPMV_BSRMATRIX_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPMV_BSRMATRIX_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPMV_BSRMATRIX_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPMV_BSRMATRIX_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Experimental { namespace Impl { diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_decl.hpp.in index 164980342e..5a7977921d 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_bsrmatrix_eti_spec_decl.hpp.in @@ -1,48 +1,21 @@ -#ifndef KOKKOSSPARSE_SPMV_BSRMATRIX_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPMV_BSRMATRIX_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPMV_BSRMATRIX_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPMV_BSRMATRIX_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Experimental { namespace Impl { @@ -52,4 +25,4 @@ namespace Impl { } // namespace Impl } // namespace Experimental } // namespace KokkosSparse -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_avail.hpp.in index 846d92efa9..76140b383e 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPMV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPMV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPMV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPMV_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPMV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_decl.hpp.in index d29c921baf..14813536f0 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPMV_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPMV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPMV_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPMV_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPMV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_avail.hpp.in index b3e9fb662a..df53928266 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_avail.hpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_SPMV_MV_BSRMATRIX_ETI_SPEC_AVAIL_HPP_ #define KOKKOSSPARSE_SPMV_MV_BSRMATRIX_ETI_SPEC_AVAIL_HPP_ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_decl.hpp.in index c49e565f7b..4eb5388da1 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_bsrmatrix_eti_spec_decl.hpp.in @@ -1,45 +1,18 @@ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ #ifndef KOKKOSSPARSE_SPMV_MV_BSRMATRIX_ETI_SPEC_DECL_HPP_ #define KOKKOSSPARSE_SPMV_MV_BSRMATRIX_ETI_SPEC_DECL_HPP_ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_avail.hpp.in index 86d8899239..76d06889fe 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPMV_MV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPMV_MV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPMV_MV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPMV_MV_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPMV_MV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_decl.hpp.in index bfab663eaf..af58d3e7fc 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPMV_MV_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPMV_MV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPMV_MV_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPMV_MV_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPMV_MV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_avail.hpp.in index 73b3f2c79c..15bc766394 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPMV_MV_STRUCT_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPMV_MV_STRUCT_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPMV_MV_STRUCT_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPMV_MV_STRUCT_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPMV_MV_STRUCT_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_decl.hpp.in index b46307929d..11ba625f3c 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_mv_struct_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPMV_MV_STRUCT_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPMV_MV_STRUCT_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPMV_MV_STRUCT_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPMV_MV_STRUCT_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPMV_MV_STRUCT_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_avail.hpp.in index eecc124aaf..16ec5b18a0 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPMV_STRUCT_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPMV_STRUCT_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPMV_STRUCT_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPMV_STRUCT_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPMV_STRUCT_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_decl.hpp.in index f3b6bf4194..a03fcf586e 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spmv_struct_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPMV_STRUCT_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPMV_STRUCT_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPMV_STRUCT_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPMV_STRUCT_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPMV_STRUCT_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_avail.hpp.in index e1086f94e8..b119c69b90 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPTRSV_SOLVE_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPTRSV_SOLVE_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPTRSV_SOLVE_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPTRSV_SOLVE_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPTRSV_SOLVE_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_decl.hpp.in index 191c5d30a3..aa3d2b2cef 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_solve_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPTRSV_SOLVE_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPTRSV_SOLVE_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPTRSV_SOLVE_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPTRSV_SOLVE_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPTRSV_SOLVE_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_avail.hpp.in index 584cb1d6bd..482c8f7f76 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPTRSV_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_SPTRSV_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPTRSV_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPTRSV_SYMBOLIC_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPTRSV_SYMBOLIC_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_decl.hpp.in index 88f4ad9aab..4c48c895a1 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_sptrsv_symbolic_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_SPTRSV_SYMBOLIC_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_SPTRSV_SYMBOLIC_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_SPTRSV_SYMBOLIC_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPTRSV_SYMBOLIC_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_SPTRSV_SYMBOLIC_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_avail.hpp.in index 2932b704fb..0cccaeb64d 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_avail.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_TRSV_ETI_SPEC_AVAIL_HPP_ -#define KOKKOSSPARSE_TRSV_ETI_SPEC_AVAIL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_TRSV_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_TRSV_ETI_SPEC_AVAIL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_TRSV_ETI_AVAIL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_decl.hpp.in index 52909b9774..5b24a276d0 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_trsv_eti_spec_decl.hpp.in @@ -1,51 +1,24 @@ -#ifndef KOKKOSSPARSE_TRSV_ETI_SPEC_DECL_HPP_ -#define KOKKOSSPARSE_TRSV_ETI_SPEC_DECL_HPP_ -/* //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER -*/ +#ifndef KOKKOSSPARSE_TRSV_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_TRSV_ETI_SPEC_DECL_HPP_ namespace KokkosSparse { namespace Impl { @SPARSE_TRSV_ETI_DECL_BLOCK@ } //IMPL } //Kokkos -#endif \ No newline at end of file +#endif From 5d41987f0681e59ad546167093f68847c740d20b Mon Sep 17 00:00:00 2001 From: Christian Trott Date: Tue, 29 Nov 2022 12:45:03 -0700 Subject: [PATCH 201/226] Update copyright.txt --- Copyright.txt | 279 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 238 insertions(+), 41 deletions(-) diff --git a/Copyright.txt b/Copyright.txt index 2042c05527..a1a74a4e4a 100644 --- a/Copyright.txt +++ b/Copyright.txt @@ -1,41 +1,238 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ -//@HEADER + ************************************************************************ + + Kokkos v. 4.0 + Copyright (2022) National Technology & Engineering + Solutions of Sandia, LLC (NTESS). + + Under the terms of Contract DE-NA0003525 with NTESS, + the U.S. Government retains certain rights in this software. + + + ============================================================================== + Kokkos is under the Apache License v2.0 with LLVM Exceptions: + ============================================================================== + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS Apache 2.0 + + ---- LLVM Exceptions to the Apache 2.0 License ---- + + As an exception, if, as a result of your compiling your source code, portions + of this Software are embedded into an Object form of such source code, you + may redistribute such embedded portions in such Object form without complying + with the conditions of Sections 4(a), 4(b) and 4(d) of the License. + + In addition, if you combine or link compiled forms of this Software with + software that is licensed under the GPLv2 ("Combined Software") and if a + court of competent jurisdiction determines that the patent provision (Section + 3), the indemnity provision (Section 9) or other Section of the License + conflicts with the conditions of the GPLv2, you may retroactively and + prospectively choose to deem waived or otherwise exclude such Section(s) of + the License, but only in their entirety and only with respect to the Combined + Software. + + ============================================================================== + Software from third parties included in Kokkos: + ============================================================================== + + Kokkos contains third party software which is under different license + terms. All such code will be identified clearly using at least one of two + mechanisms: + 1) It will be in a separate directory tree with its own `LICENSE.txt` or + `LICENSE` file at the top containing the specific license and restrictions + which apply to that software, or + 2) It will contain specific license and restriction terms at the top of every + file. + + + THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Questions? Contact: + Siva Rajamanickam (srajama@sandia.gov) + Luc Berger-Vergiat (lberge@sandia.gov) + + ************************************************************************ From e222e619dcf3ad0b4257aaa2618de7145a76d1bf Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 30 Jan 2023 15:40:52 -0700 Subject: [PATCH 202/226] SWAP: update copyright for 4.0 --- .../KokkosBlas1_swap_eti_spec_inst.cpp.in | 36 +++-------------- .../KokkosBlas1_swap_eti_spec_avail.hpp.in | 39 ++++--------------- .../KokkosBlas1_swap_eti_spec_decl.hpp.in | 39 ++++--------------- blas/impl/KokkosBlas1_swap_impl.hpp | 36 +++-------------- blas/impl/KokkosBlas1_swap_spec.hpp | 36 +++-------------- blas/src/KokkosBlas1_swap.hpp | 36 +++-------------- blas/tpls/KokkosBlas1_swap_tpl_spec_avail.hpp | 36 +++-------------- blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp | 36 +++-------------- 8 files changed, 44 insertions(+), 250 deletions(-) diff --git a/blas/eti/generated_specializations_cpp/swap/KokkosBlas1_swap_eti_spec_inst.cpp.in b/blas/eti/generated_specializations_cpp/swap/KokkosBlas1_swap_eti_spec_inst.cpp.in index 3c94c724b1..71f0aad6d0 100644 --- a/blas/eti/generated_specializations_cpp/swap/KokkosBlas1_swap_eti_spec_inst.cpp.in +++ b/blas/eti/generated_specializations_cpp/swap/KokkosBlas1_swap_eti_spec_inst.cpp.in @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_avail.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_avail.hpp.in index fb16463a27..0ac4cbcd21 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_avail.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_avail.hpp.in @@ -2,42 +2,17 @@ //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ #ifndef KOKKOSBLAS1_SWAP_ETI_SPEC_AVAIL_HPP_ diff --git a/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_decl.hpp.in b/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_decl.hpp.in index 91239f78b0..e795c8fb9c 100644 --- a/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_decl.hpp.in +++ b/blas/eti/generated_specializations_hpp/KokkosBlas1_swap_eti_spec_decl.hpp.in @@ -2,42 +2,17 @@ //@HEADER // ************************************************************************ // -// KokkosKernels 0.9: Linear Algebra and Graph Kernels -// Copyright 2017 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ #ifndef KOKKOSBLAS1_SWAP_ETI_SPEC_DECL_HPP_ diff --git a/blas/impl/KokkosBlas1_swap_impl.hpp b/blas/impl/KokkosBlas1_swap_impl.hpp index a1affb5414..32a13d6469 100644 --- a/blas/impl/KokkosBlas1_swap_impl.hpp +++ b/blas/impl/KokkosBlas1_swap_impl.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ #ifndef KOKKOSBLAS1_SWAP_IMPL_HPP_ diff --git a/blas/impl/KokkosBlas1_swap_spec.hpp b/blas/impl/KokkosBlas1_swap_spec.hpp index b1d1e55f12..ed0a14e257 100644 --- a/blas/impl/KokkosBlas1_swap_spec.hpp +++ b/blas/impl/KokkosBlas1_swap_spec.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/blas/src/KokkosBlas1_swap.hpp b/blas/src/KokkosBlas1_swap.hpp index 66553ae819..f91d090cd5 100644 --- a/blas/src/KokkosBlas1_swap.hpp +++ b/blas/src/KokkosBlas1_swap.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/blas/tpls/KokkosBlas1_swap_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas1_swap_tpl_spec_avail.hpp index 84d438f030..14ecce2740 100644 --- a/blas/tpls/KokkosBlas1_swap_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas1_swap_tpl_spec_avail.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp index a68cd9debd..49ae14ad9d 100644 --- a/blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas1_swap_tpl_spec_decl.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ From 024bf7e60c81f8bd0c7c214ee08fc362d2e320a7 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 30 Jan 2023 15:41:33 -0700 Subject: [PATCH 203/226] Benchmark: update for copyright 4.0 --- perf_test/BenchmarkMain.cpp | 36 +++++---------------------------- perf_test/Benchmark_Context.hpp | 36 +++++---------------------------- 2 files changed, 10 insertions(+), 62 deletions(-) diff --git a/perf_test/BenchmarkMain.cpp b/perf_test/BenchmarkMain.cpp index d4376dcd48..ce74d8dba5 100644 --- a/perf_test/BenchmarkMain.cpp +++ b/perf_test/BenchmarkMain.cpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/perf_test/Benchmark_Context.hpp b/perf_test/Benchmark_Context.hpp index 8e356841de..bb083873f4 100644 --- a/perf_test/Benchmark_Context.hpp +++ b/perf_test/Benchmark_Context.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ From 8a72fea911e3c116e592787437ac0707e09dadc8 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 30 Jan 2023 15:42:06 -0700 Subject: [PATCH 204/226] header: update for new header version in 4.0 --- scripts/header | 36 +++++------------------------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/scripts/header b/scripts/header index 2042c05527..03eb04f8bd 100644 --- a/scripts/header +++ b/scripts/header @@ -1,41 +1,15 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER From b5c9907982465a89b0bd751262632510463c1961 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 30 Jan 2023 15:43:59 -0700 Subject: [PATCH 205/226] SPGEMM: update some TPL files to copyright for 4.0 --- ...osSparse_spgemm_numeric_tpl_spec_avail.hpp | 36 +++---------------- ...kosSparse_spgemm_numeric_tpl_spec_decl.hpp | 36 +++---------------- ...sSparse_spgemm_symbolic_tpl_spec_avail.hpp | 36 +++---------------- ...osSparse_spgemm_symbolic_tpl_spec_decl.hpp | 36 +++---------------- 4 files changed, 20 insertions(+), 124 deletions(-) diff --git a/sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_avail.hpp index b7e755f868..bfba70d913 100644 --- a/sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_avail.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_decl.hpp index 5a0cdb3f24..50555d9815 100644 --- a/sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_decl.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_avail.hpp index b526619c18..80454be92b 100644 --- a/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_avail.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_decl.hpp index 53d543b0d3..5db0fa18a9 100644 --- a/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_decl.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Siva Rajamanickam (srajama@sandia.gov) -// -// ************************************************************************ //@HEADER */ From db0d5fc85c4abdd4563115b54be0a36aacbe995c Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 30 Jan 2023 15:44:34 -0700 Subject: [PATCH 206/226] GMRES: update file headers to copyright for 4.0 --- .../KokkosSparse_gmres_eti_spec_inst.cpp.in | 39 ++++--------------- .../KokkosSparse_gmres_eti_spec_avail.hpp.in | 39 ++++--------------- .../KokkosSparse_gmres_eti_spec_decl.hpp.in | 39 ++++--------------- sparse/impl/KokkosSparse_gmres_impl.hpp | 36 +++-------------- sparse/impl/KokkosSparse_gmres_spec.hpp | 37 +++--------------- sparse/src/KokkosSparse_gmres.hpp | 36 +++-------------- sparse/src/KokkosSparse_gmres_handle.hpp | 36 +++-------------- .../KokkosSparse_gmres_tpl_spec_avail.hpp | 36 +++-------------- .../tpls/KokkosSparse_gmres_tpl_spec_decl.hpp | 36 +++-------------- sparse/unit_test/Test_Sparse_gmres.hpp | 36 +++-------------- 10 files changed, 57 insertions(+), 313 deletions(-) diff --git a/sparse/eti/generated_specializations_cpp/gmres/KokkosSparse_gmres_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/gmres/KokkosSparse_gmres_eti_spec_inst.cpp.in index 6212e38277..9ac8cceeb7 100644 --- a/sparse/eti/generated_specializations_cpp/gmres/KokkosSparse_gmres_eti_spec_inst.cpp.in +++ b/sparse/eti/generated_specializations_cpp/gmres/KokkosSparse_gmres_eti_spec_inst.cpp.in @@ -2,42 +2,17 @@ //@HEADER // ************************************************************************ // -// KokkosKernels 3.0: Linear Algebra and Graph Kernels -// Copyright 2020 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_avail.hpp.in index 8564fe68af..16b0bf66b7 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_avail.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_avail.hpp.in @@ -4,42 +4,17 @@ //@HEADER // ************************************************************************ // -// KokkosKernels 3.0: Linear Algebra and Graph Kernels -// Copyright 2020 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_decl.hpp.in index b08f9a0554..980540f7ba 100644 --- a/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_decl.hpp.in +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_gmres_eti_spec_decl.hpp.in @@ -4,42 +4,17 @@ //@HEADER // ************************************************************************ // -// KokkosKernels 3.0: Linear Algebra and Graph Kernels -// Copyright 2020 Sandia Corporation +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). // -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/sparse/impl/KokkosSparse_gmres_impl.hpp b/sparse/impl/KokkosSparse_gmres_impl.hpp index 5253dd47aa..aa90a70757 100644 --- a/sparse/impl/KokkosSparse_gmres_impl.hpp +++ b/sparse/impl/KokkosSparse_gmres_impl.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/sparse/impl/KokkosSparse_gmres_spec.hpp b/sparse/impl/KokkosSparse_gmres_spec.hpp index f4f141fcd4..f0498e5efe 100644 --- a/sparse/impl/KokkosSparse_gmres_spec.hpp +++ b/sparse/impl/KokkosSparse_gmres_spec.hpp @@ -2,45 +2,20 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER */ + #ifndef KOKKOSSPARSE_IMPL_GMRES_SPEC_HPP_ #define KOKKOSSPARSE_IMPL_GMRES_SPEC_HPP_ diff --git a/sparse/src/KokkosSparse_gmres.hpp b/sparse/src/KokkosSparse_gmres.hpp index 42cd46c17d..74da208d8b 100644 --- a/sparse/src/KokkosSparse_gmres.hpp +++ b/sparse/src/KokkosSparse_gmres.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/sparse/src/KokkosSparse_gmres_handle.hpp b/sparse/src/KokkosSparse_gmres_handle.hpp index b1d69dfad2..040e98bc00 100644 --- a/sparse/src/KokkosSparse_gmres_handle.hpp +++ b/sparse/src/KokkosSparse_gmres_handle.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/sparse/tpls/KokkosSparse_gmres_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_gmres_tpl_spec_avail.hpp index e447ce4cb4..6b8748e487 100644 --- a/sparse/tpls/KokkosSparse_gmres_tpl_spec_avail.hpp +++ b/sparse/tpls/KokkosSparse_gmres_tpl_spec_avail.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/sparse/tpls/KokkosSparse_gmres_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_gmres_tpl_spec_decl.hpp index e0125ec0e6..16bedab8b2 100644 --- a/sparse/tpls/KokkosSparse_gmres_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_gmres_tpl_spec_decl.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER */ diff --git a/sparse/unit_test/Test_Sparse_gmres.hpp b/sparse/unit_test/Test_Sparse_gmres.hpp index 47b47f7f98..6b1265dabd 100644 --- a/sparse/unit_test/Test_Sparse_gmres.hpp +++ b/sparse/unit_test/Test_Sparse_gmres.hpp @@ -2,43 +2,17 @@ //@HEADER // ************************************************************************ // -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact James Foucar (jgfouca@sandia.gov) -// -// ************************************************************************ //@HEADER */ From 7003e0bb24db828c4f0f96633c8865d7fe8ed438 Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 30 Jan 2023 16:16:15 -0700 Subject: [PATCH 207/226] clang-format: applying clang-format to file that are not formatted yet --- .../Test_Batched_SerialTrsm_Complex.hpp | 1 - .../unit_test/Test_Batched_TeamLU_Complex.hpp | 1 - .../Test_Batched_TeamTrsm_Complex.hpp | 1 - .../Test_Batched_TeamTrsv_Complex.hpp | 1 - cmake/compile_tests/armpl.cpp | 4 +- cmake/compile_tests/magma.cpp | 4 +- cmake/compile_tests/mkl.cpp | 5 +- example/graph/PartitioningExample.cpp | 132 ++-- example/wiki/blas/abs/abs.cpp | 31 +- .../graph/KokkosGraph_wiki_9pt_stencil.hpp | 201 +++-- .../wiki/graph/KokkosGraph_wiki_coloring.cpp | 52 +- example/wiki/graph/KokkosGraph_wiki_rcm.cpp | 59 +- .../sparse/KokkosSparse_wiki_bsrmatrix.cpp | 20 +- .../wiki/sparse/KokkosSparse_wiki_spadd.cpp | 2 +- .../wiki/sparse/KokkosSparse_wiki_spmv.cpp | 2 +- .../blas/blas1/KokkosBlas_dot_perf_test.hpp | 1 - .../blas1/KokkosBlas_team_dot_perf_test.hpp | 1 - .../blas/blas2/KokkosBlas2_gemv_perf_test.hpp | 1 - test_common/KokkosKernels_MyCRSMatrix.hpp | 245 +++--- test_common/KokkosKernels_TestParameters.hpp | 79 +- test_common/Kokkos_Performance.hpp | 700 +++++++++--------- 21 files changed, 769 insertions(+), 774 deletions(-) diff --git a/batched/dense/unit_test/Test_Batched_SerialTrsm_Complex.hpp b/batched/dense/unit_test/Test_Batched_SerialTrsm_Complex.hpp index fbd01a38a6..d7c52ccd77 100644 --- a/batched/dense/unit_test/Test_Batched_SerialTrsm_Complex.hpp +++ b/batched/dense/unit_test/Test_Batched_SerialTrsm_Complex.hpp @@ -14,7 +14,6 @@ // //@HEADER - #if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) TEST_F(TestCategory, batched_scalar_serial_trsm_l_l_nt_u_dcomplex_dcomplex) { typedef ::Test::Trmm::ParamTag -int main(void) { - return 0; -} +int main(void) { return 0; } diff --git a/cmake/compile_tests/magma.cpp b/cmake/compile_tests/magma.cpp index ad88826bea..21d6a25252 100644 --- a/cmake/compile_tests/magma.cpp +++ b/cmake/compile_tests/magma.cpp @@ -18,6 +18,4 @@ #include #include -int main(void) { - return 0; -} +int main(void) { return 0; } diff --git a/cmake/compile_tests/mkl.cpp b/cmake/compile_tests/mkl.cpp index 12b694659f..29afa30030 100644 --- a/cmake/compile_tests/mkl.cpp +++ b/cmake/compile_tests/mkl.cpp @@ -15,7 +15,4 @@ //@HEADER #include -int main(void) { - return 0; -} - +int main(void) { return 0; } diff --git a/example/graph/PartitioningExample.cpp b/example/graph/PartitioningExample.cpp index a31a445229..1bef46cd28 100644 --- a/example/graph/PartitioningExample.cpp +++ b/example/graph/PartitioningExample.cpp @@ -30,8 +30,7 @@ using std::vector; //#include "../../src/sparse/impl/KokkosSparse_partitioning_impl.hpp" -int main(int argc, char *argv[]) -{ +int main(int argc, char* argv[]) { /* const int device_id = 0; @@ -43,78 +42,71 @@ int main(int argc, char *argv[]) } */ - //Generate a square 2D mesh in serial, with edges in both diagonals - const int xy = 31; - const int nnodes = (xy + 1) * (xy + 1); - vector adjMat(nnodes * nnodes, false); - //Number of nodes is (n+1)^2 - for(int cellX = 0; cellX < xy; cellX++) - { - for(int cellY = 0; cellY < xy; cellY++) - { - int upLeft = cellX + (xy + 1) * cellY; - int upRight = cellX + 1 + (xy + 1) * cellY; - int downLeft = cellX + (xy + 1) * (cellY + 1); - int downRight = cellX + 1 + (xy + 1) * (cellY + 1); - #define CONNECT(n1, n2) \ - adjMat[n1 + n2 * nnodes] = true; \ - adjMat[n2 + n1 * nnodes] = true; - //Form this pattern in each cell: - // - // +------+ - // |\ /| - // | \ / | - // | \/ | - // | /\ | - // | / \ | - // |/ \| - // +------+ - // - CONNECT(upLeft, upRight); - CONNECT(upLeft, downLeft); - CONNECT(upLeft, downRight); - CONNECT(upRight, downRight); - CONNECT(downLeft, downRight); - CONNECT(downLeft, upRight); - } + // Generate a square 2D mesh in serial, with edges in both diagonals + const int xy = 31; + const int nnodes = (xy + 1) * (xy + 1); + vector adjMat(nnodes * nnodes, false); + // Number of nodes is (n+1)^2 + for (int cellX = 0; cellX < xy; cellX++) { + for (int cellY = 0; cellY < xy; cellY++) { + int upLeft = cellX + (xy + 1) * cellY; + int upRight = cellX + 1 + (xy + 1) * cellY; + int downLeft = cellX + (xy + 1) * (cellY + 1); + int downRight = cellX + 1 + (xy + 1) * (cellY + 1); +#define CONNECT(n1, n2) \ + adjMat[n1 + n2 * nnodes] = true; \ + adjMat[n2 + n1 * nnodes] = true; + // Form this pattern in each cell: + // + // +------+ + // |\ /| + // | \ / | + // | \/ | + // | /\ | + // | / \ | + // |/ \| + // +------+ + // + CONNECT(upLeft, upRight); + CONNECT(upLeft, downLeft); + CONNECT(upLeft, downRight); + CONNECT(upRight, downRight); + CONNECT(downLeft, downRight); + CONNECT(downLeft, upRight); } - - //Build a sparse (CRS) graph from the dense adjacency matrix - int numEdges = 0; - for(size_t i = 0; i < adjMat.size(); i++) - numEdges += (adjMat[i] ? 1 : 0); + } + + // Build a sparse (CRS) graph from the dense adjacency matrix + int numEdges = 0; + for (size_t i = 0; i < adjMat.size(); i++) numEdges += (adjMat[i] ? 1 : 0); - /* - Kokkos::View rowmap("Rowmap", nnodes + 1); - Kokkos::View entries("Entries", numEdges); - int accum = 0; - for(int r = 0; r <= nnodes; r++) + /* + Kokkos::View rowmap("Rowmap", nnodes + 1); + Kokkos::View entries("Entries", numEdges); + int accum = 0; + for(int r = 0; r <= nnodes; r++) + { + rowmap(r) = accum; + if(r == nnodes) + break; + for(int c = 0; c < nnodes; c++) { - rowmap(r) = accum; - if(r == nnodes) - break; - for(int c = 0; c < nnodes; c++) - { - if(adjMat[c + r * nnodes]) - entries(accum++) = c; - } + if(adjMat[c + r * nnodes]) + entries(accum++) = c; } - */ + } + */ - //Dump the graph to a graphviz file - FILE* g = fopen("graph.dot", "w"); - fprintf(g, "graph {\n"); - for(int r = 0; r < nnodes; r++) - { - for(int c = r; c < nnodes; c++) - { - if(adjMat[c + r * nnodes]) - fprintf(g, "n%d -- n%d\n", r, c); - } + // Dump the graph to a graphviz file + FILE* g = fopen("graph.dot", "w"); + fprintf(g, "graph {\n"); + for (int r = 0; r < nnodes; r++) { + for (int c = r; c < nnodes; c++) { + if (adjMat[c + r * nnodes]) fprintf(g, "n%d -- n%d\n", r, c); } - fprintf(g, "}\n"); - fclose(g); - //Kokkos::finalize(); - return 0; + } + fprintf(g, "}\n"); + fclose(g); + // Kokkos::finalize(); + return 0; } - diff --git a/example/wiki/blas/abs/abs.cpp b/example/wiki/blas/abs/abs.cpp index d7b3fe200b..c5a1d39e15 100644 --- a/example/wiki/blas/abs/abs.cpp +++ b/example/wiki/blas/abs/abs.cpp @@ -13,27 +13,26 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //@HEADER -#include -#include +#include +#include int main(int argc, char* argv[]) { - Kokkos::initialize(); + Kokkos::initialize(); - int N = atoi(argv[1]); + int N = atoi(argv[1]); - Kokkos::View x("X",N); - Kokkos::View y("Y",N); - Kokkos::deep_copy(x,-1.0); + Kokkos::View x("X", N); + Kokkos::View y("Y", N); + Kokkos::deep_copy(x, -1.0); - KokkosBlas::abs(y,x); + KokkosBlas::abs(y, x); - double sum = 0.0; - Kokkos::parallel_reduce("CheckValue", N, KOKKOS_LAMBDA (const int& i, double& lsum) { - lsum += y(i); - },sum); + double sum = 0.0; + Kokkos::parallel_reduce( + "CheckValue", N, + KOKKOS_LAMBDA(const int& i, double& lsum) { lsum += y(i); }, sum); - printf("Sum: %lf Expected: %lf Diff: %e\n",sum,1.0*N,sum-1.0*N); - - Kokkos::finalize(); -} + printf("Sum: %lf Expected: %lf Diff: %e\n", sum, 1.0 * N, sum - 1.0 * N); + Kokkos::finalize(); +} diff --git a/example/wiki/graph/KokkosGraph_wiki_9pt_stencil.hpp b/example/wiki/graph/KokkosGraph_wiki_9pt_stencil.hpp index cadc2a2f76..57f109f652 100644 --- a/example/wiki/graph/KokkosGraph_wiki_9pt_stencil.hpp +++ b/example/wiki/graph/KokkosGraph_wiki_9pt_stencil.hpp @@ -25,131 +25,116 @@ #include #include -using Ordinal = default_lno_t; -using Offset = default_size_type; -using Layout = default_layout; -using ExecSpace = Kokkos::DefaultExecutionSpace; +using Ordinal = default_lno_t; +using Offset = default_size_type; +using Layout = default_layout; +using ExecSpace = Kokkos::DefaultExecutionSpace; using DeviceSpace = typename ExecSpace::memory_space; using Kokkos::HostSpace; -using RowmapType = Kokkos::View; +using RowmapType = Kokkos::View; using ColindsType = Kokkos::View; -using Handle = KokkosKernels::Experimental:: - KokkosKernelsHandle; +using Handle = KokkosKernels::Experimental::KokkosKernelsHandle< + Offset, Ordinal, default_scalar, ExecSpace, DeviceSpace, DeviceSpace>; -namespace GraphDemo -{ - Ordinal gridX = 15; - Ordinal gridY = 25; - Ordinal numVertices = gridX * gridY; +namespace GraphDemo { +Ordinal gridX = 15; +Ordinal gridY = 25; +Ordinal numVertices = gridX * gridY; - void setGridDimensions(Ordinal newX, Ordinal newY) - { - gridX = newX; - gridY = newY; - numVertices = gridX * gridY; - } +void setGridDimensions(Ordinal newX, Ordinal newY) { + gridX = newX; + gridY = newY; + numVertices = gridX * gridY; +} - //Helper to get the vertex ID given grid coordinates - Ordinal getVertexID(Ordinal x, Ordinal y) - { - return y * gridX + x; - } +// Helper to get the vertex ID given grid coordinates +Ordinal getVertexID(Ordinal x, Ordinal y) { return y * gridX + x; } - //Inverse of getVertexID - void getVertexPos(Ordinal vert, Ordinal& x, Ordinal& y) - { - x = vert % gridX; - y = vert / gridX; - } +// Inverse of getVertexID +void getVertexPos(Ordinal vert, Ordinal& x, Ordinal& y) { + x = vert % gridX; + y = vert / gridX; +} - //Helper to print out colors in the shape of the grid - template - void printColoring(ColorView colors, Ordinal numColors) - { - //Read colors on host - auto colorsHost = Kokkos::create_mirror_view_and_copy(HostSpace(), colors); - int numDigits = ceil(log10(numColors + 1)); - //Print out the grid, with columns aligned and at least one space between numbers - std::ostringstream numFmtStream; - numFmtStream << '%' << numDigits + 1 << 'd'; - std::string numFmt = numFmtStream.str(); - for(Ordinal y = 0; y < gridY; y++) - { - for(Ordinal x = 0; x < gridX; x++) - { - Ordinal vertex = getVertexID(x, y); - int color = colorsHost(vertex); - printf(numFmt.c_str(), color); - } - putchar('\n'); +// Helper to print out colors in the shape of the grid +template +void printColoring(ColorView colors, Ordinal numColors) { + // Read colors on host + auto colorsHost = Kokkos::create_mirror_view_and_copy(HostSpace(), colors); + int numDigits = ceil(log10(numColors + 1)); + // Print out the grid, with columns aligned and at least one space between + // numbers + std::ostringstream numFmtStream; + numFmtStream << '%' << numDigits + 1 << 'd'; + std::string numFmt = numFmtStream.str(); + for (Ordinal y = 0; y < gridY; y++) { + for (Ordinal x = 0; x < gridX; x++) { + Ordinal vertex = getVertexID(x, y); + int color = colorsHost(vertex); + printf(numFmt.c_str(), color); } + putchar('\n'); } +} - template - void printMIS(MISView misList) - { - //Read colors on host - auto misHost = Kokkos::create_mirror_view_and_copy(HostSpace(), misList); - std::set mis; - for(Offset i = 0; i < (Offset) misList.extent(0); i++) - mis.insert(misHost(i)); - for(Ordinal y = 0; y < gridY; y++) - { - for(Ordinal x = 0; x < gridX; x++) - { - Ordinal vertex = getVertexID(x, y); - if(mis.find(vertex) == mis.end()) - printf(". "); - else - printf("# "); - } - putchar('\n'); +template +void printMIS(MISView misList) { + // Read colors on host + auto misHost = Kokkos::create_mirror_view_and_copy(HostSpace(), misList); + std::set mis; + for (Offset i = 0; i < (Offset)misList.extent(0); i++) mis.insert(misHost(i)); + for (Ordinal y = 0; y < gridY; y++) { + for (Ordinal x = 0; x < gridX; x++) { + Ordinal vertex = getVertexID(x, y); + if (mis.find(vertex) == mis.end()) + printf(". "); + else + printf("# "); } + putchar('\n'); } +} - //Build the graph on host, allocate these views on device and copy the graph to them. - //Both rowmapDevice and colindsDevice are output parameters and should default-initialized (empty) on input. - void generate9pt(RowmapType& rowmapDevice, ColindsType& colindsDevice) - { - //Generate the graph on host (use std::vector to not need to know - //how many entries ahead of time) - std::vector rowmap(numVertices + 1); - std::vector colinds; - rowmap[0] = 0; - for(Ordinal vert = 0; vert < numVertices; vert++) - { - Ordinal x, y; - getVertexPos(vert, x, y); - //Loop over the neighbors in a 3x3 region - for(Ordinal ny = y - 1; ny <= y + 1; ny++) - { - for(Ordinal nx = x - 1; nx <= x + 1; nx++) - { - //exclude the edge to self - if(nx == x && ny == y) - continue; - //exclude vertices that would be outside the grid - if(nx < 0 || nx >= gridX || ny < 0 || ny >= gridY) - continue; - //add the neighbor to colinds, forming an edge - colinds.push_back(getVertexID(nx, ny)); - } +// Build the graph on host, allocate these views on device and copy the graph to +// them. Both rowmapDevice and colindsDevice are output parameters and should +// default-initialized (empty) on input. +void generate9pt(RowmapType& rowmapDevice, ColindsType& colindsDevice) { + // Generate the graph on host (use std::vector to not need to know + // how many entries ahead of time) + std::vector rowmap(numVertices + 1); + std::vector colinds; + rowmap[0] = 0; + for (Ordinal vert = 0; vert < numVertices; vert++) { + Ordinal x, y; + getVertexPos(vert, x, y); + // Loop over the neighbors in a 3x3 region + for (Ordinal ny = y - 1; ny <= y + 1; ny++) { + for (Ordinal nx = x - 1; nx <= x + 1; nx++) { + // exclude the edge to self + if (nx == x && ny == y) continue; + // exclude vertices that would be outside the grid + if (nx < 0 || nx >= gridX || ny < 0 || ny >= gridY) continue; + // add the neighbor to colinds, forming an edge + colinds.push_back(getVertexID(nx, ny)); } - //mark where the current row ends - rowmap[vert + 1] = colinds.size(); } - Offset numEdges = colinds.size(); - //Now that the graph is formed, copy rowmap and colinds to Kokkos::Views in device memory - //The nonowning host views just alias the std::vectors. - Kokkos::View> rowmapHost(rowmap.data(), numVertices + 1); - Kokkos::View> colindsHost(colinds.data(), numEdges); - //Allocate owning views on device with the correct size. - rowmapDevice = RowmapType("Rowmap", numVertices + 1); - colindsDevice = ColindsType("Colinds", numEdges); - //Copy the graph from host to device - Kokkos::deep_copy(rowmapDevice, rowmapHost); - Kokkos::deep_copy(colindsDevice, colindsHost); + // mark where the current row ends + rowmap[vert + 1] = colinds.size(); } + Offset numEdges = colinds.size(); + // Now that the graph is formed, copy rowmap and colinds to Kokkos::Views in + // device memory The nonowning host views just alias the std::vectors. + Kokkos::View> + rowmapHost(rowmap.data(), numVertices + 1); + Kokkos::View> + colindsHost(colinds.data(), numEdges); + // Allocate owning views on device with the correct size. + rowmapDevice = RowmapType("Rowmap", numVertices + 1); + colindsDevice = ColindsType("Colinds", numEdges); + // Copy the graph from host to device + Kokkos::deep_copy(rowmapDevice, rowmapHost); + Kokkos::deep_copy(colindsDevice, colindsHost); } +} // namespace GraphDemo #endif diff --git a/example/wiki/graph/KokkosGraph_wiki_coloring.cpp b/example/wiki/graph/KokkosGraph_wiki_coloring.cpp index efda8927ba..ac62861e12 100644 --- a/example/wiki/graph/KokkosGraph_wiki_coloring.cpp +++ b/example/wiki/graph/KokkosGraph_wiki_coloring.cpp @@ -17,59 +17,63 @@ #include "KokkosGraph_Distance1Color.hpp" #include "KokkosGraph_Distance2Color.hpp" -//Greedy Graph Coloring +// Greedy Graph Coloring // -Generate the graph for a rectangular grid, with a 9-point stencil // (each vertex is adjacent to the 8 vertices around it within 1 grid square) -// -Run Distance-1 coloring (usual coloring: adjacent vertices must have different colors) +// -Run Distance-1 coloring (usual coloring: adjacent vertices must have +// different colors) // -Print out the colors of each vertex in a grid // -Run Distance-2 coloring, and print out the colors // -Different constraint: two vertices separated by a path of length 1 OR 2 // must have different colors) -int main() -{ +int main() { Kokkos::initialize(); { using GraphDemo::numVertices; RowmapType rowmapDevice; ColindsType colindsDevice; - //Step 1: Generate the graph on host, allocate space on device, and copy. - //See function "generate9pt" below. + // Step 1: Generate the graph on host, allocate space on device, and copy. + // See function "generate9pt" below. GraphDemo::generate9pt(rowmapDevice, colindsDevice); - //Step 2: Create handle and run distance-1 coloring. + // Step 2: Create handle and run distance-1 coloring. { Handle handle; - //Use the default algorithm (chosen based on ExecSpace) + // Use the default algorithm (chosen based on ExecSpace) handle.create_graph_coloring_handle(KokkosGraph::COLORING_DEFAULT); - //Run coloring (graph is square and symmetric) - KokkosGraph::Experimental::graph_color(&handle, numVertices, numVertices, rowmapDevice, colindsDevice); - //Get the colors array, and the number of colors used from the handle. + // Run coloring (graph is square and symmetric) + KokkosGraph::Experimental::graph_color(&handle, numVertices, numVertices, + rowmapDevice, colindsDevice); + // Get the colors array, and the number of colors used from the handle. auto colors = handle.get_graph_coloring_handle()->get_vertex_colors(); Ordinal numColors = handle.get_graph_coloring_handle()->get_num_colors(); - printf("9-pt stencil: Distance-1 Colors (used %d):\n", (int) numColors); + printf("9-pt stencil: Distance-1 Colors (used %d):\n", (int)numColors); GraphDemo::printColoring(colors, numColors); putchar('\n'); - //Clean up + // Clean up handle.destroy_graph_coloring_handle(); } - //Step 3: Create handle and run distance-2 coloring. + // Step 3: Create handle and run distance-2 coloring. { Handle handle; - //Use the default algorithm (chosen based on ExecSpace) - handle.create_distance2_graph_coloring_handle(KokkosGraph::COLORING_D2_DEFAULT); - //Run coloring - KokkosGraph::Experimental::graph_color_distance2(&handle, numVertices, rowmapDevice, colindsDevice); - //Get the colors array, and the number of colors used from the handle. - auto colors = handle.get_distance2_graph_coloring_handle()->get_vertex_colors(); - Ordinal numColors = handle.get_distance2_graph_coloring_handle()->get_num_colors(); - printf("9-pt stencil: Distance-2 Colors (used %d):\n", (int) numColors); + // Use the default algorithm (chosen based on ExecSpace) + handle.create_distance2_graph_coloring_handle( + KokkosGraph::COLORING_D2_DEFAULT); + // Run coloring + KokkosGraph::Experimental::graph_color_distance2( + &handle, numVertices, rowmapDevice, colindsDevice); + // Get the colors array, and the number of colors used from the handle. + auto colors = + handle.get_distance2_graph_coloring_handle()->get_vertex_colors(); + Ordinal numColors = + handle.get_distance2_graph_coloring_handle()->get_num_colors(); + printf("9-pt stencil: Distance-2 Colors (used %d):\n", (int)numColors); GraphDemo::printColoring(colors, numColors); putchar('\n'); - //Clean up + // Clean up handle.destroy_distance2_graph_coloring_handle(); } } Kokkos::finalize(); return 0; } - diff --git a/example/wiki/graph/KokkosGraph_wiki_rcm.cpp b/example/wiki/graph/KokkosGraph_wiki_rcm.cpp index 4f411470ad..d23a7de233 100644 --- a/example/wiki/graph/KokkosGraph_wiki_rcm.cpp +++ b/example/wiki/graph/KokkosGraph_wiki_rcm.cpp @@ -16,39 +16,37 @@ #include "KokkosGraph_wiki_9pt_stencil.hpp" #include "KokkosGraph_RCM.hpp" -template -void printReorderedMatrix(const rowmap_t& rowmapIn, const entries_t& entriesIn, const labels_t& invPermIn) -{ +template +void printReorderedMatrix(const rowmap_t& rowmapIn, const entries_t& entriesIn, + const labels_t& invPermIn) { using size_type = typename rowmap_t::non_const_value_type; - using lno_t = typename entries_t::non_const_value_type; - auto rowmap = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), rowmapIn); - auto entries = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), entriesIn); - auto invPerm = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), invPermIn); + using lno_t = typename entries_t::non_const_value_type; + auto rowmap = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), rowmapIn); + auto entries = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), entriesIn); + auto invPerm = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), invPermIn); lno_t numVerts = rowmap.extent(0) - 1; - decltype(invPerm) perm(Kokkos::view_alloc(Kokkos::WithoutInitializing, "Perm"), numVerts); - for(lno_t i = 0; i < numVerts; i++) - perm(invPerm(i)) = i; + decltype(invPerm) perm( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "Perm"), numVerts); + for (lno_t i = 0; i < numVerts; i++) perm(invPerm(i)) = i; std::vector neighbors; - for(lno_t i = 0; i < numVerts; i++) - { + for (lno_t i = 0; i < numVerts; i++) { lno_t origRow = perm(i); neighbors.clear(); - for(size_type j = rowmap(origRow); j < rowmap(origRow + 1); j++) - { + for (size_type j = rowmap(origRow); j < rowmap(origRow + 1); j++) { lno_t origNei = entries(j); - lno_t nei = invPerm(origNei); + lno_t nei = invPerm(origNei); neighbors.push_back(nei); } std::sort(neighbors.begin(), neighbors.end()); size_t it = 0; - for(lno_t j = 0; j < numVerts; j++) - { - if(it < neighbors.size() && j == neighbors[it]) - { + for (lno_t j = 0; j < numVerts; j++) { + if (it < neighbors.size() && j == neighbors[it]) { std::cout << '*'; it++; - } - else + } else std::cout << ' '; } std::cout << '\n'; @@ -56,23 +54,23 @@ void printReorderedMatrix(const rowmap_t& rowmapIn, const entries_t& entriesIn, std::cout << '\n'; } - -int main() -{ +int main() { Kokkos::initialize(); { using GraphDemo::numVertices; GraphDemo::setGridDimensions(6, 6); RowmapType rowmapDevice; ColindsType colindsDevice; - //Make the graph smaller so the matrix can be printed easily - //Step 1: Generate the graph on host, allocate space on device, and copy. - //See function "generate9pt" below. + // Make the graph smaller so the matrix can be printed easily + // Step 1: Generate the graph on host, allocate space on device, and copy. + // See function "generate9pt" below. GraphDemo::generate9pt(rowmapDevice, colindsDevice); - //Step 2: Run RCM and print the reordered matrix + // Step 2: Run RCM and print the reordered matrix { - auto rcmDevice = KokkosGraph::Experimental::graph_rcm( - rowmapDevice, colindsDevice); + auto rcmDevice = + KokkosGraph::Experimental::graph_rcm(rowmapDevice, + colindsDevice); std::cout << "Graph reordered by reverse Cuthill-McKee:\n"; printReorderedMatrix(rowmapDevice, colindsDevice, rcmDevice); } @@ -80,4 +78,3 @@ int main() Kokkos::finalize(); return 0; } - diff --git a/example/wiki/sparse/KokkosSparse_wiki_bsrmatrix.cpp b/example/wiki/sparse/KokkosSparse_wiki_bsrmatrix.cpp index 624c8fb2e1..6a67c1aec4 100644 --- a/example/wiki/sparse/KokkosSparse_wiki_bsrmatrix.cpp +++ b/example/wiki/sparse/KokkosSparse_wiki_bsrmatrix.cpp @@ -35,10 +35,10 @@ int main() { typename Kokkos::DefaultExecutionSpace::memory_space>; using matrix_type = typename KokkosSparse::CrsMatrix; + Offset>; using b_matrix_type = - typename KokkosSparse::Experimental::BsrMatrix; + typename KokkosSparse::Experimental::BsrMatrix; using graph_type = typename matrix_type::staticcrsgraph_type; using row_map_type = typename graph_type::row_map_type; using entries_type = typename graph_type::entries_type; @@ -82,7 +82,7 @@ int main() { if (row_map_h(numRows) != numNNZ) { std::ostringstream error_msg; error_msg << "error: row_map(numRows) != numNNZ, row_map_h(numRows)=" - << row_map_h(numRows) << ", numNNZ=" << numNNZ; + << row_map_h(numRows) << ", numNNZ=" << numNNZ; throw std::runtime_error(error_msg.str()); } @@ -120,14 +120,14 @@ int main() { graph_type myGraph(entries, row_map); matrix_type myMatrix("test matrix", numRows, values, myGraph); std::cout << "myMatrix has been created successfully:" << std::endl - << " - numRows=" << myMatrix.numRows() << std::endl - << " - numCols=" << myMatrix.numCols() << std::endl - << " - numNNZ= " << myMatrix.nnz() << std::endl; + << " - numRows=" << myMatrix.numRows() << std::endl + << " - numCols=" << myMatrix.numCols() << std::endl + << " - numNNZ= " << myMatrix.nnz() << std::endl; b_matrix_type blockMatrix(myMatrix, 2); std::cout << "blockMatrix has been created successfully:" << std::endl - << " - numRows=" << blockMatrix.numRows() << std::endl - << " - numCols=" << blockMatrix.numCols() << std::endl - << " - numNNZ= " << blockMatrix.nnz() << std::endl; + << " - numRows=" << blockMatrix.numRows() << std::endl + << " - numCols=" << blockMatrix.numCols() << std::endl + << " - numNNZ= " << blockMatrix.nnz() << std::endl; } Kokkos::finalize(); diff --git a/example/wiki/sparse/KokkosSparse_wiki_spadd.cpp b/example/wiki/sparse/KokkosSparse_wiki_spadd.cpp index 0e0260de4a..841e3b9eb3 100644 --- a/example/wiki/sparse/KokkosSparse_wiki_spadd.cpp +++ b/example/wiki/sparse/KokkosSparse_wiki_spadd.cpp @@ -47,7 +47,7 @@ int main() { // In each row the first entry is the number of grid point in // that direction, the second and third entries are used to apply // BCs in that direction. - Kokkos::View mat_structure( + Kokkos::View mat_structure( "Matrix Structure", 2); mat_structure(0, 0) = 10; // Request 10 grid point in 'x' direction mat_structure(0, 1) = 1; // Add BC to the left diff --git a/example/wiki/sparse/KokkosSparse_wiki_spmv.cpp b/example/wiki/sparse/KokkosSparse_wiki_spmv.cpp index 173e25e562..8b876e5bfc 100644 --- a/example/wiki/sparse/KokkosSparse_wiki_spmv.cpp +++ b/example/wiki/sparse/KokkosSparse_wiki_spmv.cpp @@ -66,7 +66,7 @@ int main() { // BCs in that direction, BC=0 means Neumann BC is applied, // BC=1 means Dirichlet BC is applied by zeroing out the row and putting // one on the diagonal. - Kokkos::View mat_structure( + Kokkos::View mat_structure( "Matrix Structure", 2); mat_structure(0, 0) = 10; // Request 10 grid point in 'x' direction mat_structure(0, 1) = 0; // Add BC to the left diff --git a/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp b/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp index e443910964..e7a4b0da87 100644 --- a/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp +++ b/perf_test/blas/blas1/KokkosBlas_dot_perf_test.hpp @@ -14,7 +14,6 @@ // //@HEADER - // Created by David Poliakoff and Amy Powell on 6/15/2021 #ifndef KOKKOSKERNELS_KOKKOSBLAS_DOT_TEST_RPS_HPP diff --git a/perf_test/blas/blas1/KokkosBlas_team_dot_perf_test.hpp b/perf_test/blas/blas1/KokkosBlas_team_dot_perf_test.hpp index f46591a4b1..c6ddf3fc06 100644 --- a/perf_test/blas/blas1/KokkosBlas_team_dot_perf_test.hpp +++ b/perf_test/blas/blas1/KokkosBlas_team_dot_perf_test.hpp @@ -14,7 +14,6 @@ // //@HEADER - #ifndef KOKKOSKERNELS_KOKKOSBLAS_TEAM_DOT_TEST_RPS_HPP #define KOKKOSKERNELS_KOKKOSBLAS_TEAM_DOT_TEST_RPS_HPP diff --git a/perf_test/blas/blas2/KokkosBlas2_gemv_perf_test.hpp b/perf_test/blas/blas2/KokkosBlas2_gemv_perf_test.hpp index a028ae005a..bfc9021cc0 100644 --- a/perf_test/blas/blas2/KokkosBlas2_gemv_perf_test.hpp +++ b/perf_test/blas/blas2/KokkosBlas2_gemv_perf_test.hpp @@ -14,7 +14,6 @@ // //@HEADER - // Created by David Poliakoff and Amy Powell on 6/15/2021 #ifndef KOKKOSKERNELS_KOKKOSBLAS_GEMV_TEST_RPS_HPP diff --git a/test_common/KokkosKernels_MyCRSMatrix.hpp b/test_common/KokkosKernels_MyCRSMatrix.hpp index a4dc12de84..3a70aa6ef6 100644 --- a/test_common/KokkosKernels_MyCRSMatrix.hpp +++ b/test_common/KokkosKernels_MyCRSMatrix.hpp @@ -15,51 +15,50 @@ //@HEADER #include "KokkosKernels_Utils.hpp" -namespace MyKokkosSparse{ +namespace MyKokkosSparse { -template +template class StaticCrsGraph { + public: + typedef OrdinalType data_type; + typedef typename Device::execution_space execution_space; + typedef Device device_type; + typedef SizeType size_type; -public: - typedef OrdinalType data_type; - typedef typename Device::execution_space execution_space; - typedef Device device_type; - typedef SizeType size_type; - - typedef Kokkos::View row_map_type; - typedef Kokkos::View entries_type; + typedef Kokkos::View row_map_type; + typedef Kokkos::View entries_type; entries_type entries; row_map_type row_map; OrdinalType num_cols; //! Construct an empty view. - StaticCrsGraph () : entries(), row_map(), num_cols() {} + StaticCrsGraph() : entries(), row_map(), num_cols() {} //! Copy constructor (shallow copy). - StaticCrsGraph (const StaticCrsGraph& rhs) : entries (rhs.entries), row_map (rhs.row_map), num_cols(rhs.num_cols) - {} - - template - StaticCrsGraph (const EntriesType& entries_,const RowMapType& row_map_) : entries (entries_), row_map (row_map_) - {} - template - StaticCrsGraph (const EntriesType& entries_,const RowMapType& row_map_, OrdinalType numCols_) : - entries (entries_), row_map (row_map_), num_cols(numCols_) {} + StaticCrsGraph(const StaticCrsGraph& rhs) + : entries(rhs.entries), row_map(rhs.row_map), num_cols(rhs.num_cols) {} + + template + StaticCrsGraph(const EntriesType& entries_, const RowMapType& row_map_) + : entries(entries_), row_map(row_map_) {} + template + StaticCrsGraph(const EntriesType& entries_, const RowMapType& row_map_, + OrdinalType numCols_) + : entries(entries_), row_map(row_map_), num_cols(numCols_) {} /** \brief Assign to a view of the rhs array. * If the old view is the last view * then allocated memory is deallocated. */ - StaticCrsGraph& operator= (const StaticCrsGraph& rhs) { + StaticCrsGraph& operator=(const StaticCrsGraph& rhs) { entries = rhs.entries; row_map = rhs.row_map; return *this; } KOKKOS_INLINE_FUNCTION - data_type numCols() const { - return num_cols; - } + data_type numCols() const { return num_cols; } /** \brief Destroy this view of the array. * If the last view then allocated memory is deallocated. @@ -67,19 +66,19 @@ class StaticCrsGraph { ~StaticCrsGraph() {} KOKKOS_INLINE_FUNCTION data_type numRows() const { - return (row_map.extent(0) != 0) ? - row_map.extent(0) - static_cast (1) : - static_cast (0); + return (row_map.extent(0) != 0) + ? row_map.extent(0) - static_cast(1) + : static_cast(0); } }; - - - -template -class CrsMatrix{ -public: - typedef typename Kokkos::ViewTraits::host_mirror_space host_mirror_space ; +template +class CrsMatrix { + public: + typedef + typename Kokkos::ViewTraits::host_mirror_space host_mirror_space; typedef typename Device::execution_space execution_space; typedef typename Device::memory_space memory_space; @@ -89,128 +88,132 @@ class CrsMatrix{ typedef MemoryTraits memory_traits; typedef SizeType size_type; - typedef StaticCrsGraph StaticCrsGraphType; + typedef StaticCrsGraph + StaticCrsGraphType; typedef typename StaticCrsGraphType::entries_type index_type; typedef typename index_type::non_const_value_type const_ordinal_type; typedef typename index_type::non_const_value_type non_const_ordinal_type; typedef typename StaticCrsGraphType::row_map_type row_map_type; - typedef Kokkos::View values_type; - typedef CrsMatrix HostMirror; + typedef Kokkos::View + values_type; + typedef CrsMatrix + HostMirror; StaticCrsGraphType graph; values_type values; - CrsMatrix () : - numCols_ (0) - {} - CrsMatrix (const std::string& label, - const OrdinalType& ncols, - const values_type& vals, - const StaticCrsGraphType& graph_) : - graph (graph_), - values (vals), - numCols_ (ncols) - { - } + CrsMatrix() : numCols_(0) {} + CrsMatrix(const std::string& label, const OrdinalType& ncols, + const values_type& vals, const StaticCrsGraphType& graph_) + : graph(graph_), values(vals), numCols_(ncols) {} //! The number of rows in the sparse matrix. - KOKKOS_INLINE_FUNCTION ordinal_type numRows () const { - return graph.numRows (); + KOKKOS_INLINE_FUNCTION ordinal_type numRows() const { + return graph.numRows(); } //! The number of columns in the sparse matrix. - KOKKOS_INLINE_FUNCTION ordinal_type numCols () const { - return numCols_; - } + KOKKOS_INLINE_FUNCTION ordinal_type numCols() const { return numCols_; } //! The number of stored entries in the sparse matrix. - KOKKOS_INLINE_FUNCTION size_type nnz () const { + KOKKOS_INLINE_FUNCTION size_type nnz() const { return graph.entries.extent(0); } ordinal_type numCols_; }; - template crsMat_t get_crsmat( - typename crsMat_t::row_map_type::non_const_type::value_type *xadj, - typename crsMat_t::index_type::non_const_type::value_type *adj, - typename crsMat_t::values_type::non_const_type::value_type *ew, + typename crsMat_t::row_map_type::non_const_type::value_type* xadj, + typename crsMat_t::index_type::non_const_type::value_type* adj, + typename crsMat_t::values_type::non_const_type::value_type* ew, typename crsMat_t::row_map_type::non_const_type::value_type ne, typename crsMat_t::index_type::non_const_type::value_type nv, - int is_one_based){ - - typedef typename crsMat_t::StaticCrsGraphType graph_t; - typedef typename crsMat_t::row_map_type::non_const_type row_map_view_t; - typedef typename crsMat_t::index_type::non_const_type cols_view_t; - typedef typename crsMat_t::values_type::non_const_type values_view_t; - - typedef typename row_map_view_t::value_type size_type; - typedef typename cols_view_t::value_type lno_t; - typedef typename values_view_t::value_type scalar_t; - - - - row_map_view_t rowmap_view("rowmap_view", nv+1); - cols_view_t columns_view("colsmap_view", ne); - values_view_t values_view("values_view", ne); - - KokkosKernels::Impl::copy_vector(ne, ew, values_view); - KokkosKernels::Impl::copy_vector(ne, adj, columns_view); - KokkosKernels::Impl::copy_vector(nv+1, xadj, rowmap_view); - - size_type ncols = 0; - KokkosKernels::Impl::view_reduce_max(ne, columns_view, ncols); - ncols += 1; - - if (is_one_based) { - //if algorithm is mkl_csrmultcsr convert to 1 base so that we dont dublicate the memory at the experiments/ - KokkosKernels::Impl::kk_a_times_x_plus_b< row_map_view_t, row_map_view_t, int, int, myExecSpace>(nv + 1, rowmap_view, rowmap_view, 1, 1); - KokkosKernels::Impl::kk_a_times_x_plus_b< cols_view_t, cols_view_t, int, int, myExecSpace>(ne, columns_view, columns_view, 1, 1); - } + int is_one_based) { + typedef typename crsMat_t::StaticCrsGraphType graph_t; + typedef typename crsMat_t::row_map_type::non_const_type row_map_view_t; + typedef typename crsMat_t::index_type::non_const_type cols_view_t; + typedef typename crsMat_t::values_type::non_const_type values_view_t; + + typedef typename row_map_view_t::value_type size_type; + typedef typename cols_view_t::value_type lno_t; + typedef typename values_view_t::value_type scalar_t; + + row_map_view_t rowmap_view("rowmap_view", nv + 1); + cols_view_t columns_view("colsmap_view", ne); + values_view_t values_view("values_view", ne); + + KokkosKernels::Impl::copy_vector( + ne, ew, values_view); + KokkosKernels::Impl::copy_vector( + ne, adj, columns_view); + KokkosKernels::Impl::copy_vector( + nv + 1, xadj, rowmap_view); + + size_type ncols = 0; + KokkosKernels::Impl::view_reduce_max( + ne, columns_view, ncols); + ncols += 1; + + if (is_one_based) { + // if algorithm is mkl_csrmultcsr convert to 1 base so that we dont + // dublicate the memory at the experiments/ + KokkosKernels::Impl::kk_a_times_x_plus_b( + nv + 1, rowmap_view, rowmap_view, 1, 1); + KokkosKernels::Impl::kk_a_times_x_plus_b(ne, columns_view, + columns_view, 1, 1); + } - graph_t static_graph (columns_view, rowmap_view); - crsMat_t crsmat("CrsMatrix", ncols, values_view, static_graph); - return crsmat; + graph_t static_graph(columns_view, rowmap_view); + crsMat_t crsmat("CrsMatrix", ncols, values_view, static_graph); + return crsmat; } template -out_crsMat_t copy_crsmat(in_crsMat_t inputMat){ -/* - typedef typename out_crsMat_t::StaticCrsGraphType graph_t; - typedef typename out_crsMat_t::row_map_type::non_const_type row_map_view_t; - typedef typename out_crsMat_t::index_type::non_const_type cols_view_t; - typedef typename out_crsMat_t::values_type::non_const_type values_view_t; +out_crsMat_t copy_crsmat(in_crsMat_t inputMat) { + /* + typedef typename out_crsMat_t::StaticCrsGraphType graph_t; + typedef typename out_crsMat_t::row_map_type::non_const_type + row_map_view_t; typedef typename out_crsMat_t::index_type::non_const_type + cols_view_t; typedef typename out_crsMat_t::values_type::non_const_type + values_view_t; - typedef typename in_crsMat_t::StaticCrsGraphType in_graph_t; - typedef typename in_crsMat_t::row_map_type::const_type in_row_map_view_t; - typedef typename in_crsMat_t::index_type::const_type in_cols_view_t; - typedef typename in_crsMat_t::values_type::const_type in_values_view_t; + typedef typename in_crsMat_t::StaticCrsGraphType in_graph_t; + typedef typename in_crsMat_t::row_map_type::const_type in_row_map_view_t; + typedef typename in_crsMat_t::index_type::const_type in_cols_view_t; + typedef typename in_crsMat_t::values_type::const_type in_values_view_t; - typedef typename row_map_view_t::value_type size_type; - typedef typename cols_view_t::value_type lno_t; - typedef typename values_view_t::value_type scalar_t; + typedef typename row_map_view_t::value_type size_type; + typedef typename cols_view_t::value_type lno_t; + typedef typename values_view_t::value_type scalar_t; - const size_type nv = inputMat.numRows(); - const size_type ne = inputMat.graph.entries.extent(0); + const size_type nv = inputMat.numRows(); + const size_type ne = inputMat.graph.entries.extent(0); - row_map_view_t rowmap_view("rowmap_view", nv+1); - cols_view_t columns_view("colsmap_view", ne); - values_view_t values_view("values_view", ne); + row_map_view_t rowmap_view("rowmap_view", nv+1); + cols_view_t columns_view("colsmap_view", ne); + values_view_t values_view("values_view", ne); - KokkosKernels::Impl::copy_vector(ne, inputMat.values, values_view); - KokkosKernels::Impl::copy_vector(ne, inputMat.graph.entries, columns_view); - KokkosKernels::Impl::copy_vector(nv+1, inputMat.graph.row_map, rowmap_view); + KokkosKernels::Impl::copy_vector(ne, inputMat.values, values_view); + KokkosKernels::Impl::copy_vector(ne, inputMat.graph.entries, columns_view); + KokkosKernels::Impl::copy_vector(nv+1, inputMat.graph.row_map, rowmap_view); - size_type ncols = 0; - KokkosKernels::Impl::view_reduce_max(ne, columns_view, ncols); - ncols += 1; + size_type ncols = 0; + KokkosKernels::Impl::view_reduce_max(ne, + columns_view, ncols); ncols += 1; - graph_t static_graph (columns_view, rowmap_view); - out_crsMat_t crsmat("CrsMatrix", ncols, values_view, static_graph); - return crsmat; - */ -} + graph_t static_graph (columns_view, rowmap_view); + out_crsMat_t crsmat("CrsMatrix", ncols, values_view, static_graph); + return crsmat; + */ } +} // namespace MyKokkosSparse diff --git a/test_common/KokkosKernels_TestParameters.hpp b/test_common/KokkosKernels_TestParameters.hpp index 2c82a3fb21..713c201a8f 100644 --- a/test_common/KokkosKernels_TestParameters.hpp +++ b/test_common/KokkosKernels_TestParameters.hpp @@ -17,11 +17,11 @@ #ifndef KK_TESTPARAMS_H #define KK_TESTPARAMS_H -namespace KokkosKernels{ +namespace KokkosKernels { -namespace Experiment{ +namespace Experiment { -struct Parameters{ +struct Parameters { int algorithm; int accumulator; int repeat; @@ -48,8 +48,6 @@ struct Parameters{ int use_serial; int a_mem_space, b_mem_space, c_mem_space, work_mem_space; - - char *a_mtx_bin_file, *b_mtx_bin_file, *c_mtx_bin_file; bool compression2step; int left_lower_triangle, right_lower_triangle; @@ -68,50 +66,49 @@ struct Parameters{ // 0 - no flush // 1 - soft flush // 2 - hard flush with rand. - Parameters(){ - - algorithm = 0; - accumulator = 0; - repeat = 6; - chunk_size = -1; - multi_color_scale = 1; - shmemsize = 16128; - team_size = -1; - use_dynamic_scheduling = 0; - verbose = 0; - spgemm_step = '0'; - vector_size = -1; - check_output = 0; - mkl_sort_option = 7; - mkl_keep_output = 1; + Parameters() { + algorithm = 0; + accumulator = 0; + repeat = 6; + chunk_size = -1; + multi_color_scale = 1; + shmemsize = 16128; + team_size = -1; + use_dynamic_scheduling = 0; + verbose = 0; + spgemm_step = '0'; + vector_size = -1; + check_output = 0; + mkl_sort_option = 7; + mkl_keep_output = 1; calculate_read_write_cost = 0; - coloring_input_file = NULL; - coloring_output_file = NULL; - minhashscale = 1; - use_threads = 0; - use_openmp = 0; - use_cuda = 0; - use_hip = 0; - use_serial = 0; + coloring_input_file = NULL; + coloring_output_file = NULL; + minhashscale = 1; + use_threads = 0; + use_openmp = 0; + use_cuda = 0; + use_hip = 0; + use_serial = 0; a_mem_space = b_mem_space = c_mem_space = work_mem_space = 1; a_mtx_bin_file = b_mtx_bin_file = c_mtx_bin_file = NULL; - compression2step = true; + compression2step = true; - left_lower_triangle = 0; + left_lower_triangle = 0; right_lower_triangle = 0; - left_sort = 0; - right_sort = 2; //algorithm decides - triangle_options=0; - apply_compression = true; - sort_option = -1; - cache_flush = 1; + left_sort = 0; + right_sort = 2; // algorithm decides + triangle_options = 0; + apply_compression = true; + sort_option = -1; + cache_flush = 1; first_level_hash_cut_off = 0.50; - compression_cut_off = 0.85; - MaxColDenseAcc = 250000; + compression_cut_off = 0.85; + MaxColDenseAcc = 250000; } }; -} -} +} // namespace Experiment +} // namespace KokkosKernels #endif diff --git a/test_common/Kokkos_Performance.hpp b/test_common/Kokkos_Performance.hpp index 8fec2d5804..c4ff95654c 100644 --- a/test_common/Kokkos_Performance.hpp +++ b/test_common/Kokkos_Performance.hpp @@ -30,270 +30,273 @@ namespace KokkosKernels { // places which follow those methods exactly. class Performance { - public: - /** - * \brief Performance class manages the archive. - * - * This will generate a starting point for a machine configuration. Users - * should add new entries via set_machine_config if necessary. - * For example Kokkos users might want to provide the name of the user - * Kokkos NodeType or Kokkos DeviceType. Contains information mostly - * extracted from /proc/cpuinfo if possible. - * Entries are: - * - Compiler: The compiler name. - * - Compiler_Version: A compiler version number. - * - CPU_Name: The CPUs model name. - * - CPU_Sockets: Number of CPU sockets in the system. - * - CPU_Cores_Per_Socket: Number of CPU cores per socket. - * - CPU_Total_HyperThreads: Total number of threads in a node. - */ - Performance() : machine_configuration_node(get_machine_configuration()) {} - - /** - * \brief set_config adds/changes a test config parameter - * - * \param name [in] The name used to identify the parameter in the archive. - * \param val [in] The value assinged to the parameter. - */ - template - void set_config(const std::string& name, const T& val) { - test_configuration_node[name] = val; - } + public: + /** + * \brief Performance class manages the archive. + * + * This will generate a starting point for a machine configuration. Users + * should add new entries via set_machine_config if necessary. + * For example Kokkos users might want to provide the name of the user + * Kokkos NodeType or Kokkos DeviceType. Contains information mostly + * extracted from /proc/cpuinfo if possible. + * Entries are: + * - Compiler: The compiler name. + * - Compiler_Version: A compiler version number. + * - CPU_Name: The CPUs model name. + * - CPU_Sockets: Number of CPU sockets in the system. + * - CPU_Cores_Per_Socket: Number of CPU cores per socket. + * - CPU_Total_HyperThreads: Total number of threads in a node. + */ + Performance() : machine_configuration_node(get_machine_configuration()) {} + + /** + * \brief set_config adds/changes a test config parameter + * + * \param name [in] The name used to identify the parameter in the archive. + * \param val [in] The value assinged to the parameter. + */ + template + void set_config(const std::string& name, const T& val) { + test_configuration_node[name] = val; + } - /** - * \brief set_result adds/changes a test result with a tolerance - * - * \param name [in] The name used to identify the result. - * \param val [in] The recorded result which came from running the test. - * \param tolerance [in] abs((new-old)/old)>tolerance triggers test failure. - */ - void set_result(const std::string& name, double val, double tolerance) { - validate_input_result_name(name); - results_node[name] = - Performance::Tolerance(val, tolerance).as_string(); - } + /** + * \brief set_result adds/changes a test result with a tolerance + * + * \param name [in] The name used to identify the result. + * \param val [in] The recorded result which came from running the test. + * \param tolerance [in] abs((new-old)/old)>tolerance triggers test failure. + */ + void set_result(const std::string& name, double val, double tolerance) { + validate_input_result_name(name); + results_node[name] = Performance::Tolerance(val, tolerance).as_string(); + } - /** - * \brief set_result adds/changes a test result - * - * \param name [in] The name used to identify the result. - * \param time [in] The recorded time which came from running the test. - * \param tolerance_low [in] Lower bound of tolerance. - * \param tolerance_high [in] Upper bound of tolerance. - */ - void set_result(const std::string& name, double val, - double tolerance_low, double tolerance_high) { - validate_input_result_name(name); - results_node[name] = + /** + * \brief set_result adds/changes a test result + * + * \param name [in] The name used to identify the result. + * \param time [in] The recorded time which came from running the test. + * \param tolerance_low [in] Lower bound of tolerance. + * \param tolerance_high [in] Upper bound of tolerance. + */ + void set_result(const std::string& name, double val, double tolerance_low, + double tolerance_high) { + validate_input_result_name(name); + results_node[name] = Performance::Tolerance(val, tolerance_low, tolerance_high).as_string(); - } + } - /** - * \brief set_result adds/changes a test result for exact comparison - * - * \param name [in] The name used to identify the result. - * \param val [in] The recorded result which came from running the test. - */ - template - void set_result(const std::string& name, const T& val) { - validate_input_result_name(name); - results_node[mark_name_with_exact_code(name)] = val; - } + /** + * \brief set_result adds/changes a test result for exact comparison + * + * \param name [in] The name used to identify the result. + * \param val [in] The recorded result which came from running the test. + */ + template + void set_result(const std::string& name, const T& val) { + validate_input_result_name(name); + results_node[mark_name_with_exact_code(name)] = val; + } - /** - * \brief set_machine_config adds/changes a machine configuration - * - * \param name [in] The name used to identify the machine config parameter. - * \param val [in] The setting for the machine config parameter. - */ - template - void set_machine_config(const std::string& name, const T& val) { - machine_configuration_node[name] = val; - } + /** + * \brief set_machine_config adds/changes a machine configuration + * + * \param name [in] The name used to identify the machine config parameter. + * \param val [in] The setting for the machine config parameter. + */ + template + void set_machine_config(const std::string& name, const T& val) { + machine_configuration_node[name] = val; + } - /** - * \brief Result codes after creating/comparing a test entry - */ - enum Result{ - Failed, - Passed, - NewMachine, - NewConfiguration, - NewTest, - NewTestConfiguration, - UpdatedTest, - Unknown}; - - /** - * \brief Processes the test and update the yaml archive - * - * This should be called after all necessary inserts, such as set_config, - * set_time, and set_result. - * - * \param test_name [in] Named used to match test entries. - * \param archive_name [in] The local yaml path to generate the archive. - * \param host_name [in] An optional hostname to be used instead of - * the one provided by the OS. - * - * \return Whether a matching test is found, or if it was added to an - * archive. - * - * Will search for a matching machine name with matching machine - * configuration and matching test configuration. If one is found the - * result values will be compared, if not a new test entry is - * generated and the result written back to the file. - * - * Here is the list of valid return values: - * - * - Failed: Matching configuration found, but results are - * deviating more than the allowed tolerance. - * - Passed: Matching configuration found, and results are - * within tolerances. - * - NewMachine: The test archive didn't contain an entry with - * the same machine name. A new entry was generated. - * - NewConfiguration: No matching machine configuration was - * found. A new entry was generated. - * - NewTest: No matching testname was found. A new entry was - * generated and added to the archive. - * - NewTestConfiguration: A matching testname was found, but - * different parameters were used. A new entry was generated. - * - UpdatedTest: A matching test was found but more result - * values were given then previously found. The entry is updated. - * This will only happen if all the old result values are present in - * the new ones, and are within their respective tolerances. - */ - Result run(const std::string& archive_name, const std::string& test_name, - const std::string& host_name = "") const; - - /** - * \brief print_archive will std::cout the yaml archive for inspection. - * - * \param archive_name [in] The local yaml path to print. - */ - static void print_archive(const std::string& archive_name); - - /** - * \brief erase_archive will delete the archive. - * - * \param archive_name [in] The local yaml path to print. - */ - static void erase_archive(const std::string& archive_name); - - private: - typedef YAML::Node node_t; - - /* Tolerance is an internal helper struct. - * The tolerance can be either expressed as relative or through an upper and - * lower bound. This is now private to the Performance class and follows the - * original Teuchos implementation. - */ - struct Tolerance { - double value; - double lower; - double upper; - double tolerance; - bool use_tolerance; - Tolerance(); - Tolerance(double val, double tol); - Tolerance(double val, double low, double up); - Tolerance(std::string str); - bool operator ==(const Tolerance& rhs); - std::string as_string(); - void from_string(const std::string& valtol_str); - }; - - // Set up the machine configuration - users can modify the default setup - node_t get_machine_configuration() const; - - // Compares two nodes and determines if they are have the same - // members but does not compare the values of those members. - bool hasSameElements(const node_t& a, const node_t& b) const; - - // does string include the exact key character '*' - bool string_includes_exact_code(const std::string& name) const; - - // append the '*' key character to the name - std::string mark_name_with_exact_code(const std::string& name) const; - - // make sure the input name doesn't have the character '*' - void validate_input_result_name(const std::string& name) const; - - // private data members - node_t machine_configuration_node; // stores machine config settings - node_t test_configuration_node; // stores test config settings - node_t results_node; // stores result settings + /** + * \brief Result codes after creating/comparing a test entry + */ + enum Result { + Failed, + Passed, + NewMachine, + NewConfiguration, + NewTest, + NewTestConfiguration, + UpdatedTest, + Unknown + }; + + /** + * \brief Processes the test and update the yaml archive + * + * This should be called after all necessary inserts, such as set_config, + * set_time, and set_result. + * + * \param test_name [in] Named used to match test entries. + * \param archive_name [in] The local yaml path to generate the archive. + * \param host_name [in] An optional hostname to be used instead of + * the one provided by the OS. + * + * \return Whether a matching test is found, or if it was added to an + * archive. + * + * Will search for a matching machine name with matching machine + * configuration and matching test configuration. If one is found the + * result values will be compared, if not a new test entry is + * generated and the result written back to the file. + * + * Here is the list of valid return values: + * + * - Failed: Matching configuration found, but results are + * deviating more than the allowed tolerance. + * - Passed: Matching configuration found, and results are + * within tolerances. + * - NewMachine: The test archive didn't contain an entry with + * the same machine name. A new entry was generated. + * - NewConfiguration: No matching machine configuration was + * found. A new entry was generated. + * - NewTest: No matching testname was found. A new entry was + * generated and added to the archive. + * - NewTestConfiguration: A matching testname was found, but + * different parameters were used. A new entry was generated. + * - UpdatedTest: A matching test was found but more result + * values were given then previously found. The entry is updated. + * This will only happen if all the old result values are present in + * the new ones, and are within their respective tolerances. + */ + Result run(const std::string& archive_name, const std::string& test_name, + const std::string& host_name = "") const; + + /** + * \brief print_archive will std::cout the yaml archive for inspection. + * + * \param archive_name [in] The local yaml path to print. + */ + static void print_archive(const std::string& archive_name); + + /** + * \brief erase_archive will delete the archive. + * + * \param archive_name [in] The local yaml path to print. + */ + static void erase_archive(const std::string& archive_name); + + private: + typedef YAML::Node node_t; + + /* Tolerance is an internal helper struct. + * The tolerance can be either expressed as relative or through an upper and + * lower bound. This is now private to the Performance class and follows the + * original Teuchos implementation. + */ + struct Tolerance { + double value; + double lower; + double upper; + double tolerance; + bool use_tolerance; + Tolerance(); + Tolerance(double val, double tol); + Tolerance(double val, double low, double up); + Tolerance(std::string str); + bool operator==(const Tolerance& rhs); + std::string as_string(); + void from_string(const std::string& valtol_str); + }; + + // Set up the machine configuration - users can modify the default setup + node_t get_machine_configuration() const; + + // Compares two nodes and determines if they are have the same + // members but does not compare the values of those members. + bool hasSameElements(const node_t& a, const node_t& b) const; + + // does string include the exact key character '*' + bool string_includes_exact_code(const std::string& name) const; + + // append the '*' key character to the name + std::string mark_name_with_exact_code(const std::string& name) const; + + // make sure the input name doesn't have the character '*' + void validate_input_result_name(const std::string& name) const; + + // private data members + node_t machine_configuration_node; // stores machine config settings + node_t test_configuration_node; // stores test config settings + node_t results_node; // stores result settings }; Performance::node_t Performance::get_machine_configuration() const { // Get CPUName, Number of Sockets, Number of Cores, Number of Hyperthreads std::string cpuname("Undefined"); - unsigned int threads = 0; + unsigned int threads = 0; unsigned int cores_per_socket = 0; unsigned int highest_socketid = 0; std::ifstream cpuinfo("/proc/cpuinfo"); std::string line; - if((cpuinfo.rdstate()&cpuinfo.failbit)) { - #ifndef __clang__ // TODO decide how to best handle this generically - std::cout<<"Failed to open /proc/cpuinfo\n"; - #endif + if ((cpuinfo.rdstate() & cpuinfo.failbit)) { +#ifndef __clang__ // TODO decide how to best handle this generically + std::cout << "Failed to open /proc/cpuinfo\n"; +#endif } - while (!cpuinfo.eof() && !(cpuinfo.rdstate()&cpuinfo.failbit)) { - getline (cpuinfo,line); + while (!cpuinfo.eof() && !(cpuinfo.rdstate() & cpuinfo.failbit)) { + getline(cpuinfo, line); if (line.find("model name") < line.size()) { - cpuname = line.substr(line.find(":")+2); + cpuname = line.substr(line.find(":") + 2); threads++; } if (line.find("physical id") < line.size()) { - unsigned int socketid = atoi(line.substr(line.find(":")+2).c_str()); - highest_socketid = highest_socketid>socketid?highest_socketid:socketid; + unsigned int socketid = atoi(line.substr(line.find(":") + 2).c_str()); + highest_socketid = + highest_socketid > socketid ? highest_socketid : socketid; } if (line.find("cpu cores") < line.size()) { - cores_per_socket = atoi(line.substr(line.find(":")+2).c_str()); + cores_per_socket = atoi(line.substr(line.find(":") + 2).c_str()); } } std::string compiler_name = "Unknown"; - int compiler_version = 0; + int compiler_version = 0; - #if defined __clang__ - compiler_name = "Clang"; - compiler_version = __clang_major__*100+__clang_minor__*10+__clang_patchlevel__; - #endif +#if defined __clang__ + compiler_name = "Clang"; + compiler_version = + __clang_major__ * 100 + __clang_minor__ * 10 + __clang_patchlevel__; +#endif - #if defined __GNUC__ && !defined KOKKOS_COMPILER_NAME && !defined __clang__ - compiler_name = "Gnu GCC"; - compiler_version = __GNUC__*100+__GNUC_MINOR__*10+__GNUC_PATCHLEVEL__; - #endif +#if defined __GNUC__ && !defined KOKKOS_COMPILER_NAME && !defined __clang__ + compiler_name = "Gnu GCC"; + compiler_version = __GNUC__ * 100 + __GNUC_MINOR__ * 10 + __GNUC_PATCHLEVEL__; +#endif - #if defined __PGIC__ && !defined KOKKOS_COMPILER_NAME - compiler_name = "PGI C++"; - compiler_version = __PGIC__*100+__PGIC_MINOR__*10+__PGIC_PATCHLEVEL__; - #endif +#if defined __PGIC__ && !defined KOKKOS_COMPILER_NAME + compiler_name = "PGI C++"; + compiler_version = __PGIC__ * 100 + __PGIC_MINOR__ * 10 + __PGIC_PATCHLEVEL__; +#endif node_t machine_config; - machine_config["Compiler"] = compiler_name; - machine_config["Compiler_Version"] = compiler_version; - machine_config["CPU_Name"] = cpuname; - machine_config["CPU_Sockets"] = highest_socketid+1; - machine_config["CPU_Cores_Per_Socket"] = cores_per_socket; + machine_config["Compiler"] = compiler_name; + machine_config["Compiler_Version"] = compiler_version; + machine_config["CPU_Name"] = cpuname; + machine_config["CPU_Sockets"] = highest_socketid + 1; + machine_config["CPU_Cores_Per_Socket"] = cores_per_socket; machine_config["CPU_Total_HyperThreads"] = threads; return machine_config; } Performance::Result Performance::run(const std::string& archive_name, - const std::string& test_name, const std::string& host_name) const { - + const std::string& test_name, + const std::string& host_name) const { // These are abitrary category names used in the yaml - const std::string test_configuration_string = "TestConfiguration"; - const std::string test_results_string = "TestResults"; + const std::string test_configuration_string = "TestConfiguration"; + const std::string test_results_string = "TestResults"; const std::string machine_configuration_string = "MachineConfiguration"; - const std::string tests_string = "Tests"; + const std::string tests_string = "Tests"; // Now create the test entry - combincation of configuration and times/results - Performance::node_t new_test_entry; // the entry will have two bits added below + Performance::node_t + new_test_entry; // the entry will have two bits added below new_test_entry[test_configuration_string] = test_configuration_node; - new_test_entry[test_results_string] = results_node; + new_test_entry[test_results_string] = results_node; // Run the archiver which will either add the results, or compare them to // prior results if they already exist. This method will open the yaml, @@ -301,7 +304,7 @@ Performance::Result Performance::run(const std::string& archive_name, Performance::node_t database; Result return_value = Performance::Passed; - bool is_new_config = true; + bool is_new_config = true; // Open YAML File whhich stores test database if (std::ifstream(archive_name)) { @@ -310,11 +313,11 @@ Performance::Result Performance::run(const std::string& archive_name, // Get host_setting which is read by default or set to optional host_name char host_setting[256]; - memset (host_setting, 0, 256); - if (host_name.empty ()) { - gethostname (host_setting, 255); + memset(host_setting, 0, 256); + if (host_name.empty()) { + gethostname(host_setting, 255); } else { - strncat (host_setting, host_name.c_str (), 255); + strncat(host_setting, host_name.c_str(), 255); } // Does host_setting exist? @@ -322,106 +325,136 @@ Performance::Result Performance::run(const std::string& archive_name, Performance::node_t machine = database[host_setting]; // Find matching machine configuration - for (size_t machine_index = 0; machine_index < machine.size(); ++machine_index) { + for (size_t machine_index = 0; machine_index < machine.size(); + ++machine_index) { Performance::node_t configuration = machine[machine_index]; - if(!configuration[machine_configuration_string] || !configuration[tests_string]) { - throw std::logic_error("Configuration must has child MachineConfiguration and a child \"Tests\"."); + if (!configuration[machine_configuration_string] || + !configuration[tests_string]) { + throw std::logic_error( + "Configuration must has child MachineConfiguration and a child " + "\"Tests\"."); } - Performance::node_t machine_configuration = configuration[machine_configuration_string]; + Performance::node_t machine_configuration = + configuration[machine_configuration_string]; Performance::node_t old_tests = configuration[tests_string]; if (hasSameElements(machine_configuration, machine_configuration_node)) { is_new_config = false; // Find existing test with same name as the new test - if(old_tests[test_name]) { + if (old_tests[test_name]) { Performance::node_t old_test_array = old_tests[test_name]; - int match_test_index = -1; - for (size_t entry_index = 0; entry_index < old_test_array.size(); ++entry_index) { + int match_test_index = -1; + for (size_t entry_index = 0; entry_index < old_test_array.size(); + ++entry_index) { Performance::node_t old_test_entry = old_test_array[entry_index]; - if (hasSameElements(old_test_entry[test_configuration_string], new_test_entry[test_configuration_string])) { + if (hasSameElements(old_test_entry[test_configuration_string], + new_test_entry[test_configuration_string])) { match_test_index = static_cast(entry_index); } } if (match_test_index == -1) { - database[host_setting][machine_index][tests_string][test_name].push_back(new_test_entry); + database[host_setting][machine_index][tests_string][test_name] + .push_back(new_test_entry); return_value = Performance::NewTestConfiguration; - } - else { + } else { bool deviation = false; - Performance::node_t old_test_entry = old_test_array[match_test_index]; - Performance::node_t old_results = old_test_entry[test_results_string]; - Performance::node_t new_results = new_test_entry[test_results_string]; + Performance::node_t old_test_entry = + old_test_array[match_test_index]; + Performance::node_t old_results = + old_test_entry[test_results_string]; + Performance::node_t new_results = + new_test_entry[test_results_string]; // Compare all entries - for (YAML::const_iterator old_r = old_results.begin(); old_r != old_results.end(); ++old_r) { + for (YAML::const_iterator old_r = old_results.begin(); + old_r != old_results.end(); ++old_r) { Performance::node_t result_entry = old_r->second; // Finding entry with same name std::string result_name = old_r->first.Scalar(); - bool exists = new_results[result_name]; + bool exists = new_results[result_name]; if (exists) { - std::string oldv_str = old_r->second.Scalar(); + std::string oldv_str = old_r->second.Scalar(); std::string old_test_name = test_name; std::ostringstream new_result_entry_name_stream; new_result_entry_name_stream << new_results[result_name]; - std::string new_result_data = new_result_entry_name_stream.str(); + std::string new_result_data = + new_result_entry_name_stream.str(); // based on name does result use tolerance? - // if it has the '*' key character appended it means it's an exact - if(!string_includes_exact_code(result_name)) { + // if it has the '*' key character appended it means it's an + // exact + if (!string_includes_exact_code(result_name)) { Performance::Tolerance old_valtol(oldv_str); - Performance::Tolerance new_valtol(new_results[result_name].Scalar()); - if(old_valtol.use_tolerance) { + Performance::Tolerance new_valtol( + new_results[result_name].Scalar()); + if (old_valtol.use_tolerance) { double diff = old_valtol.value - new_valtol.value; - diff*=diff; + diff *= diff; double normalization = old_valtol.value; - normalization*=normalization; - if(normalization==0?diff>0:diff/normalization>old_valtol.tolerance*old_valtol.tolerance) { + normalization *= normalization; + if (normalization == 0 + ? diff > 0 + : diff / normalization > + old_valtol.tolerance * old_valtol.tolerance) { deviation = true; std::cout << std::endl - << " DeviationA in Test: \"" << old_test_name - << "\" for entry \"" << result_name << "\"" << std::endl; - std::cout << " Existing Value: \"" << oldv_str << "\"" << std::endl; - std::cout << " New Value: \"" << new_result_data << "\"" << std::endl << std::endl; + << " DeviationA in Test: \"" << old_test_name + << "\" for entry \"" << result_name << "\"" + << std::endl; + std::cout << " Existing Value: \"" << oldv_str << "\"" + << std::endl; + std::cout << " New Value: \"" << new_result_data + << "\"" << std::endl + << std::endl; } - } - else { - if( (old_valtol.lower>new_valtol.value) || (old_valtol.upper new_valtol.value) || + (old_valtol.upper < new_valtol.value)) { deviation = true; std::cout << std::endl - << " DeviationB in Test: \"" << old_test_name - << "\" for entry \"" << result_name << "\"" << std::endl; - std::cout << " Existing Value: \"" << oldv_str << "\"" << std::endl; - std::cout << " New Value: \"" << new_result_data << "\"" << std::endl << std::endl; + << " DeviationB in Test: \"" << old_test_name + << "\" for entry \"" << result_name << "\"" + << std::endl; + std::cout << " Existing Value: \"" << oldv_str << "\"" + << std::endl; + std::cout << " New Value: \"" << new_result_data + << "\"" << std::endl + << std::endl; } } - } - else { + } else { // Compare exact match for every other type of entry - if(oldv_str.compare(new_result_data)!=0) { + if (oldv_str.compare(new_result_data) != 0) { deviation = true; std::cout << std::endl - << " DeviationC in Test: \"" << old_test_name - << "\" for entry \"" << result_name << "\"" << std::endl; - std::cout << " Existing Value: \"" << oldv_str << "\"" << std::endl; - std::cout << " New Value: \"" << new_result_data << "\"" << std::endl << std::endl; + << " DeviationC in Test: \"" << old_test_name + << "\" for entry \"" << result_name << "\"" + << std::endl; + std::cout << " Existing Value: \"" << oldv_str << "\"" + << std::endl; + std::cout << " New Value: \"" << new_result_data + << "\"" << std::endl + << std::endl; } } } // An old value was not given in the new test: this is an error; - if(!exists) { - std::cout << " Error New test has same name as an existing one, but one of the old entries is missing." << std::endl; + if (!exists) { + std::cout << " Error New test has same name as an existing " + "one, but one of the old entries is missing." + << std::endl; deviation = true; } } - if(deviation) { + if (deviation) { return_value = Performance::Failed; - } - else { + } else { // Did someone add new values to the test? - if(new_results.size()!=old_results.size()) { - for (YAML::const_iterator new_r = new_results.begin(); new_r != new_results.end(); ++new_r) { - if(!old_results[new_r->first.Scalar()]) { + if (new_results.size() != old_results.size()) { + for (YAML::const_iterator new_r = new_results.begin(); + new_r != new_results.end(); ++new_r) { + if (!old_results[new_r->first.Scalar()]) { old_results[new_r->first.Scalar()] = (new_r->second); } } @@ -429,25 +462,24 @@ Performance::Result Performance::run(const std::string& archive_name, } } } - } - else { // End Test Exists + } else { // End Test Exists // Add new test if no match was found - database[host_setting][machine_index][tests_string][test_name].push_back(new_test_entry); + database[host_setting][machine_index][tests_string][test_name] + .push_back(new_test_entry); return_value = Performance::NewTest; } - } // End MachineConfiguration Exists - } // End loop over MachineConfigurations + } // End MachineConfiguration Exists + } // End loop over MachineConfigurations // Did not find matching MachineConfiguration - if(is_new_config) { + if (is_new_config) { Performance::node_t machine_entry; machine_entry[machine_configuration_string] = machine_configuration_node; machine_entry[tests_string][test_name].push_back(new_test_entry); database[host_setting].push_back(machine_entry); return_value = Performance::NewConfiguration; } - } - else { // Machine Entry does not exist + } else { // Machine Entry does not exist Performance::node_t machine_entry; machine_entry[machine_configuration_string] = machine_configuration_node; machine_entry[tests_string][test_name].push_back(new_test_entry); @@ -455,7 +487,7 @@ Performance::Result Performance::run(const std::string& archive_name, return_value = Performance::NewMachine; } - if(return_value>Performance::Passed) { + if (return_value > Performance::Passed) { // write the actual database out std::ofstream fout(archive_name.c_str()); fout << database << std::endl; @@ -463,24 +495,25 @@ Performance::Result Performance::run(const std::string& archive_name, return return_value; } -bool Performance::hasSameElements(const Performance::node_t& a, const Performance::node_t& b) const { - if(a.size()!=b.size()) { +bool Performance::hasSameElements(const Performance::node_t& a, + const Performance::node_t& b) const { + if (a.size() != b.size()) { return false; } for (YAML::const_iterator i = a.begin(); i != a.end(); ++i) { std::string cat_name = i->first.Scalar(); // validate we can find this cat in b - if(!b[cat_name]) { + if (!b[cat_name]) { return false; } Performance::node_t sub_a = i->second; Performance::node_t sub_b = b[cat_name]; - if(sub_a.Scalar() != sub_b.Scalar()) { + if (sub_a.Scalar() != sub_b.Scalar()) { return false; } - if(!hasSameElements(sub_a, sub_b)) { + if (!hasSameElements(sub_a, sub_b)) { return false; } } @@ -489,18 +522,21 @@ bool Performance::hasSameElements(const Performance::node_t& a, const Performanc } bool Performance::string_includes_exact_code(const std::string& name) const { - return(name.length() != 0 && name[name.length()-1] == '*'); + return (name.length() != 0 && name[name.length() - 1] == '*'); } -std::string Performance::mark_name_with_exact_code(const std::string &name) const { +std::string Performance::mark_name_with_exact_code( + const std::string& name) const { return name + "*"; } -void Performance::validate_input_result_name(const std::string &name) const { - if(string_includes_exact_code(name)) { - throw std::logic_error("The name " + name + " ends with the * key character" - " which is reserved for internal use to signify an exact value not using" - " the tolerance settings."); +void Performance::validate_input_result_name(const std::string& name) const { + if (string_includes_exact_code(name)) { + throw std::logic_error("The name " + name + + " ends with the * key character" + " which is reserved for internal use to signify an " + "exact value not using" + " the tolerance settings."); } } @@ -513,66 +549,62 @@ void Performance::erase_archive(const std::string& yamlArchive) { } Performance::Tolerance::Tolerance() { - value = 0; - lower = 0; - upper = 0; - tolerance = 0; + value = 0; + lower = 0; + upper = 0; + tolerance = 0; use_tolerance = true; } Performance::Tolerance::Tolerance(double val, double tol) { - value = val; - lower = 0; - upper = 0; - tolerance = tol; + value = val; + lower = 0; + upper = 0; + tolerance = tol; use_tolerance = true; } Performance::Tolerance::Tolerance(double val, double low, double up) { - value = val; - upper = up; - lower = low; - tolerance = 0; + value = val; + upper = up; + lower = low; + tolerance = 0; use_tolerance = false; } -Performance::Tolerance::Tolerance(std::string str) { - from_string(str); -} +Performance::Tolerance::Tolerance(std::string str) { from_string(str); } -bool Performance::Tolerance::operator ==(const Tolerance& rhs) { - return (value == rhs.value) && - (tolerance == rhs.tolerance) && - (lower == rhs.lower) && - (upper == rhs.upper) && +bool Performance::Tolerance::operator==(const Tolerance& rhs) { + return (value == rhs.value) && (tolerance == rhs.tolerance) && + (lower == rhs.lower) && (upper == rhs.upper) && (use_tolerance == rhs.use_tolerance); } -std::string Performance::Tolerance::as_string(){ +std::string Performance::Tolerance::as_string() { std::ostringstream strs; - if(use_tolerance) + if (use_tolerance) strs << value << " , " << tolerance; else strs << value << " , " << lower << " , " << upper; - return strs.str(); + return strs.str(); } void Performance::Tolerance::from_string(const std::string& valtol_str) { - std::string value_str = valtol_str.substr(0,valtol_str.find(",")); - value = atof(value_str.c_str()); - std::string tol_str = valtol_str.substr(valtol_str.find(",")+1); - if(tol_str.find(",")<=tol_str.length()) { - use_tolerance = false; - std::string lower_str = tol_str.substr(0,tol_str.find(",")); - lower = atof(lower_str.c_str()); - std::string upper_str = tol_str.substr(tol_str.find(",")+1); - upper = atof(upper_str.c_str()); + std::string value_str = valtol_str.substr(0, valtol_str.find(",")); + value = atof(value_str.c_str()); + std::string tol_str = valtol_str.substr(valtol_str.find(",") + 1); + if (tol_str.find(",") <= tol_str.length()) { + use_tolerance = false; + std::string lower_str = tol_str.substr(0, tol_str.find(",")); + lower = atof(lower_str.c_str()); + std::string upper_str = tol_str.substr(tol_str.find(",") + 1); + upper = atof(upper_str.c_str()); } else { use_tolerance = true; - tolerance = atof(tol_str.c_str()); + tolerance = atof(tol_str.c_str()); } } -} // namespace KokkosKernels +} // namespace KokkosKernels -#endif // KOKKOS_PERFORMANCE_HPP +#endif // KOKKOS_PERFORMANCE_HPP From 34061b1062edda53420e6b8e1620e84c75d4787e Mon Sep 17 00:00:00 2001 From: Luc Berger-Vergiat Date: Mon, 30 Jan 2023 16:41:02 -0700 Subject: [PATCH 208/226] fenl: removing examples These do not seem to see any updates or work and have been manually disabled by commenting out a line in CMakeLists.txt. I think it's time to get rid of them! --- example/CMakeLists.txt | 1 - example/fenl/BoxElemFixture.hpp | 328 ------- example/fenl/BoxElemPart.cpp | 386 -------- example/fenl/BoxElemPart.hpp | 293 ------ example/fenl/CGSolve.hpp | 122 --- example/fenl/CMakeLists.txt | 11 - example/fenl/HexElement.hpp | 243 ----- example/fenl/KokkosKernels_ETIMacros.hpp | 44 - example/fenl/TestFixture.cpp | 31 - example/fenl/TestFixture.hpp | 128 --- example/fenl/VectorImport.hpp | 267 ------ example/fenl/WrapMPI.hpp | 76 -- example/fenl/fenl.cpp | 91 -- example/fenl/fenl.hpp | 62 -- example/fenl/fenl_functors.hpp | 1093 ---------------------- example/fenl/fenl_impl.hpp | 568 ----------- example/fenl/main.cpp | 404 -------- 17 files changed, 4148 deletions(-) delete mode 100644 example/fenl/BoxElemFixture.hpp delete mode 100644 example/fenl/BoxElemPart.cpp delete mode 100644 example/fenl/BoxElemPart.hpp delete mode 100644 example/fenl/CGSolve.hpp delete mode 100644 example/fenl/CMakeLists.txt delete mode 100644 example/fenl/HexElement.hpp delete mode 100644 example/fenl/KokkosKernels_ETIMacros.hpp delete mode 100644 example/fenl/TestFixture.cpp delete mode 100644 example/fenl/TestFixture.hpp delete mode 100644 example/fenl/VectorImport.hpp delete mode 100644 example/fenl/WrapMPI.hpp delete mode 100644 example/fenl/fenl.cpp delete mode 100644 example/fenl/fenl.hpp delete mode 100644 example/fenl/fenl_functors.hpp delete mode 100644 example/fenl/fenl_impl.hpp delete mode 100644 example/fenl/main.cpp diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 45fb3a41e1..62dc80f22a 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -3,7 +3,6 @@ KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../test_common) -#ADD_SUBDIRECTORY(fenl) #ADD_SUBDIRECTORY(graph) ADD_SUBDIRECTORY(wiki) ADD_SUBDIRECTORY(gmres) diff --git a/example/fenl/BoxElemFixture.hpp b/example/fenl/BoxElemFixture.hpp deleted file mode 100644 index ca8da8fc24..0000000000 --- a/example/fenl/BoxElemFixture.hpp +++ /dev/null @@ -1,328 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER - -#ifndef KOKKOS_EXAMPLE_BOXELEMFIXTURE_HPP -#define KOKKOS_EXAMPLE_BOXELEMFIXTURE_HPP - -#include -#include - -#include - -#include -#include - -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { - -/** \brief Map a grid onto a unit cube with smooth nonlinear grading - * of the map. - */ -struct MapGridUnitCube { - - const float m_a ; - const float m_b ; - const float m_c ; - const size_t m_max_x ; - const size_t m_max_y ; - const size_t m_max_z ; - - MapGridUnitCube( const size_t grid_max_x , - const size_t grid_max_y , - const size_t grid_max_z , - const float bubble_x , - const float bubble_y , - const float bubble_z ) - : m_a( bubble_x ) - , m_b( bubble_y ) - , m_c( bubble_z ) - , m_max_x( grid_max_x ) - , m_max_y( grid_max_y ) - , m_max_z( grid_max_z ) - {} - - template< typename Scalar > - KOKKOS_INLINE_FUNCTION - void operator()( int grid_x , - int grid_y , - int grid_z , - Scalar & coord_x , - Scalar & coord_y , - Scalar & coord_z ) const - { - // Map to a unit cube [0,1]^3 - - const double x = double(grid_x) / double(m_max_x); - const double y = double(grid_y) / double(m_max_y); - const double z = double(grid_z) / double(m_max_z); - - coord_x = x + x * x * ( x - 1 ) * ( x - 1 ) * m_a ; - coord_y = y + y * y * ( y - 1 ) * ( y - 1 ) * m_b ; - coord_z = z + z * z * ( z - 1 ) * ( z - 1 ) * m_c ; - } -}; - -} // namespace Example -} // namespace Kokkos - -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { - -/** \brief Generate a distributed unstructured finite element mesh - * from a partitioned NX*NY*NZ box of elements. - * - * Order owned nodes first followed by off-process nodes - * grouped by owning process. - */ -template< class Device , - BoxElemPart::ElemOrder Order , - class CoordinateMap = MapGridUnitCube > -class BoxElemFixture { -public: - - typedef Device execution_space ; - - enum { SpaceDim = 3 }; - enum { ElemNode = Order == BoxElemPart::ElemLinear ? 8 : - Order == BoxElemPart::ElemQuadratic ? 27 : 0 }; - -private: - - typedef Kokkos::Example::HexElement_TensorData< ElemNode > hex_data ; - - Kokkos::Example::BoxElemPart m_box_part ; - CoordinateMap m_coord_map ; - - Kokkos::View< double *[SpaceDim] , Device > m_node_coord ; - Kokkos::View< size_t *[SpaceDim] , Device > m_node_grid ; - Kokkos::View< size_t *[ElemNode] , Device > m_elem_node ; - Kokkos::View< size_t *[2] , Device > m_recv_node ; - Kokkos::View< size_t *[2] , Device > m_send_node ; - Kokkos::View< size_t * , Device > m_send_node_id ; - - unsigned char m_elem_node_local[ ElemNode ][4] ; - -public: - - typedef Kokkos::View< const size_t * [ElemNode], Device > elem_node_type ; - typedef Kokkos::View< const double * [SpaceDim], Device > node_coord_type ; - typedef Kokkos::View< const size_t * [SpaceDim], Device > node_grid_type ; - typedef Kokkos::View< const size_t * [2] , Device > comm_list_type ; - typedef Kokkos::View< const size_t * , Device > send_nodeid_type ; - - inline bool ok() const { return m_box_part.ok(); } - - KOKKOS_INLINE_FUNCTION - size_t node_count() const { return m_node_grid.extent(0); } - - KOKKOS_INLINE_FUNCTION - size_t node_count_owned() const { return m_box_part.owns_node_count(); } - - KOKKOS_INLINE_FUNCTION - size_t node_count_global() const { return m_box_part.global_node_count(); } - - KOKKOS_INLINE_FUNCTION - size_t elem_count() const { return m_elem_node.extent(0); } - - KOKKOS_INLINE_FUNCTION - size_t elem_count_global() const { return m_box_part.global_elem_count(); } - - KOKKOS_INLINE_FUNCTION - size_t elem_node_local( size_t inode , int k ) const - { return m_elem_node_local[inode][k] ; } - - KOKKOS_INLINE_FUNCTION - size_t node_grid( size_t inode , int iaxis ) const - { return m_node_grid(inode,iaxis); } - - KOKKOS_INLINE_FUNCTION - size_t node_global_index( size_t local ) const - { - const size_t node_grid_[SpaceDim] = - { m_node_grid(local,0) , m_node_grid(local,1) , m_node_grid(local,2) }; - return m_box_part.global_node_id( node_grid_ ); - } - - KOKKOS_INLINE_FUNCTION - double node_coord( size_t inode , int iaxis ) const - { return m_node_coord(inode,iaxis); } - - KOKKOS_INLINE_FUNCTION - size_t node_grid_max( int iaxis ) const - { return m_box_part.global_coord_max(iaxis); } - - KOKKOS_INLINE_FUNCTION - size_t elem_node( size_t ielem , size_t inode ) const - { return m_elem_node(ielem,inode); } - - elem_node_type elem_node() const { return m_elem_node ; } - node_coord_type node_coord() const { return m_node_coord ; } - node_grid_type node_grid() const { return m_node_grid ; } - comm_list_type recv_node() const { return m_recv_node ; } - comm_list_type send_node() const { return m_send_node ; } - send_nodeid_type send_nodeid() const { return m_send_node_id ; } - - KOKKOS_INLINE_FUNCTION - BoxElemFixture( const BoxElemFixture & rhs ) - : m_box_part( rhs.m_box_part ) - , m_coord_map( rhs.m_coord_map ) - , m_node_coord( rhs.m_node_coord ) - , m_node_grid( rhs.m_node_grid ) - , m_elem_node( rhs.m_elem_node ) - , m_recv_node( rhs.m_recv_node ) - , m_send_node( rhs.m_send_node ) - , m_send_node_id( rhs.m_send_node_id ) - { - for ( int i = 0 ; i < ElemNode ; ++i ) { - m_elem_node_local[i][0] = rhs.m_elem_node_local[i][0] ; - m_elem_node_local[i][1] = rhs.m_elem_node_local[i][1] ; - m_elem_node_local[i][2] = rhs.m_elem_node_local[i][2] ; - m_elem_node_local[i][3] = 0 ; - } - } - - BoxElemFixture & operator = ( const BoxElemFixture & rhs ) - { - m_box_part = rhs.m_box_part ; - m_coord_map = rhs.m_coord_map ; - m_node_coord = rhs.m_node_coord ; - m_node_grid = rhs.m_node_grid ; - m_elem_node = rhs.m_elem_node ; - m_recv_node = rhs.m_recv_node ; - m_send_node = rhs.m_send_node ; - m_send_node_id = rhs.m_send_node_id ; - - for ( int i = 0 ; i < ElemNode ; ++i ) { - m_elem_node_local[i][0] = rhs.m_elem_node_local[i][0] ; - m_elem_node_local[i][1] = rhs.m_elem_node_local[i][1] ; - m_elem_node_local[i][2] = rhs.m_elem_node_local[i][2] ; - m_elem_node_local[i][3] = 0 ; - } - return *this ; - } - - BoxElemFixture( const BoxElemPart::Decompose decompose , - const size_t global_size , - const size_t global_rank , - const size_t elem_nx , - const size_t elem_ny , - const size_t elem_nz , - const float bubble_x = 1.1f , - const float bubble_y = 1.2f , - const float bubble_z = 1.3f ) - : m_box_part( Order , decompose , global_size , global_rank , elem_nx , elem_ny , elem_nz ) - , m_coord_map( m_box_part.global_coord_max(0) , - m_box_part.global_coord_max(1) , - m_box_part.global_coord_max(2) , - bubble_x , - bubble_y , - bubble_z ) - , m_node_coord( "fixture_node_coord" , m_box_part.uses_node_count() ) - , m_node_grid( "fixture_node_grid" , m_box_part.uses_node_count() ) - , m_elem_node( "fixture_elem_node" , m_box_part.uses_elem_count() ) - , m_recv_node( "fixture_recv_node" , m_box_part.recv_node_msg_count() ) - , m_send_node( "fixture_send_node" , m_box_part.send_node_msg_count() ) - , m_send_node_id( "fixture_send_node_id" , m_box_part.send_node_id_count() ) - { - { - const hex_data elem_data ; - - for ( int i = 0 ; i < ElemNode ; ++i ) { - m_elem_node_local[i][0] = elem_data.eval_map[i][0] ; - m_elem_node_local[i][1] = elem_data.eval_map[i][1] ; - m_elem_node_local[i][2] = elem_data.eval_map[i][2] ; - m_elem_node_local[i][3] = 0 ; - } - } - - const size_t nwork = - std::max( m_recv_node.extent(0) , - std::max( m_send_node.extent(0) , - std::max( m_send_node_id.extent(0) , - std::max( m_node_grid.extent(0) , - m_elem_node.extent(0) * m_elem_node.extent(1) )))); - - Kokkos::parallel_for( "kokkos-kernels/example/fen: BoxElemFixture", nwork , *this ); - } - - - // Initialization: - - KOKKOS_INLINE_FUNCTION - void operator()( size_t i ) const - { - if ( i < m_elem_node.extent(0) * m_elem_node.extent(1) ) { - - const size_t ielem = i / ElemNode ; - const size_t inode = i % ElemNode ; - - size_t elem_grid[SpaceDim] ; - size_t node_grid_[SpaceDim] ; - - m_box_part.uses_elem_coord( ielem , elem_grid ); - - enum { elem_node_scale = Order == BoxElemPart::ElemLinear ? 1 : - Order == BoxElemPart::ElemQuadratic ? 2 : 0 }; - - node_grid_[0] = elem_node_scale * elem_grid[0] + m_elem_node_local[inode][0] ; - node_grid_[1] = elem_node_scale * elem_grid[1] + m_elem_node_local[inode][1] ; - node_grid_[2] = elem_node_scale * elem_grid[2] + m_elem_node_local[inode][2] ; - - m_elem_node(ielem,inode) = m_box_part.local_node_id( node_grid_ ); - } - - if ( i < m_node_grid.extent(0) ) { - size_t node_grid_[SpaceDim] ; - m_box_part.local_node_coord( i , node_grid_ ); - m_node_grid(i,0) = node_grid_[0] ; - m_node_grid(i,1) = node_grid_[1] ; - m_node_grid(i,2) = node_grid_[2] ; - - m_coord_map( node_grid_[0] , - node_grid_[1] , - node_grid_[2] , - m_node_coord(i,0) , - m_node_coord(i,1) , - m_node_coord(i,2) ); - } - - if ( i < m_recv_node.extent(0) ) { - m_recv_node(i,0) = m_box_part.recv_node_rank(i); - m_recv_node(i,1) = m_box_part.recv_node_count(i); - } - - if ( i < m_send_node.extent(0) ) { - m_send_node(i,0) = m_box_part.send_node_rank(i); - m_send_node(i,1) = m_box_part.send_node_count(i); - } - - if ( i < m_send_node_id.extent(0) ) { - m_send_node_id(i) = m_box_part.send_node_id(i); - } - } -}; - -} // namespace Example -} // namespace Kokkos - -//---------------------------------------------------------------------------- - -#endif /* #ifndef KOKKOS_EXAMPLE_BOXELEMFIXTURE_HPP */ - diff --git a/example/fenl/BoxElemPart.cpp b/example/fenl/BoxElemPart.cpp deleted file mode 100644 index efafb911c9..0000000000 --- a/example/fenl/BoxElemPart.cpp +++ /dev/null @@ -1,386 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER - -#include -#include -#include -#include -#include -#include - -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { - -void box_partition( const size_t global_size , - const size_t global_rank , - const size_t global_box[][2] , - size_t box[][2] ) -{ - box[0][0] = global_box[0][0] ; box[0][1] = global_box[0][1] ; - box[1][0] = global_box[1][0] ; box[1][1] = global_box[1][1] ; - box[2][0] = global_box[2][0] ; box[2][1] = global_box[2][1] ; - - size_t ip = 0 ; - size_t np = global_size ; - - while ( 1 < np ) { - - // P = [ ip + j * portion , ip + ( j + 1 ) * portion ) - - size_t jip , jup ; - - { - const size_t part = ( 0 == ( np % 5 ) ) ? 5 : ( - ( 0 == ( np % 3 ) ) ? 3 : 2 ); - - const size_t portion = np / part ; - - if ( 2 < part || global_rank < ip + portion ) { - jip = portion * size_t( double( global_rank - ip ) / double(portion) ); - jup = jip + portion ; - } - else { - jip = portion ; - jup = np ; - } - } - - // Choose axis with largest count: - - const size_t nb[3] = { - box[0][1] - box[0][0] , - box[1][1] - box[1][0] , - box[2][1] - box[2][0] }; - - const int axis = nb[2] > nb[1] ? ( nb[2] > nb[0] ? 2 : 0 ) - : ( nb[1] > nb[0] ? 1 : 0 ); - - box[ axis ][1] = box[ axis ][0] + size_t( double(nb[axis]) * ( double(jup) / double(np) )); - box[ axis ][0] = box[ axis ][0] + size_t( double(nb[axis]) * ( double(jip) / double(np) )); - - np = jup - jip ; - ip = ip + jip ; - } -} - -} /* namespace Example */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { - -void BoxElemPart::local( const size_t rank , - size_t uses_elem[][2] , - size_t owns_node[][2] , - size_t uses_node[][2] ) const -{ - if ( BoxElemPart::DecomposeElem == m_decompose ) { - - Kokkos::Example::box_partition( m_global_size , rank , m_global_elem_box , uses_elem ); - - for ( int i = 0 ; i < 3 ; ++i ) { - owns_node[i][0] = uses_elem[i][0] ; - owns_node[i][1] = uses_elem[i][1] + ( m_global_elem_box[i][1] == uses_elem[i][1] ? 1 : 0 ); - } - } - else { - - const size_t global_vert[3][2] = - { { 0 , m_global_elem_box[0][1] + 1 }, - { 0 , m_global_elem_box[1][1] + 1 }, - { 0 , m_global_elem_box[2][1] + 1 } }; - - Kokkos::Example::box_partition( m_global_size , rank , global_vert , owns_node ); - - for ( int i = 0 ; i < 3 ; ++i ) { - uses_elem[i][0] = global_vert[i][0] == owns_node[i][0] ? owns_node[i][0] : owns_node[i][0] - 1 ; - uses_elem[i][1] = global_vert[i][1] == owns_node[i][1] ? owns_node[i][1] - 1 : owns_node[i][1] ; - } - } - - for ( int i = 0 ; i < 3 ; ++i ) { - uses_node[i][0] = uses_elem[i][0] ; - uses_node[i][1] = uses_elem[i][1] + 1 ; - } - - if ( BoxElemPart::ElemQuadratic == m_elem_order ) { - for ( int i = 0 ; i < 3 ; ++i ) { - owns_node[i][0] = 2 * owns_node[i][0] ; - uses_node[i][0] = 2 * uses_node[i][0] ; - owns_node[i][1] = 2 * owns_node[i][1] - 1 ; - uses_node[i][1] = 2 * uses_node[i][1] - 1 ; - } - } -} - -BoxElemPart::BoxElemPart( - const BoxElemPart::ElemOrder elem_order , - const BoxElemPart::Decompose decompose , - const size_t global_size , - const size_t global_rank , - const size_t elem_nx , - const size_t elem_ny , - const size_t elem_nz ) -{ - m_global_size = global_size ; - m_global_rank = global_rank ; - m_decompose = decompose ; - m_elem_order = elem_order ; - - m_global_elem_box[0][0] = 0 ; m_global_elem_box[0][1] = elem_nx ; - m_global_elem_box[1][0] = 0 ; m_global_elem_box[1][1] = elem_ny ; - m_global_elem_box[2][0] = 0 ; m_global_elem_box[2][1] = elem_nz ; - - m_global_node_box[0][0] = 0 ; m_global_node_box[0][1] = 0 ; - m_global_node_box[1][0] = 0 ; m_global_node_box[1][1] = 0 ; - m_global_node_box[2][0] = 0 ; m_global_node_box[2][1] = 0 ; - - m_owns_node_count = 0 ; - m_send_node_count = 0 ; - - m_ok = true ; - - //---------------------------------------- - - if ( ElemLinear == elem_order ) { - m_global_node_box[0][1] = elem_nx + 1 ; - m_global_node_box[1][1] = elem_ny + 1 ; - m_global_node_box[2][1] = elem_nz + 1 ; - } - else if ( ElemQuadratic == elem_order ) { - m_global_node_box[0][1] = 2 * elem_nx + 1 ; - m_global_node_box[1][1] = 2 * elem_ny + 1 ; - m_global_node_box[2][1] = 2 * elem_nz + 1 ; - } - - //---------------------------------------- - - local( m_global_rank , m_uses_elem_box , m_owns_node_box[0] , m_uses_node_box ); - - const size_t global_node_count_ = Kokkos::Example::box_count( m_global_node_box ); - const size_t global_elem_count_ = Kokkos::Example::box_count( m_global_elem_box ); - - //---------------------------------------- - - size_t elem_count = Kokkos::Example::box_count( m_uses_elem_box ); - size_t node_count = Kokkos::Example::box_count( m_owns_node_box[0] ); - - m_owns_node[0][0] = global_rank ; - m_owns_node[0][1] = node_count ; - m_owns_node_count = 1 ; - m_send_node_count = 0 ; - - for ( size_t rr = 1 ; rr < m_global_size && m_ok ; ++rr ) { - - const size_t rank = ( m_global_rank + rr ) % m_global_size ; - - size_t elem_box[3][2] , o_node_box[3][2] , u_node_box[3][2] ; - - // Boxes for process 'rank' - local( rank , elem_box , o_node_box , u_node_box ); - - // Box that this process uses but is owned by process 'rank' - Kokkos::Example::box_intersect( m_owns_node_box[ m_owns_node_count ] , m_uses_node_box , o_node_box ); - - m_owns_node[ m_owns_node_count ][1] = Kokkos::Example::box_count( m_owns_node_box[ m_owns_node_count ] ); - - if ( m_owns_node[ m_owns_node_count ][1] ) { - - if ( ( PROC_NEIGH_MAX - 1 ) <= m_owns_node_count ) { - std::cout << "BoxElemPart exceeded maximum neighbor count" << std::endl ; - m_ok = false ; - break ; - } - - m_owns_node[ m_owns_node_count ][0] = rank ; - - ++m_owns_node_count ; - } - - // Box that this process owns and is used by process 'rank' - Kokkos::Example::box_intersect( m_send_node_box[ m_send_node_count ] , m_owns_node_box[0] , u_node_box ); - - m_send_node[ m_send_node_count ][1] = Kokkos::Example::box_count( m_send_node_box[ m_send_node_count ] ); - - if ( m_send_node[ m_send_node_count ][1] ) { - - if ( ( PROC_NEIGH_MAX - 1 ) <= m_send_node_count ) { - std::cout << "BoxElemPart exceeded maximum neighbor count" << std::endl ; - m_ok = false ; - break ; - } - - m_send_node[ m_send_node_count ][0] = rank ; - ++m_send_node_count ; - } - - // Error checking: - - size_t test_box[3][2] ; - - elem_count += Kokkos::Example::box_count( elem_box ); - node_count += Kokkos::Example::box_count( o_node_box ); - - { - Kokkos::Example::box_intersect( test_box , m_owns_node_box[0] , o_node_box ); - - if ( Kokkos::Example::box_count( test_box ) ) { - std::cout << "Box partitioning error" << std::endl ; - std::cout << "owns_node[" << m_global_rank << "]{" - << " [" << m_owns_node_box[0][0][0] << "," << m_owns_node_box[0][0][1] << ")" - << " [" << m_owns_node_box[0][1][0] << "," << m_owns_node_box[0][1][1] << ")" - << " [" << m_owns_node_box[0][2][0] << "," << m_owns_node_box[0][2][1] << ")" - << "} intersects" - << " owns_node[" << rank << "]{" - << " [" << o_node_box[0][0] << "," << o_node_box[0][1] << ")" - << " [" << o_node_box[1][0] << "," << o_node_box[1][1] << ")" - << " [" << o_node_box[2][0] << "," << o_node_box[2][1] << ")" - << "}" << std::endl ; - m_ok = false ; - break ; - } - } - - if ( DecomposeElem == decompose ) { - - Kokkos::Example::box_intersect( test_box , m_uses_elem_box , elem_box ); - - if ( Kokkos::Example::box_count( test_box ) ) { - std::cout << "Box partitioning error" << std::endl ; - std::cout << "ElemBox[" << m_global_rank << "]{" - << " [" << m_uses_elem_box[0][0] << "," << m_uses_elem_box[0][1] << ")" - << " [" << m_uses_elem_box[1][0] << "," << m_uses_elem_box[1][1] << ")" - << " [" << m_uses_elem_box[2][0] << "," << m_uses_elem_box[2][1] << ")" - << "} intersects" - << " ElemBox[" << rank << "]{" - << " [" << elem_box[0][0] << "," << elem_box[0][1] << ")" - << " [" << elem_box[1][0] << "," << elem_box[1][1] << ")" - << " [" << elem_box[2][0] << "," << elem_box[2][1] << ")" - << "}" << std::endl ; - m_ok = false ; - break ; - } - } - } - - // Sentinal values at the end of the owns and send lists: - - m_owns_node[ m_owns_node_count ][0] = ~0u ; - m_owns_node[ m_owns_node_count ][1] = ~0u ; - m_owns_node_box[ m_owns_node_count ][0][0] = 0u ; m_owns_node_box[ m_owns_node_count ][0][0] = ~0u ; - m_owns_node_box[ m_owns_node_count ][1][0] = 0u ; m_owns_node_box[ m_owns_node_count ][1][0] = ~0u ; - m_owns_node_box[ m_owns_node_count ][2][0] = 0u ; m_owns_node_box[ m_owns_node_count ][2][0] = ~0u ; - - m_send_node[ m_send_node_count ][0] = ~0u ; - m_send_node[ m_send_node_count ][1] = ~0u ; - m_send_node_box[ m_send_node_count ][0][0] = 0u ; m_send_node_box[ m_send_node_count ][0][0] = ~0u ; - m_send_node_box[ m_send_node_count ][1][0] = 0u ; m_send_node_box[ m_send_node_count ][1][0] = ~0u ; - m_send_node_box[ m_send_node_count ][2][0] = 0u ; m_send_node_box[ m_send_node_count ][2][0] = ~0u ; - - { - size_t count = 0 ; - for ( size_t i = 0 ; i < m_owns_node_count ; ++i ) { - count += m_owns_node[i][1] ; - } - if ( count != Kokkos::Example::box_count( m_uses_node_box ) ) { - std::cout << "Node uses count = " << Kokkos::Example::box_count( m_uses_node_box ) - << " error count = " << count << std::endl ; - m_ok = false ; - } - } - - if ( global_node_count_ != node_count ) { - std::cout << "Node count = " << global_node_count_ << " overlap error count = " << node_count << std::endl ; - m_ok = false ; - } - - if ( DecomposeElem == decompose && global_elem_count_ != elem_count ) { - std::cout << "Elem count = " << global_elem_count_ << " overlap error count = " << elem_count << std::endl ; - m_ok = false ; - } - - if ( ! m_ok ) { - for ( int i = 0 ; i < 3 ; ++i ) { for ( int j = 0 ; j < 2 ; ++j ) { - m_global_elem_box[i][j] = 0 ; - m_global_node_box[i][j] = 0 ; - m_uses_elem_box[i][j] = 0 ; - m_uses_node_box[i][j] = 0 ; - }} - m_owns_node_count = 0 ; - m_send_node_count = 0 ; - } -} - -void BoxElemPart::print( std::ostream & s ) const -{ - s << "BoxElemPart P[" << m_global_rank << ":" << m_global_size << "]" - << std::endl - << " elem_box {" - << " [" << m_uses_elem_box[0][0] << "," << m_uses_elem_box[0][1] << ")" - << " [" << m_uses_elem_box[1][0] << "," << m_uses_elem_box[1][1] << ")" - << " [" << m_uses_elem_box[2][0] << "," << m_uses_elem_box[2][1] << ")" - << " } / {" - << " [" << m_global_elem_box[0][0] << "," << m_global_elem_box[0][1] << ")" - << " [" << m_global_elem_box[1][0] << "," << m_global_elem_box[1][1] << ")" - << " [" << m_global_elem_box[2][0] << "," << m_global_elem_box[2][1] << ")" - << " }" - << std::endl - << " node_box {" - << " [" << m_owns_node_box[0][0][0] << "," << m_owns_node_box[0][0][1] << ")" - << " [" << m_owns_node_box[0][1][0] << "," << m_owns_node_box[0][1][1] << ")" - << " [" << m_owns_node_box[0][2][0] << "," << m_owns_node_box[0][2][1] << ")" - << " } / {" - << " [" << m_uses_node_box[0][0] << "," << m_uses_node_box[0][1] << ")" - << " [" << m_uses_node_box[1][0] << "," << m_uses_node_box[1][1] << ")" - << " [" << m_uses_node_box[2][0] << "," << m_uses_node_box[2][1] << ")" - << " } / {" - << " [" << m_global_node_box[0][0] << "," << m_global_node_box[0][1] << ")" - << " [" << m_global_node_box[1][0] << "," << m_global_node_box[1][1] << ")" - << " [" << m_global_node_box[2][0] << "," << m_global_node_box[2][1] << ")" - << " }" - << std::endl ; - - for ( size_t i = 1 ; i < m_owns_node_count ; ++i ) { - s << " P[" << m_owns_node[i][0] << "]" - << " recv node_box {" - << " [" << m_owns_node_box[i][0][0] << "," << m_owns_node_box[i][0][1] << ")" - << " [" << m_owns_node_box[i][1][0] << "," << m_owns_node_box[i][1][1] << ")" - << " [" << m_owns_node_box[i][2][0] << "," << m_owns_node_box[i][2][1] << ")" - << " }" - << std::endl ; - } - - for ( size_t i = 0 ; i < m_send_node_count ; ++i ) { - s << " P[" << m_send_node[i][0] << "]" - << " send node_box {" - << " [" << m_send_node_box[i][0][0] << "," << m_send_node_box[i][0][1] << ")" - << " [" << m_send_node_box[i][1][0] << "," << m_send_node_box[i][1][1] << ")" - << " [" << m_send_node_box[i][2][0] << "," << m_send_node_box[i][2][1] << ")" - << " }" - << std::endl ; - } -} - -} /* namespace Example */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- - - diff --git a/example/fenl/BoxElemPart.hpp b/example/fenl/BoxElemPart.hpp deleted file mode 100644 index dbf2fd7ceb..0000000000 --- a/example/fenl/BoxElemPart.hpp +++ /dev/null @@ -1,293 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER - -#ifndef KOKKOS_BOXELEMPART_HPP -#define KOKKOS_BOXELEMPART_HPP - -#include -#include -#include - -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { - -KOKKOS_INLINE_FUNCTION -void box_intersect( size_t box[][2] , - const size_t boxA[][2] , - const size_t boxB[][2] ) -{ - for ( int i = 0 ; i < 3 ; ++i ) { - box[i][0] = boxA[i][0] > boxB[i][0] ? boxA[i][0] : boxB[i][0] ; - box[i][1] = boxA[i][1] < boxB[i][1] ? boxA[i][1] : boxB[i][1] ; - if ( box[i][0] > box[i][1] ) box[i][1] = box[i][0] ; - } -} - -KOKKOS_INLINE_FUNCTION -size_t box_count( const size_t box[][2] ) -{ - return size_t( box[0][1] - box[0][0] ) * - size_t( box[1][1] - box[1][0] ) * - size_t( box[2][1] - box[2][0] ); -} - -KOKKOS_INLINE_FUNCTION -void box_ghost_layer( const size_t global_box[][2] , - const size_t local_box[][2] , - const size_t ghost_layer , - size_t ghost_box[][2] ) -{ - for ( int i = 0 ; i < 3 ; ++i ) { - ghost_box[i][0] = global_box[i][0] + ghost_layer > local_box[i][0] ? global_box[i][0] : local_box[i][0] - ghost_layer ; - ghost_box[i][1] = global_box[i][1] < local_box[i][1] + ghost_layer ? global_box[i][1] : local_box[i][1] + ghost_layer ; - } -} - -void box_partition( const size_t global_size , - const size_t global_rank , - const size_t global_box[][2] , - size_t box[][2] ); - -} // namespace Example -} // namespace Kokkos - -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { - -/** \brief Partition a box of hexahedral elements among subdomains. - * - * Nodes are ordered locally as follows: - * { owned_by[ this_process ] , - * owned_by[ neighbor_process[0] ] , - * owned_by[ neighbor_process[1] ] , - * owned_by[ neighbor_process[2] ] , - * ... }; - */ -class BoxElemPart { -public: - - enum Decompose { DecomposeNode , DecomposeElem }; - enum ElemOrder { ElemLinear , ElemQuadratic }; - - bool ok() const { return m_ok ; } - - BoxElemPart( const ElemOrder elem_order , - const Decompose decompose , - const size_t global_size , - const size_t global_rank , - const size_t elem_nx , - const size_t elem_ny , - const size_t elem_nz ); - - KOKKOS_INLINE_FUNCTION - size_t global_elem_count() const - { return Kokkos::Example::box_count( m_global_elem_box ); } - - KOKKOS_INLINE_FUNCTION - size_t global_node_count() const - { return Kokkos::Example::box_count( m_global_node_box ); } - - KOKKOS_INLINE_FUNCTION - size_t uses_elem_count() const - { return Kokkos::Example::box_count( m_uses_elem_box ); } - - KOKKOS_INLINE_FUNCTION - size_t owns_node_count() const - { return Kokkos::Example::box_count( m_owns_node_box[0] ); } - - KOKKOS_INLINE_FUNCTION - size_t uses_node_count() const - { return Kokkos::Example::box_count( m_uses_node_box ); } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - size_t uses_elem_offset( const size_t ix , - const size_t iy , - const size_t iz ) const - { - return size_t( ix - m_uses_elem_box[0][0] ) + size_t( m_uses_elem_box[0][1] - m_uses_elem_box[0][0] ) * ( - size_t( iy - m_uses_elem_box[1][0] ) + size_t( m_uses_elem_box[1][1] - m_uses_elem_box[1][0] ) * ( - size_t( iz - m_uses_elem_box[2][0] ) ) ); - } - - KOKKOS_INLINE_FUNCTION - void uses_elem_coord( size_t lid , size_t c[] ) const - { - const size_t nx = m_uses_elem_box[0][1] - m_uses_elem_box[0][0] ; - const size_t ny = m_uses_elem_box[1][1] - m_uses_elem_box[1][0] ; - - c[0] = m_uses_elem_box[0][0] + lid % nx ; lid /= nx ; - c[1] = m_uses_elem_box[1][0] + lid % ny ; lid /= ny ; - c[2] = m_uses_elem_box[2][0] + lid ; - } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - size_t global_coord_max( size_t axis ) const - { return m_global_node_box[axis][1] - 1 ; } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - void local_node_coord( size_t lid , size_t coord[] ) const - { - // Local id within an 'owns' block (has sentinal) - size_t j = 0 ; - while ( m_owns_node[j][1] <= lid ) { lid -= m_owns_node[j][1] ; ++j ; } - - // Map to global coordinates: - const size_t nx = m_owns_node_box[j][0][1] - m_owns_node_box[j][0][0] ; - const size_t ny = m_owns_node_box[j][1][1] - m_owns_node_box[j][1][0] ; - - coord[0] = m_owns_node_box[j][0][0] + lid % nx ; lid /= nx ; - coord[1] = m_owns_node_box[j][1][0] + lid % ny ; lid /= ny ; - coord[2] = m_owns_node_box[j][2][0] + lid ; - } - - KOKKOS_INLINE_FUNCTION - size_t local_node_id( const size_t c[] ) const - { - // Find which 'owns' block and accumulate the offset of this block: - size_t lid = 0 ; - size_t j = 0 ; - while ( ! ( m_owns_node_box[j][0][0] <= c[0] && c[0] < m_owns_node_box[j][0][1] && - m_owns_node_box[j][1][0] <= c[1] && c[1] < m_owns_node_box[j][1][1] && - m_owns_node_box[j][2][0] <= c[2] && c[2] < m_owns_node_box[j][2][1] ) ) { - - lid += m_owns_node[j][1] ; - ++j ; - } - - // Map offset to the block plus offset within the block: - return lid + - size_t( c[0] - m_owns_node_box[j][0][0] ) + size_t( m_owns_node_box[j][0][1] - m_owns_node_box[j][0][0] ) * ( - size_t( c[1] - m_owns_node_box[j][1][0] ) + size_t( m_owns_node_box[j][1][1] - m_owns_node_box[j][1][0] ) * ( - size_t( c[2] - m_owns_node_box[j][2][0] ) ) ); - } - - KOKKOS_INLINE_FUNCTION - size_t global_node_id( const size_t c[] ) const - { - return size_t( c[0] - m_global_node_box[0][0] ) + size_t( m_global_node_box[0][1] - m_global_node_box[0][0] ) * ( - size_t( c[1] - m_global_node_box[1][0] ) + size_t( m_global_node_box[1][1] - m_global_node_box[1][0] ) * ( - size_t( c[2] - m_global_node_box[2][0] ) ) ); - } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - size_t recv_node_msg_count() const { return m_owns_node_count - 1 ; } - - KOKKOS_INLINE_FUNCTION - size_t recv_node_rank( size_t msg ) const { return m_owns_node[msg+1][0] ; } - - KOKKOS_INLINE_FUNCTION - size_t recv_node_count( size_t msg ) const { return m_owns_node[msg+1][1] ; } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - size_t send_node_msg_count() const { return m_send_node_count ; } - - KOKKOS_INLINE_FUNCTION - size_t send_node_rank( size_t msg ) const { return m_send_node[msg][0] ; } - - KOKKOS_INLINE_FUNCTION - size_t send_node_count( size_t msg ) const { return m_send_node[msg][1] ; } - - KOKKOS_INLINE_FUNCTION - size_t send_node_id_count() const - { - size_t count = 0 ; - for ( size_t i = 0 ; i < m_send_node_count ; ++i ) { - count += m_send_node[i][1] ; - } - return count ; - } - - KOKKOS_INLINE_FUNCTION - size_t send_node_id( size_t item ) const - { - // Find which send list this send item is in: - size_t j = 0 ; - while ( m_send_node[j][1] <= item ) { item -= m_send_node[j][1] ; ++j ; } - - // Map to global coordinate: - const size_t nx = m_send_node_box[j][0][1] - m_send_node_box[j][0][0] ; - const size_t ny = m_send_node_box[j][1][1] - m_send_node_box[j][1][0] ; - - size_t c[3] ; - - c[0] = m_send_node_box[j][0][0] + item % nx ; item /= nx ; - c[1] = m_send_node_box[j][1][0] + item % ny ; item /= ny ; - c[2] = m_send_node_box[j][2][0] + item ; - - // Map to local id: - return size_t( c[0] - m_owns_node_box[0][0][0] ) + size_t( m_owns_node_box[0][0][1] - m_owns_node_box[0][0][0] ) * ( - size_t( c[1] - m_owns_node_box[0][1][0] ) + size_t( m_owns_node_box[0][1][1] - m_owns_node_box[0][1][0] ) * ( - size_t( c[2] - m_owns_node_box[0][2][0] ) ) ); - } - - //---------------------------------------- - - void print( std::ostream & s ) const ; - -private: - - // Maximum number of processes in a neighborhood, including this process - enum { PROC_NEIGH_MAX = 64 }; - - void local( const size_t rank , - size_t uses_elem[][2] , - size_t owns_node[][2] , - size_t uses_node[][2] ) const ; - - size_t m_global_size ; - size_t m_global_rank ; - - Decompose m_decompose ; - ElemOrder m_elem_order ; - - size_t m_global_elem_box[3][2] ; - size_t m_global_node_box[3][2] ; - size_t m_uses_elem_box[3][2] ; - size_t m_uses_node_box[3][2] ; - - // [ processor rank , count ] - size_t m_owns_node_box[ PROC_NEIGH_MAX ][3][2] ; - size_t m_owns_node[ PROC_NEIGH_MAX ][2] ; - size_t m_owns_node_count ; - - size_t m_send_node_box[ PROC_NEIGH_MAX ][3][2] ; - size_t m_send_node[ PROC_NEIGH_MAX ][2] ; - size_t m_send_node_count ; - - bool m_ok ; -}; - -} // namespace Example -} // namespace Kokkos - -//---------------------------------------------------------------------------- - -#endif /* #ifndef KOKKOS_BOXELEMPART_HPP */ - diff --git a/example/fenl/CGSolve.hpp b/example/fenl/CGSolve.hpp deleted file mode 100644 index bdbc0555c6..0000000000 --- a/example/fenl/CGSolve.hpp +++ /dev/null @@ -1,122 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER - -#ifndef KOKKOS_EXAMPLE_CG_SOLVE -#define KOKKOS_EXAMPLE_CG_SOLVE - -#include -#include -#include -#include -#include -#include - -#include - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { - -template -struct CGSolve; - -template -struct CGSolve::value && - VectorType::rank == 1)>::type> { - typedef typename VectorType::value_type scalar_type; - typedef typename VectorType::execution_space execution_space; - - size_t iteration; - double iter_time; - double matvec_time; - double norm_res; - - CGSolve(const ImportType& import, const SparseMatrixType& A, - const VectorType& b, const VectorType& x, - const size_t maximum_iteration = 200, - const double tolerance = std::numeric_limits::epsilon()) - : iteration(0), iter_time(0), matvec_time(0), norm_res(0) { - const size_t count_owned = import.count_owned; - const size_t count_total = import.count_owned + import.count_receive; - - // Need input vector to matvec to be owned + received - VectorType pAll("cg::p", count_total); - - VectorType p = - Kokkos::subview(pAll, std::pair(0, count_owned)); - VectorType r("cg::r", count_owned); - VectorType Ap("cg::Ap", count_owned); - - /* r = b - A * x ; */ - - /* p = x */ Kokkos::deep_copy(p, x); - /* import p */ import(pAll); - /* Ap = A * p */ KokkosSparse::spmv("N", 1.0, A, pAll, 0.0, Ap); - /* b - Ap => r */ KokkosBlas::update(1.0, b, -1.0, Ap, 0.0, r); - /* p = r */ Kokkos::deep_copy(p, r); - - double old_rdot = - Kokkos::Example::all_reduce(KokkosBlas::dot(r, r), import.comm); - - norm_res = sqrt(old_rdot); - iteration = 0; - - Kokkos::Timer wall_clock; - Kokkos::Timer timer; - - while (tolerance < norm_res && iteration < maximum_iteration) { - /* pAp_dot = dot( p , Ap = A * p ) */ - - timer.reset(); - /* import p */ import(pAll); - /* Ap = A * p */ KokkosSparse::spmv("N", 1.0, A, pAll, 0.0, Ap); - execution_space().fence(); - matvec_time += timer.seconds(); - - const double pAp_dot = - Kokkos::Example::all_reduce(KokkosBlas::dot(p, Ap), import.comm); - const double alpha = old_rdot / pAp_dot; - - /* x += alpha * p ; */ KokkosBlas::axpby(alpha, p, 1.0, x); - /* r += -alpha * Ap ; */ KokkosBlas::axpby(-alpha, Ap, 1.0, r); - - const double r_dot = - Kokkos::Example::all_reduce(KokkosBlas::dot(r, r), import.comm); - const double beta = r_dot / old_rdot; - - /* p = r + beta * p ; */ KokkosBlas::axpby(1.0, r, beta, p); - - norm_res = std::sqrt(old_rdot = r_dot); - - ++iteration; - } - - execution_space().fence(); - iter_time = wall_clock.seconds(); - } -}; - -} // namespace Example -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -#endif /* #ifndef KOKKOS_EXAMPLE_CG_SOLVE */ diff --git a/example/fenl/CMakeLists.txt b/example/fenl/CMakeLists.txt deleted file mode 100644 index a2951cd4ad..0000000000 --- a/example/fenl/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ - -KOKKOS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) -KOKKOS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}) - -SET(SOURCES "") - -FILE(GLOB SOURCES *.cpp) - -KOKKOSKERNELS_ADD_EXECUTABLE( - fenl - SOURCES ${SOURCES}) diff --git a/example/fenl/HexElement.hpp b/example/fenl/HexElement.hpp deleted file mode 100644 index 9dbe72430f..0000000000 --- a/example/fenl/HexElement.hpp +++ /dev/null @@ -1,243 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER - -#ifndef KOKKOS_HEXELEMENT_HPP -#define KOKKOS_HEXELEMENT_HPP - -namespace Kokkos { -namespace Example { - -template< unsigned NodeCount > -class HexElement_TensorData ; - -template< unsigned NodeCount , class Device > -class HexElement_TensorEval ; - -//---------------------------------------------------------------------------- -/** \brief Evaluate Hex element on interval [-1,1]^3 */ -template<> -class HexElement_TensorData< 8 > { -public: - - static const unsigned element_node_count = 8 ; - static const unsigned spatial_dimension = 3 ; - static const unsigned integration_count_1d = 2 ; - static const unsigned function_count_1d = 2 ; - - float values_1d [ function_count_1d ][ integration_count_1d ]; - float derivs_1d [ function_count_1d ][ integration_count_1d ]; - float weights_1d[ integration_count_1d ]; - - unsigned char eval_map[ element_node_count ][4] ; - - static float eval_value_1d( const unsigned jf , const float x ) - { - return 0 == jf ? 0.5 * ( 1.0 - x ) : ( - 1 == jf ? 0.5 * ( 1.0 + x ) : 0 ); - } - - static float eval_deriv_1d( const unsigned jf , const float ) - { - return 0 == jf ? -0.5 : ( - 1 == jf ? 0.5 : 0 ); - } - - HexElement_TensorData() - { - const unsigned char tmp_map[ element_node_count ][ spatial_dimension ] = - { { 0 , 0 , 0 }, - { 1 , 0 , 0 }, - { 1 , 1 , 0 }, - { 0 , 1 , 0 }, - { 0 , 0 , 1 }, - { 1 , 0 , 1 }, - { 1 , 1 , 1 }, - { 0 , 1 , 1 } }; - - weights_1d[0] = 1 ; - weights_1d[1] = 1 ; - - const float points_1d[ integration_count_1d ] = - { -0.577350269 , 0.577350269 }; - - for ( unsigned i = 0 ; i < element_node_count ; ++i ) { - eval_map[i][0] = tmp_map[i][0]; - eval_map[i][1] = tmp_map[i][1]; - eval_map[i][2] = tmp_map[i][2]; - } - - for ( unsigned xp = 0 ; xp < integration_count_1d ; ++xp ) { - for ( unsigned xf = 0 ; xf < function_count_1d ; ++xf ) { - values_1d[xp][xf] = eval_value_1d( xf , points_1d[xp] ); - derivs_1d[xp][xf] = eval_deriv_1d( xf , points_1d[xp] ); - }} - } -}; - -//---------------------------------------------------------------------------- - -template<> -class HexElement_TensorData< 27 > { -public: - - static const unsigned element_node_count = 27 ; - static const unsigned spatial_dimension = 3 ; - static const unsigned integration_count_1d = 3 ; - static const unsigned function_count_1d = 3 ; - - float values_1d [ function_count_1d ][ integration_count_1d ]; - float derivs_1d [ function_count_1d ][ integration_count_1d ]; - float weights_1d[ integration_count_1d ]; - - unsigned char eval_map[ element_node_count ][4] ; - - // sizeof(EvaluateElementHex) = 111 bytes = - // sizeof(float) * 9 + - // sizeof(float) * 9 + - // sizeof(float) * 3 + - // sizeof(char) * 27 - - static float eval_value_1d( const unsigned jf , const float p ) - { - return 0 == jf ? 0.5 * p * ( p - 1 ) : ( - 1 == jf ? 1.0 - p * p : ( - 2 == jf ? 0.5 * p * ( p + 1 ) : 0 )); - } - - static float eval_deriv_1d( const unsigned jf , const float p ) - { - return 0 == jf ? p - 0.5 : ( - 1 == jf ? -2.0 * p : ( - 2 == jf ? p + 0.5 : 0 )); - } - - HexElement_TensorData() - { - const unsigned char tmp_map[ element_node_count ][ spatial_dimension ] = - { { 0 , 0 , 0 }, - { 2 , 0 , 0 }, - { 2 , 2 , 0 }, - { 0 , 2 , 0 }, - { 0 , 0 , 2 }, - { 2 , 0 , 2 }, - { 2 , 2 , 2 }, - { 0 , 2 , 2 }, - { 1 , 0 , 0 }, - { 2 , 1 , 0 }, - { 1 , 2 , 0 }, - { 0 , 1 , 0 }, - { 0 , 0 , 1 }, - { 2 , 0 , 1 }, - { 2 , 2 , 1 }, - { 0 , 2 , 1 }, - { 1 , 0 , 2 }, - { 2 , 1 , 2 }, - { 1 , 2 , 2 }, - { 0 , 1 , 2 }, - { 1 , 1 , 1 }, - { 1 , 1 , 0 }, - { 1 , 1 , 2 }, - { 0 , 1 , 1 }, - { 2 , 1 , 1 }, - { 1 , 0 , 1 }, - { 1 , 2 , 1 } }; - - // Interval [-1,1] - - weights_1d[0] = 0.555555556 ; - weights_1d[1] = 0.888888889 ; - weights_1d[2] = 0.555555556 ; - - const float points_1d[3] = { -0.774596669 , - 0.000000000 , - 0.774596669 }; - - for ( unsigned i = 0 ; i < element_node_count ; ++i ) { - eval_map[i][0] = tmp_map[i][0]; - eval_map[i][1] = tmp_map[i][1]; - eval_map[i][2] = tmp_map[i][2]; - } - - for ( unsigned xp = 0 ; xp < integration_count_1d ; ++xp ) { - for ( unsigned xf = 0 ; xf < function_count_1d ; ++xf ) { - values_1d[xp][xf] = eval_value_1d( xf , points_1d[xp] ); - derivs_1d[xp][xf] = eval_deriv_1d( xf , points_1d[xp] ); - }} - } -}; - -//---------------------------------------------------------------------------- - -template< unsigned NodeCount > -class HexElement_Data { -public: - static const unsigned spatial_dimension = 3 ; - static const unsigned element_node_count = NodeCount ; - static const unsigned integration_count = NodeCount ; - static const unsigned function_count = NodeCount ; - - float weights[ integration_count ] ; - float values[ integration_count ][ function_count ]; - float gradients[ integration_count ][ spatial_dimension ][ function_count ]; - - HexElement_Data() - { - HexElement_TensorData< NodeCount > tensor_data ; - - for ( unsigned ip = 0 ; ip < integration_count ; ++ip ) { - - const unsigned ipx = tensor_data.eval_map[ip][0] ; - const unsigned ipy = tensor_data.eval_map[ip][1] ; - const unsigned ipz = tensor_data.eval_map[ip][2] ; - - weights[ip] = tensor_data.weights_1d[ ipx ] * - tensor_data.weights_1d[ ipy ] * - tensor_data.weights_1d[ ipz ] ; - - for ( unsigned jf = 0 ; jf < function_count ; ++jf ) { - - const unsigned jfx = tensor_data.eval_map[jf][0] ; - const unsigned jfy = tensor_data.eval_map[jf][1] ; - const unsigned jfz = tensor_data.eval_map[jf][2] ; - - values[ip][jf] = tensor_data.values_1d[ ipx ][ jfx ] * - tensor_data.values_1d[ ipy ][ jfy ] * - tensor_data.values_1d[ ipz ][ jfz ] ; - - gradients[ip][0][jf] = tensor_data.derivs_1d[ ipx ][ jfx ] * - tensor_data.values_1d[ ipy ][ jfy ] * - tensor_data.values_1d[ ipz ][ jfz ] ; - - gradients[ip][1][jf] = tensor_data.values_1d[ ipx ][ jfx ] * - tensor_data.derivs_1d[ ipy ][ jfy ] * - tensor_data.values_1d[ ipz ][ jfz ] ; - - gradients[ip][2][jf] = tensor_data.values_1d[ ipx ][ jfx ] * - tensor_data.values_1d[ ipy ][ jfy ] * - tensor_data.derivs_1d[ ipz ][ jfz ] ; - } - } - } -}; - -//---------------------------------------------------------------------------- - -} /* namespace Example */ -} /* namespace Kokkos */ - -#endif /* #ifndef KOKKOS_HEXELEMENT_HPP */ - - diff --git a/example/fenl/KokkosKernels_ETIMacros.hpp b/example/fenl/KokkosKernels_ETIMacros.hpp deleted file mode 100644 index b459ff67eb..0000000000 --- a/example/fenl/KokkosKernels_ETIMacros.hpp +++ /dev/null @@ -1,44 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER -#ifdef MAKE_BUILD -#ifdef KOKKOS_ENABLE_CUDA - #define KOKKOSKERNELS_ETI_MANGLING_TYPEDEFS() \ - typedef Kokkos::Device Kokkos_Device0Kokkos_Cuda_Kokkos_CudaSpace0; \ - typedef Kokkos::complex Kokkos_complex0double0; \ - typedef long long longlong; -#else - #ifdef KOKKOS_ENABLE_OPENMP - #define KOKKOSKERNELS_ETI_MANGLING_TYPEDEFS() \ - typedef Kokkos::Device Kokkos_Device0Kokkos_OpenMP_Kokkos_HostSpace0; \ - typedef Kokkos::complex Kokkos_complex0double0; \ - typedef long long longlong; - #else - #ifdef KOKKOS_ENABLE_THREADS - #define KOKKOSKERNELS_ETI_MANGLING_TYPEDEFS() \ - typedef Kokkos::Device Kokkos_Device0Kokkos_Threads_Kokkos_HostSpace0; \ - typedef Kokkos::complex Kokkos_complex0double0; \ - typedef long long longlong; - #else - #define KOKKOSKERNELS_ETI_MANGLING_TYPEDEFS() \ - typedef Kokkos::Device Kokkos_Device0Kokkos_OpenMP_Kokkos_HostSpace0; \ - typedef Kokkos::complex Kokkos_complex0double0; \ - typedef long long longlong; - #endif - #endif -#endif - -#endif - diff --git a/example/fenl/TestFixture.cpp b/example/fenl/TestFixture.cpp deleted file mode 100644 index 63f9cac89d..0000000000 --- a/example/fenl/TestFixture.cpp +++ /dev/null @@ -1,31 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER - -#include -#include - -namespace Kokkos { -namespace Example { - -template void test_fixture< Kokkos::HostSpace::execution_space >(); - -#if defined( KOKKOS_ENABLE_CUDA ) -template void test_fixture(); -#endif - -} /* namespace Example */ -} /* namespace Kokkos */ - diff --git a/example/fenl/TestFixture.hpp b/example/fenl/TestFixture.hpp deleted file mode 100644 index 1418500fbb..0000000000 --- a/example/fenl/TestFixture.hpp +++ /dev/null @@ -1,128 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER - -#ifndef KOKKOS_EXAMPLE_TESTFIXTURE_HPP -#define KOKKOS_EXAMPLE_TESTFIXTURE_HPP - -#include -#include - -#include - -#include -#include - -namespace Kokkos { -namespace Example { - -template -struct FixtureVerifyElemNodeCoord { - typedef Device execution_space; - - typedef struct { - size_t success, error; - } value_type; - - typedef Kokkos::Example::BoxElemFixture< - Device, Kokkos::Example::BoxElemPart::ElemLinear> - FixtureType; - - FixtureType m_fixture; - - KOKKOS_INLINE_FUNCTION - void init(value_type& update) const { update.success = update.error = 0; } - - KOKKOS_INLINE_FUNCTION - void join(value_type& update, const value_type& input) const { - update.success += input.success; - update.error += input.error; - } - - KOKKOS_INLINE_FUNCTION - void operator()(size_t ielem, value_type& update) const { - unsigned node_coord[FixtureType::ElemNode][3]; - - for (unsigned i = 0; i < FixtureType::ElemNode; ++i) { - const unsigned node_id = m_fixture.elem_node(ielem, i); - node_coord[i][0] = m_fixture.node_grid(node_id, 0); - node_coord[i][1] = m_fixture.node_grid(node_id, 1); - node_coord[i][2] = m_fixture.node_grid(node_id, 2); - } - - int error = 0; - for (unsigned i = 1; i < FixtureType::ElemNode; ++i) { - if (node_coord[0][0] + m_fixture.elem_node_local(i, 0) != - node_coord[i][0] || - node_coord[0][1] + m_fixture.elem_node_local(i, 1) != - node_coord[i][1] || - node_coord[0][2] + m_fixture.elem_node_local(i, 2) != - node_coord[i][2]) { - error = 1; - } - } - - if (error) { - ++update.error; - } else { - ++update.success; - } - } - - FixtureVerifyElemNodeCoord(const FixtureType& f) : m_fixture(f) {} -}; - -template -void test_fixture() { - typedef Kokkos::Example::BoxElemFixture< - Device, Kokkos::Example::BoxElemPart::ElemLinear> - FixtureType; - - const Kokkos::Example::BoxElemPart::Decompose decompose = - Kokkos::Example::BoxElemPart::DecomposeElem; // DecomposeElem | - // DecomposeNode ; - - const unsigned global_size = 256; - const unsigned global_nx = 400; - const unsigned global_ny = 400; - const unsigned global_nz = 400; - - for (unsigned my_rank = 0; my_rank < global_size; ++my_rank) { - const FixtureType fixture(decompose, global_size, my_rank, global_nx, - global_ny, global_nz); - - // Verify grid coordinates of element's nodes - - typename FixtureVerifyElemNodeCoord::value_type result = {0, 0}; - - Kokkos::parallel_reduce(fixture.elem_node().extent(0), - FixtureVerifyElemNodeCoord(fixture), - result); - - if (result.error) { - std::cout << "P[" << my_rank << ":" << global_size - << "] Fixture elem_node_coord" - << " success(" << result.success << ")" - << " error(" << result.error << ")" << std::endl; - } - - // Check send/recv alignment - } -} - -} /* namespace Example */ -} /* namespace Kokkos */ - -#endif /* #ifndef KOKKOS_EXAMPLE_TESTFIXTURE_HPP */ diff --git a/example/fenl/VectorImport.hpp b/example/fenl/VectorImport.hpp deleted file mode 100644 index b701065deb..0000000000 --- a/example/fenl/VectorImport.hpp +++ /dev/null @@ -1,267 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER - -#ifndef KOKKOS_VECTORIMPORT_HPP -#define KOKKOS_VECTORIMPORT_HPP - -#include -#include -#include -#include -#include - -#include - -#include - -namespace Kokkos { -namespace Example { - -template< class CommMessageType , class CommIdentType , class VectorType > -class VectorImport ; - -} // namespace Example -} // namespace Kokkos - -#if ! defined( KOKKOS_ENABLE_MPI ) - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { - -template< class CommMessageType , class CommIdentType , class VectorType > -class VectorImport { -public: - const MPI_Comm comm ; - const unsigned count_owned ; - const unsigned count_receive ; - - VectorImport( MPI_Comm arg_comm , - const CommMessageType & , - const CommMessageType & , - const CommIdentType & , - const unsigned arg_count_owned , - const unsigned arg_count_receive ) - : comm( arg_comm ) - , count_owned( arg_count_owned ) - , count_receive( arg_count_receive ) - {} - - inline - void operator()( const VectorType & ) const {} -}; - - -} // namespace Example -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -#else /* defined( KOKKOS_ENABLE_MPI ) */ - -namespace Kokkos { -namespace Example { - -template< class CommMessageType , class CommIdentType , class VectorType > -class VectorImport { -private: - - // rank == 1 or array_layout == LayoutRight - enum { OK = Kokkos::Impl::StaticAssert< - ( VectorType::rank == 1 ) || - std::is_same< typename VectorType::array_layout , Kokkos::LayoutRight >::value - >::value }; - - typedef typename VectorType::HostMirror HostVectorType ; - - enum { ReceiveInPlace = - std::is_same< typename VectorType::memory_space , - typename HostVectorType::memory_space >::value }; - - const CommMessageType recv_msg ; - const CommMessageType send_msg ; - const CommIdentType send_nodeid ; - VectorType send_buffer ; - HostVectorType host_send_buffer ; - HostVectorType host_recv_buffer ; - unsigned chunk ; - -public: - - const MPI_Comm comm ; - const unsigned count_owned ; - const unsigned count_receive ; - - struct Pack { - typedef typename VectorType::execution_space execution_space ; - const CommIdentType index ; - const VectorType source ; - const VectorType buffer ; - - KOKKOS_INLINE_FUNCTION - void operator()( const unsigned i ) const - { buffer( i ) = source( index(i) ); } - - Pack( const CommIdentType & arg_index , - const VectorType & arg_source , - const VectorType & arg_buffer ) - : index( arg_index ) - , source( arg_source ) - , buffer( arg_buffer ) - { - Kokkos::parallel_for( "kokkos-kernels/example/fenl: Pack", index.extent(0) , *this ); - execution_space().fence(); - } - }; - - VectorImport( MPI_Comm arg_comm , - const CommMessageType & arg_recv_msg , - const CommMessageType & arg_send_msg , - const CommIdentType & arg_send_nodeid , - const unsigned arg_count_owned , - const unsigned arg_count_receive ) - : recv_msg( arg_recv_msg ) - , send_msg( arg_send_msg ) - , send_nodeid( arg_send_nodeid ) - , send_buffer() - , host_send_buffer() - , host_recv_buffer() - , comm( arg_comm ) - , count_owned( arg_count_owned ) - , count_receive( arg_count_receive ) - { - if ( ! ReceiveInPlace ) { - host_recv_buffer = HostVectorType("recv_buffer",count_receive); - } - - unsigned send_count = 0 ; - for ( unsigned i = 0 ; i < send_msg.extent(0) ; ++i ) { send_count += send_msg(i,1); } - send_buffer = VectorType("send_buffer",send_count); - host_send_buffer = Kokkos::create_mirror_view( send_buffer ); - } - - inline - void operator()( const VectorType & v ) const - { - typedef typename VectorType::value_type scalar_type ; - - const int mpi_tag = 42 ; - const unsigned chunk_ = v.extent(1); - - // Subvector for receives - const std::pair recv_range( count_owned , count_owned + count_receive ); - const VectorType recv_vector = Kokkos::subview( v , recv_range ); - - std::vector< MPI_Request > recv_request( recv_msg.extent(0) , MPI_REQUEST_NULL ); - - { // Post receives - scalar_type * ptr = - ReceiveInPlace ? recv_vector.data() : host_recv_buffer.data(); - - for ( size_t i = 0 ; i < recv_msg.extent(0) ; ++i ) { - const int proc = recv_msg(i,0); - const int count = recv_msg(i,1) * chunk_ ; - - MPI_Irecv( ptr , count * sizeof(scalar_type) , MPI_BYTE , - proc , mpi_tag , comm , & recv_request[i] ); - - ptr += count ; - } - } - - MPI_Barrier( comm ); - - { // Pack and send - const Pack pack( send_nodeid , v , send_buffer ); - - Kokkos::deep_copy( host_send_buffer , send_buffer ); - - scalar_type * ptr = host_send_buffer.data(); - - for ( size_t i = 0 ; i < send_msg.extent(0) ; ++i ) { - const int proc = send_msg(i,0); - const int count = send_msg(i,1) * chunk_ ; - - // MPI_Ssend blocks until - // (1) a receive is matched for the message and - // (2) the send buffer can be re-used. - // - // It is suggested that MPI_Ssend will have the best performance: - // http://www.mcs.anl.gov/research/projects/mpi/sendmode.html . - - MPI_Ssend( ptr , - count * sizeof(scalar_type) , MPI_BYTE , - proc , mpi_tag , comm ); - - ptr += count ; - } - } - - // Wait for receives and verify: - - for ( size_t i = 0 ; i < recv_msg.extent(0) ; ++i ) { - MPI_Status recv_status ; - int recv_which = 0 ; - int recv_size = 0 ; - - MPI_Waitany( recv_msg.extent(0) , & recv_request[0] , & recv_which , & recv_status ); - - const int recv_proc = recv_status.MPI_SOURCE ; - - MPI_Get_count( & recv_status , MPI_BYTE , & recv_size ); - - // Verify message properly received: - - const int expected_proc = recv_msg(recv_which,0); - const int expected_size = recv_msg(recv_which,1) * chunk_ * sizeof(scalar_type); - - if ( ( expected_proc != recv_proc ) || - ( expected_size != recv_size ) ) { - - int local_rank = 0 ; - - MPI_Comm_rank( comm , & local_rank ); - - std::ostringstream msg ; - msg << "VectorImport error:" - << " P" << local_rank - << " received from P" << recv_proc - << " size " << recv_size - << " expected " << expected_size - << " from P" << expected_proc ; - throw std::runtime_error( msg.str() ); - } - } - - // Copy received data to device memory. - - if ( ! ReceiveInPlace ) { Kokkos::deep_copy( recv_vector , host_recv_buffer ); } - } -}; - -} // namespace Example -} // namespace Kokkos - -#endif - -//---------------------------------------------------------------------------- - -#endif /* #ifndef KOKKOS_VECTORIMPORT_HPP */ - - diff --git a/example/fenl/WrapMPI.hpp b/example/fenl/WrapMPI.hpp deleted file mode 100644 index 3dc27b5dc7..0000000000 --- a/example/fenl/WrapMPI.hpp +++ /dev/null @@ -1,76 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER - -#ifndef KOKKOS_EXAMPLE_WRAP_MPI -#define KOKKOS_EXAMPLE_WRAP_MPI - -#include -#include - -#if defined( KOKKOS_ENABLE_MPI ) - -#include - -namespace Kokkos { -namespace Example { - -inline -double all_reduce( double value , MPI_Comm comm ) -{ - double local = value ; - MPI_Allreduce( & local , & value , 1 , MPI_DOUBLE , MPI_SUM , comm ); - return value ; -} - -inline -double all_reduce_max( double value , MPI_Comm comm ) -{ - double local = value ; - MPI_Allreduce( & local , & value , 1 , MPI_DOUBLE , MPI_MAX , comm ); - return value ; -} - -} // namespace Example -} // namespace Kokkos - -#elif ! defined( KOKKOS_ENABLE_MPI ) - -/* Wrap the the MPI_Comm type and heavily used MPI functions - * to reduce the number of '#if defined( KOKKOS_ENABLE_MPI )' - * blocks which have to be sprinkled throughout the examples. - */ - -typedef int MPI_Comm ; - -inline int MPI_Comm_size( MPI_Comm , int * size ) { *size = 1 ; return 0 ; } -inline int MPI_Comm_rank( MPI_Comm , int * rank ) { *rank = 0 ; return 0 ; } -inline int MPI_Barrier( MPI_Comm ) { return 0; } - -namespace Kokkos { -namespace Example { - -inline -double all_reduce( double value , MPI_Comm ) { return value ; } - -inline -double all_reduce_max( double value , MPI_Comm ) { return value ; } - -} // namespace Example -} // namespace Kokkos - -#endif /* ! defined( KOKKOS_ENABLE_MPI ) */ -#endif /* #ifndef KOKKOS_EXAMPLE_WRAP_MPI */ - diff --git a/example/fenl/fenl.cpp b/example/fenl/fenl.cpp deleted file mode 100644 index 976c1e7766..0000000000 --- a/example/fenl/fenl.cpp +++ /dev/null @@ -1,91 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER -#include -#include - -namespace Kokkos { -namespace Example { -namespace FENL { - -#if defined( KOKKOS_ENABLE_THREADS ) - -template -Perf fenl< Kokkos::Threads , Kokkos::Example::BoxElemPart::ElemLinear >( - MPI_Comm comm , - const int use_print , - const int use_trials , - const int use_atomic , - const int global_elems[] ); - - -template -Perf fenl< Kokkos::Threads , Kokkos::Example::BoxElemPart::ElemQuadratic >( - MPI_Comm comm , - const int use_print , - const int use_trials , - const int use_atomic , - const int global_elems[] ); - -#endif - - -#if defined (KOKKOS_ENABLE_OPENMP) - -template -Perf fenl< Kokkos::OpenMP , Kokkos::Example::BoxElemPart::ElemLinear >( - MPI_Comm comm , - const int use_print , - const int use_trials , - const int use_atomic , - const int global_elems[] ); - - -template -Perf fenl< Kokkos::OpenMP , Kokkos::Example::BoxElemPart::ElemQuadratic >( - MPI_Comm comm , - const int use_print , - const int use_trials , - const int use_atomic , - const int global_elems[] ); - -#endif - -#if defined( KOKKOS_ENABLE_CUDA ) - -template -Perf fenl< Kokkos::Cuda , Kokkos::Example::BoxElemPart::ElemLinear >( - MPI_Comm comm , - const int use_print , - const int use_trials , - const int use_atomic , - const int global_elems[] ); - - -template -Perf fenl< Kokkos::Cuda , Kokkos::Example::BoxElemPart::ElemQuadratic >( - MPI_Comm comm , - const int use_print , - const int use_trials , - const int use_atomic , - const int global_elems[] ); - -#endif - - -} /* namespace FENL */ -} /* namespace Example */ -} /* namespace Kokkos */ - diff --git a/example/fenl/fenl.hpp b/example/fenl/fenl.hpp deleted file mode 100644 index 448c19c179..0000000000 --- a/example/fenl/fenl.hpp +++ /dev/null @@ -1,62 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER - -#ifndef KOKKOS_EXAMPLE_FENL_HPP -#define KOKKOS_EXAMPLE_FENL_HPP - -#include -#include -#include - -namespace Kokkos { -namespace Example { -namespace FENL { - -struct Perf { - size_t global_elem_count ; - size_t global_node_count ; - size_t newton_iter_count ; - size_t cg_iter_count ; - double map_ratio ; - double fill_node_set ; - double scan_node_count ; - double fill_graph_entries ; - double sort_graph_entries ; - double fill_element_graph ; - double create_sparse_matrix ; - double fill_time ; - double bc_time ; - double matvec_time ; - double cg_time ; - double newton_residual ; - double error_max ; - -}; - -template < class Device , BoxElemPart::ElemOrder ElemOrder > -Perf fenl( - MPI_Comm comm , - const int use_print , - const int use_trials , - const int use_atomic , - const int global_elems[] ); - -} /* namespace FENL */ -} /* namespace Example */ -} /* namespace Kokkos */ - -#endif /* #ifndef KOKKOS_EXAMPLE_FENL_HPP */ - diff --git a/example/fenl/fenl_functors.hpp b/example/fenl/fenl_functors.hpp deleted file mode 100644 index b058636f34..0000000000 --- a/example/fenl/fenl_functors.hpp +++ /dev/null @@ -1,1093 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER - -#ifndef KOKKOS_EXAMPLE_FENLFUNCTORS_HPP -#define KOKKOS_EXAMPLE_FENLFUNCTORS_HPP - -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { -namespace FENL { - -template -class NodeNodeGraph { - public: - typedef typename ElemNodeIdView::execution_space execution_space; - typedef pair key_type; - - typedef Kokkos::UnorderedMap SetType; - typedef typename CrsGraphType::row_map_type::non_const_type RowMapType; - typedef Kokkos::View UnsignedValue; - - // Static dimensions of 0 generate compiler warnings or errors. - typedef Kokkos::View - ElemGraphType; - - private: - enum PhaseType { - FILL_NODE_SET, - SCAN_NODE_COUNT, - FILL_GRAPH_ENTRIES, - SORT_GRAPH_ENTRIES, - FILL_ELEMENT_GRAPH - }; - - const unsigned node_count; - const ElemNodeIdView elem_node_id; - UnsignedValue row_total; - RowMapType row_count; - RowMapType row_map; - SetType node_node_set; - PhaseType phase; - - public: - CrsGraphType graph; - ElemGraphType elem_graph; - - struct Times { - double ratio; - double fill_node_set; - double scan_node_count; - double fill_graph_entries; - double sort_graph_entries; - double fill_element_graph; - }; - - NodeNodeGraph(const ElemNodeIdView& arg_elem_node_id, - const unsigned arg_node_count, Times& results) - : node_count(arg_node_count), - elem_node_id(arg_elem_node_id), - row_total("row_total"), - row_count(Kokkos::view_alloc(Kokkos::WithoutInitializing, "row_count"), - node_count) // will deep_copy to 0 inside loop - , - row_map("graph_row_map", node_count + 1), - node_node_set(), - phase(FILL_NODE_SET), - graph(), - elem_graph() { - //-------------------------------- - // Guess at span required for the map: - - Kokkos::Timer wall_clock; - - wall_clock.reset(); - phase = FILL_NODE_SET; - - // upper bound on the span - size_t set_span = (28ull * node_count) / 2; - - { - // Zero the row count to restart the fill - Kokkos::deep_copy(row_count, 0u); - - node_node_set = SetType(set_span); - - // May be larger that requested: - set_span = node_node_set.span(); - - Kokkos::parallel_for("kokkos-kernels/example/fenl: NodeNodeGraph", - elem_node_id.extent(0), *this); - } - - execution_space().fence(); - results.ratio = (double)node_node_set.size() / (double)node_node_set.span(); - results.fill_node_set = wall_clock.seconds(); - //-------------------------------- - - wall_clock.reset(); - phase = SCAN_NODE_COUNT; - - // Exclusive scan of row_count into row_map - // including the final total in the 'node_count + 1' position. - // Zero the 'row_count' values. - Kokkos::parallel_scan(node_count, *this); - - // Zero the row count for the fill: - Kokkos::deep_copy(row_count, 0u); - - unsigned graph_entry_count = 0; - - Kokkos::deep_copy(graph_entry_count, row_total); - - // Assign graph's row_map and allocate graph's entries - graph.row_map = row_map; - graph.entries = - typename CrsGraphType::entries_type("graph_entries", graph_entry_count); - - //-------------------------------- - // Fill graph's entries from the (node,node) set. - - execution_space().fence(); - results.scan_node_count = wall_clock.seconds(); - - wall_clock.reset(); - phase = FILL_GRAPH_ENTRIES; - Kokkos::parallel_for(node_node_set.span(), *this); - - execution_space().fence(); - results.fill_graph_entries = wall_clock.seconds(); - - //-------------------------------- - // Done with the temporary sets and arrays - wall_clock.reset(); - phase = SORT_GRAPH_ENTRIES; - - row_total = UnsignedValue(); - row_count = RowMapType(); - row_map = RowMapType(); - node_node_set.clear(); - - //-------------------------------- - - Kokkos::parallel_for(node_count, *this); - - execution_space().fence(); - results.sort_graph_entries = wall_clock.seconds(); - - //-------------------------------- - // Element-to-graph mapping: - wall_clock.reset(); - phase = FILL_ELEMENT_GRAPH; - elem_graph = ElemGraphType("elem_graph", elem_node_id.extent(0)); - Kokkos::parallel_for(elem_node_id.extent(0), *this); - - execution_space().fence(); - results.fill_element_graph = wall_clock.seconds(); - } - - //------------------------------------ - // parallel_for: create map and count row length - - KOKKOS_INLINE_FUNCTION - void fill_set(const unsigned ielem) const { - // Loop over element's (row_local_node,col_local_node) pairs: - for (unsigned row_local_node = 0; row_local_node < elem_node_id.extent(1); - ++row_local_node) { - const unsigned row_node = elem_node_id(ielem, row_local_node); - - for (unsigned col_local_node = row_local_node; - col_local_node < elem_node_id.extent(1); ++col_local_node) { - const unsigned col_node = elem_node_id(ielem, col_local_node); - - // If either node is locally owned then insert the pair into the - // unordered map: - - if (row_node < row_count.extent(0) || col_node < row_count.extent(0)) { - const key_type key = (row_node < col_node) - ? make_pair(row_node, col_node) - : make_pair(col_node, row_node); - - const typename SetType::insert_result result = - node_node_set.insert(key); - - // A successfull insert: the first time this pair was added - if (result.success()) { - // If row node is owned then increment count - if (row_node < row_count.extent(0)) { - atomic_fetch_add(&row_count(row_node), 1); - } - - // If column node is owned and not equal to row node then increment - // count - if (col_node < row_count.extent(0) && col_node != row_node) { - atomic_fetch_add(&row_count(col_node), 1); - } - } - } - } - } - } - - KOKKOS_INLINE_FUNCTION - void fill_graph_entries(const unsigned iset) const { - if (node_node_set.valid_at(iset)) { - // Add each entry to the graph entries. - - const key_type key = node_node_set.key_at(iset); - const unsigned row_node = key.first; - const unsigned col_node = key.second; - - if (row_node < row_count.extent(0)) { - const unsigned offset = - graph.row_map(row_node) + atomic_fetch_add(&row_count(row_node), 1); - graph.entries(offset) = col_node; - } - - if (col_node < row_count.extent(0) && col_node != row_node) { - const unsigned offset = - graph.row_map(col_node) + atomic_fetch_add(&row_count(col_node), 1); - graph.entries(offset) = row_node; - } - } - } - - KOKKOS_INLINE_FUNCTION - void sort_graph_entries(const unsigned irow) const { - const unsigned row_beg = graph.row_map(irow); - const unsigned row_end = graph.row_map(irow + 1); - for (unsigned i = row_beg + 1; i < row_end; ++i) { - const unsigned col = graph.entries(i); - unsigned j = i; - for (; row_beg < j && col < graph.entries(j - 1); --j) { - graph.entries(j) = graph.entries(j - 1); - } - graph.entries(j) = col; - } - } - - KOKKOS_INLINE_FUNCTION - void fill_elem_graph_map(const unsigned ielem) const { - for (unsigned row_local_node = 0; row_local_node < elem_node_id.extent(1); - ++row_local_node) { - const unsigned row_node = elem_node_id(ielem, row_local_node); - - for (unsigned col_local_node = 0; col_local_node < elem_node_id.extent(1); - ++col_local_node) { - const unsigned col_node = elem_node_id(ielem, col_local_node); - - unsigned entry = ~0u; - - if (row_node + 1 < graph.row_map.extent(0)) { - const unsigned entry_end = graph.row_map(row_node + 1); - - entry = graph.row_map(row_node); - - for (; entry < entry_end && graph.entries(entry) != col_node; ++entry) - ; - - if (entry == entry_end) entry = ~0u; - } - - elem_graph(ielem, row_local_node, col_local_node) = entry; - } - } - } - - KOKKOS_INLINE_FUNCTION - void operator()(const unsigned iwork) const { - if (phase == FILL_NODE_SET) { - fill_set(iwork); - } else if (phase == FILL_GRAPH_ENTRIES) { - fill_graph_entries(iwork); - } else if (phase == SORT_GRAPH_ENTRIES) { - sort_graph_entries(iwork); - } else if (phase == FILL_ELEMENT_GRAPH) { - fill_elem_graph_map(iwork); - } - } - - //------------------------------------ - // parallel_scan: row offsets - - typedef unsigned value_type; - - KOKKOS_INLINE_FUNCTION - void operator()(const unsigned irow, unsigned& update, - const bool final) const { - // exclusive scan - if (final) { - row_map(irow) = update; - } - - update += row_count(irow); - - if (final) { - if (irow + 1 == row_count.extent(0)) { - row_map(irow + 1) = update; - row_total() = update; - } - } - } - - KOKKOS_INLINE_FUNCTION - void init(unsigned& update) const { update = 0; } - - KOKKOS_INLINE_FUNCTION - void join(unsigned& update, const unsigned& input) const { update += input; } - - //------------------------------------ -}; - -} /* namespace FENL */ -} /* namespace Example */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { -namespace FENL { - -template -class NodeElemGatherFill { - public: - typedef typename ElemCompType::execution_space execution_space; - typedef typename ElemCompType::vector_type vector_type; - typedef typename ElemCompType::sparse_matrix_type sparse_matrix_type; - typedef typename ElemCompType::elem_node_type elem_node_type; - typedef typename ElemCompType::elem_vectors_type elem_vectors_type; - typedef typename ElemCompType::elem_matrices_type elem_matrices_type; - typedef typename ElemCompType::elem_graph_type elem_graph_type; - - static const unsigned ElemNodeCount = ElemCompType::ElemNodeCount; - - //------------------------------------ - - private: - typedef Kokkos::StaticCrsGraph CrsGraphType; - typedef typename CrsGraphType::row_map_type::non_const_type RowMapType; - typedef Kokkos::View UnsignedValue; - - enum PhaseType { - FILL_NODE_COUNT, - SCAN_NODE_COUNT, - FILL_GRAPH_ENTRIES, - SORT_GRAPH_ENTRIES, - GATHER_FILL - }; - - const elem_node_type elem_node_id; - const elem_graph_type elem_graph; - UnsignedValue row_total; - RowMapType row_count; - RowMapType row_map; - CrsGraphType graph; - vector_type residual; - sparse_matrix_type jacobian; - elem_vectors_type elem_residual; - elem_matrices_type elem_jacobian; - PhaseType phase; - - public: - NodeElemGatherFill() - : elem_node_id(), - elem_graph(), - row_total(), - row_count(), - row_map(), - graph(), - residual(), - jacobian(), - elem_residual(), - elem_jacobian(), - phase(FILL_NODE_COUNT) {} - - NodeElemGatherFill(const NodeElemGatherFill& rhs) - : elem_node_id(rhs.elem_node_id), - elem_graph(rhs.elem_graph), - row_total(rhs.row_total), - row_count(rhs.row_count), - row_map(rhs.row_map), - graph(rhs.graph), - residual(rhs.residual), - jacobian(rhs.jacobian), - elem_residual(rhs.elem_residual), - elem_jacobian(rhs.elem_jacobian), - phase(rhs.phase) {} - - NodeElemGatherFill(const elem_node_type& arg_elem_node_id, - const elem_graph_type& arg_elem_graph, - const vector_type& arg_residual, - const sparse_matrix_type& arg_jacobian, - const elem_vectors_type& arg_elem_residual, - const elem_matrices_type& arg_elem_jacobian) - : elem_node_id(arg_elem_node_id), - elem_graph(arg_elem_graph), - row_total("row_total"), - row_count("row_count", arg_residual.extent(0)), - row_map("graph_row_map", arg_residual.extent(0) + 1), - graph(), - residual(arg_residual), - jacobian(arg_jacobian), - elem_residual(arg_elem_residual), - elem_jacobian(arg_elem_jacobian), - phase(FILL_NODE_COUNT) { - //-------------------------------- - // Count node->element relations - - phase = FILL_NODE_COUNT; - - Kokkos::parallel_for(elem_node_id.extent(0), *this); - - //-------------------------------- - - phase = SCAN_NODE_COUNT; - - // Exclusive scan of row_count into row_map - // including the final total in the 'node_count + 1' position. - // Zero the 'row_count' values. - Kokkos::parallel_scan(residual.extent(0), *this); - - // Zero the row count for the fill: - Kokkos::deep_copy(row_count, typename RowMapType::value_type(0)); - - unsigned graph_entry_count = 0; - - Kokkos::deep_copy(graph_entry_count, row_total); - - // Assign graph's row_map and allocate graph's entries - graph.row_map = row_map; - - typedef typename CrsGraphType::entries_type graph_entries_type; - - graph.entries = graph_entries_type("graph_entries", graph_entry_count); - - //-------------------------------- - // Fill graph's entries from the (node,node) set. - - phase = FILL_GRAPH_ENTRIES; - - Kokkos::deep_copy(row_count, 0u); - Kokkos::parallel_for(elem_node_id.extent(0), *this); - - execution_space().fence(); - - //-------------------------------- - // Done with the temporary sets and arrays - - row_total = UnsignedValue(); - row_count = RowMapType(); - row_map = RowMapType(); - - //-------------------------------- - - phase = SORT_GRAPH_ENTRIES; - Kokkos::parallel_for(residual.extent(0), *this); - - execution_space().fence(); - - phase = GATHER_FILL; - } - - void apply() const { Kokkos::parallel_for(residual.extent(0), *this); } - - //------------------------------------ - //------------------------------------ - // parallel_for: Count node->element pairs - - KOKKOS_INLINE_FUNCTION - void fill_node_count(const unsigned ielem) const { - for (unsigned row_local_node = 0; row_local_node < elem_node_id.extent(1); - ++row_local_node) { - const unsigned row_node = elem_node_id(ielem, row_local_node); - - if (row_node < row_count.extent(0)) { - atomic_fetch_add(&row_count(row_node), 1); - } - } - } - - KOKKOS_INLINE_FUNCTION - void fill_graph_entries(const unsigned ielem) const { - for (unsigned row_local_node = 0; row_local_node < elem_node_id.extent(1); - ++row_local_node) { - const unsigned row_node = elem_node_id(ielem, row_local_node); - - if (row_node < row_count.extent(0)) { - const unsigned offset = - graph.row_map(row_node) + atomic_fetch_add(&row_count(row_node), 1); - - graph.entries(offset, 0) = ielem; - graph.entries(offset, 1) = row_local_node; - } - } - } - - KOKKOS_INLINE_FUNCTION - void sort_graph_entries(const unsigned irow) const { - const unsigned row_beg = graph.row_map(irow); - const unsigned row_end = graph.row_map(irow + 1); - for (unsigned i = row_beg + 1; i < row_end; ++i) { - const unsigned elem = graph.entries(i, 0); - const unsigned local = graph.entries(i, 1); - unsigned j = i; - for (; row_beg < j && elem < graph.entries(j - 1, 0); --j) { - graph.entries(j, 0) = graph.entries(j - 1, 0); - graph.entries(j, 1) = graph.entries(j - 1, 1); - } - graph.entries(j, 0) = elem; - graph.entries(j, 1) = local; - } - } - - //------------------------------------ - - KOKKOS_INLINE_FUNCTION - void gather_fill(const unsigned irow) const { - const unsigned node_elem_begin = graph.row_map(irow); - const unsigned node_elem_end = graph.row_map(irow + 1); - - // for each element that a node belongs to - - for (unsigned i = node_elem_begin; i < node_elem_end; i++) { - const unsigned elem_id = graph.entries(i, 0); - const unsigned row_index = graph.entries(i, 1); - - residual(irow) += elem_residual(elem_id, row_index); - - // for each node in a particular related element - // gather the contents of the element stiffness - // matrix that belong in irow - - for (unsigned j = 0; j < ElemNodeCount; ++j) { - const unsigned A_index = elem_graph(elem_id, row_index, j); - - jacobian.values(A_index) += elem_jacobian(elem_id, row_index, j); - } - } - } - - //------------------------------------ - - KOKKOS_INLINE_FUNCTION - void operator()(const unsigned iwork) const { - if (phase == FILL_NODE_COUNT) { - fill_node_count(iwork); - } else if (phase == FILL_GRAPH_ENTRIES) { - fill_graph_entries(iwork); - } else if (phase == SORT_GRAPH_ENTRIES) { - sort_graph_entries(iwork); - } else if (phase == GATHER_FILL) { - gather_fill(iwork); - } - } - - //------------------------------------ - // parallel_scan: row offsets - - typedef unsigned value_type; - - KOKKOS_INLINE_FUNCTION - void operator()(const unsigned irow, unsigned& update, - const bool final) const { - // exclusive scan - if (final) { - row_map(irow) = update; - } - - update += row_count(irow); - - if (final) { - if (irow + 1 == row_count.extent(0)) { - row_map(irow + 1) = update; - row_total() = update; - } - } - } - - KOKKOS_INLINE_FUNCTION - void init(unsigned& update) const { update = 0; } - - KOKKOS_INLINE_FUNCTION - void join(unsigned& update, const unsigned& input) const { update += input; } -}; - -} /* namespace FENL */ -} /* namespace Example */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { -namespace FENL { - -template -class ElementComputation; - -template -class ElementComputation< - Kokkos::Example::BoxElemFixture, - KokkosSparse::CrsMatrix > { - public: - typedef Kokkos::Example::BoxElemFixture - mesh_type; - typedef Kokkos::Example::HexElement_Data - element_data_type; - - typedef KokkosSparse::CrsMatrix - sparse_matrix_type; - typedef typename sparse_matrix_type::StaticCrsGraphType sparse_graph_type; - - typedef DeviceType execution_space; - typedef ScalarType scalar_type; - - static const unsigned SpatialDim = element_data_type::spatial_dimension; - static const unsigned TensorDim = SpatialDim * SpatialDim; - static const unsigned ElemNodeCount = element_data_type::element_node_count; - static const unsigned FunctionCount = element_data_type::function_count; - static const unsigned IntegrationCount = element_data_type::integration_count; - - //------------------------------------ - - typedef typename mesh_type::node_coord_type node_coord_type; - typedef typename mesh_type::elem_node_type elem_node_type; - typedef Kokkos::View - elem_matrices_type; - typedef Kokkos::View - elem_vectors_type; - typedef Kokkos::View vector_type; - - typedef typename NodeNodeGraph::ElemGraphType elem_graph_type; - - //------------------------------------ - - //------------------------------------ - // Computational data: - - const element_data_type elem_data; - const elem_node_type elem_node_ids; - const node_coord_type node_coords; - const elem_graph_type elem_graph; - const elem_matrices_type elem_jacobians; - const elem_vectors_type elem_residuals; - const vector_type solution; - const vector_type residual; - const sparse_matrix_type jacobian; - const scalar_type coeff_K; - - ElementComputation(const ElementComputation& rhs) - : elem_data(), - elem_node_ids(rhs.elem_node_ids), - node_coords(rhs.node_coords), - elem_graph(rhs.elem_graph), - elem_jacobians(rhs.elem_jacobians), - elem_residuals(rhs.elem_residuals), - solution(rhs.solution), - residual(rhs.residual), - jacobian(rhs.jacobian), - coeff_K(rhs.coeff_K) {} - - // If the element->sparse_matrix graph is provided then perform atomic updates - // Otherwise fill per-element contributions for subequent gather-add into a - // residual and jacobian. - ElementComputation(const mesh_type& arg_mesh, const scalar_type arg_coeff_K, - const vector_type& arg_solution, - const elem_graph_type& arg_elem_graph, - const sparse_matrix_type& arg_jacobian, - const vector_type& arg_residual) - : elem_data(), - elem_node_ids(arg_mesh.elem_node()), - node_coords(arg_mesh.node_coord()), - elem_graph(arg_elem_graph), - elem_jacobians(), - elem_residuals(), - solution(arg_solution), - residual(arg_residual), - jacobian(arg_jacobian), - coeff_K(arg_coeff_K) {} - - ElementComputation(const mesh_type& arg_mesh, const scalar_type arg_coeff_K, - const vector_type& arg_solution) - : elem_data(), - elem_node_ids(arg_mesh.elem_node()), - node_coords(arg_mesh.node_coord()), - elem_graph(), - elem_jacobians("elem_jacobians", arg_mesh.elem_count()), - elem_residuals("elem_residuals", arg_mesh.elem_count()), - solution(arg_solution), - residual(), - jacobian(), - coeff_K(arg_coeff_K) {} - - //------------------------------------ - - void apply() const { parallel_for(elem_node_ids.extent(0), *this); } - - //------------------------------------ - - static const unsigned FLOPS_transform_gradients = - /* Jacobian */ FunctionCount * TensorDim * 2 + - /* Inverse jacobian */ TensorDim * 6 + 6 + - /* Gradient transform */ FunctionCount * 15; - - KOKKOS_INLINE_FUNCTION - float transform_gradients( - const float grad[][FunctionCount], // Gradient of bases master element - const double x[], const double y[], const double z[], float dpsidx[], - float dpsidy[], float dpsidz[]) const { - enum { - j11 = 0, - j12 = 1, - j13 = 2, - j21 = 3, - j22 = 4, - j23 = 5, - j31 = 6, - j32 = 7, - j33 = 8 - }; - - // Jacobian accumulation: - - double J[TensorDim] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; - - for (unsigned i = 0; i < FunctionCount; ++i) { - const double x1 = x[i]; - const double x2 = y[i]; - const double x3 = z[i]; - - const float g1 = grad[0][i]; - const float g2 = grad[1][i]; - const float g3 = grad[2][i]; - - J[j11] += g1 * x1; - J[j12] += g1 * x2; - J[j13] += g1 * x3; - - J[j21] += g2 * x1; - J[j22] += g2 * x2; - J[j23] += g2 * x3; - - J[j31] += g3 * x1; - J[j32] += g3 * x2; - J[j33] += g3 * x3; - } - - // Inverse jacobian: - - float invJ[TensorDim] = { - static_cast(J[j22] * J[j33] - J[j23] * J[j32]), - static_cast(J[j13] * J[j32] - J[j12] * J[j33]), - static_cast(J[j12] * J[j23] - J[j13] * J[j22]), - - static_cast(J[j23] * J[j31] - J[j21] * J[j33]), - static_cast(J[j11] * J[j33] - J[j13] * J[j31]), - static_cast(J[j13] * J[j21] - J[j11] * J[j23]), - - static_cast(J[j21] * J[j32] - J[j22] * J[j31]), - static_cast(J[j12] * J[j31] - J[j11] * J[j32]), - static_cast(J[j11] * J[j22] - J[j12] * J[j21])}; - - const float detJ = - J[j11] * invJ[j11] + J[j21] * invJ[j12] + J[j31] * invJ[j13]; - - const float detJinv = 1.0 / detJ; - - for (unsigned i = 0; i < TensorDim; ++i) { - invJ[i] *= detJinv; - } - - // Transform gradients: - - for (unsigned i = 0; i < FunctionCount; ++i) { - const float g0 = grad[0][i]; - const float g1 = grad[1][i]; - const float g2 = grad[2][i]; - - dpsidx[i] = g0 * invJ[j11] + g1 * invJ[j12] + g2 * invJ[j13]; - dpsidy[i] = g0 * invJ[j21] + g1 * invJ[j22] + g2 * invJ[j23]; - dpsidz[i] = g0 * invJ[j31] + g1 * invJ[j32] + g2 * invJ[j33]; - } - - return detJ; - } - - KOKKOS_INLINE_FUNCTION - void contributeResidualJacobian(const float coeff_k, - const double dof_values[], - const float dpsidx[], const float dpsidy[], - const float dpsidz[], const float detJ, - const float integ_weight, - const float bases_vals[], double elem_res[], - double elem_mat[][FunctionCount]) const { - double value_at_pt = 0; - double gradx_at_pt = 0; - double grady_at_pt = 0; - double gradz_at_pt = 0; - - for (unsigned m = 0; m < FunctionCount; m++) { - value_at_pt += dof_values[m] * bases_vals[m]; - gradx_at_pt += dof_values[m] * dpsidx[m]; - grady_at_pt += dof_values[m] * dpsidy[m]; - gradz_at_pt += dof_values[m] * dpsidz[m]; - } - - const scalar_type k_detJ_weight = coeff_k * detJ * integ_weight; - const double res_val = value_at_pt * value_at_pt * detJ * integ_weight; - const double mat_val = 2.0 * value_at_pt * detJ * integ_weight; - - // $$ R_i = \int_{\Omega} \nabla \phi_i \cdot (k \nabla T) + \phi_i T^2 d - // \Omega $$ - // $$ J_{i,j} = \frac{\partial R_i}{\partial T_j} = \int_{\Omega} k \nabla - // \phi_i \cdot \nabla \phi_j + 2 \phi_i \phi_j T d \Omega $$ - - for (unsigned m = 0; m < FunctionCount; ++m) { - double* const mat = elem_mat[m]; - const float bases_val_m = bases_vals[m]; - const float dpsidx_m = dpsidx[m]; - const float dpsidy_m = dpsidy[m]; - const float dpsidz_m = dpsidz[m]; - - elem_res[m] += - k_detJ_weight * (dpsidx_m * gradx_at_pt + dpsidy_m * grady_at_pt + - dpsidz_m * gradz_at_pt) + - res_val * bases_val_m; - - for (unsigned n = 0; n < FunctionCount; n++) { - mat[n] += k_detJ_weight * (dpsidx_m * dpsidx[n] + dpsidy_m * dpsidy[n] + - dpsidz_m * dpsidz[n]) + - mat_val * bases_val_m * bases_vals[n]; - } - } - } - - KOKKOS_INLINE_FUNCTION - void operator()(const unsigned ielem) const { - // Gather nodal coordinates and solution vector: - - double x[FunctionCount]; - double y[FunctionCount]; - double z[FunctionCount]; - double val[FunctionCount]; - unsigned node_index[ElemNodeCount]; - - for (unsigned i = 0; i < ElemNodeCount; ++i) { - const unsigned ni = elem_node_ids(ielem, i); - - node_index[i] = ni; - - x[i] = node_coords(ni, 0); - y[i] = node_coords(ni, 1); - z[i] = node_coords(ni, 2); - - val[i] = solution(ni); - } - - double elem_vec[FunctionCount]; - double elem_mat[FunctionCount][FunctionCount]; - - for (unsigned i = 0; i < FunctionCount; i++) { - elem_vec[i] = 0; - for (unsigned j = 0; j < FunctionCount; j++) { - elem_mat[i][j] = 0; - } - } - - for (unsigned i = 0; i < IntegrationCount; ++i) { - float dpsidx[FunctionCount]; - float dpsidy[FunctionCount]; - float dpsidz[FunctionCount]; - - const float detJ = transform_gradients(elem_data.gradients[i], x, y, z, - dpsidx, dpsidy, dpsidz); - - contributeResidualJacobian(coeff_K, val, dpsidx, dpsidy, dpsidz, detJ, - elem_data.weights[i], elem_data.values[i], - elem_vec, elem_mat); - } - -#if 0 - -if ( 1 == ielem ) { - printf("ElemResidual { %f %f %f %f %f %f %f %f }\n", - elem_vec[0], elem_vec[1], elem_vec[2], elem_vec[3], - elem_vec[4], elem_vec[5], elem_vec[6], elem_vec[7]); - - printf("ElemJacobian {\n"); - - for ( unsigned j = 0 ; j < FunctionCount ; ++j ) { - printf(" { %f %f %f %f %f %f %f %f }\n", - elem_mat[j][0], elem_mat[j][1], elem_mat[j][2], elem_mat[j][3], - elem_mat[j][4], elem_mat[j][5], elem_mat[j][6], elem_mat[j][7]); - } - printf("}\n"); -} - -#endif - - if (!residual.extent(0)) { - for (unsigned i = 0; i < FunctionCount; i++) { - elem_residuals(ielem, i) = elem_vec[i]; - for (unsigned j = 0; j < FunctionCount; j++) { - elem_jacobians(ielem, i, j) = elem_mat[i][j]; - } - } - } else { - for (unsigned i = 0; i < FunctionCount; i++) { - const unsigned row = node_index[i]; - if (row < residual.extent(0)) { - atomic_fetch_add(&residual(row), elem_vec[i]); - - for (unsigned j = 0; j < FunctionCount; j++) { - const unsigned entry = elem_graph(ielem, i, j); - if (entry != ~0u) { - atomic_fetch_add(&jacobian.values(entry), elem_mat[i][j]); - } - } - } - } - } - } -}; /* ElementComputation */ - -//---------------------------------------------------------------------------- - -template -class DirichletComputation; - -template -class DirichletComputation< - Kokkos::Example::BoxElemFixture, - KokkosSparse::CrsMatrix > { - public: - typedef Kokkos::Example::BoxElemFixture - mesh_type; - typedef typename mesh_type::node_coord_type node_coord_type; - typedef typename node_coord_type::value_type scalar_coord_type; - - typedef KokkosSparse::CrsMatrix - sparse_matrix_type; - typedef typename sparse_matrix_type::StaticCrsGraphType sparse_graph_type; - - typedef DeviceType execution_space; - typedef ScalarType scalar_type; - - //------------------------------------ - - typedef Kokkos::View vector_type; - - //------------------------------------ - // Computational data: - - const node_coord_type node_coords; - const vector_type solution; - const sparse_matrix_type jacobian; - const vector_type residual; - const scalar_type bc_lower_value; - const scalar_type bc_upper_value; - const scalar_coord_type bc_lower_limit; - const scalar_coord_type bc_upper_limit; - const unsigned bc_plane; - const unsigned node_count; - bool init; - - DirichletComputation(const mesh_type& arg_mesh, - const vector_type& arg_solution, - const sparse_matrix_type& arg_jacobian, - const vector_type& arg_residual, - const unsigned arg_bc_plane, - const scalar_type arg_bc_lower_value, - const scalar_type arg_bc_upper_value) - : node_coords(arg_mesh.node_coord()), - solution(arg_solution), - jacobian(arg_jacobian), - residual(arg_residual), - bc_lower_value(arg_bc_lower_value), - bc_upper_value(arg_bc_upper_value), - bc_lower_limit(std::numeric_limits::epsilon()), - bc_upper_limit(scalar_coord_type(1) - - std::numeric_limits::epsilon()), - bc_plane(arg_bc_plane), - node_count(arg_mesh.node_count_owned()), - init(false) { - parallel_for(node_count, *this); - init = true; - } - - void apply() const { parallel_for(node_count, *this); } - - //------------------------------------ - - KOKKOS_INLINE_FUNCTION - void operator()(const unsigned inode) const { - // Apply dirichlet boundary condition on the Solution and Residual vectors. - // To maintain the symmetry of the original global stiffness matrix, - // zero out the columns that correspond to boundary conditions, and - // update the residual vector accordingly - - const unsigned iBeg = jacobian.graph.row_map[inode]; - const unsigned iEnd = jacobian.graph.row_map[inode + 1]; - - const scalar_coord_type c = node_coords(inode, bc_plane); - const bool bc_lower = c <= bc_lower_limit; - const bool bc_upper = bc_upper_limit <= c; - - if (!init) { - solution(inode) = - bc_lower ? bc_lower_value : (bc_upper ? bc_upper_value : 0); - } else { - if (bc_lower || bc_upper) { - residual(inode) = 0; - - // zero each value on the row, and leave a one - // on the diagonal - - for (unsigned i = iBeg; i < iEnd; ++i) { - jacobian.values(i) = - int(inode) == int(jacobian.graph.entries(i)) ? 1 : 0; - } - } else { - // Find any columns that are boundary conditions. - // Clear them and adjust the residual vector - - for (unsigned i = iBeg; i < iEnd; ++i) { - const unsigned cnode = jacobian.graph.entries(i); - const scalar_coord_type cc = node_coords(cnode, bc_plane); - - if ((cc <= bc_lower_limit) || (bc_upper_limit <= cc)) { - jacobian.values(i) = 0; - } - } - } - } - } -}; - -} /* namespace FENL */ -} /* namespace Example */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- - -/* A Cuda-specific specialization for the element computation functor. */ -#if defined(__CUDACC__) -// #include -#endif - -//---------------------------------------------------------------------------- - -#endif /* #ifndef KOKKOS_EXAMPLE_FENLFUNCTORS_HPP */ diff --git a/example/fenl/fenl_impl.hpp b/example/fenl/fenl_impl.hpp deleted file mode 100644 index ea032f1ed1..0000000000 --- a/example/fenl/fenl_impl.hpp +++ /dev/null @@ -1,568 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER - -#ifndef KOKKOS_EXAMPLE_FENL_IMPL_HPP -#define KOKKOS_EXAMPLE_FENL_IMPL_HPP - -#include - -// Kokkos libraries' headers: - -#include -#include -#include -#include -#include - -// Examples headers: - -#include -#include -#include - -#include -#include - -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { -namespace FENL { - -inline -double maximum( MPI_Comm comm , double local ) -{ - double global = local ; -#if defined( KOKKOS_ENABLE_MPI ) - MPI_Allreduce( & local , & global , 1 , MPI_DOUBLE , MPI_MAX , comm ); -#endif - return global ; -} - -} /* namespace FENL */ -} /* namespace Example */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { -namespace FENL { - -class ManufacturedSolution { -public: - - // Manufactured solution for one dimensional nonlinear PDE - // - // -K T_zz + T^2 = 0 ; T(zmin) = T_zmin ; T(zmax) = T_zmax - // - // Has an analytic solution of the form: - // - // T(z) = ( a ( z - zmin ) + b )^(-2) where K = 1 / ( 6 a^2 ) - // - // Given T_0 and T_L compute K for this analytic solution. - // - // Two analytic solutions: - // - // Solution with singularity: - // , a( ( 1.0 / sqrt(T_zmax) + 1.0 / sqrt(T_zmin) ) / ( zmax - zmin ) ) - // , b( -1.0 / sqrt(T_zmin) ) - // - // Solution without singularity: - // , a( ( 1.0 / sqrt(T_zmax) - 1.0 / sqrt(T_zmin) ) / ( zmax - zmin ) ) - // , b( 1.0 / sqrt(T_zmin) ) - - const double zmin ; - const double zmax ; - const double T_zmin ; - const double T_zmax ; - const double a ; - const double b ; - const double K ; - - ManufacturedSolution( const double arg_zmin , - const double arg_zmax , - const double arg_T_zmin , - const double arg_T_zmax ) - : zmin( arg_zmin ) - , zmax( arg_zmax ) - , T_zmin( arg_T_zmin ) - , T_zmax( arg_T_zmax ) - , a( ( 1.0 / sqrt(T_zmax) - 1.0 / sqrt(T_zmin) ) / ( zmax - zmin ) ) - , b( 1.0 / sqrt(T_zmin) ) - , K( 1.0 / ( 6.0 * a * a ) ) - {} - - double operator()( const double z ) const - { - const double tmp = a * ( z - zmin ) + b ; - return 1.0 / ( tmp * tmp ); - } -}; - -} /* namespace FENL */ -} /* namespace Example */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Example { -namespace FENL { - -template < class Device , BoxElemPart::ElemOrder ElemOrder > -Perf fenl( - MPI_Comm comm , - const int use_print , - const int use_trials , - const int use_atomic , - const int use_elems[] ) -{ - typedef Kokkos::Example::BoxElemFixture< Device , ElemOrder > FixtureType ; - - typedef KokkosSparse::CrsMatrix< double , unsigned , Device , void , unsigned > - SparseMatrixType ; - - typedef typename SparseMatrixType::StaticCrsGraphType - SparseGraphType ; - - typedef Kokkos::Example::FENL::NodeNodeGraph< typename FixtureType::elem_node_type , SparseGraphType , FixtureType::ElemNode > - NodeNodeGraphType ; - - typedef Kokkos::Example::FENL::ElementComputation< FixtureType , SparseMatrixType > - ElementComputationType ; - - typedef Kokkos::Example::FENL::DirichletComputation< FixtureType , SparseMatrixType > - DirichletComputationType ; - - typedef NodeElemGatherFill< ElementComputationType > - NodeElemGatherFillType ; - - typedef typename ElementComputationType::vector_type VectorType ; - - typedef Kokkos::Example::VectorImport< - typename FixtureType::comm_list_type , - typename FixtureType::send_nodeid_type , - VectorType > ImportType ; - - //------------------------------------ - - const unsigned newton_iteration_limit = 10 ; - const double newton_iteration_tolerance = 1e-7 ; - const unsigned cg_iteration_limit = 200 ; - const double cg_iteration_tolerance = 1e-7 ; - - //------------------------------------ - - const int print_flag = use_print && std::is_same< Kokkos::HostSpace , typename Device::memory_space >::value ; - - int comm_rank ; - int comm_size ; - - MPI_Comm_rank( comm , & comm_rank ); - MPI_Comm_size( comm , & comm_size ); - - // Decompose by node to avoid mpi-communication for assembly - - const float bubble_x = 1.0 ; - const float bubble_y = 1.0 ; - const float bubble_z = 1.0 ; - - const FixtureType fixture( BoxElemPart::DecomposeNode , comm_size , comm_rank , - use_elems[0] , use_elems[1] , use_elems[2] , - bubble_x , bubble_y , bubble_z ); - - - { - int global_error = ! fixture.ok(); - -#if defined( KOKKOS_ENABLE_MPI ) - int local_error = global_error ; - global_error = 0 ; - MPI_Allreduce( & local_error , & global_error , 1 , MPI_INT , MPI_SUM , comm ); -#endif - - if ( global_error ) { - throw std::runtime_error(std::string("Error generating finite element fixture")); - } - } - - //------------------------------------ - - const ImportType comm_nodal_import( - comm , - fixture.recv_node() , - fixture.send_node() , - fixture.send_nodeid() , - fixture.node_count_owned() , - fixture.node_count() - fixture.node_count_owned() ); - - //------------------------------------ - - const double bc_lower_value = 1 ; - const double bc_upper_value = 2 ; - - const Kokkos::Example::FENL::ManufacturedSolution - manufactured_solution( 0 , 1 , bc_lower_value , bc_upper_value ); - - //------------------------------------ - - for ( int k = 0 ; k < comm_size && use_print ; ++k ) { - if ( k == comm_rank ) { - typename FixtureType::node_grid_type::HostMirror - h_node_grid = Kokkos::create_mirror_view( fixture.node_grid() ); - - typename FixtureType::node_coord_type::HostMirror - h_node_coord = Kokkos::create_mirror_view( fixture.node_coord() ); - - typename FixtureType::elem_node_type::HostMirror - h_elem_node = Kokkos::create_mirror_view( fixture.elem_node() ); - - Kokkos::deep_copy( h_node_grid , fixture.node_grid() ); - Kokkos::deep_copy( h_node_coord , fixture.node_coord() ); - Kokkos::deep_copy( h_elem_node , fixture.elem_node() ); - - std::cout << "MPI[" << comm_rank << "]" << std::endl ; - std::cout << "Node grid {" ; - for ( unsigned inode = 0 ; inode < fixture.node_count() ; ++inode ) { - std::cout << " (" << h_node_grid(inode,0) - << "," << h_node_grid(inode,1) - << "," << h_node_grid(inode,2) - << ")" ; - } - std::cout << " }" << std::endl ; - - std::cout << "Node coord {" ; - for ( unsigned inode = 0 ; inode < fixture.node_count() ; ++inode ) { - std::cout << " (" << h_node_coord(inode,0) - << "," << h_node_coord(inode,1) - << "," << h_node_coord(inode,2) - << ")" ; - } - std::cout << " }" << std::endl ; - - std::cout << "Manufactured solution" - << " a[" << manufactured_solution.a << "]" - << " b[" << manufactured_solution.b << "]" - << " K[" << manufactured_solution.K << "]" - << " {" ; - for ( unsigned inode = 0 ; inode < fixture.node_count() ; ++inode ) { - std::cout << " " << manufactured_solution( h_node_coord( inode , 2 ) ); - } - std::cout << " }" << std::endl ; - - std::cout << "ElemNode {" << std::endl ; - for ( unsigned ielem = 0 ; ielem < fixture.elem_count() ; ++ielem ) { - std::cout << " elem[" << ielem << "]{" ; - for ( unsigned inode = 0 ; inode < FixtureType::ElemNode ; ++inode ) { - std::cout << " " << h_elem_node(ielem,inode); - } - std::cout << " }{" ; - for ( unsigned inode = 0 ; inode < FixtureType::ElemNode ; ++inode ) { - std::cout << " (" << h_node_grid(h_elem_node(ielem,inode),0) - << "," << h_node_grid(h_elem_node(ielem,inode),1) - << "," << h_node_grid(h_elem_node(ielem,inode),2) - << ")" ; - } - std::cout << " }" << std::endl ; - } - std::cout << "}" << std::endl ; - } - std::cout.flush(); - MPI_Barrier( comm ); - } - - //------------------------------------ - - Kokkos::Timer wall_clock ; - - Perf perf_stats = Perf() ; - - for ( int itrial = 0 ; itrial < use_trials ; ++itrial ) { - - Perf perf = Perf() ; - - perf.global_elem_count = fixture.elem_count_global(); - perf.global_node_count = fixture.node_count_global(); - - //---------------------------------- - // Create the sparse matrix graph and element-to-graph map - // from the element->to->node identifier array. - // The graph only has rows for the owned nodes. - - typename NodeNodeGraphType::Times graph_times; - - const NodeNodeGraphType - mesh_to_graph( fixture.elem_node() , fixture.node_count_owned(), graph_times ); - - perf.map_ratio = maximum(comm, graph_times.ratio); - perf.fill_node_set = maximum(comm, graph_times.fill_node_set); - perf.scan_node_count = maximum(comm, graph_times.scan_node_count); - perf.fill_graph_entries = maximum(comm, graph_times.fill_graph_entries); - perf.sort_graph_entries = maximum(comm, graph_times.sort_graph_entries); - perf.fill_element_graph = maximum(comm, graph_times.fill_element_graph); - - wall_clock.reset(); - // Create the sparse matrix from the graph: - - SparseMatrixType jacobian( "jacobian" , mesh_to_graph.graph ); - - Device().fence(); - - perf.create_sparse_matrix = maximum( comm , wall_clock.seconds() ); - - //---------------------------------- - - for ( int k = 0 ; k < comm_size && print_flag ; ++k ) { - if ( k == comm_rank ) { - const unsigned nrow = jacobian.numRows(); - std::cout << "MPI[" << comm_rank << "]" << std::endl ; - std::cout << "JacobianGraph[ " - << jacobian.numRows() << " x " << jacobian.numCols() - << " ] {" << std::endl ; - for ( unsigned irow = 0 ; irow < nrow ; ++irow ) { - std::cout << " row[" << irow << "]{" ; - const unsigned entry_end = jacobian.graph.row_map(irow+1); - for ( unsigned entry = jacobian.graph.row_map(irow) ; entry < entry_end ; ++entry ) { - std::cout << " " << jacobian.graph.entries(entry); - } - std::cout << " }" << std::endl ; - } - std::cout << "}" << std::endl ; - - std::cout << "ElemGraph {" << std::endl ; - for ( unsigned ielem = 0 ; ielem < mesh_to_graph.elem_graph.extent(0) ; ++ielem ) { - std::cout << " elem[" << ielem << "]{" ; - for ( unsigned irow = 0 ; irow < mesh_to_graph.elem_graph.extent(1) ; ++irow ) { - std::cout << " {" ; - for ( unsigned icol = 0 ; icol < mesh_to_graph.elem_graph.extent(2) ; ++icol ) { - std::cout << " " << mesh_to_graph.elem_graph(ielem,irow,icol); - } - std::cout << " }" ; - } - std::cout << " }" << std::endl ; - } - std::cout << "}" << std::endl ; - } - std::cout.flush(); - MPI_Barrier( comm ); - } - - //---------------------------------- - - // Allocate solution vector for each node in the mesh and residual vector for each owned node - const VectorType nodal_solution( "nodal_solution" , fixture.node_count() ); - const VectorType nodal_residual( "nodal_residual" , fixture.node_count_owned() ); - const VectorType nodal_delta( "nodal_delta" , fixture.node_count_owned() ); - - // Create element computation functor - const ElementComputationType elemcomp( - use_atomic ? ElementComputationType( fixture , manufactured_solution.K , nodal_solution , - mesh_to_graph.elem_graph , jacobian , nodal_residual ) - : ElementComputationType( fixture , manufactured_solution.K , nodal_solution ) ); - - const NodeElemGatherFillType gatherfill( - use_atomic ? NodeElemGatherFillType() - : NodeElemGatherFillType( fixture.elem_node() , - mesh_to_graph.elem_graph , - nodal_residual , - jacobian , - elemcomp.elem_residuals , - elemcomp.elem_jacobians ) ); - - // Create boundary condition functor - const DirichletComputationType dirichlet( - fixture , nodal_solution , jacobian , nodal_residual , - 2 /* apply at 'z' ends */ , - manufactured_solution.T_zmin , - manufactured_solution.T_zmax ); - - //---------------------------------- - // Nonlinear Newton iteration: - - double residual_norm_init = 0 ; - - for ( perf.newton_iter_count = 0 ; - perf.newton_iter_count < newton_iteration_limit ; - ++perf.newton_iter_count ) { - - //-------------------------------- - - comm_nodal_import( nodal_solution ); - - //-------------------------------- - // Element contributions to residual and jacobian - - wall_clock.reset(); - - Kokkos::deep_copy( nodal_residual , double(0) ); - Kokkos::deep_copy( jacobian.values , double(0) ); - - elemcomp.apply(); - - if ( ! use_atomic ) { - gatherfill.apply(); - } - - Device().fence(); - perf.fill_time = maximum( comm , wall_clock.seconds() ); - - //-------------------------------- - // Apply boundary conditions - - wall_clock.reset(); - - dirichlet.apply(); - - Device().fence(); - perf.bc_time = maximum( comm , wall_clock.seconds() ); - - //-------------------------------- - // Evaluate convergence - - const double residual_norm = - std::sqrt( - Kokkos::Example::all_reduce( - KokkosBlas::dot( nodal_residual, nodal_residual ) , comm ) ); - - perf.newton_residual = residual_norm ; - - if ( 0 == perf.newton_iter_count ) { residual_norm_init = residual_norm ; } - - if ( residual_norm < residual_norm_init * newton_iteration_tolerance ) { break ; } - - //-------------------------------- - // Solve for nonlinear update - - CGSolve< ImportType , SparseMatrixType , VectorType > - cgsolve( comm_nodal_import , jacobian, nodal_residual, nodal_delta , - cg_iteration_limit , cg_iteration_tolerance ); - - // Update solution vector - - KokkosBlas::axpby( -1.0 , nodal_delta , 1.0 , nodal_solution ); - - perf.cg_iter_count += cgsolve.iteration ; - perf.matvec_time += cgsolve.matvec_time ; - perf.cg_time += cgsolve.iter_time ; - - //-------------------------------- - - if ( print_flag ) { - const double delta_norm = - std::sqrt( - Kokkos::Example::all_reduce( - KokkosBlas::dot( nodal_delta, nodal_delta ) , comm ) ); - - if ( 0 == comm_rank ) { - std::cout << "Newton iteration[" << perf.newton_iter_count << "]" - << " residual[" << perf.newton_residual << "]" - << " update[" << delta_norm << "]" - << " cg_iteration[" << cgsolve.iteration << "]" - << " cg_residual[" << cgsolve.norm_res << "]" - << std::endl ; - } - - for ( int k = 0 ; k < comm_size ; ++k ) { - if ( k == comm_rank ) { - const unsigned nrow = jacobian.numRows(); - - std::cout << "MPI[" << comm_rank << "]" << std::endl ; - std::cout << "Residual {" ; - for ( unsigned irow = 0 ; irow < nrow ; ++irow ) { - std::cout << " " << nodal_residual(irow); - } - std::cout << " }" << std::endl ; - - std::cout << "Delta {" ; - for ( unsigned irow = 0 ; irow < nrow ; ++irow ) { - std::cout << " " << nodal_delta(irow); - } - std::cout << " }" << std::endl ; - - std::cout << "Solution {" ; - for ( unsigned irow = 0 ; irow < nrow ; ++irow ) { - std::cout << " " << nodal_solution(irow); - } - std::cout << " }" << std::endl ; - - std::cout << "Jacobian[ " - << jacobian.numRows() << " x " << jacobian.numCols() - << " ] {" << std::endl ; - for ( unsigned irow = 0 ; irow < nrow ; ++irow ) { - std::cout << " {" ; - const unsigned entry_end = jacobian.graph.row_map(irow+1); - for ( unsigned entry = jacobian.graph.row_map(irow) ; entry < entry_end ; ++entry ) { - std::cout << " (" << jacobian.graph.entries(entry) - << "," << jacobian.values(entry) - << ")" ; - } - std::cout << " }" << std::endl ; - } - std::cout << "}" << std::endl ; - } - std::cout.flush(); - MPI_Barrier( comm ); - } - } - //-------------------------------- - } - - // Evaluate solution error - - if ( 0 == itrial ) { - const typename FixtureType::node_coord_type::HostMirror - h_node_coord = Kokkos::create_mirror_view( fixture.node_coord() ); - - const typename VectorType::HostMirror - h_nodal_solution = Kokkos::create_mirror_view( nodal_solution ); - - Kokkos::deep_copy( h_node_coord , fixture.node_coord() ); - Kokkos::deep_copy( h_nodal_solution , nodal_solution ); - - double error_max = 0 ; - for ( unsigned inode = 0 ; inode < fixture.node_count_owned() ; ++inode ) { - const double answer = manufactured_solution( h_node_coord( inode , 2 ) ); - const double error = ( h_nodal_solution(inode) - answer ) / answer ; - if ( error_max < fabs( error ) ) { error_max = fabs( error ); } - } - - perf.error_max = std::sqrt( Kokkos::Example::all_reduce_max( error_max , comm ) ); - - perf_stats = perf ; - } - else { - perf_stats.fill_node_set = std::min( perf_stats.fill_node_set , perf.fill_node_set ); - perf_stats.scan_node_count = std::min( perf_stats.scan_node_count , perf.scan_node_count ); - perf_stats.fill_graph_entries = std::min( perf_stats.fill_graph_entries , perf.fill_graph_entries ); - perf_stats.sort_graph_entries = std::min( perf_stats.sort_graph_entries , perf.sort_graph_entries ); - perf_stats.fill_element_graph = std::min( perf_stats.fill_element_graph , perf.fill_element_graph ); - perf_stats.create_sparse_matrix = std::min( perf_stats.create_sparse_matrix , perf.create_sparse_matrix ); - perf_stats.fill_time = std::min( perf_stats.fill_time , perf.fill_time ); - perf_stats.bc_time = std::min( perf_stats.bc_time , perf.bc_time ); - perf_stats.cg_time = std::min( perf_stats.cg_time , perf.cg_time ); - } - } - - return perf_stats ; -} - -} /* namespace FENL */ -} /* namespace Example */ -} /* namespace Kokkos */ - -#endif /* #ifndef KOKKOS_EXAMPLE_FENL_IMPL_HPP */ - diff --git a/example/fenl/main.cpp b/example/fenl/main.cpp deleted file mode 100644 index 74779d66fd..0000000000 --- a/example/fenl/main.cpp +++ /dev/null @@ -1,404 +0,0 @@ -//@HEADER -// ************************************************************************ -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. -// See https://kokkos.org/LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//@HEADER - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -// For vtune -#include -#include - -//---------------------------------------------------------------------------- - -enum { - CMD_USE_THREADS = 0, - CMD_USE_NUMA, - CMD_USE_CORE_PER_NUMA, - CMD_USE_CUDA, - CMD_USE_OPENMP, - CMD_USE_CUDA_DEV, - CMD_USE_FIXTURE_X, - CMD_USE_FIXTURE_Y, - CMD_USE_FIXTURE_Z, - CMD_USE_FIXTURE_BEGIN, - CMD_USE_FIXTURE_END, - CMD_USE_FIXTURE_QUADRATIC, - CMD_USE_ATOMIC, - CMD_USE_TRIALS, - CMD_VTUNE, - CMD_PRINT, - CMD_ECHO, - CMD_ERROR, - CMD_COUNT -}; - -void print_cmdline(std::ostream& s, const int cmd[]) { - if (cmd[CMD_USE_THREADS]) { - s << " Threads(" << cmd[CMD_USE_THREADS] << ") NUMA(" << cmd[CMD_USE_NUMA] - << ") CORE_PER_NUMA(" << cmd[CMD_USE_CORE_PER_NUMA] << ")"; - } - if (cmd[CMD_USE_OPENMP]) { - s << " OpenMP(" << cmd[CMD_USE_OPENMP] << ") NUMA(" << cmd[CMD_USE_NUMA] - << ") CORE_PER_NUMA(" << cmd[CMD_USE_CORE_PER_NUMA] << ")"; - } - if (cmd[CMD_USE_FIXTURE_X]) { - s << " Fixture(" << cmd[CMD_USE_FIXTURE_X] << "x" << cmd[CMD_USE_FIXTURE_Y] - << "x" << cmd[CMD_USE_FIXTURE_Z] << ")"; - } - if (cmd[CMD_USE_FIXTURE_BEGIN]) { - s << " Fixture( " << cmd[CMD_USE_FIXTURE_BEGIN] << " .. " - << cmd[CMD_USE_FIXTURE_END] << " )"; - } - if (cmd[CMD_USE_FIXTURE_QUADRATIC]) { - s << " Quadratic-Element"; - } - if (cmd[CMD_USE_CUDA]) { - s << " CUDA(" << cmd[CMD_USE_CUDA_DEV] << ")"; - } - if (cmd[CMD_USE_ATOMIC]) { - s << " ATOMIC"; - } - if (cmd[CMD_USE_TRIALS]) { - s << " TRIALS(" << cmd[CMD_USE_TRIALS] << ")"; - } - if (cmd[CMD_VTUNE]) { - s << " VTUNE"; - } - if (cmd[CMD_PRINT]) { - s << " PRINT"; - } - s << std::endl; -} - -void print_perf_value(std::ostream& s, const std::vector& widths, - const Kokkos::Example::FENL::Perf& perf) { - int i = 0; - s << std::setw(widths[i++]) << perf.global_elem_count << " ,"; - s << std::setw(widths[i++]) << perf.global_node_count << " ,"; - s << std::setw(widths[i++]) << perf.newton_iter_count << " ,"; - s << std::setw(widths[i++]) << perf.cg_iter_count << " ,"; - s << std::setw(widths[i++]) << perf.map_ratio << " ,"; - s << std::setw(widths[i++]) - << (perf.fill_node_set * 1000.0) / perf.global_node_count << " ,"; - s << std::setw(widths[i++]) - << (perf.scan_node_count * 1000.0) / perf.global_node_count << " ,"; - s << std::setw(widths[i++]) - << (perf.fill_graph_entries * 1000.0) / perf.global_node_count << " ,"; - s << std::setw(widths[i++]) - << (perf.sort_graph_entries * 1000.0) / perf.global_node_count << " ,"; - s << std::setw(widths[i++]) - << (perf.fill_element_graph * 1000.0) / perf.global_node_count << " ,"; - s << std::setw(widths[i++]) - << (perf.create_sparse_matrix * 1000.0) / perf.global_node_count << " ,"; - s << std::setw(widths[i++]) - << (perf.fill_time * 1000.0) / perf.global_node_count << " ,"; - s << std::setw(widths[i++]) - << (perf.bc_time * 1000.0) / perf.global_node_count << " ,"; - s << std::setw(widths[i++]) - << ((perf.matvec_time * 1000.0) / perf.cg_iter_count) / - perf.global_node_count - << " ,"; - s << std::setw(widths[i++]) - << ((perf.cg_time * 1000.0) / perf.cg_iter_count) / perf.global_node_count - << " ,"; - s << std::setw(widths[i]) << perf.error_max; - s << std::endl; -} - -template -void run(MPI_Comm comm, const int cmd[]) { - int comm_rank = 0; - int comm_size = 1; - -#if defined(KOKKOS_ENABLE_MPI) - MPI_Comm_rank(comm, &comm_rank); - MPI_Comm_size(comm, &comm_size); -#else - comm = 0; - (void)comm_size; -#endif - - if (0 == comm_rank) { - if (cmd[CMD_USE_THREADS]) { - std::cout << "THREADS , " << cmd[CMD_USE_THREADS]; - } else if (cmd[CMD_USE_OPENMP]) { - std::cout << "OPENMP , " << cmd[CMD_USE_OPENMP]; - } else if (cmd[CMD_USE_CUDA]) { - std::cout << "CUDA"; - } - - if (cmd[CMD_USE_FIXTURE_QUADRATIC]) { - std::cout << " , QUADRATIC-ELEMENT"; - } else { - std::cout << " , LINEAR-ELEMENT"; - } - - if (cmd[CMD_USE_ATOMIC]) { - std::cout << " , USING ATOMICS"; - } - } - - std::vector > headers; - - headers.push_back(std::make_pair("ELEMS", "count")); - headers.push_back(std::make_pair("NODES", "count")); - headers.push_back(std::make_pair("NEWTON", "iter")); - headers.push_back(std::make_pair("CG", "iter")); - headers.push_back(std::make_pair("MAP_RATIO", "ratio")); - headers.push_back(std::make_pair("SET_FILL/NODE", "millisec")); - headers.push_back(std::make_pair("SCAN/NODE", "millisec")); - headers.push_back(std::make_pair("GRAPH_FILL/NODE", "millisec")); - headers.push_back(std::make_pair("SORT/NODE", "millisec")); - headers.push_back(std::make_pair("ELEM_GRAPH_FILL/NODE", "millisec")); - headers.push_back(std::make_pair("MATRIX_CREATE/NODE", "millisec")); - headers.push_back(std::make_pair("MATRIX_FILL/NODE", "millisec")); - headers.push_back(std::make_pair("BOUNDARY/NODE", "millisec")); - headers.push_back(std::make_pair("MAT_VEC/ITER/ROW", "millisec")); - headers.push_back(std::make_pair("CG/ITER/ROW", "millisec")); - headers.push_back(std::make_pair("ERROR", "ratio")); - - // find print widths - size_t min_width = 10; - std::vector widths(headers.size()); - for (size_t i = 0, ie = headers.size(); i < ie; ++i) - widths[i] = std::max(min_width, headers[i].first.size() + 1); - - // print column headers - if (0 == comm_rank) { - std::cout << std::endl; - for (size_t i = 0; i < headers.size(); ++i) - std::cout << std::setw(widths[i]) << headers[i].first << " ,"; - std::cout << "\b\b " << std::endl; - for (size_t i = 0; i < headers.size(); ++i) - std::cout << std::setw(widths[i]) << headers[i].second << " ,"; - std::cout << "\b\b " << std::endl; - - std::cout << std::scientific; - std::cout.precision(3); - } - - if (cmd[CMD_USE_FIXTURE_BEGIN]) { - for (int i = cmd[CMD_USE_FIXTURE_BEGIN]; i < cmd[CMD_USE_FIXTURE_END] * 2; - i *= 2) { - int nelem[3]; - nelem[0] = std::max(1, (int)cbrt(((double)i) / 2.0)); - nelem[1] = 1 + nelem[0]; - nelem[2] = 2 * nelem[0]; - - const Kokkos::Example::FENL::Perf perf = - cmd[CMD_USE_FIXTURE_QUADRATIC] - ? Kokkos::Example::FENL::fenl< - Device, Kokkos::Example::BoxElemPart::ElemQuadratic>( - comm, cmd[CMD_PRINT], cmd[CMD_USE_TRIALS], - cmd[CMD_USE_ATOMIC], nelem) - : Kokkos::Example::FENL::fenl< - Device, Kokkos::Example::BoxElemPart::ElemLinear>( - comm, cmd[CMD_PRINT], cmd[CMD_USE_TRIALS], - cmd[CMD_USE_ATOMIC], nelem); - - if (0 == comm_rank) print_perf_value(std::cout, widths, perf); - } - } else { - int nelem[3] = {cmd[CMD_USE_FIXTURE_X], cmd[CMD_USE_FIXTURE_Y], - cmd[CMD_USE_FIXTURE_Z]}; - - const Kokkos::Example::FENL::Perf perf = - cmd[CMD_USE_FIXTURE_QUADRATIC] - ? Kokkos::Example::FENL::fenl< - Device, Kokkos::Example::BoxElemPart::ElemQuadratic>( - comm, cmd[CMD_PRINT], cmd[CMD_USE_TRIALS], - cmd[CMD_USE_ATOMIC], nelem) - : Kokkos::Example::FENL::fenl< - Device, Kokkos::Example::BoxElemPart::ElemLinear>( - comm, cmd[CMD_PRINT], cmd[CMD_USE_TRIALS], - cmd[CMD_USE_ATOMIC], nelem); - - if (0 == comm_rank) print_perf_value(std::cout, widths, perf); - } -} - -//---------------------------------------------------------------------------- - -int main(int argc, char** argv) { - int comm_rank = 0; - int comm_size = 1; - -#if defined(KOKKOS_ENABLE_MPI) - MPI_Init(&argc, &argv); - MPI_Comm comm = MPI_COMM_WORLD; - MPI_Comm_rank(comm, &comm_rank); - MPI_Comm_size(comm, &comm_size); -#else - MPI_Comm comm = 0; - (void)comm; - (void)comm_size; -#endif - - int cmdline[CMD_COUNT]; - - for (int i = 0; i < CMD_COUNT; ++i) cmdline[i] = 0; - - if (0 == comm_rank) { - for (int i = 1; i < argc; ++i) { - if (0 == Test::string_compare_no_case(argv[i], "threads")) { - cmdline[CMD_USE_THREADS] = atoi(argv[++i]); - } else if (0 == Test::string_compare_no_case(argv[i], "openmp")) { - cmdline[CMD_USE_OPENMP] = atoi(argv[++i]); - } else if (0 == Test::string_compare_no_case(argv[i], "cores")) { - sscanf(argv[++i], "%dx%d", cmdline + CMD_USE_NUMA, - cmdline + CMD_USE_CORE_PER_NUMA); - } else if (0 == Test::string_compare_no_case(argv[i], "cuda")) { - cmdline[CMD_USE_CUDA] = 1; - } else if (0 == Test::string_compare_no_case(argv[i], "cuda-dev")) { - cmdline[CMD_USE_CUDA] = 1; - cmdline[CMD_USE_CUDA_DEV] = atoi(argv[++i]); - } else if (0 == Test::string_compare_no_case(argv[i], "fixture")) { - sscanf(argv[++i], "%dx%dx%d", cmdline + CMD_USE_FIXTURE_X, - cmdline + CMD_USE_FIXTURE_Y, cmdline + CMD_USE_FIXTURE_Z); - } else if (0 == Test::string_compare_no_case(argv[i], "fixture-range")) { - sscanf(argv[++i], "%d..%d", cmdline + CMD_USE_FIXTURE_BEGIN, - cmdline + CMD_USE_FIXTURE_END); - } else if (0 == - Test::string_compare_no_case(argv[i], "fixture-quadratic")) { - cmdline[CMD_USE_FIXTURE_QUADRATIC] = 1; - } else if (0 == Test::string_compare_no_case(argv[i], "atomic")) { - cmdline[CMD_USE_ATOMIC] = 1; - } else if (0 == Test::string_compare_no_case(argv[i], "trials")) { - cmdline[CMD_USE_TRIALS] = atoi(argv[++i]); - } else if (0 == Test::string_compare_no_case(argv[i], "vtune")) { - cmdline[CMD_VTUNE] = 1; - } else if (0 == Test::string_compare_no_case(argv[i], "print")) { - cmdline[CMD_PRINT] = 1; - } else if (0 == Test::string_compare_no_case(argv[i], "echo")) { - cmdline[CMD_ECHO] = 1; - } else { - cmdline[CMD_ERROR] = 1; - - std::cerr << "Unrecognized command line argument #" << i << ": " - << argv[i] << std::endl; - } - } - - if (cmdline[CMD_ECHO] && 0 == comm_rank) { - print_cmdline(std::cout, cmdline); - } - } - -#if defined(KOKKOS_ENABLE_MPI) - MPI_Bcast(cmdline, CMD_COUNT, MPI_INT, 0, comm); -#endif - - if (cmdline[CMD_VTUNE]) { - std::stringstream cmd; - pid_t my_os_pid = getpid(); - const std::string vtune_loc = - "/usr/local/intel/vtune_amplifier_xe_2013/bin64/amplxe-cl"; - const std::string output_dir = "./vtune/vtune."; - const int p_rank = comm_rank; - cmd << vtune_loc << " -collect hotspots -result-dir " << output_dir - << p_rank << " -target-pid " << my_os_pid << " &"; - if (p_rank == 0) std::cout << cmd.str() << std::endl; - system(cmd.str().c_str()); - system("sleep 10"); - } - - if (!cmdline[CMD_ERROR] && !cmdline[CMD_ECHO]) { - if (!cmdline[CMD_USE_TRIALS]) { - cmdline[CMD_USE_TRIALS] = 1; - } - - if (!cmdline[CMD_USE_FIXTURE_X] && !cmdline[CMD_USE_FIXTURE_BEGIN]) { - cmdline[CMD_USE_FIXTURE_X] = 2; - cmdline[CMD_USE_FIXTURE_Y] = 2; - cmdline[CMD_USE_FIXTURE_Z] = 2; - } - -#if defined(KOKKOS_ENABLE_THREADS) - - if (cmdline[CMD_USE_THREADS]) { - if (cmdline[CMD_USE_NUMA] && cmdline[CMD_USE_CORE_PER_NUMA]) { - Kokkos::Threads::initialize(cmdline[CMD_USE_THREADS], - cmdline[CMD_USE_NUMA], - cmdline[CMD_USE_CORE_PER_NUMA]); - } else { - Kokkos::Threads::initialize(cmdline[CMD_USE_THREADS]); - } - - run(comm, - cmdline); - - Kokkos::Threads::finalize(); - } - -#endif - -#if defined(KOKKOS_ENABLE_OPENMP) - - if (cmdline[CMD_USE_OPENMP]) { - if (cmdline[CMD_USE_NUMA] && cmdline[CMD_USE_CORE_PER_NUMA]) { - Kokkos::OpenMP::initialize(cmdline[CMD_USE_OPENMP], - cmdline[CMD_USE_NUMA], - cmdline[CMD_USE_CORE_PER_NUMA]); - } else { - Kokkos::OpenMP::initialize(cmdline[CMD_USE_OPENMP]); - } - - run(comm, - cmdline); - - Kokkos::OpenMP::finalize(); - } - -#endif - -#if defined(KOKKOS_ENABLE_CUDA) - if (cmdline[CMD_USE_CUDA]) { - // Use the last device: - - Kokkos::HostSpace::execution_space::initialize(); - Kokkos::Cuda::initialize( - Kokkos::Cuda::SelectDevice(cmdline[CMD_USE_CUDA_DEV])); - - run(comm, - cmdline); - - Kokkos::Cuda::finalize(); - Kokkos::HostSpace::execution_space::finalize(); - } - -#endif - } - -#if defined(KOKKOS_ENABLE_MPI) - MPI_Finalize(); -#endif - - return cmdline[CMD_ERROR] ? -1 : 0; -} From 9f34e2f88824159e9786bef7ce7d81ba3453364c Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Tue, 31 Jan 2023 21:32:46 -0700 Subject: [PATCH 209/226] Merge pull request #1651 from masterleinad/fix_sycl_printf Replace printf in device code for SYCL (cherry picked from commit f0229f9021a4137bea754864cd5e21a17c93e039) --- common/src/KokkosKernels_SimpleUtils.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/KokkosKernels_SimpleUtils.hpp b/common/src/KokkosKernels_SimpleUtils.hpp index 63d1ff720e..baefbe8c35 100644 --- a/common/src/KokkosKernels_SimpleUtils.hpp +++ b/common/src/KokkosKernels_SimpleUtils.hpp @@ -292,7 +292,7 @@ struct IsRelativelyIdenticalFunctor { } if (val_diff > mag_type(eps)) { - printf( + KOKKOS_IMPL_DO_NOT_USE_PRINTF( "Values at index %d, %.6f + %.6fi and %.6f + %.6fi, differ too much " "(eps = %e)\n", (int)i, KAT::real(view1(i)), KAT::imag(view1(i)), KAT::real(view2(i)), From 33ae61ac15885c742019d3cfc717ddd1d50120c2 Mon Sep 17 00:00:00 2001 From: Luc Berger Date: Tue, 31 Jan 2023 15:55:29 -0700 Subject: [PATCH 210/226] Merge pull request #1660 from masterleinad/update_sycl Update nightly SYCL setup (cherry picked from commit 40474b7d926c6f3223481ac16cfb6a7ff69fd5bb) --- scripts/docker/Dockerfile.sycl | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/scripts/docker/Dockerfile.sycl b/scripts/docker/Dockerfile.sycl index 3d94a1a45e..bda1197fc6 100644 --- a/scripts/docker/Dockerfile.sycl +++ b/scripts/docker/Dockerfile.sycl @@ -1,4 +1,4 @@ -ARG BASE=nvidia/cuda:10.2-devel +ARG BASE=nvidia/cuda:11.7.0-devel-ubuntu22.04 FROM $BASE RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub @@ -22,7 +22,7 @@ RUN KEYDUMP_URL=https://cloud.cees.ornl.gov/download && \ gpg --verify ${KEYDUMP_FILE}.sig ${KEYDUMP_FILE} && \ rm ${KEYDUMP_FILE}* -ARG CMAKE_VERSION=3.18.5 +ARG CMAKE_VERSION=3.23.2 ENV CMAKE_DIR=/opt/cmake RUN CMAKE_URL=https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION} && \ CMAKE_SCRIPT=cmake-${CMAKE_VERSION}-Linux-x86_64.sh && \ @@ -31,25 +31,21 @@ RUN CMAKE_URL=https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSIO wget --quiet ${CMAKE_URL}/${CMAKE_SHA256}.asc && \ wget --quiet ${CMAKE_URL}/${CMAKE_SCRIPT} && \ gpg --verify ${CMAKE_SHA256}.asc ${CMAKE_SHA256} && \ - grep ${CMAKE_SCRIPT} ${CMAKE_SHA256} | sha256sum --check && \ + grep -i ${CMAKE_SCRIPT} ${CMAKE_SHA256} | sed -e s/linux/Linux/ | sha256sum --check && \ mkdir -p ${CMAKE_DIR} && \ sh ${CMAKE_SCRIPT} --skip-license --prefix=${CMAKE_DIR} && \ rm cmake* ENV PATH=${CMAKE_DIR}/bin:$PATH -ENV SYCL_DIR=/opt/sycl -RUN SYCL_VERSION=20220112 && \ - SYCL_URL=https://github.com/intel/llvm/archive/sycl-nightly && \ - SYCL_ARCHIVE=${SYCL_VERSION}.tar.gz && \ - SCRATCH_DIR=/scratch && mkdir -p ${SCRATCH_DIR} && cd ${SCRATCH_DIR} && \ - wget --quiet ${SYCL_URL}/${SYCL_ARCHIVE} && \ - mkdir llvm && \ - tar -xf ${SYCL_ARCHIVE} -C llvm --strip-components=1 && \ - cd llvm && \ - python3 buildbot/configure.py --cuda && \ - python3 buildbot/compile.py && \ - mkdir -p ${SYCL_DIR} && \ - mv ${SCRATCH_DIR}/llvm/build/install/* ${SYCL_DIR} && \ - echo "${SYCL_DIR}/lib" > /etc/ld.so.conf.d/sycl.conf && ldconfig && \ - rm -rf ${SCRATCH_DIR} -ENV PATH=${SYCL_DIR}/bin:$PATH +RUN wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB && \ + apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB && \ + echo "deb https://apt.repos.intel.com/oneapi all main" | tee /etc/apt/sources.list.d/oneAPI.list && \ + apt-get update -o Dir::Etc::sourcelist="sources.list.d/oneAPI.list" -o APT::Get::List-Cleanup="0" && \ + apt-get install -y intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2023.0.0 && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +RUN wget https://cloud.cees.ornl.gov/download/oneapi-for-nvidia-gpus-2023.0.0-linux.sh && \ + chmod +x oneapi-for-nvidia-gpus-2023.0.0-linux.sh && \ + ./oneapi-for-nvidia-gpus-2023.0.0-linux.sh -y && \ + rm oneapi-for-nvidia-gpus-2023.0.0-linux.sh From 9f37dac2544be1bc9ac9c1ad771623d4828668e2 Mon Sep 17 00:00:00 2001 From: Luc Berger Date: Tue, 31 Jan 2023 15:38:28 -0700 Subject: [PATCH 211/226] Merge pull request #1659 from kliegeois/fix_documentation_typo Fix an error in Krylov Handle documentation (cherry picked from commit 03180cdf1f9f096bb7929852b52fdfd289302d4e) --- batched/sparse/src/KokkosBatched_Krylov_Handle.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp b/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp index aff0219175..2ea489d307 100644 --- a/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp +++ b/batched/sparse/src/KokkosBatched_Krylov_Handle.hpp @@ -114,7 +114,7 @@ class KrylovHandle { Kokkos::deep_copy(first_index, first_index_host); Kokkos::deep_copy(last_index, last_index_host); - // Default Classical GS + // Default modified GS ortho_strategy = 1; scratch_pad_level = 0; compute_last_residual = true; From 697c4169f73ec9b316a30d7e0060013c86672d59 Mon Sep 17 00:00:00 2001 From: Luc Berger Date: Thu, 2 Feb 2023 15:03:40 -0700 Subject: [PATCH 212/226] Merge pull request #1670 from masterleinad/update_sycl SYCL CI: Specify the full path to the compiler (cherry picked from commit 6d6ed244e98f811f86f0948df0a158d50719bf60) --- .jenkins/nightly.groovy | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.jenkins/nightly.groovy b/.jenkins/nightly.groovy index 6092e75fba..a12aaf42de 100644 --- a/.jenkins/nightly.groovy +++ b/.jenkins/nightly.groovy @@ -18,12 +18,13 @@ pipeline { } } steps { - sh '''rm -rf kokkos && + sh '''. /opt/intel/oneapi/setvars.sh --include-intel-llvm && \ + rm -rf kokkos && git clone -b develop https://github.com/kokkos/kokkos.git && cd kokkos && \ mkdir build && cd build && \ cmake \ -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_CXX_COMPILER=/opt/intel/oneapi/compiler/2023.0.0/linux/bin-llvm/clang++ \ -DKokkos_ARCH_VOLTA70=ON \ -DKokkos_ENABLE_DEPRECATED_CODE_3=OFF \ -DKokkos_ENABLE_SYCL=ON \ @@ -32,10 +33,11 @@ pipeline { .. && \ make -j8 && make install && \ cd ../.. && rm -rf kokkos''' - sh '''rm -rf build && mkdir -p build && cd build && \ + sh '''. /opt/intel/oneapi/setvars.sh --include-intel-llvm && \ + rm -rf build && mkdir -p build && cd build && \ cmake \ -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_CXX_COMPILER=/opt/intel/oneapi/compiler/2023.0.0/linux/bin-llvm/clang++ \ -DKokkosKernels_ENABLE_TESTS=ON \ -DKokkosKernels_ENABLE_EXAMPLES=ON \ -DKokkosKernels_INST_DOUBLE=ON \ From 5dbab6a5ab87fb02b8c156546b34b6e0e517c273 Mon Sep 17 00:00:00 2001 From: Luc Berger Date: Wed, 8 Feb 2023 09:09:14 -0700 Subject: [PATCH 213/226] Merge pull request #1677 from masterleinad/update_sycl Update SYCL docker file to include oneDPL (cherry picked from commit 61ba79b8a37adf5d0c17d5aa939984110abca552) --- scripts/docker/Dockerfile.sycl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/docker/Dockerfile.sycl b/scripts/docker/Dockerfile.sycl index bda1197fc6..4e185f4c1b 100644 --- a/scripts/docker/Dockerfile.sycl +++ b/scripts/docker/Dockerfile.sycl @@ -10,6 +10,7 @@ RUN apt-get update && apt-get install -y \ ninja-build \ python3 \ git \ + libomp-dev \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* @@ -49,3 +50,8 @@ RUN wget https://cloud.cees.ornl.gov/download/oneapi-for-nvidia-gpus-2023.0.0-li chmod +x oneapi-for-nvidia-gpus-2023.0.0-linux.sh && \ ./oneapi-for-nvidia-gpus-2023.0.0-linux.sh -y && \ rm oneapi-for-nvidia-gpus-2023.0.0-linux.sh + +RUN wget https://registrationcenter-download.intel.com/akdlm/irc_nas/19133/l_oneDPL_p_2022.0.0.25335.sh &&\ + chmod +x ./l_oneDPL_p_2022.0.0.25335.sh && \ + ./l_oneDPL_p_2022.0.0.25335.sh -a -s --eula accept && \ + rm l_oneDPL_p_2022.0.0.25335.sh From 79f6f38bc2ff4cb806a9c74f57bbcecb9a4763eb Mon Sep 17 00:00:00 2001 From: Luc Berger Date: Tue, 14 Feb 2023 14:41:58 -0700 Subject: [PATCH 214/226] Merge pull request #1683 from vqd8a/spiluk-nondeterministic-numeric Fix the nondeterministic issue in SPILUK numeric (cherry picked from commit 4a29cafbe7154153ac397ca2f78f10f152b3bf06) --- .../impl/KokkosSparse_spiluk_numeric_impl.hpp | 43 ++++++++----------- .../KokkosSparse_spiluk_symbolic_impl.hpp | 11 +++-- sparse/src/KokkosSparse_spiluk_handle.hpp | 7 +++ 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/sparse/impl/KokkosSparse_spiluk_numeric_impl.hpp b/sparse/impl/KokkosSparse_spiluk_numeric_impl.hpp index aebfa76bb5..9436b67029 100644 --- a/sparse/impl/KokkosSparse_spiluk_numeric_impl.hpp +++ b/sparse/impl/KokkosSparse_spiluk_numeric_impl.hpp @@ -280,15 +280,19 @@ struct ILUKLvlSchedTP1NumericFunctor { #endif { nnz_lno_t prev_row = L_entries(k); + + scalar_t fact = scalar_t(0.0); + Kokkos::single( + Kokkos::PerTeam(team), + [&](scalar_t &tmp_fact) { #ifdef KEEP_DIAG - scalar_t fact = L_values(k) / U_values(U_row_map(prev_row)); + tmp_fact = L_values(k) / U_values(U_row_map(prev_row)); #else - scalar_t fact = L_values(k) * U_values(U_row_map(prev_row)); + tmp_fact = L_values(k) * U_values(U_row_map(prev_row)); #endif - // if (my_thread == 0) L_values(k) = fact; - Kokkos::single(Kokkos::PerTeam(team), [&]() { L_values(k) = fact; }); - - team.team_barrier(); + L_values(k) = tmp_fact; + }, + fact); Kokkos::parallel_for( Kokkos::TeamThreadRange(team, U_row_map(prev_row) + 1, @@ -299,9 +303,9 @@ struct ILUKLvlSchedTP1NumericFunctor { auto lxu = -U_values(kk) * fact; if (ipos != -1) { if (col < rowid) - Kokkos::atomic_add(&L_values(ipos), lxu); + L_values(ipos) += lxu; else - Kokkos::atomic_add(&U_values(ipos), lxu); + U_values(ipos) += lxu; } }); // end for kk @@ -371,23 +375,14 @@ void iluk_numeric(IlukHandle &thandle, const ARowMapType &A_row_map, using LevelHostViewType = typename IlukHandle::nnz_lno_view_host_t; size_type nlevels = thandle.get_num_levels(); + int team_size = thandle.get_team_size(); - // Keep these as host View, create device version and copy back to host - HandleDeviceEntriesType level_ptr = thandle.get_level_ptr(); + LevelHostViewType level_ptr_h = thandle.get_host_level_ptr(); HandleDeviceEntriesType level_idx = thandle.get_level_idx(); - // Make level_ptr_h a separate allocation, since it will be accessed on host - // between kernel launches. If a mirror were used and level_ptr is in UVM - // space, a fence would be required before each access since UVM views can - // share pages. - LevelHostViewType level_ptr_h, level_nchunks_h, level_nrowsperchunk_h; + LevelHostViewType level_nchunks_h, level_nrowsperchunk_h; WorkViewType iw; - level_ptr_h = LevelHostViewType( - Kokkos::view_alloc(Kokkos::WithoutInitializing, "Host level pointers"), - level_ptr.extent(0)); - Kokkos::deep_copy(level_ptr_h, level_ptr); - //{ if (thandle.get_algorithm() == KokkosSparse::Experimental::SPILUKAlgorithm::SEQLVLSCHD_TP1) { @@ -417,7 +412,6 @@ void iluk_numeric(IlukHandle &thandle, const ARowMapType &A_row_map, } else if (thandle.get_algorithm() == KokkosSparse::Experimental::SPILUKAlgorithm::SEQLVLSCHD_TP1) { using policy_type = Kokkos::TeamPolicy; - int team_size = thandle.get_team_size(); nnz_lno_t lvl_rowid_start = 0; nnz_lno_t lvl_nrows_chunk; @@ -437,11 +431,10 @@ void iluk_numeric(IlukHandle &thandle, const ARowMapType &A_row_map, lev_start + lvl_rowid_start); if (team_size == -1) - Kokkos::parallel_for("parfor_l_team", - policy_type(lvl_nrows_chunk, Kokkos::AUTO), - tstf); + Kokkos::parallel_for( + "parfor_tp1", policy_type(lvl_nrows_chunk, Kokkos::AUTO), tstf); else - Kokkos::parallel_for("parfor_l_team", + Kokkos::parallel_for("parfor_tp1", policy_type(lvl_nrows_chunk, team_size), tstf); Kokkos::fence(); lvl_rowid_start += lvl_nrows_chunk; diff --git a/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp b/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp index 5926aa872e..616e87f154 100644 --- a/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp +++ b/sparse/impl/KokkosSparse_spiluk_symbolic_impl.hpp @@ -33,10 +33,10 @@ namespace Impl { namespace Experimental { template + class LevelType1, class LevelType2, class LevelType3, class size_type> void level_sched(IlukHandle& thandle, const RowMapType row_map, const EntriesType entries, LevelType1& level_list, - LevelType2& level_ptr, LevelType2& level_idx, + LevelType2& level_ptr, LevelType3& level_idx, size_type& nlevels) { // Scheduling currently compute on host @@ -93,10 +93,10 @@ void level_sched(IlukHandle& thandle, const RowMapType row_map, // SEQLVLSCHD_TP1 algorithm (chunks) template + class LevelType1, class LevelType2, class LevelType3, class size_type> void level_sched_tp(IlukHandle& thandle, const RowMapType row_map, const EntriesType entries, LevelType1& level_list, - LevelType2& level_ptr, LevelType2& level_idx, + LevelType2& level_ptr, LevelType3& level_idx, size_type& nlevels) { // Scheduling currently compute on host @@ -264,8 +264,7 @@ void iluk_symbolic(IlukHandle& thandle, Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), dlevel_list); HandleDeviceEntriesType dlevel_ptr = thandle.get_level_ptr(); - auto level_ptr = - Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), dlevel_ptr); + auto level_ptr = thandle.get_host_level_ptr(); HandleDeviceEntriesType dlevel_idx = thandle.get_level_idx(); auto level_idx = diff --git a/sparse/src/KokkosSparse_spiluk_handle.hpp b/sparse/src/KokkosSparse_spiluk_handle.hpp index 78c072e72a..6ccd42709a 100644 --- a/sparse/src/KokkosSparse_spiluk_handle.hpp +++ b/sparse/src/KokkosSparse_spiluk_handle.hpp @@ -83,6 +83,9 @@ class SPILUKHandle { nnz_lno_view_t level_idx; // the list of rows in each level nnz_lno_view_t level_ptr; // the starting index (into the view level_idx) of each level + // Make hlevel_ptr a separate allocation, since it will be accessed on host + // between kernel launches. + nnz_lno_view_host_t hlevel_ptr; nnz_lno_view_host_t level_nchunks; // number of chunks of rows at each level nnz_lno_view_host_t level_nrowsperchunk; // maximum number of rows among chunks at each level @@ -110,6 +113,7 @@ class SPILUKHandle { : level_list(), level_idx(), level_ptr(), + hlevel_ptr(), level_nchunks(), level_nrowsperchunk(), iw(), @@ -135,6 +139,7 @@ class SPILUKHandle { level_list = nnz_row_view_t("level_list", nrows_), level_idx = nnz_lno_view_t("level_idx", nrows_), level_ptr = nnz_lno_view_t("level_ptr", nrows_ + 1), + hlevel_ptr = nnz_lno_view_host_t("hlevel_ptr", nrows_ + 1), level_nchunks = nnz_lno_view_host_t(), level_nrowsperchunk = nnz_lno_view_host_t(), reset_symbolic_complete(), iw = work_view_t(); @@ -155,6 +160,8 @@ class SPILUKHandle { KOKKOS_INLINE_FUNCTION nnz_lno_view_t get_level_ptr() const { return level_ptr; } + inline nnz_lno_view_host_t get_host_level_ptr() const { return hlevel_ptr; } + KOKKOS_INLINE_FUNCTION nnz_lno_view_host_t get_level_nchunks() const { return level_nchunks; } From ff4a28f7bd387cd9cef3e4b3196b536a070ea1b2 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Wed, 15 Feb 2023 18:20:03 -0700 Subject: [PATCH 215/226] Update KokkosKernels version for 4.0.0 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ce714e1ff..ffb506d925 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,9 +23,9 @@ IF(NOT KOKKOSKERNELS_HAS_TRILINOS) IF(NOT DEFINED ${PROJECT_NAME}) PROJECT(KokkosKernels CXX) ENDIF() - SET(KokkosKernels_VERSION_MAJOR 3) - SET(KokkosKernels_VERSION_MINOR 7) - SET(KokkosKernels_VERSION_PATCH 99) + SET(KokkosKernels_VERSION_MAJOR 4) + SET(KokkosKernels_VERSION_MINOR 0) + SET(KokkosKernels_VERSION_PATCH 0) SET(KokkosKernels_VERSION "${KokkosKernels_VERSION_MAJOR}.${KokkosKernels_VERSION_MINOR}.${KokkosKernels_VERSION_PATCH}") MATH(EXPR KOKKOSKERNELS_VERSION "${KokkosKernels_VERSION_MAJOR} * 10000 + ${KokkosKernels_VERSION_MINOR} * 100 + ${KokkosKernels_VERSION_PATCH}") ENDIF() From 98aa642bd3e7a74d2ffb8a837cb4ede96923c76b Mon Sep 17 00:00:00 2001 From: brian-kelley Date: Tue, 7 Feb 2023 14:08:23 -0700 Subject: [PATCH 216/226] Temporary workaround for Kokkos #5860 (#1675) In array_sum_reduce, if scalar is half_t and N is 3, 5 or 7, pad out the array by one more element. The last element will be unused, but this bypasses the issues with parallel_reduce. (cherry picked from commit 566570a87c1b797767802f894365477306129ac0) --- common/src/KokkosKernels_Utils.hpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/common/src/KokkosKernels_Utils.hpp b/common/src/KokkosKernels_Utils.hpp index 29bf2757d5..fd04bd2529 100644 --- a/common/src/KokkosKernels_Utils.hpp +++ b/common/src/KokkosKernels_Utils.hpp @@ -1416,20 +1416,30 @@ void init_view_withscalar( MyExecSpace().fence(); } -// A sum-reduction scalar representing a fixed-size array. template struct array_sum_reduce { + static_assert(N <= 8, "array_sum_reduce has only been tested up to N=8"); using ValueType = array_sum_reduce; - - scalar_t data[N]; + // Workaround for https://github.com/kokkos/kokkos/issues/5860 + static constexpr int N_internal = + ((N == 3 || N == 5 || N == 7) && + std::is_same::value && + sizeof(Kokkos::Experimental::half_t) == 2) + ? (N + 1) + : N; + + scalar_t data[N_internal]; KOKKOS_INLINE_FUNCTION array_sum_reduce() { - for (int i = 0; i < N; i++) data[i] = scalar_t(); + // Initialize all the elements, even those at index >= N (prevent valgrind + // warnings, etc.) + for (int i = 0; i < N_internal; i++) data[i] = scalar_t(); } KOKKOS_INLINE_FUNCTION // add operator array_sum_reduce & operator+=(const ValueType &src) { + // Don't bother summing elements >= N though as they will never be used for (int i = 0; i < N; i++) data[i] += src.data[i]; return *this; } From 4d11b0cd7e3d92367fcf1ae9a9973df3a2986713 Mon Sep 17 00:00:00 2001 From: brian-kelley Date: Fri, 10 Feb 2023 12:12:30 -0700 Subject: [PATCH 217/226] Spgemm non-reuse: unification layer and TPLs (#1678) * Add unification layer, tests for non-reuse SpGEMM This version has a simpler interface (A, B) -> C, so the user doesn't have to manage a handle. The default algorithm (SPGEMM_KK) is always used. The native implementation just calls symbolic and then numeric. * Add cusparse 11.0+ spgemm noreuse wrapper * Fix unused local typedef warning/error * Add cusparse 10.x spgemm noreuse wrapper * Formatting * Remove pointless no-reuse spgemm wrapper for cusparse 10, rocsparse For these versions, the no-reuse wrapper would be identical to the symbolic wrapper plus the numeric wrapper, so just call those. * Add MKL non-reuse spgemm wrapper * Formatting * Don't try to call 10 spgemm noreuse from cusparse (cherry picked from commit b0965b7d41456447a6f9fa20b813cf747fa11be8) --- sparse/CMakeLists.txt | 7 + ...Sparse_spgemm_noreuse_eti_spec_inst.cpp.in | 26 ++ ...parse_spgemm_noreuse_eti_spec_avail.hpp.in | 24 ++ ...Sparse_spgemm_noreuse_eti_spec_decl.hpp.in | 24 ++ .../impl/KokkosSparse_spgemm_noreuse_spec.hpp | 163 ++++++++++ sparse/src/KokkosSparse_spgemm.hpp | 67 ++++- ...osSparse_spgemm_noreuse_tpl_spec_avail.hpp | 93 ++++++ ...kosSparse_spgemm_noreuse_tpl_spec_decl.hpp | 279 ++++++++++++++++++ .../tpls/KokkosSparse_spmv_tpl_spec_decl.hpp | 2 +- sparse/unit_test/Test_Sparse_spgemm.hpp | 102 +++++-- 10 files changed, 745 insertions(+), 42 deletions(-) create mode 100644 sparse/eti/generated_specializations_cpp/spgemm_noreuse/KokkosSparse_spgemm_noreuse_eti_spec_inst.cpp.in create mode 100644 sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_noreuse_eti_spec_avail.hpp.in create mode 100644 sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_noreuse_eti_spec_decl.hpp.in create mode 100644 sparse/impl/KokkosSparse_spgemm_noreuse_spec.hpp create mode 100644 sparse/tpls/KokkosSparse_spgemm_noreuse_tpl_spec_avail.hpp create mode 100644 sparse/tpls/KokkosSparse_spgemm_noreuse_tpl_spec_decl.hpp diff --git a/sparse/CMakeLists.txt b/sparse/CMakeLists.txt index cdfda0c614..97076655f7 100644 --- a/sparse/CMakeLists.txt +++ b/sparse/CMakeLists.txt @@ -81,6 +81,13 @@ KOKKOSKERNELS_GENERATE_ETI(Sparse_spgemm_numeric spgemm_numeric TYPE_LISTS FLOATS ORDINALS OFFSETS LAYOUTS DEVICES ) +KOKKOSKERNELS_GENERATE_ETI(Sparse_spgemm_noreuse spgemm_noreuse + COMPONENTS sparse + HEADER_LIST ETI_HEADERS + SOURCE_LIST SOURCES + TYPE_LISTS FLOATS ORDINALS OFFSETS DEVICES +) + KOKKOSKERNELS_GENERATE_ETI(Sparse_bspgemm_numeric bspgemm_numeric COMPONENTS sparse HEADER_LIST ETI_HEADERS diff --git a/sparse/eti/generated_specializations_cpp/spgemm_noreuse/KokkosSparse_spgemm_noreuse_eti_spec_inst.cpp.in b/sparse/eti/generated_specializations_cpp/spgemm_noreuse/KokkosSparse_spgemm_noreuse_eti_spec_inst.cpp.in new file mode 100644 index 0000000000..85459ac139 --- /dev/null +++ b/sparse/eti/generated_specializations_cpp/spgemm_noreuse/KokkosSparse_spgemm_noreuse_eti_spec_inst.cpp.in @@ -0,0 +1,26 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + + +#define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true +#include "KokkosKernels_config.h" + +#include "KokkosSparse_spgemm_noreuse_spec.hpp" +namespace KokkosSparse { +namespace Impl { +@SPARSE_SPGEMM_NOREUSE_ETI_INST_BLOCK@ + } //IMPL +} //Kokkos diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_noreuse_eti_spec_avail.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_noreuse_eti_spec_avail.hpp.in new file mode 100644 index 0000000000..a75af70608 --- /dev/null +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_noreuse_eti_spec_avail.hpp.in @@ -0,0 +1,24 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + +#ifndef KOKKOSSPARSE_SPGEMM_NOREUSE_ETI_SPEC_AVAIL_HPP_ +#define KOKKOSSPARSE_SPGEMM_NOREUSE_ETI_SPEC_AVAIL_HPP_ +namespace KokkosSparse { +namespace Impl { +@SPARSE_SPGEMM_NOREUSE_ETI_AVAIL_BLOCK@ + } //IMPL +} //Kokkos +#endif diff --git a/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_noreuse_eti_spec_decl.hpp.in b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_noreuse_eti_spec_decl.hpp.in new file mode 100644 index 0000000000..2ca1ecf07b --- /dev/null +++ b/sparse/eti/generated_specializations_hpp/KokkosSparse_spgemm_noreuse_eti_spec_decl.hpp.in @@ -0,0 +1,24 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + +#ifndef KOKKOSSPARSE_SPGEMM_NOREUSE_ETI_SPEC_DECL_HPP_ +#define KOKKOSSPARSE_SPGEMM_NOREUSE_ETI_SPEC_DECL_HPP_ +namespace KokkosSparse { +namespace Impl { +@SPARSE_SPGEMM_NOREUSE_ETI_DECL_BLOCK@ + } //IMPL +} //Kokkos +#endif diff --git a/sparse/impl/KokkosSparse_spgemm_noreuse_spec.hpp b/sparse/impl/KokkosSparse_spgemm_noreuse_spec.hpp new file mode 100644 index 0000000000..352e3384ac --- /dev/null +++ b/sparse/impl/KokkosSparse_spgemm_noreuse_spec.hpp @@ -0,0 +1,163 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER +#ifndef KOKKOSSPARSE_IMPL_SPGEMM_NOREUSE_SPEC_HPP_ +#define KOKKOSSPARSE_IMPL_SPGEMM_NOREUSE_SPEC_HPP_ + +#include + +#include +#include "KokkosSparse_CrsMatrix.hpp" +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY +#include "KokkosKernels_Handle.hpp" +#include "KokkosSparse_spgemm_symbolic.hpp" +#include "KokkosSparse_spgemm_numeric.hpp" +#endif + +namespace KokkosSparse { +namespace Impl { +// Specialization struct which defines whether a specialization exists +template +struct spgemm_noreuse_eti_spec_avail { + enum : bool { value = false }; +}; + +} // namespace Impl +} // namespace KokkosSparse + +#define KOKKOSSPARSE_SPGEMM_NOREUSE_ETI_SPEC_AVAIL( \ + SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \ + template <> \ + struct spgemm_noreuse_eti_spec_avail< \ + KokkosSparse::CrsMatrix, \ + void, OFFSET_TYPE>, \ + KokkosSparse::CrsMatrix, \ + Kokkos::MemoryTraits, \ + const OFFSET_TYPE>, \ + KokkosSparse::CrsMatrix, \ + Kokkos::MemoryTraits, \ + const OFFSET_TYPE>> { \ + enum : bool { value = true }; \ + }; + +// Include the actual specialization declarations +#include +#include + +namespace KokkosSparse { +namespace Impl { + +// Unification layer +/// \brief Implementation of KokkosSparse::spgemm (sparse matrix - dense +/// vector multiply) for multiple vectors at a time (multivectors) +/// and possibly multiple coefficients at a time. + +template ::value, + bool eti_spec_avail = + spgemm_noreuse_eti_spec_avail::value> +struct SPGEMM_NOREUSE { + static CMatrix spgemm_noreuse(const AMatrix& A, bool transA, const BMatrix& B, + bool transB); +}; + +#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY + +// Unification layer +template +struct SPGEMM_NOREUSE { + static CMatrix spgemm_noreuse(const AMatrix& A, bool transA, const BMatrix& B, + bool transB) { + using device_t = typename CMatrix::device_type; + using scalar_t = typename CMatrix::value_type; + using ordinal_t = typename CMatrix::ordinal_type; + using size_type = typename CMatrix::size_type; + using c_rowmap_t = typename CMatrix::row_map_type::non_const_type; + using c_entries_t = typename CMatrix::index_type::non_const_type; + using c_values_t = typename CMatrix::values_type::non_const_type; + KokkosKernels::Experimental::KokkosKernelsHandle< + size_type, ordinal_t, scalar_t, typename device_t::execution_space, + typename device_t::memory_space, typename device_t::memory_space> + kh; + kh.create_spgemm_handle(); + // A is m*n, B is n*k, C is m*k + ordinal_t m = A.numRows(); + ordinal_t n = B.numRows(); + ordinal_t k = B.numCols(); + c_rowmap_t row_mapC( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "C rowmap"), m + 1); + KokkosSparse::Experimental::spgemm_symbolic( + &kh, m, n, k, A.graph.row_map, A.graph.entries, transA, B.graph.row_map, + B.graph.entries, transB, row_mapC); + size_type c_nnz = kh.get_spgemm_handle()->get_c_nnz(); + c_entries_t entriesC( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "C entries"), c_nnz); + c_values_t valuesC( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "C values"), c_nnz); + KokkosSparse::Experimental::spgemm_numeric( + &kh, m, n, k, A.graph.row_map, A.graph.entries, A.values, transA, + B.graph.row_map, B.graph.entries, B.values, transB, row_mapC, entriesC, + valuesC); + kh.destroy_spgemm_handle(); + return CMatrix("C", m, k, c_nnz, valuesC, row_mapC, entriesC); + } +}; + +#endif + +} // namespace Impl +} // namespace KokkosSparse + +#define KOKKOSSPARSE_SPGEMM_NOREUSE_ETI_SPEC_DECL( \ + SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \ + extern template struct SPGEMM_NOREUSE< \ + KokkosSparse::CrsMatrix, \ + void, OFFSET_TYPE>, \ + KokkosSparse::CrsMatrix, \ + Kokkos::MemoryTraits, \ + const OFFSET_TYPE>, \ + KokkosSparse::CrsMatrix, \ + Kokkos::MemoryTraits, \ + const OFFSET_TYPE>, \ + false, true>; + +#define KOKKOSSPARSE_SPGEMM_NOREUSE_ETI_SPEC_INST( \ + SCALAR_TYPE, ORDINAL_TYPE, OFFSET_TYPE, EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \ + template struct SPGEMM_NOREUSE< \ + KokkosSparse::CrsMatrix, \ + void, OFFSET_TYPE>, \ + KokkosSparse::CrsMatrix, \ + Kokkos::MemoryTraits, \ + const OFFSET_TYPE>, \ + KokkosSparse::CrsMatrix, \ + Kokkos::MemoryTraits, \ + const OFFSET_TYPE>, \ + false, true>; + +#include +#include + +#endif // KOKKOSSPARSE_IMPL_SPGEMM_NOREUSE_SPEC_HPP_ diff --git a/sparse/src/KokkosSparse_spgemm.hpp b/sparse/src/KokkosSparse_spgemm.hpp index 0cac811a4c..11cb58ed4a 100644 --- a/sparse/src/KokkosSparse_spgemm.hpp +++ b/sparse/src/KokkosSparse_spgemm.hpp @@ -19,6 +19,7 @@ #include "KokkosSparse_spgemm_numeric.hpp" #include "KokkosSparse_spgemm_symbolic.hpp" #include "KokkosSparse_spgemm_jacobi.hpp" +#include "KokkosSparse_spgemm_noreuse_spec.hpp" namespace KokkosSparse { @@ -125,20 +126,58 @@ void block_spgemm_numeric(KernelHandle& kh, const AMatrix& A, const bool Amode, template CMatrix spgemm(const AMatrix& A, const bool Amode, const BMatrix& B, const bool Bmode) { - using device_t = typename CMatrix::device_type; - using scalar_t = typename CMatrix::value_type; - using ordinal_t = typename CMatrix::ordinal_type; - using size_type = typename CMatrix::size_type; - using KKH = KokkosKernels::Experimental::KokkosKernelsHandle< - size_type, ordinal_t, scalar_t, typename device_t::execution_space, - typename device_t::memory_space, typename device_t::memory_space>; - KKH kh; - kh.create_spgemm_handle(); - CMatrix C; - spgemm_symbolic(kh, A, Amode, B, Bmode, C); - spgemm_numeric(kh, A, Amode, B, Bmode, C); - kh.destroy_spgemm_handle(); - return C; + // Canonicalize the matrix types: + // - Make A,B have const values and entries. + // - Make all views in A,B unmanaged, but otherwise default memory traits + // - C must have managed memory since its views are allocated in this + // function + using AMatrix_Internal = KokkosSparse::CrsMatrix< + typename AMatrix::const_value_type, typename AMatrix::const_ordinal_type, + typename AMatrix::device_type, Kokkos::MemoryTraits, + typename AMatrix::const_size_type>; + using BMatrix_Internal = KokkosSparse::CrsMatrix< + typename BMatrix::const_value_type, typename BMatrix::const_ordinal_type, + typename BMatrix::device_type, Kokkos::MemoryTraits, + typename BMatrix::const_size_type>; + using CMatrix_Internal = + KokkosSparse::CrsMatrix; + // Check now that A, B dimensions are compatible to multiply + auto opACols = Amode ? A.numRows() : A.numCols(); + auto opBRows = Bmode ? B.numCols() : B.numRows(); + if (Amode || Bmode) + throw std::invalid_argument( + "KokkosSparse::spgemm: transposing A and/or B is not yet supported"); + if (opACols != opBRows) + throw std::invalid_argument( + "KokkosSparse::spgemm: op(A) and op(B) have incompatible dimensions " + "for multiplication"); + // Make sure C has managed memory. If its memory traits are void (default), + // then that also means it's managed. + if constexpr (!std::is_same::value) { + if (CMatrix::memory_traits::is_unmanaged) + throw std::invalid_argument( + "KokkosSparse::spgemm: C must not have the Unmanaged memory trait, " + "because spgemm needs to allocate its Views"); + } + AMatrix_Internal A_internal(A); + BMatrix_Internal B_internal(B); + // Intercept empty C case here so that TPL wrappers don't have to deal with it + if (!A.numRows() || !A.numCols() || !B.numCols() || !A.nnz() || !B.nnz()) { + auto Crows = Amode ? A.numCols() : A.numRows(); + auto Ccols = Bmode ? B.numRows() : B.numCols(); + typename CMatrix::row_map_type::non_const_type row_mapC("C rowmap", + Crows + 1); + typename CMatrix::index_type entriesC; + typename CMatrix::values_type valuesC; + return CMatrix("C", Crows, Ccols, 0, valuesC, row_mapC, entriesC); + } + return CMatrix(KokkosSparse::Impl::SPGEMM_NOREUSE< + CMatrix_Internal, AMatrix_Internal, + BMatrix_Internal>::spgemm_noreuse(A_internal, Amode, + B_internal, Bmode)); } } // namespace KokkosSparse diff --git a/sparse/tpls/KokkosSparse_spgemm_noreuse_tpl_spec_avail.hpp b/sparse/tpls/KokkosSparse_spgemm_noreuse_tpl_spec_avail.hpp new file mode 100644 index 0000000000..81d3273e17 --- /dev/null +++ b/sparse/tpls/KokkosSparse_spgemm_noreuse_tpl_spec_avail.hpp @@ -0,0 +1,93 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER +*/ + +#ifndef KOKKOSPARSE_SPGEMM_NOREUSE_TPL_SPEC_AVAIL_HPP_ +#define KOKKOSPARSE_SPGEMM_NOREUSE_TPL_SPEC_AVAIL_HPP_ + +namespace KokkosSparse { +namespace Impl { + +// Specialization struct which defines whether a specialization exists +template +struct spgemm_noreuse_tpl_spec_avail { + enum : bool { value = false }; +}; + +#if defined(KOKKOSKERNELS_ENABLE_TPL_CUSPARSE) && (CUDA_VERSION >= 11000) +// For cuSparse 11 and up, use the non-reuse generic interface. +// But for cuSparse 10, there is only one interface +// so just let KokkosSparse::spgemm call the symbolic and numeric wrappers. + +#define SPGEMM_NOREUSE_AVAIL_CUSPARSE(SCALAR, MEMSPACE) \ + template <> \ + struct spgemm_noreuse_tpl_spec_avail< \ + KokkosSparse::CrsMatrix< \ + SCALAR, int, Kokkos::Device, void, int>, \ + KokkosSparse::CrsMatrix< \ + const SCALAR, const int, Kokkos::Device, \ + Kokkos::MemoryTraits, const int>, \ + KokkosSparse::CrsMatrix< \ + const SCALAR, const int, Kokkos::Device, \ + Kokkos::MemoryTraits, const int>> { \ + enum : bool { value = true }; \ + }; + +#define SPGEMM_NOREUSE_AVAIL_CUSPARSE_S(SCALAR) \ + SPGEMM_NOREUSE_AVAIL_CUSPARSE(SCALAR, Kokkos::CudaSpace) \ + SPGEMM_NOREUSE_AVAIL_CUSPARSE(SCALAR, Kokkos::CudaUVMSpace) + +SPGEMM_NOREUSE_AVAIL_CUSPARSE_S(float) +SPGEMM_NOREUSE_AVAIL_CUSPARSE_S(double) +SPGEMM_NOREUSE_AVAIL_CUSPARSE_S(Kokkos::complex) +SPGEMM_NOREUSE_AVAIL_CUSPARSE_S(Kokkos::complex) + +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL +#define SPGEMM_NOREUSE_AVAIL_MKL(SCALAR, EXEC) \ + template <> \ + struct spgemm_noreuse_tpl_spec_avail< \ + KokkosSparse::CrsMatrix< \ + SCALAR, int, Kokkos::Device, void, int>, \ + KokkosSparse::CrsMatrix< \ + const SCALAR, const int, Kokkos::Device, \ + Kokkos::MemoryTraits, const int>, \ + KokkosSparse::CrsMatrix< \ + const SCALAR, const int, Kokkos::Device, \ + Kokkos::MemoryTraits, const int>> { \ + enum : bool { value = true }; \ + }; + +#define SPGEMM_NOREUSE_AVAIL_MKL_E(EXEC) \ + SPGEMM_NOREUSE_AVAIL_MKL(float, EXEC) \ + SPGEMM_NOREUSE_AVAIL_MKL(double, EXEC) \ + SPGEMM_NOREUSE_AVAIL_MKL(Kokkos::complex, EXEC) \ + SPGEMM_NOREUSE_AVAIL_MKL(Kokkos::complex, EXEC) + +#ifdef KOKKOS_ENABLE_SERIAL +SPGEMM_NOREUSE_AVAIL_MKL_E(Kokkos::Serial) +#endif +#ifdef KOKKOS_ENABLE_OPENMP +SPGEMM_NOREUSE_AVAIL_MKL_E(Kokkos::OpenMP) +#endif +#endif + +} // namespace Impl +} // namespace KokkosSparse + +#endif diff --git a/sparse/tpls/KokkosSparse_spgemm_noreuse_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spgemm_noreuse_tpl_spec_decl.hpp new file mode 100644 index 0000000000..f3d32a01fb --- /dev/null +++ b/sparse/tpls/KokkosSparse_spgemm_noreuse_tpl_spec_decl.hpp @@ -0,0 +1,279 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER +*/ + +#ifndef KOKKOSPARSE_SPGEMM_NOREUSE_TPL_SPEC_DECL_HPP_ +#define KOKKOSPARSE_SPGEMM_NOREUSE_TPL_SPEC_DECL_HPP_ + +#ifdef KOKKOSKERNELS_ENABLE_TPL_CUSPARSE +#include "cusparse.h" +#include "KokkosSparse_Utils_cusparse.hpp" +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL +#include "KokkosSparse_Utils_mkl.hpp" +#include "mkl_spblas.h" +#endif + +namespace KokkosSparse { +namespace Impl { + +#if defined(KOKKOSKERNELS_ENABLE_TPL_CUSPARSE) && (CUDA_VERSION >= 11000) + +template +Matrix spgemm_noreuse_cusparse(const MatrixConst &A, const MatrixConst &B) { + using Scalar = typename Matrix::value_type; + cudaDataType cudaScalarType = Impl::cuda_data_type_from(); + KokkosKernels::Experimental::Controls kkControls; + cusparseHandle_t cusparseHandle = kkControls.getCusparseHandle(); + cusparseOperation_t op = CUSPARSE_OPERATION_NON_TRANSPOSE; + cusparseSpMatDescr_t descr_A, descr_B, descr_C; + cusparseSpGEMMDescr_t spgemmDescr; + cusparseSpGEMMAlg_t alg = CUSPARSE_SPGEMM_DEFAULT; + size_t bufferSize1 = 0, bufferSize2 = 0; + void *buffer1 = nullptr, *buffer2 = nullptr; + // A is m*n, B is n*k, C is m*k + int m = A.numRows(); + int n = B.numRows(); + int k = B.numCols(); + const auto alpha = Kokkos::ArithTraits::one(); + const auto beta = Kokkos::ArithTraits::zero(); + typename Matrix::row_map_type::non_const_type row_mapC( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "C rowmap"), m + 1); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_createDescr(&spgemmDescr)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &descr_A, m, n, A.graph.entries.extent(0), (void *)A.graph.row_map.data(), + (void *)A.graph.entries.data(), (void *)A.values.data(), + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, + cudaScalarType)); + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseCreateCsr( + &descr_B, n, k, B.graph.entries.extent(0), (void *)B.graph.row_map.data(), + (void *)B.graph.entries.data(), (void *)B.values.data(), + CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, + cudaScalarType)); + + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCreateCsr(&descr_C, m, k, 0, (void *)row_mapC.data(), nullptr, + nullptr, CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, + CUSPARSE_INDEX_BASE_ZERO, cudaScalarType)); + + //---------------------------------------------------------------------- + // query workEstimation buffer size, allocate, then call again with buffer. + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_workEstimation( + cusparseHandle, op, op, &alpha, descr_A, descr_B, &beta, descr_C, + cudaScalarType, alg, spgemmDescr, &bufferSize1, nullptr)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&buffer1, bufferSize1)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_workEstimation( + cusparseHandle, op, op, &alpha, descr_A, descr_B, &beta, descr_C, + cudaScalarType, alg, spgemmDescr, &bufferSize1, buffer1)); + + //---------------------------------------------------------------------- + // query compute buffer size, allocate, then call again with buffer. + + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( + cusparseHandle, op, op, &alpha, descr_A, descr_B, &beta, descr_C, + cudaScalarType, alg, spgemmDescr, &bufferSize2, nullptr)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc((void **)&buffer2, bufferSize2)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( + cusparseHandle, op, op, &alpha, descr_A, descr_B, &beta, descr_C, + cudaScalarType, alg, spgemmDescr, &bufferSize2, buffer2)); + int64_t unused1, unused2, c_nnz; + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSpMatGetSize(descr_C, &unused1, &unused2, &c_nnz)); + + typename Matrix::index_type entriesC( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "C entries"), c_nnz); + typename Matrix::values_type valuesC( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "C values"), c_nnz); + + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseCsrSetPointers(descr_C, (void *)row_mapC.data(), + (void *)entriesC.data(), (void *)valuesC.data())); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_compute( + cusparseHandle, op, op, &alpha, descr_A, descr_B, &beta, descr_C, + cudaScalarType, alg, spgemmDescr, &bufferSize2, buffer2)); + KOKKOS_CUSPARSE_SAFE_CALL( + cusparseSpGEMM_copy(cusparseHandle, op, op, &alpha, descr_A, descr_B, + &beta, descr_C, cudaScalarType, alg, spgemmDescr)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroySpMat(descr_A)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroySpMat(descr_B)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseDestroySpMat(descr_C)); + KOKKOS_CUSPARSE_SAFE_CALL(cusparseSpGEMM_destroyDescr(spgemmDescr)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer1)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(buffer2)); + return Matrix("C", m, k, c_nnz, valuesC, row_mapC, entriesC); +} + +#define SPGEMM_NOREUSE_DECL_CUSPARSE(SCALAR, MEMSPACE, TPL_AVAIL) \ + template <> \ + struct SPGEMM_NOREUSE< \ + KokkosSparse::CrsMatrix< \ + SCALAR, int, Kokkos::Device, void, int>, \ + KokkosSparse::CrsMatrix< \ + const SCALAR, const int, Kokkos::Device, \ + Kokkos::MemoryTraits, const int>, \ + KokkosSparse::CrsMatrix< \ + const SCALAR, const int, Kokkos::Device, \ + Kokkos::MemoryTraits, const int>, \ + true, TPL_AVAIL> { \ + using Matrix = KokkosSparse::CrsMatrix< \ + SCALAR, int, Kokkos::Device, void, int>; \ + using ConstMatrix = KokkosSparse::CrsMatrix< \ + const SCALAR, const int, Kokkos::Device, \ + Kokkos::MemoryTraits, const int>; \ + static KokkosSparse::CrsMatrix< \ + SCALAR, int, Kokkos::Device, void, int> \ + spgemm_noreuse(const ConstMatrix &A, bool, const ConstMatrix &B, bool) { \ + std::string label = "KokkosSparse::spgemm_noreuse[TPL_CUSPARSE," + \ + Kokkos::ArithTraits::name() + "]"; \ + Kokkos::Profiling::pushRegion(label); \ + Matrix C = spgemm_noreuse_cusparse(A, B); \ + Kokkos::Profiling::popRegion(); \ + return C; \ + } \ + }; + +#define SPGEMM_NOREUSE_DECL_CUSPARSE_S(SCALAR, TPL_AVAIL) \ + SPGEMM_NOREUSE_DECL_CUSPARSE(SCALAR, Kokkos::CudaSpace, TPL_AVAIL) \ + SPGEMM_NOREUSE_DECL_CUSPARSE(SCALAR, Kokkos::CudaUVMSpace, TPL_AVAIL) + +SPGEMM_NOREUSE_DECL_CUSPARSE_S(float, true) +SPGEMM_NOREUSE_DECL_CUSPARSE_S(double, true) +SPGEMM_NOREUSE_DECL_CUSPARSE_S(Kokkos::complex, true) +SPGEMM_NOREUSE_DECL_CUSPARSE_S(Kokkos::complex, true) + +SPGEMM_NOREUSE_DECL_CUSPARSE_S(float, false) +SPGEMM_NOREUSE_DECL_CUSPARSE_S(double, false) +SPGEMM_NOREUSE_DECL_CUSPARSE_S(Kokkos::complex, false) +SPGEMM_NOREUSE_DECL_CUSPARSE_S(Kokkos::complex, false) + +#endif + +#ifdef KOKKOSKERNELS_ENABLE_TPL_MKL +template +Matrix spgemm_noreuse_mkl(const MatrixConst &A, const MatrixConst &B) { + using size_type = typename Matrix::non_const_size_type; + using index_type = typename Matrix::non_const_ordinal_type; + using scalar_type = typename Matrix::non_const_value_type; + using ExecSpace = typename Matrix::execution_space; + using MKLMatrix = MKLSparseMatrix; + auto m = A.numRows(); + auto n = A.numCols(); + auto k = B.numCols(); + MKLMatrix Amkl(m, n, const_cast(A.graph.row_map.data()), + const_cast(A.graph.entries.data()), + const_cast(A.values.data())); + MKLMatrix Bmkl(n, k, const_cast(B.graph.row_map.data()), + const_cast(B.graph.entries.data()), + const_cast(B.values.data())); + sparse_matrix_t C; + matrix_descr generalDescr; + generalDescr.type = SPARSE_MATRIX_TYPE_GENERAL; + generalDescr.mode = SPARSE_FILL_MODE_FULL; + generalDescr.diag = SPARSE_DIAG_NON_UNIT; + KOKKOSKERNELS_MKL_SAFE_CALL( + mkl_sparse_spmm(SPARSE_OPERATION_NON_TRANSPOSE, Amkl, Bmkl, &C)); + KOKKOSKERNELS_MKL_SAFE_CALL(mkl_sparse_order(C)); + MKLMatrix wrappedC(C); + MKL_INT nrows = 0, ncols = 0; + MKL_INT *rowmapRaw = nullptr; + MKL_INT *entriesRaw = nullptr; + scalar_type *valuesRaw = nullptr; + wrappedC.export_data(nrows, ncols, rowmapRaw, entriesRaw, valuesRaw); + if (nrows != m || ncols != k) + throw std::runtime_error( + "KokkosSparse::spgemm: matrix returned by MKL has incorrect " + "dimensions"); + MKL_INT c_nnz = rowmapRaw[m]; + Kokkos::View> + rowmapRawView(rowmapRaw, m + 1); + Kokkos::View> + entriesRawView(entriesRaw, c_nnz); + Kokkos::View> + valuesRawView(valuesRaw, c_nnz); + + typename Matrix::row_map_type::non_const_type row_mapC( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "C rowmap"), m + 1); + typename Matrix::index_type entriesC( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "C entries"), c_nnz); + typename Matrix::values_type valuesC( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "C values"), c_nnz); + + Kokkos::deep_copy(ExecSpace(), row_mapC, rowmapRawView); + Kokkos::deep_copy(ExecSpace(), entriesC, entriesRawView); + Kokkos::deep_copy(ExecSpace(), valuesC, valuesRawView); + // Now, done with the copy of C owned by MKL + wrappedC.destroy(); + return Matrix("C", m, k, c_nnz, valuesC, row_mapC, entriesC); +} + +#define SPGEMM_NOREUSE_DECL_MKL(SCALAR, EXEC, TPL_AVAIL) \ + template <> \ + struct SPGEMM_NOREUSE< \ + KokkosSparse::CrsMatrix< \ + SCALAR, int, Kokkos::Device, void, int>, \ + KokkosSparse::CrsMatrix< \ + const SCALAR, const int, Kokkos::Device, \ + Kokkos::MemoryTraits, const int>, \ + KokkosSparse::CrsMatrix< \ + const SCALAR, const int, Kokkos::Device, \ + Kokkos::MemoryTraits, const int>, \ + true, TPL_AVAIL> { \ + using Matrix = KokkosSparse::CrsMatrix< \ + SCALAR, int, Kokkos::Device, void, int>; \ + using ConstMatrix = KokkosSparse::CrsMatrix< \ + const SCALAR, const int, Kokkos::Device, \ + Kokkos::MemoryTraits, const int>; \ + static KokkosSparse::CrsMatrix< \ + SCALAR, int, Kokkos::Device, void, int> \ + spgemm_noreuse(const ConstMatrix &A, bool, const ConstMatrix &B, bool) { \ + std::string label = "KokkosSparse::spgemm_noreuse[TPL_MKL," + \ + Kokkos::ArithTraits::name() + "]"; \ + Kokkos::Profiling::pushRegion(label); \ + Matrix C = spgemm_noreuse_mkl(A, B); \ + Kokkos::Profiling::popRegion(); \ + return C; \ + } \ + }; + +#define SPGEMM_NOREUSE_DECL_MKL_SE(SCALAR, EXEC) \ + SPGEMM_NOREUSE_DECL_MKL(SCALAR, EXEC, true) \ + SPGEMM_NOREUSE_DECL_MKL(SCALAR, EXEC, false) + +#define SPGEMM_NOREUSE_DECL_MKL_E(EXEC) \ + SPGEMM_NOREUSE_DECL_MKL_SE(float, EXEC) \ + SPGEMM_NOREUSE_DECL_MKL_SE(double, EXEC) \ + SPGEMM_NOREUSE_DECL_MKL_SE(Kokkos::complex, EXEC) \ + SPGEMM_NOREUSE_DECL_MKL_SE(Kokkos::complex, EXEC) + +#ifdef KOKKOS_ENABLE_SERIAL +SPGEMM_NOREUSE_DECL_MKL_E(Kokkos::Serial) +#endif +#ifdef KOKKOS_ENABLE_OPENMP +SPGEMM_NOREUSE_DECL_MKL_E(Kokkos::OpenMP) +#endif +#endif + +} // namespace Impl +} // namespace KokkosSparse + +#endif diff --git a/sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp b/sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp index 3c68195f97..f223ed0e5a 100644 --- a/sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp +++ b/sparse/tpls/KokkosSparse_spmv_tpl_spec_decl.hpp @@ -35,7 +35,6 @@ void spmv_cusparse(const KokkosKernels::Experimental::Controls& controls, typename YVector::non_const_value_type const& beta, const YVector& y) { using offset_type = typename AMatrix::non_const_size_type; - using entry_type = typename AMatrix::non_const_ordinal_type; using value_type = typename AMatrix::non_const_value_type; /* initialize cusparse library */ @@ -57,6 +56,7 @@ void spmv_cusparse(const KokkosKernels::Experimental::Controls& controls, #if defined(CUSPARSE_VERSION) && (10300 <= CUSPARSE_VERSION) + using entry_type = typename AMatrix::non_const_ordinal_type; /* Check that cusparse can handle the types of the input Kokkos::CrsMatrix */ const cusparseIndexType_t myCusparseOffsetType = cusparse_index_type_t_from(); diff --git a/sparse/unit_test/Test_Sparse_spgemm.hpp b/sparse/unit_test/Test_Sparse_spgemm.hpp index b6480f4f16..4cb225b97d 100644 --- a/sparse/unit_test/Test_Sparse_spgemm.hpp +++ b/sparse/unit_test/Test_Sparse_spgemm.hpp @@ -49,6 +49,16 @@ typedef Kokkos::complex kokkos_complex_float; namespace Test { +// 3 ways to call SpGEMM: +// - symbolic/numeric with Views +// - symbolic/numeric with CrsMatrices +// - non-reuse with CrsMatrices +enum spgemm_call_mode { + spgemm_reuse_view, + spgemm_reuse_matrix, + spgemm_noreuse +}; + // Randomize matrix values again from the same uniform distribution as // kk_generate_sparse_matrix uses. template @@ -60,6 +70,11 @@ void randomize_matrix_values(const Values &v) { Kokkos::fill_random(v, pool, randStart, randEnd); } +template +void run_spgemm_noreuse(crsMat_t A, crsMat_t B, crsMat_t &C) { + C = KokkosSparse::spgemm(A, false, B, false); +} + template int run_spgemm(crsMat_t A, crsMat_t B, KokkosSparse::SPGEMMAlgorithm spgemm_algorithm, crsMat_t &C, @@ -275,7 +290,7 @@ bool is_same_matrix(crsMat_t output_mat_actual, crsMat_t output_mat_reference) { template void test_spgemm(lno_t m, lno_t k, lno_t n, size_type nnz, lno_t bandwidth, - lno_t row_size_variance, bool oldInterface = false, + lno_t row_size_variance, Test::spgemm_call_mode callMode, bool testReuse = false) { #if defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL) { @@ -313,10 +328,17 @@ void test_spgemm(lno_t m, lno_t k, lno_t n, size_type nnz, lno_t bandwidth, run_spgemm(A, B, SPGEMM_DEBUG, output_mat2, false); } - std::vector algorithms = { - SPGEMM_KK, SPGEMM_KK_LP, SPGEMM_KK_MEMORY /* alias SPGEMM_KK_MEMSPEED */, - SPGEMM_KK_SPEED /* alias SPGEMM_KK_DENSE */ - }; + std::vector algorithms; + if (callMode == spgemm_noreuse) { + // No-reuse interface always uses the default algorithm + algorithms = {SPGEMM_KK}; + } else { + algorithms = { + SPGEMM_KK, SPGEMM_KK_LP, + SPGEMM_KK_MEMORY /* alias SPGEMM_KK_MEMSPEED */, + SPGEMM_KK_SPEED /* alias SPGEMM_KK_DENSE */ + }; + } for (auto spgemm_algorithm : algorithms) { std::string algo = "UNKNOWN"; @@ -337,12 +359,17 @@ void test_spgemm(lno_t m, lno_t k, lno_t n, size_type nnz, lno_t bandwidth, bool failed = false; int res = 0; try { - if (oldInterface) - res = run_spgemm_old_interface(A, B, spgemm_algorithm, - output_mat, testReuse); - else - res = run_spgemm(A, B, spgemm_algorithm, output_mat, - testReuse); + switch (callMode) { + case spgemm_reuse_view: + res = run_spgemm_old_interface( + A, B, spgemm_algorithm, output_mat, testReuse); + break; + case spgemm_reuse_matrix: + res = run_spgemm(A, B, spgemm_algorithm, output_mat, + testReuse); + break; + case spgemm_noreuse: run_spgemm_noreuse(A, B, output_mat); break; + } } catch (const char *message) { EXPECT_TRUE(is_expected_to_fail) << algo << ": " << message; failed = true; @@ -522,22 +549,43 @@ void test_issue402() { #define KOKKOSKERNELS_EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \ TEST_F(TestCategory, \ sparse##_##spgemm##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \ - test_spgemm(10000, 8000, 6000, 8000 * 20, \ - 500, 10, false); \ - test_spgemm(10000, 8000, 6000, 8000 * 20, \ - 500, 10, true); \ - test_spgemm(1000, 500, 1600, 1000 * 20, \ - 500, 10, false, true); \ - test_spgemm(1000, 500, 1600, 1000 * 20, \ - 500, 10, true, true); \ - test_spgemm(0, 0, 0, 0, 10, 10, false); \ - test_spgemm(0, 0, 0, 0, 10, 10, true); \ - test_spgemm(0, 12, 5, 0, 10, 0, false); \ - test_spgemm(0, 12, 5, 0, 10, 0, true); \ - test_spgemm(10, 10, 0, 0, 10, 10, false); \ - test_spgemm(10, 10, 0, 0, 10, 10, true); \ - test_spgemm(10, 10, 10, 0, 0, 0, false); \ - test_spgemm(10, 10, 10, 0, 0, 0, true); \ + test_spgemm( \ + 10000, 8000, 6000, 8000 * 20, 500, 10, ::Test::spgemm_reuse_matrix); \ + test_spgemm( \ + 10000, 8000, 6000, 8000 * 20, 500, 10, ::Test::spgemm_reuse_view); \ + test_spgemm( \ + 1000, 500, 1600, 1000 * 20, 500, 10, ::Test::spgemm_reuse_matrix, \ + true); \ + test_spgemm( \ + 1000, 500, 1600, 1000 * 20, 500, 10, ::Test::spgemm_reuse_view, true); \ + test_spgemm(0, 0, 0, 0, 10, 10, \ + ::Test::spgemm_reuse_matrix); \ + test_spgemm(0, 0, 0, 0, 10, 10, \ + ::Test::spgemm_reuse_view); \ + test_spgemm(0, 12, 5, 0, 10, 0, \ + ::Test::spgemm_reuse_matrix); \ + test_spgemm(0, 12, 5, 0, 10, 0, \ + ::Test::spgemm_reuse_view); \ + test_spgemm(10, 10, 0, 0, 10, 10, \ + ::Test::spgemm_reuse_matrix); \ + test_spgemm(10, 10, 0, 0, 10, 10, \ + ::Test::spgemm_reuse_view); \ + test_spgemm(10, 10, 10, 0, 0, 0, \ + ::Test::spgemm_reuse_matrix); \ + test_spgemm(10, 10, 10, 0, 0, 0, \ + ::Test::spgemm_reuse_view); \ + test_spgemm( \ + 10000, 8000, 6000, 8000 * 20, 500, 10, ::Test::spgemm_noreuse); \ + test_spgemm( \ + 1000, 500, 1600, 1000 * 20, 500, 10, ::Test::spgemm_noreuse); \ + test_spgemm(0, 0, 0, 0, 10, 10, \ + ::Test::spgemm_noreuse); \ + test_spgemm(0, 12, 5, 0, 10, 0, \ + ::Test::spgemm_noreuse); \ + test_spgemm(10, 10, 0, 0, 10, 10, \ + ::Test::spgemm_noreuse); \ + test_spgemm(10, 10, 10, 0, 0, 0, \ + ::Test::spgemm_noreuse); \ test_spgemm_symbolic(true, true); \ test_spgemm_symbolic(false, true); \ test_spgemm_symbolic(true, false); \ From 04d590c41dfe87d916601a2f78b47e59a65308ef Mon Sep 17 00:00:00 2001 From: brian-kelley Date: Mon, 13 Feb 2023 11:01:38 -0700 Subject: [PATCH 218/226] Add utility KokkosSparse::removeCrsMatrixZeros(A, tol) (#1681) * Add utility KokkosSparse::removeCrsMatrixZeros(A, tol) And testing for it. It removes explicit zeros (or, entries where |Aij| < tol) from a matrix and returns a new matrix. If A has no entries to remove, A is returned unchanged. * Add missing Kokkos_Bitset.hpp include * Incorporate feedback on removeCrsMatrixZeros test - Simplify rowptr filling loop in reference impl - Hardcode the reference outputs for all hardcoded test cases, and check the reference impl itself against them. * Add fence Make sure all kernels finish running before temporary views go out of scope. (cherry picked from commit 9ff35198d66f97b1042134ccfa0382cb87b029b4) --- sparse/src/KokkosSparse_Utils.hpp | 199 ++++++++++++++ sparse/unit_test/Test_Sparse.hpp | 1 + sparse/unit_test/Test_Sparse_Utils.hpp | 98 +++++++ .../Test_Sparse_removeCrsMatrixZeros.hpp | 258 ++++++++++++++++++ sparse/unit_test/Test_Sparse_spgemm.hpp | 82 +----- 5 files changed, 558 insertions(+), 80 deletions(-) create mode 100644 sparse/unit_test/Test_Sparse_removeCrsMatrixZeros.hpp diff --git a/sparse/src/KokkosSparse_Utils.hpp b/sparse/src/KokkosSparse_Utils.hpp index a0b37be622..2b72fa01cc 100644 --- a/sparse/src/KokkosSparse_Utils.hpp +++ b/sparse/src/KokkosSparse_Utils.hpp @@ -24,6 +24,7 @@ #include "KokkosKernels_PrintUtils.hpp" #include "KokkosSparse_CrsMatrix.hpp" #include "KokkosSparse_BsrMatrix.hpp" +#include "Kokkos_Bitset.hpp" #ifdef KOKKOSKERNELS_HAVE_PARALLEL_GNUSORT #include @@ -2119,6 +2120,200 @@ bool isCrsGraphSorted(const Rowmap &rowmap, const Entries &entries) { return totalFallingEdges == rowBoundaryFallingEdges; } +template +struct CountDroppedEntriesFunctor { + using Scalar = typename Values::non_const_value_type; + CountDroppedEntriesFunctor(const Values &values_, Mag tol_) + : values(values_), tol(tol_) {} + + KOKKOS_INLINE_FUNCTION void operator()(int64_t i, Offset &lcount) const { + if (Kokkos::ArithTraits::abs(values(i)) <= tol) lcount++; + } + + Values values; + Mag tol; +}; + +template +struct MarkFinalRowEntries { + MarkFinalRowEntries(const Bitset &rowEndMarkers_, const Rowmap &rowmap_) + : rowEndMarkers(rowEndMarkers_), rowmap(rowmap_) {} + + KOKKOS_INLINE_FUNCTION void operator()(int64_t i) const { + auto index = rowmap(i); + if (index) rowEndMarkers.set(index - 1); + } + + Bitset rowEndMarkers; + Rowmap rowmap; +}; + +template +struct DropEntriesScanner { + KOKKOS_DEFAULTED_FUNCTION DropEntriesScanner() = default; + KOKKOS_INLINE_FUNCTION DropEntriesScanner(Offset i_out_, Offset row_) + : i_out(i_out_), row(row_) {} + + KOKKOS_INLINE_FUNCTION void operator+=( + const DropEntriesScanner &rhs) { + i_out += rhs.i_out; + row += rhs.row; + } + + Offset i_out; // The index to write in output entries/values + Offset row; // The row index (ignoring rows which were empty in input) +}; + +template +struct DropEntriesFunctor { + using Offset = typename RowmapIn::non_const_value_type; + using Scalar = typename ValuesIn::non_const_value_type; + + DropEntriesFunctor(const Bitset &rowEndMarkers_, const RowmapIn &rowmapIn_, + const EntriesIn &entriesIn_, const ValuesIn &valuesIn_, + const RowmapOut &compactRowmapOut_, + const EntriesOut &entriesOut_, const ValuesOut &valuesOut_, + Mag tol_) + : rowEndMarkers(rowEndMarkers_), + rowmapIn(rowmapIn_), + entriesIn(entriesIn_), + valuesIn(valuesIn_), + compactRowmapOut(compactRowmapOut_), + entriesOut(entriesOut_), + valuesOut(valuesOut_), + tol(tol_) {} + + KOKKOS_INLINE_FUNCTION void operator()(int64_t i_in, + DropEntriesScanner &scanval, + bool finalPass) const { + // i_in is the index of the input entry being processed + // i_out (if finalPass == true) is the index of where that same entry goes + // in the filtered matrix + bool filter = Kokkos::ArithTraits::abs(valuesIn(i_in)) <= tol; + bool isRowEnd = rowEndMarkers.test(i_in); + if (finalPass) { + if (!filter) { + // Keeping this entry, so copy it to the output. + entriesOut(scanval.i_out) = entriesIn(i_in); + valuesOut(scanval.i_out) = valuesIn(i_in); + } + if (isRowEnd) { + // Entry i_in was the last in its row of the input matrix. + // We now know where that filtered row ends, so mark it in + // compactRowmapOut. + compactRowmapOut(scanval.row + 1) = scanval.i_out + (filter ? 0 : 1); + } + // Also, make one thread responsible for initializing first compact rowmap + // entry + if (i_in == 0) compactRowmapOut(0) = 0; + } + if (!filter) scanval.i_out++; + if (isRowEnd) scanval.row++; + } + + Bitset rowEndMarkers; + RowmapIn rowmapIn; + EntriesIn entriesIn; + ValuesIn valuesIn; + RowmapOut compactRowmapOut; + EntriesOut entriesOut; + ValuesOut valuesOut; + Mag tol; +}; + +template +struct ExpandRowmapFunctor { + using Offset = typename RowmapIn::non_const_value_type; + + ExpandRowmapFunctor(const RowmapIn &rowmapIn_, + const RowmapOut &compactRowmapOut_, + const RowmapOut &rowmapOut_) + : rowmapIn(rowmapIn_), + compactRowmapOut(compactRowmapOut_), + rowmapOut(rowmapOut_) {} + + KOKKOS_INLINE_FUNCTION void operator()(Ordinal row, Ordinal &compactRow, + bool finalPass) const { + if (finalPass) { + rowmapOut(row) = compactRowmapOut(compactRow); + } + if (row + 1 < rowmapIn.extent_int(0) && rowmapIn(row + 1) != rowmapIn(row)) + compactRow++; + } + + RowmapIn rowmapIn; + RowmapOut compactRowmapOut; + RowmapOut rowmapOut; +}; + +// Given a CrsMatrix A, filter out all entries Aij where |Aij| <= tol. +// If there are no entries to remove, A is returned. +// Otherwise a new matrix is returned. +template +Matrix removeCrsMatrixZeros( + const Matrix &A, + typename Kokkos::ArithTraits::mag_type tol = + 0) { + using Ordinal = typename Matrix::non_const_ordinal_type; + using Offset = typename Matrix::non_const_size_type; + using Device = typename Matrix::device_type; + using ExecSpace = typename Device::execution_space; + using Mag = decltype(tol); + using RangePol = Kokkos::RangePolicy; + // First, count the number of entries to remove + Offset entriesToRemove; + Kokkos::parallel_reduce( + RangePol(0, A.nnz()), + CountDroppedEntriesFunctor( + A.values, tol), + entriesToRemove); + if (entriesToRemove == Offset(0)) { + // The matrix has no zeros to remove, so just return it as-is + return A; + } + // Actually have to make the new matrix with (near-)zeros removed. + // To help construct the new rowmap, for each original entry record whether + // it's at the end of its row. + Kokkos::Bitset rowEndMarkersNonconst(A.nnz()); + Kokkos::parallel_for( + RangePol(0, A.graph.row_map.extent(0)), + MarkFinalRowEntries(rowEndMarkersNonconst, A.graph.row_map)); + Offset filteredNNZ = A.nnz() - entriesToRemove; + typename Matrix::values_type::non_const_type filteredValues( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "Afiltered values"), + filteredNNZ); + typename Matrix::index_type::non_const_type filteredEntries( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "Afiltered entries"), + filteredNNZ); + typename Matrix::row_map_type::non_const_type compactFilteredRowmap( + Kokkos::view_alloc(Kokkos::WithoutInitializing, + "Afiltered rowmap (compact)"), + A.numRows() + 1); + typename Matrix::row_map_type::non_const_type filteredRowmap( + Kokkos::view_alloc(Kokkos::WithoutInitializing, "Afiltered rowmap"), + A.numRows() + 1); + // Using a parallel scan, compact the non-filtered entries and partially fill + // in the rowmap (only marking row begins for rows which were originally + // non-empty) The rest can be filled in with a max-scan. + Kokkos::ConstBitset rowEndMarkers(rowEndMarkersNonconst); + Kokkos::parallel_scan( + RangePol(0, A.nnz()), + DropEntriesFunctor(rowEndMarkers, A.graph.row_map, A.graph.entries, + A.values, compactFilteredRowmap, filteredEntries, + filteredValues, tol)); + Kokkos::parallel_scan( + RangePol(0, A.numRows() + 1), + ExpandRowmapFunctor(A.graph.row_map, compactFilteredRowmap, + filteredRowmap)); + ExecSpace().fence(); + return Matrix("A filtered", A.numRows(), A.numCols(), filteredNNZ, + filteredValues, filteredRowmap, filteredEntries); +} + template void validateCrsMatrix(int m, int n, const Rowmap &rowmapIn, const Entries &entriesIn, const Values &valuesIn) { @@ -2147,6 +2342,10 @@ void validateCrsMatrix(int m, int n, const Rowmap &rowmapIn, } } // namespace Impl + +using Impl::isCrsGraphSorted; +using Impl::removeCrsMatrixZeros; + } // namespace KokkosSparse #endif diff --git a/sparse/unit_test/Test_Sparse.hpp b/sparse/unit_test/Test_Sparse.hpp index d5fb879c64..647fff4c18 100644 --- a/sparse/unit_test/Test_Sparse.hpp +++ b/sparse/unit_test/Test_Sparse.hpp @@ -41,6 +41,7 @@ #include "Test_Sparse_TestUtils_RandCsMat.hpp" #include "Test_Sparse_ccs2crs.hpp" #include "Test_Sparse_crs2ccs.hpp" +#include "Test_Sparse_removeCrsMatrixZeros.hpp" // TPL specific tests, these require // particular pairs of backend and TPL diff --git a/sparse/unit_test/Test_Sparse_Utils.hpp b/sparse/unit_test/Test_Sparse_Utils.hpp index 1bfd33fc0d..73320e9358 100644 --- a/sparse/unit_test/Test_Sparse_Utils.hpp +++ b/sparse/unit_test/Test_Sparse_Utils.hpp @@ -18,6 +18,7 @@ #define TEST_SPARSE_UTILS_HPP #include "KokkosSparse_spmv.hpp" +#include "KokkosSparse_SortCrs.hpp" namespace Test { @@ -37,6 +38,103 @@ vector_t create_random_y_vector_mv(crsMat_t crsMat, vector_t x_vector) { return y_vector; } +template +bool is_same_matrix(crsMat_t output_mat_actual, crsMat_t output_mat_reference) { + typedef typename crsMat_t::StaticCrsGraphType graph_t; + typedef typename graph_t::row_map_type::non_const_type lno_view_t; + typedef typename graph_t::entries_type::non_const_type lno_nnz_view_t; + typedef typename crsMat_t::values_type::non_const_type scalar_view_t; + + size_t nrows_actual = output_mat_actual.numRows(); + size_t ncols_actual = output_mat_actual.numCols(); + size_t nentries_actual = output_mat_actual.graph.entries.extent(0); + size_t nvals_actual = output_mat_actual.values.extent(0); + + size_t nrows_reference = output_mat_reference.numRows(); + size_t ncols_reference = output_mat_reference.numCols(); + size_t nentries_reference = output_mat_reference.graph.entries.extent(0); + size_t nvals_reference = output_mat_reference.values.extent(0); + + if (nrows_actual != nrows_reference || ncols_actual != ncols_reference) { + std::cout << "dimensions (actual):" << nrows_actual << 'x' << ncols_actual + << ", dimensions (reference): " << nrows_reference << 'x' + << ncols_reference << '\n'; + return false; + } + if (nentries_actual != nentries_reference) { + std::cout << "nentries_actual:" << nentries_actual + << " nentries_reference:" << nentries_reference << std::endl; + return false; + } + if (nvals_actual != nvals_reference) { + std::cout << "nvals_actual:" << nvals_actual + << " nvals_reference:" << nvals_reference << std::endl; + return false; + } + + bool is_identical = true; + // Special case: a matrix with 0 rows can have a rowmap of length 0 or 1. + // Treat these as equivalent. + bool zero_row_equivalent = false; + if (nrows_reference == 0) { + auto rm1 = Kokkos::create_mirror_view_and_copy( + Kokkos::HostSpace(), output_mat_actual.graph.row_map); + auto rm2 = Kokkos::create_mirror_view_and_copy( + Kokkos::HostSpace(), output_mat_reference.graph.row_map); + if (rm1.extent_int(0) == 0 && rm2.extent_int(0) == 1) { + // Make sure the one element of rm2 is 0 + zero_row_equivalent = !rm2(0); + } else if (rm1.extent_int(0) == 1 && rm2.extent_int(0) == 0) { + // Make sure the one element of rm1 is 0 + zero_row_equivalent = !rm1(0); + } + } + if (!zero_row_equivalent) { + is_identical = KokkosKernels::Impl::kk_is_identical_view< + typename graph_t::row_map_type, typename graph_t::row_map_type, + typename lno_view_t::value_type, typename device::execution_space>( + output_mat_actual.graph.row_map, output_mat_reference.graph.row_map, 0); + } + + if (!is_identical) { + std::cout << "rowmaps are different." << std::endl; + std::cout << "Actual rowmap:\n"; + KokkosKernels::Impl::kk_print_1Dview(output_mat_actual.graph.row_map, true); + std::cout << "Correct rowmap:\n"; + KokkosKernels::Impl::kk_print_1Dview(output_mat_reference.graph.row_map, + true); + return false; + } + + is_identical = KokkosKernels::Impl::kk_is_identical_view< + lno_nnz_view_t, lno_nnz_view_t, typename lno_nnz_view_t::value_type, + typename device::execution_space>(output_mat_actual.graph.entries, + output_mat_reference.graph.entries, 0); + + if (!is_identical) { + std::cout << "entries are different." << std::endl; + KokkosKernels::Impl::kk_print_1Dview(output_mat_actual.graph.entries); + KokkosKernels::Impl::kk_print_1Dview(output_mat_reference.graph.entries); + return false; + } + + typedef typename Kokkos::Details::ArithTraits< + typename scalar_view_t::non_const_value_type>::mag_type eps_type; + eps_type eps = std::is_same::value ? 3.7e-3 : 1e-7; + + is_identical = KokkosKernels::Impl::kk_is_relatively_identical_view< + scalar_view_t, scalar_view_t, eps_type, typename device::execution_space>( + output_mat_actual.values, output_mat_reference.values, eps); + + if (!is_identical) { + std::cout << "values are different." << std::endl; + KokkosKernels::Impl::kk_print_1Dview(output_mat_actual.values); + KokkosKernels::Impl::kk_print_1Dview(output_mat_reference.values); + + return false; + } + return true; +} } // namespace Test #endif // TEST_SPARSE_UTILS_HPP diff --git a/sparse/unit_test/Test_Sparse_removeCrsMatrixZeros.hpp b/sparse/unit_test/Test_Sparse_removeCrsMatrixZeros.hpp new file mode 100644 index 0000000000..b5c57dbe49 --- /dev/null +++ b/sparse/unit_test/Test_Sparse_removeCrsMatrixZeros.hpp @@ -0,0 +1,258 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + +/// \file Test_Sparse_SortCrs.hpp +/// \brief Tests for sort_crs_matrix and sort_crs_graph in +/// KokkosSparse_SortCrs.hpp + +#ifndef KOKKOSSPARSE_REMOVECRSZEROS_HPP +#define KOKKOSSPARSE_REMOVECRSZEROS_HPP + +#include +#include +#include +#include + +namespace TestRemoveCrsMatrixZeros { + +// Simple, sequential implementation of zero-removal to compare against +template +Matrix removeMatrixZerosReference(const Matrix& A) { + using Offset = typename Matrix::non_const_size_type; + using Ordinal = typename Matrix::ordinal_type; + using Scalar = typename Matrix::value_type; + using KAT = Kokkos::ArithTraits; + auto rowmapHost = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.graph.row_map); + auto entriesHost = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.graph.entries); + auto valuesHost = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), A.values); + // First, create the filtered rowmap (the CrsMatrix constructor taking host + // pointers does expect rowmap to be in Ordinal) + Ordinal filteredNNZ = 0; + std::vector filteredRowmap = {0}; // first row begins at 0 + for (Ordinal i = 0; i < A.numRows(); i++) { + for (Offset j = rowmapHost(i); j < rowmapHost(i + 1); j++) { + if (valuesHost(j) != KAT::zero()) { + filteredNNZ++; + } + } + filteredRowmap.push_back(filteredNNZ); + } + // Then allocate and fill in the filtered entries and values + std::vector filteredEntries; + std::vector filteredValues; + for (Offset i = 0; i < A.nnz(); i++) { + if (valuesHost(i) != KAT::zero()) { + filteredEntries.push_back(entriesHost(i)); + filteredValues.push_back(valuesHost(i)); + } + } + // Copy all the views back to device and construct matrix + return Matrix("A filtered", A.numRows(), A.numCols(), filteredNNZ, + filteredValues.data(), filteredRowmap.data(), + filteredEntries.data()); +} + +template +Matrix loadMatrixFromVectors(int numRows, int numCols, + const std::vector& rowmapRawInt, + const std::vector& entriesRawInt, + const std::vector& valuesRawDouble) { + using Offset = typename Matrix::non_const_size_type; + using Ordinal = typename Matrix::ordinal_type; + using Scalar = typename Matrix::value_type; + // The CrsMatrix constructor taking host pointers expects rowmap to be in + // Ordinal + std::vector rowmapRaw; + std::vector entriesRaw; + std::vector valuesRaw; + for (auto val : rowmapRawInt) rowmapRaw.push_back(val); + for (auto val : entriesRawInt) entriesRaw.push_back(val); + for (auto val : valuesRawDouble) valuesRaw.push_back(Scalar(val)); + Offset nnz = rowmapRaw.size() ? rowmapRaw[numRows] : 0; + return Matrix("A", numRows, numCols, nnz, valuesRaw.data(), rowmapRaw.data(), + entriesRaw.data()); +} + +template +void getTestInput(int test, Matrix& A, Matrix& Afiltered_ref) { + using Offset = typename Matrix::size_type; + using Device = + Kokkos::Device; + bool haveHardcodedReference = true; + switch (test) { + case 0: { + // No entries, but nonzero dimensions. + std::vector rowmap = {0, 0, 0, 0, 0}; + std::vector entries; + std::vector values; + A = loadMatrixFromVectors(4, 4, rowmap, entries, values); + Afiltered_ref = + loadMatrixFromVectors(4, 4, rowmap, entries, values); + break; + } + case 1: { + // Some empty rows, and some zero values + std::vector rowmap = {0, 0, 3, 3, 5}; + std::vector entries = {0, 1, 3, 1, 2}; + std::vector values = {1, 3, 0, 0, 2}; + A = loadMatrixFromVectors(4, 4, rowmap, entries, values); + std::vector rowmapFilt = {0, 0, 2, 2, 3}; + std::vector entriesFilt = {0, 1, 2}; + std::vector valuesFilt = {1, 3, 2}; + Afiltered_ref = loadMatrixFromVectors(4, 4, rowmapFilt, + entriesFilt, valuesFilt); + break; + } + case 2: { + // Zero-row matrix, length-0 rowmap + typename Matrix::row_map_type rowmap; + typename Matrix::index_type entries; + typename Matrix::values_type values; + A = Matrix("A empty", 0, 0, 0, values, rowmap, entries); + Afiltered_ref = A; + break; + } + case 3: { + // Zero-row matrix, length-1 rowmap + std::vector rowmap = {0}; + std::vector entries; + std::vector values; + A = loadMatrixFromVectors(0, 0, rowmap, entries, values); + Afiltered_ref = A; + break; + } + case 4: { + // A row of all zeros that will be filtered + std::vector rowmap = {0, 3, 6}; + std::vector entries = {0, 1, 2, 3, 4, 5}; + std::vector values = {0, 0, 0, 1, 1, 1}; + A = loadMatrixFromVectors(2, 6, rowmap, entries, values); + std::vector rowmapFilt = {0, 0, 3}; + std::vector entriesFilt = {3, 4, 5}; + std::vector valuesFilt = {1, 1, 1}; + Afiltered_ref = loadMatrixFromVectors(2, 6, rowmapFilt, + entriesFilt, valuesFilt); + break; + } + case 5: { + // One zero in each row that will be filtered + std::vector rowmap = {0, 2, 4, 7}; + std::vector entries = {0, 1, 1, 2, 0, 1, 2}; + std::vector values = {0, 1, 1, 0, 0, 3, -3}; + A = loadMatrixFromVectors(3, 3, rowmap, entries, values); + std::vector rowmapFilt = {0, 1, 2, 4}; + std::vector entriesFilt = {1, 1, 1, 2}; + std::vector valuesFilt = {1, 1, 3, -3}; + Afiltered_ref = loadMatrixFromVectors(3, 3, rowmapFilt, + entriesFilt, valuesFilt); + break; + } + case 6: { + // First and last rows empty + std::vector rowmap = {0, 0, 2, 2}; + std::vector entries = {0, 1}; + std::vector values = {0, 3.14}; + A = loadMatrixFromVectors(3, 2, rowmap, entries, values); + std::vector rowmapFilt = {0, 0, 1, 1}; + std::vector entriesFilt = {1}; + std::vector valuesFilt = {3.14}; + Afiltered_ref = loadMatrixFromVectors(3, 2, rowmapFilt, + entriesFilt, valuesFilt); + break; + } + case 7: { + // First and last rows nonempty, but will be empty after filtering + std::vector rowmap = {0, 2, 4, 6}; + std::vector entries = {0, 1, 1, 2, 0, 3}; + std::vector values = {0, 0, 1, -1, 0, 0}; + A = loadMatrixFromVectors(3, 4, rowmap, entries, values); + std::vector rowmapFilt = {0, 0, 2, 2}; + std::vector entriesFilt = {1, 2}; + std::vector valuesFilt = {1, -1}; + Afiltered_ref = loadMatrixFromVectors(3, 4, rowmapFilt, + entriesFilt, valuesFilt); + break; + } + case 8: { + // Large, random matrix with 30% of values converted to zero + Offset nnz = 40 * 10000; + A = KokkosSparse::Impl::kk_generate_sparse_matrix(10000, 10000, + nnz, 10, 5000); + auto valuesHost = Kokkos::create_mirror_view(A.values); + Kokkos::deep_copy(valuesHost, A.values); + for (Offset i = 0; i < A.nnz(); i++) { + if (rand() % 10 < 3) valuesHost(i) = 0.0; + } + Kokkos::deep_copy(A.values, valuesHost); + Afiltered_ref = removeMatrixZerosReference(A); + haveHardcodedReference = false; + break; + } + case 9: { + // Large, sparser random matrix with 99% of values converted to zero + Offset nnz = 10 * 40000; + A = KokkosSparse::Impl::kk_generate_sparse_matrix(40000, 40000, + nnz, 10, 10000); + auto valuesHost = Kokkos::create_mirror_view(A.values); + Kokkos::deep_copy(valuesHost, A.values); + for (Offset i = 0; i < A.nnz(); i++) { + if (rand() % 100 != 99) valuesHost(i) = 0.0; + } + Kokkos::deep_copy(A.values, valuesHost); + Afiltered_ref = removeMatrixZerosReference(A); + haveHardcodedReference = false; + break; + } + default: throw std::invalid_argument("Test case number of out bounds"); + } + // If we have a hardcoded reference, check that the reference impl is correct + // on this case + if (haveHardcodedReference) { + Matrix Afiltered_refimpl = removeMatrixZerosReference(A); + bool referenceImplMatchesHardcoded = + Test::is_same_matrix(Afiltered_ref, Afiltered_refimpl); + ASSERT_TRUE(referenceImplMatchesHardcoded) + << "Test case " << test << ": reference impl gave wrong answer!"; + } +} + +} // namespace TestRemoveCrsMatrixZeros + +void testRemoveCrsMatrixZeros(int testCase) { + using namespace TestRemoveCrsMatrixZeros; + using Device = + Kokkos::Device; + using Matrix = KokkosSparse::CrsMatrix; + Matrix A, Afiltered_ref; + getTestInput(testCase, A, Afiltered_ref); + Matrix Afiltered_actual = KokkosSparse::removeCrsMatrixZeros(A); + bool matches = + Test::is_same_matrix(Afiltered_actual, Afiltered_ref); + EXPECT_TRUE(matches) + << "Test case " << testCase + << ": matrix with zeros filtered out does not match reference."; +} + +TEST_F(TestCategory, sparse_remove_crs_zeros) { + for (int testCase = 0; testCase < 10; testCase++) + testRemoveCrsMatrixZeros(testCase); +} + +#endif // KOKKOSSPARSE_REMOVECRSZEROS_HPP diff --git a/sparse/unit_test/Test_Sparse_spgemm.hpp b/sparse/unit_test/Test_Sparse_spgemm.hpp index 4cb225b97d..4d53b1e126 100644 --- a/sparse/unit_test/Test_Sparse_spgemm.hpp +++ b/sparse/unit_test/Test_Sparse_spgemm.hpp @@ -19,6 +19,8 @@ #include "KokkosSparse_Utils.hpp" #include "KokkosSparse_SortCrs.hpp" +// For Test::is_same_matrix +#include "Test_Sparse_Utils.hpp" #include #include @@ -203,86 +205,6 @@ int run_spgemm_old_interface(crsMat_t A, crsMat_t B, kh.destroy_spgemm_handle(); return 0; } - -template -bool is_same_matrix(crsMat_t output_mat_actual, crsMat_t output_mat_reference) { - typedef typename crsMat_t::StaticCrsGraphType graph_t; - typedef typename graph_t::row_map_type::non_const_type lno_view_t; - typedef typename graph_t::entries_type::non_const_type lno_nnz_view_t; - typedef typename crsMat_t::values_type::non_const_type scalar_view_t; - - size_t nrows_actual = output_mat_actual.numRows(); - size_t nentries_actual = output_mat_actual.graph.entries.extent(0); - size_t nvals_actual = output_mat_actual.values.extent(0); - - size_t nrows_reference = output_mat_reference.numRows(); - size_t nentries_reference = output_mat_reference.graph.entries.extent(0); - size_t nvals_reference = output_mat_reference.values.extent(0); - - if (nrows_actual != nrows_reference) { - std::cout << "nrows_actual:" << nrows_actual - << " nrows_reference:" << nrows_reference << std::endl; - return false; - } - if (nentries_actual != nentries_reference) { - std::cout << "nentries_actual:" << nentries_actual - << " nentries_reference:" << nentries_reference << std::endl; - return false; - } - if (nvals_actual != nvals_reference) { - std::cout << "nvals_actual:" << nvals_actual - << " nvals_reference:" << nvals_reference << std::endl; - return false; - } - - // Do not sort the actual product matrix - test that it's already sorted - KokkosSparse::sort_crs_matrix(output_mat_reference); - - bool is_identical = true; - is_identical = KokkosKernels::Impl::kk_is_identical_view< - typename graph_t::row_map_type, typename graph_t::row_map_type, - typename lno_view_t::value_type, typename device::execution_space>( - output_mat_actual.graph.row_map, output_mat_reference.graph.row_map, 0); - - if (!is_identical) { - std::cout << "rowmaps are different." << std::endl; - std::cout << "Actual rowmap:\n"; - KokkosKernels::Impl::kk_print_1Dview(output_mat_actual.graph.row_map, true); - std::cout << "Correct rowmap (SPGEMM_DEBUG):\n"; - KokkosKernels::Impl::kk_print_1Dview(output_mat_reference.graph.row_map, - true); - return false; - } - - is_identical = KokkosKernels::Impl::kk_is_identical_view< - lno_nnz_view_t, lno_nnz_view_t, typename lno_nnz_view_t::value_type, - typename device::execution_space>(output_mat_actual.graph.entries, - output_mat_reference.graph.entries, 0); - - if (!is_identical) { - std::cout << "entries are different." << std::endl; - KokkosKernels::Impl::kk_print_1Dview(output_mat_actual.graph.entries); - KokkosKernels::Impl::kk_print_1Dview(output_mat_reference.graph.entries); - return false; - } - - typedef typename Kokkos::Details::ArithTraits< - typename scalar_view_t::non_const_value_type>::mag_type eps_type; - eps_type eps = std::is_same::value ? 3.7e-3 : 1e-7; - - is_identical = KokkosKernels::Impl::kk_is_relatively_identical_view< - scalar_view_t, scalar_view_t, eps_type, typename device::execution_space>( - output_mat_actual.values, output_mat_reference.values, eps); - - if (!is_identical) { - std::cout << "values are different." << std::endl; - KokkosKernels::Impl::kk_print_1Dview(output_mat_actual.values); - KokkosKernels::Impl::kk_print_1Dview(output_mat_reference.values); - - return false; - } - return true; -} } // namespace Test // Generate matrices and test all supported spgemm algorithms. From c8c7d7f6ca80a0693bf1648a7881d5c3f7206af7 Mon Sep 17 00:00:00 2001 From: Luc Berger Date: Wed, 15 Feb 2023 09:37:14 -0700 Subject: [PATCH 219/226] Merge pull request #1615 from lucbv/gemm_mixed_scalars Gemm mixed scalars (cherry picked from commit d2386da9110098eeec7af391652696d72d29c069) --- blas/src/KokkosBlas1_dot.hpp | 8 +- blas/src/KokkosBlas1_nrm1.hpp | 16 ++- blas/src/KokkosBlas1_nrm2_squared.hpp | 3 +- blas/src/KokkosBlas1_nrm2w_squared.hpp | 3 +- blas/unit_test/Test_Blas1_axpby.hpp | 69 +++++++---- blas/unit_test/Test_Blas1_axpy.hpp | 65 +++++----- blas/unit_test/Test_Blas1_dot.hpp | 75 +++++++----- blas/unit_test/Test_Blas1_iamax.hpp | 42 ++++--- blas/unit_test/Test_Blas1_mult.hpp | 110 +++++++++-------- blas/unit_test/Test_Blas1_nrm1.hpp | 20 ++-- blas/unit_test/Test_Blas1_nrm2.hpp | 42 ++++--- blas/unit_test/Test_Blas1_nrm2w.hpp | 42 ++++--- blas/unit_test/Test_Blas1_nrm2w_squared.hpp | 42 ++++--- blas/unit_test/Test_Blas1_nrminf.hpp | 40 ++++--- blas/unit_test/Test_Blas1_reciprocal.hpp | 76 ++++++------ blas/unit_test/Test_Blas1_scal.hpp | 83 +++++++------ blas/unit_test/Test_Blas1_sum.hpp | 42 ++++--- blas/unit_test/Test_Blas1_team_update.hpp | 4 +- blas/unit_test/Test_Blas1_update.hpp | 113 ++++++++++-------- blas/unit_test/Test_Blas2_gemv.hpp | 58 +++++---- blas/unit_test/Test_Blas2_gemv_util.hpp | 2 +- blas/unit_test/Test_Blas3_gemm.hpp | 40 +++++++ .../KokkosSparse_par_ilut_numeric_impl.hpp | 8 +- sparse/unit_test/Test_Sparse_spmv.hpp | 4 +- sparse/unit_test/Test_Sparse_spmv_bsr.hpp | 18 ++- 25 files changed, 572 insertions(+), 453 deletions(-) diff --git a/blas/src/KokkosBlas1_dot.hpp b/blas/src/KokkosBlas1_dot.hpp index 6d87a70a08..4a5a18b976 100644 --- a/blas/src/KokkosBlas1_dot.hpp +++ b/blas/src/KokkosBlas1_dot.hpp @@ -75,11 +75,11 @@ dot(const XVector& x, const YVector& y) { using result_type = typename KokkosBlas::Impl::DotAccumulatingScalar::type; using RVector_Internal = - Kokkos::View>; + Kokkos::View>; using RVector_Result = - Kokkos::View>; + Kokkos::View>; result_type result{}; RVector_Result R = RVector_Result(&result); diff --git a/blas/src/KokkosBlas1_nrm1.hpp b/blas/src/KokkosBlas1_nrm1.hpp index 9481cd9472..62f373d7b8 100644 --- a/blas/src/KokkosBlas1_nrm1.hpp +++ b/blas/src/KokkosBlas1_nrm1.hpp @@ -39,19 +39,17 @@ nrm1(const XVector& x) { static_assert(XVector::rank == 1, "KokkosBlas::nrm1: " "Both Vector inputs must have rank 1."); - typedef typename Kokkos::Details::InnerProductSpaceTraits< - typename XVector::non_const_value_type>::mag_type mag_type; + using mag_type = typename Kokkos::Details::InnerProductSpaceTraits< + typename XVector::non_const_value_type>::mag_type; - typedef Kokkos::View< + using XVector_Internal = Kokkos::View< typename XVector::const_value_type*, typename KokkosKernels::Impl::GetUnifiedLayout::array_layout, - typename XVector::device_type, Kokkos::MemoryTraits > - XVector_Internal; + typename XVector::device_type, Kokkos::MemoryTraits >; - typedef Kokkos::View > - RVector_Internal; + using RVector_Internal = + Kokkos::View >; mag_type result; RVector_Internal R = RVector_Internal(&result); diff --git a/blas/src/KokkosBlas1_nrm2_squared.hpp b/blas/src/KokkosBlas1_nrm2_squared.hpp index 8f053fad47..3a584c8a99 100644 --- a/blas/src/KokkosBlas1_nrm2_squared.hpp +++ b/blas/src/KokkosBlas1_nrm2_squared.hpp @@ -49,8 +49,7 @@ nrm2_squared(const XVector& x) { typename XVector::device_type, Kokkos::MemoryTraits > XVector_Internal; - typedef Kokkos::View > RVector_Internal; diff --git a/blas/src/KokkosBlas1_nrm2w_squared.hpp b/blas/src/KokkosBlas1_nrm2w_squared.hpp index eb0e95ba79..d39dfb0432 100644 --- a/blas/src/KokkosBlas1_nrm2w_squared.hpp +++ b/blas/src/KokkosBlas1_nrm2w_squared.hpp @@ -49,8 +49,7 @@ nrm2w_squared(const XVector& x, const XVector& w) { typename XVector::device_type, Kokkos::MemoryTraits > XVector_Internal; - typedef Kokkos::View > RVector_Internal; diff --git a/blas/unit_test/Test_Blas1_axpby.hpp b/blas/unit_test/Test_Blas1_axpby.hpp index 5ba19c7ce5..79a244fc6e 100644 --- a/blas/unit_test/Test_Blas1_axpby.hpp +++ b/blas/unit_test/Test_Blas1_axpby.hpp @@ -23,27 +23,33 @@ namespace Test { template void impl_test_axpby(int N) { - typedef typename ViewTypeA::value_type ScalarA; - typedef typename ViewTypeB::value_type ScalarB; + using ScalarA = typename ViewTypeA::value_type; + using ScalarB = typename ViewTypeB::value_type; + using MagnitudeB = typename Kokkos::ArithTraits::mag_type; - typedef Kokkos::View< + using BaseTypeA = Kokkos::View< ScalarA * [2], typename std::conditional::value, Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, - Device> - BaseTypeA; - typedef Kokkos::View< + Device>; + using BaseTypeB = Kokkos::View< ScalarB * [2], typename std::conditional::value, Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, - Device> - BaseTypeB; - - ScalarA a = 3; - ScalarB b = 5; - double eps = std::is_same::value ? 2 * 1e-5 : 1e-7; + Device>; + + ScalarA a = 3; + ScalarB b = 5; + // eps should probably be based on ScalarB since that is the type + // in which the result is computed. + const MagnitudeB eps = Kokkos::ArithTraits::epsilon(); + const MagnitudeB max_val = 10; + const MagnitudeB max_error = + (static_cast(Kokkos::ArithTraits::abs(a)) + + Kokkos::ArithTraits::abs(b)) * + max_val * eps; BaseTypeA b_x("X", N); BaseTypeB b_y("Y", N); @@ -67,12 +73,12 @@ void impl_test_axpby(int N) { { ScalarA randStart, randEnd; - Test::getRandomBounds(10.0, randStart, randEnd); + Test::getRandomBounds(max_val, randStart, randEnd); Kokkos::fill_random(b_x, rand_pool, randStart, randEnd); } { ScalarB randStart, randEnd; - Test::getRandomBounds(10.0, randStart, randEnd); + Test::getRandomBounds(max_val, randStart, randEnd); Kokkos::fill_random(b_y, rand_pool, randStart, randEnd); } @@ -85,7 +91,8 @@ void impl_test_axpby(int N) { KokkosBlas::axpby(a, x, b, y); Kokkos::deep_copy(h_b_y, b_y); for (int i = 0; i < N; i++) { - EXPECT_NEAR_KK(a * h_x(i) + b * h_b_org_y(i, 0), h_y(i), eps); + EXPECT_NEAR_KK(static_cast(a * h_x(i) + b * h_b_org_y(i, 0)), + h_y(i), 2 * max_error); } Kokkos::deep_copy(b_y, b_org_y); @@ -93,14 +100,16 @@ void impl_test_axpby(int N) { KokkosBlas::axpby(a, c_x, b, y); Kokkos::deep_copy(h_b_y, b_y); for (int i = 0; i < N; i++) { - EXPECT_NEAR_KK(a * h_x(i) + b * h_b_org_y(i, 0), h_y(i), eps); + EXPECT_NEAR_KK(static_cast(a * h_x(i) + b * h_b_org_y(i, 0)), + h_y(i), 2 * max_error); } } template void impl_test_axpby_mv(int N, int K) { - typedef typename ViewTypeA::value_type ScalarA; - typedef typename ViewTypeB::value_type ScalarB; + using ScalarA = typename ViewTypeA::value_type; + using ScalarB = typename ViewTypeB::value_type; + using MagnitudeB = typename Kokkos::ArithTraits::mag_type; typedef multivector_layout_adapter vfA_type; typedef multivector_layout_adapter vfB_type; @@ -121,6 +130,15 @@ void impl_test_axpby_mv(int N, int K) { typename ViewTypeA::HostMirror h_x = h_vfA_type::view(h_b_x); typename ViewTypeB::HostMirror h_y = h_vfB_type::view(h_b_y); + ScalarA a = 3; + ScalarB b = 5; + const MagnitudeB eps = Kokkos::ArithTraits::epsilon(); + const MagnitudeB max_val = 10; + const MagnitudeB max_error = + (static_cast(Kokkos::ArithTraits::abs(a)) + + Kokkos::ArithTraits::abs(b)) * + max_val * eps; + Kokkos::Random_XorShift64_Pool rand_pool( 13718); @@ -136,18 +154,15 @@ void impl_test_axpby_mv(int N, int K) { } Kokkos::deep_copy(b_org_y, b_y); - auto h_b_org_y = - Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), b_org_y); + ViewTypeB org_y = vfB_type::view(b_org_y); + auto h_org_y = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), org_y); Kokkos::deep_copy(h_b_x, b_x); Kokkos::deep_copy(h_b_y, b_y); - ScalarA a = 3; - ScalarB b = 5; typename ViewTypeA::const_type c_x = x; - double eps = std::is_same::value ? 2 * 1e-5 : 1e-7; - Kokkos::View r("Dot::Result", K); KokkosBlas::axpby(a, x, b, y); @@ -155,7 +170,8 @@ void impl_test_axpby_mv(int N, int K) { for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { - EXPECT_NEAR_KK(a * h_x(i, j) + b * h_b_org_y(i, j), h_y(i, j), eps); + EXPECT_NEAR_KK(static_cast(a * h_x(i, j) + b * h_org_y(i, j)), + h_y(i, j), 2 * max_error); } } @@ -165,7 +181,8 @@ void impl_test_axpby_mv(int N, int K) { for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { - EXPECT_NEAR_KK(a * h_x(i, j) + b * h_b_org_y(i, j), h_y(i, j), eps); + EXPECT_NEAR_KK(static_cast(a * h_x(i, j) + b * h_org_y(i, j)), + h_y(i, j), 2 * max_error); } } } diff --git a/blas/unit_test/Test_Blas1_axpy.hpp b/blas/unit_test/Test_Blas1_axpy.hpp index 35293652b5..890e116584 100644 --- a/blas/unit_test/Test_Blas1_axpy.hpp +++ b/blas/unit_test/Test_Blas1_axpy.hpp @@ -23,28 +23,30 @@ namespace Test { template void impl_test_axpy(int N) { - typedef typename ViewTypeA::value_type ScalarA; - typedef typename ViewTypeB::value_type ScalarB; + using ScalarA = typename ViewTypeA::value_type; + using ScalarB = typename ViewTypeB::value_type; + using MagnitudeB = typename Kokkos::ArithTraits::mag_type; - typedef Kokkos::View< + using BaseTypeA = Kokkos::View< ScalarA * [2], typename std::conditional::value, Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, - Device> - BaseTypeA; - typedef Kokkos::View< + Device>; + using BaseTypeB = Kokkos::View< ScalarB * [2], typename std::conditional::value, Kokkos::LayoutRight, Kokkos::LayoutLeft>::type, - Device> - BaseTypeB; + Device>; - using MagnitudeA = typename Kokkos::ArithTraits::mag_type; - - ScalarA a = 3; - double eps = std::is_same::value ? 2e-5 : 1e-7; + ScalarA a = 3; + const MagnitudeB max_val = 10; + const MagnitudeB eps = Kokkos::ArithTraits::epsilon(); + const MagnitudeB max_error = + (static_cast(Kokkos::ArithTraits::abs(a)) * max_val + + max_val) * + eps; BaseTypeA b_x("X", N); BaseTypeB b_y("Y", N); @@ -66,12 +68,12 @@ void impl_test_axpy(int N) { { ScalarA randStart, randEnd; - Test::getRandomBounds(10.0, randStart, randEnd); + Test::getRandomBounds(max_val, randStart, randEnd); Kokkos::fill_random(x, rand_pool, randStart, randEnd); } { ScalarB randStart, randEnd; - Test::getRandomBounds(10.0, randStart, randEnd); + Test::getRandomBounds(max_val, randStart, randEnd); Kokkos::fill_random(y, rand_pool, randStart, randEnd); } @@ -86,7 +88,7 @@ void impl_test_axpy(int N) { for (int i = 0; i < N; i++) { ScalarB expected = a * h_x(i) + h_b_org_y(i, 0); - EXPECT_NEAR_KK(expected, h_y(i), eps); + EXPECT_NEAR_KK(expected, h_y(i), 2 * max_error); } // reset y to orig, and run again with const-valued x @@ -95,14 +97,15 @@ void impl_test_axpy(int N) { Kokkos::deep_copy(h_b_y, b_y); for (int i = 0; i < N; i++) { ScalarB expected = a * h_x(i) + h_b_org_y(i, 0); - EXPECT_NEAR_KK(expected, h_y(i), eps); + EXPECT_NEAR_KK(expected, h_y(i), 2 * max_error); } } template void impl_test_axpy_mv(int N, int K) { - typedef typename ViewTypeA::value_type ScalarA; - typedef typename ViewTypeB::value_type ScalarB; + using ScalarA = typename ViewTypeA::value_type; + using ScalarB = typename ViewTypeB::value_type; + using MagnitudeB = typename Kokkos::ArithTraits::mag_type; typedef multivector_layout_adapter vfA_type; typedef multivector_layout_adapter vfB_type; @@ -123,37 +126,44 @@ void impl_test_axpy_mv(int N, int K) { typename ViewTypeA::HostMirror h_x = h_vfA_type::view(h_b_x); typename ViewTypeB::HostMirror h_y = h_vfB_type::view(h_b_y); + ScalarA a = 3; + const MagnitudeB eps = Kokkos::ArithTraits::epsilon(); + const MagnitudeB max_val = 10; + const MagnitudeB max_error = + (static_cast(Kokkos::ArithTraits::abs(a)) * max_val + + max_val) * + eps; + Kokkos::Random_XorShift64_Pool rand_pool( 13718); { ScalarA randStart, randEnd; - Test::getRandomBounds(10.0, randStart, randEnd); + Test::getRandomBounds(max_val, randStart, randEnd); Kokkos::fill_random(b_x, rand_pool, randStart, randEnd); } { ScalarB randStart, randEnd; - Test::getRandomBounds(10.0, randStart, randEnd); + Test::getRandomBounds(max_val, randStart, randEnd); Kokkos::fill_random(b_y, rand_pool, randStart, randEnd); } Kokkos::deep_copy(b_org_y, b_y); - auto h_b_org_y = - Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), b_org_y); + ViewTypeB org_y = vfB_type::view(b_org_y); + auto h_org_y = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), org_y); Kokkos::deep_copy(h_b_x, b_x); Kokkos::deep_copy(h_b_y, b_y); - ScalarA a = 3; typename ViewTypeA::const_type c_x = x; - double eps = std::is_same::value ? 2 * 1e-5 : 1e-7; - KokkosBlas::axpy(a, x, y); Kokkos::deep_copy(h_b_y, b_y); for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { - EXPECT_NEAR_KK(a * h_x(i, j) + h_b_org_y(i, j), h_y(i, j), eps); + EXPECT_NEAR_KK(static_cast(a * h_x(i, j) + h_org_y(i, j)), + h_y(i, j), 2 * max_error); } } @@ -162,7 +172,8 @@ void impl_test_axpy_mv(int N, int K) { Kokkos::deep_copy(h_b_y, b_y); for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { - EXPECT_NEAR_KK(a * h_x(i, j) + h_b_org_y(i, j), h_y(i, j), eps); + EXPECT_NEAR_KK(static_cast(a * h_x(i, j) + h_org_y(i, j)), + h_y(i, j), 2 * max_error); } } } diff --git a/blas/unit_test/Test_Blas1_dot.hpp b/blas/unit_test/Test_Blas1_dot.hpp index 044a9765d2..b2dfc1bd41 100644 --- a/blas/unit_test/Test_Blas1_dot.hpp +++ b/blas/unit_test/Test_Blas1_dot.hpp @@ -185,22 +185,26 @@ int test_dot() { // Test::impl_test_dot(132231); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - Test::impl_test_dot(0); - Test::impl_test_dot(13); - Test::impl_test_dot(1024); - // Test::impl_test_dot(132231); -#endif - -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - Test::impl_test_dot(1024); - Test::impl_test_dot(1024); -#endif + // Removing the layout stride test as ViewTypeA a("a", N); + // is invalid since the view constructor needs a stride object! + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + typedef Kokkos::View view_type_b_ls; + Test::impl_test_dot(0); + Test::impl_test_dot(13); + Test::impl_test_dot(1024); + // Test::impl_test_dot(132231); + #endif + + #if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + Test::impl_test_dot(1024); + Test::impl_test_dot(1024); + #endif + */ return 1; } @@ -231,23 +235,28 @@ int test_dot_mv() { // Test::impl_test_dot_mv(132231,5); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - Test::impl_test_dot_mv(0, 5); - Test::impl_test_dot_mv(13, 5); - Test::impl_test_dot_mv(1024, 5); - Test::impl_test_dot_mv(789, 1); - // Test::impl_test_dot_mv(132231,5); -#endif - -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - Test::impl_test_dot_mv(1024, 5); - Test::impl_test_dot_mv(1024, 5); -#endif + // Removing the layout stride test as ViewTypeA a("a", N); + // is invalid since the view constructor needs a stride object! + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View + view_type_a_ls; typedef Kokkos::View + view_type_b_ls; Test::impl_test_dot_mv(0, 5); Test::impl_test_dot_mv(13, 5); Test::impl_test_dot_mv(1024, 5); Test::impl_test_dot_mv(789, 1); + // Test::impl_test_dot_mv(132231,5); + #endif + + #if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + Test::impl_test_dot_mv(1024, 5); + Test::impl_test_dot_mv(1024, 5); + #endif + */ return 1; } diff --git a/blas/unit_test/Test_Blas1_iamax.hpp b/blas/unit_test/Test_Blas1_iamax.hpp index 1619512ceb..ced1759301 100644 --- a/blas/unit_test/Test_Blas1_iamax.hpp +++ b/blas/unit_test/Test_Blas1_iamax.hpp @@ -27,7 +27,7 @@ void impl_test_iamax(int N) { typedef typename AT::mag_type mag_type; using size_type = typename ViewTypeA::size_type; - ViewTypeA a("a", N); + ViewTypeA a("A", N); typename ViewTypeA::HostMirror h_a = Kokkos::create_mirror_view(a); @@ -240,15 +240,17 @@ int test_iamax() { // Test::impl_test_iamax(132231); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - Test::impl_test_iamax(0); - Test::impl_test_iamax(13); - Test::impl_test_iamax(1024); - // Test::impl_test_iamax(132231); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + Test::impl_test_iamax(0); + Test::impl_test_iamax(13); + Test::impl_test_iamax(1024); + // Test::impl_test_iamax(132231); + #endif + */ return 1; } @@ -275,15 +277,17 @@ int test_iamax_mv() { // Test::impl_test_iamax_mv(132231,5); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - Test::impl_test_iamax_mv(0, 5); - Test::impl_test_iamax_mv(13, 5); - Test::impl_test_iamax_mv(1024, 5); - // Test::impl_test_iamax_mv(132231,5); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View + view_type_a_ls; Test::impl_test_iamax_mv(0, 5); + Test::impl_test_iamax_mv(13, 5); + Test::impl_test_iamax_mv(1024, 5); + // Test::impl_test_iamax_mv(132231,5); + #endif + */ return 1; } diff --git a/blas/unit_test/Test_Blas1_mult.hpp b/blas/unit_test/Test_Blas1_mult.hpp index c922cb295f..3c027f26e7 100644 --- a/blas/unit_test/Test_Blas1_mult.hpp +++ b/blas/unit_test/Test_Blas1_mult.hpp @@ -74,21 +74,24 @@ void impl_test_mult(int N) { KokkosBlas::mult(b, z, a, x, y); Kokkos::deep_copy(h_z, z); for (int i = 0; i < N; i++) { - EXPECT_NEAR_KK(a * h_x(i) * h_y(i) + b * h_b_org_z(i), h_z(i), eps); + EXPECT_NEAR_KK(static_cast(a * h_x(i) * h_y(i) + b * h_b_org_z(i)), + h_z(i), eps); } Kokkos::deep_copy(z, b_org_z); KokkosBlas::mult(b, z, a, x, c_y); Kokkos::deep_copy(h_z, z); for (int i = 0; i < N; i++) { - EXPECT_NEAR_KK(a * h_x(i) * h_y(i) + b * h_b_org_z(i), h_z(i), eps); + EXPECT_NEAR_KK(static_cast(a * h_x(i) * h_y(i) + b * h_b_org_z(i)), + h_z(i), eps); } Kokkos::deep_copy(z, b_org_z); KokkosBlas::mult(b, z, a, c_x, c_y); Kokkos::deep_copy(h_z, z); for (int i = 0; i < N; i++) { - EXPECT_NEAR_KK(a * h_x(i) * h_y(i) + b * h_b_org_z(i), h_z(i), eps); + EXPECT_NEAR_KK(static_cast(a * h_x(i) * h_y(i) + b * h_b_org_z(i)), + h_z(i), eps); } } @@ -157,8 +160,9 @@ void impl_test_mult_mv(int N, int K) { Kokkos::deep_copy(h_b_z, b_z); for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { - EXPECT_NEAR_KK(a * h_x(i) * h_y(i, j) + b * h_b_org_z(i, j), h_z(i, j), - eps); + EXPECT_NEAR_KK( + static_cast(a * h_x(i) * h_y(i, j) + b * h_b_org_z(i, j)), + h_z(i, j), eps); } } @@ -167,8 +171,9 @@ void impl_test_mult_mv(int N, int K) { Kokkos::deep_copy(h_b_z, b_z); for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { - EXPECT_NEAR_KK(a * h_x(i) * h_y(i, j) + b * h_b_org_z(i, j), h_z(i, j), - eps); + EXPECT_NEAR_KK( + static_cast(a * h_x(i) * h_y(i, j) + b * h_b_org_z(i, j)), + h_z(i, j), eps); } } } @@ -208,29 +213,27 @@ int test_mult() { // Device>(132231); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - typedef Kokkos::View view_type_c_ls; - Test::impl_test_mult( - 0); - Test::impl_test_mult( - 13); - Test::impl_test_mult( - 1024); - // Test::impl_test_mult(132231); -#endif - -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - Test::impl_test_mult( - 1024); - Test::impl_test_mult( - 1024); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + typedef Kokkos::View view_type_b_ls; + typedef Kokkos::View view_type_c_ls; + Test::impl_test_mult( 0); Test::impl_test_mult( 13); Test::impl_test_mult( 1024); + // Test::impl_test_mult(132231); + #endif + + #if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + Test::impl_test_mult( 1024); Test::impl_test_mult( 1024); #endif + */ return 1; } @@ -269,29 +272,30 @@ int test_mult_mv() { // Device>(132231,5); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - typedef Kokkos::View view_type_c_ls; - Test::impl_test_mult_mv(0, 5); - Test::impl_test_mult_mv(13, 5); - Test::impl_test_mult_mv(1024, 5); - // Test::impl_test_mult_mv(132231,5); -#endif - -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - Test::impl_test_mult_mv(1024, 5); - Test::impl_test_mult_mv(1024, 5); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + typedef Kokkos::View + view_type_b_ls; typedef Kokkos::View + view_type_c_ls; Test::impl_test_mult_mv(0, 5); Test::impl_test_mult_mv(13, 5); + Test::impl_test_mult_mv(1024, 5); + // Test::impl_test_mult_mv(132231,5); + #endif + + #if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + Test::impl_test_mult_mv(1024, 5); + Test::impl_test_mult_mv(1024, 5); + #endif + */ return 1; } diff --git a/blas/unit_test/Test_Blas1_nrm1.hpp b/blas/unit_test/Test_Blas1_nrm1.hpp index 7b56dc94b3..b64aab9c3c 100644 --- a/blas/unit_test/Test_Blas1_nrm1.hpp +++ b/blas/unit_test/Test_Blas1_nrm1.hpp @@ -143,15 +143,17 @@ int test_nrm1() { Test::impl_test_nrm1(132231); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - Test::impl_test_nrm1(0); - Test::impl_test_nrm1(13); - Test::impl_test_nrm1(1024); - Test::impl_test_nrm1(132231); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + Test::impl_test_nrm1(0); + Test::impl_test_nrm1(13); + Test::impl_test_nrm1(1024); + Test::impl_test_nrm1(132231); + #endif + */ return 1; } diff --git a/blas/unit_test/Test_Blas1_nrm2.hpp b/blas/unit_test/Test_Blas1_nrm2.hpp index 5cbc89488e..d17c9af505 100644 --- a/blas/unit_test/Test_Blas1_nrm2.hpp +++ b/blas/unit_test/Test_Blas1_nrm2.hpp @@ -139,15 +139,17 @@ int test_nrm2() { // Test::impl_test_nrm2(132231); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - Test::impl_test_nrm2(0); - Test::impl_test_nrm2(13); - Test::impl_test_nrm2(1024); - // Test::impl_test_nrm2(132231); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + Test::impl_test_nrm2(0); + Test::impl_test_nrm2(13); + Test::impl_test_nrm2(1024); + // Test::impl_test_nrm2(132231); + #endif + */ return 1; } @@ -176,16 +178,18 @@ int test_nrm2_mv() { // Test::impl_test_nrm2_mv(132231,5); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - Test::impl_test_nrm2_mv(0, 5); - Test::impl_test_nrm2_mv(13, 5); - Test::impl_test_nrm2_mv(1024, 5); - Test::impl_test_nrm2_mv(789, 1); - // Test::impl_test_nrm2_mv(132231,5); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View + view_type_a_ls; Test::impl_test_nrm2_mv(0, 5); + Test::impl_test_nrm2_mv(13, 5); + Test::impl_test_nrm2_mv(1024, 5); + Test::impl_test_nrm2_mv(789, 1); + // Test::impl_test_nrm2_mv(132231,5); + #endif + */ return 1; } diff --git a/blas/unit_test/Test_Blas1_nrm2w.hpp b/blas/unit_test/Test_Blas1_nrm2w.hpp index b87c5ac48d..b91c5fbf78 100644 --- a/blas/unit_test/Test_Blas1_nrm2w.hpp +++ b/blas/unit_test/Test_Blas1_nrm2w.hpp @@ -137,15 +137,17 @@ int test_nrm2w() { // Test::impl_test_nrm2(132231); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - Test::impl_test_nrm2w(0); - Test::impl_test_nrm2w(13); - Test::impl_test_nrm2w(1024); - // Test::impl_test_nrm2(132231); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + Test::impl_test_nrm2w(0); + Test::impl_test_nrm2w(13); + Test::impl_test_nrm2w(1024); + // Test::impl_test_nrm2(132231); + #endif + */ return 1; } @@ -174,16 +176,18 @@ int test_nrm2w_mv() { // Test::impl_test_nrm2w_mv(132231,5); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - Test::impl_test_nrm2w_mv(0, 5); - Test::impl_test_nrm2w_mv(13, 5); - Test::impl_test_nrm2w_mv(1024, 5); - Test::impl_test_nrm2w_mv(789, 1); - // Test::impl_test_nrm2w_mv(132231,5); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View + view_type_a_ls; Test::impl_test_nrm2w_mv(0, 5); + Test::impl_test_nrm2w_mv(13, 5); + Test::impl_test_nrm2w_mv(1024, 5); + Test::impl_test_nrm2w_mv(789, 1); + // Test::impl_test_nrm2w_mv(132231,5); + #endif + */ return 1; } diff --git a/blas/unit_test/Test_Blas1_nrm2w_squared.hpp b/blas/unit_test/Test_Blas1_nrm2w_squared.hpp index 3f76c84f30..59661cc7e5 100644 --- a/blas/unit_test/Test_Blas1_nrm2w_squared.hpp +++ b/blas/unit_test/Test_Blas1_nrm2w_squared.hpp @@ -133,15 +133,17 @@ int test_nrm2w_squared() { // Test::impl_test_nrm2(132231); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - Test::impl_test_nrm2w_squared(0); - Test::impl_test_nrm2w_squared(13); - Test::impl_test_nrm2w_squared(1024); - // Test::impl_test_nrm2(132231); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + Test::impl_test_nrm2w_squared(0); + Test::impl_test_nrm2w_squared(13); + Test::impl_test_nrm2w_squared(1024); + // Test::impl_test_nrm2(132231); + #endif + */ return 1; } @@ -170,16 +172,18 @@ int test_nrm2w_squared_mv() { // Test::impl_test_nrm2w_squared_mv(132231,5); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - Test::impl_test_nrm2w_squared_mv(0, 5); - Test::impl_test_nrm2w_squared_mv(13, 5); - Test::impl_test_nrm2w_squared_mv(1024, 5); - Test::impl_test_nrm2w_squared_mv(789, 1); - // Test::impl_test_nrm2w_squared_mv(132231,5); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View + view_type_a_ls; Test::impl_test_nrm2w_squared_mv(0, + 5); Test::impl_test_nrm2w_squared_mv(13, 5); + Test::impl_test_nrm2w_squared_mv(1024, 5); + Test::impl_test_nrm2w_squared_mv(789, 1); + // Test::impl_test_nrm2w_squared_mv(132231,5); + #endif + */ return 1; } diff --git a/blas/unit_test/Test_Blas1_nrminf.hpp b/blas/unit_test/Test_Blas1_nrminf.hpp index b827dfa26e..8da5550afa 100644 --- a/blas/unit_test/Test_Blas1_nrminf.hpp +++ b/blas/unit_test/Test_Blas1_nrminf.hpp @@ -137,15 +137,17 @@ int test_nrminf() { // Test::impl_test_nrminf(132231); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - Test::impl_test_nrminf(0); - Test::impl_test_nrminf(13); - Test::impl_test_nrminf(1024); - // Test::impl_test_nrminf(132231); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + Test::impl_test_nrminf(0); + Test::impl_test_nrminf(13); + Test::impl_test_nrminf(1024); + // Test::impl_test_nrminf(132231); + #endif + */ return 1; } @@ -172,15 +174,17 @@ int test_nrminf_mv() { // Test::impl_test_nrminf_mv(132231,5); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - Test::impl_test_nrminf_mv(0, 5); - Test::impl_test_nrminf_mv(13, 5); - Test::impl_test_nrminf_mv(1024, 5); - // Test::impl_test_nrminf_mv(132231,5); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View + view_type_a_ls; Test::impl_test_nrminf_mv(0, 5); + Test::impl_test_nrminf_mv(13, 5); + Test::impl_test_nrminf_mv(1024, 5); + // Test::impl_test_nrminf_mv(132231,5); + #endif + */ return 1; } diff --git a/blas/unit_test/Test_Blas1_reciprocal.hpp b/blas/unit_test/Test_Blas1_reciprocal.hpp index fdec530ee6..257429ac0d 100644 --- a/blas/unit_test/Test_Blas1_reciprocal.hpp +++ b/blas/unit_test/Test_Blas1_reciprocal.hpp @@ -212,22 +212,24 @@ int test_reciprocal() { // Test::impl_test_reciprocal(132231); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - Test::impl_test_reciprocal(0); - Test::impl_test_reciprocal(13); - Test::impl_test_reciprocal(1024); - // Test::impl_test_reciprocal(132231); -#endif - -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - Test::impl_test_reciprocal(1024); - Test::impl_test_reciprocal(1024); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + typedef Kokkos::View view_type_b_ls; + Test::impl_test_reciprocal(0); + Test::impl_test_reciprocal(13); + Test::impl_test_reciprocal(1024); + // Test::impl_test_reciprocal(132231); #endif + + #if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + Test::impl_test_reciprocal(1024); + Test::impl_test_reciprocal(1024); + #endif + */ return 1; } @@ -260,26 +262,28 @@ int test_reciprocal_mv() { // Device>(132231,5); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - Test::impl_test_reciprocal_mv(0, 5); - Test::impl_test_reciprocal_mv(13, 5); - Test::impl_test_reciprocal_mv(1024, - 5); - // Test::impl_test_reciprocal_mv(132231,5); -#endif - -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - Test::impl_test_reciprocal_mv(1024, - 5); - Test::impl_test_reciprocal_mv(1024, - 5); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View + view_type_a_ls; typedef Kokkos::View + view_type_b_ls; Test::impl_test_reciprocal_mv(0, 5); Test::impl_test_reciprocal_mv(13, 5); Test::impl_test_reciprocal_mv(1024, 5); + // Test::impl_test_reciprocal_mv(132231,5); + #endif + + #if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + Test::impl_test_reciprocal_mv(1024, + 5); + Test::impl_test_reciprocal_mv(1024, + 5); + #endif + */ return 1; } diff --git a/blas/unit_test/Test_Blas1_scal.hpp b/blas/unit_test/Test_Blas1_scal.hpp index 5fac67417f..1c572073a5 100644 --- a/blas/unit_test/Test_Blas1_scal.hpp +++ b/blas/unit_test/Test_Blas1_scal.hpp @@ -61,14 +61,14 @@ void impl_test_scal(int N) { KokkosBlas::scal(y, a, x); Kokkos::deep_copy(h_y, y); for (int i = 0; i < N; i++) { - EXPECT_NEAR_KK(a * h_x(i), h_y(i), eps); + EXPECT_NEAR_KK(static_cast(a * h_x(i)), h_y(i), eps); } Kokkos::deep_copy(y, org_y); KokkosBlas::scal(y, a, c_x); Kokkos::deep_copy(h_y, y); for (int i = 0; i < N; i++) { - EXPECT_NEAR_KK(a * h_x(i), h_y(i), eps); + EXPECT_NEAR_KK(static_cast(a * h_x(i)), h_y(i), eps); } } @@ -128,7 +128,7 @@ void impl_test_scal_mv(int N, int K) { Kokkos::deep_copy(h_b_y, b_y); for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { - EXPECT_NEAR_KK(a * h_x(i, j), h_y(i, j), eps); + EXPECT_NEAR_KK(static_cast(a * h_x(i, j)), h_y(i, j), eps); } } @@ -137,7 +137,7 @@ void impl_test_scal_mv(int N, int K) { Kokkos::deep_copy(h_b_y, b_y); for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { - EXPECT_NEAR_KK(a * h_x(i, j), h_y(i, j), eps); + EXPECT_NEAR_KK(static_cast(a * h_x(i, j)), h_y(i, j), eps); } } @@ -156,7 +156,8 @@ void impl_test_scal_mv(int N, int K) { Kokkos::deep_copy(h_b_y, b_y); for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { - EXPECT_NEAR_KK(h_params(j) * h_x(i, j), h_y(i, j), eps); + EXPECT_NEAR_KK(static_cast(h_params(j) * h_x(i, j)), h_y(i, j), + eps); } } @@ -165,7 +166,8 @@ void impl_test_scal_mv(int N, int K) { Kokkos::deep_copy(h_b_y, b_y); for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { - EXPECT_NEAR_KK(h_params(j) * h_x(i, j), h_y(i, j), eps); + EXPECT_NEAR_KK(static_cast(h_params(j) * h_x(i, j)), h_y(i, j), + eps); } } } @@ -195,22 +197,24 @@ int test_scal() { // Test::impl_test_scal(132231); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - Test::impl_test_scal(0); - Test::impl_test_scal(13); - Test::impl_test_scal(1024); - // Test::impl_test_scal(132231); -#endif - -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - Test::impl_test_scal(1024); - Test::impl_test_scal(1024); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + typedef Kokkos::View view_type_b_ls; + Test::impl_test_scal(0); + Test::impl_test_scal(13); + Test::impl_test_scal(1024); + // Test::impl_test_scal(132231); + #endif + + #if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + Test::impl_test_scal(1024); + Test::impl_test_scal(1024); + #endif + */ return 1; } @@ -239,22 +243,25 @@ int test_scal_mv() { // Test::impl_test_scal_mv(132231,5); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - Test::impl_test_scal_mv(0, 5); - Test::impl_test_scal_mv(13, 5); - Test::impl_test_scal_mv(1024, 5); - // Test::impl_test_scal_mv(132231,5); -#endif - -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - Test::impl_test_scal_mv(1024, 5); - Test::impl_test_scal_mv(1024, 5); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View + view_type_a_ls; typedef Kokkos::View + view_type_b_ls; Test::impl_test_scal_mv(0, 5); Test::impl_test_scal_mv(13, 5); Test::impl_test_scal_mv(1024, 5); + // Test::impl_test_scal_mv(132231,5); #endif + + #if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + Test::impl_test_scal_mv(1024, 5); + Test::impl_test_scal_mv(1024, 5); + #endif + */ return 1; } diff --git a/blas/unit_test/Test_Blas1_sum.hpp b/blas/unit_test/Test_Blas1_sum.hpp index d2ccd4bf3d..4472f8d204 100644 --- a/blas/unit_test/Test_Blas1_sum.hpp +++ b/blas/unit_test/Test_Blas1_sum.hpp @@ -128,15 +128,17 @@ int test_sum() { // Test::impl_test_sum(132231); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - Test::impl_test_sum(0); - Test::impl_test_sum(13); - Test::impl_test_sum(1024); - // Test::impl_test_sum(132231); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + Test::impl_test_sum(0); + Test::impl_test_sum(13); + Test::impl_test_sum(1024); + // Test::impl_test_sum(132231); + #endif + */ return 1; } @@ -165,16 +167,18 @@ int test_sum_mv() { // Test::impl_test_sum_mv(132231,5); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - Test::impl_test_sum_mv(0, 5); - Test::impl_test_sum_mv(13, 5); - Test::impl_test_sum_mv(1024, 5); - Test::impl_test_sum_mv(789, 1); - // Test::impl_test_sum_mv(132231,5); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View + view_type_a_ls; Test::impl_test_sum_mv(0, 5); + Test::impl_test_sum_mv(13, 5); + Test::impl_test_sum_mv(1024, 5); + Test::impl_test_sum_mv(789, 1); + // Test::impl_test_sum_mv(132231,5); + #endif + */ return 1; } diff --git a/blas/unit_test/Test_Blas1_team_update.hpp b/blas/unit_test/Test_Blas1_team_update.hpp index efb743bc0a..cf118e7ba2 100644 --- a/blas/unit_test/Test_Blas1_team_update.hpp +++ b/blas/unit_test/Test_Blas1_team_update.hpp @@ -102,8 +102,8 @@ void impl_test_team_update(int N) { ScalarA expected_result = 0; for (int i = 0; i < N; i++) - expected_result += ScalarB(c * h_z(i) + a * h_x(i) + b * h_y(i)) * - ScalarB(c * h_z(i) + a * h_x(i) + b * h_y(i)); + expected_result += ScalarC(c * h_z(i) + a * h_x(i) + b * h_y(i)) * + ScalarC(c * h_z(i) + a * h_x(i) + b * h_y(i)); // KokkosBlas::update(a,x,b,y,c,z); Kokkos::parallel_for( diff --git a/blas/unit_test/Test_Blas1_update.hpp b/blas/unit_test/Test_Blas1_update.hpp index 5a0d27cf42..189dc2afb6 100644 --- a/blas/unit_test/Test_Blas1_update.hpp +++ b/blas/unit_test/Test_Blas1_update.hpp @@ -104,21 +104,27 @@ void impl_test_update(int N) { KokkosBlas::update(a, x, b, y, c, z); Kokkos::deep_copy(h_b_z, b_z); for (int i = 0; i < N; i++) { - EXPECT_NEAR_KK(a * h_x(i) + b * h_y(i) + c * h_org_z(i), h_z(i), eps); + EXPECT_NEAR_KK( + static_cast(a * h_x(i) + b * h_y(i) + c * h_org_z(i)), h_z(i), + eps); } Kokkos::deep_copy(b_z, b_org_z); KokkosBlas::update(a, c_x, b, y, c, z); Kokkos::deep_copy(h_b_z, b_z); for (int i = 0; i < N; i++) { - EXPECT_NEAR_KK(a * h_x(i) + b * h_y(i) + c * h_org_z(i), h_z(i), eps); + EXPECT_NEAR_KK( + static_cast(a * h_x(i) + b * h_y(i) + c * h_org_z(i)), h_z(i), + eps); } Kokkos::deep_copy(b_z, b_org_z); KokkosBlas::update(a, c_x, b, c_y, c, z); Kokkos::deep_copy(h_b_z, b_z); for (int i = 0; i < N; i++) { - EXPECT_NEAR_KK(a * h_x(i) + b * h_y(i) + c * h_org_z(i), h_z(i), eps); + EXPECT_NEAR_KK( + static_cast(a * h_x(i) + b * h_y(i) + c * h_org_z(i)), h_z(i), + eps); } } @@ -192,7 +198,8 @@ void impl_test_update_mv(int N, int K) { Kokkos::deep_copy(h_b_z, b_z); for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { - EXPECT_NEAR_KK(a * h_x(i, j) + b * h_y(i, j) + c * h_b_org_z(i, j), + EXPECT_NEAR_KK(static_cast(a * h_x(i, j) + b * h_y(i, j) + + c * h_b_org_z(i, j)), h_z(i, j), eps); } } @@ -202,7 +209,8 @@ void impl_test_update_mv(int N, int K) { Kokkos::deep_copy(h_b_z, b_z); for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { - EXPECT_NEAR_KK(a * h_x(i, j) + b * h_y(i, j) + c * h_b_org_z(i, j), + EXPECT_NEAR_KK(static_cast(a * h_x(i, j) + b * h_y(i, j) + + c * h_b_org_z(i, j)), h_z(i, j), eps); } } @@ -243,29 +251,31 @@ int test_update() { // Device>(132231); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - typedef Kokkos::View view_type_c_ls; - Test::impl_test_update(0); - Test::impl_test_update(13); - Test::impl_test_update(1024); - // Test::impl_test_update(132231); -#endif - -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - Test::impl_test_update(1024); - Test::impl_test_update(1024); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View view_type_a_ls; + typedef Kokkos::View view_type_b_ls; + typedef Kokkos::View view_type_c_ls; + Test::impl_test_update(0); + Test::impl_test_update(13); + Test::impl_test_update(1024); + // Test::impl_test_update(132231); + #endif + + #if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + Test::impl_test_update(1024); + Test::impl_test_update(1024); + #endif + */ return 1; } @@ -304,29 +314,30 @@ int test_update_mv() { Device>(132231, 5); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - typedef Kokkos::View view_type_c_ls; - Test::impl_test_update_mv(0, 5); - Test::impl_test_update_mv(13, 5); - Test::impl_test_update_mv(1024, 5); - Test::impl_test_update_mv(132231, 5); -#endif - -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - Test::impl_test_update_mv(1024, 5); - Test::impl_test_update_mv(1024, 5); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View + view_type_a_ls; typedef Kokkos::View + view_type_b_ls; typedef Kokkos::View + view_type_c_ls; Test::impl_test_update_mv(0, 5); Test::impl_test_update_mv(13, 5); + Test::impl_test_update_mv(1024, 5); + Test::impl_test_update_mv(132231, 5); + #endif + + #if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + Test::impl_test_update_mv(1024, 5); + Test::impl_test_update_mv(1024, 5); + #endif + */ return 1; } diff --git a/blas/unit_test/Test_Blas2_gemv.hpp b/blas/unit_test/Test_Blas2_gemv.hpp index 4e8c53e7e6..1df115d2c3 100644 --- a/blas/unit_test/Test_Blas2_gemv.hpp +++ b/blas/unit_test/Test_Blas2_gemv.hpp @@ -203,37 +203,33 @@ int test_gemv(const char* mode) { // Device>(mode,132231,1024); #endif -#if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ - (!defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) - typedef Kokkos::View view_type_a_ls; - typedef Kokkos::View view_type_b_ls; - typedef Kokkos::View view_type_c_ls; - Test::impl_test_gemv( - mode, 0, 1024); - Test::impl_test_gemv( - mode, 1024, 0); - Test::impl_test_gemv( - mode, 13, 13); - Test::impl_test_gemv( - mode, 13, 1024); - Test::impl_test_gemv( - mode, 50, 40); - Test::impl_test_gemv( - mode, 1024, 1024); - Test::impl_test_gemv( - mode, 2131, 2131); - // Test::impl_test_gemv(mode,132231,1024); -#endif - -#if !defined(KOKKOSKERNELS_ETI_ONLY) && \ - !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) - Test::impl_test_gemv( - mode, 1024, 1024); - Test::impl_test_gemv( - mode, 1024, 1024); -#endif + /* + #if defined(KOKKOSKERNELS_INST_LAYOUTSTRIDE) || \ + (!defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) + typedef Kokkos::View + view_type_a_ls; typedef Kokkos::View + view_type_b_ls; typedef Kokkos::View + view_type_c_ls; Test::impl_test_gemv( mode, 0, 1024); Test::impl_test_gemv( mode, 1024, 0); + Test::impl_test_gemv( mode, 13, 13); Test::impl_test_gemv( mode, 13, 1024); Test::impl_test_gemv( mode, 50, 40); + Test::impl_test_gemv( mode, 1024, 1024); Test::impl_test_gemv( mode, 2131, 2131); + // Test::impl_test_gemv(mode,132231,1024); + #endif + + #if !defined(KOKKOSKERNELS_ETI_ONLY) && \ + !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS) + Test::impl_test_gemv( mode, 1024, 1024); Test::impl_test_gemv( mode, 1024, 1024); #endif + */ return 1; } diff --git a/blas/unit_test/Test_Blas2_gemv_util.hpp b/blas/unit_test/Test_Blas2_gemv_util.hpp index ba0392b2e1..99b4516cff 100644 --- a/blas/unit_test/Test_Blas2_gemv_util.hpp +++ b/blas/unit_test/Test_Blas2_gemv_util.hpp @@ -276,7 +276,7 @@ struct GEMVTest { // fetch GEMV functor from the factory using op_type = typename GemvFunc::template functor_type; + ViewTypeY, Device, ScalarType>; op_type gemv_op(trans, alpha, A, x, beta, y); Kokkos::parallel_for(Kokkos::TeamPolicy(1, 1), gemv_op); diff --git a/blas/unit_test/Test_Blas3_gemm.hpp b/blas/unit_test/Test_Blas3_gemm.hpp index c3345ae0d4..7c3b140611 100644 --- a/blas/unit_test/Test_Blas3_gemm.hpp +++ b/blas/unit_test/Test_Blas3_gemm.hpp @@ -390,6 +390,26 @@ void test_gemm_enabled_layouts() { #endif } +template +void test_gemm_mixed_scalars() { + using Matrix1 = Kokkos::View; + using Matrix2 = Kokkos::View; + + const int dim1 = 400, dim2 = 1000; + + Matrix1 A("A", dim1, dim1); + Matrix1 B("B", dim2, dim2); + Matrix1 C("C", dim2, dim1); + Matrix2 D("D", dim2, dim1); + + Kokkos::deep_copy(A, Kokkos::ArithTraits::one()); + Kokkos::deep_copy(B, Kokkos::ArithTraits::one()); + Kokkos::deep_copy(C, Kokkos::ArithTraits::one()); + + KokkosBlas::gemm(TestExecSpace(), "N", "N", 1.0, D, A, 0.0, C); + KokkosBlas::gemm(TestExecSpace(), "N", "T", 1.0, C, D, 0.0, B); +} + #if defined(KOKKOSKERNELS_INST_FLOAT) || \ (!defined(KOKKOSKERNELS_ETI_ONLY) && \ !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS)) @@ -429,3 +449,23 @@ TEST_F(TestCategory, gemm_complex_float) { Kokkos::Profiling::popRegion(); } #endif + +#if defined(KOKKOSKERNELS_INST_COMPLEX_DOUBLE) && \ + !defined(KOKKOSKERNELS_ETI_ONLY) +TEST_F(TestCategory, gemm_mixed_scalars_complex_double_double) { + Kokkos::Profiling::pushRegion( + "KokkosBlas::Test::gemm_mixed_complex_double_double"); + test_gemm_mixed_scalars, double>(); + Kokkos::Profiling::popRegion(); +} +#endif + +#if defined(KOKKOSKERNELS_INST_COMPLEX_FLOAT) && \ + !defined(KOKKOSKERNELS_ETI_ONLY) +TEST_F(TestCategory, gemm_mixed_scalar_complex_float_float) { + Kokkos::Profiling::pushRegion( + "KokkosBlas::Test::gemm_mixed_complex_float_float"); + test_gemm_mixed_scalars, float>(); + Kokkos::Profiling::popRegion(); +} +#endif diff --git a/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp b/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp index 46c1ad13d8..481742aa83 100644 --- a/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp +++ b/sparse/impl/KokkosSparse_par_ilut_numeric_impl.hpp @@ -31,8 +31,6 @@ #include -//#define NUMERIC_OUTPUT_INFO - namespace KokkosSparse { namespace Impl { namespace Experimental { @@ -925,8 +923,10 @@ struct IlutWrap { const index_t l_nnz = L_new_values.extent(0); const index_t u_nnz = U_new_values.extent(0); - const auto l_filter_rank = std::max(0, l_nnz - l_nnz_limit - 1); - const auto u_filter_rank = std::max(0, u_nnz - u_nnz_limit - 1); + const auto l_filter_rank = + std::max(static_cast(0), l_nnz - l_nnz_limit - 1); + const auto u_filter_rank = + std::max(static_cast(0), u_nnz - u_nnz_limit - 1); const auto l_threshold = threshold_select(L_new_values, l_filter_rank, V_copy); diff --git a/sparse/unit_test/Test_Sparse_spmv.hpp b/sparse/unit_test/Test_Sparse_spmv.hpp index 8c4dc6a3c5..d0a6d1464c 100644 --- a/sparse/unit_test/Test_Sparse_spmv.hpp +++ b/sparse/unit_test/Test_Sparse_spmv.hpp @@ -1000,7 +1000,7 @@ void test_github_issue_101() { constexpr double ONE_d = static_cast(1.0); constexpr double TWO_d = static_cast(2.0); - double_matrix_type A_d("A_d", G); + double_matrix_type A_d("A_d", G, numCols); auto A_d_val_h = Kokkos::create_mirror_view(A_d.values); A_d_val_h[0] = ONE_d; // This cast is deliberate; we want to use float eps here, but as @@ -1048,7 +1048,7 @@ void test_github_issue_101() { constexpr float TWO_f = static_cast(2.0); constexpr double ZERO_d = static_cast(0.0); - float_matrix_type A_f("A_f", G); + float_matrix_type A_f("A_f", G, numCols); auto A_f_val_h = Kokkos::create_mirror_view(A_f.values); A_f_val_h[0] = ONE_f; A_f_val_h[1] = EPS_f / TWO_f; diff --git a/sparse/unit_test/Test_Sparse_spmv_bsr.hpp b/sparse/unit_test/Test_Sparse_spmv_bsr.hpp index b9e5334abf..ccbcb21301 100644 --- a/sparse/unit_test/Test_Sparse_spmv_bsr.hpp +++ b/sparse/unit_test/Test_Sparse_spmv_bsr.hpp @@ -513,11 +513,10 @@ void testSpMVBsrMatrix() { Test_Bsr::check_bsrm_times_v( &mode, alpha_s, beta_s, bMax, num_errors); if (num_errors > 0) { - printf( - "KokkosSparse::Test::spmv_bsr: %i errors of %i with params: " - "%c %lf %lf\n", - num_errors, bMax, mode, Kokkos::ArithTraits::abs(alpha_s), - Kokkos::ArithTraits::abs(beta_s)); + std::cout << "KokkosSparse::Test::spmv_bsr: " << num_errors + << " errors of %i with params: " << bMax << " " << mode << " " + << Kokkos::ArithTraits::abs(alpha_s) << " " + << Kokkos::ArithTraits::abs(beta_s) << std::endl; } EXPECT_TRUE(num_errors == 0); } @@ -555,11 +554,10 @@ void testBsrMatrix_SpM_MV() { Test_Bsr::check_bsrm_times_mv( &mode, alpha_s, beta_s, bMax, num_errors); if (num_errors > 0) { - printf( - "KokkosSparse::Test::spm_mv_bsr: %i errors of %i with params: " - "%c %lf %lf\n", - num_errors, bMax, mode, Kokkos::ArithTraits::abs(alpha_s), - Kokkos::ArithTraits::abs(beta_s)); + std::cout << "KokkosSparse::Test::spm_mv_bsr: " << num_errors + << " errors of " << bMax << " with params: " << mode << " " + << Kokkos::ArithTraits::abs(alpha_s) << " " + << Kokkos::ArithTraits::abs(beta_s) << std::endl; } EXPECT_TRUE(num_errors == 0); } From 487d0c4e56d9db4b8bee63f21022ec783db17a28 Mon Sep 17 00:00:00 2001 From: Luc Berger Date: Wed, 8 Feb 2023 14:49:43 -0700 Subject: [PATCH 220/226] Merge pull request #1624 from lucbv/MDF_alg_upgrade Mdf alg upgrade (cherry picked from commit aac450bd38daabb8cb212a3a9cb7bdff58fce851) --- perf_test/sparse/CMakeLists.txt | 5 + perf_test/sparse/KokkosSparse_mdf.cpp | 320 +++++++++++++++++++++++++ sparse/impl/KokkosSparse_mdf_impl.hpp | 236 ++++++++++++++++-- sparse/src/KokkosSparse_mdf.hpp | 67 ++++-- sparse/src/KokkosSparse_mdf_handle.hpp | 25 +- sparse/unit_test/Test_Sparse_mdf.hpp | 87 ++++++- 6 files changed, 688 insertions(+), 52 deletions(-) create mode 100644 perf_test/sparse/KokkosSparse_mdf.cpp diff --git a/perf_test/sparse/CMakeLists.txt b/perf_test/sparse/CMakeLists.txt index a574ed101f..6eac716aca 100644 --- a/perf_test/sparse/CMakeLists.txt +++ b/perf_test/sparse/CMakeLists.txt @@ -110,3 +110,8 @@ KOKKOSKERNELS_ADD_EXECUTABLE( sparse_spiluk SOURCES KokkosSparse_spiluk.cpp ) + +KOKKOSKERNELS_ADD_EXECUTABLE( + sparse_mdf + SOURCES KokkosSparse_mdf.cpp +) diff --git a/perf_test/sparse/KokkosSparse_mdf.cpp b/perf_test/sparse/KokkosSparse_mdf.cpp new file mode 100644 index 0000000000..ca48df8fd2 --- /dev/null +++ b/perf_test/sparse/KokkosSparse_mdf.cpp @@ -0,0 +1,320 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + +#include +#include "KokkosKernels_config.h" +#include "KokkosKernels_Handle.hpp" +#include "KokkosSparse_IOUtils.hpp" +#include "KokkosSparse_Utils_cusparse.hpp" +#include "KokkosSparse_mdf.hpp" +#include "KokkosKernels_TestUtils.hpp" + +struct Params { + int use_cuda = 0; + int use_hip = 0; + int use_sycl = 0; + int use_openmp = 0; + int use_threads = 0; + std::string amtx; + int m = 10000; + int n = 10000; + int nnzPerRow = 30; + bool diag = false; // Whether B should be diagonal only (requires A square) + bool verbose = false; + int repeat = 1; +}; + +template +struct diag_generator_functor { + using size_type = typename row_map_t::non_const_value_type; + + row_map_t row_map; + entries_t entries; + + diag_generator_functor(row_map_t row_map_, entries_t entries_) + : row_map(row_map_), entries(entries_){}; + + KOKKOS_INLINE_FUNCTION + void operator()(const size_type rowIdx) const { + row_map(rowIdx + 1) = rowIdx + 1; + entries(rowIdx) = rowIdx; + } +}; + +template +void run_experiment(const Params& params) { + using size_type = typename crsMat_t::size_type; + using lno_t = typename crsMat_t::ordinal_type; + using scalar_t = typename crsMat_t::value_type; + using device_t = typename crsMat_t::device_type; + using exec_space = typename device_t::execution_space; + + using graph_t = typename crsMat_t::StaticCrsGraphType; + using rowmap_t = typename graph_t::row_map_type::non_const_type; + using entries_t = typename graph_t::entries_type::non_const_type; + using values_t = typename crsMat_t::values_type::non_const_type; + + std::cout << "************************************* \n"; + std::cout << "************************************* \n"; + crsMat_t A; + lno_t m = params.m; + lno_t n = params.n; + if (params.amtx.length()) { + std::cout << "Loading A from " << params.amtx << '\n'; + A = KokkosSparse::Impl::read_kokkos_crst_matrix( + params.amtx.c_str()); + m = A.numRows(); + n = A.numCols(); + } else { + if (params.diag) { + std::cout << "Randomly generating diag matrix\n"; + rowmap_t rowmapA("A row map", m + 1); + entries_t entriesA("A entries", m); + values_t valuesA("A values", m); + + // Generate the graph of A + diag_generator_functor diag_generator(rowmapA, entriesA); + Kokkos::parallel_for(Kokkos::RangePolicy(0, m), + diag_generator); + + // Generate the values of A + Kokkos::Random_XorShift64_Pool rand_pool(13718); + Kokkos::fill_random(valuesA, rand_pool, + 10 * Kokkos::ArithTraits::one()); + + // Actually put A together + graph_t graph(entriesA, rowmapA); + A = crsMat_t("A matrix", m, valuesA, graph); + } else { + std::cout << "Randomly generating matrix\n"; + size_type nnzUnused = m * params.nnzPerRow; + A = KokkosSparse::Impl::kk_generate_sparse_matrix( + m, n, nnzUnused, 0, (n + 3) / 3); + } + } + + if (params.verbose) { + std::cout << "Matrix A" << std::endl; + std::cout << " row_map A:" << std::endl; + KokkosKernels::Impl::print_1Dview(A.graph.row_map); + std::cout << " entries A:" << std::endl; + KokkosKernels::Impl::print_1Dview(A.graph.entries); + std::cout << " values A:" << std::endl; + KokkosKernels::Impl::print_1Dview(A.values); + std::cout << std::endl; + } + + Kokkos::Timer timer; + double handleTime = 0; + double symbolicTime = 0; + double numericTime = 0; + + timer.reset(); + KokkosSparse::Experimental::MDF_handle handle(A); + handle.set_verbosity(0); + handleTime += timer.seconds(); + + for (int sumRep = 0; sumRep < params.repeat; sumRep++) { + timer.reset(); + KokkosSparse::Experimental::mdf_symbolic(A, handle); + Kokkos::fence(); + symbolicTime += timer.seconds(); + + timer.reset(); + KokkosSparse::Experimental::mdf_numeric(A, handle); + Kokkos::fence(); + numericTime += timer.seconds(); + } + + std::cout << "Mean total time: " + << handleTime + (symbolicTime / params.repeat) + + (numericTime / params.repeat) + << std::endl + << "Handle time: " << handleTime << std::endl + << "Mean symbolic time: " << (symbolicTime / params.repeat) + << std::endl + << "Mean numeric time: " << (numericTime / params.repeat) + << std::endl; + + if (params.verbose) { + entries_t permutation = handle.get_permutation(); + + std::cout << "MDF permutation:" << std::endl; + KokkosKernels::Impl::print_1Dview(permutation); + } +} // run_experiment + +void print_options() { + std::cerr << "Options\n" << std::endl; + + std::cerr + << "\t[Required] BACKEND: '--threads[numThreads]' | '--openmp " + "[numThreads]' | '--cuda [cudaDeviceIndex]' | '--hip [hipDeviceIndex]'" + " | '--sycl [syclDeviceIndex]'" + << std::endl; + + std::cerr << "\t[Optional] --amtx :: input matrix" << std::endl; + std::cerr << "\t[Optional] --repeat :: how many times to repeat overall " + "MDF" + << std::endl; + std::cerr << "\t[Optional] --verbose :: enable verbose output" + << std::endl; + std::cerr << "\nSettings for randomly generated A matrix" << std::endl; + std::cerr << "\t[Optional] --m :: number of rows to generate" + << std::endl; + std::cerr << "\t[Optional] --n :: number of cols to generate" + << std::endl; + std::cerr + << "\t[Optional] --nnz :: number of entries per row to generate" + << std::endl; + std::cerr << "\t[Optional] --diag :: generate a diagonal matrix" + << std::endl; +} // print_options + +int parse_inputs(Params& params, int argc, char** argv) { + for (int i = 1; i < argc; ++i) { + if (0 == Test::string_compare_no_case(argv[i], "--threads")) { + params.use_threads = atoi(argv[++i]); + } else if (0 == Test::string_compare_no_case(argv[i], "--openmp")) { + params.use_openmp = atoi(argv[++i]); + } else if (0 == Test::string_compare_no_case(argv[i], "--cuda")) { + params.use_cuda = atoi(argv[++i]) + 1; + } else if (0 == Test::string_compare_no_case(argv[i], "--hip")) { + params.use_hip = atoi(argv[++i]) + 1; + } else if (0 == Test::string_compare_no_case(argv[i], "--sycl")) { + params.use_sycl = atoi(argv[++i]) + 1; + } else if (0 == Test::string_compare_no_case(argv[i], "--amtx")) { + params.amtx = argv[++i]; + } else if (0 == Test::string_compare_no_case(argv[i], "--m")) { + params.m = atoi(argv[++i]); + } else if (0 == Test::string_compare_no_case(argv[i], "--n")) { + params.n = atoi(argv[++i]); + } else if (0 == Test::string_compare_no_case(argv[i], "--nnz")) { + params.nnzPerRow = atoi(argv[++i]); + } else if (0 == Test::string_compare_no_case(argv[i], "--diag")) { + params.diag = true; + } else if (0 == Test::string_compare_no_case(argv[i], "--repeat")) { + params.repeat = atoi(argv[++i]); + } else if (0 == Test::string_compare_no_case(argv[i], "--verbose")) { + params.verbose = true; + } else { + std::cerr << "Unrecognized command line argument #" << i << ": " + << argv[i] << std::endl; + print_options(); + return 1; + } + } + return 0; +} // parse_inputs + +int main(int argc, char** argv) { + Params params; + + if (parse_inputs(params, argc, argv)) { + return 1; + } + const int num_threads = + std::max(params.use_openmp, + params.use_threads); // Assumption is that use_openmp variable + // is provided as number of threads + + // If cuda, hip or sycl is used, set device_id + int device_id = 0; + if (params.use_cuda > 0) { + device_id = params.use_cuda - 1; + } + if (params.use_hip > 0) { + device_id = params.use_hip - 1; + } + if (params.use_sycl > 0) { + device_id = params.use_sycl - 1; + } + + Kokkos::initialize(Kokkos::InitializationSettings() + .set_num_threads(num_threads) + .set_device_id(device_id)); + + bool useOMP = params.use_openmp != 0; + bool useThreads = params.use_threads != 0; + bool useCUDA = params.use_cuda != 0; + bool useHIP = params.use_hip != 0; + bool useSYCL = params.use_sycl != 0; + bool useSerial = !useOMP && !useCUDA && !useHIP && !useSYCL; + + if (useOMP) { +#if defined(KOKKOS_ENABLE_OPENMP) + using crsMat_t = + KokkosSparse::CrsMatrix; + run_experiment(params); +#else + std::cout << "ERROR: OpenMP requested, but not available.\n"; + return 1; +#endif + } + if (useThreads) { +#if defined(KOKKOS_ENABLE_THREADS) + using crsMat_t = + KokkosSparse::CrsMatrix; + run_experiment(params); +#else + std::cout << "ERROR: OpenMP requested, but not available.\n"; + return 1; +#endif + } + if (useCUDA) { +#if defined(KOKKOS_ENABLE_CUDA) + using crsMat_t = + KokkosSparse::CrsMatrix; + run_experiment(params); +#else + std::cout << "ERROR: CUDA requested, but not available.\n"; + return 1; +#endif + } + if (useHIP) { +#if defined(KOKKOS_ENABLE_HIP) + using crsMat_t = + KokkosSparse::CrsMatrix; + run_experiment(params); +#else + std::cout << "ERROR: HIP requested, but not available.\n"; + return 1; +#endif + } + if (useSYCL) { +#if defined(KOKKOS_ENABLE_SYCL) + using crsMat_t = + KokkosSparse::CrsMatrix; + run_experiment(params); +#else + std::cout << "ERROR: SYCL requested, but not available.\n"; + return 1; +#endif + } + if (useSerial) { +#if defined(KOKKOS_ENABLE_SERIAL) + using crsMat_t = + KokkosSparse::CrsMatrix; + run_experiment(params); +#else + std::cout << "ERROR: Serial device requested, but not available.\n"; + return 1; +#endif + } + Kokkos::finalize(); + return 0; +} // main diff --git a/sparse/impl/KokkosSparse_mdf_impl.hpp b/sparse/impl/KokkosSparse_mdf_impl.hpp index feee2d765b..b8a25485f5 100644 --- a/sparse/impl/KokkosSparse_mdf_impl.hpp +++ b/sparse/impl/KokkosSparse_mdf_impl.hpp @@ -155,12 +155,133 @@ struct MDF_discarded_fill_norm { A.graph.row_map(rowIdx) - 1); KOKKOS_IMPL_DO_NOT_USE_PRINTF( "Row %d has discarded fill of %f, deficiency of %d and degree %d\n", - rowIdx, KAS::sqrt(discard_norm), deficiency(rowIdx), degree); + static_cast(rowIdx), + static_cast(KAS::sqrt(discard_norm)), + static_cast(deficiency(rowIdx)), static_cast(degree)); } } }; // MDF_discarded_fill_norm +template +struct MDF_selective_discarded_fill_norm { + using static_crs_graph_type = typename crs_matrix_type::StaticCrsGraphType; + using col_ind_type = + typename static_crs_graph_type::entries_type::non_const_type; + using values_type = typename crs_matrix_type::values_type::non_const_type; + using size_type = typename crs_matrix_type::size_type; + using ordinal_type = typename crs_matrix_type::ordinal_type; + using scalar_type = typename crs_matrix_type::value_type; + using KAS = typename Kokkos::ArithTraits; + + const scalar_type zero = KAS::zero(); + + crs_matrix_type A, At; + ordinal_type factorization_step; + col_ind_type permutation; + col_ind_type update_list; + + values_type discarded_fill; + col_ind_type deficiency; + int verbosity; + + MDF_selective_discarded_fill_norm(crs_matrix_type A_, crs_matrix_type At_, + ordinal_type factorization_step_, + col_ind_type permutation_, + col_ind_type update_list_, + values_type discarded_fill_, + col_ind_type deficiency_, int verbosity_) + : A(A_), + At(At_), + factorization_step(factorization_step_), + permutation(permutation_), + update_list(update_list_), + discarded_fill(discarded_fill_), + deficiency(deficiency_), + verbosity(verbosity_){}; + + KOKKOS_INLINE_FUNCTION + void operator()(const ordinal_type i) const { + ordinal_type rowIdx = permutation(update_list(i)); + scalar_type discard_norm = zero, diag_val = zero; + bool entryIsDiscarded = true; + ordinal_type numFillEntries = 0; + for (size_type alphaIdx = At.graph.row_map(rowIdx); + alphaIdx < At.graph.row_map(rowIdx + 1); ++alphaIdx) { + ordinal_type fillRowIdx = At.graph.entries(alphaIdx); + bool row_not_eliminated = true; + for (ordinal_type stepIdx = 0; stepIdx < factorization_step; ++stepIdx) { + if (fillRowIdx == permutation(stepIdx)) { + row_not_eliminated = false; + } + } + + if (fillRowIdx != rowIdx && row_not_eliminated) { + for (size_type betaIdx = A.graph.row_map(rowIdx); + betaIdx < A.graph.row_map(rowIdx + 1); ++betaIdx) { + ordinal_type fillColIdx = A.graph.entries(betaIdx); + bool col_not_eliminated = true; + for (ordinal_type stepIdx = 0; stepIdx < factorization_step; + ++stepIdx) { + if (fillColIdx == permutation(stepIdx)) { + col_not_eliminated = false; + } + } + + if (fillColIdx != rowIdx && col_not_eliminated) { + entryIsDiscarded = true; + for (size_type entryIdx = A.graph.row_map(fillRowIdx); + entryIdx < A.graph.row_map(fillRowIdx + 1); ++entryIdx) { + if (A.graph.entries(entryIdx) == fillColIdx) { + entryIsDiscarded = false; + } + } + if (entryIsDiscarded) { + numFillEntries += 1; + discard_norm += + KAS::abs(At.values(alphaIdx) * A.values(betaIdx)) * + KAS::abs(At.values(alphaIdx) * A.values(betaIdx)); + if (verbosity > 1) { + KOKKOS_IMPL_DO_NOT_USE_PRINTF( + "Adding value A[%d,%d]=%f to discard norm of row %d\n", + static_cast(At.graph.entries(alphaIdx)), + static_cast(A.graph.entries(betaIdx)), + static_cast( + KAS::abs(At.values(alphaIdx) * A.values(betaIdx)) * + KAS::abs(At.values(alphaIdx) * A.values(betaIdx))), + static_cast(rowIdx)); + } + } + } + } + } else if (fillRowIdx == rowIdx) { + diag_val = At.values(alphaIdx); + if (verbosity > 1) { + KOKKOS_IMPL_DO_NOT_USE_PRINTF( + "Row %d diagonal value dected, values(%d)=%f\n", + static_cast(rowIdx), static_cast(alphaIdx), + static_cast(At.values(alphaIdx))); + } + } + } + + // TODO add a check on `diag_val == zero` + discard_norm = discard_norm / (diag_val * diag_val); + discarded_fill(rowIdx) = discard_norm; + deficiency(rowIdx) = numFillEntries; + if (verbosity > 0) { + const ordinal_type degree = ordinal_type(A.graph.row_map(rowIdx + 1) - + A.graph.row_map(rowIdx) - 1); + KOKKOS_IMPL_DO_NOT_USE_PRINTF( + "Row %d has discarded fill of %f, deficiency of %d and degree %d\n", + static_cast(rowIdx), + static_cast(KAS::sqrt(discard_norm)), + static_cast(deficiency(rowIdx)), static_cast(degree)); + } + } + +}; // MDF_selective_discarded_fill_norm + template struct MDF_select_row { using values_type = typename crs_matrix_type::values_type::non_const_type; @@ -294,6 +415,8 @@ struct MDF_factorize_row { values_type valuesU; col_ind_type permutation, permutation_inv; + values_type discarded_fill; + col_ind_type factored; ordinal_type selected_row_idx, factorization_step; int verbosity; @@ -303,6 +426,7 @@ struct MDF_factorize_row { values_type valuesL_, row_map_type row_mapU_, col_ind_type entriesU_, values_type valuesU_, col_ind_type permutation_, col_ind_type permutation_inv_, + values_type discarded_fill_, col_ind_type factored_, ordinal_type selected_row_idx_, ordinal_type factorization_step_, int verbosity_) : A(A_), @@ -315,6 +439,8 @@ struct MDF_factorize_row { valuesU(valuesU_), permutation(permutation_), permutation_inv(permutation_inv_), + discarded_fill(discarded_fill_), + factored(factored_), selected_row_idx(selected_row_idx_), factorization_step(factorization_step_), verbosity(verbosity_){}; @@ -322,6 +448,7 @@ struct MDF_factorize_row { KOKKOS_INLINE_FUNCTION void operator()(const ordinal_type /* idx */) const { const ordinal_type selected_row = permutation(selected_row_idx); + discarded_fill(selected_row) = Kokkos::ArithTraits::max(); // Swap entries in permutation vectors permutation(selected_row_idx) = permutation(factorization_step); @@ -332,7 +459,8 @@ struct MDF_factorize_row { if (verbosity > 0) { KOKKOS_IMPL_DO_NOT_USE_PRINTF("Permutation vector: { "); for (ordinal_type rowIdx = 0; rowIdx < A.numRows(); ++rowIdx) { - KOKKOS_IMPL_DO_NOT_USE_PRINTF("%d ", permutation(rowIdx)); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%d ", + static_cast(permutation(rowIdx))); } KOKKOS_IMPL_DO_NOT_USE_PRINTF("}\n"); } @@ -356,23 +484,27 @@ struct MDF_factorize_row { if (verbosity > 0) { KOKKOS_IMPL_DO_NOT_USE_PRINTF("Diagonal values of row %d is %f\n", - selected_row, diag); + static_cast(selected_row), + static_cast(diag)); } if (verbosity > 2) { KOKKOS_IMPL_DO_NOT_USE_PRINTF("U, row_map={ "); for (ordinal_type rowIdx = 0; rowIdx < factorization_step + 1; ++rowIdx) { - KOKKOS_IMPL_DO_NOT_USE_PRINTF("%d ", int(row_mapU(rowIdx))); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%d ", + static_cast(row_mapU(rowIdx))); } KOKKOS_IMPL_DO_NOT_USE_PRINTF("}, entries={ "); for (size_type entryIdx = row_mapU(0); entryIdx < row_mapU(factorization_step + 1); ++entryIdx) { - KOKKOS_IMPL_DO_NOT_USE_PRINTF("%d ", int(entriesU(entryIdx))); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%d ", + static_cast(entriesU(entryIdx))); } KOKKOS_IMPL_DO_NOT_USE_PRINTF("}, values={ "); for (size_type entryIdx = row_mapU(0); entryIdx < row_mapU(factorization_step + 1); ++entryIdx) { - KOKKOS_IMPL_DO_NOT_USE_PRINTF("%f ", valuesU(entryIdx)); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%f ", + static_cast(valuesU(entryIdx))); } KOKKOS_IMPL_DO_NOT_USE_PRINTF("}\n"); } @@ -397,17 +529,21 @@ struct MDF_factorize_row { if (verbosity > 2) { KOKKOS_IMPL_DO_NOT_USE_PRINTF( "L(%d), [row_map(%d), row_map(%d)[ = [%d, %d[, entries={ ", - int(factorization_step), int(factorization_step), - int(factorization_step + 1), int(row_mapL(factorization_step)), - int(row_mapL(factorization_step + 1))); + static_cast(factorization_step), + static_cast(factorization_step), + static_cast(factorization_step + 1), + static_cast(row_mapL(factorization_step)), + static_cast(row_mapL(factorization_step + 1))); for (size_type entryIdx = row_mapL(factorization_step); entryIdx < row_mapL(factorization_step + 1); ++entryIdx) { - KOKKOS_IMPL_DO_NOT_USE_PRINTF("%d ", int(entriesL(entryIdx))); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%d ", + static_cast(entriesL(entryIdx))); } KOKKOS_IMPL_DO_NOT_USE_PRINTF("}, values={ "); for (size_type entryIdx = row_mapL(factorization_step); entryIdx < row_mapL(factorization_step + 1); ++entryIdx) { - KOKKOS_IMPL_DO_NOT_USE_PRINTF("%f ", valuesL(entryIdx)); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%f ", + static_cast(valuesL(entryIdx))); } KOKKOS_IMPL_DO_NOT_USE_PRINTF("}\n"); } @@ -466,8 +602,10 @@ struct MDF_factorize_row { if (verbosity > 1) { KOKKOS_IMPL_DO_NOT_USE_PRINTF( - "A[%d, %d] -= %f\n", int(fillRowIdx), int(fillColIdx), - At.values(alphaIdx) * A.values(betaIdx) / diag_val); + "A[%d, %d] -= %f\n", static_cast(fillRowIdx), + static_cast(fillColIdx), + static_cast(At.values(alphaIdx) * + A.values(betaIdx) / diag_val)); } } } @@ -484,15 +622,19 @@ struct MDF_factorize_row { } } + factored(selected_row) = 1; + if (verbosity > 0) { KOKKOS_IMPL_DO_NOT_USE_PRINTF("New values in A: { "); for (size_type entryIdx = 0; entryIdx < A.nnz(); ++entryIdx) { - KOKKOS_IMPL_DO_NOT_USE_PRINTF("%f ", A.values(entryIdx)); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%f ", + static_cast(A.values(entryIdx))); } KOKKOS_IMPL_DO_NOT_USE_PRINTF("}\n"); KOKKOS_IMPL_DO_NOT_USE_PRINTF("New values in At: { "); for (size_type entryIdx = 0; entryIdx < At.nnz(); ++entryIdx) { - KOKKOS_IMPL_DO_NOT_USE_PRINTF("%f ", At.values(entryIdx)); + KOKKOS_IMPL_DO_NOT_USE_PRINTF("%f ", + static_cast(At.values(entryIdx))); } KOKKOS_IMPL_DO_NOT_USE_PRINTF("}\n"); } @@ -500,6 +642,70 @@ struct MDF_factorize_row { }; // MDF_factorize_row +template +struct MDF_compute_list_length { + using col_ind_type = typename crs_matrix_type::StaticCrsGraphType:: + entries_type::non_const_type; + using ordinal_type = typename crs_matrix_type::ordinal_type; + using size_type = typename crs_matrix_type::size_type; + + ordinal_type selected_row_idx; + crs_matrix_type A; + crs_matrix_type At; + col_ind_type permutation; + col_ind_type factored; + col_ind_type update_list_length; + col_ind_type update_list; + + MDF_compute_list_length(const ordinal_type rowIdx_, const crs_matrix_type& A_, + const crs_matrix_type& At_, + const col_ind_type& permutation_, + const col_ind_type factored_, + col_ind_type& update_list_length_, + col_ind_type& update_list_) + : selected_row_idx(rowIdx_), + A(A_), + At(At_), + permutation(permutation_), + factored(factored_), + update_list_length(update_list_length_), + update_list(update_list_) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const size_type /*idx*/) const { + const ordinal_type selected_row = permutation(selected_row_idx); + + size_type updateIdx = 0; + for (size_type entryIdx = A.graph.row_map(selected_row); + entryIdx < A.graph.row_map(selected_row + 1); ++entryIdx) { + if ((A.graph.entries(entryIdx) != selected_row) && + (factored(A.graph.entries(entryIdx)) != 1)) { + update_list(updateIdx) = A.graph.entries(entryIdx); + ++updateIdx; + } + } + size_type update_rows = updateIdx; + for (size_type entryIdx = At.graph.row_map(selected_row); + entryIdx < At.graph.row_map(selected_row + 1); ++entryIdx) { + if ((At.graph.entries(entryIdx) != selected_row) && + (factored(A.graph.entries(entryIdx)) != 1)) { + bool already_updated = false; + for (size_type checkIdx = 0; checkIdx < update_rows; ++checkIdx) { + if (At.graph.entries(entryIdx) == update_list(checkIdx)) { + already_updated = true; + break; + } + } + if (already_updated == false) { + update_list(updateIdx) = At.graph.entries(entryIdx); + ++updateIdx; + } + } + } + update_list_length(0) = updateIdx; + } +}; + template struct MDF_reindex_matrix { col_ind_type permutation_inv; diff --git a/sparse/src/KokkosSparse_mdf.hpp b/sparse/src/KokkosSparse_mdf.hpp index 33229b6cdb..90fa3beeef 100644 --- a/sparse/src/KokkosSparse_mdf.hpp +++ b/sparse/src/KokkosSparse_mdf.hpp @@ -34,7 +34,7 @@ namespace KokkosSparse { namespace Experimental { template -void mdf_symbolic_phase(crs_matrix_type& A, MDF_handle& handle) { +void mdf_symbolic(crs_matrix_type& A, MDF_handle& handle) { using size_type = typename crs_matrix_type::size_type; using ordinal_type = typename crs_matrix_type::ordinal_type; @@ -60,10 +60,10 @@ void mdf_symbolic_phase(crs_matrix_type& A, MDF_handle& handle) { } return; -} // mdf_symbolic_phase +} // mdf_symbolic template -void mdf_numeric_phase(crs_matrix_type& A, MDF_handle& handle) { +void mdf_numeric(crs_matrix_type& A, MDF_handle& handle) { using col_ind_type = typename crs_matrix_type::StaticCrsGraphType:: entries_type::non_const_type; using values_type = typename crs_matrix_type::values_type::non_const_type; @@ -78,13 +78,26 @@ void mdf_numeric_phase(crs_matrix_type& A, MDF_handle& handle) { // compute discarded fill of each row // selected pivot based on MDF // factorize pivot row of A - crs_matrix_type Atmp = crs_matrix_type("A fill", A); + const int verbosity_level = handle.verbosity; + crs_matrix_type Atmp = crs_matrix_type("A fill", A); crs_matrix_type At = KokkosSparse::Impl::transpose_matrix(A); KokkosSparse::sort_crs_matrix(At); values_type discarded_fill("discarded fill", A.numRows()); col_ind_type deficiency("deficiency", A.numRows()); + col_ind_type update_list_length("update list length", 1); + typename col_ind_type::HostMirror update_list_length_host = + Kokkos::create_mirror_view(update_list_length); + col_ind_type update_list("update list", A.numRows()); + col_ind_type factored("factored rows", A.numRows()); + Kokkos::deep_copy(discarded_fill, Kokkos::ArithTraits::max()); + Kokkos::deep_copy(deficiency, Kokkos::ArithTraits::max()); + + KokkosSparse::Impl::MDF_discarded_fill_norm MDF_df_norm( + Atmp, At, 0, handle.permutation, discarded_fill, deficiency, + verbosity_level); + Kokkos::parallel_for("MDF: initial fill computation", + range_policy_type(0, Atmp.numRows()), MDF_df_norm); - const int verbosity_level = handle.verbosity; for (ordinal_type factorization_step = 0; factorization_step < A.numRows(); ++factorization_step) { if (verbosity_level > 0) { @@ -92,44 +105,58 @@ void mdf_numeric_phase(crs_matrix_type& A, MDF_handle& handle) { static_cast(factorization_step)); } - range_policy_type stepPolicy(factorization_step, Atmp.numRows()); - Kokkos::deep_copy(discarded_fill, Kokkos::ArithTraits::max()); - Kokkos::deep_copy(deficiency, Kokkos::ArithTraits::max()); - KokkosSparse::Impl::MDF_discarded_fill_norm MDF_df_norm( - Atmp, At, factorization_step, handle.permutation, discarded_fill, - deficiency, verbosity_level); - Kokkos::parallel_for(stepPolicy, MDF_df_norm); + Kokkos::deep_copy(update_list_length_host, update_list_length); + range_policy_type updatePolicy(0, update_list_length_host(0)); + KokkosSparse::Impl::MDF_selective_discarded_fill_norm + MDF_update_df_norm(Atmp, At, factorization_step, handle.permutation, + update_list, discarded_fill, deficiency, + verbosity_level); + Kokkos::parallel_for("MDF: updating fill norms", updatePolicy, + MDF_update_df_norm); + range_policy_type stepPolicy(factorization_step, Atmp.numRows()); ordinal_type selected_row_idx = 0; KokkosSparse::Impl::MDF_select_row MDF_row_selector( factorization_step, discarded_fill, deficiency, Atmp.graph.row_map, handle.permutation); - Kokkos::parallel_reduce(stepPolicy, MDF_row_selector, selected_row_idx); + Kokkos::parallel_reduce("MDF: select pivot", stepPolicy, MDF_row_selector, + selected_row_idx); + + KokkosSparse::Impl::MDF_compute_list_length + compute_list_length(selected_row_idx, Atmp, At, handle.permutation, + factored, update_list_length, update_list); + Kokkos::parallel_for("MDF: compute update list", range_policy_type(0, 1), + compute_list_length); KokkosSparse::Impl::MDF_factorize_row factorize_row( Atmp, At, handle.row_mapL, handle.entriesL, handle.valuesL, handle.row_mapU, handle.entriesU, handle.valuesU, handle.permutation, - handle.permutation_inv, selected_row_idx, factorization_step, - verbosity_level); - Kokkos::parallel_for(range_policy_type(0, 1), factorize_row); + handle.permutation_inv, discarded_fill, factored, selected_row_idx, + factorization_step, verbosity_level); + Kokkos::parallel_for("MDF: factorize row", range_policy_type(0, 1), + factorize_row); if (verbosity_level > 0) { printf("\n"); } - } + } // Loop over factorization steps KokkosSparse::Impl::MDF_reindex_matrix reindex_U( handle.permutation_inv, handle.entriesU); - Kokkos::parallel_for(range_policy_type(0, handle.entriesU.extent(0)), + Kokkos::parallel_for("MDF: re-index U", + range_policy_type(0, handle.entriesU.extent(0)), reindex_U); KokkosSparse::Impl::MDF_reindex_matrix reindex_L( handle.permutation_inv, handle.entriesL); - Kokkos::parallel_for(range_policy_type(0, handle.entriesL.extent(0)), + Kokkos::parallel_for("MDF: re-index L", + range_policy_type(0, handle.entriesL.extent(0)), reindex_L); + handle.L = KokkosSparse::Impl::transpose_matrix(handle.L); + return; -} // mdf_numeric_phase +} // mdf_numeric } // namespace Experimental } // namespace KokkosSparse diff --git a/sparse/src/KokkosSparse_mdf_handle.hpp b/sparse/src/KokkosSparse_mdf_handle.hpp index eb44657337..6f6f2658be 100644 --- a/sparse/src/KokkosSparse_mdf_handle.hpp +++ b/sparse/src/KokkosSparse_mdf_handle.hpp @@ -60,6 +60,8 @@ struct MDF_handle { int verbosity; + crs_matrix_type L, U; + MDF_handle(const crs_matrix_type A) : numRows(A.numRows()), permutation(col_ind_type("row permutation", A.numRows())), @@ -74,31 +76,28 @@ struct MDF_handle { entriesL = col_ind_type("entries L", nnzL); valuesL = values_type("values L", nnzL); + L = crs_matrix_type("L", numRows, numRows, nnzL, valuesL, row_mapL, + entriesL); + // Allocate U row_mapU = row_map_type("row map U", numRows + 1); entriesU = col_ind_type("entries U", nnzU); valuesU = values_type("values U", nnzU); + + U = crs_matrix_type("U", numRows, numRows, nnzU, valuesU, row_mapU, + entriesU); } col_ind_type get_permutation() { return permutation; } void sort_factors() { - KokkosSparse::sort_crs_matrix(row_mapL, entriesL, valuesL); - KokkosSparse::sort_crs_matrix(row_mapU, entriesU, valuesU); + KokkosSparse::sort_crs_matrix(L); + KokkosSparse::sort_crs_matrix(U); } - crs_matrix_type getL() { - return KokkosSparse::Impl::transpose_matrix( - crs_matrix_type("L", numRows, numRows, entriesL.extent(0), valuesL, - row_mapL, entriesL)); - } + crs_matrix_type getL() { return L; } - crs_matrix_type getU() { - return crs_matrix_type("U", numRows, numRows, entriesU.extent(0), valuesU, - row_mapU, entriesU); - } + crs_matrix_type getU() { return U; } }; } // namespace Experimental diff --git a/sparse/unit_test/Test_Sparse_mdf.hpp b/sparse/unit_test/Test_Sparse_mdf.hpp index 3fcd827292..41204c9b4d 100644 --- a/sparse/unit_test/Test_Sparse_mdf.hpp +++ b/sparse/unit_test/Test_Sparse_mdf.hpp @@ -32,6 +32,8 @@ void run_test_mdf() { using values_type = typename crs_matrix_type::values_type::non_const_type; using value_type = typename crs_matrix_type::value_type; + const value_type four = static_cast(4.0); + constexpr ordinal_type numRows = 16; constexpr ordinal_type numCols = 16; constexpr size_type numNonZeros = 64; @@ -70,8 +72,8 @@ void run_test_mdf() { KokkosSparse::Experimental::MDF_handle handle(A); handle.set_verbosity(0); - mdf_symbolic_phase(A, handle); - mdf_numeric_phase(A, handle); + KokkosSparse::Experimental::mdf_symbolic(A, handle); + KokkosSparse::Experimental::mdf_numeric(A, handle); col_ind_type permutation = handle.get_permutation(); @@ -83,20 +85,97 @@ void run_test_mdf() { 7, 11, 13, 14, 5, 6, 9, 10}; printf("MDF ordering: { "); for (ordinal_type idx = 0; idx < A.numRows(); ++idx) { - ; printf("%d ", static_cast(permutation_h(idx))); if (permutation_h(idx) != permutation_ref[idx]) { success = false; } } printf("}\n"); - EXPECT_TRUE(success) << "The permutation computed is different from the reference solution!"; + // Check the factors L and U handle.sort_factors(); crs_matrix_type U = handle.getU(); crs_matrix_type L = handle.getL(); + + EXPECT_TRUE(U.numRows() == 16); + EXPECT_TRUE(U.nnz() == 40); + + { + auto row_map_U = Kokkos::create_mirror(U.graph.row_map); + Kokkos::deep_copy(row_map_U, U.graph.row_map); + auto entries_U = Kokkos::create_mirror(U.graph.entries); + Kokkos::deep_copy(entries_U, U.graph.entries); + auto values_U = Kokkos::create_mirror(U.values); + Kokkos::deep_copy(values_U, U.values); + + const size_type row_map_U_ref[17] = {0, 3, 6, 9, 12, 15, 17, 20, 22, + 25, 27, 30, 32, 35, 37, 39, 40}; + const ordinal_type entries_U_ref[40] = { + 0, 4, 6, 1, 5, 8, 2, 7, 10, 3, 9, 11, 4, 5, + 12, 5, 13, 6, 7, 12, 7, 14, 8, 9, 13, 9, 15, 10, + 11, 14, 11, 15, 12, 13, 14, 13, 15, 14, 15, 15}; + + const scalar_type val0 = static_cast(15. / 4.); + const scalar_type val1 = static_cast(val0 - 1 / val0); + const scalar_type val2 = static_cast(4 - 2 / val0); + const scalar_type val3 = + static_cast(4 - 1 / val0 - 1 / val1 - 1 / val2); + const scalar_type val4 = static_cast(4 - 2 / val1 - 2 / val3); + const scalar_type values_U_ref[40] = { + 4, -1, -1, 4, -1, -1, 4, -1, -1, 4, -1, -1, val0, -1, -1, + val1, -1, val0, -1, -1, val1, -1, val0, -1, -1, val1, -1, val0, -1, -1, + val1, -1, val2, -1, -1, val3, -1, val3, -1, val4}; + + for (int idx = 0; idx < 17; ++idx) { + EXPECT_TRUE(row_map_U_ref[idx] == row_map_U(idx)) + << "rowmap_U(" << idx << ") is wrong!"; + } + for (int idx = 0; idx < 40; ++idx) { + EXPECT_TRUE(entries_U_ref[idx] == entries_U(idx)) + << "entries_U(" << idx << ") is wrong!"; + EXPECT_NEAR_KK(values_U_ref[idx], values_U(idx), + 10 * Kokkos::ArithTraits::eps(), + "An entry in U.values is wrong!"); + } + + auto row_map_L = Kokkos::create_mirror(L.graph.row_map); + Kokkos::deep_copy(row_map_L, L.graph.row_map); + auto entries_L = Kokkos::create_mirror(L.graph.entries); + Kokkos::deep_copy(entries_L, L.graph.entries); + auto values_L = Kokkos::create_mirror(L.values); + Kokkos::deep_copy(values_L, L.values); + + const size_type row_map_L_ref[17] = {0, 1, 2, 3, 4, 6, 9, 11, 14, + 16, 19, 21, 24, 27, 31, 35, 40}; + const ordinal_type entries_L_ref[40] = { + 0, 1, 2, 3, 0, 4, 1, 4, 5, 0, 6, 2, 6, 7, + 1, 8, 3, 8, 9, 2, 10, 3, 10, 11, 4, 6, 12, 5, + 8, 12, 13, 7, 10, 12, 14, 9, 11, 13, 14, 15}; + const scalar_type values_L_ref[40] = { + 1, 1, 1, 1, -1 / four, 1, + -1 / four, -1 / val0, 1, -1 / four, 1, -1 / four, + -1 / val0, 1, -1 / four, 1, -1 / four, -1 / val0, + 1, -1 / four, 1, -1 / four, -1 / val0, 1, + -1 / val0, -1 / val0, 1, -1 / val1, -1 / val0, -1 / val2, + 1, -1 / val1, -1 / val0, -1 / val2, 1, -1 / val1, + -1 / val1, -1 / val3, -1 / val3, 1}; + + for (int idx = 0; idx < 17; ++idx) { + EXPECT_TRUE(row_map_L_ref[idx] == row_map_L(idx)) + << "rowmap_L(" << idx << ")=" << row_map_L(idx) << " is wrong!"; + } + for (int idx = 0; idx < 40; ++idx) { + EXPECT_TRUE(entries_L_ref[idx] == entries_L(idx)) + << "entries_L(" << idx << ")=" << entries_L(idx) + << " is wrong, entries_L_ref[" << idx << "]=" << entries_L_ref[idx] + << "!"; + EXPECT_NEAR_KK(values_L_ref[idx], values_L(idx), + 10 * Kokkos::ArithTraits::eps(), + "An entry in L.values is wrong!"); + } + } } } // namespace Test From 112603b16955ebd85063ab5a3b6c743da1c719b1 Mon Sep 17 00:00:00 2001 From: Luc Berger Date: Mon, 13 Feb 2023 09:36:06 -0700 Subject: [PATCH 221/226] Merge pull request #1680 from lucbv/export_version_info CMake: export version and subversion to config file (cherry picked from commit c7765bc1da2f77385637cf120482feee288774df) --- CMakeLists.txt | 11 ++++- cmake/KokkosKernels_config.h.in | 6 ++- common/unit_test/Test_Common.hpp | 1 + common/unit_test/Test_Common_Version.hpp | 52 ++++++++++++++++++++++++ 4 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 common/unit_test/Test_Common_Version.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index ffb506d925..dd10d9c44f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,12 @@ IF(NOT KOKKOSKERNELS_HAS_TRILINOS) SET(KokkosKernels_VERSION_MINOR 0) SET(KokkosKernels_VERSION_PATCH 0) SET(KokkosKernels_VERSION "${KokkosKernels_VERSION_MAJOR}.${KokkosKernels_VERSION_MINOR}.${KokkosKernels_VERSION_PATCH}") + + #Set variables for config file MATH(EXPR KOKKOSKERNELS_VERSION "${KokkosKernels_VERSION_MAJOR} * 10000 + ${KokkosKernels_VERSION_MINOR} * 100 + ${KokkosKernels_VERSION_PATCH}") + MATH(EXPR KOKKOSKERNELS_VERSION_MAJOR "${KOKKOSKERNELS_VERSION} / 10000") + MATH(EXPR KOKKOSKERNELS_VERSION_MINOR "${KOKKOSKERNELS_VERSION} / 100 % 100") + MATH(EXPR KOKKOSKERNELS_VERSION_PATCH "${KOKKOSKERNELS_VERSION} % 100") ENDIF() INCLUDE(GNUInstallDirs) @@ -214,7 +219,9 @@ ELSE() # CMake Summary # ================================================================== MESSAGE("") - MESSAGE("=======================") + MESSAGE("================================") + MESSAGE("Kokkos Kernels version: ${KokkosKernels_VERSION_MAJOR}.${KokkosKernels_VERSION_MINOR}.${KokkosKernels_VERSION_PATCH}") + MESSAGE("================================") MESSAGE("Kokkos Kernels ETI Types") MESSAGE(" Devices: ${DEVICE_LIST}") MESSAGE(" Scalars: ${SCALAR_LIST}") @@ -238,7 +245,7 @@ ELSE() ELSE() MESSAGE(" (None)") ENDIF() - MESSAGE("=======================") + MESSAGE("================================") MESSAGE("") diff --git a/cmake/KokkosKernels_config.h.in b/cmake/KokkosKernels_config.h.in index 1fb6a31544..22a6cd9416 100644 --- a/cmake/KokkosKernels_config.h.in +++ b/cmake/KokkosKernels_config.h.in @@ -9,7 +9,11 @@ // clang-format on /* Define the current version of Kokkos Kernels */ -#cmakedefine KOKKOSKERNELS_VERSION @KOKKOSKERNELS_VERSION@ +#define KOKKOSKERNELS_VERSION @KOKKOSKERNELS_VERSION@ +#define KOKKOSKERNELS_VERSION_MAJOR @KOKKOSKERNELS_VERSION_MAJOR@ +#define KOKKOSKERNELS_VERSION_MINOR @KOKKOSKERNELS_VERSION_MINOR@ +#define KOKKOSKERNELS_VERSION_PATCH @KOKKOSKERNELS_VERSION_PATCH@ + /* Define if fortran blas 1 function can return complex type */ #cmakedefine KOKKOSKERNELS_TPL_BLAS_RETURN_COMPLEX diff --git a/common/unit_test/Test_Common.hpp b/common/unit_test/Test_Common.hpp index 9cf686f513..dd368f009b 100644 --- a/common/unit_test/Test_Common.hpp +++ b/common/unit_test/Test_Common.hpp @@ -22,5 +22,6 @@ #include #include #include +#include #endif // TEST_COMMON_HPP diff --git a/common/unit_test/Test_Common_Version.hpp b/common/unit_test/Test_Common_Version.hpp new file mode 100644 index 0000000000..cb5265cfef --- /dev/null +++ b/common/unit_test/Test_Common_Version.hpp @@ -0,0 +1,52 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + +/// \file Test_Common_Version.hpp +/// \brief Tests that the version information that Kokkos Kernels +/// makes available in KokkosKernels_config.h is properly +/// accessible and correct. + +#ifndef TEST_COMMON_VERSION_HPP +#define TEST_COMMON_VERSION_HPP + +#include +#include + +void test_version_info() { +#ifndef KOKKOSKERNELS_VERSION + static_assert(false, "KOKKOSKERNELS_VERSION macro is not defined!"); +#endif + +#ifndef KOKKOSKERNELS_VERSION_MAJOR + static_assert(false, "KOKKOSKERNELS_VERSION_MAJOR macro is not defined!"); +#endif + +#ifndef KOKKOSKERNELS_VERSION_MINOR + static_assert(false, "KOKKOSKERNELS_VERSION_MINOR macro is not defined!"); +#endif + +#ifndef KOKKOSKERNELS_VERSION_PATCH + static_assert(false, "KOKKOSKERNELS_VERSION_PATCH macro is not defined!"); +#endif + + static_assert(KOKKOSKERNELS_VERSION == (KOKKOSKERNELS_VERSION_MAJOR * 10000 + + KOKKOSKERNELS_VERSION_MINOR * 100 + + KOKKOSKERNELS_VERSION_PATCH)); +} + +TEST_F(TestCategory, common_version) { test_version_info(); } + +#endif // TEST_COMMON_VERSION_HPP From a501825354eca47b833709762916e24aaf202394 Mon Sep 17 00:00:00 2001 From: Luc Berger Date: Thu, 16 Feb 2023 17:37:34 -0700 Subject: [PATCH 222/226] Merge pull request #1687 from lucbv/version_integration_fix Versions: fixing the CMake logic to export Kokkos Kernels version (cherry picked from commit 6d73c141ea9ab21ab6eef3e63d54feb04979f05e) --- CMakeLists.txt | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dd10d9c44f..8166d846fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,17 @@ GET_DIRECTORY_PROPERTY(KOKKOSKERNELS_HAS_PARENT PARENT_DIRECTORY) SET(KOKKOSKERNELS_TOP_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}) SET(KOKKOSKERNELS_TOP_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +SET(KokkosKernels_VERSION_MAJOR 4) +SET(KokkosKernels_VERSION_MINOR 0) +SET(KokkosKernels_VERSION_PATCH 0) +SET(KokkosKernels_VERSION "${KokkosKernels_VERSION_MAJOR}.${KokkosKernels_VERSION_MINOR}.${KokkosKernels_VERSION_PATCH}") + +#Set variables for config file +MATH(EXPR KOKKOSKERNELS_VERSION "${KokkosKernels_VERSION_MAJOR} * 10000 + ${KokkosKernels_VERSION_MINOR} * 100 + ${KokkosKernels_VERSION_PATCH}") +MATH(EXPR KOKKOSKERNELS_VERSION_MAJOR "${KOKKOSKERNELS_VERSION} / 10000") +MATH(EXPR KOKKOSKERNELS_VERSION_MINOR "${KOKKOSKERNELS_VERSION} / 100 % 100") +MATH(EXPR KOKKOSKERNELS_VERSION_PATCH "${KOKKOSKERNELS_VERSION} % 100") + IF(NOT KOKKOSKERNELS_HAS_TRILINOS) cmake_minimum_required(VERSION 3.16 FATAL_ERROR) IF (Spack_WORKAROUND) @@ -23,16 +34,6 @@ IF(NOT KOKKOSKERNELS_HAS_TRILINOS) IF(NOT DEFINED ${PROJECT_NAME}) PROJECT(KokkosKernels CXX) ENDIF() - SET(KokkosKernels_VERSION_MAJOR 4) - SET(KokkosKernels_VERSION_MINOR 0) - SET(KokkosKernels_VERSION_PATCH 0) - SET(KokkosKernels_VERSION "${KokkosKernels_VERSION_MAJOR}.${KokkosKernels_VERSION_MINOR}.${KokkosKernels_VERSION_PATCH}") - - #Set variables for config file - MATH(EXPR KOKKOSKERNELS_VERSION "${KokkosKernels_VERSION_MAJOR} * 10000 + ${KokkosKernels_VERSION_MINOR} * 100 + ${KokkosKernels_VERSION_PATCH}") - MATH(EXPR KOKKOSKERNELS_VERSION_MAJOR "${KOKKOSKERNELS_VERSION} / 10000") - MATH(EXPR KOKKOSKERNELS_VERSION_MINOR "${KOKKOSKERNELS_VERSION} / 100 % 100") - MATH(EXPR KOKKOSKERNELS_VERSION_PATCH "${KOKKOSKERNELS_VERSION} % 100") ENDIF() INCLUDE(GNUInstallDirs) From c784cb7955050213932eadd83e3a52a1f3b2d0df Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Tue, 21 Feb 2023 13:58:15 -0700 Subject: [PATCH 223/226] Update changelog to 4.0.0 --- CHANGELOG.md | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc04a9b6f0..246ef0a603 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,97 @@ # Change Log +## [4.0.0](https://github.com/kokkos/kokkos-kernels/tree/4.0.0) (2023-21-02) +[Full Changelog](https://github.com/kokkos/kokkos-kernels/compare/3.7.01...4.0.0) + +### Features: +- Copyright update 4.0 [\#1657](https://github.com/kokkos/kokkos-kernels/pull/1657) +- Added google benchmark to kokkos kernel and to the CI [\#1626](https://github.com/kokkos/kokkos-kernels/pull/1626) +- SWAP: adding implementation of level 1 BLAS function [\#1612](https://github.com/kokkos/kokkos-kernels/pull/1612) +- VBD/VBDBIT D1 coloring: support distributed graphs [\#1598](https://github.com/kokkos/kokkos-kernels/pull/1598) +- ROTM: adding blas 1 function for modified rotation [\#1583](https://github.com/kokkos/kokkos-kernels/pull/1583) +- ROT: adding function to rotate two vector using Givens rotation coefficients [\#1581](https://github.com/kokkos/kokkos-kernels/pull/1581) +- ROTMG: adding rotmg implementation to KokkosBlas [\#1560](https://github.com/kokkos/kokkos-kernels/pull/1560) +- Rotg: implementation of BLAS level1 rotg [\#1529](https://github.com/kokkos/kokkos-kernels/pull/1529) +- Add spgemm TPL support for cuSparse and rocSparse [\#1513](https://github.com/kokkos/kokkos-kernels/pull/1513) +- Jgfouca/par ilut [\#1506](https://github.com/kokkos/kokkos-kernels/pull/1506) +- Add csr2csc [\#1446](https://github.com/kokkos/kokkos-kernels/pull/1446) +- MDF implementation in parallel [\#1393](https://github.com/kokkos/kokkos-kernels/pull/1393) +- Adding my weighted graph coarsening code into kokkos-kernels [\#1043](https://github.com/kokkos/kokkos-kernels/pull/1043) + +### Implemented enhancements: +- Remove "slow mem space" device ETI [\#1619](https://github.com/kokkos/kokkos-kernels/pull/1619) +- First phase of SpGEMM TPL refactor [\#1582](https://github.com/kokkos/kokkos-kernels/pull/1582) +- Spgemm TPL refactor [\#1618](https://github.com/kokkos/kokkos-kernels/pull/1618) +- cleaned messages printed at configuration time [\#1616](https://github.com/kokkos/kokkos-kernels/pull/1616) +- Batched dense tests: splitting batched dense unit-tests [\#1608](https://github.com/kokkos/kokkos-kernels/pull/1608) +- sparse/unit_test: Use native spmv impl in bsr unit tests [\#1606](https://github.com/kokkos/kokkos-kernels/pull/1606) +- ROT* HIP: testing and improving rocBLAS support for ROT* kernels [\#1594](https://github.com/kokkos/kokkos-kernels/pull/1594) +- Add main functions for batched sparse solver performance tests [\#1554](https://github.com/kokkos/kokkos-kernels/pull/1554) +- Batched sparse kernels update [\#1546](https://github.com/kokkos/kokkos-kernels/pull/1546) +- supernodal SpTRSV : require invert-diag option to use SpMV [\#1518](https://github.com/kokkos/kokkos-kernels/pull/1518) +- Update --verbose option in D2 coloring perftest [\#1486](https://github.com/kokkos/kokkos-kernels/pull/1486) + +### Reorganization: +- Modular build: allowing to build components independently [\#1504](https://github.com/kokkos/kokkos-kernels/pull/1504) +- Move GMRES from example to sparse experimental [\#1620](https://github.com/kokkos/kokkos-kernels/pull/1620) +- Remove Experimental::BlockCrsMatrix (replaced with Experimental::BsrMatrix) [\#1458](https://github.com/kokkos/kokkos-kernels/pull/1458) +- Move {Team,TeamVector}Gemv to KokkosBlas [\#1435](https://github.com/kokkos/kokkos-kernels/pull/1435) +- Move SerialGEMV to KokkosBlas [\#1433](https://github.com/kokkos/kokkos-kernels/pull/1433) + +### Build System: +- CMake: update package COMPATIBILITY mode in anticipation of release 4.0 [\#1645](https://github.com/kokkos/kokkos-kernels/pull/1645) +- FindTPLMKL.cmake: fix naming of mkl arg to FIND_PACKAGE_HANDLE_STANDA… [\#1644](https://github.com/kokkos/kokkos-kernels/pull/1644) +- KokkosKernels: Use KOKKOSKERNELS_INCLUDE_DIRECTORIES() (TriBITSPub/TriBITS#429) [\#1635](https://github.com/kokkos/kokkos-kernels/pull/1635) +- Fix docs build [\#1569](https://github.com/kokkos/kokkos-kernels/pull/1569) +- KokkosKernels: Remove listing of undefined TPL deps (trilinos/Trilinos#11152) [\#1568](https://github.com/kokkos/kokkos-kernels/pull/1568) + +### Testing: +- Update nightly SYCL setup [\#1660](https://github.com/kokkos/kokkos-kernels/pull/1660) +- Add github DOCS ci check & disable Kokkos tests [\#1647](https://github.com/kokkos/kokkos-kernels/pull/1647) +- docs: Fix RTD build [\#1490](https://github.com/kokkos/kokkos-kernels/pull/1490) +- sparse/unit_test: Disable spmv_mv_heavy for all A64FX builds [\#1555](https://github.com/kokkos/kokkos-kernels/pull/1555) +- ROTMG: rocblas TPL turned off [\#1603](https://github.com/kokkos/kokkos-kernels/pull/1603) +- Fix HIP nightly build on ORNL Jenkins CI server [\#1544](https://github.com/kokkos/kokkos-kernels/pull/1544) +- Turn on cublas and cusparse in CLANG13CUDA10 CI check [\#1584](https://github.com/kokkos/kokkos-kernels/pull/1584) +- Add clang13+cuda10 PR build [\#1524](https://github.com/kokkos/kokkos-kernels/pull/1524) +- .githob/workflows: Fix redundant workflow triggers [\#1527](https://github.com/kokkos/kokkos-kernels/pull/1527) +- Add GCC test options for C++17 and disable perftests for INTEL19 [\#1511](https://github.com/kokkos/kokkos-kernels/pull/1511) +- Add INTEL19 and CUDA11 CI settings [\#1505](https://github.com/kokkos/kokkos-kernels/pull/1505) +- .github/workflows: use c++17 [\#1484](https://github.com/kokkos/kokkos-kernels/pull/1484) + +### Bug Fixes: +- Fix an error in Krylov Handle documentation [\#1659](https://github.com/kokkos/kokkos-kernels/pull/1659) +- ROTMG: loosen unit-test tolerance for Host TPLs [\#1638](https://github.com/kokkos/kokkos-kernels/pull/1638) +- SWAP: fixing obvious mistake in TPL layer : ( [\#1637](https://github.com/kokkos/kokkos-kernels/pull/1637) +- Fix 1631: Use Kokkos::LayoutRight with CrsMatrix values_type (Trilinos compatibility) [\#1633](https://github.com/kokkos/kokkos-kernels/pull/1633) +- Cuda/12 with CuSPARSE updates [\#1632](https://github.com/kokkos/kokkos-kernels/pull/1632) +- Fix 1627: cusparse 11.0-11.3 spgemm symbolic wrapper [\#1628](https://github.com/kokkos/kokkos-kernels/pull/1628) +- Make sure to call ExecutionSpace::concurrency() from an object [\#1614](https://github.com/kokkos/kokkos-kernels/pull/1614) +- SPGEMM: fixing the rocsparse interface [\#1607](https://github.com/kokkos/kokkos-kernels/pull/1607) +- Fix Trilinos issue 11033: remove compile time check to allow compilation with non-standard scalar types [\#1591](https://github.com/kokkos/kokkos-kernels/pull/1591) +- SPMM: fixing cuSPARSE issue with incompatible compute type and op [\#1587](https://github.com/kokkos/kokkos-kernels/pull/1587) +- ParILUT: convert two lambdas to functors [\#1580](https://github.com/kokkos/kokkos-kernels/pull/1580) +- Update kk_get_free_total_memory for SYCL [\#1579](https://github.com/kokkos/kokkos-kernels/pull/1579) +- SYCL: Use KOKKOS_IMPL_DO_NOT_USE_PRINTF instead of printf in kernels [\#1567](https://github.com/kokkos/kokkos-kernels/pull/1567) +- Rotg fixes for issue 1577 [\#1578](https://github.com/kokkos/kokkos-kernels/pull/1578) +- Rotg update: fixing the interface [\#1566](https://github.com/kokkos/kokkos-kernels/pull/1566) +- Fix rotg eti [\#1534](https://github.com/kokkos/kokkos-kernels/pull/1534) +- Fix to include KokkosBatched_Util.hpp [\#1565](https://github.com/kokkos/kokkos-kernels/pull/1565) +- TeamGemvInternal: reintroduce 12-arg invoke method [\#1561](https://github.com/kokkos/kokkos-kernels/pull/1561) +- Rename component options to avoid overloaded usage in Trilinos [\#1641](https://github.com/kokkos/kokkos-kernels/pull/1641) +- Avoid the SIMD code branch if the batched size is not a multiple of the vector length [\#1552](https://github.com/kokkos/kokkos-kernels/pull/1552) +- SYCL: Fix linking with ze_loader in Trilinos [\#1551](https://github.com/kokkos/kokkos-kernels/pull/1551) +- ARMPL Fixes and Workarounds [\#1543](https://github.com/kokkos/kokkos-kernels/pull/1543) +- Test_Graph_coarsen: replace HostMirror usage with auto [\#1538](https://github.com/kokkos/kokkos-kernels/pull/1538) +- Fix spgemm cusparse [\#1535](https://github.com/kokkos/kokkos-kernels/pull/1535) +- Warning fixes: Apple Clang complains about [-Werror,-Wunused-but-set-variable] [\#1532](https://github.com/kokkos/kokkos-kernels/pull/1532) +- In src/batched/dense: Barrier after broadcast [\#1520](https://github.com/kokkos/kokkos-kernels/pull/1520) +- Graph coarsen: fix test [\#1517](https://github.com/kokkos/kokkos-kernels/pull/1517) +- KokkosGraph_CoarsenHeuristics: remove volatile qualifier from join [\#1510](https://github.com/kokkos/kokkos-kernels/pull/1510) +- Replace capture [\#1502](https://github.com/kokkos/kokkos-kernels/pull/1502) +- utils: implicit copy-assign deprecated in array_sum_reduce [\#1494](https://github.com/kokkos/kokkos-kernels/pull/1494) + + ## [3.7.01](https://github.com/kokkos/kokkos-kernels/tree/3.7.01) (2022-12-01) [Full Changelog](https://github.com/kokkos/kokkos-kernels/compare/3.7.00...3.7.01) From a572c8153d41e757d2c288b1b055aa5c67c4ff43 Mon Sep 17 00:00:00 2001 From: Luc Berger Date: Wed, 22 Feb 2023 17:58:25 -0700 Subject: [PATCH 224/226] Editing the new features section a bit --- CHANGELOG.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 246ef0a603..0a8575fce3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,17 +6,23 @@ ### Features: - Copyright update 4.0 [\#1657](https://github.com/kokkos/kokkos-kernels/pull/1657) - Added google benchmark to kokkos kernel and to the CI [\#1626](https://github.com/kokkos/kokkos-kernels/pull/1626) -- SWAP: adding implementation of level 1 BLAS function [\#1612](https://github.com/kokkos/kokkos-kernels/pull/1612) -- VBD/VBDBIT D1 coloring: support distributed graphs [\#1598](https://github.com/kokkos/kokkos-kernels/pull/1598) -- ROTM: adding blas 1 function for modified rotation [\#1583](https://github.com/kokkos/kokkos-kernels/pull/1583) + +#### Completing BLAS Level 1: +- ROTG: implementation of BLAS level1 rotg [\#1529](https://github.com/kokkos/kokkos-kernels/pull/1529) - ROT: adding function to rotate two vector using Givens rotation coefficients [\#1581](https://github.com/kokkos/kokkos-kernels/pull/1581) - ROTMG: adding rotmg implementation to KokkosBlas [\#1560](https://github.com/kokkos/kokkos-kernels/pull/1560) -- Rotg: implementation of BLAS level1 rotg [\#1529](https://github.com/kokkos/kokkos-kernels/pull/1529) -- Add spgemm TPL support for cuSparse and rocSparse [\#1513](https://github.com/kokkos/kokkos-kernels/pull/1513) +- ROTM: adding blas 1 function for modified rotation [\#1583](https://github.com/kokkos/kokkos-kernels/pull/1583) +- SWAP: adding implementation of level 1 BLAS function [\#1612](https://github.com/kokkos/kokkos-kernels/pull/1612) + +#### New incomplete factorization algorithms: +- MDF implementation in parallel [\#1393](https://github.com/kokkos/kokkos-kernels/pull/1393) - Jgfouca/par ilut [\#1506](https://github.com/kokkos/kokkos-kernels/pull/1506) + +#### New additional features +- Add spgemm TPL support for cuSparse and rocSparse [\#1513](https://github.com/kokkos/kokkos-kernels/pull/1513) - Add csr2csc [\#1446](https://github.com/kokkos/kokkos-kernels/pull/1446) -- MDF implementation in parallel [\#1393](https://github.com/kokkos/kokkos-kernels/pull/1393) - Adding my weighted graph coarsening code into kokkos-kernels [\#1043](https://github.com/kokkos/kokkos-kernels/pull/1043) +- VBD/VBDBIT D1 coloring: support distributed graphs [\#1598](https://github.com/kokkos/kokkos-kernels/pull/1598) ### Implemented enhancements: - Remove "slow mem space" device ETI [\#1619](https://github.com/kokkos/kokkos-kernels/pull/1619) From ed5ab13316bf4a9197264beb6878a2e282e490dc Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Thu, 23 Feb 2023 11:46:13 -0700 Subject: [PATCH 225/226] CHANGELOG: Add missing cherry-pick PRs --- CHANGELOG.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a8575fce3..fa19491753 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,16 +15,19 @@ - SWAP: adding implementation of level 1 BLAS function [\#1612](https://github.com/kokkos/kokkos-kernels/pull/1612) #### New incomplete factorization algorithms: -- MDF implementation in parallel [\#1393](https://github.com/kokkos/kokkos-kernels/pull/1393) +- MDF implementation in parallel [\#1393](https://github.com/kokkos/kokkos-kernels/pull/1393) and [\#1624](https://github.com/kokkos/kokkos-kernels/pull/1624) - Jgfouca/par ilut [\#1506](https://github.com/kokkos/kokkos-kernels/pull/1506) #### New additional features +- Add utility `KokkosSparse::removeCrsMatrixZeros` [\#1681](https://github.com/kokkos/kokkos-kernels/pull/1681) - Add spgemm TPL support for cuSparse and rocSparse [\#1513](https://github.com/kokkos/kokkos-kernels/pull/1513) - Add csr2csc [\#1446](https://github.com/kokkos/kokkos-kernels/pull/1446) - Adding my weighted graph coarsening code into kokkos-kernels [\#1043](https://github.com/kokkos/kokkos-kernels/pull/1043) - VBD/VBDBIT D1 coloring: support distributed graphs [\#1598](https://github.com/kokkos/kokkos-kernels/pull/1598) ### Implemented enhancements: +- New tests for mixed-precision GEMM, some fixes for BLAS tests with non-ETI types [\#1615](https://github.com/kokkos/kokkos-kernels/pull/1615) +- Spgemm non-reuse: unification layer and TPLs [\#1678](https://github.com/kokkos/kokkos-kernels/pull/1678) - Remove "slow mem space" device ETI [\#1619](https://github.com/kokkos/kokkos-kernels/pull/1619) - First phase of SpGEMM TPL refactor [\#1582](https://github.com/kokkos/kokkos-kernels/pull/1582) - Spgemm TPL refactor [\#1618](https://github.com/kokkos/kokkos-kernels/pull/1618) @@ -45,8 +48,9 @@ - Move SerialGEMV to KokkosBlas [\#1433](https://github.com/kokkos/kokkos-kernels/pull/1433) ### Build System: +- CMake: export version and subversion to config file [\#1680](https://github.com/kokkos/kokkos-kernels/pull/1680) - CMake: update package COMPATIBILITY mode in anticipation of release 4.0 [\#1645](https://github.com/kokkos/kokkos-kernels/pull/1645) -- FindTPLMKL.cmake: fix naming of mkl arg to FIND_PACKAGE_HANDLE_STANDA… [\#1644](https://github.com/kokkos/kokkos-kernels/pull/1644) +- FindTPLMKL.cmake: fix naming of mkl arg to FIND_PACKAGE_HANDLE_STANDARD_ARGS [\#1644](https://github.com/kokkos/kokkos-kernels/pull/1644) - KokkosKernels: Use KOKKOSKERNELS_INCLUDE_DIRECTORIES() (TriBITSPub/TriBITS#429) [\#1635](https://github.com/kokkos/kokkos-kernels/pull/1635) - Fix docs build [\#1569](https://github.com/kokkos/kokkos-kernels/pull/1569) - KokkosKernels: Remove listing of undefined TPL deps (trilinos/Trilinos#11152) [\#1568](https://github.com/kokkos/kokkos-kernels/pull/1568) @@ -66,6 +70,8 @@ - .github/workflows: use c++17 [\#1484](https://github.com/kokkos/kokkos-kernels/pull/1484) ### Bug Fixes: +- Workaround for array_sum_reduce if scalar is half_t and N is 3, 5 or 7 [\#1675](https://github.com/kokkos/kokkos-kernels/pull/1675) +- Fix the nondeterministic issue in SPILUK numeric [\#1683](https://github.com/kokkos/kokkos-kernels/pull/1683) - Fix an error in Krylov Handle documentation [\#1659](https://github.com/kokkos/kokkos-kernels/pull/1659) - ROTMG: loosen unit-test tolerance for Host TPLs [\#1638](https://github.com/kokkos/kokkos-kernels/pull/1638) - SWAP: fixing obvious mistake in TPL layer : ( [\#1637](https://github.com/kokkos/kokkos-kernels/pull/1637) From 518efd270918e739d4e0106f5bc1aedd8c99d464 Mon Sep 17 00:00:00 2001 From: Nathan Ellingwood Date: Thu, 23 Feb 2023 20:56:11 -0700 Subject: [PATCH 226/226] Update master_history.txt for 4.0.0 --- master_history.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/master_history.txt b/master_history.txt index f2632e4fbb..a252fcb06e 100644 --- a/master_history.txt +++ b/master_history.txt @@ -19,3 +19,4 @@ tag: 3.6.00 date: 04/06/2022 master: 8381db04 release: a7e683c4 tag: 3.6.01 date: 05/23/2022 master: e09389ae release: e1d8de42 tag: 3.7.00 date: 08/25/2022 master: 42ab7a29 release: 9cc88ffa tag: 3.7.01 date: 12/01/2022 master: 04821ac3 release: 6cb632b6 +tag: 4.0.0 date: 02/32/2023 master: b4014bf2 release: a10dff20